[
  {
    "path": ".changeset/README.md",
    "content": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works\nwith multi-package repos, or single-package repos to help you version and publish your code. You can\nfind the full documentation for it [in our repository](https://github.com/changesets/changesets)\n\nWe have a quick list of common questions to get you started engaging with this project in\n[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)\n"
  },
  {
    "path": ".changeset/config.json",
    "content": "{\n\t\"$schema\": \"https://unpkg.com/@changesets/config@2.3.0/schema.json\",\n\t\"changelog\": [\"@svitejs/changesets-changelog-github-compact\", { \"repo\": \"sveltejs/svelte\" }],\n\t\"commit\": false,\n\t\"fixed\": [],\n\t\"linked\": [],\n\t\"access\": \"public\",\n\t\"baseBranch\": \"main\",\n\t\"bumpVersionsWithWorkspaceProtocolOnly\": true,\n\t\"ignore\": [\"!(@sveltejs/*|svelte)\"]\n}\n"
  },
  {
    "path": ".changeset/const-tags.md",
    "content": "---\n'svelte': patch\n---\n\nfix: invalidate `@const` tags based on visible references in legacy mode\n"
  },
  {
    "path": ".changeset/evil-chicken-attend.md",
    "content": "---\n'svelte': patch\n---\n\nfix: disallow `--` in `idPrefix`\n"
  },
  {
    "path": ".changeset/orange-geckos-rest.md",
    "content": "---\n'svelte': patch\n---\n\nfix: don't override `$destroy/set/on` instance methods in dev mode\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\nindent_style = tab\ncharset = utf-8\ntrim_trailing_whitespace = true\n\n[test/**/expected.css]\ninsert_final_newline = false\n\n[package.json]\nindent_style = space\n"
  },
  {
    "path": ".gitattributes",
    "content": "/site/** -linguist-detectable\n/test/**/samples/** -linguist-detectable\n/**/*.svelte linguist-detectable\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "open_collective: svelte\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: \"\\U0001F41E Bug report\"\ndescription: Report an issue with Svelte\nlabels: ['triage: bug']\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report!\n  - type: textarea\n    id: bug-description\n    attributes:\n      label: Describe the bug\n      description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks!\n      placeholder: Bug description\n    validations:\n      required: true\n  - type: textarea\n    id: reproduction\n    attributes:\n      label: Reproduction\n      description: Please provide a link to a repo or REPL that can reproduce the problem you ran into. If a report is vague (e.g. just a generic error message) and has no reproduction, it will receive a \"need reproduction\" label. If no reproduction is provided within a reasonable time-frame, the issue will be closed.\n      placeholder: Reproduction\n    validations:\n      required: true\n  - type: textarea\n    id: logs\n    attributes:\n      label: Logs\n      description: 'Please include browser console and server logs around the time this bug occurred. Optional if provided reproduction. Please try not to insert an image but copy paste the log text.'\n      render: shell\n  - type: textarea\n    id: system-info\n    attributes:\n      label: System Info\n      description: Output of `npx envinfo --system --npmPackages svelte,rollup,webpack --binaries --browsers`\n      render: shell\n      placeholder: System, Binaries, Browsers\n    validations:\n      required: true\n  - type: dropdown\n    id: severity\n    attributes:\n      label: Severity\n      description: Select the severity of this issue\n      options:\n        - annoyance\n        - blocking an upgrade\n        - blocking all usage of svelte\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Discord Chat\n    url: https://svelte.dev/chat\n    about: Ask questions and discuss with other Svelte users in real time.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: 'Feature Request'\ndescription: Request a new Svelte feature\nlabels: [enhancement]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to request this feature! If your feature request is complex or substantial enough to warrant in-depth discussion, maintainers may close the issue and ask you to open an [RFC](https://github.com/sveltejs/rfcs).\n  - type: textarea\n    id: problem\n    attributes:\n      label: Describe the problem\n      description: Please provide a clear and concise description the problem this feature would solve. The more information you can provide here, the better.\n      placeholder: I'm always frustrated when...\n    validations:\n      required: true\n  - type: textarea\n    id: solution\n    attributes:\n      label: Describe the proposed solution\n      description: Please provide a clear and concise description of what you would like to happen.\n      placeholder: I would like to see...\n    validations:\n      required: true\n  - type: dropdown\n    id: importance\n    attributes:\n      label: Importance\n      description: How important is this feature to you?\n      options:\n        - nice to have\n        - would make my life easier\n        - i cannot use svelte without it\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "---\nBefore filing an issue we'd appreciate it if you could take a moment to ensure\nthere isn't already an open issue or pull-request.\n---\n\nIf there's an existing issue, please add a :+1: reaction to the description of\nthe issue. One way we prioritize issues is by the number of :+1: reactions on\ntheir descriptions. Please DO NOT add `+1` or :+1: comments.\n\n### Feature requests and proposals\n\nWe're excited to hear how we can make Svelte better. Please add as much detail\nas you can on your use case. To propose an implementation of a large feature or\nchange, please create an [RFC](https://github.com/sveltejs/rfcs).\n\n### Bugs\n\nIf you're filing an issue about a bug please include as much information\nas you can including the following.\n\n- Your browser and the version: (e.x. Chrome 52.1, Firefox 48.0, IE 10)\n- Your operating system: (e.x. OS X 10, Windows XP, etc)\n- Svelte version (Please check you can reproduce the issue with the latest release!)\n- Whether your project uses Webpack or Rollup\n\n- _Repeatable steps to reproduce the issue_\n\n## Thanks for being part of Svelte!\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "### Before submitting the PR, please make sure you do the following\n\n- [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs\n- [ ] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`.\n- [ ] This message body should clearly illustrate what problems it solves.\n- [ ] Ideally, include a test that fails without this PR but passes with it.\n- [ ] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`).\n\n### Tests and linting\n\n- [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint`\n"
  },
  {
    "path": ".github/workflows/autofix.yml",
    "content": "name: Autofix Lint\n\non:\n  issue_comment:\n    types: [created]\n  workflow_dispatch:\n\npermissions: {}\n\njobs:\n  autofix-lint:\n    permissions:\n      contents: write # to push the generated types commit\n      pull-requests: read # to resolve the PR head ref\n    # prevents this action from running on forks\n    if: |\n      github.repository == 'sveltejs/svelte' &&\n      (\n        github.event_name == 'workflow_dispatch' ||\n        (\n          github.event.issue.pull_request != null &&\n          github.event.comment.body == '/autofix' &&\n          contains(fromJSON('[\"OWNER\", \"MEMBER\", \"COLLABORATOR\"]'), github.event.comment.author_association)\n        )\n      )\n    runs-on: ubuntu-latest\n    steps:\n      - name: Get PR ref\n        if: github.event_name != 'workflow_dispatch'\n        id: pr\n        uses: actions/github-script@v8\n        with:\n          script: |\n            const { data: pull } = await github.rest.pulls.get({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              pull_number: context.issue.number\n            });\n            if (pull.head.repo.full_name !== `${context.repo.owner}/${context.repo.repo}`) {\n              await github.rest.issues.createComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: context.issue.number,\n                body: 'Cannot autofix: this PR is from a forked repository. The autofix workflow can only push to branches within this repository.'\n              });\n              core.setFailed('PR is from a fork');\n            }\n            core.setOutput('ref', pull.head.ref);\n      - uses: actions/checkout@v6\n        if: github.event_name == 'workflow_dispatch' || steps.pr.outcome == 'success'\n        with:\n          ref: ${{ github.event_name == 'workflow_dispatch' && github.ref || steps.pr.outputs.ref }}\n      - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 24\n          cache: pnpm\n      - run: pnpm install --frozen-lockfile\n      - name: Build\n        run: pnpm -F svelte build\n      - name: Run prettier\n        run: pnpm format\n      - name: Commit changes\n        run: |\n          git config user.name \"github-actions[bot]\"\n          git config user.email \"github-actions[bot]@users.noreply.github.com\"\n          git add -A\n          git diff --staged --quiet || git commit -m \"chore: autofix\"\n          git push origin HEAD\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\non:\n  push:\n    branches: [main]\n  pull_request:\npermissions:\n  contents: read # to fetch code (actions/checkout)\n\nenv:\n  # We only install Chromium manually\n  PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1'\n\njobs:\n  Tests:\n    permissions: {}\n    runs-on: ${{ matrix.os }}\n    timeout-minutes: 15\n    strategy:\n      matrix:\n        include:\n          - node-version: 18\n            os: windows-latest\n          - node-version: 18\n            os: macOS-latest\n          - node-version: 18\n            os: ubuntu-latest\n          - node-version: 20\n            os: ubuntu-latest\n          - node-version: 22\n            os: ubuntu-latest\n          - node-version: 24\n            os: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - uses: actions/setup-node@v6\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: pnpm\n      - run: pnpm install --frozen-lockfile\n      - run: pnpm playwright install chromium\n      - run: pnpm test\n        env:\n          CI: true\n  TestNoAsync:\n    permissions: {}\n    runs-on: ubuntu-latest\n    timeout-minutes: 10\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 22\n          cache: pnpm\n      - run: pnpm install --frozen-lockfile\n      - run: pnpm playwright install chromium\n      - run: pnpm test runtime-runes\n        env:\n          CI: true\n          SVELTE_NO_ASYNC: true\n  TSGo:\n    permissions: {}\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 24\n          cache: pnpm\n      - name: install\n        run: pnpm install --frozen-lockfile\n      - name: install tsgo\n        run: cd packages/svelte && pnpm i -D @typescript/native-preview\n      - name: type check\n        run: cd packages/svelte && pnpm check:tsgo\n  Lint:\n    permissions: {}\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 24\n          cache: pnpm\n      - name: install\n        run: pnpm install --frozen-lockfile\n      - name: type check\n        run: pnpm check\n      - name: lint\n        if: (${{ success() }} || ${{ failure() }}) # ensures this step runs even if previous steps fail (avoids multiple runs uncovering different issues at different steps)\n        run: pnpm lint\n      - name: build and check generated types\n        if: (${{ success() }} || ${{ failure() }}) # ensures this step runs even if previous steps fail\n        run: pnpm build && { [ \"`git status --porcelain=v1`\" == \"\" ] || (echo \"Generated types have changed — please regenerate types locally with `cd packages/svelte && pnpm generate:types` and commit the changes after you have reviewed them\"; git diff; exit 1); }\n  Benchmarks:\n    permissions: {}\n    runs-on: ubuntu-latest\n    timeout-minutes: 15\n    steps:\n      - uses: actions/checkout@v6\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 24\n          cache: pnpm\n      - run: pnpm install --frozen-lockfile\n      - run: pnpm bench\n        env:\n          CI: true\n"
  },
  {
    "path": ".github/workflows/ecosystem-ci-trigger.yml",
    "content": "name: ecosystem-ci trigger\n\non:\n  issue_comment:\n    types: [created]\n\npermissions: {}\n\njobs:\n  trigger:\n    runs-on: ubuntu-latest\n    if: github.repository == 'sveltejs/svelte' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/ecosystem-ci run')\n    permissions:\n      issues: write # to add / delete reactions, post comments\n      pull-requests: write # to read PR data, and to add labels\n      actions: read # to check workflow status\n      contents: read # to clone the repo\n    steps:\n      - name: Check User Permissions\n        uses: actions/github-script@v8\n        id: check-permissions\n        with:\n          script: |\n            const user = context.payload.sender.login\n            console.log(`Validate user: ${user}`)\n\n            let hasTriagePermission = false\n            try {\n              const { data } = await github.rest.repos.getCollaboratorPermissionLevel({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                username: user,\n              });\n              hasTriagePermission = data.user.permissions.triage\n            } catch (e) {\n              console.warn(e)\n            }\n\n            if (hasTriagePermission) {\n              console.log('User is allowed. Adding +1 reaction.')\n              await github.rest.reactions.createForIssueComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                comment_id: context.payload.comment.id,\n                content: '+1',\n              })\n            } else {\n              console.log('User is not allowed. Adding -1 reaction.')\n              await github.rest.reactions.createForIssueComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                comment_id: context.payload.comment.id,\n                content: '-1',\n              })\n              throw new Error('User does not have the necessary permissions.')\n            }\n\n      - name: Get PR Data\n        uses: actions/github-script@v8\n        id: get-pr-data\n        with:\n          script: |\n            console.log(`Get PR info: ${context.repo.owner}/${context.repo.repo}#${context.issue.number}`)\n            const { data: pr } = await github.rest.pulls.get({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              pull_number: context.issue.number\n            })\n\n            const commentCreatedAt = new Date(context.payload.comment.created_at)\n            const commitPushedAt = new Date(pr.head.repo.pushed_at)\n\n            console.log(`Comment created at: ${commentCreatedAt.toISOString()}`)\n            console.log(`PR last pushed at: ${commitPushedAt.toISOString()}`)\n\n            // Check if any commits were pushed after the comment was created\n            if (commitPushedAt > commentCreatedAt) {\n              const errorMsg = [\n                '⚠️ Security warning: PR was updated after the trigger command was posted.',\n                '',\n                `Comment posted at: ${commentCreatedAt.toISOString()}`,\n                `PR last pushed at: ${commitPushedAt.toISOString()}`,\n                '',\n                'This could indicate an attempt to inject code after approval.',\n                'Please review the latest changes and re-run /ecosystem-ci run if they are acceptable.'\n              ].join('\\n')\n\n              core.setFailed(errorMsg)\n\n              await github.rest.issues.createComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: context.issue.number,\n                body: errorMsg\n              })\n\n              throw new Error('PR was pushed to after comment was created')\n            }\n\n            return {\n              num: context.issue.number,\n              branchName: pr.head.ref,\n              commit: pr.head.sha,\n              repo: pr.head.repo.full_name\n            }\n\n      - name: Generate Token\n        id: generate-token\n        uses: actions/create-github-app-token@v2\n        with:\n          app-id: ${{ secrets.ECOSYSTEM_CI_GITHUB_APP_ID }}\n          private-key: ${{ secrets.ECOSYSTEM_CI_GITHUB_APP_PRIVATE_KEY }}\n          repositories: |\n            svelte\n            svelte-ecosystem-ci\n\n      - name: Trigger Downstream Workflow\n        uses: actions/github-script@v8\n        id: trigger\n        env:\n          COMMENT: ${{ github.event.comment.body }}\n          PR_DATA: ${{ steps.get-pr-data.outputs.result }}\n        with:\n          github-token: ${{ steps.generate-token.outputs.token }}\n          script: |\n            const comment = process.env.COMMENT.trim()\n            const prData = JSON.parse(process.env.PR_DATA)\n\n            const suite = comment.split('\\n')[0].replace(/^\\/ecosystem-ci run/, '').trim()\n\n            await github.rest.actions.createWorkflowDispatch({\n              owner: context.repo.owner,\n              repo: 'svelte-ecosystem-ci',\n              workflow_id: 'ecosystem-ci-from-pr.yml',\n              ref: 'main',\n              inputs: {\n                prNumber: '' + prData.num,\n                branchName: prData.branchName,\n                repo: prData.repo,\n                commit: prData.commit,\n                suite: suite === '' ? '-' : suite\n              }\n            })\n"
  },
  {
    "path": ".github/workflows/pkg.pr.new.yml",
    "content": "name: pkg.pr.new\non:\n  pull_request_target:\n    types: [opened, synchronize]\n  push:\n    branches: [main]\n  workflow_dispatch:\n    inputs:\n      sha:\n        description: 'Commit SHA to build'\n        required: true\n        type: string\n      pr:\n        description: 'PR number to comment on'\n        required: true\n        type: number\n\npermissions: {}\n\njobs:\n  build:\n    # Skip pull_request_target events from forks — maintainers can use workflow_dispatch instead\n    if: >\n      github.event_name != 'pull_request_target' ||\n      github.event.pull_request.head.repo.full_name == github.repository\n    runs-on: ubuntu-latest\n    # No permissions — this job runs user-controlled code\n    permissions: {}\n\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          # For pull_request_target, check out the PR head.\n          # For workflow_dispatch, check out the manually specified SHA.\n          # For push, fall back to the push SHA.\n          ref: ${{ github.event.pull_request.head.sha || inputs.sha || github.sha }}\n\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 22.x\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build\n        run: pnpm build\n\n      - run: pnpx pkg-pr-new publish --comment=off --json output.json --compact --no-template './packages/svelte'\n\n      - name: Upload output\n        uses: actions/upload-artifact@v4\n        with:\n          name: output\n          path: ./output.json\n\n  # Sanitizes the untrusted output from the build job before it's consumed by\n  # jobs with elevated permissions. This ensures that only known package names\n  # and valid SHA prefixes make it through.\n  sanitize:\n    needs: build\n    runs-on: ubuntu-latest\n\n    permissions: {}\n\n    steps:\n      - name: Download artifact\n        uses: actions/download-artifact@v7\n        with:\n          name: output\n\n      - name: Sanitize output\n        uses: actions/github-script@v8\n        with:\n          script: |\n            const fs = require('fs');\n            const raw = JSON.parse(fs.readFileSync('output.json', 'utf8'));\n\n            const ALLOWED_PACKAGES = new Set(['svelte']);\n            const SHA_PATTERN = /^[0-9a-f]{7}$/;\n\n            const packages = (raw.packages || [])\n              .filter(p => {\n                if (!ALLOWED_PACKAGES.has(p.name)) {\n                  console.log(`Skipping unexpected package: ${JSON.stringify(p.name)}`);\n                  return false;\n                }\n                const sha = p.url?.replace(/^.+@([^@]+)$/, '$1');\n                if (!sha || !SHA_PATTERN.test(sha)) {\n                  console.log(`Skipping package with invalid SHA: ${JSON.stringify(p.url)}`);\n                  return false;\n                }\n                return true;\n              })\n              .map(p => ({\n                name: p.name,\n                sha: p.url.replace(/^.+@([^@]+)$/, '$1'),\n              }));\n\n            fs.writeFileSync('sanitized-output.json', JSON.stringify({ packages }), 'utf8');\n\n      - name: Upload sanitized output\n        uses: actions/upload-artifact@v4\n        with:\n          name: sanitized-output\n          path: ./sanitized-output.json\n\n  comment:\n    needs: sanitize\n    if: github.event_name == 'pull_request_target' || github.event_name == 'workflow_dispatch'\n    runs-on: ubuntu-latest\n\n    permissions:\n      contents: read\n      pull-requests: write\n\n    steps:\n      - name: Download sanitized artifact\n        uses: actions/download-artifact@v7\n        with:\n          name: sanitized-output\n\n      - name: Resolve PR number\n        id: pr\n        uses: actions/github-script@v8\n        with:\n          script: |\n            if (context.eventName === 'pull_request_target') {\n              core.setOutput('number', context.issue.number);\n              return;\n            }\n\n            // For workflow_dispatch, use the explicitly provided PR number.\n            // We can't use listPullRequestsAssociatedWithCommit because fork\n            // commits don't exist in the base repo, so the API returns nothing.\n            const pr = Number('${{ inputs.pr }}');\n            if (!pr || isNaN(pr)) {\n              core.setFailed('workflow_dispatch requires a valid pr input');\n              return;\n            }\n\n            core.setOutput('number', pr);\n\n      - name: Post or update comment\n        uses: actions/github-script@v8\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          script: |\n            const fs = require('fs');\n            const { packages } = JSON.parse(fs.readFileSync('sanitized-output.json', 'utf8'));\n\n            if (packages.length === 0) {\n              console.log('No valid packages found. Skipping comment.');\n              return;\n            }\n\n            const issue_number = parseInt('${{ steps.pr.outputs.number }}', 10);\n\n            const bot_comment_identifier = `<!-- pkg.pr.new comment -->`;\n\n            const body = `${bot_comment_identifier}\n\n            [Playground](https://svelte.dev/playground?version=pr-${issue_number})\n\n            \\`\\`\\`\n            ${packages.map(p => `pnpm add https://pkg.pr.new/${p.name}@${issue_number}`).join('\\n')}\n            \\`\\`\\`\n            `;\n\n            const comments = await github.rest.issues.listComments({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number,\n            });\n            const existing = comments.data.find(c => c.body.includes(bot_comment_identifier));\n\n            if (existing) {\n              await github.rest.issues.updateComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                comment_id: existing.id,\n                body,\n              });\n            } else {\n              await github.rest.issues.createComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number,\n                body,\n              });\n            }\n\n  log:\n    needs: sanitize\n    if: github.event_name == 'push'\n    runs-on: ubuntu-latest\n\n    permissions: {}\n\n    steps:\n      - name: Download sanitized artifact\n        uses: actions/download-artifact@v7\n        with:\n          name: sanitized-output\n\n      - name: Log publish info\n        uses: actions/github-script@v8\n        with:\n          script: |\n            const fs = require('fs');\n            const { packages } = JSON.parse(fs.readFileSync('sanitized-output.json', 'utf8'));\n\n            if (packages.length === 0) {\n              console.log('No valid packages found.');\n              return;\n            }\n\n            console.log('\\n' + '='.repeat(50));\n            console.log('Publish Information');\n            console.log('='.repeat(50));\n            for (const p of packages) {\n              console.log(`${p.name} - pnpm add https://pkg.pr.new/${p.name}@${p.sha}`);\n            }\n            const svelte = packages.find(p => p.name === 'svelte');\n            if (svelte) {\n              console.log(`\\nPlayground: https://svelte.dev/playground?version=commit-${svelte.sha}`);\n            }\n            console.log('='.repeat(50));\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\n\non:\n  push:\n    branches:\n      - main\n\nconcurrency:\n  # prevent two release workflows from running at once\n  # race conditions here can result in releases failing\n  group: ${{ github.workflow }}\n\npermissions: {}\njobs:\n  release:\n    # prevents this action from running on forks\n    if: github.repository == 'sveltejs/svelte'\n    permissions:\n      contents: write # to create release (changesets/action)\n      id-token: write # OpenID Connect token needed for provenance\n      pull-requests: write # to create pull request (changesets/action)\n    name: Release\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repo\n        uses: actions/checkout@v6\n        with:\n          # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits\n          fetch-depth: 0\n      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4\n      - name: Setup Node.js\n        uses: actions/setup-node@v6\n        with:\n          node-version: 24.x\n          cache: pnpm\n\n      - name: Install\n        run: pnpm install --frozen-lockfile\n\n      - name: Build\n        run: pnpm build && { [ \"`git status --porcelain=v1`\" == \"\" ] || (echo \"Generated types have changed — please regenerate types locally with `cd packages/svelte && pnpm generate:types` and commit the changes after you have reviewed them\"; git diff; exit 1); }\n\n      - name: Create Release Pull Request or Publish to npm\n        id: changesets\n        uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf # v1\n        with:\n          version: pnpm changeset:version\n          publish: pnpm changeset:publish\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_CONFIG_PROVENANCE: true\n"
  },
  {
    "path": ".gitignore",
    "content": "# Dependency directories\nnode_modules/\n\n# IDE related\n.idea\n\n# Test coverage\ncoverage\n*.lcov\n\n# Optional eslint cache\n.eslintcache\n\n# dotenv environment variables file\n.env\n.env.test\n\n# build output\n.vercel\n\n# OS-specific\n.DS_Store\n\ntmp\n\nbenchmarking/.profiles\nbenchmarking/compare/.results\nbenchmarking/compare/.profiles\n"
  },
  {
    "path": ".npmrc",
    "content": "playwright_skip_browser_download=1"
  },
  {
    "path": ".prettierignore",
    "content": "documentation/docs/\n\npackages/**/dist/*.js\npackages/**/build/*.js\npackages/**/npm/**/*\npackages/**/config/*.js\n\n# packages/svelte\npackages/svelte/messages/**/*.md\npackages/svelte/scripts/_bundle.js\npackages/svelte/src/compiler/errors.js\npackages/svelte/src/compiler/warnings.js\npackages/svelte/src/internal/client/errors.js\npackages/svelte/src/internal/client/warnings.js\npackages/svelte/src/internal/shared/errors.js\npackages/svelte/src/internal/shared/warnings.js\npackages/svelte/src/internal/server/errors.js\npackages/svelte/src/internal/server/warnings.js\npackages/svelte/tests/migrate/samples/*/output.svelte\npackages/svelte/tests/**/*.svelte\npackages/svelte/tests/**/_expected*\npackages/svelte/tests/**/_actual*\npackages/svelte/tests/**/expected*\npackages/svelte/tests/**/_output\npackages/svelte/tests/**/shards/*.test.js\npackages/svelte/tests/hydration/samples/*/_expected.html\npackages/svelte/tests/hydration/samples/*/_override.html\npackages/svelte/tests/parser-legacy/samples/*/_actual.json\npackages/svelte/tests/parser-legacy/samples/*/output.json\npackages/svelte/tests/parser-modern/samples/*/_actual.json\npackages/svelte/tests/parser-modern/samples/*/output.json\npackages/svelte/types\npackages/svelte/compiler/index.js\nplaygrounds/sandbox/dist/*\nplaygrounds/sandbox/output/*\nplaygrounds/sandbox/src/*\n\n**/node_modules\n**/.svelte-kit\n**/.vercel\n.github/CODEOWNERS\n.prettierignore\n.changeset\npnpm-lock.yaml\npnpm-workspace.yaml\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"singleQuote\": true,\n\t\"trailingComma\": \"none\",\n\t\"printWidth\": 100,\n\t\"plugins\": [\"prettier-plugin-svelte\"],\n\t\"overrides\": [\n\t\t{\n\t\t\t\"files\": [\"*.svelte\"],\n\t\t\t\"options\": {\n\t\t\t\t\"bracketSameLine\": false\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"files\": [\"README.md\", \"packages/*/README.md\", \"**/package.json\"],\n\t\t\t\"options\": {\n\t\t\t\t\"useTabs\": false,\n\t\t\t\t\"tabWidth\": 2\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"type\": \"node\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Run sandbox\",\n\t\t\t\"program\": \"${workspaceFolder}/playgrounds/sandbox/run.js\",\n\t\t\t\"env\": {\n\t\t\t\t\"NODE_OPTIONS\": \"--stack-trace-limit=10000\"\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t\"typescript.tsdk\": \"node_modules/typescript/lib\"\n}\n"
  },
  {
    "path": ".well-known/funding-manifest-urls",
    "content": "https://svelte.dev/funding.json\n\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "This repository is governed by the Svelte Code of Conduct.\n\nhttps://github.com/sveltejs/community/blob/main/CODE_OF_CONDUCT.md\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Svelte\n\nSvelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM.\n\nThe [Open Source Guides](https://opensource.guide/) website has a collection of resources for individuals, communities, and companies. These resources help people who want to learn how to run and contribute to open source projects. Contributors and people new to open source alike will find the following guides especially useful:\n\n- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)\n- [Building Welcoming Communities](https://opensource.guide/building-community/)\n\n## Get involved\n\nThere are many ways to contribute to Svelte, and many of them do not involve writing any code. Here are a few ideas to get started:\n\n- Simply start using Svelte. Go through the [Getting Started](https://svelte.dev/docs#getting-started) guide. Does everything work as expected? If not, we're always looking for improvements. Let us know by [opening an issue](#reporting-new-issues).\n- Look through the [open issues](https://github.com/sveltejs/svelte/issues). A good starting point would be issues tagged [good first issue](https://github.com/sveltejs/svelte/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). Provide workarounds, ask for clarification, or suggest labels. Help [triage issues](#triaging-issues-and-pull-requests).\n- If you find an issue you would like to fix, [open a pull request](#pull-requests).\n- Read through our [tutorials](https://svelte.dev/tutorial). If you find anything that is confusing or can be improved, you can make edits by clicking \"Edit this page\" at the bottom left of the tutorial page.\n- Take a look at the [features requested](https://github.com/sveltejs/svelte/labels/feature%20request) by others in the community and consider opening a pull request if you see something you want to work on.\n\nContributions are very welcome. If you think you need help planning your contribution, please ping us on Discord at [svelte.dev/chat](https://svelte.dev/chat) and let us know you are looking for a bit of help.\n\n### Triaging issues and pull requests\n\nOne great way you can contribute to the project without writing any code is to help triage issues and pull requests as they come in.\n\n- Ask for more information if you believe the issue does not provide all the details required to solve it.\n- Flag issues that are stale or that should be closed.\n- Ask for test plans and review code.\n\n## Our process\n\n### RFCs\n\nIf you'd like to propose an implementation for a large new feature or change then please [create an RFC](https://github.com/sveltejs/rfcs) to discuss it up front.\n\n### Roadmap\n\nWhen deciding where to contribute, you may wish to take a look at [our roadmap](https://svelte.dev/roadmap). The Svelte team generally works on a single major effort at a time. This has a couple benefits for us as maintainers. First, it allows us to focus and make noticeable progress in an area being proactive rather than reactive. Secondly, it allows us to handle related issues and PRs together. By batching issues and PRs together we’re able to ensure implementations and fixes holistically address the set of problems and use cases encountered by our users.\n\n### Maintainer meetings\n\nThe maintainers meet on the final Saturday of each month. While these meetings are not open publicly, we will report back by leaving a comment on each issue discussed. We will generally discuss items aligning with our roadmap, but major PRs needing discussion amongst the maintainers can be added to the agenda for the monthly maintainer’s meeting. However, we typically are only able to get to a couple of items that are not aligned with our current priority.\n\n### Prioritization\n\nWe do our best to review PRs and RFCs as they are sent, but it is difficult to keep up. We welcome help in reviewing PRs, RFCs, and issues. If an item aligns with the current priority on our [roadmap](https://svelte.dev/roadmap), it is more likely to be reviewed quickly. PRs to the most important and active ones repositories get reviewed more quickly while PRs to smaller inactive repos may sit for a bit before we periodically come by and review the pending PRs in a batch.\n\n## Bugs\n\nWe use [GitHub issues](https://github.com/sveltejs/svelte/issues) for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new unreported bug, you can submit a [bug report](#reporting-new-issues).\n\nIf you have questions about using Svelte, contact us on Discord at [svelte.dev/chat](https://svelte.dev/chat), and we will do our best to answer your questions.\n\nIf you see anything you'd like to be implemented, create a [feature request issue](https://github.com/sveltejs/svelte/issues/new?template=feature_request.yml).\n\n### Reporting new issues\n\nWhen [opening a new issue](https://github.com/sveltejs/svelte/issues/new/choose), always make sure to fill out the issue template. **This step is very important!** Not doing so may result in your issue not being managed in a timely fashion. Don't take this personally if this happens, and feel free to open a new issue once you've gathered all the information required by the template.\n\n- **One issue, one bug:** Please report a single bug per issue.\n- **Provide reproduction steps:** List all the steps necessary to reproduce the issue. The person reading your bug report should be able to follow these steps to reproduce your issue with minimal effort. If possible, use the [REPL](https://svelte.dev/repl) to create your reproduction.\n\n## Pull requests\n\n### Proposing a change\n\nIf you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can also file an issue with [feature template](https://github.com/sveltejs/svelte/issues/new?template=feature_request.yml).\n\nIf you're only fixing a bug, it's fine to submit a pull request right away, but we still recommend that you file an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue.\n\nSmall pull requests are much easier to review and more likely to get merged.\n\n### Installation\n\nEnsure you have [pnpm](https://pnpm.io/installation) installed. After cloning the repository, run `pnpm install`.\n\n### Developing\n\nTo build the UMD version of `svelte/compiler` (this is only necessary for CommonJS consumers, or in-browser use), run `pnpm build` inside `packages/svelte`. To rebuild whenever source files change, run `pnpm dev`.\n\n### Creating a branch\n\nFork [the repository](https://github.com/sveltejs/svelte) and create your branch from `main`. If you've never sent a GitHub pull request before, you can learn how from [this free video series](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github).\n\n### Testing\n\nA good test plan has the exact commands you ran and their output, provides screenshots or videos if the pull request changes UI.\n\n- If you've changed APIs, update the documentation.\n\n#### Writing tests\n\nAll tests are located in the `/tests` folder.\n\nTest samples are kept in `/tests/xxx/samples` folders.\n\n#### Running tests\n\n> PREREQUISITE: Install chromium via playwright by running `pnpm playwright install chromium`\n\n1. To run test, run `pnpm test`.\n1. To run a particular test suite, use `pnpm test <suite-name>`, for example:\n\n   ```sh\n   pnpm test validator\n   ```\n\n1. To filter tests _within_ a test suite, use `pnpm test <suite-name> -t <test-name>`, for example:\n\n   ```sh\n   pnpm test validator -t a11y-alt-text\n   ```\n\n   (You can also do `FILTER=<test-name> pnpm test <suite-name>` which removes other tests rather than simply skipping them — this will result in faster and more compact test results, but it's non-idiomatic. Choose your fighter.)\n\n##### Updating `.expected` files\n\n1. Tests suites like `snapshot` and `parser` assert that the generated output matches the existing snapshot.\n1. To update these snapshots, run `UPDATE_SNAPSHOTS=true pnpm test`.\n\n### Typechecking\n\nTo typecheck the codebase, run `pnpm check` inside `packages/svelte`. To typecheck in watch mode, run `pnpm check:watch`.\n\n### Style guide\n\n[Eslint](https://eslint.org) will catch most styling issues that may exist in your code. You can check the status of your code styling by simply running `pnpm lint`.\n\n#### Code conventions\n\n- `snake_case` for internal variable names and methods.\n- `camelCase` for public variable names and methods.\n\n### Generating types\n\nTypes are auto-generated from the source, but the result is checked in to ensure no accidental changes slip through. Run `pnpm generate:types` to regenerate the types.\n\n### Sending your pull request\n\nPlease make sure the following is done when submitting a pull request:\n\n1. Describe your **test plan** in your pull request description. Make sure to test your changes.\n1. Make sure your code lints (`pnpm lint`).\n1. Make sure your tests pass (`pnpm test`).\n\nAll pull requests should be opened against the `main` branch. Make sure the PR does only one thing, otherwise please split it. If this change should contribute to a version bump, run `npx changeset` at the root of the repository after a code change and select the appropriate packages.\n\n#### Breaking changes\n\nWhen adding a new breaking change, follow this template in your pull request:\n\n```md\n### New breaking change here\n\n- **Who does this affect**:\n- **How to migrate**:\n- **Why make this breaking change**:\n- **Severity (number of people affected x effort)**:\n```\n\n### Reviewing pull requests\n\nIf you'd like to manually test a pull request in another pnpm project, you can do so by running `pnpm add -D \"github:sveltejs/svelte#path:packages/svelte&branch-name\"` in that project.\n\n## License\n\nBy contributing to Svelte, you agree that your contributions will be licensed under its [MIT license](https://github.com/sveltejs/svelte/blob/master/LICENSE.md).\n\n## Questions\n\nFeel free to ask in [#contributing](https://discord.com/channels/457912077277855764/750401468569354431) on [Discord](https://svelte.dev/chat) if you have questions about our process, how to proceed, etc.\n"
  },
  {
    "path": "FUNDING.json",
    "content": "{\n\t\"drips\": {\n\t\t\"ethereum\": {\n\t\t\t\"ownedBy\": \"0xCE08E02c37d90d75C2bf7D9e55f7606C8DB80E70\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2016-2025 [Svelte Contributors](https://github.com/sveltejs/svelte/graphs/contributors)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<a href=\"https://svelte.dev\">\n\t<picture>\n\t\t<source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/banner_dark.png\">\n\t\t<img src=\"assets/banner.png\" alt=\"Svelte - web development for the rest of us\" />\n\t</picture>\n</a>\n\n[![License](https://img.shields.io/npm/l/svelte.svg)](LICENSE.md) [![Chat](https://img.shields.io/discord/457912077277855764?label=chat&logo=discord)](https://svelte.dev/chat)\n\n## What is Svelte?\n\nSvelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM.\n\nLearn more at the [Svelte website](https://svelte.dev), or stop by the [Discord chatroom](https://svelte.dev/chat).\n\n## Supporting Svelte\n\nSvelte is an MIT-licensed open source project with its ongoing development made possible entirely by fantastic volunteers. If you'd like to support their efforts, please consider:\n\n- [Becoming a backer on Open Collective](https://opencollective.com/svelte).\n\nFunds donated via Open Collective will be used for compensating expenses related to Svelte's development such as hosting costs. If sufficient donations are received, funds may also be used to support Svelte's development more directly.\n\n## Roadmap\n\nYou may view [our roadmap](https://svelte.dev/roadmap) if you'd like to see what we're currently working on.\n\n## Contributing\n\nPlease see the [Contributing Guide](CONTRIBUTING.md) and the [`svelte`](packages/svelte) package for information on contributing to Svelte.\n\n## Is svelte.dev down?\n\nProbably not, but it's possible. If you can't seem to access any `.dev` sites, check out [this SuperUser question and answer](https://superuser.com/q/1413402).\n\n## License\n\n[MIT](LICENSE.md)\n"
  },
  {
    "path": "benchmarking/.gitignore",
    "content": "output\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/index.js",
    "content": "import fs from 'node:fs';\nimport path from 'node:path';\nimport {\n\tsbench_create_0to1,\n\tsbench_create_1000to1,\n\tsbench_create_1to1,\n\tsbench_create_1to1000,\n\tsbench_create_1to2,\n\tsbench_create_1to4,\n\tsbench_create_1to8,\n\tsbench_create_2to1,\n\tsbench_create_4to1,\n\tsbench_create_signals\n} from './sbench.js';\nimport { fileURLToPath } from 'node:url';\nimport { create_test } from './util.js';\n\n// This benchmark has been adapted from the js-reactivity-benchmark (https://github.com/milomg/js-reactivity-benchmark)\n// Not all tests are the same, and many parts have been tweaked to capture different data.\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport const reactivity_benchmarks = [\n\tsbench_create_signals,\n\tsbench_create_0to1,\n\tsbench_create_1to1,\n\tsbench_create_2to1,\n\tsbench_create_4to1,\n\tsbench_create_1000to1,\n\tsbench_create_1to2,\n\tsbench_create_1to4,\n\tsbench_create_1to8,\n\tsbench_create_1to1000\n];\n\nfor (const file of fs.readdirSync(`${dirname}/tests`)) {\n\tif (!file.includes('.bench.')) continue;\n\n\tconst name = file.replace('.bench.js', '');\n\n\tconst module = await import(`${dirname}/tests/${file}`);\n\tconst { owned, unowned } = create_test(name, module.default);\n\n\treactivity_benchmarks.push(owned, unowned);\n}\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/sbench.js",
    "content": "/** @import { Source } from '../../../packages/svelte/src/internal/client/types.js' */\nimport { fastest_test } from '../../utils.js';\nimport * as $ from '../../../packages/svelte/src/internal/client/index.js';\n\nconst COUNT = 1e5;\n\n/**\n * @param {number} n\n * @param {any[]} sources\n */\nfunction create_sources(n, sources) {\n\tfor (let i = 0; i < n; i++) {\n\t\tsources[i] = $.state(i);\n\t}\n\n\treturn sources;\n}\n\n/**\n * @param {Source<number>} source\n */\nfunction create_derived(source) {\n\t$.derived(() => $.get(source));\n}\n\n/**\n *\n * @param {string} label\n * @param {(n: number, sources: Array<Source<number>>) => void} fn\n * @param {number} count\n * @param {number} num_sources\n */\nfunction create_sbench_test(label, count, num_sources, fn) {\n\treturn {\n\t\tlabel,\n\t\tfn: async () => {\n\t\t\t// Do 3 loops to warm up JIT\n\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\tfn(count, create_sources(num_sources, []));\n\t\t\t}\n\n\t\t\treturn await fastest_test(10, () => {\n\t\t\t\tconst destroy = $.effect_root(() => {\n\t\t\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\t\t\tfn(count, create_sources(num_sources, []));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdestroy();\n\t\t\t});\n\t\t}\n\t};\n}\n\nexport const sbench_create_signals = create_sbench_test(\n\t'sbench_create_signals',\n\tCOUNT,\n\tCOUNT,\n\tcreate_sources\n);\n\nexport const sbench_create_0to1 = create_sbench_test('sbench_create_0to1', COUNT, 0, (n) => {\n\tfor (let i = 0; i < n; i++) {\n\t\t$.derived(() => i);\n\t}\n});\n\nexport const sbench_create_1to1 = create_sbench_test(\n\t'sbench_create_1to1',\n\tCOUNT,\n\tCOUNT,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tcreate_derived(sources[i]);\n\t\t}\n\t}\n);\n\nexport const sbench_create_2to1 = create_sbench_test(\n\t'sbench_create_2to1',\n\tCOUNT / 2,\n\tCOUNT,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\t$.derived(() => $.get(sources[i * 2]) + $.get(sources[i * 2 + 1]));\n\t\t}\n\t}\n);\n\nexport const sbench_create_4to1 = create_sbench_test(\n\t'sbench_create_4to1',\n\tCOUNT / 4,\n\tCOUNT,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\t$.derived(\n\t\t\t\t() =>\n\t\t\t\t\t$.get(sources[i * 4]) +\n\t\t\t\t\t$.get(sources[i * 4 + 1]) +\n\t\t\t\t\t$.get(sources[i * 4 + 2]) +\n\t\t\t\t\t$.get(sources[i * 4 + 3])\n\t\t\t);\n\t\t}\n\t}\n);\n\nexport const sbench_create_1000to1 = create_sbench_test(\n\t'sbench_create_1000to1',\n\tCOUNT / 1000,\n\tCOUNT,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst offset = i * 1000;\n\n\t\t\t$.derived(() => {\n\t\t\t\tlet sum = 0;\n\t\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\t\tsum += $.get(sources[offset + i]);\n\t\t\t\t}\n\t\t\t\treturn sum;\n\t\t\t});\n\t\t}\n\t}\n);\n\nexport const sbench_create_1to2 = create_sbench_test(\n\t'sbench_create_1to2',\n\tCOUNT,\n\tCOUNT / 2,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n / 2; i++) {\n\t\t\tconst source = sources[i];\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t}\n\t}\n);\n\nexport const sbench_create_1to4 = create_sbench_test(\n\t'sbench_create_1to4',\n\tCOUNT,\n\tCOUNT / 4,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n / 4; i++) {\n\t\t\tconst source = sources[i];\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t}\n\t}\n);\n\nexport const sbench_create_1to8 = create_sbench_test(\n\t'sbench_create_1to8',\n\tCOUNT,\n\tCOUNT / 8,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n / 8; i++) {\n\t\t\tconst source = sources[i];\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t\tcreate_derived(source);\n\t\t}\n\t}\n);\n\nexport const sbench_create_1to1000 = create_sbench_test(\n\t'sbench_create_1to1000',\n\tCOUNT,\n\tCOUNT / 1000,\n\t(n, sources) => {\n\t\tfor (let i = 0; i < n / 1000; i++) {\n\t\t\tconst source = sources[i];\n\t\t\tfor (let j = 0; j < 1000; j++) {\n\t\t\t\tcreate_derived(source);\n\t\t\t}\n\t\t}\n\t}\n);\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_avoidable.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\nimport { busy } from '../util.js';\n\nexport default () => {\n\tlet head = $.state(0);\n\tlet computed1 = $.derived(() => $.get(head));\n\tlet computed2 = $.derived(() => ($.get(computed1), 0));\n\tlet computed3 = $.derived(() => (busy(), $.get(computed2) + 1)); // heavy computation\n\tlet computed4 = $.derived(() => $.get(computed3) + 2);\n\tlet computed5 = $.derived(() => $.get(computed4) + 3);\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(computed5);\n\t\t\tbusy(); // heavy side effect\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tassert.equal($.get(computed5), 6);\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(computed5), 6);\n\t\t\t}\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_broad.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nexport default () => {\n\tlet head = $.state(0);\n\tlet last = head;\n\tlet counter = 0;\n\n\tconst destroy = $.effect_root(() => {\n\t\tfor (let i = 0; i < 50; i++) {\n\t\t\tlet current = $.derived(() => {\n\t\t\t\treturn $.get(head) + i;\n\t\t\t});\n\t\t\tlet current2 = $.derived(() => {\n\t\t\t\treturn $.get(current) + 1;\n\t\t\t});\n\t\t\t$.render_effect(() => {\n\t\t\t\t$.get(current2);\n\t\t\t\tcounter++;\n\t\t\t});\n\t\t\tlast = current2;\n\t\t}\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tcounter = 0;\n\t\t\tfor (let i = 0; i < 50; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(last), i + 50);\n\t\t\t}\n\t\t\tassert.equal(counter, 50 * 50);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_deep.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nlet len = 50;\nconst iter = 50;\n\nexport default () => {\n\tlet head = $.state(0);\n\tlet current = head;\n\tfor (let i = 0; i < len; i++) {\n\t\tlet c = current;\n\t\tcurrent = $.derived(() => {\n\t\t\treturn $.get(c) + 1;\n\t\t});\n\t}\n\tlet counter = 0;\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(current);\n\t\t\tcounter++;\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tcounter = 0;\n\t\t\tfor (let i = 0; i < iter; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(current), len + i);\n\t\t\t}\n\t\t\tassert.equal(counter, iter);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_diamond.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nlet width = 5;\n\nexport default () => {\n\tlet head = $.state(0);\n\tlet current = [];\n\tfor (let i = 0; i < width; i++) {\n\t\tcurrent.push(\n\t\t\t$.derived(() => {\n\t\t\t\treturn $.get(head) + 1;\n\t\t\t})\n\t\t);\n\t}\n\tlet sum = $.derived(() => {\n\t\treturn current.map((x) => $.get(x)).reduce((a, b) => a + b, 0);\n\t});\n\tlet counter = 0;\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(sum);\n\t\t\tcounter++;\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tassert.equal($.get(sum), 2 * width);\n\t\t\tcounter = 0;\n\t\t\tfor (let i = 0; i < 500; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(sum), (i + 1) * width);\n\t\t\t}\n\t\t\tassert.equal(counter, 500);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_mux.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nexport default () => {\n\tlet heads = new Array(100).fill(null).map((_) => $.state(0));\n\tconst mux = $.derived(() => {\n\t\treturn Object.fromEntries(heads.map((h) => $.get(h)).entries());\n\t});\n\tconst splited = heads\n\t\t.map((_, index) => $.derived(() => $.get(mux)[index]))\n\t\t.map((x) => $.derived(() => $.get(x) + 1));\n\n\tconst destroy = $.effect_root(() => {\n\t\tsplited.forEach((x) => {\n\t\t\t$.render_effect(() => {\n\t\t\t\t$.get(x);\n\t\t\t});\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(heads[i], i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(splited[i]), i + 1);\n\t\t\t}\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(heads[i], i * 2);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(splited[i]), i * 2 + 1);\n\t\t\t}\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_repeated.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nlet size = 30;\n\nexport default () => {\n\tlet head = $.state(0);\n\tlet current = $.derived(() => {\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < size; i++) {\n\t\t\tresult += $.get(head);\n\t\t}\n\t\treturn result;\n\t});\n\n\tlet counter = 0;\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(current);\n\t\t\tcounter++;\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tassert.equal($.get(current), size);\n\t\t\tcounter = 0;\n\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(current), i * size);\n\t\t\t}\n\t\t\tassert.equal(counter, 100);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_triangle.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nlet width = 10;\n\nfunction count(number) {\n\treturn new Array(number)\n\t\t.fill(0)\n\t\t.map((_, i) => i + 1)\n\t\t.reduce((x, y) => x + y, 0);\n}\n\nexport default () => {\n\tlet head = $.state(0);\n\tlet current = head;\n\tlet list = [];\n\tfor (let i = 0; i < width; i++) {\n\t\tlet c = current;\n\t\tlist.push(current);\n\t\tcurrent = $.derived(() => {\n\t\t\treturn $.get(c) + 1;\n\t\t});\n\t}\n\tlet sum = $.derived(() => {\n\t\treturn list.map((x) => $.get(x)).reduce((a, b) => a + b, 0);\n\t});\n\n\tlet counter = 0;\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(sum);\n\t\t\tcounter++;\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\tconst constant = count(width);\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tassert.equal($.get(sum), constant);\n\t\t\tcounter = 0;\n\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t\tassert.equal($.get(sum), constant - width + i * width);\n\t\t\t}\n\t\t\tassert.equal(counter, 100);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/kairo_unstable.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nexport default () => {\n\tlet head = $.state(0);\n\tconst double = $.derived(() => $.get(head) * 2);\n\tconst inverse = $.derived(() => -$.get(head));\n\tlet current = $.derived(() => {\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < 20; i++) {\n\t\t\tresult += $.get(head) % 2 ? $.get(double) : $.get(inverse);\n\t\t}\n\t\treturn result;\n\t});\n\n\tlet counter = 0;\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(current);\n\t\t\tcounter++;\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(head, 1);\n\t\t\t});\n\t\t\tassert.equal($.get(current), 40);\n\t\t\tcounter = 0;\n\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t$.flush(() => {\n\t\t\t\t\t$.set(head, i);\n\t\t\t\t});\n\t\t\t}\n\t\t\tassert.equal(counter, 100);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/mol.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\n/**\n * @param {number} n\n */\nfunction fib(n) {\n\tif (n < 2) return 1;\n\treturn fib(n - 1) + fib(n - 2);\n}\n\n/**\n * @param {number} n\n */\nfunction hard(n) {\n\treturn n + fib(16);\n}\n\nconst numbers = Array.from({ length: 5 }, (_, i) => i);\n\nexport default () => {\n\tlet res = [];\n\tconst A = $.state(0);\n\tconst B = $.state(0);\n\tconst C = $.derived(() => ($.get(A) % 2) + ($.get(B) % 2));\n\tconst D = $.derived(() => numbers.map((i) => i + ($.get(A) % 2) - ($.get(B) % 2)));\n\tD.equals = function (/** @type {number[]} */ l) {\n\t\tvar r = this.v;\n\t\treturn r !== null && l.length === r.length && l.every((v, i) => v === r[i]);\n\t};\n\tconst E = $.derived(() => hard($.get(C) + $.get(A) + $.get(D)[0]));\n\tconst F = $.derived(() => hard($.get(D)[0] && $.get(B)));\n\tconst G = $.derived(() => $.get(C) + ($.get(C) || $.get(E) % 2) + $.get(D)[0] + $.get(F));\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\tres.push(hard($.get(G)));\n\t\t});\n\t\t$.render_effect(() => {\n\t\t\tres.push($.get(G));\n\t\t});\n\t\t$.render_effect(() => {\n\t\t\tres.push(hard($.get(F)));\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\t/**\n\t\t * @param {number} i\n\t\t */\n\t\trun(i) {\n\t\t\tres.length = 0;\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(B, 1);\n\t\t\t\t$.set(A, 1 + i * 2);\n\t\t\t});\n\t\t\t$.flush(() => {\n\t\t\t\t$.set(A, 2 + i * 2);\n\t\t\t\t$.set(B, 2);\n\t\t\t});\n\t\t\tassert.equal(res[0], 3198);\n\t\t\tassert.equal(res[1], 1601);\n\t\t\tassert.equal(res[2], 3195);\n\t\t\tassert.equal(res[3], 1598);\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/tests/repeated_deps.bench.js",
    "content": "import assert from 'node:assert';\nimport * as $ from 'svelte/internal/client';\n\nconst ARRAY_SIZE = 1000;\n\nexport default () => {\n\tconst signals = Array.from({ length: ARRAY_SIZE }, (_, i) => $.state(i));\n\tconst order = $.state(0);\n\n\t// break skipped_deps fast path by changing order of reads\n\tconst total = $.derived(() => {\n\t\tconst ord = $.get(order);\n\t\tlet sum = 0;\n\t\tfor (let i = 0; i < ARRAY_SIZE; i++) {\n\t\t\tsum += /** @type {number} */ ($.get(signals[(i + ord) % ARRAY_SIZE]));\n\t\t}\n\t\treturn sum;\n\t});\n\n\tconst destroy = $.effect_root(() => {\n\t\t$.render_effect(() => {\n\t\t\t$.get(total);\n\t\t});\n\t});\n\n\treturn {\n\t\tdestroy,\n\t\trun() {\n\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t$.flush(() => $.set(order, i));\n\t\t\t\tassert.equal($.get(total), (ARRAY_SIZE * (ARRAY_SIZE - 1)) / 2); // sum of 0..999\n\t\t\t}\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "benchmarking/benchmarks/reactivity/util.js",
    "content": "import * as $ from 'svelte/internal/client';\nimport { fastest_test } from '../../utils.js';\n\nexport function busy() {\n\tlet a = 0;\n\tfor (let i = 0; i < 1_00; i++) {\n\t\ta++;\n\t}\n}\n\n/**\n *\n * @param {string} label\n * @param {() => { run: (i?: number) => void, destroy: () => void }} setup\n */\nexport function create_test(label, setup) {\n\treturn {\n\t\tunowned: {\n\t\t\tlabel: `${label}_unowned`,\n\t\t\tfn: async () => {\n\t\t\t\t// Do 10 loops to warm up JIT\n\t\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\t\tconst { run, destroy } = setup();\n\t\t\t\t\trun(0);\n\t\t\t\t\tdestroy();\n\t\t\t\t}\n\n\t\t\t\tconst { run, destroy } = setup();\n\n\t\t\t\tconst result = await fastest_test(10, () => {\n\t\t\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\t\t\trun(i);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tdestroy();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t},\n\t\towned: {\n\t\t\tlabel: `${label}_owned`,\n\t\t\tfn: async () => {\n\t\t\t\tlet run, destroy;\n\n\t\t\t\tconst destroy_owned = $.effect_root(() => {\n\t\t\t\t\t// Do 10 loops to warm up JIT\n\t\t\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\t\t\tconst { run, destroy } = setup();\n\t\t\t\t\t\trun(0);\n\t\t\t\t\t\tdestroy();\n\t\t\t\t\t}\n\n\t\t\t\t\t({ run, destroy } = setup());\n\t\t\t\t});\n\n\t\t\t\tconst result = await fastest_test(10, () => {\n\t\t\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\t\t\trun(i);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// @ts-ignore\n\t\t\t\tdestroy();\n\t\t\t\tdestroy_owned();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "benchmarking/benchmarks/ssr/index.js",
    "content": "import { wrapper_bench } from './wrapper/wrapper_bench.js';\n\nexport const ssr_benchmarks = [wrapper_bench];\n"
  },
  {
    "path": "benchmarking/benchmarks/ssr/wrapper/App.svelte",
    "content": "<script>\n\tconst wrapperWidth = 960;\n\tconst wrapperHeight = 720;\n\tconst cellSize = 10;\n\tconst centerX = wrapperWidth / 2;\n\tconst centerY = wrapperHeight / 2;\n\n\tlet angle = 0;\n\tlet radius = 0;\n\n\tlet tiles = [];\n\tconst step = cellSize;\n\n\twhile (radius < Math.min(wrapperWidth, wrapperHeight) / 2) {\n\t\tlet x = centerX + Math.cos(angle) * radius;\n\t\tlet y = centerY + Math.sin(angle) * radius;\n\n\t\tif (x >= 0 && x <= wrapperWidth - cellSize && y >= 0 && y <= wrapperHeight - cellSize) {\n\t\t\ttiles.push({ x, y });\n\t\t}\n\n\t\tangle += 0.2;\n\t\tradius += step * 0.015;\n\t}\n</script>\n\n<div id=\"wrapper\">\n\t{#each tiles as { x, y }}\n\t\t<div class=\"tile\" style=\"left: {x.toFixed(2)}px; top: {y.toFixed(2)}px;\"></div>\n\t{/each}\n</div>\n"
  },
  {
    "path": "benchmarking/benchmarks/ssr/wrapper/wrapper_bench.js",
    "content": "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { render } from 'svelte/server';\nimport { fastest_test } from '../../../utils.js';\nimport { compile } from 'svelte/compiler';\n\nconst dir = `${process.cwd()}/benchmarking/benchmarks/ssr/wrapper`;\n\nasync function compile_svelte() {\n\tconst output = compile(read(`${dir}/App.svelte`), {\n\t\tgenerate: 'server'\n\t});\n\n\twrite(`${dir}/output/App.js`, output.js.code);\n\n\tconst module = await import(`${dir}/output/App.js`);\n\n\treturn module.default;\n}\n\nexport const wrapper_bench = {\n\tlabel: 'wrapper_bench',\n\tfn: async () => {\n\t\tconst App = await compile_svelte();\n\n\t\t// Do 3 loops to warm up JIT\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trender(App);\n\t\t}\n\n\t\treturn await fastest_test(10, () => {\n\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\trender(App);\n\t\t\t}\n\t\t});\n\t}\n};\n\n/**\n * @param {string} file\n */\nfunction read(file) {\n\treturn fs.readFileSync(file, 'utf-8').replace(/\\r\\n/g, '\\n');\n}\n\n/**\n * @param {string} file\n * @param {string} contents\n */\nfunction write(file, contents) {\n\ttry {\n\t\tfs.mkdirSync(path.dirname(file), { recursive: true });\n\t} catch {}\n\n\tfs.writeFileSync(file, contents);\n}\n"
  },
  {
    "path": "benchmarking/compare/index.js",
    "content": "import fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync, fork } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\n\n// if (execSync('git status --porcelain').toString().trim()) {\n// \tconsole.error('Working directory is not clean');\n// \tprocess.exit(1);\n// }\n\nconst filename = fileURLToPath(import.meta.url);\nconst runner = path.resolve(filename, '../runner.js');\nconst outdir = path.resolve(filename, '../.results');\nconst report_file = `${outdir}/report.txt`;\n\nif (fs.existsSync(outdir)) fs.rmSync(outdir, { recursive: true });\nfs.mkdirSync(outdir);\n\nconst branches = [];\n\nlet PROFILE_DIR = path.resolve(filename, '../.profiles');\nif (fs.existsSync(PROFILE_DIR)) fs.rmSync(PROFILE_DIR, { recursive: true });\nfs.mkdirSync(PROFILE_DIR, { recursive: true });\n\nfor (const arg of process.argv.slice(2)) {\n\tif (arg.startsWith('--')) continue;\n\tif (arg === filename) continue;\n\n\tbranches.push(arg);\n}\n\nif (branches.length === 0) {\n\tbranches.push(\n\t\texecSync('git symbolic-ref --short -q HEAD || git rev-parse --short HEAD').toString().trim()\n\t);\n}\n\nif (branches.length === 1) {\n\tbranches.push('main');\n}\n\nprocess.on('exit', () => {\n\texecSync(`git checkout ${branches[0]}`);\n});\n\nfor (const branch of branches) {\n\tconsole.group(`Benchmarking ${branch}`);\n\n\texecSync(`git checkout ${branch}`);\n\n\tawait new Promise((fulfil, reject) => {\n\t\tconst child = fork(runner, [], {\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\tBENCH_PROFILE_DIR: `${PROFILE_DIR}/${safe(branch)}`\n\t\t\t}\n\t\t});\n\n\t\tchild.on('message', (results) => {\n\t\t\tfs.writeFileSync(`${outdir}/${branch}.json`, JSON.stringify(results, null, '  '));\n\t\t\tfulfil();\n\t\t});\n\n\t\tchild.on('error', reject);\n\t});\n\n\tconsole.groupEnd();\n}\n\nif (PROFILE_DIR !== null) {\n\tconsole.log(`\\nCPU profiles written to ${PROFILE_DIR}`);\n}\n\nconst results = branches.map((branch) => {\n\treturn JSON.parse(fs.readFileSync(`${outdir}/${branch}.json`, 'utf-8'));\n});\n\nfs.writeFileSync(report_file, '');\n\nconst write = (str) => {\n\tfs.appendFileSync(report_file, str + '\\n');\n\tconsole.log(str);\n};\n\nfor (let i = 0; i < results[0].length; i += 1) {\n\twrite(`${results[0][i].benchmark}`);\n\n\tfor (const metric of ['time', 'gc_time']) {\n\t\tconst times = results.map((result) => +result[i][metric]);\n\t\tlet min = Infinity;\n\t\tlet max = -Infinity;\n\t\tlet min_index = -1;\n\n\t\tfor (let b = 0; b < times.length; b += 1) {\n\t\t\tconst time = times[b];\n\n\t\t\tif (time < min) {\n\t\t\t\tmin = time;\n\t\t\t\tmin_index = b;\n\t\t\t}\n\n\t\t\tif (time > max) {\n\t\t\t\tmax = time;\n\t\t\t}\n\t\t}\n\n\t\tif (min !== 0) {\n\t\t\twrite(`  ${metric}: fastest is ${char(min_index)} (${branches[min_index]})`);\n\t\t\ttimes.forEach((time, b) => {\n\t\t\t\tconst SIZE = 20;\n\t\t\t\tconst n = Math.round(SIZE * (time / max));\n\n\t\t\t\twrite(`    ${char(b)}: ${'◼'.repeat(n)}${' '.repeat(SIZE - n)} ${time.toFixed(2)}ms`);\n\t\t\t});\n\t\t}\n\t}\n\n\twrite('');\n}\n\nfunction char(i) {\n\treturn String.fromCharCode(97 + i);\n}\n\nfunction safe(name) {\n\treturn name.replace(/[^a-z0-9._-]+/gi, '_');\n}\n"
  },
  {
    "path": "benchmarking/compare/runner.js",
    "content": "import { reactivity_benchmarks } from '../benchmarks/reactivity/index.js';\nimport { with_cpu_profile } from '../utils.js';\n\nconst results = [];\nconst PROFILE_DIR = process.env.BENCH_PROFILE_DIR;\n\nfor (let i = 0; i < reactivity_benchmarks.length; i += 1) {\n\tconst benchmark = reactivity_benchmarks[i];\n\n\tprocess.stderr.write(`Running ${i + 1}/${reactivity_benchmarks.length} ${benchmark.label} `);\n\tresults.push({\n\t\tbenchmark: benchmark.label,\n\t\t...(await with_cpu_profile(PROFILE_DIR, benchmark.label, () => benchmark.fn()))\n\t});\n\tprocess.stderr.write('\\x1b[2K\\r');\n}\n\nprocess.send(results);\n"
  },
  {
    "path": "benchmarking/run.js",
    "content": "import * as $ from '../packages/svelte/src/internal/client/index.js';\nimport { reactivity_benchmarks } from './benchmarks/reactivity/index.js';\nimport { ssr_benchmarks } from './benchmarks/ssr/index.js';\nimport { with_cpu_profile } from './utils.js';\n\n// e.g. `pnpm bench kairo` to only run the kairo benchmarks\nconst filters = process.argv.slice(2);\n\nconst PROFILE_DIR = './benchmarking/.profiles';\n\nconst suites = [\n\t{\n\t\tbenchmarks: reactivity_benchmarks.filter(\n\t\t\t(b) => filters.length === 0 || filters.some((f) => b.label.includes(f))\n\t\t),\n\t\tname: 'reactivity benchmarks'\n\t},\n\t{\n\t\tbenchmarks: ssr_benchmarks.filter(\n\t\t\t(b) => filters.length === 0 || filters.some((f) => b.label.includes(f))\n\t\t),\n\t\tname: 'server-side rendering benchmarks'\n\t}\n].filter((suite) => suite.benchmarks.length > 0);\n\nif (suites.length === 0) {\n\tconsole.log('No benchmarks matched provided filters');\n\tprocess.exit(1);\n}\n\nconst COLUMN_WIDTHS = [25, 9, 9];\nconst TOTAL_WIDTH = COLUMN_WIDTHS.reduce((a, b) => a + b);\n\nconst pad_right = (str, n) => str + ' '.repeat(n - str.length);\nconst pad_left = (str, n) => ' '.repeat(n - str.length) + str;\n\nlet total_time = 0;\nlet total_gc_time = 0;\n\n$.push({}, true);\n\ntry {\n\tfor (const { benchmarks, name } of suites) {\n\t\tlet suite_time = 0;\n\t\tlet suite_gc_time = 0;\n\n\t\tconsole.log(`\\nRunning ${name}...\\n`);\n\t\tconsole.log(\n\t\t\tpad_right('Benchmark', COLUMN_WIDTHS[0]) +\n\t\t\t\tpad_left('Time', COLUMN_WIDTHS[1]) +\n\t\t\t\tpad_left('GC time', COLUMN_WIDTHS[2])\n\t\t);\n\t\tconsole.log('='.repeat(TOTAL_WIDTH));\n\n\t\tfor (const benchmark of benchmarks) {\n\t\t\tconst results = await with_cpu_profile(PROFILE_DIR, benchmark.label, () => benchmark.fn());\n\t\t\tconsole.log(\n\t\t\t\tpad_right(benchmark.label, COLUMN_WIDTHS[0]) +\n\t\t\t\t\tpad_left(results.time.toFixed(2), COLUMN_WIDTHS[1]) +\n\t\t\t\t\tpad_left(results.gc_time.toFixed(2), COLUMN_WIDTHS[2])\n\t\t\t);\n\t\t\ttotal_time += results.time;\n\t\t\ttotal_gc_time += results.gc_time;\n\t\t\tsuite_time += results.time;\n\t\t\tsuite_gc_time += results.gc_time;\n\t\t}\n\n\t\tconsole.log('='.repeat(TOTAL_WIDTH));\n\t\tconsole.log(\n\t\t\tpad_right('suite', COLUMN_WIDTHS[0]) +\n\t\t\t\tpad_left(suite_time.toFixed(2), COLUMN_WIDTHS[1]) +\n\t\t\t\tpad_left(suite_gc_time.toFixed(2), COLUMN_WIDTHS[2])\n\t\t);\n\t\tconsole.log('='.repeat(TOTAL_WIDTH));\n\t}\n\n\tif (PROFILE_DIR !== null) {\n\t\tconsole.log(`\\nCPU profiles written to ${PROFILE_DIR}`);\n\t}\n} catch (e) {\n\t// eslint-disable-next-line no-console\n\tconsole.error(e);\n\tprocess.exit(1);\n}\n\n$.pop();\n\nconsole.log('');\n\nconsole.log(\n\tpad_right('total', COLUMN_WIDTHS[0]) +\n\t\tpad_left(total_time.toFixed(2), COLUMN_WIDTHS[1]) +\n\t\tpad_left(total_gc_time.toFixed(2), COLUMN_WIDTHS[2])\n);\n"
  },
  {
    "path": "benchmarking/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"moduleResolution\": \"Bundler\",\n\t\t\"target\": \"ESNext\",\n\t\t\"module\": \"ESNext\",\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"sourceMap\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true\n\t},\n\t\"include\": [\"./run.js\", \"./utils.js\", \"./benchmarks\"]\n}\n"
  },
  {
    "path": "benchmarking/utils.js",
    "content": "import { performance, PerformanceObserver } from 'node:perf_hooks';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport inspector from 'node:inspector/promises';\nimport v8 from 'v8-natives';\n\n// Credit to https://github.com/milomg/js-reactivity-benchmark for the logic for timing + GC tracking.\n\nasync function track(fn) {\n\tv8.collectGarbage();\n\n\t/** @type {PerformanceEntry[]} */\n\tconst entries = [];\n\n\tconst observer = new PerformanceObserver((list) => entries.push(...list.getEntries()));\n\tobserver.observe({ entryTypes: ['gc'] });\n\n\tconst start = performance.now();\n\tfn();\n\tconst end = performance.now();\n\n\tawait new Promise((f) => setTimeout(f, 10));\n\n\tconst gc_time = entries\n\t\t.filter((e) => e.startTime >= start && e.startTime < end)\n\t\t.reduce((t, e) => e.duration + t, 0);\n\n\tobserver.disconnect();\n\n\treturn { time: end - start, gc_time };\n}\n\n/**\n * @param {number} times\n * @param {() => void} fn\n */\nexport async function fastest_test(times, fn) {\n\t/** @type {Array<{ time: number, gc_time: number }>} */\n\tconst results = [];\n\n\tfor (let i = 0; i < times; i++) {\n\t\tresults.push(await track(fn));\n\t}\n\n\treturn results.reduce((a, b) => (a.time < b.time ? a : b));\n}\n\nfunction safe(name) {\n\treturn name.replace(/[^a-z0-9._-]+/gi, '_');\n}\n\n/**\n * @template T\n * @param {string | null} profile_dir\n * @param {string} profile_name\n * @param {() => T | Promise<T>} fn\n * @returns {Promise<T>}\n */\nexport async function with_cpu_profile(profile_dir, profile_name, fn) {\n\tif (profile_dir === null) {\n\t\treturn await fn();\n\t}\n\n\tfs.mkdirSync(profile_dir, { recursive: true });\n\n\tconst session = new inspector.Session();\n\tsession.connect();\n\n\tawait session.post('Profiler.enable');\n\tawait session.post('Profiler.start');\n\n\ttry {\n\t\treturn await fn();\n\t} finally {\n\t\tconst { profile } = /** @type {{ profile: object }} */ (await session.post('Profiler.stop'));\n\t\tconst file = path.join(profile_dir, `${safe(profile_name)}.cpuprofile`);\n\t\tfs.writeFileSync(file, JSON.stringify(profile));\n\t\tsession.disconnect();\n\t}\n}\n"
  },
  {
    "path": "documentation/docs/01-introduction/01-overview.md",
    "content": "---\ntitle: Overview\n---\n\nSvelte is a framework for building user interfaces on the web. It uses a compiler to turn declarative components written in HTML, CSS and JavaScript...\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tfunction greet() {\n\t\talert('Welcome to Svelte!');\n\t}\n</script>\n\n<button onclick={greet}>click me</button>\n\n<style>\n\tbutton {\n\t\tfont-size: 2em;\n\t}\n</style>\n```\n\n...into lean, tightly optimized JavaScript.\n\nYou can use it to build anything on the web, from standalone components to ambitious full stack apps (using Svelte's companion application framework, [SvelteKit](../kit)) and everything in between.\n\nThese pages serve as reference documentation. If you're new to Svelte, we recommend starting with the [interactive tutorial](/tutorial) and coming back here when you have questions.\n\nYou can also try Svelte online in the [playground](/playground) or, if you need a more fully-featured environment, on [StackBlitz](https://sveltekit.new).\n"
  },
  {
    "path": "documentation/docs/01-introduction/02-getting-started.md",
    "content": "---\ntitle: Getting started\n---\n\nWe recommend using [SvelteKit](../kit), which lets you [build almost anything](../kit/project-types). It's the official application framework from the Svelte team and powered by [Vite](https://vite.dev/). Create a new project with:\n\n```sh\nnpx sv create myapp\ncd myapp\nnpm install\nnpm run dev\n```\n\nDon't worry if you don't know Svelte yet! You can ignore all the nice features SvelteKit brings on top for now and dive into it later.\n\n## Alternatives to SvelteKit\n\nYou can also use Svelte directly with Vite via [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte) by running `npm create vite@latest` and selecting the `svelte` option (or, if working with an existing project, adding the plugin to your `vite.config.js` file). With this, `npm run build` will generate HTML, JS, and CSS files inside the `dist` directory. In most cases, you will probably need to [choose a routing library](/packages#routing) as well.\n\n>[!NOTE] Vite is often used in standalone mode to build [single page apps (SPAs)](../kit/glossary#SPA), which you can also [build with SvelteKit](../kit/single-page-apps).\n\nThere are also [plugins for other bundlers](/packages#bundler-plugins), but we recommend Vite.\n\n## Editor tooling\n\nThe Svelte team maintains a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode), and there are integrations with various other [editors](https://sveltesociety.dev/collection/editor-support-c85c080efc292a34) and tools as well.\n\nYou can also check your code from the command line using [`npx sv check`](https://svelte.dev/docs/cli/sv-check).\n\n\n## Getting help\n\nDon't be shy about asking for help in the [Discord chatroom](/chat)! You can also find answers on [Stack Overflow](https://stackoverflow.com/questions/tagged/svelte).\n"
  },
  {
    "path": "documentation/docs/01-introduction/03-svelte-files.md",
    "content": "---\ntitle: .svelte files\n---\n\nComponents are the building blocks of Svelte applications. They are written into `.svelte` files, using a superset of HTML.\n\nAll three sections — script, styles and markup — are optional.\n\n<!-- prettier-ignore -->\n```svelte\n/// file: MyComponent.svelte\n<script module>\n\t// module-level logic goes here\n\t// (you will rarely use this)\n</script>\n\n<script>\n\t// instance-level logic goes here\n</script>\n\n<!-- markup (zero or more items) goes here -->\n\n<style>\n\t/* styles go here */\n</style>\n```\n\n## `<script>`\n\nA `<script>` block contains JavaScript (or TypeScript, when adding the `lang=\"ts\"` attribute) that runs when a component instance is created. Variables declared (or imported) at the top level can be referenced in the component's markup.\n\nIn addition to normal JavaScript, you can use _runes_ to declare [component props]($props) and add reactivity to your component. Runes are covered in the next section.\n\n<!-- TODO describe behaviour of `export` -->\n\n## `<script module>`\n\nA `<script>` tag with a `module` attribute runs once when the module first evaluates, rather than for each component instance. Variables declared in this block can be referenced elsewhere in the component, but not vice versa.\n\n```svelte\n<script module>\n\tlet total = 0;\n</script>\n\n<script>\n\ttotal += 1;\n\tconsole.log(`instantiated ${total} times`);\n</script>\n```\n\nYou can `export` bindings from this block, and they will become exports of the compiled module. You cannot `export default`, since the default export is the component itself.\n\n> [!NOTE] If you are using TypeScript and import such exports from a `module` block into a `.ts` file, make sure to have your editor setup so that TypeScript knows about them. This is the case for our VS Code extension and the IntelliJ plugin, but in other cases you might need to setup our [TypeScript editor plugin](https://www.npmjs.com/package/typescript-svelte-plugin).\n\n> [!LEGACY]\n> In Svelte 4, this script tag was created using `<script context=\"module\">`\n\n## `<style>`\n\nCSS inside a `<style>` block will be scoped to that component.\n\n```svelte\n<style>\n\tp {\n\t\t/* this will only affect <p> elements in this component */\n\t\tcolor: burlywood;\n\t}\n</style>\n```\n\nFor more information, head to the section on [styling](scoped-styles).\n"
  },
  {
    "path": "documentation/docs/01-introduction/04-svelte-js-files.md",
    "content": "---\ntitle: .svelte.js and .svelte.ts files\n---\n\nBesides `.svelte` files, Svelte also operates on `.svelte.js` and `.svelte.ts` files.\n\nThese behave like any other `.js` or `.ts` module, except that you can use runes. This is useful for creating reusable reactive logic, or sharing reactive state across your app (though note that you [cannot export reassigned state]($state#Passing-state-across-modules)).\n\n> [!LEGACY]\n> This is a concept that didn't exist prior to Svelte 5\n"
  },
  {
    "path": "documentation/docs/01-introduction/index.md",
    "content": "---\ntitle: Introduction\n---\n"
  },
  {
    "path": "documentation/docs/02-runes/01-what-are-runes.md",
    "content": "---\ntitle: What are runes?\n---\n\n> [!NOTE] **rune** /ruːn/ _noun_\n>\n> A letter or mark used as a mystical or magic symbol.\n\nRunes are symbols that you use in `.svelte` and `.svelte.js`/`.svelte.ts` files to control the Svelte compiler. If you think of Svelte as a language, runes are part of the syntax — they are _keywords_.\n\nRunes have a `$` prefix and look like functions:\n\n```js\nlet message = $state('hello');\n```\n\nThey differ from normal JavaScript functions in important ways, however:\n\n- You don't need to import them — they are part of the language\n- They're not values — you can't assign them to a variable or pass them as arguments to a function\n- Just like JavaScript keywords, they are only valid in certain positions (the compiler will help you if you put them in the wrong place)\n\n> [!LEGACY]\n> Runes didn't exist prior to Svelte 5.\n"
  },
  {
    "path": "documentation/docs/02-runes/02-$state.md",
    "content": "---\ntitle: $state\ntags: rune-state\n---\n\nThe `$state` rune allows you to create _reactive state_, which means that your UI _reacts_ when it changes.\n\n```svelte\n<script>\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count++}>\n\tclicks: {count}\n</button>\n```\n\nUnlike other frameworks you may have encountered, there is no API for interacting with state — `count` is just a number, rather than an object or a function, and you can update it like you would update any other variable.\n\n### Deep state\n\nIf `$state` is used with an array or a simple object, the result is a deeply reactive _state proxy_. [Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) allow Svelte to run code when you read or write properties, including via methods like `array.push(...)`, triggering granular updates.\n\nState is proxified recursively until Svelte finds something other than an array or simple object (like a class or an object created with `Object.create`). In a case like this...\n\n```js\nlet todos = $state([\n\t{\n\t\tdone: false,\n\t\ttext: 'add more todos'\n\t}\n]);\n```\n\n...modifying an individual todo's property will trigger updates to anything in your UI that depends on that specific property:\n\n```js\nlet todos = [{ done: false, text: 'add more todos' }];\n// ---cut---\ntodos[0].done = !todos[0].done;\n```\n\nIf you push a new object to the array, it will also be proxified:\n\n```js\nlet todos = [{ done: false, text: 'add more todos' }];\n// ---cut---\ntodos.push({\n\tdone: false,\n\ttext: 'eat lunch'\n});\n```\n\n> [!NOTE] When you update properties of proxies, the original object is _not_ mutated. If you need to use your own proxy handlers in a state proxy, [you should wrap the object _after_ wrapping it in `$state`](https://svelte.dev/playground/hello-world?version=latest#H4sIAAAAAAAACpWR3WoDIRCFX2UqhWyIJL3erAulL9C7XnQLMe5ksbUqOpsfln33YuyGFNJC8UKdc2bOhw7Myk9kJXsJ0nttO9jcR5KEG9AWJDwHdzwxznbaYGTl68Do5JM_FRifuh-9X8Y9Gkq1rYx4q66cJbQUWcmqqIL2VDe2IYMEbvuOikBADi-GJDSkXG-phId0G-frye2DO2psQYDFQ0Ys8gQO350dUkEydEg82T0GOs0nsSG9g2IqgxACZueo2ZUlpdvoDC6N64qsg1QKY8T2bpZp8gpIfbCQ85Zn50Ud82HkeY83uDjspenxv3jXcSDyjPWf9L1vJf0GH666J-jLu1ery4dV257IWXBWGa0-xFDMQdTTn2ScxWKsn86ROsLwQxqrVR5QM84Ij8TKFD2-cUZSm4O2LSt30kQcvwCgCmfZnAIAAA==).\n\nNote that if you destructure a reactive value, the references are not reactive — as in normal JavaScript, they are evaluated at the point of destructuring:\n\n```js\nlet todos = [{ done: false, text: 'add more todos' }];\n// ---cut---\nlet { done, text } = todos[0];\n\n// this will not affect the value of `done`\ntodos[0].done = !todos[0].done;\n```\n\n### Classes\n\nClass instances are not proxied. Instead, you can use `$state` in class fields (whether public or private), or as the first assignment to a property immediately inside the `constructor`:\n\n```js\n// @errors: 7006 2554\nclass Todo {\n\tdone = $state(false);\n\n\tconstructor(text) {\n\t\tthis.text = $state(text);\n\t}\n\n\treset() {\n\t\tthis.text = '';\n\t\tthis.done = false;\n\t}\n}\n```\n\n> [!NOTE] The compiler transforms `done` and `text` into `get`/`set` methods on the class prototype referencing private fields. This means the properties are not enumerable.\n\nWhen calling methods in JavaScript, the value of [`this`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) matters. This won't work, because `this` inside the `reset` method will be the `<button>` rather than the `Todo`:\n\n```svelte\n<button onclick={todo.reset}>\n\treset\n</button>\n```\n\nYou can either use an inline function...\n\n```svelte\n<button onclick=+++{() => todo.reset()}>+++\n\treset\n</button>\n```\n\n...or use an arrow function in the class definition:\n\n```js\n// @errors: 7006 2554\nclass Todo {\n\tdone = $state(false);\n\n\tconstructor(text) {\n\t\tthis.text = $state(text);\n\t}\n\n\t+++reset = () => {+++\n\t\tthis.text = '';\n\t\tthis.done = false;\n\t}\n}\n```\n\n### Built-in classes\n\nSvelte provides reactive implementations of built-in classes like `Set`, `Map`, `Date` and `URL` that can be imported from [`svelte/reactivity`](svelte-reactivity).\n\n## `$state.raw`\n\nIn cases where you don't want objects and arrays to be deeply reactive you can use `$state.raw`.\n\nState declared with `$state.raw` cannot be mutated; it can only be _reassigned_. In other words, rather than assigning to a property of an object, or using an array method like `push`, replace the object or array altogether if you'd like to update it:\n\n```js\nlet person = $state.raw({\n\tname: 'Heraclitus',\n\tage: 49\n});\n\n// this will have no effect\nperson.age += 1;\n\n// this will work, because we're creating a new person\nperson = {\n\tname: 'Heraclitus',\n\tage: 50\n};\n```\n\nThis can improve performance with large arrays and objects that you weren't planning to mutate anyway, since it avoids the cost of making them reactive. Note that raw state can _contain_ reactive state (for example, a raw array of reactive objects).\n\nAs with `$state`, you can declare class fields using `$state.raw`.\n\n## `$state.snapshot`\n\nTo take a static snapshot of a deeply reactive `$state` proxy, use `$state.snapshot`:\n\n```svelte\n<script>\n\tlet counter = $state({ count: 0 });\n\n\tfunction onclick() {\n\t\t// Will log `{ count: ... }` rather than `Proxy { ... }`\n\t\tconsole.log($state.snapshot(counter));\n\t}\n</script>\n```\n\nThis is handy when you want to pass some state to an external library or API that doesn't expect a proxy, such as `structuredClone`.\n\n## `$state.eager`\n\nWhen state changes, it may not be reflected in the UI immediately if it is used by an `await` expression, because [updates are synchronized](await-expressions#Synchronized-updates).\n\nIn some cases, you may want to update the UI as soon as the state changes. For example, you might want to update a navigation bar when the user clicks on a link, so that they get visual feedback while waiting for the new page to load. To do this, use `$state.eager(value)`:\n\n```svelte\n<nav>\n\t<a href=\"/\" aria-current={$state.eager(pathname) === '/' ? 'page' : null}>home</a>\n\t<a href=\"/about\" aria-current={$state.eager(pathname) === '/about' ? 'page' : null}>about</a>\n</nav>\n```\n\nUse this feature sparingly, and only to provide feedback in response to user action — in general, allowing Svelte to coordinate updates will provide a better user experience.\n\n## Passing state into functions\n\nJavaScript is a _pass-by-value_ language — when you call a function, the arguments are the _values_ rather than the _variables_. In other words:\n\n```js\n/// file: index.js\n// @filename: index.js\n// ---cut---\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction add(a, b) {\n\treturn a + b;\n}\n\nlet a = 1;\nlet b = 2;\nlet total = add(a, b);\nconsole.log(total); // 3\n\na = 3;\nb = 4;\nconsole.log(total); // still 3!\n```\n\nIf `add` wanted to have access to the _current_ values of `a` and `b`, and to return the current `total` value, you would need to use functions instead:\n\n```js\n/// file: index.js\n// @filename: index.js\n// ---cut---\n/**\n * @param {() => number} getA\n * @param {() => number} getB\n */\nfunction add(+++getA, getB+++) {\n\treturn +++() => getA() + getB()+++;\n}\n\nlet a = 1;\nlet b = 2;\nlet total = add+++(() => a, () => b)+++;\nconsole.log(+++total()+++); // 3\n\na = 3;\nb = 4;\nconsole.log(+++total()+++); // 7\n```\n\nState in Svelte is no different — when you reference something declared with the `$state` rune...\n\n```js\nlet a = +++$state(1)+++;\nlet b = +++$state(2)+++;\n```\n\n...you're accessing its _current value_.\n\nNote that 'functions' is broad — it encompasses properties of proxies and [`get`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)/[`set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set) properties...\n\n```js\n/// file: index.js\n// @filename: index.js\n// ---cut---\n/**\n * @param {{ a: number, b: number }} input\n */\nfunction add(input) {\n\treturn {\n\t\tget value() {\n\t\t\treturn input.a + input.b;\n\t\t}\n\t};\n}\n\nlet input = $state({ a: 1, b: 2 });\nlet total = add(input);\nconsole.log(total.value); // 3\n\ninput.a = 3;\ninput.b = 4;\nconsole.log(total.value); // 7\n```\n\n...though if you find yourself writing code like that, consider using [classes](#Classes) instead.\n\n## Passing state across modules\n\nYou can declare state in `.svelte.js` and `.svelte.ts` files, but you can only _export_ that state if it's not directly reassigned. In other words you can't do this:\n\n```js\n/// file: state.svelte.js\nexport let count = $state(0);\n\nexport function increment() {\n\tcount += 1;\n}\n```\n\nThat's because every reference to `count` is transformed by the Svelte compiler — the code above is roughly equivalent to this:\n\n```js\n/// file: state.svelte.js (compiler output)\n// @filename: index.ts\ninterface Signal<T> {\n\tvalue: T;\n}\n\ninterface Svelte {\n\tstate<T>(value?: T): Signal<T>;\n\tget<T>(source: Signal<T>): T;\n\tset<T>(source: Signal<T>, value: T): void;\n}\ndeclare const $: Svelte;\n// ---cut---\nexport let count = $.state(0);\n\nexport function increment() {\n\t$.set(count, $.get(count) + 1);\n}\n```\n\n> [!NOTE] You can see the code Svelte generates by clicking the 'JS Output' tab in the [playground](/playground).\n\nSince the compiler only operates on one file at a time, if another file imports `count` Svelte doesn't know that it needs to wrap each reference in `$.get` and `$.set`:\n\n```js\n// @filename: state.svelte.js\nexport let count = 0;\n\n// @filename: index.js\n// ---cut---\nimport { count } from './state.svelte.js';\n\nconsole.log(typeof count); // 'object', not 'number'\n```\n\nThis leaves you with two options for sharing state between modules — either don't reassign it...\n\n```js\n// This is allowed — since we're updating\n// `counter.count` rather than `counter`,\n// Svelte doesn't wrap it in `$.state`\nexport const counter = $state({\n\tcount: 0\n});\n\nexport function increment() {\n\tcounter.count += 1;\n}\n```\n\n...or don't directly export it:\n\n```js\nlet count = $state(0);\n\nexport function getCount() {\n\treturn count;\n}\n\nexport function increment() {\n\tcount += 1;\n}\n```\n"
  },
  {
    "path": "documentation/docs/02-runes/03-$derived.md",
    "content": "---\ntitle: $derived\ntags: rune-derived\n---\n\nDerived state is declared with the `$derived` rune:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n</script>\n\n<button onclick={() => count++}>\n\t{doubled}\n</button>\n\n<p>{count} doubled is {doubled}</p>\n```\n\nThe expression inside `$derived(...)` should be free of side-effects. Svelte will disallow state changes (e.g. `count++`) inside derived expressions.\n\nAs with `$state`, you can mark class fields as `$derived`.\n\n> [!NOTE] Code in Svelte components is only executed once at creation. Without the `$derived` rune, `doubled` would maintain its original value even when `count` changes.\n\n## `$derived.by`\n\nSometimes you need to create complex derivations that don't fit inside a short expression. In these cases, you can use `$derived.by` which accepts a function as its argument.\n\n```svelte\n<script>\n\tlet numbers = $state([1, 2, 3]);\n\tlet total = $derived.by(() => {\n\t\tlet total = 0;\n\t\tfor (const n of numbers) {\n\t\t\ttotal += n;\n\t\t}\n\t\treturn total;\n\t});\n</script>\n\n<button onclick={() => numbers.push(numbers.length + 1)}>\n\t{numbers.join(' + ')} = {total}\n</button>\n```\n\nIn essence, `$derived(expression)` is equivalent to `$derived.by(() => expression)`.\n\n## Understanding dependencies\n\nAnything read synchronously inside the `$derived` expression (or `$derived.by` function body) is considered a _dependency_ of the derived state. When the state changes, the derived will be marked as _dirty_ and recalculated when it is next read.\n\nIn addition, if an expression contains an [`await`](await-expressions), Svelte transforms it such that any state _after_ the `await` is also tracked — in other words, in a case like this...\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\nlet total = $derived(await a + b);\n```\n\n...both `a` and `b` are tracked, even though `b` is only read once `a` has resolved, after the initial execution. (This does not apply to `await` in functions that are called by the expression, only the expression itself.)\n\nTo exempt a piece of state from being treated as a dependency, use [`untrack`](svelte#untrack).\n\n## Overriding derived values\n\nDerived expressions are recalculated when their dependencies change, but you can temporarily override their values by reassigning them (unless they are declared with `const`). This can be useful for things like _optimistic UI_, where a value is derived from the 'source of truth' (such as data from your server) but you'd like to show immediate feedback to the user:\n\n```svelte\n<script>\n\tlet { post, like } = $props();\n\n\tlet likes = $derived(post.likes);\n\n\tasync function onclick() {\n\t\t// increment the `likes` count immediately...\n\t\tlikes += 1;\n\n\t\t// and tell the server, which will eventually update `post`\n\t\ttry {\n\t\t\tawait like();\n\t\t} catch {\n\t\t\t// failed! roll back the change\n\t\t\tlikes -= 1;\n\t\t}\n\t}\n</script>\n\n<button {onclick}>🧡 {likes}</button>\n```\n\n> [!NOTE] Prior to Svelte 5.25, deriveds were read-only.\n\n## Deriveds and reactivity\n\nUnlike `$state`, which converts objects and arrays to [deeply reactive proxies]($state#Deep-state), `$derived` values are left as-is. For example, [in a case like this](/playground/untitled#H4sIAAAAAAAAE4VU22rjMBD9lUHd3aaQi9PdstS1A3t5XvpQ2Ic4D7I1iUUV2UjjNMX431eS7TRdSosxgjMzZ45mjt0yzffIYibvy0ojFJWqDKCQVBk2ZVup0LJ43TJ6rn2aBxw-FP2o67k9oCKP5dziW3hRaUJNjoYltjCyplWmM1JIIAn3FlL4ZIkTTtYez6jtj4w8WwyXv9GiIXiQxLVs9pfTMR7EuoSLIuLFbX7Z4930bZo_nBrD1bs834tlfvsBz9_SyX6PZXu9XaL4gOWn4sXjeyzftv4ZWfyxubpzxzg6LfD4MrooxELEosKCUPigQCMPKCZh0OtQE1iSxcsmdHuBvCiHZXALLXiN08EL3RRkaJ_kDVGle0HcSD5TPEeVtj67O4Nrg9aiSNtBY5oODJkrL5QsHtN2cgXp6nSJMWzpWWGasdlsGEMbzi5jPr5KFr0Ep7pdeM2-TCelCddIhDxAobi1jqF3cMaC1RKp64bAW9iFAmXGIHfd4wNXDabtOLN53w8W53VvJoZLh7xk4Rr3CoL-UNoLhWHrT1JQGcM17u96oES5K-kc2XOzkzqGCKL5De79OUTyyrg1zgwXsrEx3ESfx4Bz0M5UjVMHB24mw9SuXtXFoN13fYKOM1tyUT3FbvbWmSWCZX2Er-41u5xPoml45svRahl9Wb9aasbINJixDZwcPTbyTLZSUsAvrg_cPuCR7s782_WU8343Y72Qtlb8OYatwuOQvuN13M_hJKNfxann1v1U_B1KZ_D_mzhzhz24fw85CSz2irtN9w9HshBK7AQAAA==)...\n\n```js\n// @errors: 7005\nlet items = $state([ /*...*/ ]);\n\nlet index = $state(0);\nlet selected = $derived(items[index]);\n```\n\n...you can change (or `bind:` to) properties of `selected` and it will affect the underlying `items` array. If `items` was _not_ deeply reactive, mutating `selected` would have no effect.\n\n## Destructuring\n\nIf you use destructuring with a `$derived` declaration, the resulting variables will all be reactive — this...\n\n```js\nfunction stuff() { return { a: 1, b: 2, c: 3 } }\n// ---cut---\nlet { a, b, c } = $derived(stuff());\n```\n\n...is roughly equivalent to this:\n\n```js\nfunction stuff() { return { a: 1, b: 2, c: 3 } }\n// ---cut---\nlet _stuff = $derived(stuff());\nlet a = $derived(_stuff.a);\nlet b = $derived(_stuff.b);\nlet c = $derived(_stuff.c);\n```\n\n## Update propagation\n\nSvelte uses something called _push-pull reactivity_ — when state is updated, everything that depends on the state (whether directly or indirectly) is immediately notified of the change (the 'push'), but derived values are not re-evaluated until they are actually read (the 'pull').\n\nIf the new value of a derived is referentially identical to its previous value, downstream updates will be skipped. In other words, Svelte will only update the text inside the button when `large` changes, not when `count` changes, even though `large` depends on `count`:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\tlet large = $derived(count > 10);\n</script>\n\n<button onclick={() => count++}>\n\t{large}\n</button>\n```\n"
  },
  {
    "path": "documentation/docs/02-runes/04-$effect.md",
    "content": "---\ntitle: $effect\ntags: rune-effect\n---\n\nEffects are functions that run when state updates, and can be used for things like calling third-party libraries, drawing on `<canvas>` elements, or making network requests. They only run in the browser, not during server-side rendering.\n\nGenerally speaking, you should _not_ update state inside effects, as it will make code more convoluted and will often lead to never-ending update cycles. If you find yourself doing so, see [when not to use `$effect`](#When-not-to-use-$effect) to learn about alternative approaches.\n\nYou can create an effect with the `$effect` rune ([demo](/playground/untitled#H4sIAAAAAAAAE31S246bMBD9lZF3pSRSAqTVvrCAVPUP2sdSKY4ZwJJjkD0hSVH-vbINuWxXfQH5zMyZc2ZmZLVUaFn6a2R06ZGlHmBrpvnBvb71fWQHVOSwPbf4GS46TajJspRlVhjZU1HqkhQSWPkHIYdXS5xw-Zas3ueI6FRn7qHFS11_xSRZhIxbFtcDtw7SJb1iXaOg5XIFeQGjzyPRaevYNOGZIJ8qogbpe8CWiy_VzEpTXiQUcvPDkSVrSNZz1UlW1N5eLcqmpdXUvaQ4BmqlhZNUCgxuzFHDqUWNAxrYeUM76AzsnOsdiJbrBp_71lKpn3RRbii-4P3f-IMsRxS-wcDV_bL4PmSdBa2wl7pKnbp8DMgVvJm8ZNskKRkEM_OzyOKQFkgqOYBQ3Nq89Ns0nbIl81vMFN-jKoLMTOr-SOBOJS-Z8f5Y6D1wdcR8dFqvEBdetK-PHwj-z-cH8oHPY54wRJ8Ys7iSQ3Bg3VA9azQbmC9k35kKzYa6PoVtfwbbKVnBixBiGn7Pq0rqJoUtHiCZwAM3jdTPWCVtr_glhVrhecIa3vuksJ_b7TqFs4DPyriSjd5IwoNNQaAmNI-ESfR2p8zimzvN1swdCkvJHPH6-_oX8o1SgcIDAAA=)):\n\n```svelte\n<script>\n\tlet size = $state(50);\n\tlet color = $state('#ff3e00');\n\n\tlet canvas;\n\n\t$effect(() => {\n\t\tconst context = canvas.getContext('2d');\n\t\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\n\t\t// this will re-run whenever `color` or `size` change\n\t\tcontext.fillStyle = color;\n\t\tcontext.fillRect(0, 0, size, size);\n\t});\n</script>\n\n<canvas bind:this={canvas} width=\"100\" height=\"100\"></canvas>\n```\n\nWhen Svelte runs an effect function, it tracks which pieces of state (and derived state) are accessed (unless accessed inside [`untrack`](svelte#untrack)), and re-runs the function when that state later changes.\n\n> [!NOTE] If you're having difficulty understanding why your `$effect` is rerunning or is not running see [understanding dependencies](#Understanding-dependencies). Effects are triggered differently than the `$:` blocks you may be used to if coming from Svelte 4.\n\n### Understanding lifecycle\n\nYour effects run after the component has been mounted to the DOM, and in a [microtask](https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide) after state changes. Re-runs are batched (i.e. changing `color` and `size` in the same moment won't cause two separate runs), and happen after any DOM updates have been applied.\n\nYou can use `$effect` anywhere, not just at the top level of a component, as long as it is called while a parent effect is running.\n\n> [!NOTE] Svelte uses effects internally to represent logic and expressions in your template — this is how `<h1>hello {name}!</h1>` updates when `name` changes.\n\nAn effect can return a _teardown function_ which will run immediately before the effect re-runs:\n\n<!-- codeblock:start {\"title\":\"Effect teardown\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet count = $state(0);\n\tlet milliseconds = $state(1000);\n\n\t$effect(() => {\n\t\t// This will be recreated whenever `milliseconds` changes\n\t\tconst interval = setInterval(() => {\n\t\t\tcount += 1;\n\t\t}, milliseconds);\n\n\t\treturn () => {\n\t\t\t// if a teardown function is provided, it will run\n\t\t\t// a) immediately before the effect re-runs\n\t\t\t// b) when the component is destroyed\n\t\t\tclearInterval(interval);\n\t\t};\n\t});\n</script>\n\n<h1>{count}</h1>\n\n<button onclick={() => (milliseconds *= 2)}>slower</button>\n<button onclick={() => (milliseconds /= 2)}>faster</button>\n```\n<!-- codeblock:end -->\n\nTeardown functions also run when the effect is destroyed, which happens when its parent is destroyed (for example, a component is unmounted) or the parent effect re-runs.\n\n### Understanding dependencies\n\n`$effect` automatically picks up any reactive values (`$state`, `$derived`, `$props`) that are _synchronously_ read inside its function body (including indirectly, via function calls) and registers them as dependencies. When those dependencies change, the `$effect` schedules a re-run.\n\nIf `$state` and `$derived` are used directly inside the `$effect` (for example, during creation of a [reactive class](https://svelte.dev/docs/svelte/$state#Classes)), those values will _not_ be treated as dependencies.\n\nValues that are read _asynchronously_ — after an `await` or inside a `setTimeout`, for example — will not be tracked. Here, the canvas will be repainted when `color` changes, but not when `size` changes ([demo](/playground/untitled#H4sIAAAAAAAAE31T246bMBD9lZF3pWSlBEirfaEQqdo_2PatVIpjBrDkGGQPJGnEv1e2IZfVal-wfHzmzJyZ4cIqqdCy9M-F0blDlnqArZjmB3f72XWRHVCRw_bc4me4aDWhJstSlllhZEfbQhekkMDKfwg5PFvihMvX5OXH_CJa1Zrb0-Kpqr5jkiwC48rieuDWQbqgZ6wqFLRcvkC-hYvnkWi1dWqa8ESQTxFRjfQWsOXiWzmr0sSLhEJu3p1YsoJkNUcdZUnN9dagrBu6FVRQHAM10sJRKgUG16bXcGxQ44AGdt7SDkTDdY02iqLHnJVU6hedlWuIp94JW6Tf8oBt_8GdTxlF0b4n0C35ZLBzXb3mmYn3ae6cOW74zj0YVzDNYXRHFt9mprNgHfZSl6mzml8CMoLvTV6wTZIUDEJv5us2iwMtiJRyAKG4tXnhl8O0yhbML0Wm-B7VNlSSSd31BG7z8oIZZ6dgIffAVY_5xdU9Qrz1Bnx8fCfwtZ7v8Qc9j3nB8PqgmMWlHIID6-bkVaPZwDySfWtKNGtquxQ23Qlsq2QJT0KIqb8dL0up6xQ2eIBkAg_c1FI_YqW0neLnFCqFpwmreedJYT7XX8FVOBfwWRhXstZrSXiwKQjUhOZeMIleb5JZfHWn2Yq5pWEpmR7Hv-N_wEqT8hEEAAA=)):\n\n```ts\n// @filename: index.ts\ndeclare let canvas: {\n\twidth: number;\n\theight: number;\n\tgetContext(type: '2d', options?: CanvasRenderingContext2DSettings): CanvasRenderingContext2D;\n};\ndeclare let color: string;\ndeclare let size: number;\n\n// ---cut---\n$effect(() => {\n\tconst context = canvas.getContext('2d');\n\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\n\t// this will re-run whenever `color` changes...\n\tcontext.fillStyle = color;\n\n\tsetTimeout(() => {\n\t\t// ...but not when `size` changes\n\t\tcontext.fillRect(0, 0, size, size);\n\t}, 0);\n});\n```\n\nAn effect only reruns when the object it reads changes, not when a property inside it changes. (If you want to observe changes _inside_ an object at dev time, you can use [`$inspect`]($inspect).)\n\n```svelte\n<script>\n\tlet state = $state({ value: 0 });\n\tlet derived = $derived({ value: state.value * 2 });\n\n\t// this will run once, because `state` is never reassigned (only mutated)\n\t$effect(() => {\n\t\tstate;\n\t});\n\n\t// this will run whenever `state.value` changes...\n\t$effect(() => {\n\t\tstate.value;\n\t});\n\n\t// ...and so will this, because `derived` is a new object each time\n\t$effect(() => {\n\t\tderived;\n\t});\n</script>\n\n<button onclick={() => (state.value += 1)}>\n\t{state.value}\n</button>\n\n<p>{state.value} doubled is {derived.value}</p>\n```\n\nAn effect only depends on the values that it read the last time it ran. This has interesting implications for effects that have conditional code.\n\nFor instance, if `condition` is `true` in the code snippet below, the code inside the `if` block will run and `color` will be evaluated. This means that changes to either `condition` or `color` [will cause the effect to re-run](/playground/untitled#H4sIAAAAAAAAE21RQW6DMBD8ytaNBJHaJFLViwNIVZ8RcnBgXVk1xsILTYT4e20TQg89IOPZ2fHM7siMaJBx9tmaWpFqjQNlAKXEihx7YVJpdIyfRkY3G4gB8Pi97cPanRtQU8AuwuF_eNUaQuPlOMtc1SlLRWlKUo1tOwJflUikQHZtA0klzCDc64Imx0ANn8bInV1CDhtHgjClrsftcSXotluLybOUb3g4JJHhOZs5WZpuIS9gjNqkJKQP5e2ClrR4SMdZ13E4xZ8zTPOTJU2A2uE_PQ9COCI926_hTVarIU4hu_REPlBrKq2q73ycrf1N-vS4TMUsulaVg3EtR8H9rFgsg8uUsT1B2F9eshigZHBRpuaD0D3mY8Qm2BfB5N2YyRzdNEYVDy0Ja-WsFjcOUuP1HvFLWA6H3XuHTUSmmDV2--0TXonxsKbp7G9C6R__NONS-MFNvxj_d6mBAgAA).\n\nConversely, if `condition` is `false`, `color` will not be evaluated, and the effect will _only_ re-run again when `condition` changes.\n\n```ts\n// @filename: ambient.d.ts\ndeclare module 'canvas-confetti' {\n\tinterface ConfettiOptions {\n\t\tcolors: string[];\n\t}\n\n\tfunction confetti(opts?: ConfettiOptions): void;\n\texport default confetti;\n}\n\n// @filename: index.js\n// ---cut---\nimport confetti from 'canvas-confetti';\n\nlet condition = $state(true);\nlet color = $state('#ff3e00');\n\n$effect(() => {\n\tif (condition) {\n\t\tconfetti({ colors: [color] });\n\t} else {\n\t\tconfetti();\n\t}\n});\n```\n\n## `$effect.pre`\n\nIn rare cases, you may need to run code _before_ the DOM updates. For this we can use the `$effect.pre` rune:\n\n```svelte\n<script>\n\timport { tick } from 'svelte';\n\n\tlet div = $state();\n\tlet messages = $state([]);\n\n\t// ...\n\n\t$effect.pre(() => {\n\t\tif (!div) return; // not yet mounted\n\n\t\t// reference `messages` array length so that this code re-runs whenever it changes\n\t\tmessages.length;\n\n\t\t// autoscroll when new messages are added\n\t\tif (div.offsetHeight + div.scrollTop > div.scrollHeight - 20) {\n\t\t\ttick().then(() => {\n\t\t\t\tdiv.scrollTo(0, div.scrollHeight);\n\t\t\t});\n\t\t}\n\t});\n</script>\n\n<div bind:this={div}>\n\t{#each messages as message}\n\t\t<p>{message}</p>\n\t{/each}\n</div>\n```\n\nApart from the timing, `$effect.pre` works exactly like `$effect`.\n\n## `$effect.tracking`\n\nThe `$effect.tracking` rune is an advanced feature that tells you whether or not the code is running inside a tracking context, such as an effect or inside your template:\n\n<!-- codeblock:start {\"title\":\"$effect.tracking()\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tconsole.log('in component setup:', $effect.tracking()); // false\n\n\t$effect(() => {\n\t\tconsole.log('in effect:', $effect.tracking()); // true\n\t});\n</script>\n\n<p>in template: {$effect.tracking()}</p> <!-- true -->\n```\n<!-- codeblock:end -->\n\nIt is used to implement abstractions like [`createSubscriber`](/docs/svelte/svelte-reactivity#createSubscriber), which will create listeners to update reactive values but _only_ if those values are being tracked (rather than, for example, read inside an event handler).\n\n## `$effect.pending`\n\nWhen using [`await`](await-expressions) in components, the `$effect.pending()` rune tells you how many promises are pending in the current [boundary](svelte-boundary), not including child boundaries:\n\n<!-- codeblock:start {\"title\":\"$effect.pending\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet a = $state(1);\n\tlet b = $state(2);\n\n\tasync function add(a, b) {\n\t\tawait new Promise((f) => setTimeout(f, 500)); // artificial delay\n\t\treturn a + b;\n\t}\n</script>\n\n<button onclick={() => a++}>a++</button>\n<button onclick={() => b++}>b++</button>\n\n<p>{a} + {b} = {await add(a, b)}</p>\n\n{#if $effect.pending()}\n\t<p>pending promises: {$effect.pending()}</p>\n{/if}\n```\n<!-- codeblock:end -->\n\n## `$effect.root`\n\nThe `$effect.root` rune is an advanced feature that creates a non-tracked scope that doesn't auto-cleanup. This is useful for nested effects that you want to manually control. This rune also allows for the creation of effects outside of the component initialisation phase.\n\n```js\nconst destroy = $effect.root(() => {\n\t$effect(() => {\n\t\t// setup\n\t});\n\n\treturn () => {\n\t\t// cleanup\n\t};\n});\n\n// later...\ndestroy();\n```\n\n## When not to use `$effect`\n\nIn general, `$effect` is best considered something of an escape hatch — useful for things like analytics and direct DOM manipulation — rather than a tool you should use frequently. In particular, avoid using it to synchronise state. Instead of this...\n\n```svelte\n<script>\n\tlet count = $state(0);\n\tlet doubled = $state();\n\n\t// don't do this!\n\t$effect(() => {\n\t\tdoubled = count * 2;\n\t});\n</script>\n```\n\n...do this:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n</script>\n```\n\n> [!NOTE] For things that are more complicated than a simple expression like `count * 2`, you can also use `$derived.by`.\n\nIf you're using an effect because you want to be able to reassign the derived value (to build an optimistic UI, for example) note that [deriveds can be directly overridden]($derived#Overriding-derived-values) as of Svelte 5.25.\n\nYou might be tempted to do something convoluted with effects to link one value to another. The following example shows two inputs for \"money spent\" and \"money left\" that are connected to each other. If you update one, the other should update accordingly. Instead of using effects for this...\n\n<!-- codeblock:start {\"title\":\"Setting state in effects (don't do this!)\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tconst total = 100;\n\tlet spent = $state(0);\n\tlet left = $state(total);\n\n\t$effect(() => {\n\t\tleft = total - spent;\n\t});\n\n\t$effect(() => {\n\t\tspent = total - left;\n\t});\n</script>\n\n<label>\n\t<input type=\"range\" bind:value={spent} max={total} />\n\t{spent}/{total} spent\n</label>\n\n<label>\n\t<input type=\"range\" bind:value={left} max={total} />\n\t{left}/{total} left\n</label>\n\n<style>\n\tlabel {\n\t\tdisplay: flex;\n\t\tgap: 0.5em;\n\t}\n</style>\n```\n<!-- codeblock:end -->\n\n...use `oninput` callbacks or — better still — [function bindings](bind#Function-bindings) where possible:\n\n<!-- codeblock:start {\"title\":\"Setting state with function bindings\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tconst total = 100;\n\tlet spent = $state(0);\n\tlet left = $derived(total - spent);\n\n+++\tfunction updateLeft(left) {\n\t\tspent = total - left;\n\t}+++\n</script>\n\n<label>\n\t<input type=\"range\" bind:value={spent} max={total} />\n\t{spent}/{total} spent\n</label>\n\n<label>\n\t<input type=\"range\" +++bind:value={() => left, updateLeft}+++ max={total} />\n\t{left}/{total} left\n</label>\n\n<style>\n\tlabel {\n\t\tdisplay: flex;\n\t\tgap: 0.5em;\n\t}\n</style>\n```\n<!-- codeblock:end -->\n\nIf you absolutely have to update `$state` within an effect and run into an infinite loop because you read and write to the same `$state`, use [untrack](svelte#untrack).\n"
  },
  {
    "path": "documentation/docs/02-runes/05-$props.md",
    "content": "---\ntitle: $props\ntags: rune-props\n---\n\nThe inputs to a component are referred to as _props_, which is short for _properties_. You pass props to components just like you pass attributes to elements:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport MyComponent from './MyComponent.svelte';\n</script>\n\n<MyComponent adjective=\"cool\" />\n```\n\nOn the other side, inside `MyComponent.svelte`, we can receive props with the `$props` rune...\n\n```svelte\n<!--- file: MyComponent.svelte --->\n<script>\n\tlet props = $props();\n</script>\n\n<p>this component is {props.adjective}</p>\n```\n\n...though more commonly, you'll [_destructure_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) your props:\n\n```svelte\n<!--- file: MyComponent.svelte --->\n<script>\n\tlet +++{ adjective }+++ = $props();\n</script>\n\n<p>this component is {+++adjective+++}</p>\n```\n\n## Fallback values\n\nDestructuring allows us to declare fallback values, which are used if the parent component does not set a given prop (or the value is `undefined`):\n\n```js\nlet { adjective = 'happy' } = $props();\n```\n\n> [!NOTE] Fallback values are not turned into reactive state proxies (see [Updating props](#Updating-props) for more info)\n\n## Renaming props\n\nWe can also use the destructuring assignment to rename props, which is necessary if they're invalid identifiers, or a JavaScript keyword like `super`:\n\n```js\nlet { super: trouper = 'lights are gonna find me' } = $props();\n```\n\n## Rest props\n\nFinally, we can use a _rest property_ to get, well, the rest of the props:\n\n```js\nlet { a, b, c, ...others } = $props();\n```\n\n## Updating props\n\nReferences to a prop inside a component update when the prop itself updates — when `count` changes in `App.svelte`, it will also change inside `Child.svelte`. But the child component is able to temporarily override the prop value, which can be useful for unsaved ephemeral state:\n\n<!-- codeblock:start {\"title\":\"Temporarily updating props\",\"selected\":\"Child.svelte\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Child from './Child.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => (count += 1)}>\n\tclicks (parent): {count}\n</button>\n\n<Child {count} />\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\tlet { count } = $props();\n</script>\n\n<button onclick={() => (count += 1)}>\n\tclicks (child): {count}\n</button>\n```\n<!-- codeblock:end -->\n\nWhile you can temporarily _reassign_ props, you should not _mutate_ props unless they are [bindable]($bindable).\n\nIf the prop is a regular object, the mutation will have no effect:\n\n<!-- codeblock:start {\"title\":\"Non-reactive props\",\"selected\":\"Child.svelte\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child object={{ count: 0 }} />\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\tlet { object } = $props();\n</script>\n\n<button onclick={() => {\n\t// has no effect\n\tobject.count += 1\n}}>\n\tclicks: {object.count}\n</button>\n```\n<!-- codeblock:end -->\n\nIf the prop is a reactive state proxy, however, then mutations _will_ have an effect but you will see an [`ownership_invalid_mutation`](runtime-warnings#Client-warnings-ownership_invalid_mutation) warning, because the component is mutating state that does not 'belong' to it:\n\n<!-- codeblock:start {\"title\":\"Invalid mutation\",\"selected\":\"Child.svelte\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Child from './Child.svelte';\n\n\tlet object = $state({count: 0});\n</script>\n\n<Child {object} />\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\tlet { object } = $props();\n</script>\n\n<button onclick={() => {\n\t// will cause the count below to update,\n\t// but with a warning. Don't mutate\n\t// objects you don't own!\n\tobject.count += 1\n}}>\n\tclicks: {object.count}\n</button>\n```\n<!-- codeblock:end -->\n\nThe fallback value of a prop not declared with `$bindable` is left untouched — it is not turned into a reactive state proxy — meaning mutations will not cause updates:\n\n<!-- codeblock:start {\"title\":\"Non-reactive fallback props\",\"selected\":\"Child.svelte\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child />\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\tlet { object = { count: 0 } } = $props();\n</script>\n\n<button onclick={() => {\n\t// has no effect if the fallback value is used\n\tobject.count += 1\n}}>\n\tclicks: {object.count}\n</button>\n```\n<!-- codeblock:end -->\n\nIn summary: don't mutate props. Either use callback props to communicate changes, or — if parent and child should share the same object — use the [`$bindable`]($bindable) rune.\n\n## Type safety\n\nYou can add type safety to your components by annotating your props, as you would with any other variable declaration. In TypeScript that might look like this...\n\n```svelte\n<script lang=\"ts\">\n\tlet { adjective }: { adjective: string } = $props();\n</script>\n```\n\n...while in JSDoc you can do this:\n\n```svelte\n<script>\n\t/** @type {{ adjective: string }} */\n\tlet { adjective } = $props();\n</script>\n```\n\nYou can, of course, separate the type declaration from the annotation:\n\n```svelte\n<script lang=\"ts\">\n\tinterface Props {\n\t\tadjective: string;\n\t}\n\n\tlet { adjective }: Props = $props();\n</script>\n```\n\n> [!NOTE] Interfaces for native DOM elements are provided in the `svelte/elements` module (see [Typing wrapper components](typescript#Typing-wrapper-components))\n\nIf your component exposes [snippet](snippet) props like `children`, these should be typed using the `Snippet` interface imported from `'svelte'` — see [Typing snippets](snippet#Typing-snippets) for examples.\n\nAdding types is recommended, as it ensures that people using your component can easily discover which props they should provide.\n\n\n## `$props.id()`\n\nThis rune, added in version 5.20.0, generates an ID that is unique to the current component instance. When hydrating a server-rendered component, the value will be consistent between server and client.\n\nThis is useful for linking elements via attributes like `for` and `aria-labelledby`.\n\n```svelte\n<script>\n\tconst uid = $props.id();\n</script>\n\n<form>\n\t<label for=\"{uid}-firstname\">First Name: </label>\n\t<input id=\"{uid}-firstname\" type=\"text\" />\n\n\t<label for=\"{uid}-lastname\">Last Name: </label>\n\t<input id=\"{uid}-lastname\" type=\"text\" />\n</form>\n```\n"
  },
  {
    "path": "documentation/docs/02-runes/06-$bindable.md",
    "content": "---\ntitle: $bindable\n---\n\nOrdinarily, props go one way, from parent to child. This makes it easy to understand how data flows around your app.\n\nIn Svelte, component props can be _bound_, which means that data can also flow _up_ from child to parent. This isn't something you should do often — overuse can make your data flow unpredictable and your components harder to maintain — but it can simplify your code if used sparingly and carefully.\n\nIt also means that a state proxy can be _mutated_ in the child.\n\n> [!NOTE] Mutation is also possible with normal props, but is strongly discouraged — Svelte will warn you if it detects that a component is mutating state it does not 'own'.\n\nTo mark a prop as bindable, we use the `$bindable` rune:\n\n<!-- prettier-ignore -->\n```svelte\n/// file: FancyInput.svelte\n<script>\n\tlet { value = $bindable(), ...props } = $props();\n</script>\n\n<input bind:value={value} {...props} />\n\n<style>\n\tinput {\n\t\tfont-family: 'Comic Sans MS';\n\t\tcolor: deeppink;\n\t}\n</style>\n```\n\nNow, a component that uses `<FancyInput>` can add the [`bind:`](bind) directive ([demo](/playground/untitled#H4sIAAAAAAAAE3WQwWrDMBBEf2URBSfg2nfFMZRCoYeecqx6UJx1IyqvhLUONcb_XqSkTUOSk1az7DBvJtEai0HI90nw6FHIJIhckO7i78n7IhzQctS2OuAtvXHESByEFFVoeuO5VqTYdN71DC-amvGV_MDQ9q6DrCjP0skkWymKJxYZOgxBfyKs4SGwZlxke7TWZcuVoqo8-1P1z3lraCcP2g64nk4GM5S1osrXf0JV-lrkgvGbheR-wDm_g30V8JL-1vpOCZFogpQsEsWcemtxscyhKArfOx9gjps0Lq4hzRVfemaYfu-PoIqqwKPFY_XpaIqj4tYRP7a6M3aUkD27zjSw0RTgbZN6Z8WNs66XsEP03tBXUueUJFlelvYx_wCuI3leNwIAAA==)):\n\n<!-- prettier-ignore -->\n```svelte\n/// file: App.svelte\n<script>\n\timport FancyInput from './FancyInput.svelte';\n\n\tlet message = $state('hello');\n</script>\n\n<FancyInput bind:value={message} />\n<p>{message}</p>\n```\n\nThe parent component doesn't _have_ to use `bind:` — it can just pass a normal prop. Some parents don't want to listen to what their children have to say.\n\nIn this case, you can specify a fallback value for when no prop is passed at all:\n\n```js\n/// file: FancyInput.svelte\nlet { value = $bindable('fallback'), ...props } = $props();\n```\n"
  },
  {
    "path": "documentation/docs/02-runes/07-$inspect.md",
    "content": "---\ntitle: $inspect\ntags: rune-inspect\n---\n\n> [!NOTE] `$inspect` only works during development. In a production build it becomes a noop.\n\nThe `$inspect` rune is roughly equivalent to `console.log`, with the exception that it will re-run whenever its argument changes. `$inspect` tracks reactive state deeply, meaning that updating something inside an object or array using fine-grained reactivity will cause it to re-fire:\n\n<!-- codeblock:start {\"title\":\"$inspect(...)\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet count = $state(0);\n\tlet message = $state('hello');\n\n\t$inspect(count, message); // will console.log when `count` or `message` change\n</script>\n\n<button onclick={() => count++}>Increment</button>\n<input bind:value={message} />\n```\n<!-- codeblock:end -->\n\nOn updates, a stack trace will be printed, making it easy to find the origin of a state change (unless you're in the playground, due to technical limitations).\n\n## $inspect(...).with\n\n`$inspect(...)` returns an object with a `with` method, which you can invoke with a callback that will then be invoked instead of `console.log`. The first argument to the callback is either `\"init\"` or `\"update\"`; subsequent arguments are the values passed to `$inspect`:\n\n<!-- codeblock:start {\"title\":\"$inspect(...).with(...)\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet count = $state(0);\n\n\t$inspect(count).with((type, count) => {\n\t\tif (type === 'update') {\n\t\t\tdebugger; // or `console.trace`, or whatever you want\n\t\t}\n\t});\n</script>\n\n<button onclick={() => count++}>Increment</button>\n```\n<!-- codeblock:end -->\n\n## $inspect.trace(...)\n\nThis rune, added in 5.14, causes the surrounding function to be _traced_ in development. Any time the function re-runs as part of an [effect]($effect) or a [derived]($derived), information will be printed to the console about which pieces of reactive state caused the effect to fire.\n\n```svelte\n<script>\n\timport { doSomeWork } from './elsewhere';\n\n\t$effect(() => {\n\t\t+++// $inspect.trace must be the first statement of a function body+++\n\t\t+++$inspect.trace();+++\n\t\tdoSomeWork();\n\t});\n</script>\n```\n\n`$inspect.trace` takes an optional first argument which will be used as the label.\n"
  },
  {
    "path": "documentation/docs/02-runes/08-$host.md",
    "content": "---\ntitle: $host\n---\n\nWhen compiling a component as a [custom element](custom-elements), the `$host` rune provides access to the host element, allowing you to (for example) dispatch custom events ([demo](/playground/untitled#H4sIAAAAAAAAE41Ry2rDMBD8FSECtqkTt1fHFpSSL-ix7sFRNkTEXglrnTYY_3uRlDgxTaEHIfYxs7szA9-rBizPPwZOZwM89wmecqxbF70as7InaMjltrWFR3mpkQDJ8pwXVnbKkKiwItUa3RGLVtk7gTHQXRDR2lXda4CY1D0SK9nCUk0QPyfrCovsRoNFe17aQOAwGncgO2gBqRzihJXiQrEs2csYOhQ-7HgKHaLIbpRhhBG-I2eD_8ciM4KnnOCbeE5dD2P6h0Dz0-Yi_arNhPLJXBtSGi2TvSXdbpqwdsXvjuYsC1veabvvUTog2ylrapKH2G2XsMFLS4uDthQnq2t1cwKkGOGLvYU5PvaQxLsxOkPmsm97Io1Mo2yUPF6VnOZFkw1RMoopKLKAE_9gmGxyDFMwMcwN-Bx_ABXQWmOtAgAA)):\n\n<!-- prettier-ignore -->\n```svelte\n/// file: Stepper.svelte\n<svelte:options customElement=\"my-stepper\" />\n\n<script>\n\tfunction dispatch(type) {\n\t\t+++$host()+++.dispatchEvent(new CustomEvent(type));\n\t}\n</script>\n\n<button onclick={() => dispatch('decrement')}>decrement</button>\n<button onclick={() => dispatch('increment')}>increment</button>\n```\n\n<!-- prettier-ignore -->\n```svelte\n/// file: App.svelte\n<script>\n\timport './Stepper.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<my-stepper\n\tondecrement={() => count -= 1}\n\tonincrement={() => count += 1}\n></my-stepper>\n\n<p>count: {count}</p>\n```\n"
  },
  {
    "path": "documentation/docs/02-runes/index.md",
    "content": "---\ntitle: Runes\n---\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/01-basic-markup.md",
    "content": "---\ntitle: Basic markup\n---\n\nMarkup inside a Svelte component can be thought of as HTML++.\n\n## Tags\n\nA lowercase tag, like `<div>`, denotes a regular HTML element. A capitalised tag or a tag that uses dot notation, such as `<Widget>` or `<my.stuff>`, indicates a _component_.\n\n```svelte\n<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget />\n</div>\n```\n\n## Element attributes\n\nBy default, attributes work exactly like their HTML counterparts.\n\n```svelte\n<div class=\"foo\">\n\t<button disabled>can't touch this</button>\n</div>\n```\n\nAs in HTML, values may be unquoted.\n\n<!-- prettier-ignore -->\n```svelte\n<input type=checkbox />\n```\n\nAttribute values can contain JavaScript expressions.\n\n```svelte\n<a href=\"page/{p}\">page {p}</a>\n```\n\nOr they can _be_ JavaScript expressions.\n\n```svelte\n<button disabled={!clickable}>...</button>\n```\n\nBoolean attributes are included on the element if their value is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) and excluded if it's [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy).\n\nAll other attributes are included unless their value is [nullish](https://developer.mozilla.org/en-US/docs/Glossary/Nullish) (`null` or `undefined`).\n\n```svelte\n<input required={false} placeholder=\"This input field is not required\" />\n<div title={null}>This div has no title attribute</div>\n```\n\n> [!NOTE] Quoting a singular expression does not affect how the value is parsed, but in Svelte 6 it will cause the value to be coerced to a string:\n>\n> <!-- prettier-ignore -->\n> ```svelte\n> <button disabled=\"{number !== 42}\">...</button>\n> ```\n\nWhen the attribute name and value match (`name={name}`), they can be replaced with `{name}`.\n\n```svelte\n<button {disabled}>...</button>\n<!-- equivalent to\n<button disabled={disabled}>...</button>\n-->\n```\n\n## Component props\n\nBy convention, values passed to components are referred to as _properties_ or _props_ rather than _attributes_, which are a feature of the DOM.\n\nAs with elements, `name={name}` can be replaced with the `{name}` shorthand.\n\n```svelte\n<Widget foo={bar} answer={42} text=\"hello\" />\n```\n\n## Spread attributes\n\n_Spread attributes_ allow many attributes or properties to be passed to an element or component at once.\n\nAn element or component can have multiple spread attributes, interspersed with regular ones. Order matters — if `things.a` exists it will take precedence over `a=\"b\"`, while `c=\"d\"` would take precedence over `things.c`:\n\n```svelte\n<Widget a=\"b\" {...things} c=\"d\" />\n```\n\n## Events\n\nListening to DOM events is possible by adding attributes to the element that start with `on`. For example, to listen to the `click` event, add the `onclick` attribute to a button:\n\n```svelte\n<button onclick={() => console.log('clicked')}>click me</button>\n```\n\nEvent attributes are case sensitive. `onclick` listens to the `click` event, `onClick` listens to the `Click` event, which is different. This ensures you can listen to custom events that have uppercase characters in them.\n\nBecause events are just attributes, the same rules as for attributes apply:\n\n- you can use the shorthand form: `<button {onclick}>click me</button>`\n- you can spread them: `<button {...thisSpreadContainsEventAttributes}>click me</button>`\n\nTiming-wise, event attributes always fire after events from bindings (e.g. `oninput` always fires after an update to `bind:value`). Under the hood, some event handlers are attached directly with `addEventListener`, while others are _delegated_.\n\nWhen using `ontouchstart` and `ontouchmove` event attributes, the handlers are [passive](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#using_passive_listeners) for better performance. This greatly improves responsiveness by allowing the browser to scroll the document immediately, rather than waiting to see if the event handler calls `event.preventDefault()`.\n\nIn the very rare cases that you need to prevent these event defaults, you should use [`on`](svelte-events#on) instead (for example inside an action).\n\n### Event delegation\n\nTo reduce memory footprint and increase performance, Svelte uses a technique called event delegation. This means that for certain events — see the list below — a single event listener at the application root takes responsibility for running any handlers on the event's path.\n\nThere are a few gotchas to be aware of:\n\n- when you manually dispatch an event with a delegated listener, make sure to set the `{ bubbles: true }` option or it won't reach the application root\n- when using `addEventListener` directly, avoid calling `stopPropagation` or the event won't reach the application root and handlers won't be invoked. Similarly, handlers added manually inside the application root will run _before_ handlers added declaratively deeper in the DOM (with e.g. `onclick={...}`), in both capturing and bubbling phases. For these reasons it's better to use the `on` function imported from `svelte/events` rather than `addEventListener`, as it will ensure that order is preserved and `stopPropagation` is handled correctly.\n\nThe following event handlers are delegated:\n\n- `beforeinput`\n- `click`\n- `change`\n- `dblclick`\n- `contextmenu`\n- `focusin`\n- `focusout`\n- `input`\n- `keydown`\n- `keyup`\n- `mousedown`\n- `mousemove`\n- `mouseout`\n- `mouseover`\n- `mouseup`\n- `pointerdown`\n- `pointermove`\n- `pointerout`\n- `pointerover`\n- `pointerup`\n- `touchend`\n- `touchmove`\n- `touchstart`\n\n## Text expressions\n\nA JavaScript expression can be included as text by surrounding it with curly braces.\n\n```svelte\n{expression}\n```\n\nExpressions that are `null` or `undefined` will be omitted; all others are [coerced to strings](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion).\n\nCurly braces can be included in a Svelte template by using their [HTML entity](https://developer.mozilla.org/docs/Glossary/Entity) strings: `&lbrace;`, `&lcub;`, or `&#123;` for `{` and `&rbrace;`, `&rcub;`, or `&#125;` for `}`.\n\nIf you're using a regular expression (`RegExp`) [literal notation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#literal_notation_and_constructor), you'll need to wrap it in parentheses.\n\n<!-- prettier-ignore -->\n```svelte\n<h1>Hello {name}!</h1>\n<p>{a} + {b} = {a + b}.</p>\n\n<div>{(/^[A-Za-z ]+$/).test(value) ? x : y}</div>\n```\n\nThe expression will be stringified and escaped to prevent code injections. If you want to render HTML, use the `{@html}` tag instead.\n\n```svelte\n{@html potentiallyUnsafeHtmlString}\n```\n\n> [!NOTE] Make sure that you either escape the passed string or only populate it with values that are under your control in order to prevent [XSS attacks](https://owasp.org/www-community/attacks/xss/)\n\n## Comments\n\nYou can use HTML comments inside components.\n\n```svelte\n<!-- this is a comment! --><h1>Hello world</h1>\n```\n\nComments beginning with `svelte-ignore` disable warnings for the next block of markup. Usually, these are accessibility warnings; make sure that you're disabling them for a good reason.\n\n```svelte\n<!-- svelte-ignore a11y_autofocus -->\n<input bind:value={name} autofocus />\n```\n\nYou can add a special comment starting with `@component` that will show up when hovering over the component name in other files.\n\n````svelte\n<!--\n@component\n- You can use markdown here.\n- You can also use code blocks here.\n- Usage:\n  ```html\n  <Main name=\"Arethra\">\n  ```\n-->\n<script>\n\tlet { name } = $props();\n</script>\n\n<main>\n\t<h1>\n\t\tHello, {name}\n\t</h1>\n</main>\n````\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/02-if.md",
    "content": "---\ntitle: {#if ...}\ntags: template-if\n---\n\n```svelte\n<!--- copy: false  --->\n{#if expression}...{/if}\n```\n\n```svelte\n<!--- copy: false  --->\n{#if expression}...{:else if expression}...{/if}\n```\n\n```svelte\n<!--- copy: false  --->\n{#if expression}...{:else}...{/if}\n```\n\nContent that is conditionally rendered can be wrapped in an if block.\n\n```svelte\n{#if answer === 42}\n\t<p>what was the question?</p>\n{/if}\n```\n\nAdditional conditions can be added with `{:else if expression}`, optionally ending in an `{:else}` clause.\n\n```svelte\n{#if porridge.temperature > 100}\n\t<p>too hot!</p>\n{:else if 80 > porridge.temperature}\n\t<p>too cold!</p>\n{:else}\n\t<p>just right!</p>\n{/if}\n```\n\n(Blocks don't have to wrap elements, they can also wrap text within elements.)\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/03-each.md",
    "content": "---\ntitle: {#each ...}\ntags: template-each\n---\n\n```svelte\n<!--- copy: false  --->\n{#each expression as name}...{/each}\n```\n\n```svelte\n<!--- copy: false  --->\n{#each expression as name, index}...{/each}\n```\n\nIterating over values can be done with an each block. The values in question can be arrays, array-like objects (i.e. anything with a `length` property), or iterables like `Map` and `Set`. (Internally, they are converted to arrays with [`Array.from`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from).)\n\nIf the value is `null` or `undefined`, it is treated the same as an empty array (which will cause [else blocks](#Else-blocks) to be rendered, where applicable).\n\n```svelte\n<h1>Shopping list</h1>\n<ul>\n\t{#each items as item}\n\t\t<li>{item.name} x {item.qty}</li>\n\t{/each}\n</ul>\n```\n\nAn each block can also specify an _index_, equivalent to the second argument in an `array.map(...)` callback:\n\n```svelte\n{#each items as item, i}\n\t<li>{i + 1}: {item.name} x {item.qty}</li>\n{/each}\n```\n\n## Keyed each blocks\n\n```svelte\n<!--- copy: false  --->\n{#each expression as name (key)}...{/each}\n```\n\n```svelte\n<!--- copy: false  --->\n{#each expression as name, index (key)}...{/each}\n```\n\nIf a _key_ expression is provided — which must uniquely identify each list item — Svelte will use it to intelligently update the list when data changes by inserting, moving and deleting items, rather than adding or removing items at the end and updating the state in the middle.\n\nThe key can be any object, but strings and numbers are recommended since they allow identity to persist when the objects themselves change.\n\n```svelte\n{#each items as item (item.id)}\n\t<li>{item.name} x {item.qty}</li>\n{/each}\n\n<!-- or with additional index value -->\n{#each items as item, i (item.id)}\n\t<li>{i + 1}: {item.name} x {item.qty}</li>\n{/each}\n```\n\nYou can freely use destructuring and rest patterns in each blocks.\n\n```svelte\n{#each items as { id, name, qty }, i (id)}\n\t<li>{i + 1}: {name} x {qty}</li>\n{/each}\n\n{#each objects as { id, ...rest }}\n\t<li><span>{id}</span><MyComponent {...rest} /></li>\n{/each}\n\n{#each items as [id, ...rest]}\n\t<li><span>{id}</span><MyComponent values={rest} /></li>\n{/each}\n```\n\n## Each blocks without an item\n\n```svelte\n<!--- copy: false  --->\n{#each expression}...{/each}\n```\n\n```svelte\n<!--- copy: false  --->\n{#each expression, index}...{/each}\n```\n\nIn case you just want to render something `n` times, you can omit the `as` part:\n\n<!-- codeblock:start {\"title\":\"Chess board\"} -->\n```svelte\n<!--- file: App.svelte --->\n<div class=\"chess-board\">\n\t{#each { length: 8 }, rank}\n\t\t{#each { length: 8 }, file}\n\t\t\t<div class:black={(rank + file) % 2 === 1}></div>\n\t\t{/each}\n\t{/each}\n</div>\n\n<style>\n\t.chess-board {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(8, 1fr);\n\t\trows: repeat(8, 1fr);\n\t\tborder: 1px solid black;\n\t\taspect-ratio: 1;\n\n\t\t.black {\n\t\t\tbackground: black;\n\t\t}\n\t}\n</style>\n```\n<!-- codeblock:end -->\n\n## Else blocks\n\n```svelte\n<!--- copy: false  --->\n{#each expression as name}...{:else}...{/each}\n```\n\nAn each block can also have an `{:else}` clause, which is rendered if the list is empty.\n\n```svelte\n{#each todos as todo}\n\t<p>{todo.text}</p>\n{:else}\n\t<p>No tasks today!</p>\n{/each}\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/04-key.md",
    "content": "---\ntitle: {#key ...}\ntags: template-key\n---\n\n```svelte\n<!--- copy: false  --->\n{#key expression}...{/key}\n```\n\nKey blocks destroy and recreate their contents when the value of an expression changes. When used around components, this will cause them to be reinstantiated and reinitialised:\n\n```svelte\n{#key value}\n\t<Component />\n{/key}\n```\n\nIt's also useful if you want a transition to play whenever a value changes:\n\n```svelte\n{#key value}\n\t<div transition:fade>{value}</div>\n{/key}\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/05-await.md",
    "content": "---\ntitle: {#await ...}\ntags: template-await\n---\n\n```svelte\n<!--- copy: false  --->\n{#await expression}...{:then name}...{:catch name}...{/await}\n```\n\n```svelte\n<!--- copy: false  --->\n{#await expression}...{:then name}...{/await}\n```\n\n```svelte\n<!--- copy: false  --->\n{#await expression then name}...{/await}\n```\n\n```svelte\n<!--- copy: false  --->\n{#await expression catch name}...{/await}\n```\n\nAwait blocks allow you to branch on the three possible states of a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) — pending, fulfilled or rejected.\n\n```svelte\n{#await promise}\n\t<!-- promise is pending -->\n\t<p>waiting for the promise to resolve...</p>\n{:then value}\n\t<!-- promise was fulfilled or not a Promise -->\n\t<p>The value is {value}</p>\n{:catch error}\n\t<!-- promise was rejected -->\n\t<p>Something went wrong: {error.message}</p>\n{/await}\n```\n\n> [!NOTE] During server-side rendering, only the pending branch will be rendered.\n>\n> If the provided expression is not a `Promise`, only the `:then` branch will be rendered, including during server-side rendering.\n\nThe `catch` block can be omitted if you don't need to render anything when the promise rejects (or no error is possible).\n\n```svelte\n{#await promise}\n\t<!-- promise is pending -->\n\t<p>waiting for the promise to resolve...</p>\n{:then value}\n\t<!-- promise was fulfilled -->\n\t<p>The value is {value}</p>\n{/await}\n```\n\nIf you don't care about the pending state, you can also omit the initial block.\n\n```svelte\n{#await promise then value}\n\t<p>The value is {value}</p>\n{/await}\n```\n\nSimilarly, if you only want to show the error state, you can omit the `then` block.\n\n```svelte\n{#await promise catch error}\n\t<p>The error is {error}</p>\n{/await}\n```\n\n> [!NOTE] You can use `#await` with [`import(...)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import) to render components lazily:\n>\n> ```svelte\n> {#await import('./Component.svelte') then { default: Component }}\n> \t<Component />\n> {/await}\n> ```\n\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/06-snippet.md",
    "content": "---\ntitle: {#snippet ...}\n---\n\n```svelte\n<!--- copy: false  --->\n{#snippet name()}...{/snippet}\n```\n\n```svelte\n<!--- copy: false  --->\n{#snippet name(param1, param2, paramN)}...{/snippet}\n```\n\nSnippets, and [render tags](@render), are a way to create reusable chunks of markup inside your components. Instead of writing duplicative code like [this](/playground/untitled#H4sIAAAAAAAAE5VUYW-kIBD9K8Tmsm2yXXRzvQ-s3eR-R-0HqqOQKhAZb9sz_vdDkV1t000vRmHewMx7w2AflbIGG7GnPlK8gYhFv42JthG-m9Gwf6BGcLbVXZuPSGrzVho8ZirDGpDIhldgySN5GpEMez9kaNuckY1ANJZRamRuu2ZnhEZt6a84pvs43mzD4pMsUDDi8DMkQFYCGdkvsJwblFq5uCik9bmJ4JZwUkv1eoknWigX2eGNN6aGXa6bjV8ybP-X7sM36T58SVcrIIV2xVIaA41xeD5kKqWXuqpUJEefOqVuOkL9DfBchGrzWfu0vb-RpTd3o-zBR045Ga3HfuE5BmJpKauuhbPtENlUF2sqR9jqpsPSxWsMrlngyj3VJiyYjJXb1-lMa7IWC-iSk2M5Zzh-SJjShe-siq5kpZRPs55BbSGU5YPyte4vVV_VfFXxVb10dSLf17pS2lM5HnpPxw4Zpv6x-F57p0jI3OKlVnhv5V9wPQrNYQQ9D_f6aGHlC89fq1Z3qmDkJCTCweOGF4VUFSPJvD_DhreVdA0eu8ehJJ5x91dBaBkpWm3ureCFPt3uzRv56d4kdp-2euG38XZ6dsnd3ZmPG9yRBCrzRUvi-MccOdwz3qE-fOZ7AwAhlrtTUx3c76vRhSwlFBHDtoPhefgHX3dM0PkEAAA=)...\n\n```svelte\n{#each images as image}\n\t{#if image.href}\n\t\t<a href={image.href}>\n\t\t\t<figure>\n\t\t\t\t<img src={image.src} alt={image.caption} width={image.width} height={image.height} />\n\t\t\t\t<figcaption>{image.caption}</figcaption>\n\t\t\t</figure>\n\t\t</a>\n\t{:else}\n\t\t<figure>\n\t\t\t<img src={image.src} alt={image.caption} width={image.width} height={image.height} />\n\t\t\t<figcaption>{image.caption}</figcaption>\n\t\t</figure>\n\t{/if}\n{/each}\n```\n\n...you can write [this](/playground/untitled#H4sIAAAAAAAAE5VUYW-bMBD9KxbRlERKY4jWfSA02n5H6QcXDmwVbMs-lnaI_z6D7TTt1moTAnPvzvfenQ_GpBEd2CS_HxPJekjy5IfWyS7BFz0b9id0CM62ajDVjBS2MkLjqZQldoBE9KwFS-7I_YyUOPqlRGuqnKw5orY5pVpUduj3mitUln5LU3pI0_UuBp9FjTwnDr9AHETLMSeHK6xiGoWSLi9yYT034cwSRjohn17zcQPNFTs8s153sK9Uv_Yh0-5_5d7-o9zbD-UqCaRWrllSYZQxLw_HUhb0ta-y4NnJUxfUvc7QuLJSaO0a3oh2MLBZat8u-wsPnXzKQvTtVVF34xK5d69ThFmHEQ4SpzeVRediTG8rjD5vBSeN3E5JyHh6R1DQK9-iml5kjzQUN_lSgVU8DhYLx7wwjSvRkMDvTjiwF4zM1kXZ7DlF1eN3A7IG85e-zRrYEjjm0FkI4Cc7Ripm0pHOChexhcWXzreeZyRMU6Mk3ljxC9w4QH-cQZ_b3T5pjHxk1VNr1CDrnJy5QDh6XLO6FrLNSRb2l9gz0wo3S6m7HErSgLsPGMHkpDZK31jOanXeHPQz-eruLHUP0z6yTbpbrn223V70uMXNSpQSZjpL0y8hcxxpNqA6_ql3BQAxlxvfpQ_uT9GrWjQC6iRHM8D0MP0GQsIi92QEAAA=):\n\n```svelte\n{#snippet figure(image)}\n\t<figure>\n\t\t<img src={image.src} alt={image.caption} width={image.width} height={image.height} />\n\t\t<figcaption>{image.caption}</figcaption>\n\t</figure>\n{/snippet}\n\n{#each images as image}\n\t{#if image.href}\n\t\t<a href={image.href}>\n\t\t\t{@render figure(image)}\n\t\t</a>\n\t{:else}\n\t\t{@render figure(image)}\n\t{/if}\n{/each}\n```\n\nLike function declarations, snippets can have an arbitrary number of parameters, which can have default values, and you can destructure each parameter. You cannot use rest parameters, however.\n\n## Snippet scope\n\nSnippets can be declared anywhere inside your component. They can reference values declared outside themselves, for example in the `<script>` tag or in `{#each ...}` blocks...\n\n<!-- codeblock:start {\"title\":\"Snippets\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet { message = `it's great to see you!` } = $props();\n</script>\n\n{#snippet hello(name)}\n\t<p>hello {name}! {message}!</p>\n{/snippet}\n\n{@render hello('alice')}\n{@render hello('bob')}\n```\n<!-- codeblock:end -->\n\n...and they are 'visible' to everything in the same lexical scope (i.e. siblings, and children of those siblings):\n\n```svelte\n<div>\n\t{#snippet x()}\n\t\t{#snippet y()}...{/snippet}\n\n\t\t<!-- this is fine -->\n\t\t{@render y()}\n\t{/snippet}\n\n\t<!-- this will error, as `y` is not in scope -->\n\t{@render y()}\n</div>\n\n<!-- this will also error, as `x` is not in scope -->\n{@render x()}\n```\n\nSnippets can reference themselves and each other:\n\n<!-- codeblock:start {\"title\":\"Self-referencing snippets\"} -->\n```svelte\n<!--- file: App.svelte --->\n{#snippet blastoff()}\n\t<span>🚀</span>\n{/snippet}\n\n{#snippet countdown(n)}\n\t{#if n > 0}\n\t\t<span>{n}...</span>\n\t\t{@render countdown(n - 1)}\n\t{:else}\n\t\t{@render blastoff()}\n\t{/if}\n{/snippet}\n\n{@render countdown(10)}\n```\n<!-- codeblock:end -->\n\n## Passing snippets to components\n\n### Explicit props\n\nWithin the template, snippets are values just like any other. As such, they can be passed to components as props:\n\n<!-- codeblock:start {\"title\":\"Explicit snippet props\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Table from './Table.svelte';\n\n\tconst fruits = [\n\t\t{ name: 'apples', qty: 5, price: 2 },\n\t\t{ name: 'bananas', qty: 10, price: 1 },\n\t\t{ name: 'cherries', qty: 20, price: 0.5 }\n\t];\n</script>\n\n{#snippet header()}\n\t<th>fruit</th>\n\t<th>qty</th>\n\t<th>price</th>\n\t<th>total</th>\n{/snippet}\n\n{#snippet row(d)}\n\t<td>{d.name}</td>\n\t<td>{d.qty}</td>\n\t<td>{d.price}</td>\n\t<td>{d.qty * d.price}</td>\n{/snippet}\n\n<Table data={fruits} +++{header} {row}+++ />\n```\n\n```svelte\n<!--- file: Table.svelte --->\n<script>\n\tlet { data, header, row } = $props();\n</script>\n\n<table>\n\t{#if header}\n\t\t<thead>\n\t\t\t<tr>{@render header()}</tr>\n\t\t</thead>\n\t{/if}\n\n\t<tbody>\n\t\t{#each data as d}\n\t\t\t<tr>{@render row(d)}</tr>\n\t\t{/each}\n\t</tbody>\n</table>\n\n<style>\n\ttable {\n\t\ttext-align: left;\n\t\tborder-spacing: 0;\n\t}\n\n\ttbody tr:nth-child(2n+1) {\n\t\tbackground: ButtonFace;\n\t}\n\n\ttable :global(th), table :global(td) {\n\t\tpadding: 0.5em;\n\t}\n</style>\n```\n<!-- codeblock:end -->\n\nThink about it like passing content instead of data to a component. The concept is similar to slots in web components.\n\n### Implicit props\n\nAs an authoring convenience, snippets declared directly _inside_ a component implicitly become props _on_ the component:\n\n<!-- codeblock:start {\"title\":\"Implicit snippet props\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Table from './Table.svelte';\n\n\tconst fruits = [\n\t\t{ name: 'apples', qty: 5, price: 2 },\n\t\t{ name: 'bananas', qty: 10, price: 1 },\n\t\t{ name: 'cherries', qty: 20, price: 0.5 }\n\t];\n</script>\n\n<Table data={fruits}>\n\t{#snippet header()}\n\t\t<th>fruit</th>\n\t\t<th>qty</th>\n\t\t<th>price</th>\n\t\t<th>total</th>\n\t{/snippet}\n\n\t{#snippet row(d)}\n\t\t<td>{d.name}</td>\n\t\t<td>{d.qty}</td>\n\t\t<td>{d.price}</td>\n\t\t<td>{d.qty * d.price}</td>\n\t{/snippet}\n</Table>\n```\n\n```svelte\n<!--- file: Table.svelte --->\n<script>\n\tlet { data, header, row } = $props();\n</script>\n\n<table>\n\t{#if header}\n\t\t<thead>\n\t\t\t<tr>{@render header()}</tr>\n\t\t</thead>\n\t{/if}\n\n\t<tbody>\n\t\t{#each data as d}\n\t\t\t<tr>{@render row(d)}</tr>\n\t\t{/each}\n\t</tbody>\n</table>\n\n<style>\n\ttable {\n\t\ttext-align: left;\n\t\tborder-spacing: 0;\n\t}\n\n\ttbody tr:nth-child(2n+1) {\n\t\tbackground: ButtonFace;\n\t}\n\n\ttable :global(th), table :global(td) {\n\t\tpadding: 0.5em;\n\t}\n</style>\n```\n<!-- codeblock:end -->\n\n### Implicit `children` snippet\n\nAny content inside the component tags that is _not_ a snippet declaration implicitly becomes part of the `children` snippet:\n\n<!-- codeblock:start {\"title\":\"Implicit children snippet\",\"selected\":\"Button.svelte\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Button from './Button.svelte';\n</script>\n\n<Button>click me</Button>\n```\n\n```svelte\n<!--- file: Button.svelte --->\n<script>\n\tlet { children } = $props();\n</script>\n\n<!-- result will be <button>click me</button> -->\n<button>{@render children()}</button>\n```\n<!-- codeblock:end -->\n\n> [!NOTE] Note that you cannot have a prop called `children` if you also have content inside the component — for this reason, you should avoid having props with that name\n\n### Optional snippet props\n\nYou can declare snippet props as being optional. You can either use optional chaining to not render anything if the snippet isn't set...\n\n```svelte\n<script>\n    let { children } = $props();\n</script>\n\n{@render children?.()}\n```\n\n...or use an `#if` block to render fallback content:\n\n```svelte\n<script>\n    let { children } = $props();\n</script>\n\n{#if children}\n    {@render children()}\n{:else}\n    fallback content\n{/if}\n```\n\n## Typing snippets\n\nSnippets implement the `Snippet` interface imported from `'svelte'`:\n\n```svelte\n<script lang=\"ts\">\n\timport type { Snippet } from 'svelte';\n\n\tinterface Props {\n\t\tdata: any[];\n\t\tchildren: Snippet;\n\t\trow: Snippet<[any]>;\n\t}\n\n\tlet { data, children, row }: Props = $props();\n</script>\n```\n\nWith this change, red squigglies will appear if you try and use the component without providing a `data` prop and a `row` snippet. Notice that the type argument provided to `Snippet` is a tuple, since snippets can have multiple parameters.\n\nWe can tighten things up further by declaring a generic, so that `data` and `row` refer to the same type:\n\n```svelte\n<script lang=\"ts\" generics=\"T\">\n\timport type { Snippet } from 'svelte';\n\n\tlet {\n\t\tdata,\n\t\tchildren,\n\t\trow\n\t}: {\n\t\tdata: T[];\n\t\tchildren: Snippet;\n\t\trow: Snippet<[T]>;\n\t} = $props();\n</script>\n```\n\n## Exporting snippets\n\nSnippets declared at the top level of a `.svelte` file can be exported from a `<script module>` for use in other components, provided they don't reference any declarations in a non-module `<script>` (whether directly or indirectly, via other snippets):\n\n<!-- codeblock:start {\"title\":\"Exported snippets\",\"selected\":\"snippets.svelte\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { add } from './snippets.svelte';\n</script>\n\n{@render add(1, 2)}\n\n```\n\n```svelte\n<!--- file: snippets.svelte --->\n<script module>\n\texport { add };\n</script>\n\n{#snippet add(a, b)}\n\t{a} + {b} = {a + b}\n{/snippet}\n```\n<!-- codeblock:end -->\n\n> [!NOTE]\n> This requires Svelte 5.5.0 or newer\n\n## Programmatic snippets\n\nSnippets can be created programmatically with the [`createRawSnippet`](svelte#createRawSnippet) API. This is intended for advanced use cases.\n\n## Snippets and slots\n\nIn Svelte 4, content can be passed to components using [slots](legacy-slots). Snippets are more powerful and flexible, and so slots have been deprecated in Svelte 5.\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/07-@render.md",
    "content": "---\ntitle: {@render ...}\n---\n\nTo render a [snippet](snippet), use a `{@render ...}` tag.\n\n```svelte\n{#snippet sum(a, b)}\n\t<p>{a} + {b} = {a + b}</p>\n{/snippet}\n\n{@render sum(1, 2)}\n{@render sum(3, 4)}\n{@render sum(5, 6)}\n```\n\nThe expression can be an identifier like `sum`, or an arbitrary JavaScript expression:\n\n```svelte\n{@render (cool ? coolSnippet : lameSnippet)()}\n```\n\n## Optional snippets\n\nIf the snippet is potentially undefined — for example, because it's an incoming prop — then you can use optional chaining to only render it when it _is_ defined:\n\n```svelte\n{@render children?.()}\n```\n\nAlternatively, use an [`{#if ...}`](if) block with an `:else` clause to render fallback content:\n\n```svelte\n{#if children}\n\t{@render children()}\n{:else}\n\t<p>fallback content</p>\n{/if}\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/08-@html.md",
    "content": "---\ntitle: {@html ...}\ntags: template-html\n---\n\nTo inject raw HTML into your component, use the `{@html ...}` tag:\n\n```svelte\n<article>\n\t{@html content}\n</article>\n```\n\n> [!NOTE] Make sure that you either escape the passed string or only populate it with values that are under your control in order to prevent [XSS attacks](https://owasp.org/www-community/attacks/xss/). Never render unsanitized content.\n\nThe expression should be valid standalone HTML — this will not work, because `</div>` is not valid HTML:\n\n```svelte\n{@html '<div>'}content{@html '</div>'}\n```\n\nIt also will not compile Svelte code.\n\n## Styling\n\nContent rendered this way is 'invisible' to Svelte and as such will not receive [scoped styles](scoped-styles). In other words, this will not work, and the `a` and `img` styles will be regarded as unused:\n\n<!-- prettier-ignore -->\n```svelte\n<article>\n\t{@html content}\n</article>\n\n<style>\n\tarticle {\n\t\ta { color: hotpink }\n\t\timg { width: 100% }\n\t}\n</style>\n```\n\nInstead, use the `:global` modifier to target everything inside the `<article>`:\n\n<!-- prettier-ignore -->\n```svelte\n<style>\n\tarticle +++:global+++ {\n\t\ta { color: hotpink }\n\t\timg { width: 100% }\n\t}\n</style>\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/09-@attach.md",
    "content": "---\ntitle: {@attach ...}\ntags: attachments\n---\n\nAttachments are functions that run in an [effect]($effect) when an element is mounted to the DOM or when [state]($state) read inside the function updates.\n\nOptionally, they can return a function that is called before the attachment re-runs, or after the element is later removed from the DOM.\n\n> [!NOTE]\n> Attachments are available in Svelte 5.29 and newer.\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\t/** @type {import('svelte/attachments').Attachment} */\n\tfunction myAttachment(element) {\n\t\tconsole.log(element.nodeName); // 'DIV'\n\n\t\treturn () => {\n\t\t\tconsole.log('cleaning up');\n\t\t};\n\t}\n</script>\n\n<div {@attach myAttachment}>...</div>\n```\n\nAn element can have any number of attachments.\n\n## Attachment factories\n\nA useful pattern is for a function, such as `tooltip` in this example, to _return_ an attachment ([demo](/playground/untitled#H4sIAAAAAAAAE3VT0XLaMBD8lavbDiaNCUlbHhTItG_5h5AH2T5ArdBppDOEMv73SkbGJGnH47F9t3un3TsfMyO3mInsh2SW1Sa7zlZKo8_E0zHjg42pGAjxBPxp7cTvUHOMldLjv-IVGUbDoUw295VTlh-WZslqa8kxsLL2ACtHWxh175NffnQfAAGikSGxYQGfPEvGfPSIWtOH0TiBVo2pWJEBJtKhQp4YYzjG9JIdcuMM5IZqHMPioY8vOSA997zQoevf4a7heO7cdp34olRiTGr07OhwH1IdoO2A7dLMbwahZq6MbRhKZWqxk7rBxTGVbuHmhCgb5qDgmIx_J6XtHHukHTrYYqx_YpzYng8aO4RYayql7hU-1ZJl0akqHBE_D9KLolwL-Dibzc7iSln9XjtqTF1UpMkJ2EmXR-BgQErsN4pxIJKr0RVO1qrxAqaTO4fbc9bKulZm3cfDY3aZDgvFGErWjmzhN7KmfX5rXyDeX8Pt1mU-hXjdBOrtuB97vK4GPUtmJ41XcRMEGDLD8do0nJ73zhUhSlyRw0t3vPqD8cjfLs-axiFgNBrkUd9Ulp50c-GLxlXAVlJX-ffpZyiSn7H0eLCUySZQcQdXlxj4El0Yv_FZvIKElqqGTruVLhzu7VRKCh22_5toOyxsWqLwwzK-cCbYNdg-hy-p9D7sbiZWUnts_wLUOF3CJgQAAA==)):\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport tippy from 'tippy.js';\n\n\tlet content = $state('Hello!');\n\n\t/**\n\t * @param {string} content\n\t * @returns {import('svelte/attachments').Attachment}\n\t */\n\tfunction tooltip(content) {\n\t\treturn (element) => {\n\t\t\tconst tooltip = tippy(element, { content });\n\t\t\treturn tooltip.destroy;\n\t\t};\n\t}\n</script>\n\n<input bind:value={content} />\n\n<button {@attach tooltip(content)}>\n\tHover me\n</button>\n```\n\nSince the `tooltip(content)` expression runs inside an [effect]($effect), the attachment will be destroyed and recreated whenever `content` changes. The same thing would happen for any state read _inside_ the attachment function when it first runs. (If this isn't what you want, see [Controlling when attachments re-run](#Controlling-when-attachments-re-run).)\n\n## Inline attachments\n\nAttachments can also be created inline ([demo](/playground/untitled#H4sIAAAAAAAAE71Wf3OaWBT9KoyTTnW3MS-I3dYmnWXVtnRAazRJzbozRSQEApiRhwKO333vuY8m225m_9yZGOT9OPfcc84D943UTfxGr_G7K6Xr3TVeNW7D2M8avT_3DVk-YAoDNF4vNB8e2tnWjyXGlm7mPzfurVPpp5JgGmeZtwkf5PtFupCxLzVvHa832rl2lElX-s2Xm2DZFNqp_hs-rZetd4v07ORpT3qmQHu7MF2td0BZp8k6z_xkvfXP902_pZ2_1_aYWEiqm0kN8I4r79qbdZ6umnq3q_2iNf22F4dE6qt2oimwdpim_uY6XMm7Fuo-IQT_iTD_CeGTHwZ38ieIJUFQRxirR1Xf39Dw0X5z0I72Af4tD61vvPNwWKQnqmfPTbduhsEd2J3vO_oBd3dc6fF2X7umNdWGf0vBRhSS6qoV7cCXfTXWfKmvWG61_si_vfU92Wz-E4RhsLhNIYinsox9QKGVd8-tuACCeKXRX12P-T_eKf7fhTq0Hvt-f3ailtSeoxJHRo1-58NoPe1UiBc1hkL8Yeh45y_vQ3mcuNl9T8s3cXPRWLnS7YWJG_gn2Tb4tUjid8jua-PVl08j_ab8I14mH8Llx0s5Tz5Err4ql52r_GYg0mVy1bEGZuD0ze64b5TWYFiM-16wSuJ4JT5vfVpDcztrcG_YkRU4s6HxufzDWF4XuVeJ1P10IbzBemt3Vp1V2e04ZXfrJd7Wicyd039brRIv_RIVu_nXi7X1cfL2sy66ztToUp1TO7qJ7NlwZ0f30pld5qNSVE5o6PbMojFHjgZB7oSicPpGteyLclQap7SvY0dXtM_LR1NT2JFHey3aaxa0VxCeYJ7RMHemoiCcgPZV9pR7o7kgcOjeGliYk9hjDZx8FAq6enwlTPSZj_vYPw9Il64dXdIY8ZmapzwfEd8-1ZyaxWhqkIZOibXUd-6Upqi1pD4uMicCV1GA_7zi73UN8BaF4sC8peJtMjfmjbHZBFwq5ov50qRaE0l96NZggnW4KqypYRAW-uhSz9ADvklwJF2J-5W0Z5fQPBhDX92R6I_0IFxRgDftge4l4dP-gH1hjD7uqU6fsOEZ9UNrCdPB-nys6uXgY6O3ZMd9sy5T9PghqrWHdjo4jB51CgLiKJaDYYA-7WgYONf1FbjkI-mE3EAfUY_rijfuJ_CVPaR50oe9JF7Q0pI8Dw3osxxYHdYPGbp2CnwHF8KvwJv2wEv0Z3ilQI6U9uwbZxbYJXvEmjjQjjCHkvNLvNg3yhzXQd1olamsT4IRrZmX0MUDpwL7R8zzHj7pSh9hPHFSHjLezKqAST51uC5zmtQ87skDUaneLokT5RbXkPWSYz53Abgjc8_o4KFGUZ-Hgv2Z1l5OTYM9D-HfUD0L-EwxH5wRnIG61gS-khfgY1bq7IAP_DA4l5xRuh9xlm8yGjutc8t-wHtkhWv3hc7aqGwiK5KzgvM5xRkZYn193uEln-su55j1GaIv7oM4iPrsVHiG0Dx7TR9-1lBfqFdwfvSd5LNL5xyZVp5NoHFZ57FkfiF6vKs4k5zvIfrX5xX6MXmt0gM5MTu8DjnhukrHHzTRd3jm0dma0_f_x5cxP9f4jBdqHvmbq2fUjzqcKh2Cp-yWj9ntcHanXmBXxhu7Q--eyjhfNFpaV7zgz4nWEUb7zUOhpevjjf_gu_KZ99pxFlZ-T3sttkmYqrco_26q35v0Ewzv5EZPbnL_8BfduWGMnyyN3q0bZ_7hb_7KG_L4CQAA)):\n\n```svelte\n<!--- file: App.svelte --->\n<canvas\n\twidth={32}\n\theight={32}\n\t{@attach (canvas) => {\n\t\tconst context = canvas.getContext('2d');\n\n\t\t$effect(() => {\n\t\t\tcontext.fillStyle = color;\n\t\t\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\t\t});\n\t}}\n></canvas>\n```\n\n> [!NOTE]\n> The nested effect runs whenever `color` changes, while the outer effect (where `canvas.getContext(...)` is called) only runs once, since it doesn't read any reactive state.\n\n## Conditional attachments\n\nFalsy values like `false` or `undefined` are treated as no attachment, enabling conditional usage:\n\n```svelte\n<div {@attach enabled && myAttachment}>...</div>\n```\n\n## Passing attachments to components\n\nWhen used on a component, `{@attach ...}` will create a prop whose key is a [`Symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol). If the component then [spreads](/tutorial/svelte/spread-props) props onto an element, the element will receive those attachments.\n\nThis allows you to create _wrapper components_ that augment elements ([demo](/playground/untitled#H4sIAAAAAAAAE3VUS3ObMBD-KxvajnFqsJM2PhA7TXrKob31FjITAbKtRkiMtDhJPfz3LiAMdpxhGJvdb1_fPnaeYjn3Iu-WIbJ04028lZDcetHDzsO3olbVApI74F1RhHbLJdayhFl-Sp5qhVwhufEWNjWiwJtYxSjyQhsEFEXxBiujcxg1_8O_dnQ9APwsEbVyiHDafjrvDZCgkiO4MLCEzxYZcn90z6XUZ6OxA61KlaIgV6i1pFC-sxjDrlbHaDiWRoGvdMbHsLzp5DES0mJnRxGaRBvcBHb7yFUTCQeunEWYcYtGv12TqgFUDbCK1WLaM6IWQhUlQiJUFm2ZLPly51xXMG0Rjoyd69C7UqqG2nu95QZyXvtvLVpri2-SN4hoLXXCZFfhQ8aQBU1VgdEaH_vSgyBZR_BpPp_vi0tY-rw2ulRZkGqpTQRbZvwa2BPgFC8bgbw31CbjJjAsE6WNYBZeGp7vtQXLMqHWnZx-5kM1TR5ycpkZXQR2wzL94l8Ur1C_3-g168SfQf1MyfRi3LW9fs77emJEw5QV9SREoLTq06tcczq7d6xEUcJX2vAhO1b843XK34e5unZEMBr15ekuKEusluWAF8lXhE2ZTP2r2RcIHJ-163FPKerCgYJLOB9i4GvNwviI5-gAQiFFBk3tBTOU3HFXEk0R8o86WvUD64aINhv5K3oRmpJXkw8uxMG6Hh6JY9X7OwGSqfUy9tDG3sHNoEi0d_d_fv9qndxRU0VClFqo3KVo3U655Hnt1PXB3Qra2Y2QGdEwgTAMCxopsoxOe6SD0gD8movDhT0LAnhqlE8gVCpLWnRoV7OJCkFAwEXitrYL1W7p7pbiE_P7XH6E_rihODm5s52XtiH9Ekaw0VgI9exadWL1uoEYjPtg2672k5szsxbKyWB2fdT0w5Y_0hcT8oXOlRetmLS8-g-6TLXXQgYAAA==)):\n\n```svelte\n<!--- file: Button.svelte --->\n<script>\n\t/** @type {import('svelte/elements').HTMLButtonAttributes} */\n\tlet { children, ...props } = $props();\n</script>\n\n<!-- `props` includes attachments -->\n<button {...props}>\n\t{@render children?.()}\n</button>\n```\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport tippy from 'tippy.js';\n\timport Button from './Button.svelte';\n\n\tlet content = $state('Hello!');\n\n\t/**\n\t * @param {string} content\n\t * @returns {import('svelte/attachments').Attachment}\n\t */\n\tfunction tooltip(content) {\n\t\treturn (element) => {\n\t\t\tconst tooltip = tippy(element, { content });\n\t\t\treturn tooltip.destroy;\n\t\t};\n\t}\n</script>\n\n<input bind:value={content} />\n\n<Button {@attach tooltip(content)}>\n\tHover me\n</Button>\n```\n\n## Controlling when attachments re-run\n\nAttachments, unlike [actions](use), are fully reactive: `{@attach foo(bar)}` will re-run on changes to `foo` _or_ `bar` (or any state read inside `foo`):\n\n```js\n// @errors: 7006 2304 2552\nfunction foo(bar) {\n\treturn (node) => {\n\t\tveryExpensiveSetupWork(node);\n\t\tupdate(node, bar);\n\t};\n}\n```\n\nIn the rare case that this is a problem (for example, if `foo` does expensive and unavoidable setup work) consider passing the data inside a function and reading it in a child effect:\n\n```js\n// @errors: 7006 2304 2552\nfunction foo(+++getBar+++) {\n\treturn (node) => {\n\t\tveryExpensiveSetupWork(node);\n\n+++\t\t$effect(() => {\n\t\t\tupdate(node, getBar());\n\t\t});+++\n\t}\n}\n```\n\n## Creating attachments programmatically\n\nTo add attachments to an object that will be spread onto a component or element, use [`createAttachmentKey`](svelte-attachments#createAttachmentKey).\n\n## Converting actions to attachments\n\nIf you're using a library that only provides actions, you can convert them to attachments with [`fromAction`](svelte-attachments#fromAction), allowing you to (for example) use them with components.\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/10-@const.md",
    "content": "---\ntitle: {@const ...}\n---\n\nThe `{@const ...}` tag defines a local constant.\n\n```svelte\n{#each boxes as box}\n\t{@const area = box.width * box.height}\n\t{box.width} * {box.height} = {area}\n{/each}\n```\n\n`{@const}` is only allowed as an immediate child of a block — `{#if ...}`, `{#each ...}`, `{#snippet ...}` and so on — a `<Component />` or a `<svelte:boundary>`.\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/11-@debug.md",
    "content": "---\ntitle: {@debug ...}\n---\n\nThe `{@debug ...}` tag offers an alternative to `console.log(...)`. It logs the values of specific variables whenever they change, and pauses code execution if you have devtools open.\n\n```svelte\n<script>\n\tlet user = {\n\t\tfirstname: 'Ada',\n\t\tlastname: 'Lovelace'\n\t};\n</script>\n\n{@debug user}\n\n<h1>Hello {user.firstname}!</h1>\n```\n\n`{@debug ...}` accepts a comma-separated list of variable names (not arbitrary expressions).\n\n```svelte\n<!-- Compiles -->\n{@debug user}\n{@debug user1, user2, user3}\n\n<!-- WON'T compile -->\n{@debug user.firstname}\n{@debug myArray[0]}\n{@debug !isReady}\n{@debug typeof user === 'object'}\n```\n\nThe `{@debug}` tag without any arguments will insert a `debugger` statement that gets triggered when _any_ state changes, as opposed to the specified variables.\n\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/12-bind.md",
    "content": "﻿---\ntitle: bind:\n---\n\nData ordinarily flows down, from parent to child. The `bind:` directive allows data to flow the other way, from child to parent.\n\nThe general syntax is `bind:property={expression}`, where `expression` is an [_lvalue_](https://press.rebus.community/programmingfundamentals/chapter/lvalue-and-rvalue/) (i.e. a variable or an object property). When the expression is an identifier with the same name as the property, we can omit the expression — in other words these are equivalent:\n\n<!-- prettier-ignore -->\n```svelte\n<input bind:value={value} />\n<input bind:value />\n```\n\n\nSvelte creates an event listener that updates the bound value. If an element already has a listener for the same event, that listener will be fired before the bound value is updated.\n\nMost bindings are _two-way_, meaning that changes to the value will affect the element and vice versa. A few bindings are _readonly_, meaning that changing their value will have no effect on the element.\n\n## Function bindings\n\nYou can also use `bind:property={get, set}`, where `get` and `set` are functions, allowing you to perform validation and transformation:\n\n```svelte\n<input bind:value={\n\t() => value,\n\t(v) => value = v.toLowerCase()}\n/>\n```\n\nIn the case of readonly bindings like [dimension bindings](#Dimensions), the `get` value should be `null`:\n\n```svelte\n<div\n\tbind:clientWidth={null, redraw}\n\tbind:clientHeight={null, redraw}\n>...</div>\n```\n\n> [!NOTE]\n> Function bindings are available in Svelte 5.9.0 and newer.\n\n## `<input bind:value>`\n\nA `bind:value` directive on an `<input>` element binds the input's `value` property:\n\n<!-- prettier-ignore -->\n```svelte\n<script>\n\tlet message = $state('hello');\n</script>\n\n<input bind:value={message} />\n<p>{message}</p>\n```\n\nIn the case of a numeric input (`type=\"number\"` or `type=\"range\"`), the value will be coerced to a number:\n\n<!-- codeblock:start {\"title\":\"Numeric bindings\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet a = $state(1);\n\tlet b = $state(2);\n</script>\n\n<label>\n\t<input type=\"number\" bind:value={a} min=\"0\" max=\"10\" />\n\t<input type=\"range\" bind:value={a} min=\"0\" max=\"10\" />\n</label>\n\n<label>\n\t<input type=\"number\" bind:value={b} min=\"0\" max=\"10\" />\n\t<input type=\"range\" bind:value={b} min=\"0\" max=\"10\" />\n</label>\n\n<p>{a} + {b} = {a + b}</p>\n```\n<!-- codeblock:end -->\n\nIf the input is empty or invalid (in the case of `type=\"number\"`), the value is `undefined`.\n\nSince 5.6.0, if an `<input>` has a `defaultValue` and is part of a form, it will revert to that value instead of the empty string when the form is reset. Note that for the initial render the value of the binding takes precedence unless it is `null` or `undefined`.\n\n```svelte\n<script>\n\tlet value = $state('');\n</script>\n\n<form>\n\t<input bind:value defaultValue=\"not the empty string\">\n\t<input type=\"reset\" value=\"Reset\">\n</form>\n```\n\n> [!NOTE]\n> Use reset buttons sparingly, and ensure that users won't accidentally click them while trying to submit the form.\n\n## `<input bind:checked>`\n\nCheckbox inputs can be bound with `bind:checked`:\n\n```svelte\n<label>\n\t<input type=\"checkbox\" bind:checked={accepted} />\n\tAccept terms and conditions\n</label>\n```\n\nSince 5.6.0, if an `<input>` has a `defaultChecked` attribute and is part of a form, it will revert to that value instead of `false` when the form is reset. Note that for the initial render the value of the binding takes precedence unless it is `null` or `undefined`.\n\n```svelte\n<script>\n\tlet checked = $state(true);\n</script>\n\n<form>\n\t<input type=\"checkbox\" bind:checked defaultChecked={true}>\n\t<input type=\"reset\" value=\"Reset\">\n</form>\n```\n\n> [!NOTE] Use `bind:group` for radio inputs instead of `bind:checked`.\n\n## `<input bind:indeterminate>`\n\nCheckboxes can be in an [indeterminate](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/indeterminate) state, independently of whether they are checked or unchecked:\n\n```svelte\n<script>\n\tlet checked = $state(false);\n\tlet indeterminate = $state(true);\n</script>\n\n<form>\n\t<input type=\"checkbox\" bind:checked bind:indeterminate>\n\n\t{#if indeterminate}\n\t\twaiting...\n\t{:else if checked}\n\t\tchecked\n\t{:else}\n\t\tunchecked\n\t{/if}\n</form>\n```\n\n## `<input bind:group>`\n\nInputs that work together can use `bind:group`:\n\n<!-- codeblock:start {\"title\":\"bind:group\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet tortilla = $state('Plain');\n\n\t/** @type {string[]} */\n\tlet fillings = $state([]);\n</script>\n\n<h1>Customize your burrito</h1>\n\n<!-- grouped radio inputs are mutually exclusive -->\n<label><input type=\"radio\" bind:group={tortilla} value=\"Plain\" /> Plain</label>\n<label><input type=\"radio\" bind:group={tortilla} value=\"Whole wheat\" /> Whole wheat</label>\n<label><input type=\"radio\" bind:group={tortilla} value=\"Spinach\" /> Spinach</label>\n\n<!-- grouped checkbox inputs populate an array -->\n<label><input type=\"checkbox\" bind:group={fillings} value=\"Rice\" /> Rice</label>\n<label><input type=\"checkbox\" bind:group={fillings} value=\"Beans\" /> Beans</label>\n<label><input type=\"checkbox\" bind:group={fillings} value=\"Cheese\" /> Cheese</label>\n<label><input type=\"checkbox\" bind:group={fillings} value=\"Guac (extra)\" /> Guac (extra)</label>\n\n<p>Tortilla: {tortilla}</p>\n<p>Fillings: {fillings.join(', ') || 'None'}</p>\n\n<style>\n\tlabel {\n\t\tdisplay: block;\n\t}\n</style>\n```\n<!-- codeblock:end -->\n\n> [!NOTE] `bind:group` only works if the inputs are in the same Svelte component.\n\n## `<input bind:files>`\n\nOn `<input>` elements with `type=\"file\"`, you can use `bind:files` to get the [`FileList` of selected files](https://developer.mozilla.org/en-US/docs/Web/API/FileList). When you want to update the files programmatically, you always need to use a `FileList` object. Currently `FileList` objects cannot be constructed directly, so you need to create a new [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object and get `files` from there.\n\n```svelte\n<script>\n\tlet files = $state();\n\n\tfunction clear() {\n\t\tfiles = new DataTransfer().files; // null or undefined does not work\n\t}\n</script>\n\n<label for=\"avatar\">Upload a picture:</label>\n<input accept=\"image/png, image/jpeg\" bind:files id=\"avatar\" name=\"avatar\" type=\"file\" />\n<button onclick={clear}>clear</button>\n```\n\n`FileList` objects also cannot be modified, so if you want to e.g. delete a single file from the list, you need to create a new `DataTransfer` object and add the files you want to keep.\n\n> [!NOTE] `DataTransfer` may not be available in server-side JS runtimes. Leaving the state that is bound to `files` uninitialized prevents potential errors if components are server-side rendered.\n\n## `<select bind:value>`\n\nA `<select>` value binding corresponds to the `value` property on the selected `<option>`, which can be any value (not just strings, as is normally the case in the DOM).\n\n```svelte\n<select bind:value={selected}>\n\t<option value={a}>a</option>\n\t<option value={b}>b</option>\n\t<option value={c}>c</option>\n</select>\n```\n\nA `<select multiple>` element behaves similarly to a checkbox group. The bound variable is an array with an entry corresponding to the `value` property of each selected `<option>`.\n\n```svelte\n<select multiple bind:value={fillings}>\n\t<option value=\"Rice\">Rice</option>\n\t<option value=\"Beans\">Beans</option>\n\t<option value=\"Cheese\">Cheese</option>\n\t<option value=\"Guac (extra)\">Guac (extra)</option>\n</select>\n```\n\nWhen the value of an `<option>` matches its text content, the attribute can be omitted.\n\n```svelte\n<select multiple bind:value={fillings}>\n\t<option>Rice</option>\n\t<option>Beans</option>\n\t<option>Cheese</option>\n\t<option>Guac (extra)</option>\n</select>\n```\n\nYou can give the `<select>` a default value by adding a `selected` attribute to the`<option>` (or options, in the case of `<select multiple>`) that should be initially selected. If the `<select>` is part of a form, it will revert to that selection when the form is reset. Note that for the initial render the value of the binding takes precedence if it's not `undefined`.\n\n```svelte\n<select bind:value={selected}>\n\t<option value={a}>a</option>\n\t<option value={b} selected>b</option>\n\t<option value={c}>c</option>\n</select>\n```\n\n## `<audio>`\n\n`<audio>` elements have their own set of bindings — five two-way ones...\n\n- [`currentTime`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/currentTime)\n- [`playbackRate`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playbackRate)\n- [`paused`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/paused)\n- [`volume`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/volume)\n- [`muted`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/muted)\n\n...and six readonly ones:\n\n- [`duration`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/duration)\n- [`buffered`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered)\n- [`seekable`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable)\n- [`seeking`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeking_event)\n- [`ended`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/ended)\n- [`readyState`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState)\n- [`played`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/played)\n\n```svelte\n<audio src={clip} bind:duration bind:currentTime bind:paused></audio>\n```\n\n## `<video>`\n\n`<video>` elements have all the same bindings as [`<audio>`](#audio) elements, plus readonly [`videoWidth`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoWidth) and [`videoHeight`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoHeight) bindings.\n\n## `<img>`\n\n`<img>` elements have two readonly bindings:\n\n- [`naturalWidth`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/naturalWidth)\n- [`naturalHeight`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/naturalHeight)\n\n## `<details bind:open>`\n\n`<details>` elements support binding to the `open` property.\n\n```svelte\n<details bind:open={isOpen}>\n\t<summary>How do you comfort a JavaScript bug?</summary>\n\t<p>You console it.</p>\n</details>\n```\n\n## `window` and `document`\n\nTo bind to properties of `window` and `document`, see [`<svelte:window>`](svelte-window) and [`<svelte:document>`](svelte-document).\n\n## Contenteditable bindings\n\nElements with the `contenteditable` attribute support the following bindings:\n\n- [`innerHTML`](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML)\n- [`innerText`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText)\n- [`textContent`](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent)\n\n> [!NOTE] There are [subtle differences between `innerText` and `textContent`](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent#differences_from_innertext).\n\n<!-- for some reason puts the comment and html on same line -->\n<!-- prettier-ignore -->\n```svelte\n<div contenteditable=\"true\" bind:innerHTML={html}></div>\n```\n\n## Dimensions\n\nAll visible elements have the following readonly bindings, measured with a `ResizeObserver`:\n\n- [`clientWidth`](https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth)\n- [`clientHeight`](https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight)\n- [`offsetWidth`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth)\n- [`offsetHeight`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight)\n- [`contentRect`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/contentRect)\n- [`contentBoxSize`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/contentBoxSize)\n- [`borderBoxSize`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/borderBoxSize)\n- [`devicePixelContentBoxSize`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/devicePixelContentBoxSize)\n\n```svelte\n<div bind:offsetWidth={width} bind:offsetHeight={height}>\n\t<Chart {width} {height} />\n</div>\n```\n\n> [!NOTE] `display: inline` elements do not have a width or height (except for elements with 'intrinsic' dimensions, like `<img>` and `<canvas>`), and cannot be observed with a `ResizeObserver`. You will need to change the `display` style of these elements to something else, such as `inline-block`. Note that CSS transformations do not trigger `ResizeObserver` callbacks.\n\n## bind:this\n\n```svelte\n<!--- copy: false --->\nbind:this={dom_node}\n```\n\nTo get a reference to a DOM node, use `bind:this`. The value will be `undefined` until the component is mounted — in other words, you should read it inside an effect or an event handler, but not during component initialisation:\n\n```svelte\n<script>\n\t/** @type {HTMLCanvasElement} */\n\tlet canvas;\n\n\t$effect(() => {\n\t\tconst ctx = canvas.getContext('2d');\n\t\tdrawStuff(ctx);\n\t});\n</script>\n\n<canvas bind:this={canvas}></canvas>\n```\n\nComponents also support `bind:this`, allowing you to interact with component instances programmatically.\n\n```svelte\n<!--- file: App.svelte --->\n<ShoppingCart bind:this={cart} />\n\n<button onclick={() => cart.empty()}> Empty shopping cart </button>\n```\n\n```svelte\n<!--- file: ShoppingCart.svelte --->\n<script>\n\t// All instance exports are available on the instance object\n\texport function empty() {\n\t\t// ...\n\t}\n</script>\n```\n\n> [!NOTE] In case of using [the function bindings](#Function-bindings), the getter is required to ensure that the correct value is nullified on component or element destruction.\n\n## bind:_property_ for components\n\n```svelte\nbind:property={variable}\n```\n\nYou can bind to component props using the same syntax as for elements.\n\n```svelte\n<Keypad bind:value={pin} />\n```\n\nWhile Svelte props are reactive without binding, that reactivity only flows downward into the component by default. Using `bind:property` allows changes to the property from within the component to flow back up out of the component.\n\nTo mark a property as bindable, use the [`$bindable`]($bindable) rune:\n\n```svelte\n<script>\n\tlet { readonlyProperty, bindableProperty = $bindable() } = $props();\n</script>\n```\n\nDeclaring a property as bindable means it _can_ be used using `bind:`, not that it _must_ be used using `bind:`.\n\nBindable properties can have a fallback value:\n\n```svelte\n<script>\n\tlet { bindableProperty = $bindable('fallback value') } = $props();\n</script>\n```\n\nThis fallback value _only_ applies when the property is _not_ bound. When the property is bound and a fallback value is present, the parent is expected to provide a value other than `undefined`, else a runtime error is thrown. This prevents hard-to-reason-about situations where it's unclear which value should apply.\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/13-use.md",
    "content": "---\ntitle: use:\n---\n\n> [!NOTE]\n> In Svelte 5.29 and newer, consider using [attachments](@attach) instead, as they are more flexible and composable.\n\nActions are functions that are called when an element is mounted. They are added with the `use:` directive, and will typically use an `$effect` so that they can reset any state when the element is unmounted:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\t/** @type {import('svelte/action').Action} */\n\tfunction myaction(node) {\n\t\t// the node has been mounted in the DOM\n\n\t\t$effect(() => {\n\t\t\t// setup goes here\n\n\t\t\treturn () => {\n\t\t\t\t// teardown goes here\n\t\t\t};\n\t\t});\n\t}\n</script>\n\n<div use:myaction>...</div>\n```\n\nAn action can be called with an argument:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\t/** @type {import('svelte/action').Action} */\n\tfunction myaction(node, +++data+++) {\n\t\t// ...\n\t}\n</script>\n\n<div use:myaction={+++data+++}>...</div>\n```\n\nThe action is only called once (but not during server-side rendering) — it will _not_ run again if the argument changes.\n\n> [!LEGACY]\n> Prior to the `$effect` rune, actions could return an object with `update` and `destroy` methods, where `update` would be called with the latest value of the argument if it changed. Using effects is preferred.\n\n## Typing\n\nThe `Action` interface receives three optional type arguments — a node type (which can be `Element`, if the action applies to everything), a parameter, and any custom event handlers created by the action:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\t/**\n\t * @type {import('svelte/action').Action<\n\t * \tHTMLDivElement,\n\t * \tundefined,\n\t * \t{\n\t * \t\tonswiperight: (e: CustomEvent) => void;\n\t * \t\tonswipeleft: (e: CustomEvent) => void;\n\t * \t\t// ...\n\t * \t}\n\t * >}\n\t */\n\tfunction gestures(node) {\n\t\t$effect(() => {\n\t\t\t// ...\n\t\t\tnode.dispatchEvent(new CustomEvent('swipeleft'));\n\n\t\t\t// ...\n\t\t\tnode.dispatchEvent(new CustomEvent('swiperight'));\n\t\t});\n\t}\n</script>\n\n<div\n\tuse:gestures\n\tonswipeleft={next}\n\tonswiperight={prev}\n>...</div>\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/14-transition.md",
    "content": "---\ntitle: transition:\ntags: transitions\n---\n\nA _transition_ is triggered by an element entering or leaving the DOM as a result of a state change.\n\nWhen a block (such as an `{#if ...}` block) is transitioning out, all elements inside it, including those that do not have their own transitions, are kept in the DOM until every transition in the block has been completed.\n\nThe `transition:` directive indicates a _bidirectional_ transition, which means it can be smoothly reversed while the transition is in progress.\n\n```svelte\n<script>\n\t+++import { fade } from 'svelte/transition';+++\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => visible = !visible}>toggle</button>\n\n{#if visible}\n\t<div +++transition:fade+++>fades in and out</div>\n{/if}\n```\n\n## Local vs global\n\nTransitions are local by default. Local transitions only play when the block they belong to is created or destroyed, _not_ when parent blocks are created or destroyed.\n\n```svelte\n{#if x}\n\t{#if y}\n\t\t<p transition:fade>fades in and out only when y changes</p>\n\n\t\t<p transition:fade|global>fades in and out when x or y change</p>\n\t{/if}\n{/if}\n```\n\n## Built-in transitions\n\nA selection of built-in transitions can be imported from the [`svelte/transition`](svelte-transition) module.\n\n## Transition parameters\n\nTransitions can have parameters.\n\n(The double `{{curlies}}` aren't a special syntax; this is an object literal inside an expression tag.)\n\n```svelte\n{#if visible}\n\t<div transition:fade={{ duration: 2000 }}>fades in and out over two seconds</div>\n{/if}\n```\n\n## Custom transition functions\n\n```js\n/// copy: false\n// @noErrors\ntransition = (node: HTMLElement, params: any, options: { direction: 'in' | 'out' | 'both' }) => {\n\tdelay?: number,\n\tduration?: number,\n\teasing?: (t: number) => number,\n\tcss?: (t: number, u: number) => string,\n\ttick?: (t: number, u: number) => void\n}\n```\n\nTransitions can use custom functions. If the returned object has a `css` function, Svelte will generate keyframes for a [web animation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API).\n\nThe `t` argument passed to `css` is a value between `0` and `1` after the `easing` function has been applied. _In_ transitions run from `0` to `1`, _out_ transitions run from `1` to `0` — in other words, `1` is the element's natural state, as though no transition had been applied. The `u` argument is equal to `1 - t`.\n\nThe function is called repeatedly _before_ the transition begins, with different `t` and `u` arguments.\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { elasticOut } from 'svelte/easing';\n\n\t/** @type {boolean} */\n\texport let visible;\n\n\t/**\n\t * @param {HTMLElement} node\n\t * @param {{ delay?: number, duration?: number, easing?: (t: number) => number }} params\n\t */\n\tfunction whoosh(node, params) {\n\t\tconst existingTransform = getComputedStyle(node).transform.replace('none', '');\n\n\t\treturn {\n\t\t\tdelay: params.delay || 0,\n\t\t\tduration: params.duration || 400,\n\t\t\teasing: params.easing || elasticOut,\n\t\t\tcss: (t, u) => `transform: ${existingTransform} scale(${t})`\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:whoosh>whooshes in</div>\n{/if}\n```\n\nA custom transition function can also return a `tick` function, which is called _during_ the transition with the same `t` and `u` arguments.\n\n> [!NOTE] If it's possible to use `css` instead of `tick`, do so — web animations can run off the main thread, preventing jank on slower devices.\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\texport let visible = false;\n\n\t/**\n\t * @param {HTMLElement} node\n\t * @param {{ speed?: number }} params\n\t */\n\tfunction typewriter(node, { speed = 1 }) {\n\t\tconst valid = node.childNodes.length === 1 && node.childNodes[0].nodeType === Node.TEXT_NODE;\n\n\t\tif (!valid) {\n\t\t\tthrow new Error(`This transition only works on elements with a single text node child`);\n\t\t}\n\n\t\tconst text = node.textContent;\n\t\tconst duration = text.length / (speed * 0.01);\n\n\t\treturn {\n\t\t\tduration,\n\t\t\ttick: (t) => {\n\t\t\t\tconst i = ~~(text.length * t);\n\t\t\t\tnode.textContent = text.slice(0, i);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<p in:typewriter={{ speed: 1 }}>The quick brown fox jumps over the lazy dog</p>\n{/if}\n```\n\nIf a transition returns a function instead of a transition object, the function will be called in the next microtask. This allows multiple transitions to coordinate, making [crossfade effects](/tutorial/deferred-transitions) possible.\n\nTransition functions also receive a third argument, `options`, which contains information about the transition.\n\nAvailable values in the `options` object are:\n\n- `direction` - one of `in`, `out`, or `both` depending on the type of transition\n\n## Transition events\n\nAn element with transitions will dispatch the following events in addition to any standard DOM events:\n\n- `introstart`\n- `introend`\n- `outrostart`\n- `outroend`\n\n```svelte\n{#if visible}\n\t<p\n\t\ttransition:fly={{ y: 200, duration: 2000 }}\n\t\tonintrostart={() => (status = 'intro started')}\n\t\tonoutrostart={() => (status = 'outro started')}\n\t\tonintroend={() => (status = 'intro ended')}\n\t\tonoutroend={() => (status = 'outro ended')}\n\t>\n\t\tFlies in and out\n\t</p>\n{/if}\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/15-in-and-out.md",
    "content": "---\ntitle: in: and out:\ntags: transitions\n---\n\nThe `in:` and `out:` directives are identical to [`transition:`](transition), except that the resulting transitions are not bidirectional — an `in` transition will continue to 'play' alongside the `out` transition, rather than reversing, if the block is outroed while the transition is in progress. If an out transition is aborted, transitions will restart from scratch.\n\n```svelte\n<script>\n  import { fade, fly } from 'svelte/transition';\n\n  let visible = $state(false);\n</script>\n\n<label>\n  <input type=\"checkbox\" bind:checked={visible}>\n  visible\n</label>\n\n{#if visible}\n\t<div in:fly={{ y: 200 }} out:fade>flies in, fades out</div>\n{/if}\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/16-animate.md",
    "content": "---\ntitle: animate:\n---\n\nAn animation is triggered when the contents of a [keyed each block](each#Keyed-each-blocks) are re-ordered. Animations do not run when an element is added or removed, only when the index of an existing data item within the each block changes. Animate directives must be on an element that is an _immediate_ child of a keyed each block.\n\nAnimations can be used with Svelte's [built-in animation functions](svelte-animate) or [custom animation functions](#Custom-animation-functions).\n\n```svelte\n<!-- When `list` is reordered the animation will run -->\n{#each list as item, index (item)}\n\t<li animate:flip>{item}</li>\n{/each}\n```\n\n## Animation Parameters\n\nAs with actions and transitions, animations can have parameters.\n\n(The double `{{curlies}}` aren't a special syntax; this is an object literal inside an expression tag.)\n\n```svelte\n{#each list as item, index (item)}\n\t<li animate:flip={{ delay: 500 }}>{item}</li>\n{/each}\n```\n\n## Custom animation functions\n\n```js\n/// copy: false\n// @noErrors\nanimation = (node: HTMLElement, { from: DOMRect, to: DOMRect } , params: any) => {\n\tdelay?: number,\n\tduration?: number,\n\teasing?: (t: number) => number,\n\tcss?: (t: number, u: number) => string,\n\ttick?: (t: number, u: number) => void\n}\n```\n\nAnimations can use custom functions that provide the `node`, an `animation` object and any `parameters` as arguments. The `animation` parameter is an object containing `from` and `to` properties each containing a [DOMRect](https://developer.mozilla.org/en-US/docs/Web/API/DOMRect#Properties) describing the geometry of the element in its `start` and `end` positions. The `from` property is the DOMRect of the element in its starting position, and the `to` property is the DOMRect of the element in its final position after the list has been reordered and the DOM updated.\n\nIf the returned object has a `css` method, Svelte will create a [web animation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API) that plays on the element.\n\nThe `t` argument passed to `css` is a value that goes from `0` and `1` after the `easing` function has been applied. The `u` argument is equal to `1 - t`.\n\nThe function is called repeatedly _before_ the animation begins, with different `t` and `u` arguments.\n\n<!-- TODO: Types -->\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { cubicOut } from 'svelte/easing';\n\n\t/**\n\t * @param {HTMLElement} node\n\t * @param {{ from: DOMRect; to: DOMRect }} states\n\t * @param {any} params\n\t */\n\tfunction whizz(node, { from, to }, params) {\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\n\t\treturn {\n\t\t\tdelay: 0,\n\t\t\tduration: Math.sqrt(d) * 120,\n\t\t\teasing: cubicOut,\n\t\t\tcss: (t, u) => `transform: translate(${u * dx}px, ${u * dy}px) rotate(${t * 360}deg);`\n\t\t};\n\t}\n</script>\n\n{#each list as item, index (item)}\n\t<div animate:whizz>{item}</div>\n{/each}\n```\n\nA custom animation function can also return a `tick` function, which is called _during_ the animation with the same `t` and `u` arguments.\n\n> [!NOTE] If it's possible to use `css` instead of `tick`, do so — web animations can run off the main thread, preventing jank on slower devices.\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { cubicOut } from 'svelte/easing';\n\n\t/**\n\t * @param {HTMLElement} node\n\t * @param {{ from: DOMRect; to: DOMRect }} states\n\t * @param {any} params\n\t */\n\tfunction whizz(node, { from, to }, params) {\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\n\t\treturn {\n\t\t\tdelay: 0,\n\t\t\tduration: Math.sqrt(d) * 120,\n\t\t\teasing: cubicOut,\n\t\t\ttick: (t, u) => Object.assign(node.style, { color: t > 0.5 ? 'Pink' : 'Blue' })\n\t\t};\n\t}\n</script>\n\n{#each list as item, index (item)}\n\t<div animate:whizz>{item}</div>\n{/each}\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/17-style.md",
    "content": "---\ntitle: style:\ntags: template-style\n---\n\nThe `style:` directive provides a shorthand for setting multiple styles on an element.\n\n```svelte\n<!-- These are equivalent -->\n<div style:color=\"red\">...</div>\n<div style=\"color: red;\">...</div>\n```\n\nThe value can contain arbitrary expressions:\n\n```svelte\n<div style:color={myColor}>...</div>\n```\n\nThe shorthand form is allowed:\n\n```svelte\n<div style:color>...</div>\n```\n\nMultiple styles can be set on a single element:\n\n```svelte\n<div style:color style:width=\"12rem\" style:background-color={darkMode ? 'black' : 'white'}>...</div>\n```\n\nTo mark a style as important, use the `|important` modifier:\n\n```svelte\n<div style:color|important=\"red\">...</div>\n```\n\nWhen `style:` directives are combined with `style` attributes, the directives will take precedence,\neven over `!important` properties:\n\n```svelte\n<div style:color=\"red\" style=\"color: blue\">This will be red</div>\n<div style:color=\"red\" style=\"color: blue !important\">This will still be red</div>\n```\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/18-class.md",
    "content": "---\ntitle: class\ntags: template-style\n---\n\nThere are two ways to set classes on elements: the `class` attribute, and the `class:` directive.\n\n## Attributes\n\nPrimitive values are treated like any other attribute:\n\n```svelte\n<div class={large ? 'large' : 'small'}>...</div>\n```\n\n> [!NOTE]\n> For historical reasons, falsy values (like `false` and `NaN`) are stringified (`class=\"false\"`), though `class={undefined}` (or `null`) cause the attribute to be omitted altogether. In a future version of Svelte, all falsy values will cause `class` to be omitted.\n\n### Objects and arrays\n\nSince Svelte 5.16, `class` can be an object or array, and is converted to a string using [clsx](https://github.com/lukeed/clsx).\n\nIf the value is an object, the truthy keys are added:\n\n```svelte\n<script>\n\tlet { cool } = $props();\n</script>\n\n<!-- results in `class=\"cool\"` if `cool` is truthy,\n     `class=\"lame\"` otherwise -->\n<div class={{ cool, lame: !cool }}>...</div>\n```\n\nIf the value is an array, the truthy values are combined:\n\n```svelte\n<!-- if `faded` and `large` are both truthy, results in\n     `class=\"saturate-0 opacity-50 scale-200\"` -->\n<div class={[faded && 'saturate-0 opacity-50', large && 'scale-200']}>...</div>\n```\n\nNote that whether we're using the array or object form, we can set multiple classes simultaneously with a single condition, which is particularly useful if you're using things like Tailwind.\n\nArrays can contain arrays and objects, and clsx will flatten them. This is useful for combining local classes with props, for example:\n\n```svelte\n<!--- file: Button.svelte --->\n<script>\n\tlet props = $props();\n</script>\n\n<button {...props} class={['cool-button', props.class]}>\n\t{@render props.children?.()}\n</button>\n```\n\nThe user of this component has the same flexibility to use a mixture of objects, arrays and strings:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Button from './Button.svelte';\n\tlet useTailwind = $state(false);\n</script>\n\n<Button\n\tonclick={() => useTailwind = true}\n\tclass={{ 'bg-blue-700 sm:w-1/2': useTailwind }}\n>\n\tAccept the inevitability of Tailwind\n</Button>\n```\n\nSince Svelte 5.19, Svelte also exposes the `ClassValue` type, which is the type of value that the `class` attribute on elements accept. This is useful if you want to use a type-safe class name in component props:\n\n```svelte\n<script lang=\"ts\">\n\timport type { ClassValue } from 'svelte/elements';\n\n\tconst props: { class: ClassValue } = $props();\n</script>\n\n<div class={['original', props.class]}>...</div>\n```\n\n## The `class:` directive\n\nPrior to Svelte 5.16, the `class:` directive was the most convenient way to set classes on elements conditionally.\n\n```svelte\n<!-- These are equivalent -->\n<div class={{ cool, lame: !cool }}>...</div>\n<div class:cool={cool} class:lame={!cool}>...</div>\n```\n\nAs with other directives, we can use a shorthand when the name of the class coincides with the value:\n\n```svelte\n<div class:cool class:lame={!cool}>...</div>\n```\n\n> [!NOTE] Unless you're using an older version of Svelte, consider avoiding `class:`, since the attribute is more powerful and composable.\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/19-await-expressions.md",
    "content": "---\ntitle: await\n---\n\nAs of Svelte 5.36, you can use the `await` keyword inside your components in three places where it was previously unavailable:\n\n- at the top level of your component's `<script>`\n- inside `$derived(...)` declarations\n- inside your markup\n\nThis feature is currently experimental, and you must opt in by adding the `experimental.async` option wherever you [configure](/docs/kit/configuration) Svelte, usually `svelte.config.js`:\n\n```js\n/// file: svelte.config.js\nexport default {\n\tcompilerOptions: {\n\t\texperimental: {\n\t\t\tasync: true\n\t\t}\n\t}\n};\n```\n\nThe experimental flag will be removed in Svelte 6.\n\n## Synchronized updates\n\nWhen an `await` expression depends on a particular piece of state, changes to that state will not be reflected in the UI until the asynchronous work has completed, so that the UI is not left in an inconsistent state. In other words, in an example like this...\n\n<!-- codeblock:start {\"title\":\"Synchronized updates\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet a = $state(1);\n\tlet b = $state(2);\n\n\tasync function add(a, b) {\n\t\tawait new Promise((f) => setTimeout(f, 500)); // artificial delay\n\t\treturn a + b;\n\t}\n</script>\n\n<input type=\"number\" bind:value={a}>\n<input type=\"number\" bind:value={b}>\n\n<p>{a} + {b} = {await add(a, b)}</p>\n```\n<!-- codeblock:end -->\n\n...if you increment `a`, the contents of the `<p>` will _not_ immediately update to read this —\n\n```html\n<p>2 + 2 = 3</p>\n```\n\n— instead, the text will update to `2 + 2 = 4` when `add(a, b)` resolves.\n\nUpdates can overlap — a fast update will be reflected in the UI while an earlier slow update is still ongoing.\n\n## Concurrency\n\nSvelte will do as much asynchronous work as it can in parallel. For example if you have two `await` expressions in your markup...\n\n```svelte\n<p>{await one(x)}</p>\n<p>{await two(y)}</p>\n```\n\n...both functions will run at the same time, as they are independent expressions, even though they are _visually_ sequential.\n\nThis does not apply to sequential `await` expressions inside your `<script>` or inside async functions — these run like any other asynchronous JavaScript. An exception is that independent `$derived` expressions will update independently, even though they will run sequentially when they are first created:\n\n```js\n/** @param {number} x */\nasync function one(x) { return x; }\n/** @param {number} y */\nasync function two(y) { return y; }\nlet x = $state(1);\nlet y = $state(2);\n// ---cut---\n// `b` will not be created until `a` has resolved,\n// but once created they will update independently\n// even if `x` and `y` update simultaneously\nlet a = $derived(await one(x));\nlet b = $derived(await two(y));\n```\n\n> [!NOTE] If you write code like this, expect Svelte to give you an [`await_waterfall`](runtime-warnings#Client-warnings-await_waterfall) warning\n\n## Indicating loading states\n\nTo render placeholder UI, you can wrap content in a `<svelte:boundary>` with a [`pending`](svelte-boundary#Properties-pending) snippet. This will be shown when the boundary is first created, but not for subsequent updates, which are globally coordinated.\n\nAfter the contents of a boundary have resolved for the first time and have replaced the `pending` snippet, you can detect subsequent async work with [`$effect.pending()`]($effect#$effect.pending). This is what you would use to display a \"we're asynchronously validating your input\" spinner next to a form field, for example.\n\nYou can also use [`settled()`](svelte#settled) to get a promise that resolves when the current update is complete:\n\n```js\nlet color = 'red';\nlet answer = -1;\nlet updating = false;\n// ---cut---\nimport { tick, settled } from 'svelte';\n\nasync function onclick() {\n\tupdating = true;\n\n\t// without this, the change to `updating` will be\n\t// grouped with the other changes, meaning it\n\t// won't be reflected in the UI\n\tawait tick();\n\n\tcolor = 'octarine';\n\tanswer = 42;\n\n\tawait settled();\n\n\t// any updates affected by `color` or `answer`\n\t// have now been applied\n\tupdating = false;\n}\n```\n\n## Error handling\n\nErrors in `await` expressions will bubble to the nearest [error boundary](svelte-boundary).\n\n## Server-side rendering\n\nSvelte supports asynchronous server-side rendering (SSR) with the `render(...)` API. To use it, simply await the return value:\n\n```js\n/// file: server.js\nimport { render } from 'svelte/server';\nimport App from './App.svelte';\n\nconst { head, body } = +++await+++ render(App);\n```\n\n> [!NOTE] If you're using a framework like SvelteKit, this is done on your behalf.\n\nIf a `<svelte:boundary>` with a `pending` snippet is encountered during SSR, that snippet will be rendered while the rest of the content is ignored. All `await` expressions encountered outside boundaries with `pending` snippets will resolve and render their contents prior to `await render(...)` returning.\n\n> [!NOTE] In the future, we plan to add a streaming implementation that renders the content in the background.\n\n## Forking\n\nThe [`fork(...)`](svelte#fork) API, added in 5.42, makes it possible to run `await` expressions that you _expect_ to happen in the near future. This is mainly intended for frameworks like SvelteKit to implement preloading when (for example) users signal an intent to navigate.\n\n```svelte\n<script>\n\timport { fork } from 'svelte';\n\timport Menu from './Menu.svelte';\n\n\tlet open = $state(false);\n\n\t/** @type {import('svelte').Fork | null} */\n\tlet pending = null;\n\n\tfunction preload() {\n\t\tpending ??= fork(() => {\n\t\t\topen = true;\n\t\t});\n\t}\n\n\tfunction discard() {\n\t\tpending?.discard();\n\t\tpending = null;\n\t}\n</script>\n\n<button\n\tonfocusin={preload}\n\tonfocusout={discard}\n\tonpointerenter={preload}\n\tonpointerleave={discard}\n\tonclick={() => {\n\t\tpending?.commit();\n\t\tpending = null;\n\n\t\t// in case `pending` didn't exist\n\t\t// (if it did, this is a no-op)\n\t\topen = true;\n\t}}\n>open menu</button>\n\n{#if open}\n\t<!-- any async work inside this component will start\n\t     as soon as the fork is created -->\n\t<Menu onclose={() => open = false} />\n{/if}\n```\n\n## Caveats\n\nAs an experimental feature, the details of how `await` is handled (and related APIs like `$effect.pending()`) are subject to breaking changes outside of a semver major release, though we intend to keep such changes to a bare minimum.\n\n## Breaking changes\n\nEffects run in a slightly different order when the `experimental.async` option is `true`. Specifically, _block_ effects like `{#if ...}` and `{#each ...}` now run before an `$effect.pre` or `beforeUpdate` in the same component, which means that in [very rare situations](/playground/untitled?#H4sIAAAAAAAAE22R3VLDIBCFX2WLvUhnTHsf0zre-Q7WmfwtFV2BgU1rJ5N3F0jaOuoVcPbw7VkYhK4_URTiGYkMnIyjDjLsFGO3EvdCKkIvipdB8NlGXxSCPt96snbtj0gctab2-J_eGs2oOWBE6VunLO_2es-EDKZ5x5ZhC0vPNWM2gHXGouNzAex6hHH1cPHil_Lsb95YT9VQX6KUAbS2DrNsBdsdDFHe8_XSYjH1SrhELTe3MLpsemajweiWVPuxHSbKNd-8eQTdE0EBf4OOaSg2hwNhhE_ABB_ulJzjj9FULvIcqgm5vnAqUB7wWFMfhuugQWkcAr8hVD-mq8D12kOep24J_IszToOXdveGDsuNnZwbJUNlXsKnhJdhUcTo42s41YpOSneikDV5HL8BktM6yRcCAAA=) it is possible to update a block that should no longer exist, but only if you update state inside an effect, [which you should avoid]($effect#When-not-to-use-$effect).\n"
  },
  {
    "path": "documentation/docs/03-template-syntax/index.md",
    "content": "---\ntitle: Template syntax\n---\n"
  },
  {
    "path": "documentation/docs/04-styling/01-scoped-styles.md",
    "content": "---\ntitle: Scoped styles\ntags: styles-scoped\n---\n\nSvelte components can include a `<style>` element containing CSS that belongs to the component. This CSS is _scoped_ by default, meaning that styles will not apply to any elements on the page outside the component in question.\n\nThis works by adding a class to affected elements, which is based on a hash of the component styles (e.g. `svelte-123xyz`).\n\n```svelte\n<style>\n\tp {\n\t\t/* this will only affect <p> elements in this component */\n\t\tcolor: burlywood;\n\t}\n</style>\n```\n\n## Specificity\n\nEach scoped selector receives a [specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity) increase of 0-1-0, as a result of the scoping class (e.g. `.svelte-123xyz`) being added to the selector. This means that (for example) a `p` selector defined in a component will take precedence over a `p` selector defined in a global stylesheet, even if the global stylesheet is loaded later.\n\nIn some cases, the scoping class must be added to a selector multiple times, but after the first occurrence it is added with `:where(.svelte-xyz123)` in order to not increase specificity further.\n\n## Scoped keyframes\n\nIf a component defines `@keyframes`, the name is scoped to the component using the same hashing approach. Any `animation` rules in the component will be similarly adjusted:\n\n```svelte\n<style>\n\t.bouncy {\n\t\tanimation: bounce 10s;\n\t}\n\n\t/* these keyframes are only accessible inside this component */\n\t@keyframes bounce {\n\t\t/* ... */\n\t}\n</style>\n```\n"
  },
  {
    "path": "documentation/docs/04-styling/02-global-styles.md",
    "content": "---\ntitle: Global styles\ntags: styles-global\n---\n\n## :global(...)\n\nTo apply styles to a single selector globally, use the `:global(...)` modifier:\n\n```svelte\n<style>\n\t:global(body) {\n\t\t/* applies to <body> */\n\t\tmargin: 0;\n\t}\n\n\tdiv :global(strong) {\n\t\t/* applies to all <strong> elements, in any component,\n\t\t   that are inside <div> elements belonging\n\t\t   to this component */\n\t\tcolor: goldenrod;\n\t}\n\n\tp:global(.big.red) {\n\t\t/* applies to all <p> elements belonging to this component\n\t\t   with `class=\"big red\"`, even if it is applied\n\t\t   programmatically (for example by a library) */\n\t}\n</style>\n```\n\nIf you want to make @keyframes that are accessible globally, you need to prepend your keyframe names with `-global-`.\n\nThe `-global-` part will be removed when compiled, and the keyframe will then be referenced using just `my-animation-name` elsewhere in your code.\n\n```svelte\n<style>\n\t@keyframes -global-my-animation-name {\n\t\t/* code goes here */\n\t}\n</style>\n```\n\n## :global\n\nTo apply styles to a group of selectors globally, create a `:global {...}` block:\n\n```svelte\n<style>\n\t:global {\n\t\t/* applies to every <div> in your application */\n\t\tdiv { ... }\n\n\t\t/* applies to every <p> in your application */\n\t\tp { ... }\n\t}\n\n\t.a :global {\n\t\t/* applies to every `.b .c .d` element, in any component,\n\t\t   that is inside an `.a` element in this component */\n\t\t.b .c .d {...}\n\t}\n</style>\n```\n\n> [!NOTE] The second example above could also be written as an equivalent `.a :global .b .c .d` selector, where everything after the `:global` is unscoped, though the nested form is preferred.\n"
  },
  {
    "path": "documentation/docs/04-styling/03-custom-properties.md",
    "content": "---\ntitle: Custom properties\ntags: styles-custom-properties\n---\n\nYou can pass CSS custom properties — both static and dynamic — to components:\n\n```svelte\n<Slider\n\tbind:value\n\tmin={0}\n\tmax={100}\n\t--track-color=\"black\"\n\t--thumb-color=\"rgb({r} {g} {b})\"\n/>\n```\n\nThe above code essentially desugars to this:\n\n```svelte\n<svelte-css-wrapper style=\"display: contents; --track-color: black; --thumb-color: rgb({r} {g} {b})\">\n\t<Slider\n\t\tbind:value\n\t\tmin={0}\n\t\tmax={100}\n\t/>\n</svelte-css-wrapper>\n```\n\nFor an SVG element, it would use `<g>` instead:\n\n```svelte\n<g style=\"--track-color: black; --thumb-color: rgb({r} {g} {b})\">\n\t<Slider\n\t\tbind:value\n\t\tmin={0}\n\t\tmax={100}\n\t/>\n</g>\n```\n\nInside the component, we can read these custom properties (and provide fallback values) using [`var(...)`](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties):\n\n```svelte\n<style>\n\t.track {\n\t\tbackground: var(--track-color, #aaa);\n\t}\n\n\t.thumb {\n\t\tbackground: var(--thumb-color, blue);\n\t}\n</style>\n```\n\nYou don't _have_ to specify the values directly on the component; as long as the custom properties are defined on a parent element, the component can use them. It's common to define custom properties on the `:root` element in a global stylesheet so that they apply to your entire application.\n\n> [!NOTE] While the extra element will not affect layout, it _will_ affect any CSS selectors that (for example) use the `>` combinator to target an element directly inside the component's container.\n"
  },
  {
    "path": "documentation/docs/04-styling/04-nested-style-elements.md",
    "content": "---\ntitle: Nested <style> elements\n---\n\nThere can only be one top-level `<style>` tag per component.\n\nHowever, it is possible to have a `<style>` tag nested inside other elements or logic blocks.\n\nIn that case, the `<style>` tag will be inserted as-is into the DOM; no scoping or processing will be done on the `<style>` tag.\n\n```svelte\n<div>\n\t<style>\n\t\t/* this style tag will be inserted as-is */\n\t\tdiv {\n\t\t\t/* this will apply to all `<div>` elements in the DOM */\n\t\t\tcolor: red;\n\t\t}\n\t</style>\n</div>\n```\n"
  },
  {
    "path": "documentation/docs/04-styling/index.md",
    "content": "---\ntitle: Styling\n---\n"
  },
  {
    "path": "documentation/docs/05-special-elements/01-svelte-boundary.md",
    "content": "---\ntitle: <svelte:boundary>\n---\n\n```svelte\n<svelte:boundary onerror={handler}>...</svelte:boundary>\n```\n\n> [!NOTE]\n> This feature was added in 5.3.0\n\nBoundaries allow you to 'wall off' parts of your app, so that you can:\n\n- provide UI that should be shown when [`await`](await-expressions) expressions are first resolving\n- handle errors that occur during rendering or while running effects, and provide UI that should be rendered when an error happens\n\nIf a boundary handles an error (with a `failed` snippet or `onerror` handler, or both) its existing content will be removed.\n\n> [!NOTE] Errors occurring outside the rendering process (for example, in event handlers or after a `setTimeout` or async work) are _not_ caught by error boundaries.\n\n## Properties\n\nFor the boundary to do anything, one or more of the following must be provided.\n\n### `pending`\n\nThis snippet will be shown when the boundary is first created, and will remain visible until all the [`await`](await-expressions) expressions inside the boundary have resolved ([demo](/playground/untitled#H4sIAAAAAAAAE21QQW6DQAz8ytY9BKQVpFdKkPqDHnorPWzAaSwt3tWugUaIv1eE0KpKD5as8YxnNBOw6RAKKOOAVrA4up5bEy6VGknOyiO3xJ8qMnmPAhpOZDFC8T6BXPyiXADQ258X77P1FWg4moj_4Y1jQZZ49W0CealqruXUcyPkWLVozQXbZDC2R606spYiNo7bqA7qab_fp2paFLUElD6wYhzVa3AdRUySgNHZAVN1qDZaLRHljTp0vSTJ9XJjrSbpX5f0eZXN6zLXXOa_QfmurIVU-moyoyH5ib87o7XuYZfOZe6vnGWmx1uZW7lJOq9upa-sMwuUZdkmmfIbfQ1xZwwaBL8ECgk9zh8axJAdiVsoTsZGnL8Bg4tX_OMBAAA=)):\n\n```svelte\n<svelte:boundary>\n\t<p>{await delayed('hello!')}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n```\n\nThe `pending` snippet will _not_ be shown for subsequent async updates — for these, you can use [`$effect.pending()`]($effect#$effect.pending).\n\n> [!NOTE] In the [playground](/playground), your app is rendered inside a boundary with an empty pending snippet, so that you can use `await` without having to create one.\n\n\n### `failed`\n\nIf a `failed` snippet is provided, it will be rendered when an error is thrown inside the boundary, with the `error` and a `reset` function that recreates the contents ([demo](/playground/hello-world#H4sIAAAAAAAAE3VRy26DMBD8lS2tFCIh6JkAUlWp39Cq9EBg06CAbdlLArL87zWGKk8ORnhmd3ZnrD1WtOjFXqKO2BDGW96xqpBD5gXerm5QefG39mgQY9EIWHxueRMinLosti0UPsJLzggZKTeilLWgLGc51a3gkuCjKQ7DO7cXZotgJ3kLqzC6hmex1SZnSXTWYHcrj8LJjWTk0PHoZ8VqIdCOKayPykcpuQxAokJaG1dGybYj4gw4K5u6PKTasSbjXKgnIDlA8VvUdo-pzonraBY2bsH7HAl78mKSHZpgIcuHjq9jXSpZSLixRlveKYQUXhQVhL6GPobXAAb7BbNeyvNUs4qfRg3OnELLj5hqH9eQZqCnoBwR9lYcQxuVXeBzc8kMF8yXY4yNJ5oGiUzP_aaf_waTRGJib5_Ad3P_vbCuaYxzeNpbU0eUMPAOKh7Yw1YErgtoXyuYlPLzc10_xo_5A91zkQL_AgAA)):\n\n```svelte\n<svelte:boundary>\n\t<FlakyComponent />\n\n\t{#snippet failed(error, reset)}\n\t\t<button onclick={reset}>oops! try again</button>\n\t{/snippet}\n</svelte:boundary>\n```\n\n> [!NOTE]\n> As with [snippets passed to components](snippet#Passing-snippets-to-components), the `failed` snippet can be passed explicitly as a property...\n>\n> ```svelte\n> <svelte:boundary {failed}>...</svelte:boundary>\n> ```\n>\n> ...or implicitly by declaring it directly inside the boundary, as in the example above.\n\n### `onerror`\n\nIf an `onerror` function is provided, it will be called with the same two `error` and `reset` arguments. This is useful for tracking the error with an error reporting service...\n\n```svelte\n<svelte:boundary onerror={(e) => report(e)}>\n\t...\n</svelte:boundary>\n```\n\n...or using `error` and `reset` outside the boundary itself:\n\n```svelte\n<script>\n\tlet error = $state(null);\n\tlet reset = $state(() => {});\n\n\tfunction onerror(e, r) {\n\t\terror = e;\n\t\treset = r;\n\t}\n</script>\n\n<svelte:boundary {onerror}>\n\t<FlakyComponent />\n</svelte:boundary>\n\n{#if error}\n\t<button onclick={() => {\n\t\terror = null;\n\t\treset();\n\t}}>\n\t\toops! try again\n\t</button>\n{/if}\n```\n\nIf an error occurs inside the `onerror` function (or if you rethrow the error), it will be handled by a parent boundary if such exists.\n\n## Using `transformError`\n\nBy default, error boundaries have no effect on the server — if an error occurs during rendering, the render as a whole will fail.\n\nSince 5.51 you can control this behaviour for boundaries with a `failed` snippet, by calling [`render(...)`](imperative-component-api#render) with a `transformError` function.\n\n> [!NOTE] If you're using Svelte via a framework such as SvelteKit, you most likely don't have direct access to the `render(...)` call — the framework must configure `transformError` on your behalf. SvelteKit will add support for this in the near future, via the [`handleError`](../kit/hooks#Shared-hooks-handleError) hook.\n\nThe `transformError` function must return a JSON-stringifiable object which will be used to render the `failed` snippet. This object will be serialized and used to hydrate the snippet in the browser:\n\n```js\n// @errors: 1005\nimport { render } from 'svelte/server';\nimport App from './App.svelte';\n\nconst { head, body } = await render(App, {\n\ttransformError: (error) => {\n\t\t// log the original error, with the stack trace...\n\t\tconsole.error(error);\n\n\t\t// ...and return a sanitized user-friendly error\n\t\t// to display in the `failed` snippet\n\t\treturn {\n\t\t\tmessage: 'An error occurred!'\n\t\t};\n\t};\n});\n```\n\nIf `transformError` throws (or rethrows) an error, `render(...)` as a whole will fail with that error.\n\n> [!NOTE] Errors that occur during server-side rendering can contain sensitive information in the `message` and `stack`. It's recommended to redact these rather than sending them unaltered to the browser.\n\nIf the boundary has an `onerror` handler, it will be called upon hydration with the deserialized error object.\n\nThe [`mount`](imperative-component-api#mount) and [`hydrate`](imperative-component-api#hydrate) functions also accept a `transformError` option, which defaults to the identity function. As with `render`, this function transforms a render-time error before it is passed to a `failed` snippet or `onerror` handler.\n"
  },
  {
    "path": "documentation/docs/05-special-elements/02-svelte-window.md",
    "content": "---\ntitle: <svelte:window>\n---\n\n```svelte\n<svelte:window onevent={handler} />\n```\n\n```svelte\n<svelte:window bind:prop={value} />\n```\n\nThe `<svelte:window>` element allows you to add event listeners to the `window` object without worrying about removing them when the component is destroyed, or checking for the existence of `window` when server-side rendering.\n\nThis element may only appear at the top level of your component — it cannot be inside a block or element.\n\n```svelte\n<script>\n\tfunction handleKeydown(event) {\n\t\talert(`pressed the ${event.key} key`);\n\t}\n</script>\n\n<svelte:window onkeydown={handleKeydown} />\n```\n\nYou can also bind to the following properties:\n\n- `innerWidth`\n- `innerHeight`\n- `outerWidth`\n- `outerHeight`\n- `scrollX`\n- `scrollY`\n- `online` — an alias for `window.navigator.onLine`\n- `devicePixelRatio`\n\nAll except `scrollX` and `scrollY` are readonly.\n\n```svelte\n<svelte:window bind:scrollY={y} />\n```\n\n> [!NOTE] Note that the page will not be scrolled to the initial value to avoid accessibility issues. Only subsequent changes to the bound variable of `scrollX` and `scrollY` will cause scrolling. If you have a legitimate reason to scroll when the component is rendered, call `scrollTo()` in an `$effect`.\n"
  },
  {
    "path": "documentation/docs/05-special-elements/03-svelte-document.md",
    "content": "---\ntitle: <svelte:document>\n---\n\n```svelte\n<svelte:document onevent={handler} />\n```\n\n```svelte\n<svelte:document bind:prop={value} />\n```\n\nSimilarly to `<svelte:window>`, this element allows you to add listeners to events on `document`, such as `visibilitychange`, which don't fire on `window`. It also lets you use [attachments](@attach) on `document`.\n\nAs with `<svelte:window>`, this element may only appear the top level of your component and must never be inside a block or element.\n\n```svelte\n<svelte:document onvisibilitychange={handleVisibilityChange} {@attach someAttachment} />\n```\n\nYou can also bind to the following properties:\n\n- `activeElement`\n- `fullscreenElement`\n- `pointerLockElement`\n- `visibilityState`\n\nAll are readonly.\n"
  },
  {
    "path": "documentation/docs/05-special-elements/04-svelte-body.md",
    "content": "---\ntitle: <svelte:body>\n---\n\n```svelte\n<svelte:body onevent={handler} />\n```\n\nSimilarly to `<svelte:window>`, this element allows you to add listeners to events on `document.body`, such as `mouseenter` and `mouseleave`, which don't fire on `window`. It also lets you use [actions](use) on the `<body>` element.\n\nAs with `<svelte:window>` and `<svelte:document>`, this element may only appear at the top level of your component and must never be inside a block or element.\n\n```svelte\n<svelte:body onmouseenter={handleMouseenter} onmouseleave={handleMouseleave} use:someAction />\n```\n"
  },
  {
    "path": "documentation/docs/05-special-elements/05-svelte-head.md",
    "content": "---\ntitle: <svelte:head>\n---\n\n```svelte\n<svelte:head>...</svelte:head>\n```\n\nThis element makes it possible to insert elements into `document.head`. During server-side rendering, `head` content is exposed separately to the main `body` content.\n\nAs with `<svelte:window>`, `<svelte:document>` and `<svelte:body>`, this element may only appear at the top level of your component and must never be inside a block or element.\n\n```svelte\n<svelte:head>\n\t<title>Hello world!</title>\n\t<meta name=\"description\" content=\"This is where the description goes for SEO\" />\n</svelte:head>\n```\n"
  },
  {
    "path": "documentation/docs/05-special-elements/06-svelte-element.md",
    "content": "---\ntitle: <svelte:element>\n---\n\n```svelte\n<svelte:element this={expression} />\n```\n\nThe `<svelte:element>` element lets you render an element that is unknown at author time, for example because it comes from a CMS. Any properties and event listeners present will be applied to the element.\n\nThe only supported binding is `bind:this`, since Svelte's built-in bindings do not work with generic elements.\n\nIf `this` has a nullish value, the element and its children will not be rendered.\n\nIf `this` is the name of a [void element](https://developer.mozilla.org/en-US/docs/Glossary/Void_element) (e.g., `br`) and `<svelte:element>` has child elements, a runtime error will be thrown in development mode:\n\n```svelte\n<script>\n\tlet tag = $state('hr');\n</script>\n\n<svelte:element this={tag}>\n\tThis text cannot appear inside an hr element\n</svelte:element>\n```\n\nSvelte tries its best to infer the correct namespace from the element's surroundings, but it's not always possible. You can make it explicit with an `xmlns` attribute:\n\n```svelte\n<svelte:element this={tag} xmlns=\"http://www.w3.org/2000/svg\" />\n```\n\n`this` needs to be a valid DOM element tag, things like `#text` or `svelte:head` will not work.\n"
  },
  {
    "path": "documentation/docs/05-special-elements/07-svelte-options.md",
    "content": "---\ntitle: <svelte:options>\n---\n\n```svelte\n<svelte:options option={value} />\n```\n\nThe `<svelte:options>` element provides a place to specify per-component compiler options, which are detailed in the [compiler section](svelte-compiler#compile). The possible options are:\n\n- `runes={true}` — forces a component into _runes mode_ (see the [Legacy APIs](legacy-overview) section)\n- `runes={false}` — forces a component into _legacy mode_\n- `namespace=\"...\"` — the namespace where this component will be used, can be \"html\" (the default), \"svg\" or \"mathml\"\n- `customElement={...}` — the [options](custom-elements#Component-options) to use when compiling this component as a custom element. If a string is passed, it is used as the `tag` option\n- `css=\"injected\"` — the component will inject its styles inline: During server-side rendering, it's injected as a `<style>` tag in the `head`, during client side rendering, it's loaded via JavaScript\n\n> [!LEGACY] Deprecated options\n> Svelte 4 also included the following options. They are deprecated in Svelte 5 and non-functional in runes mode.\n>\n> - `immutable={true}` — you never use mutable data, so the compiler can do simple referential equality checks to determine if values have changed\n> - `immutable={false}` — the default. Svelte will be more conservative about whether or not mutable objects have changed\n> - `accessors={true}` — adds getters and setters for the component's props\n> - `accessors={false}` — the default\n\n```svelte\n<svelte:options customElement=\"my-custom-element\" />\n```\n"
  },
  {
    "path": "documentation/docs/05-special-elements/index.md",
    "content": "---\ntitle: Special elements\n---\n"
  },
  {
    "path": "documentation/docs/06-runtime/01-stores.md",
    "content": "---\ntitle: Stores\n---\n\n<!-- - how to use\n- how to write\n- TODO should the details for the store methods belong to the reference section? -->\n\nA _store_ is an object that allows reactive access to a value via a simple _store contract_. The [`svelte/store` module](../svelte-store) contains minimal store implementations which fulfil this contract.\n\nAny time you have a reference to a store, you can access its value inside a component by prefixing it with the `$` character. This causes Svelte to declare the prefixed variable, subscribe to the store at component initialisation and unsubscribe when appropriate.\n\nAssignments to `$`-prefixed variables require that the variable be a writable store, and will result in a call to the store's `.set` method.\n\nNote that the store must be declared at the top level of the component — not inside an `if` block or a function, for example.\n\nLocal variables (that do not represent store values) must _not_ have a `$` prefix.\n\n```svelte\n<script>\n\timport { writable } from 'svelte/store';\n\n\tconst count = writable(0);\n\tconsole.log($count); // logs 0\n\n\tcount.set(1);\n\tconsole.log($count); // logs 1\n\n\t$count = 2;\n\tconsole.log($count); // logs 2\n</script>\n```\n\n## When to use stores\n\nPrior to Svelte 5, stores were the go-to solution for creating cross-component reactive states or extracting logic. With runes, these use cases have greatly diminished.\n\n- when extracting logic, it's better to take advantage of runes' universal reactivity: You can use runes outside the top level of components and even place them into JavaScript or TypeScript files (using a `.svelte.js` or `.svelte.ts` file ending)\n- when creating shared state, you can create a `$state` object containing the values you need and then manipulate said state\n\n```ts\n/// file: state.svelte.js\nexport const userState = $state({\n\tname: 'name',\n\t/* ... */\n});\n```\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { userState } from './state.svelte.js';\n</script>\n\n<p>User name: {userState.name}</p>\n<button onclick={() => {\n\tuserState.name = 'new name';\n}}>\n\tchange name\n</button>\n```\n\nStores are still a good solution when you have complex asynchronous data streams or it's important to have more manual control over updating values or listening to changes. If you're familiar with RxJs and want to reuse that knowledge, the `$` also comes in handy for you.\n\n## svelte/store\n\nThe `svelte/store` module contains a minimal store implementation which fulfil the store contract. It provides methods for creating stores that you can update from the outside, stores you can only update from the inside, and for combining and deriving stores.\n\n### `writable`\n\nFunction that creates a store which has values that can be set from 'outside' components. It gets created as an object with additional `set` and `update` methods.\n\n`set` is a method that takes one argument which is the value to be set. The store value gets set to the value of the argument if the store value is not already equal to it.\n\n`update` is a method that takes one argument which is a callback. The callback takes the existing store value as its argument and returns the new value to be set to the store.\n\n```js\n/// file: store.js\nimport { writable } from 'svelte/store';\n\nconst count = writable(0);\n\ncount.subscribe((value) => {\n\tconsole.log(value);\n}); // logs '0'\n\ncount.set(1); // logs '1'\n\ncount.update((n) => n + 1); // logs '2'\n```\n\nIf a function is passed as the second argument, it will be called when the number of subscribers goes from zero to one (but not from one to two, etc). That function will be passed a `set` function which changes the value of the store, and an `update` function which works like the `update` method on the store, taking a callback to calculate the store's new value from its old value. It must return a `stop` function that is called when the subscriber count goes from one to zero.\n\n```js\n/// file: store.js\nimport { writable } from 'svelte/store';\n\nconst count = writable(0, () => {\n\tconsole.log('got a subscriber');\n\treturn () => console.log('no more subscribers');\n});\n\ncount.set(1); // does nothing\n\nconst unsubscribe = count.subscribe((value) => {\n\tconsole.log(value);\n}); // logs 'got a subscriber', then '1'\n\nunsubscribe(); // logs 'no more subscribers'\n```\n\nNote that the value of a `writable` is lost when it is destroyed, for example when the page is refreshed. However, you can write your own logic to sync the value to for example the `localStorage`.\n\n### `readable`\n\nCreates a store whose value cannot be set from 'outside', the first argument is the store's initial value, and the second argument to `readable` is the same as the second argument to `writable`.\n\n```ts\nimport { readable } from 'svelte/store';\n\nconst time = readable(new Date(), (set) => {\n\tset(new Date());\n\n\tconst interval = setInterval(() => {\n\t\tset(new Date());\n\t}, 1000);\n\n\treturn () => clearInterval(interval);\n});\n\nconst ticktock = readable('tick', (set, update) => {\n\tconst interval = setInterval(() => {\n\t\tupdate((sound) => (sound === 'tick' ? 'tock' : 'tick'));\n\t}, 1000);\n\n\treturn () => clearInterval(interval);\n});\n```\n\n### `derived`\n\nDerives a store from one or more other stores. The callback runs initially when the first subscriber subscribes and then whenever the store dependencies change.\n\nIn the simplest version, `derived` takes a single store, and the callback returns a derived value.\n\n```ts\n// @filename: ambient.d.ts\nimport { type Writable } from 'svelte/store';\n\ndeclare global {\n\tconst a: Writable<number>;\n}\n\nexport {};\n\n// @filename: index.ts\n// ---cut---\nimport { derived } from 'svelte/store';\n\nconst doubled = derived(a, ($a) => $a * 2);\n```\n\nThe callback can set a value asynchronously by accepting a second argument, `set`, and an optional third argument, `update`, calling either or both of them when appropriate.\n\nIn this case, you can also pass a third argument to `derived` — the initial value of the derived store before `set` or `update` is first called. If no initial value is specified, the store's initial value will be `undefined`.\n\n```ts\n// @filename: ambient.d.ts\nimport { type Writable } from 'svelte/store';\n\ndeclare global {\n\tconst a: Writable<number>;\n}\n\nexport {};\n\n// @filename: index.ts\n// @errors: 18046 2769 7006\n// ---cut---\nimport { derived } from 'svelte/store';\n\nconst delayed = derived(\n\ta,\n\t($a, set) => {\n\t\tsetTimeout(() => set($a), 1000);\n\t},\n\t2000\n);\n\nconst delayedIncrement = derived(a, ($a, set, update) => {\n\tset($a);\n\tsetTimeout(() => update((x) => x + 1), 1000);\n\t// every time $a produces a value, this produces two\n\t// values, $a immediately and then $a + 1 a second later\n});\n```\n\nIf you return a function from the callback, it will be called when a) the callback runs again, or b) the last subscriber unsubscribes.\n\n```ts\n// @filename: ambient.d.ts\nimport { type Writable } from 'svelte/store';\n\ndeclare global {\n\tconst frequency: Writable<number>;\n}\n\nexport {};\n\n// @filename: index.ts\n// ---cut---\nimport { derived } from 'svelte/store';\n\nconst tick = derived(\n\tfrequency,\n\t($frequency, set) => {\n\t\tconst interval = setInterval(() => {\n\t\t\tset(Date.now());\n\t\t}, 1000 / $frequency);\n\n\t\treturn () => {\n\t\t\tclearInterval(interval);\n\t\t};\n\t},\n\t2000\n);\n```\n\nIn both cases, an array of arguments can be passed as the first argument instead of a single store.\n\n```ts\n// @filename: ambient.d.ts\nimport { type Writable } from 'svelte/store';\n\ndeclare global {\n\tconst a: Writable<number>;\n\tconst b: Writable<number>;\n}\n\nexport {};\n\n// @filename: index.ts\n\n// ---cut---\nimport { derived } from 'svelte/store';\n\nconst summed = derived([a, b], ([$a, $b]) => $a + $b);\n\nconst delayed = derived([a, b], ([$a, $b], set) => {\n\tsetTimeout(() => set($a + $b), 1000);\n});\n```\n\n### `readonly`\n\nThis simple helper function makes a store readonly. You can still subscribe to the changes from the original one using this new readable store.\n\n```js\nimport { readonly, writable } from 'svelte/store';\n\nconst writableStore = writable(1);\nconst readableStore = readonly(writableStore);\n\nreadableStore.subscribe(console.log);\n\nwritableStore.set(2); // console: 2\n// @errors: 2339\nreadableStore.set(2); // ERROR\n```\n\n### `get`\n\nGenerally, you should read the value of a store by subscribing to it and using the value as it changes over time. Occasionally, you may need to retrieve the value of a store to which you're not subscribed. `get` allows you to do so.\n\n> [!NOTE] This works by creating a subscription, reading the value, then unsubscribing. It's therefore not recommended in hot code paths.\n\n```ts\n// @filename: ambient.d.ts\nimport { type Writable } from 'svelte/store';\n\ndeclare global {\n\tconst store: Writable<string>;\n}\n\nexport {};\n\n// @filename: index.ts\n// ---cut---\nimport { get } from 'svelte/store';\n\nconst value = get(store);\n```\n\n## Store contract\n\n```ts\n// @noErrors\nstore = { subscribe: (subscription: (value: any) => void) => (() => void), set?: (value: any) => void }\n```\n\nYou can create your own stores without relying on [`svelte/store`](../svelte-store), by implementing the _store contract_:\n\n1. A store must contain a `.subscribe` method, which must accept as its argument a subscription function. This subscription function must be immediately and synchronously called with the store's current value upon calling `.subscribe`. All of a store's active subscription functions must later be synchronously called whenever the store's value changes.\n2. The `.subscribe` method must return an unsubscribe function. Calling an unsubscribe function must stop its subscription, and its corresponding subscription function must not be called again by the store.\n3. A store may _optionally_ contain a `.set` method, which must accept as its argument a new value for the store, and which synchronously calls all of the store's active subscription functions. Such a store is called a _writable store_.\n\nFor interoperability with RxJS Observables, the `.subscribe` method is also allowed to return an object with an `.unsubscribe` method, rather than return the unsubscription function directly. Note however that unless `.subscribe` synchronously calls the subscription (which is not required by the Observable spec), Svelte will see the value of the store as `undefined` until it does.\n"
  },
  {
    "path": "documentation/docs/06-runtime/02-context.md",
    "content": "---\ntitle: Context\n---\n\nContext allows components to access values owned by parent components without passing them down as props (potentially through many layers of intermediate components, known as 'prop-drilling').\n\nBy creating a `[get, set]` pair of functions with `createContext`, you can set the context in a parent component and get it in a child component:\n\n<!-- codeblock:start {\"title\":\"Context\",\"selected\":\"context.ts\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Parent from './Parent.svelte';\n\timport Child from './Child.svelte';\n</script>\n\n<Parent>\n\t<Child />\n</Parent>\n```\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport { setUserContext } from './context';\n\n\tlet { children } = $props();\n\n\tsetUserContext({ name: 'world' });\n</script>\n\n{@render children()}\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getUserContext } from './context';\n\n\tconst user = getUserContext();\n</script>\n\n<h1>hello {user.name}, inside Child.svelte</h1>\n```\n\n```ts\n/// file: context.ts\nimport { createContext } from 'svelte';\n\ninterface User {\n\tname: string;\n}\n\nexport const [getUserContext, setUserContext] = createContext<User>();\n```\n<!-- codeblock:end -->\n\n> [!NOTE] `createContext` was added in version 5.40. If you are using an earlier version of Svelte, you must use `setContext` and `getContext` instead.\n\nThis is particularly useful when `Parent.svelte` is not directly aware of `Child.svelte`, but instead renders it as part of a `children` [snippet](snippet) as shown above.\n\n## `setContext` and `getContext`\n\nAs an alternative to `createContext`, you can use `setContext` and `getContext` directly. The parent component sets context with `setContext(key, value)`...\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport { setContext } from 'svelte';\n\n\tsetContext('my-context', 'hello from Parent.svelte');\n</script>\n```\n\n...and the child retrieves it with `getContext`:\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getContext } from 'svelte';\n\n\tconst message = getContext('my-context');\n</script>\n\n<h1>{message}, inside Child.svelte</h1>\n```\n\nThe key (`'my-context'`, in the example above) and the context itself can be any JavaScript value.\n\n> [!NOTE] `createContext` is preferred since it provides better type safety and makes it unnecessary to use keys.\n\nIn addition to [`setContext`](svelte#setContext) and [`getContext`](svelte#getContext), Svelte exposes [`hasContext`](svelte#hasContext) and [`getAllContexts`](svelte#getAllContexts) functions.\n\n## Using context with state\n\nYou can store reactive state in context...\n\n<!-- codeblock:start {\"title\":\"Context with state\"} -->\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { setCounter } from './context.ts';\n\timport Child from './Child.svelte';\n\n\tlet counter = $state({\n\t\tcount: 0\n\t});\n\n\tsetCounter(counter);\n</script>\n\n<button onclick={() => counter.count += 1}>\n\tincrement\n</button>\n\n<Child />\n<Child />\n<Child />\n\n<button onclick={() => counter.count = 0}>\n\treset\n</button>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getCounter } from './context.ts';\n\n\tconst counter = getCounter();\n</script>\n\n<p>{counter.count}</p>\n```\n\n```ts\n/// file: context.ts\nimport { createContext } from 'svelte';\n\ninterface Counter {\n\tcount: number;\n}\n\nexport const [getCounter, setCounter] = createContext<Counter>();\n```\n<!-- codeblock:end -->\n\n...though note that if you _reassign_ `counter` instead of updating it, you will 'break the link' — in other words instead of this...\n\n```svelte\n<button onclick={() => counter = { count: 0 } }>\n\treset\n</button>\n```\n\n...you must do this:\n\n```svelte\n<button onclick={() => +++counter.count = 0+++}>\n\treset\n</button>\n```\n\nSvelte will warn you if you get it wrong.\n\n## Component testing\n\nWhen writing [component tests](testing#Unit-and-component-tests-with-Vitest-Component-testing), it can be useful to create a wrapper component that sets the context in order to check the behaviour of a component that uses it. As of version 5.49, you can do this sort of thing:\n\n```js\nimport { mount, unmount } from 'svelte';\nimport { expect, test } from 'vitest';\nimport { setUserContext } from './context';\nimport MyComponent from './MyComponent.svelte';\n\ntest('MyComponent', () => {\n\tfunction Wrapper(...args) {\n\t\tsetUserContext({ name: 'Bob' });\n\t\treturn MyComponent(...args);\n\t}\n\n\tconst component = mount(Wrapper, {\n\t\ttarget: document.body\n\t});\n\n\texpect(document.body.innerHTML).toBe('<h1>Hello Bob!</h1>');\n\n\tunmount(component);\n});\n```\n\nThis approach also works with [`hydrate`](imperative-component-api#hydrate) and [`render`](imperative-component-api#render).\n\n## Replacing global state\n\nWhen you have state shared by many different components, you might be tempted to put it in its own module and just import it wherever it's needed:\n\n```js\n/// file: state.svelte.js\nexport const myGlobalState = $state({\n\tuser: {\n\t\t// ...\n\t}\n\t// ...\n});\n```\n\nIn many cases this is perfectly fine, but there is a risk: if you mutate the state during server-side rendering (which is discouraged, but entirely possible!)...\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport { myGlobalState } from './state.svelte.js';\n\n\tlet { data } = $props();\n\n\tif (data.user) {\n\t\tmyGlobalState.user = data.user;\n\t}\n</script>\n```\n\n...then the data may be accessible by the _next_ user. Context solves this problem because it is not shared between requests.\n"
  },
  {
    "path": "documentation/docs/06-runtime/03-lifecycle-hooks.md",
    "content": "---\ntitle: Lifecycle hooks\n---\n\n<!-- - onMount/onDestroy\n- mention that `$effect` might be better for your use case\n- beforeUpdate/afterUpdate with deprecation notice?\n- or skip this entirely and only have it in the reference docs? -->\n\nIn Svelte 5, the component lifecycle consists of only two parts: Its creation and its destruction. Everything in-between — when certain state is updated — is not related to the component as a whole; only the parts that need to react to the state change are notified. This is because under the hood the smallest unit of change is actually not a component, it's the (render) effects that the component sets up upon component initialization. Consequently, there's no such thing as a \"before update\"/\"after update\" hook.\n\n## `onMount`\n\nThe `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM. It must be called during the component's initialisation (but doesn't need to live _inside_ the component; it can be called from an external module).\n\n`onMount` does not run inside a component that is rendered on the server.\n\n```svelte\n<script>\n\timport { onMount } from 'svelte';\n\n\tonMount(() => {\n\t\tconsole.log('the component has mounted');\n\t});\n</script>\n```\n\nIf a function is returned from `onMount`, it will be called when the component is unmounted.\n\n```svelte\n<script>\n\timport { onMount } from 'svelte';\n\n\tonMount(() => {\n\t\tconst interval = setInterval(() => {\n\t\t\tconsole.log('beep');\n\t\t}, 1000);\n\n\t\treturn () => clearInterval(interval);\n\t});\n</script>\n```\n\n> [!NOTE] This behaviour will only work when the function passed to `onMount` is _synchronous_. `async` functions always return a `Promise`.\n\n## `onDestroy`\n\nSchedules a callback to run immediately before the component is unmounted.\n\nOut of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the only one that runs inside a server-side component.\n\n```svelte\n<script>\n\timport { onDestroy } from 'svelte';\n\n\tonDestroy(() => {\n\t\tconsole.log('the component is being destroyed');\n\t});\n</script>\n```\n\n## `tick`\n\nWhile there's no \"after update\" hook, you can use `tick` to ensure that the UI is updated before continuing. `tick` returns a promise that resolves once any pending state changes have been applied, or in the next microtask if there are none.\n\n```svelte\n<script>\n\timport { tick } from 'svelte';\n\n\t$effect.pre(() => {\n\t\tconsole.log('the component is about to update');\n\t\ttick().then(() => {\n\t\t\t\tconsole.log('the component just updated');\n\t\t});\n\t});\n</script>\n```\n\n## Deprecated: `beforeUpdate` / `afterUpdate`\n\nSvelte 4 contained hooks that ran before and after the component as a whole was updated. For backwards compatibility, these hooks were shimmed in Svelte 5 but not available inside components that use runes.\n\n```svelte\n<script>\n\timport { beforeUpdate, afterUpdate } from 'svelte';\n\n\tbeforeUpdate(() => {\n\t\tconsole.log('the component is about to update');\n\t});\n\n\tafterUpdate(() => {\n\t\tconsole.log('the component just updated');\n\t});\n</script>\n```\n\nInstead of `beforeUpdate` use `$effect.pre` and instead of `afterUpdate` use `$effect` instead — these runes offer more granular control and only react to the changes you're actually interested in.\n\n### Chat window example\n\nTo implement a chat window that autoscrolls to the bottom when new messages appear (but only if you were _already_ scrolled to the bottom), we need to measure the DOM before we update it.\n\nIn Svelte 4, we do this with `beforeUpdate`, but this is a flawed approach — it fires before _every_ update, whether it's relevant or not. In the example below, we need to introduce checks like `updatingMessages` to make sure we don't mess with the scroll position when someone toggles dark mode.\n\nWith runes, we can use `$effect.pre`, which behaves the same as `$effect` but runs before the DOM is updated. As long as we explicitly reference `messages` inside the effect body, it will run whenever `messages` changes, but _not_ when `theme` changes.\n\n`beforeUpdate`, and its equally troublesome counterpart `afterUpdate`, are therefore deprecated in Svelte 5.\n\n- [Before](/playground/untitled#H4sIAAAAAAAAE31WXa_bNgz9K6yL1QmWOLlrC-w6H8MeBgwY9tY9NfdBtmlbiywZkpyPBfnvo2zLcZK28AWuRPGI5OGhkEuQc4EmiL9eAskqDOLg97oOZoE9125jDigs0t6oRqfOsjap5rXd7uTO8qpW2sIFEsyVxn_qjFmcAcstar-xPN3DFXKtKgi768IVgQku0ELj3Lgs_kZjWIEGNpAzYXDlHWyJFZI1zJjeh4O5uvl_DY8oUkVeVoFuJKYls-_CGYS25Aboj0EtWNqel0wWoBoLTGZgmdgDS9zW4Uz4NsrswPHoyutN4xInkylstnBxdmIhh8m7xzqmoNE2Wq46n1RJQzEbq4g-JQSl7e-HDx-GdaTy3KD9E3lRWvj5Zu9QX1QN20dj7zyHz8s-1S6lW7Cpz3RnXTcm04hIlfdFuO8p2mQ5-3a06cqjrn559bF_2NHOnRZ5I1PLlXQNyQT-hedMHeUEDyjtdMxsa4n2eIbNhlTwhyRthaOKOmYtniwF6pwt0wXa6MBEg0OibZec27gz_dk3UrZ6hB2LLYoiv521Yd8Gt-foTrfhiCDP0lC9VUUhcDLU49Xe_9943cNvEArHfAjxeBTovvXiNpFynfEDpIIZs9kFbg52QbeNHWZzebz32s7xHco3nJAJl1nshmhz8dYOQJDyZetnbb2gTWe-vEeWlrfpZMavr56ldb29eNt6UXvgwgFbp_WC0tl2RK25rGk6lYz3nUI2lzvBXGHhPZPGWmKUXFNBKqdaW259wl_aHbiqoVIZdpE60Nax6IOujT0LbFFxIVTCxCRR2XloUcYNvSbnGHKBp763jHoj59xiZWJI0Wm0P_m3MSS985xkasn-cFq20xTDy3J5KFcjgUTD69BHdcHIjz431z28IqlxGcPSfdFnrGDZn6gD6lyo45zyHAD-btczf-98nhQxHEvKfeUtOVkSejD3q-9X7JbzjGtsdUxlKdFU8qGsT78uaw848syWMXz85Waq2Gnem4mAn3prweq4q6Y3JEpnqMmnPoFRgmd3ySW0LLRqSKlwYHriCvJvUs2yjMaaoA-XzTXLeGMe45zmhv_XAno3Mj0xF7USuqNvnE9H343QHlq-eAgxpbTPNR9yzUkgLjwSR0NK4wKoxy-jDg-9vy8sUSToakzW-9fX13Em9Q8T6Z26uZhBN36XUYo5q7ggLXBZoub2Ofv7g6GCZfTxe034NCjiudXj7Omla0eTfo7QBPOcYxbE7qG-vl3_B1G-_i_JCAAA)\n- [After](/playground/untitled#H4sIAAAAAAAAE31WXa-jNhD9K7PsdknUQJLurtRLPqo-VKrU1327uQ8GBnBjbGSb5KZR_nvHgMlXtyIS9njO-MyZGZRzUHCBJkhez4FkNQZJ8HvTBLPAnhq3MQcUFmlvVKszZ1mbTPPGbndyZ3ndKG3hDJZne7hAoVUNYY8JV-RBPgIt2AprhA18MpZZnIQ50_twuvLHNRrDSjRXj9fwiCJTBLIKdCsxq5j9EM4gtBU3QD8GjWBZd14xWYJqLTCZg2ViDyx1W4cz4dv0hsiB49FRHkyfsCgws3GjcTKZwmYLZ2feWc9o1W8zJQ2Fb62i5JUQRNRHgs-fx3WsisKg_RN5WVn4-WrvUd9VA9tH4-AcwbfFQIpkLWByvWzqSe2sk3kyjUlOec_XPU-3TRaz_75tuvKoi19e3OvipSpamVmupJM2F_gXnnJ1lBM8oLQjHceys8R7PMFms4HwD2lRhzeEe-EsvluSrHe2TJdo4wMTLY48XKwPzm0KGm2r5ajFtRYU4TWOY7-ddWHfxhDP0QkQhnf5PWRnVVkKnIx8fZsOb5dR16nwG4TCCRdCMphWQ7z1_DoOcp3zA2SCGbPZBa5jd0G_TRxmc36Me-mG6A7l60XIlMs8ce2-OXtrDyBItdz6qVjPadObzx-RZdV1nJjx64tXad1sz962njceOHfAzmk9JzrbXqg1lw3NkZL7vgE257t-uMDcO6attSSokpmgFqVMO2U93e_dDlzOUKsc-3t6zNZp6K9cG3sS2KGSUqiUiUmq8tNYoJwbmvpTAoXA96GyjCojI26xNglk6DpwOPm7NdRYp4ia0JL94bTqRiGB5WJxqFY37RGPoz3c6i4jP3rcUA7wmhqNywQW7om_YQ2L4UQdUBdCHSPiOQJ8bFcxHzeK0jKBY0XcV95SkCWlD9t-9eOM3TLKucauiyktJdpaPqT19ddF4wFHntsqgS-_XE01e48GMwnw02AtWZP02QyGVOkcNfk072CU4PkduZSWpVYt9SkcmJ64hPwHpWF5ziVls3wIFmmW89Y83vMeGf5PBxjcyPSkXNy10J18t3x6-a6CDtBq6SGklNKeazFyLahB3PVIGo2UbhOgGi9vKjzW_j6xVFFD17difXx5ebll0vwvkcGpn4sZ9MN3vqFYsJoL6gUuK9TcPrO_PxgzWMRfflSEr2NHPJf6lj1957rRpH8CNMG84JgHidUtXt4u_wK21LXERAgAAA==)\n\n<!-- prettier-ignore -->\n```svelte\n<script>\n\timport { ---beforeUpdate, afterUpdate,--- tick } from 'svelte';\n\n\t---let updatingMessages = false;---\n\tlet theme = +++$state('dark')+++;\n\tlet messages = +++$state([])+++;\n\n\tlet viewport;\n\n\t---beforeUpdate(() => {---\n\t+++$effect.pre(() => {+++\n\t\t---if (!updatingMessages) return;---\n\t\t+++messages;+++\n\t\tconst autoscroll = viewport && viewport.offsetHeight + viewport.scrollTop > viewport.scrollHeight - 50;\n\n\t\tif (autoscroll) {\n\t\t\ttick().then(() => {\n\t\t\t\tviewport.scrollTo(0, viewport.scrollHeight);\n\t\t\t});\n\t\t}\n\n\t\t---updatingMessages = false;---\n\t});\n\n\tfunction handleKeydown(event) {\n\t\tif (event.key === 'Enter') {\n\t\t\tconst text = event.target.value;\n\t\t\tif (!text) return;\n\n\t\t\t---updatingMessages = true;---\n\t\t\tmessages = [...messages, text];\n\t\t\tevent.target.value = '';\n\t\t}\n\t}\n\n\tfunction toggle() {\n\t\ttheme = theme === 'dark' ? 'light' : 'dark';\n\t}\n</script>\n\n<div class:dark={theme === 'dark'}>\n\t<div bind:this={viewport}>\n\t\t{#each messages as message}\n\t\t\t<p>{message}</p>\n\t\t{/each}\n\t</div>\n\n\t<input +++onkeydown+++={handleKeydown} />\n\n\t<button +++onclick+++={toggle}> Toggle dark mode </button>\n</div>\n```\n"
  },
  {
    "path": "documentation/docs/06-runtime/04-imperative-component-api.md",
    "content": "---\ntitle: Imperative component API\n---\n\n<!-- better title needed?\n\n- mount\n- unmount\n- render\n- hydrate\n- how they interact with each other -->\n\nEvery Svelte application starts by imperatively creating a root component. On the client this component is mounted to a specific element. On the server, you want to get back a string of HTML instead which you can render. The following functions help you achieve those tasks.\n\n## `mount`\n\nInstantiates a component and mounts it to the given target:\n\n```js\n// @errors: 2322\nimport { mount } from 'svelte';\nimport App from './App.svelte';\n\nconst app = mount(App, {\n\ttarget: document.querySelector('#app'),\n\tprops: { some: 'property' }\n});\n```\n\nYou can mount multiple components per page, and you can also mount from within your application, for example when creating a tooltip component and attaching it to the hovered element.\n\nNote that unlike calling `new App(...)` in Svelte 4, things like effects (including `onMount` callbacks, and action functions) will not run during `mount`. If you need to force pending effects to run (in the context of a test, for example) you can do so with `flushSync()`.\n\n## `unmount`\n\nUnmounts a component that was previously created with [`mount`](#mount) or [`hydrate`](#hydrate).\n\nIf `options.outro` is `true`, [transitions](transition) will play before the component is removed from the DOM:\n\n```js\nimport { mount, unmount } from 'svelte';\nimport App from './App.svelte';\n\nconst app = mount(App, { target: document.body });\n\n// later\nunmount(app, { outro: true });\n```\n\nReturns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise.\n\n## `render`\n\nOnly available on the server and when compiling with the `server` option. Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app:\n\n```js\n// @errors: 2724 2305 2307\nimport { render } from 'svelte/server';\nimport App from './App.svelte';\n\nconst result = render(App, {\n\tprops: { some: 'property' }\n});\nresult.body; // HTML for somewhere in this <body> tag\nresult.head; // HTML for somewhere in this <head> tag\n```\n\n## `hydrate`\n\nLike `mount`, but will reuse up any HTML rendered by Svelte's SSR output (from the [`render`](#render) function) inside the target and make it interactive:\n\n```js\n// @errors: 2322\nimport { hydrate } from 'svelte';\nimport App from './App.svelte';\n\nconst app = hydrate(App, {\n\ttarget: document.querySelector('#app'),\n\tprops: { some: 'property' }\n});\n```\n\nAs with `mount`, effects will not run during `hydrate` — use `flushSync()` immediately afterwards if you need them to.\n"
  },
  {
    "path": "documentation/docs/06-runtime/05-hydratable.md",
    "content": "---\ntitle: Hydratable data\n---\n\nIn Svelte, when you want to render asynchronous content data on the server, you can simply `await` it. This is great! However, it comes with a pitfall: when hydrating that content on the client, Svelte has to redo the asynchronous work, which blocks hydration for however long it takes:\n\n```svelte\n<script>\n  import { getUser } from 'my-database-library';\n\n  // This will get the user on the server, render the user's name into the h1,\n  // and then, during hydration on the client, it will get the user _again_,\n  // blocking hydration until it's done.\n  const user = await getUser();\n</script>\n\n<h1>{user.name}</h1>\n```\n\nThat's silly, though. If we've already done the hard work of getting the data on the server, we don't want to get it again during hydration on the client. `hydratable` is a low-level API built to solve this problem. You probably won't need this very often — it will be used behind the scenes by whatever datafetching library you use. For example, it powers [remote functions in SvelteKit](/docs/kit/remote-functions).\n\nTo fix the example above:\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n  import { getUser } from 'my-database-library';\n\n  // During server rendering, this will serialize and stash the result of `getUser`, associating\n  // it with the provided key and baking it into the `head` content. During hydration, it will\n  // look for the serialized version, returning it instead of running `getUser`. After hydration\n  // is done, if it's called again, it'll simply invoke `getUser`.\n  const user = await hydratable('user', () => getUser());\n</script>\n\n<h1>{user.name}</h1>\n```\n\nThis API can also be used to provide access to random or time-based values that are stable between server rendering and hydration. For example, to get a random number that doesn't update on hydration:\n\n```ts\nimport { hydratable } from 'svelte';\nconst rand = hydratable('random', () => Math.random());\n```\n\nIf you're a library author, be sure to prefix the keys of your `hydratable` values with the name of your library so that your keys don't conflict with other libraries.\n\n## Serialization\n\nAll data returned from a `hydratable` function must be serializable. But this doesn't mean you're limited to JSON — Svelte uses [`devalue`](https://npmjs.com/package/devalue), which can serialize all sorts of things including `Map`, `Set`, `URL`, and `BigInt`. Check the documentation page for a full list. In addition to these, thanks to some Svelte magic, you can also fearlessly use promises:\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n  const promises = hydratable('random', () => {\n    return {\n      one: Promise.resolve(1),\n      two: Promise.resolve(2)\n    }\n  });\n</script>\n\n{await promises.one}\n{await promises.two}\n```\n\n## CSP\n\n`hydratable` adds an inline `<script>` block to the `head` returned from `render`. If you're using [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) (CSP), this script will likely fail to run. You can provide a `nonce` to `render`:\n\n```js\n/// file: server.js\nimport { render } from 'svelte/server';\nimport App from './App.svelte';\n// ---cut---\nconst nonce = crypto.randomUUID();\n\nconst { head, body } = await render(App, {\n\tcsp: { nonce }\n});\n```\n\nThis will add the `nonce` to the script block, on the assumption that you will later add the same nonce to the CSP header of the document that contains it:\n\n```js\n/// file: server.js\nlet response = new Response();\nlet nonce = 'xyz123';\n// ---cut---\nresponse.headers.set(\n  'Content-Security-Policy',\n  `script-src 'nonce-${nonce}'`\n );\n```\n\nIt's essential that a `nonce` — which, British slang definition aside, means 'number used once' — is only used when dynamically server rendering an individual response.\n\nIf instead you are generating static HTML ahead of time, you must use hashes instead:\n\n```js\n/// file: server.js\nimport { render } from 'svelte/server';\nimport App from './App.svelte';\n// ---cut---\nconst { head, body, hashes } = await render(App, {\n\tcsp: { hash: true }\n});\n```\n\n`hashes.script` will be an array of strings like `[\"sha256-abcd123\"]`. As with `nonce`, the hashes should be used in your CSP header:\n\n```js\n/// file: server.js\nlet response = new Response();\nlet hashes = { script: ['sha256-xyz123'] };\n// ---cut---\nresponse.headers.set(\n  'Content-Security-Policy',\n  `script-src ${hashes.script.map((hash) => `'${hash}'`).join(' ')}`\n );\n```\n\nWe recommend using `nonce` over hash if you can, as `hash` will interfere with streaming SSR in the future.\n"
  },
  {
    "path": "documentation/docs/06-runtime/index.md",
    "content": "---\ntitle: Runtime\n---\n"
  },
  {
    "path": "documentation/docs/07-misc/01-best-practices.md",
    "content": "---\ntitle: Best practices\nskill: true\nname: svelte-core-bestpractices\ndescription: Guidance on writing fast, robust, modern Svelte code. Load this skill whenever in a Svelte project and asked to write/edit or analyze a Svelte component or module. Covers reactivity, event handling, styling, integration with libraries and more.\n---\n\n<!-- llm-ignore-start -->\nThis document outlines some best practices that will help you write fast, robust Svelte apps. It is also available as a `svelte-core-bestpractices` skill for your agents.\n<!-- llm-ignore-end -->\n\n## `$state`\n\nOnly use the `$state` rune for variables that should be _reactive_ — in other words, variables that cause an `$effect`, `$derived` or template expression to update. Everything else can be a normal variable.\n\nObjects and arrays (`$state({...})` or `$state([...])`) are made deeply reactive, meaning mutation will trigger updates. This has a trade-off: in exchange for fine-grained reactivity, the objects must be proxied, which has performance overhead. In cases where you're dealing with large objects that are only ever reassigned (rather than mutated), use `$state.raw` instead. This is often the case with API responses, for example.\n\n## `$derived`\n\nTo compute something from state, use `$derived` rather than `$effect`:\n\n```js\n// @errors: 2451\nlet num = 0;\n// ---cut---\n// do this\nlet square = $derived(num * num);\n\n// don't do this\nlet square;\n\n$effect(() => {\n\tsquare = num * num;\n});\n```\n\n> [!NOTE] `$derived` is given an expression, _not_ a function. If you need to use a function (because the expression is complex, for example) use `$derived.by`.\n\nDeriveds are writable — you can assign to them, just like `$state`, except that they will re-evaluate when their expression changes.\n\nIf the derived expression is an object or array, it will be returned as-is — it is _not_ made deeply reactive. You can, however, use `$state` inside `$derived.by` in the rare cases that you need this.\n\n## `$effect`\n\nEffects are an escape hatch and should mostly be avoided. In particular, avoid updating state inside effects.\n\n- If you need to sync state to an external library such as D3, it is often neater to use [`{@attach ...}`](@attach)\n- If you need to run some code in response to user interaction, put the code directly in an event handler or use a [function binding](bind#Function-bindings) as appropriate\n- If you need to log values for debugging purposes, use [`$inspect`]($inspect)\n- If you need to observe something external to Svelte, use [`createSubscriber`](svelte-reactivity#createSubscriber)\n\nNever wrap the contents of an effect in `if (browser) {...}` or similar — effects do not run on the server.\n\n## `$props`\n\nTreat props as though they will change. For example, values that depend on props should usually use `$derived`:\n\n```js\n// @errors: 2451\nlet { type } = $props();\n\n// do this\nlet color = $derived(type === 'danger' ? 'red' : 'green');\n\n// don't do this — `color` will not update if `type` changes\nlet color = type === 'danger' ? 'red' : 'green';\n```\n\n## `$inspect.trace`\n\n`$inspect.trace` is a debugging tool for reactivity. If something is not updating properly or running more than it should you can add `$inspect.trace(label)` as the first line of an `$effect` or `$derived.by` (or any function they call) to trace their dependencies and discover which one triggered an update.\n\n## Events\n\nAny element attribute starting with `on` is treated as an event listener:\n\n```svelte\n<button onclick={() => {...}}>click me</button>\n\n<!-- attribute shorthand also works -->\n<button {onclick}>...</button>\n\n<!-- so do spread attributes -->\n<button {...props}>...</button>\n```\n\nIf you need to attach listeners to `window` or `document` you can use `<svelte:window>` and `<svelte:document>`:\n\n```svelte\n<svelte:window onkeydown={...} />\n<svelte:document onvisibilitychange={...} />\n```\n\nAvoid using `onMount` or `$effect` for this.\n\n## Snippets\n\n[Snippets](snippet) are a way to define reusable chunks of markup that can be instantiated with the [`{@render ...}`](@render) tag, or passed to components as props. They must be declared within the template.\n\n```svelte\n{#snippet greeting(name)}\n  <p>hello {name}!</p>\n{/snippet}\n\n{@render greeting('world')}\n```\n\n> [!NOTE] Snippets declared at the top level of a component (i.e. not inside elements or blocks) can be referenced inside `<script>`. A snippet that doesn't reference component state is also available in a `<script module>`, in which case it can be exported for use by other components.\n\n## Each blocks\n\nPrefer to use [keyed each blocks](each#Keyed-each-blocks) — this improves performance by allowing Svelte to surgically insert or remove items rather than updating the DOM belonging to existing items.\n\n> [!NOTE] The key _must_ uniquely identify the object. Do not use the index as a key.\n\nAvoid destructuring if you need to mutate the item (with something like `bind:value={item.count}`, for example).\n\n## Using JavaScript variables in CSS\n\nIf you have a JS variable that you want to use inside CSS you can set a CSS custom property with the `style:` directive.\n\n```svelte\n<div style:--columns={columns}>...</div>\n```\n\nYou can then reference `var(--columns)` inside the component's `<style>`.\n\n## Styling child components\n\nThe CSS in a component's `<style>` is scoped to that component. If a parent component needs to control the child's styles, the preferred way is to use CSS custom properties:\n\n```svelte\n<!-- Parent.svelte -->\n<Child --color=\"red\" />\n\n<!-- Child.svelte -->\n<h1>Hello</h1>\n\n<style>\n\th1 {\n\t\tcolor: var(--color);\n\t}\n</style>\n```\n\nIf this is impossible (for example, the child component comes from a library) you can use `:global` to override styles:\n\n```svelte\n<div>\n\t<Child />\n</div>\n\n<style>\n\tdiv :global {\n\t\th1 {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>\n```\n\n## Context\n\nConsider using context instead of declaring state in a shared module. This will scope the state to the part of the app that needs it, and eliminate the possibility of it leaking between users when server-side rendering.\n\nUse `createContext` rather than `setContext` and `getContext`, as it provides type safety.\n\n## Async Svelte\n\nIf using version 5.36 or higher, you can use [await expressions](await-expressions) and [hydratable](hydratable) to use promises directly inside components. Note that these require the `experimental.async` option to be enabled in `svelte.config.js` as they are not yet considered fully stable.\n\n## Avoid legacy features\n\nAlways use runes mode for new code, and avoid features that have more modern replacements:\n\n- use `$state` instead of implicit reactivity (e.g. `let count = 0; count += 1`)\n- use `$derived` and `$effect` instead of `$:` assignments and statements (but only use effects when there is no better solution)\n- use `$props` instead of `export let`, `$$props` and `$$restProps`\n- use `onclick={...}` instead of `on:click={...}`\n- use `{#snippet ...}` and `{@render ...}` instead of `<slot>` and `$$slots` and `<svelte:fragment>`\n- use `<DynamicComponent>` instead of `<svelte:component this={DynamicComponent}>`\n- use `import Self from './ThisComponent.svelte'` and `<Self>` instead of `<svelte:self>`\n- use classes with `$state` fields to share reactivity between components, instead of using stores\n- use `{@attach ...}` instead of `use:action`\n- use clsx-style arrays and objects in `class` attributes, instead of the `class:` directive\n"
  },
  {
    "path": "documentation/docs/07-misc/02-testing.md",
    "content": "---\ntitle: Testing\n---\n\nTesting helps you write and maintain your code and guard against regressions. Testing frameworks help you with that, allowing you to describe assertions or expectations about how your code should behave. Svelte is unopinionated about which testing framework you use — you can write unit tests, integration tests, and end-to-end tests using solutions like [Vitest](https://vitest.dev/), [Jasmine](https://jasmine.github.io/), [Cypress](https://www.cypress.io/) and [Playwright](https://playwright.dev/).\n\n## Unit and component tests with Vitest\n\nUnit tests allow you to test small isolated parts of your code. Integration tests allow you to test parts of your application to see if they work together. If you're using Vite (including via SvelteKit), we recommend using [Vitest](https://vitest.dev/). You can use the Svelte CLI to [setup Vitest](/docs/cli/vitest) either during project creation or later on.\n\nTo setup Vitest manually, first install it:\n\n```sh\nnpm install -D vitest\n```\n\nThen adjust your `vite.config.js`:\n\n<!-- prettier-ignore -->\n```js\n/// file: vite.config.js\nimport { defineConfig } from +++'vitest/config'+++;\n\nexport default defineConfig({\n\t// ...\n\t// Tell Vitest to use the `browser` entry points in `package.json` files, even though it's running in Node\n\tresolve: process.env.VITEST\n\t\t? {\n\t\t\t\tconditions: ['browser']\n\t\t\t}\n\t\t: undefined\n});\n```\n\n> [!NOTE] If loading the browser version of all your packages is undesirable, because (for example) you also test backend libraries, [you may need to resort to an alias configuration](https://github.com/testing-library/svelte-testing-library/issues/222#issuecomment-1909993331)\n\nYou can now write unit tests for code inside your `.js/.ts` files:\n\n```js\n/// file: multiplier.svelte.test.js\nimport { flushSync } from 'svelte';\nimport { expect, test } from 'vitest';\nimport { multiplier } from './multiplier.svelte.js';\n\ntest('Multiplier', () => {\n\tlet double = multiplier(0, 2);\n\n\texpect(double.value).toEqual(0);\n\n\tdouble.set(5);\n\n\texpect(double.value).toEqual(10);\n});\n```\n\n```js\n/// file: multiplier.svelte.js\n/**\n * @param {number} initial\n * @param {number} k\n */\nexport function multiplier(initial, k) {\n\tlet count = $state(initial);\n\n\treturn {\n\t\tget value() {\n\t\t\treturn count * k;\n\t\t},\n\t\t/** @param {number} c */\n\t\tset: (c) => {\n\t\t\tcount = c;\n\t\t}\n\t};\n}\n```\n\n### Using runes inside your test files\n\nSince Vitest processes your test files the same way as your source files, you can use runes inside your tests as long as the filename includes `.svelte`:\n\n```js\n/// file: multiplier.svelte.test.js\nimport { flushSync } from 'svelte';\nimport { expect, test } from 'vitest';\nimport { multiplier } from './multiplier.svelte.js';\n\ntest('Multiplier', () => {\n\tlet count = $state(0);\n\tlet double = multiplier(() => count, 2);\n\n\texpect(double.value).toEqual(0);\n\n\tcount = 5;\n\n\texpect(double.value).toEqual(10);\n});\n```\n\n```js\n/// file: multiplier.svelte.js\n/**\n * @param {() => number} getCount\n * @param {number} k\n */\nexport function multiplier(getCount, k) {\n\treturn {\n\t\tget value() {\n\t\t\treturn getCount() * k;\n\t\t}\n\t};\n}\n```\n\nIf the code being tested uses effects, you need to wrap the test inside `$effect.root`:\n\n```js\n/// file: logger.svelte.test.js\nimport { flushSync } from 'svelte';\nimport { expect, test } from 'vitest';\nimport { logger } from './logger.svelte.js';\n\ntest('Effect', () => {\n\tconst cleanup = $effect.root(() => {\n\t\tlet count = $state(0);\n\n\t\t// logger uses an $effect to log updates of its input\n\t\tlet log = logger(() => count);\n\n\t\t// effects normally run after a microtask,\n\t\t// use flushSync to execute all pending effects synchronously\n\t\tflushSync();\n\t\texpect(log).toEqual([0]);\n\n\t\tcount = 1;\n\t\tflushSync();\n\n\t\texpect(log).toEqual([0, 1]);\n\t});\n\n\tcleanup();\n});\n```\n\n```js\n/// file: logger.svelte.js\n/**\n * @param {() => any} getValue\n */\nexport function logger(getValue) {\n\t/** @type {any[]} */\n\tlet log = [];\n\n\t$effect(() => {\n\t\tlog.push(getValue());\n\t});\n\n\treturn log;\n}\n```\n\n### Component testing\n\nIt is possible to test your components in isolation, which allows you to render them in a browser (real or simulated), simulate behavior, and make assertions, without spinning up your whole app.\n\n> [!NOTE] Before writing component tests, think about whether you actually need to test the component, or if it's more about the logic _inside_ the component. If so, consider extracting out that logic to test it in isolation, without the overhead of a component.\n\nTo get started, install jsdom (a library that shims DOM APIs):\n\n```sh\nnpm install -D jsdom\n```\n\nThen adjust your `vite.config.js`:\n\n```js\n/// file: vite.config.js\nimport { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n\tplugins: [\n\t\t/* ... */\n\t],\n\ttest: {\n\t\t// If you are testing components client-side, you need to set up a DOM environment.\n\t\t// If not all your files should have this environment, you can use a\n\t\t// `// @vitest-environment jsdom` comment at the top of the test files instead.\n\t\tenvironment: 'jsdom'\n\t},\n\t// Tell Vitest to use the `browser` entry points in `package.json` files, even though it's running in Node\n\tresolve: process.env.VITEST\n\t\t? {\n\t\t\t\tconditions: ['browser']\n\t\t\t}\n\t\t: undefined\n});\n```\n\nAfter that, you can create a test file in which you import the component to test, interact with it programmatically and write expectations about the results:\n\n```js\n/// file: component.test.js\nimport { flushSync, mount, unmount } from 'svelte';\nimport { expect, test } from 'vitest';\nimport Component from './Component.svelte';\n\ntest('Component', () => {\n\t// Instantiate the component using Svelte's `mount` API\n\tconst component = mount(Component, {\n\t\ttarget: document.body, // `document` exists because of jsdom\n\t\tprops: { initial: 0 }\n\t});\n\n\texpect(document.body.innerHTML).toBe('<button>0</button>');\n\n\t// Click the button, then flush the changes so you can synchronously write expectations\n\tdocument.body.querySelector('button').click();\n\tflushSync();\n\n\texpect(document.body.innerHTML).toBe('<button>1</button>');\n\n\t// Remove the component from the DOM\n\tunmount(component);\n});\n```\n\nWhile the process is very straightforward, it is also low level and somewhat brittle, as the precise structure of your component may change frequently. Tools like [@testing-library/svelte](https://testing-library.com/docs/svelte-testing-library/intro/) can help streamline your tests. The above test could be rewritten like this:\n\n```js\n/// file: component.test.js\nimport { render, screen } from '@testing-library/svelte';\nimport userEvent from '@testing-library/user-event';\nimport { expect, test } from 'vitest';\nimport Component from './Component.svelte';\n\ntest('Component', async () => {\n\tconst user = userEvent.setup();\n\trender(Component);\n\n\tconst button = screen.getByRole('button');\n\texpect(button).toHaveTextContent(0);\n\n\tawait user.click(button);\n\texpect(button).toHaveTextContent(1);\n});\n```\n\nWhen writing component tests that involve two-way bindings, context or snippet props, it's best to create a wrapper component for your specific test and interact with that. `@testing-library/svelte` contains some [examples](https://testing-library.com/docs/svelte-testing-library/example).\n\n## Component tests with Storybook\n\n[Storybook](https://storybook.js.org) is a tool for developing and documenting UI components, and it can also be used to test your components. They're run with Vitest's browser mode, which renders your components in a real browser for the most realistic testing environment.\n\nTo get started, first install Storybook ([using Svelte's CLI](/docs/cli/storybook)) in your project via `npx sv add storybook` and choose the recommended configuration that includes testing features. If you're already using Storybook, and for more information on Storybook's testing capabilities, follow the [Storybook testing docs](https://storybook.js.org/docs/writing-tests?renderer=svelte) to get started.\n\nYou can create stories for component variations and test interactions with the [play function](https://storybook.js.org/docs/writing-tests/interaction-testing?renderer=svelte#writing-interaction-tests), which allows you to simulate behavior and make assertions using the Testing Library and Vitest APIs. Here's an example of two stories that can be tested, one that renders an empty LoginForm component and one that simulates a user filling out the form:\n\n```svelte\n/// file: LoginForm.stories.svelte\n<script module>\n\timport { defineMeta } from '@storybook/addon-svelte-csf';\n\timport { expect, fn } from 'storybook/test';\n\n\timport LoginForm from './LoginForm.svelte';\n\n\tconst { Story } = defineMeta({\n\t\tcomponent: LoginForm,\n\t\targs: {\n\t\t\t// Pass a mock function to the `onSubmit` prop\n\t\t\tonSubmit: fn(),\n\t\t}\n\t});\n</script>\n \n<Story name=\"Empty Form\" />\n \n<Story\n\tname=\"Filled Form\"\n\tplay={async ({ args, canvas, userEvent }) => {\n\t\t// Simulate a user filling out the form\n\t\tawait userEvent.type(canvas.getByTestId('email'), 'email@provider.com');\n\t\tawait userEvent.type(canvas.getByTestId('password'), 'a-random-password');\n\t\tawait userEvent.click(canvas.getByRole('button'));\n\n\t\t// Run assertions\n\t\tawait expect(args.onSubmit).toHaveBeenCalledTimes(1);\n\t\tawait expect(canvas.getByText('You’re in!')).toBeInTheDocument();\n\t}}\n/>\n```\n\n## End-to-end tests with Playwright\n\nE2E (short for 'end to end') tests allow you to test your full application through the eyes of the user. This section uses [Playwright](https://playwright.dev/) as an example, but you can also use other solutions like [Cypress](https://www.cypress.io/) or [NightwatchJS](https://nightwatchjs.org/).\n\nYou can use the Svelte CLI to [setup Playwright](/docs/cli/playwright) either during project creation or later on. You can also [set it up with `npm init playwright`](https://playwright.dev/docs/intro). Additionally, you may also want to install an IDE plugin such as [the VS Code extension](https://playwright.dev/docs/getting-started-vscode) to be able to execute tests from inside your IDE.\n\nIf you've run `npm init playwright` or are not using Vite, you may need to adjust the Playwright config to tell Playwright what to do before running the tests — mainly starting your application at a certain port. For example:\n\n```js\n/// file: playwright.config.js\nconst config = {\n\twebServer: {\n\t\tcommand: 'npm run build && npm run preview',\n\t\tport: 4173\n\t},\n\ttestDir: 'tests',\n\ttestMatch: /(.+\\.)?(test|spec)\\.[jt]s/\n};\n\nexport default config;\n```\n\nYou can now start writing tests. These are totally unaware of Svelte as a framework, so you mainly interact with the DOM and write assertions.\n\n```js\n// @errors: 2307 7031\n/// file: tests/hello-world.spec.js\nimport { expect, test } from '@playwright/test';\n\ntest('home page has expected h1', async ({ page }) => {\n\tawait page.goto('/');\n\tawait expect(page.locator('h1')).toBeVisible();\n});\n```\n"
  },
  {
    "path": "documentation/docs/07-misc/03-typescript.md",
    "content": "---\ntitle: TypeScript\n---\n\n<!-- - [basically what we have today](https://svelte.dev/docs/typescript)\n- built-in support, but only for type-only features\n- generics\n- using `Component` and the other helper types\n- using `svelte-check` -->\n\nYou can use TypeScript within Svelte components. IDE extensions like the [Svelte VS Code extension](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode) will help you catch errors right in your editor, and [`svelte-check`](https://www.npmjs.com/package/svelte-check) does the same on the command line, which you can integrate into your CI.\n\n## `<script lang=\"ts\">`\n\nTo use TypeScript inside your Svelte components, add `lang=\"ts\"` to your `script` tags:\n\n```svelte\n<script lang=\"ts\">\n\tlet name: string = 'world';\n\n\tfunction greet(name: string) {\n\t\talert(`Hello, ${name}!`);\n\t}\n</script>\n\n<button onclick={(e: Event) => greet(e.target.innerText)}>\n\t{name as string}\n</button>\n```\n\nDoing so allows you to use TypeScript's _type-only_ features. That is, all features that just disappear when transpiling to JavaScript, such as type annotations or interface declarations. Features that require the TypeScript compiler to output actual code are not supported. This includes:\n\n- using enums\n- using `private`, `protected` or `public` modifiers in constructor functions together with initializers\n- using features that are not yet part of the ECMAScript standard (i.e. not level 4 in the TC39 process) and therefore not implemented yet within Acorn, the parser we use for parsing JavaScript\n\nIf you want to use one of these features, you need to setup up a `script` preprocessor.\n\n## Preprocessor setup\n\nTo use non-type-only TypeScript features within Svelte components, you need to add a preprocessor that will turn TypeScript into JavaScript.\n\n### Using Vite\n\nIf you're using SvelteKit, or Vite _without_ SvelteKit, you can use `vitePreprocess` from `@sveltejs/vite-plugin-svelte` in your config file:\n\n```ts\n/// file: svelte.config.js\n// @noErrors\nimport { vitePreprocess } from '@sveltejs/vite-plugin-svelte';\n\nconst config = {\n\t// Note the additional `{ script: true }`\n\tpreprocess: vitePreprocess({ script: true })\n};\n\nexport default config;\n```\n\n### Using other build tools\n\nIf you're using tools like Rollup (via [rollup-plugin-svelte](https://github.com/sveltejs/rollup-plugin-svelte)) or Webpack (via [svelte-loader](https://github.com/sveltejs/svelte-loader)) instead, install `typescript` and `svelte-preprocess` and add the preprocessor to the plugin config. See the respective plugin READMEs for more info.\n\n> [!NOTE] If you're starting a new project, we recommend using SvelteKit or Vite instead\n\n## tsconfig.json settings\n\nWhen using TypeScript, make sure your `tsconfig.json` is setup correctly.\n\n- Use a [`target`](https://www.typescriptlang.org/tsconfig/#target) of at least `ES2015` so classes are not compiled to functions\n- Set [`verbatimModuleSyntax`](https://www.typescriptlang.org/tsconfig/#verbatimModuleSyntax) to `true` so that imports are left as-is\n- Set [`isolatedModules`](https://www.typescriptlang.org/tsconfig/#isolatedModules) to `true` so that each file is looked at in isolation. TypeScript has a few features which require cross-file analysis and compilation, which the Svelte compiler and tooling like Vite don't do.\n\n## Typing `$props`\n\nType `$props` just like a regular object with certain properties.\n\n```svelte\n<script lang=\"ts\">\n\timport type { Snippet } from 'svelte';\n\n\tinterface Props {\n\t\trequiredProperty: number;\n\t\toptionalProperty?: boolean;\n\t\tsnippetWithStringArgument: Snippet<[string]>;\n\t\teventHandler: (arg: string) => void;\n\t\t[key: string]: unknown;\n\t}\n\n\tlet {\n\t\trequiredProperty,\n\t\toptionalProperty,\n\t\tsnippetWithStringArgument,\n\t\teventHandler,\n\t\t...everythingElse\n\t}: Props = $props();\n</script>\n\n<button onclick={() => eventHandler('clicked button')}>\n\t{@render snippetWithStringArgument('hello')}\n</button>\n```\n\n## Generic `$props`\n\nComponents can declare a generic relationship between their properties. One example is a generic list component that receives a list of items and a callback property that receives an item from the list. To declare that the `items` property and the `select` callback operate on the same types, add the `generics` attribute to the `script` tag:\n\n```svelte\n<script lang=\"ts\" generics=\"Item extends { text: string }\">\n\tinterface Props {\n\t\titems: Item[];\n\t\tselect(item: Item): void;\n\t}\n\n\tlet { items, select }: Props = $props();\n</script>\n\n{#each items as item}\n\t<button onclick={() => select(item)}>\n\t\t{item.text}\n\t</button>\n{/each}\n```\n\nThe content of `generics` is what you would put between the `<...>` tags of a generic function. In other words, you can use multiple generics, `extends` and fallback types.\n\n## Typing wrapper components\n\nIn case you're writing a component that wraps a native element, you may want to expose all the attributes of the underlying element to the user. In that case, use (or extend from) one of the interfaces provided by `svelte/elements`. Here's an example for a `Button` component:\n\n```svelte\n<script lang=\"ts\">\n\timport type { HTMLButtonAttributes } from 'svelte/elements';\n\n\tlet { children, ...rest }: HTMLButtonAttributes = $props();\n</script>\n\n<button {...rest}>\n\t{@render children?.()}\n</button>\n```\n\nNot all elements have a dedicated type definition. For those without one, use `SvelteHTMLElements`:\n\n```svelte\n<script lang=\"ts\">\n\timport type { SvelteHTMLElements } from 'svelte/elements';\n\n\tlet { children, ...rest }: SvelteHTMLElements['div'] = $props();\n</script>\n\n<div {...rest}>\n\t{@render children?.()}\n</div>\n```\n\n## Typing `$state`\n\nYou can type `$state` like any other variable.\n\n```ts\nlet count: number = $state(0);\n```\n\nIf you don't give `$state` an initial value, part of its types will be `undefined`.\n\n```ts\n// @noErrors\n// Error: Type 'number | undefined' is not assignable to type 'number'\nlet count: number = $state();\n```\n\nIf you know that the variable _will_ be defined before you first use it, use an `as` casting. This is especially useful in the context of classes:\n\n```ts\nclass Counter {\n\tcount = $state() as number;\n\tconstructor(initial: number) {\n\t\tthis.count = initial;\n\t}\n}\n```\n\n## The `Component` type\n\nSvelte components are of type `Component`. You can use it and its related types to express a variety of constraints.\n\nUsing it together with dynamic components to restrict what kinds of component can be passed to it:\n\n```svelte\n<script lang=\"ts\">\n\timport type { Component } from 'svelte';\n\n\tinterface Props {\n\t\t// only components that have at most the \"prop\"\n\t\t// property required can be passed\n\t\tDynamicComponent: Component<{ prop: string }>;\n\t}\n\n\tlet { DynamicComponent }: Props = $props();\n</script>\n\n<DynamicComponent prop=\"foo\" />\n```\n\n> [!LEGACY] In Svelte 4, components were of type `SvelteComponent`\n\nTo extract the properties from a component, use `ComponentProps`.\n\n```ts\nimport type { Component, ComponentProps } from 'svelte';\nimport MyComponent from './MyComponent.svelte';\n\nfunction withProps<TComponent extends Component<any>>(\n\tcomponent: TComponent,\n\tprops: ComponentProps<TComponent>\n) {}\n\n// Errors if the second argument is not the correct props expected\n// by the component in the first argument.\nwithProps(MyComponent, { foo: 'bar' });\n```\n\nTo declare that a variable expects the constructor or instance type of a component:\n\n```svelte\n<script lang=\"ts\">\n\timport MyComponent from './MyComponent.svelte';\n\n\tlet componentConstructor: typeof MyComponent = MyComponent;\n\tlet componentInstance: MyComponent;\n</script>\n\n<MyComponent bind:this={componentInstance} />\n```\n\n## Enhancing built-in DOM types\n\nSvelte provides a best effort of all the HTML DOM types that exist. Sometimes you may want to use experimental attributes or custom events coming from an action. In these cases, TypeScript will throw a type error, saying that it does not know these types. If it's a non-experimental standard attribute/event, this may very well be a missing typing from our [HTML typings](https://github.com/sveltejs/svelte/blob/main/packages/svelte/elements.d.ts). In that case, you are welcome to open an issue and/or a PR fixing it.\n\nIn case this is a custom or experimental attribute/event, you can enhance the typings by augmenting the `svelte/elements` module like this:\n\n```ts\n/// file: additional-svelte-typings.d.ts\nimport { HTMLButtonAttributes } from 'svelte/elements';\n\ndeclare module 'svelte/elements' {\n\t// add a new element\n\texport interface SvelteHTMLElements {\n\t\t'custom-button': HTMLButtonAttributes;\n\t}\n\n\t// add a new global attribute that is available on all html elements\n\texport interface HTMLAttributes<T> {\n\t\tglobalattribute?: string;\n\t}\n\n\t// add a new attribute for button elements\n\texport interface HTMLButtonAttributes {\n\t\tveryexperimentalattribute?: string;\n\t}\n}\n\nexport {}; // ensure this is not an ambient module, else types will be overridden instead of augmented\n```\n\nThen make sure that the `d.ts` file is referenced in your `tsconfig.json`. If it reads something like `\"include\": [\"src/**/*\"]` and your `d.ts` file is inside `src`, it should work. You may need to reload for the changes to take effect.\n"
  },
  {
    "path": "documentation/docs/07-misc/04-custom-elements.md",
    "content": "---\ntitle: Custom elements\n---\n\n<!-- - [basically what we have today](https://svelte.dev/docs/custom-elements-api) -->\n\nSvelte components can also be compiled to custom elements (aka web components) using the `customElement: true` compiler option. You should specify a tag name for the component using the `<svelte:options>` [element](svelte-options). Within the custom element you can access the host element via the [`$host`](https://svelte.dev/docs/svelte/$host) rune.\n\n```svelte\n<svelte:options customElement=\"my-element\" />\n\n<script>\n\tlet { name = 'world' } = $props();\n</script>\n\n<h1>Hello {name}!</h1>\n<slot />\n```\n\nYou can leave out the tag name for any of your inner components which you don't want to expose and use them like regular Svelte components. Consumers of the component can still name it afterwards if needed, using the static `element` property which contains the custom element constructor and which is available when the `customElement` compiler option is `true`.\n\n```js\n// @noErrors\nimport MyElement from './MyElement.svelte';\n\ncustomElements.define('my-element', MyElement.element);\n```\n\nOnce a custom element has been defined, it can be used as a regular DOM element:\n\n```js\ndocument.body.innerHTML = `\n\t<my-element>\n\t\t<p>This is some slotted content</p>\n\t</my-element>\n`;\n```\n\nAny [props](basic-markup#Component-props) are exposed as properties of the DOM element (as well as being readable/writable as attributes, where possible).\n\n```js\n// @noErrors\nconst el = document.querySelector('my-element');\n\n// get the current value of the 'name' prop\nconsole.log(el.name);\n\n// set a new value, updating the shadow DOM\nel.name = 'everybody';\n```\n\nNote that you need to list out all properties explicitly, i.e. doing `let props = $props()` without declaring `props` in the [component options](#Component-options) means that Svelte can't know which props to expose as properties on the DOM element.\n\n## Component lifecycle\n\nCustom elements are created from Svelte components using a wrapper approach. This means the inner Svelte component has no knowledge that it is a custom element. The custom element wrapper takes care of handling its lifecycle appropriately.\n\nWhen a custom element is created, the Svelte component it wraps is _not_ created right away. It is only created in the next tick after the `connectedCallback` is invoked. Properties assigned to the custom element before it is inserted into the DOM are temporarily saved and then set on component creation, so their values are not lost. The same does not work for invoking exported functions on the custom element though, they are only available after the element has mounted. If you need to invoke functions before component creation, you can work around it by using the [`extend` option](#Component-options).\n\nWhen a custom element written with Svelte is created or updated, the shadow DOM will reflect the value in the next tick, not immediately. This way updates can be batched, and DOM moves which temporarily (but synchronously) detach the element from the DOM don't lead to unmounting the inner component.\n\nThe inner Svelte component is destroyed in the next tick after the `disconnectedCallback` is invoked.\n\n## Component options\n\nWhen constructing a custom element, you can tailor several aspects by defining `customElement` as an object within `<svelte:options>` since Svelte 4. This object may contain the following properties:\n\n- `tag: string`: an optional `tag` property for the custom element's name. If set, a custom element with this tag name will be defined with the document's `customElements` registry upon importing this component.\n- `shadow`: an optional property to modify shadow root properties. It accepts the following values:\n  - `\"none\"`: No shadow root is created. Note that styles are then no longer encapsulated, and you can't use slots.\n  - `\"open\"`: Shadow root is created with the `mode: \"open\"` option.\n  - [`ShadowRootInit`](https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow#options): You can pass a settings object that will be passed to `attachShadow()` when shadow root is created.\n- `props`: an optional property to modify certain details and behaviors of your component's properties. It offers the following settings:\n  - `attribute: string`: To update a custom element's prop, you have two alternatives: either set the property on the custom element's reference as illustrated above or use an HTML attribute. For the latter, the default attribute name is the lowercase property name. Modify this by assigning `attribute: \"<desired name>\"`.\n  - `reflect: boolean`: By default, updated prop values do not reflect back to the DOM. To enable this behavior, set `reflect: true`.\n  - `type: 'String' | 'Boolean' | 'Number' | 'Array' | 'Object'`: While converting an attribute value to a prop value and reflecting it back, the prop value is assumed to be a `String` by default. This may not always be accurate. For instance, for a number type, define it using `type: \"Number\"`\n    You don't need to list all properties, those not listed will use the default settings.\n- `extend`: an optional property which expects a function as its argument. It is passed the custom element class generated by Svelte and expects you to return a custom element class. This comes in handy if you have very specific requirements to the life cycle of the custom element or want to enhance the class to for example use [ElementInternals](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals#examples) for better HTML form integration.\n\n```svelte\n<svelte:options\n\tcustomElement={{\n\t\ttag: 'custom-element',\n\t\tshadow: {\n\t\t\tmode: import.meta.env.DEV ? 'open' : 'closed',\n\t\t\tclonable: true,\n\t\t\t// ...\n\t\t},\n\t\tprops: {\n\t\t\tname: { reflect: true, type: 'Number', attribute: 'element-index' }\n\t\t},\n\t\textend: (customElementConstructor) => {\n\t\t\t// Extend the class so we can let it participate in HTML forms\n\t\t\treturn class extends customElementConstructor {\n\t\t\t\tstatic formAssociated = true;\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper();\n\t\t\t\t\tthis.attachedInternals = this.attachInternals();\n\t\t\t\t}\n\n\t\t\t\t// Add the function here, not below in the component so that\n\t\t\t\t// it's always available, not just when the inner Svelte component\n\t\t\t\t// is mounted\n\t\t\t\trandomIndex() {\n\t\t\t\t\tthis.elementIndex = Math.random();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}}\n/>\n\n<script>\n\tlet { elementIndex, attachedInternals } = $props();\n\t// ...\n\tfunction check() {\n\t\tattachedInternals.checkValidity();\n\t}\n</script>\n\n...\n```\n\n> [!NOTE] While Typescript is supported in the `extend` function, it is subject to limitations: you need to set `lang=\"ts\"` on one of the scripts AND you can only use [erasable syntax](https://www.typescriptlang.org/tsconfig/#erasableSyntaxOnly) in it. They are not processed by script preprocessors.\n\n## Caveats and limitations\n\nCustom elements can be a useful way to package components for consumption in a non-Svelte app, as they will work with vanilla HTML and JavaScript as well as [most frameworks](https://custom-elements-everywhere.com/). There are, however, some important differences to be aware of:\n\n- Styles are _encapsulated_, rather than merely _scoped_ (unless you set `shadow: \"none\"`). This means that any non-component styles (such as you might have in a `global.css` file) will not apply to the custom element, including styles with the `:global(...)` modifier\n- Instead of being extracted out as a separate .css file, styles are inlined into the component as a JavaScript string\n- Custom elements are not generally suitable for server-side rendering, as the shadow DOM is invisible until JavaScript loads\n- In Svelte, slotted content renders _lazily_. In the DOM, it renders _eagerly_. In other words, it will always be created even if the component's `<slot>` element is inside an `{#if ...}` block. Similarly, including a `<slot>` in an `{#each ...}` block will not cause the slotted content to be rendered multiple times\n- The deprecated `let:` directive has no effect, because custom elements do not have a way to pass data to the parent component that fills the slot\n- Polyfills are required to support older browsers\n- You can use Svelte's context feature between regular Svelte components within a custom element, but you can't use them across custom elements. In other words, you can't use `setContext` on a parent custom element and read that with `getContext` in a child custom element.\n- Don't declare properties or attributes starting with `on`, as their usage will be interpreted as an event listener. In other words, Svelte treats `<custom-element oneworld={true}></custom-element>` as `customElement.addEventListener('eworld', true)` (and not as `customElement.oneworld = true`)\n"
  },
  {
    "path": "documentation/docs/07-misc/06-v4-migration-guide.md",
    "content": "---\ntitle: Svelte 4 migration guide\n---\n\nThis migration guide provides an overview of how to migrate from Svelte version 3 to 4. See the linked PRs for more details about each change. Use the migration script to migrate some of these automatically: `npx svelte-migrate@latest svelte-4`\n\nIf you're a library author, consider whether to only support Svelte 4 or if it's possible to support Svelte 3 too. Since most of the breaking changes don't affect many people, this may be easily possible. Also remember to update the version range in your `peerDependencies`.\n\n## Minimum version requirements\n\n- Upgrade to Node 16 or higher. Earlier versions are no longer supported. ([#8566](https://github.com/sveltejs/svelte/issues/8566))\n- If you are using SvelteKit, upgrade to 1.20.4 or newer ([sveltejs/kit#10172](https://github.com/sveltejs/kit/pull/10172))\n- If you are using Vite without SvelteKit, upgrade to `vite-plugin-svelte` 2.4.1 or newer ([#8516](https://github.com/sveltejs/svelte/issues/8516))\n- If you are using webpack, upgrade to webpack 5 or higher and `svelte-loader` 3.1.8 or higher. Earlier versions are no longer supported. ([#8515](https://github.com/sveltejs/svelte/issues/8515), [198dbcf](https://github.com/sveltejs/svelte/commit/198dbcf))\n- If you are using Rollup, upgrade to `rollup-plugin-svelte` 7.1.5 or higher ([198dbcf](https://github.com/sveltejs/svelte/commit/198dbcf))\n- If you are using TypeScript, upgrade to TypeScript 5 or higher. Lower versions might still work, but no guarantees are made about that. ([#8488](https://github.com/sveltejs/svelte/issues/8488))\n\n## Browser conditions for bundlers\n\nBundlers must now specify the `browser` condition when building a frontend bundle for the browser. SvelteKit and Vite will handle this automatically for you. If you're using any others, you may observe lifecycle callbacks such as `onMount` not get called and you'll need to update the module resolution configuration.\n- For Rollup this is done within the `@rollup/plugin-node-resolve` plugin by setting `browser: true` in its options. See the [`rollup-plugin-svelte`](https://github.com/sveltejs/rollup-plugin-svelte/#usage) documentation for more details\n- For webpack this is done by adding `\"browser\"` to the `conditionNames` array. You may also have to update your `alias` config, if you have set it. See the [`svelte-loader`](https://github.com/sveltejs/svelte-loader#usage) documentation for more details\n\n([#8516](https://github.com/sveltejs/svelte/issues/8516))\n\n## Removal of CJS related output\n\nSvelte no longer supports the CommonJS (CJS) format for compiler output and has also removed the `svelte/register` hook and the CJS runtime version. If you need to stay on the CJS output format, consider using a bundler to convert Svelte's ESM output to CJS in a post-build step. ([#8613](https://github.com/sveltejs/svelte/issues/8613))\n\n## Stricter types for Svelte functions\n\nThere are now stricter types for `createEventDispatcher`, `Action`, `ActionReturn`, and `onMount`:\n\n- `createEventDispatcher` now supports specifying that a payload is optional, required, or non-existent, and the call sites are checked accordingly ([#7224](https://github.com/sveltejs/svelte/issues/7224))\n\n```ts\n// @errors: 2554 2345\nimport { createEventDispatcher } from 'svelte';\n\nconst dispatch = createEventDispatcher<{\n\toptional: number | null;\n\trequired: string;\n\tnoArgument: null;\n}>();\n\n// Svelte version 3:\ndispatch('optional');\ndispatch('required'); // I can still omit the detail argument\ndispatch('noArgument', 'surprise'); // I can still add a detail argument\n\n// Svelte version 4 using TypeScript strict mode:\ndispatch('optional');\ndispatch('required'); // error, missing argument\ndispatch('noArgument', 'surprise'); // error, cannot pass an argument\n```\n\n- `Action` and `ActionReturn` have a default parameter type of `undefined` now, which means you need to type the generic if you want to specify that this action receives a parameter. The migration script will migrate this automatically ([#7442](https://github.com/sveltejs/svelte/pull/7442))\n\n```ts\n// @noErrors\n---const action: Action = (node, params) => { ... } // this is now an error if you use params in any way---\n+++const action: Action<HTMLElement, string> = (node, params) => { ... } // params is of type string+++\n```\n\n- `onMount` now shows a type error if you return a function asynchronously from it, because this is likely a bug in your code where you expect the callback to be called on destroy, which it will only do for synchronously returned functions ([#8136](https://github.com/sveltejs/svelte/issues/8136))\n\n```js\n// @noErrors\n// Example where this change reveals an actual bug\nonMount(\n---\t// someCleanup() not called because function handed to onMount is async\n\tasync () => {\n\t\tconst something = await foo();---\n+++\t// someCleanup() is called because function handed to onMount is sync\n\t() => {\n\t\tfoo().then(something => {...});\n\t\t// ...\n\t\treturn () => someCleanup();\n\t}\n);\n```\n\n## Custom Elements with Svelte\n\nThe creation of custom elements with Svelte has been overhauled and significantly improved. The `tag` option is deprecated in favor of the new `customElement` option:\n\n```svelte\n---<svelte:options tag=\"my-component\" />---\n+++<svelte:options customElement=\"my-component\" />+++\n```\n\nThis change was made to allow [more configurability](custom-elements#Component-options) for advanced use cases. The migration script will adjust your code automatically. The update timing of properties has changed slightly as well. ([#8457](https://github.com/sveltejs/svelte/issues/8457))\n\n## SvelteComponentTyped is deprecated\n\n`SvelteComponentTyped` is deprecated, as `SvelteComponent` now has all its typing capabilities. Replace all instances of `SvelteComponentTyped` with `SvelteComponent`.\n\n```js\n---import { SvelteComponentTyped } from 'svelte';---\n+++import { SvelteComponent } from 'svelte';+++\n\n---export class Foo extends SvelteComponentTyped<{ aProp: string }> {}---\n+++export class Foo extends SvelteComponent<{ aProp: string }> {}+++\n```\n\nIf you have used `SvelteComponent` as the component instance type previously, you may see a somewhat opaque type error now, which is solved by changing `: typeof SvelteComponent` to `: typeof SvelteComponent<any>`.\n\n```svelte\n<script>\n\timport ComponentA from './ComponentA.svelte';\n\timport ComponentB from './ComponentB.svelte';\n\timport { SvelteComponent } from 'svelte';\n\n\tlet component: typeof SvelteComponent+++<any>+++;\n\n\tfunction choseRandomly() {\n\t\tcomponent = Math.random() > 0.5 ? ComponentA : ComponentB;\n\t}\n</script>\n\n<button on:click={choseRandomly}>random</button>\n<svelte:element this={component} />\n```\n\nThe migration script will do both automatically for you. ([#8512](https://github.com/sveltejs/svelte/issues/8512))\n\n## Transitions are local by default\n\nTransitions are now local by default to prevent confusion around page navigations. \"local\" means that a transition will not play if it's within a nested control flow block (`each/if/await/key`) and not the direct parent block but a block above it is created/destroyed. In the following example, the `slide` intro animation will only play when `success` goes from `false` to `true`, but it will _not_ play when `show` goes from `false` to `true`:\n\n```svelte\n{#if show}\n\t...\n\t{#if success}\n\t\t<p in:slide>Success</p>\n\t{/each}\n{/if}\n```\n\nTo make transitions global, add the `|global` modifier — then they will play when _any_ control flow block above is created/destroyed. The migration script will do this automatically for you. ([#6686](https://github.com/sveltejs/svelte/issues/6686))\n\n## Default slot bindings\n\nDefault slot bindings are no longer exposed to named slots and vice versa:\n\n```svelte\n<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:count>\n\t<p>\n\t\tcount in default slot — is available: {count}\n\t</p>\n\t<p slot=\"bar\">\n\t\tcount in bar slot — is not available: {count}\n\t</p>\n</Nested>\n```\n\nThis makes slot bindings more consistent as the behavior is undefined when for example the default slot is from a list and the named slot is not. ([#6049](https://github.com/sveltejs/svelte/issues/6049))\n\n## Preprocessors\n\nThe order in which preprocessors are applied has changed. Now, preprocessors are executed in order, and within one group, the order is markup, script, style.\n\n```js\n// @errors: 2304\nimport { preprocess } from 'svelte/compiler';\n\nconst { code } = await preprocess(\n\tsource,\n\t[\n\t\t{\n\t\t\tmarkup: () => {\n\t\t\t\tconsole.log('markup-1');\n\t\t\t},\n\t\t\tscript: () => {\n\t\t\t\tconsole.log('script-1');\n\t\t\t},\n\t\t\tstyle: () => {\n\t\t\t\tconsole.log('style-1');\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tmarkup: () => {\n\t\t\t\tconsole.log('markup-2');\n\t\t\t},\n\t\t\tscript: () => {\n\t\t\t\tconsole.log('script-2');\n\t\t\t},\n\t\t\tstyle: () => {\n\t\t\t\tconsole.log('style-2');\n\t\t\t}\n\t\t}\n\t],\n\t{\n\t\tfilename: 'App.svelte'\n\t}\n);\n\n// Svelte 3 logs:\n// markup-1\n// markup-2\n// script-1\n// script-2\n// style-1\n// style-2\n\n// Svelte 4 logs:\n// markup-1\n// script-1\n// style-1\n// markup-2\n// script-2\n// style-2\n```\n\nThis could affect you for example if you are using `MDsveX` - in which case you should make sure it comes before any script or style preprocessor.\n\n```js\n// @noErrors\npreprocess: [\n---\tvitePreprocess(),\n\tmdsvex(mdsvexConfig)---\n+++\tmdsvex(mdsvexConfig),\n\tvitePreprocess()+++\n]\n```\n\nEach preprocessor must also have a name. ([#8618](https://github.com/sveltejs/svelte/issues/8618))\n\n## New eslint package\n\n`eslint-plugin-svelte3` is deprecated. It may still work with Svelte 4 but we make no guarantees about that. We recommend switching to our new package [eslint-plugin-svelte](https://github.com/sveltejs/eslint-plugin-svelte). See [this Github post](https://github.com/sveltejs/kit/issues/10242#issuecomment-1610798405) for an instruction how to migrate. Alternatively, you can create a new project using `npm create svelte@latest`, select the eslint (and possibly TypeScript) option and then copy over the related files into your existing project.\n\n## Other breaking changes\n\n- the `inert` attribute is now applied to outroing elements to make them invisible to assistive technology and prevent interaction. ([#8628](https://github.com/sveltejs/svelte/pull/8628))\n- the runtime now uses `classList.toggle(name, boolean)` which may not work in very old browsers. Consider using a [polyfill](https://github.com/eligrey/classList.js) if you need to support these browsers. ([#8629](https://github.com/sveltejs/svelte/issues/8629))\n- the runtime now uses the `CustomEvent` constructor which may not work in very old browsers. Consider using a [polyfill](https://github.com/theftprevention/event-constructor-polyfill/tree/master) if you need to support these browsers. ([#8775](https://github.com/sveltejs/svelte/pull/8775))\n- people implementing their own stores from scratch using the `StartStopNotifier` interface (which is passed to the create function of `writable` etc) from `svelte/store` now need to pass an update function in addition to the set function. This has no effect on people using stores or creating stores using the existing Svelte stores. ([#6750](https://github.com/sveltejs/svelte/issues/6750))\n- `derived` will now throw an error on falsy values instead of stores passed to it. ([#7947](https://github.com/sveltejs/svelte/issues/7947))\n- type definitions for `svelte/internal` were removed to further discourage usage of those internal methods which are not public API. Most of these will likely change for Svelte 5\n- Removal of DOM nodes is now batched which slightly changes its order, which might affect the order of events fired if you're using a `MutationObserver` on these elements ([#8763](https://github.com/sveltejs/svelte/pull/8763))\n- if you enhanced the global typings through the `svelte.JSX` namespace before, you need to migrate this to use the `svelteHTML` namespace. Similarly if you used the `svelte.JSX` namespace to use type definitions from it, you need to migrate those to use the types from `svelte/elements` instead. You can find more information about what to do [here](https://github.com/sveltejs/language-tools/blob/master/docs/preprocessors/typescript.md#im-getting-deprecation-warnings-for-sveltejsx--i-want-to-migrate-to-the-new-typings)\n"
  },
  {
    "path": "documentation/docs/07-misc/07-v5-migration-guide.md",
    "content": "---\ntitle: Svelte 5 migration guide\n---\n\nVersion 5 comes with an overhauled syntax and reactivity system. While it may look different at first, you'll soon notice many similarities. This guide goes over the changes in detail and shows you how to upgrade. Along with it, we also provide information on _why_ we did these changes.\n\nYou don't have to migrate to the new syntax right away — Svelte 5 still supports the old Svelte 4 syntax, and you can mix and match components using the new syntax with components using the old and vice versa. We expect many people to be able to upgrade with only a few lines of code changed initially. There's also a [migration script](#Migration-script) that helps you with many of these steps automatically.\n\n## Reactivity syntax changes\n\nAt the heart of Svelte 5 is the new runes API. Runes are basically compiler instructions that inform Svelte about reactivity. Syntactically, runes are functions starting with a dollar-sign.\n\n### let → $state\n\nIn Svelte 4, a `let` declaration at the top level of a component was implicitly reactive. In Svelte 5, things are more explicit: a variable is reactive when created using the `$state` rune. Let's migrate the counter to runes mode by wrapping the counter in `$state`:\n\n```svelte\n<script>\n\tlet count = +++$state(0)+++;\n</script>\n```\n\nNothing else changes. `count` is still the number itself, and you read and write directly to it, without a wrapper like `.value` or `getCount()`.\n\n> [!DETAILS] Why we did this\n> `let` being implicitly reactive at the top level worked great, but it meant that reactivity was constrained — a `let` declaration anywhere else was not reactive. This forced you to resort to using stores when refactoring code out of the top level of components for reuse. This meant you had to learn an entirely separate reactivity model, and the result often wasn't as nice to work with. Because reactivity is more explicit in Svelte 5, you can keep using the same API outside the top level of components. Head to [the tutorial](/tutorial) to learn more.\n\n### $: → $derived/$effect\n\nIn Svelte 4, a `$:` statement at the top level of a component could be used to declare a derivation, i.e. state that is entirely defined through a computation of other state. In Svelte 5, this is achieved using the `$derived` rune:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\t---$:--- +++const+++ double = +++$derived(count * 2)+++;\n</script>\n```\n\nAs with `$state`, nothing else changes. `double` is still the number itself, and you read it directly, without a wrapper like `.value` or `getDouble()`.\n\nA `$:` statement could also be used to create side effects. In Svelte 5, this is achieved using the `$effect` rune:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\n\t---$:---+++$effect(() =>+++ {\n\t\tif (count > 5) {\n\t\t\talert('Count is too high!');\n\t\t}\n\t}+++);+++\n</script>\n```\n\nNote that [when `$effect` runs is different]($effect#Understanding-dependencies) than when `$:` runs.\n\n> [!DETAILS] Why we did this\n> `$:` was a great shorthand and easy to get started with: you could slap a `$:` in front of most code and it would somehow work. This intuitiveness was also its drawback the more complicated your code became, because it wasn't as easy to reason about. Was the intent of the code to create a derivation, or a side effect? With `$derived` and `$effect`, you have a bit more up-front decision making to do (spoiler alert: 90% of the time you want `$derived`), but future-you and other developers on your team will have an easier time.\n>\n> There were also gotchas that were hard to spot:\n>\n> - `$:` only updated directly before rendering, which meant you could read stale values in-between rerenders\n> - `$:` only ran once per tick, which meant that statements may run less often than you think\n> - `$:` dependencies were determined through static analysis of the dependencies. This worked in most cases, but could break in subtle ways during a refactoring where dependencies would be for example moved into a function and no longer be visible as a result\n> - `$:` statements were also ordered by using static analysis of the dependencies. In some cases there could be ties and the ordering would be wrong as a result, needing manual interventions. Ordering could also break while refactoring code and some dependencies no longer being visible as a result.\n>\n> Lastly, it wasn't TypeScript-friendly (our editor tooling had to jump through some hoops to make it valid for TypeScript), which was a blocker for making Svelte's reactivity model truly universal.\n>\n> `$derived` and `$effect` fix all of these by\n>\n> - always returning the latest value\n> - running as often as needed to be stable\n> - determining the dependencies at runtime, and therefore being immune to refactorings\n> - executing dependencies as needed and therefore being immune to ordering problems\n> - being TypeScript-friendly\n\n### export let → $props\n\nIn Svelte 4, properties of a component were declared using `export let`. Each property was one declaration. In Svelte 5, all properties are declared through the `$props` rune, through destructuring:\n\n```svelte\n<script>\n\t---export let optional = 'unset';---\n\t---export let required;---\n\t+++let { optional = 'unset', required } = $props();+++\n</script>\n```\n\nThere are multiple cases where declaring properties becomes less straightforward than having a few `export let` declarations:\n\n- you want to rename the property, for example because the name is a reserved identifier (e.g. `class`)\n- you don't know which other properties to expect in advance\n- you want to forward every property to another component\n\nAll these cases need special syntax in Svelte 4:\n\n- renaming: `export { klass as class}`\n- other properties: `$$restProps`\n- all properties `$$props`\n\nIn Svelte 5, the `$props` rune makes this straightforward without any additional Svelte-specific syntax:\n\n- renaming: use property renaming `let { class: klass } = $props();`\n- other properties: use spreading `let { foo, bar, ...rest } = $props();`\n- all properties: don't destructure `let props = $props();`\n\n```svelte\n<script>\n\t---let klass = '';---\n\t---export { klass as class};---\n\t+++let { class: klass, ...rest } = $props();+++\n</script>\n<button class={klass} {...---$$restProps---+++rest+++}>click me</button>\n```\n\n> [!DETAILS] Why we did this\n> `export let` was one of the more controversial API decisions, and there was a lot of debate about whether you should think about a property being `export`ed or `import`ed. `$props` doesn't have this trait. It's also in line with the other runes, and the general thinking reduces to \"everything special to reactivity in Svelte is a rune\".\n>\n> There were also a lot of limitations around `export let`, which required additional API, as shown above. `$props` unite this in one syntactical concept that leans heavily on regular JavaScript destructuring syntax.\n\n## Event changes\n\nEvent handlers have been given a facelift in Svelte 5. Whereas in Svelte 4 we use the `on:` directive to attach an event listener to an element, in Svelte 5 they are properties like any other (in other words — remove the colon):\n\n```svelte\n<script>\n\tlet count = $state(0);\n</script>\n\n<button on---:---click={() => count++}>\n\tclicks: {count}\n</button>\n```\n\nSince they're just properties, you can use the normal shorthand syntax...\n\n```svelte\n<script>\n\tlet count = $state(0);\n\n\tfunction onclick() {\n\t\tcount++;\n\t}\n</script>\n\n<button {onclick}>\n\tclicks: {count}\n</button>\n```\n\n...though when using a named event handler function it's usually better to use a more descriptive name.\n\n### Component events\n\nIn Svelte 4, components could emit events by creating a dispatcher with `createEventDispatcher`.\n\nThis function is deprecated in Svelte 5. Instead, components should accept _callback props_ — which means you then pass functions as properties to these components:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Pump from './Pump.svelte';\n\n\tlet size = $state(15);\n\tlet burst = $state(false);\n\n\tfunction reset() {\n\t\tsize = 15;\n\t\tburst = false;\n\t}\n</script>\n\n<Pump\n\t---on:---inflate={(power) => {\n\t\tsize += power---.detail---;\n\t\tif (size > 75) burst = true;\n\t}}\n\t---on:---deflate={(power) => {\n\t\tif (size > 0) size -= power---.detail---;\n\t}}\n/>\n\n{#if burst}\n\t<button onclick={reset}>new balloon</button>\n\t<span class=\"boom\">💥</span>\n{:else}\n\t<span class=\"balloon\" style=\"scale: {0.01 * size}\">\n\t\t🎈\n\t</span>\n{/if}\n```\n\n```svelte\n<!--- file: Pump.svelte --->\n<script>\n\t---import { createEventDispatcher } from 'svelte';---\n\t---const dispatch = createEventDispatcher();---\n\n\t+++let { inflate, deflate } = $props();+++\n\tlet power = $state(5);\n</script>\n\n<button onclick={() => ---dispatch('inflate', power)---+++inflate(power)+++}>\n\tinflate\n</button>\n<button onclick={() => ---dispatch('deflate', power)---+++deflate(power)+++}>\n\tdeflate\n</button>\n<button onclick={() => power--}>-</button>\nPump power: {power}\n<button onclick={() => power++}>+</button>\n```\n\n### Bubbling events\n\nInstead of doing `<button on:click>` to 'forward' the event from the element to the component, the component should accept an `onclick` callback prop:\n\n```svelte\n<script>\n\t+++let { onclick } = $props();+++\n</script>\n\n<button ---on:click--- +++{onclick}+++>\n\tclick me\n</button>\n```\n\nNote that this also means you can 'spread' event handlers onto the element along with other props instead of tediously forwarding each event separately:\n\n```svelte\n<script>\n\tlet props = $props();\n</script>\n\n<button ---{...$$props} on:click on:keydown on:all_the_other_stuff--- +++{...props}+++>\n\tclick me\n</button>\n```\n\n### Event modifiers\n\nIn Svelte 4, you can add event modifiers to handlers:\n\n```svelte\n<button on:click|once|preventDefault={handler}>...</button>\n```\n\nModifiers are specific to `on:` and so do not work with modern event handlers. Adding things like `event.preventDefault()` inside the handler itself is preferable, since all the logic lives in one place rather than being split between handler and modifiers.\n\nSince event handlers are just functions, you can create your own wrappers as necessary:\n\n```svelte\n<script>\n\tfunction once(fn) {\n\t\treturn function (event) {\n\t\t\tif (fn) fn.call(this, event);\n\t\t\tfn = null;\n\t\t};\n\t}\n\n\tfunction preventDefault(fn) {\n\t\treturn function (event) {\n\t\t\tevent.preventDefault();\n\t\t\tfn.call(this, event);\n\t\t};\n\t}\n</script>\n\n<button onclick={once(preventDefault(handler))}>...</button>\n```\n\nThere are three modifiers — `capture`, `passive` and `nonpassive` — that can't be expressed as wrapper functions, since they need to be applied when the event handler is bound rather than when it runs.\n\nFor `capture`, we add the modifier to the event name:\n\n```svelte\n<button onclickcapture={...}>...</button>\n```\n\nChanging the [`passive`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#using_passive_listeners) option of an event handler, meanwhile, is not something to be done lightly. If you have a use case for it — and you probably don't! — then you will need to use an action to apply the event handler yourself.\n\n### Multiple event handlers\n\nIn Svelte 4, this is possible:\n\n```svelte\n<button on:click={one} on:click={two}>...</button>\n```\n\nDuplicate attributes/properties on elements — which now includes event handlers — are not allowed. Instead, do this:\n\n```svelte\n<button\n\tonclick={(e) => {\n\t\tone(e);\n\t\ttwo(e);\n\t}}\n>\n\t...\n</button>\n```\n\nWhen spreading props, local event handlers must go _after_ the spread, or they risk being overwritten:\n\n```svelte\n<button\n\t{...props}\n\tonclick={(e) => {\n\t\tdoStuff(e);\n\t\tprops.onclick?.(e);\n\t}}\n>\n\t...\n</button>\n```\n\n> [!DETAILS] Why we did this\n> `createEventDispatcher` was always a bit boilerplate-y:\n>\n> - import the function\n> - call the function to get a dispatch function\n> - call said dispatch function with a string and possibly a payload\n> - retrieve said payload on the other end through a `.detail` property, because the event itself was always a `CustomEvent`\n>\n> It was always possible to use component callback props, but because you had to listen to DOM events using `on:`, it made sense to use `createEventDispatcher` for component events due to syntactical consistency. Now that we have event attributes (`onclick`), it's the other way around: Callback props are now the more sensible thing to do.\n>\n> The removal of event modifiers is arguably one of the changes that seems like a step back for those who've liked the shorthand syntax of event modifiers. Given that they are not used that frequently, we traded a smaller surface area for more explicitness. Modifiers also were inconsistent, because most of them were only usable on DOM elements.\n>\n> Multiple listeners for the same event are also no longer possible, but it was something of an anti-pattern anyway, since it impedes readability: if there are many attributes, it becomes harder to spot that there are two handlers unless they are right next to each other. It also implies that the two handlers are independent, when in fact something like `event.stopImmediatePropagation()` inside `one` would prevent `two` from being called.\n>\n> By deprecating `createEventDispatcher` and the `on:` directive in favour of callback props and normal element properties, we:\n>\n> - reduce Svelte's learning curve\n> - remove boilerplate, particularly around `createEventDispatcher`\n> - remove the overhead of creating `CustomEvent` objects for events that may not even have listeners\n> - add the ability to spread event handlers\n> - add the ability to know which event handlers were provided to a component\n> - add the ability to express whether a given event handler is required or optional\n> - increase type safety (previously, it was effectively impossible for Svelte to guarantee that a component didn't emit a particular event)\n\n## Snippets instead of slots\n\nIn Svelte 4, content can be passed to components using slots. Svelte 5 replaces them with snippets, which are more powerful and flexible, and so slots are deprecated in Svelte 5.\n\nThey continue to work, however, and you can pass snippets to a component that uses slots:\n\n```svelte\n<!--- file: Child.svelte --->\n<slot />\n<hr />\n<slot name=\"foo\" message=\"hello\" />\n```\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child>\n\tdefault child content\n\n\t{#snippet foo({ message })}\n\t\tmessage from child: {message}\n\t{/snippet}\n</Child>\n```\n\n(The reverse is not true — you cannot pass slotted content to a component that uses [`{@render ...}`](/docs/svelte/@render) tags.)\n\nWhen using custom elements, you should still use `<slot />` like before. In a future version, when Svelte removes its internal version of slots, it will leave those slots as-is, i.e. output a regular DOM tag instead of transforming it.\n\n### Default content\n\nIn Svelte 4, the easiest way to pass a piece of UI to the child was using a `<slot />`. In Svelte 5, this is done using the `children` prop instead, which is then shown with `{@render children()}`:\n\n```svelte\n<script>\n\t+++let { children } = $props();+++\n</script>\n\n---<slot />---\n+++{@render children?.()}+++\n```\n\n### Multiple content placeholders\n\nIf you wanted multiple UI placeholders, you had to use named slots. In Svelte 5, use props instead, name them however you like and `{@render ...}` them:\n\n```svelte\n<script>\n\t+++let { header, main, footer } = $props();+++\n</script>\n\n<header>\n\t---<slot name=\"header\" />---\n\t+++{@render header()}+++\n</header>\n\n<main>\n\t---<slot name=\"main\" />---\n\t+++{@render main()}+++\n</main>\n\n<footer>\n\t---<slot name=\"footer\" />---\n\t+++{@render footer()}+++\n</footer>\n```\n\n### Passing data back up\n\nIn Svelte 4, you would pass data to a `<slot />` and then retrieve it with `let:` in the parent component. In Svelte 5, snippets take on that responsibility:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport List from './List.svelte';\n</script>\n\n<List items={['one', 'two', 'three']} ---let:item--->\n\t+++{#snippet item(text)}+++\n\t\t<span>{text}</span>\n\t+++{/snippet}+++\n\t---<span slot=\"empty\">No items yet</span>---\n\t+++{#snippet empty()}\n\t\t<span>No items yet</span>\n\t{/snippet}+++\n</List>\n```\n\n```svelte\n<!--- file: List.svelte --->\n<script>\n\tlet { items, +++item, empty+++ } = $props();\n</script>\n\n{#if items.length}\n\t<ul>\n\t\t{#each items as entry}\n\t\t\t<li>\n\t\t\t\t---<slot item={entry} />---\n\t\t\t\t+++{@render item(entry)}+++\n\t\t\t</li>\n\t\t{/each}\n\t</ul>\n{:else}\n\t---<slot name=\"empty\" />---\n\t+++{@render empty?.()}+++\n{/if}\n```\n\n> [!DETAILS] Why we did this\n> Slots were easy to get started with, but the more advanced the use case became, the more involved and confusing the syntax became:\n>\n> - the `let:` syntax was confusing to many people as it _creates_ a variable whereas all other `:` directives _receive_ a variable\n> - the scope of a variable declared with `let:` wasn't clear. In the example above, it may look like you can use the `item` slot prop in the `empty` slot, but that's not true\n> - named slots had to be applied to an element using the `slot` attribute. Sometimes you didn't want to create an element, so we had to add the `<svelte:fragment>` API\n> - named slots could also be applied to a component, which changed the semantics of where `let:` directives are available (even today us maintainers often don't know which way around it works)\n>\n> Snippets solve all of these problems by being much more readable and clear. At the same time they're more powerful as they allow you to define sections of UI that you can render _anywhere_, not just passing them as props to a component.\n\n## Migration script\n\nBy now you should have a pretty good understanding of the before/after and how the old syntax relates to the new syntax. It probably also became clear that a lot of these migrations are rather technical and repetitive — something you don't want to do by hand.\n\nWe thought the same, which is why we provide a migration script to do most of the migration automatically. You can upgrade your project by using `npx sv migrate svelte-5`. This will do the following things:\n\n- bump core dependencies in your `package.json`\n- migrate to runes (`let` → `$state` etc)\n- migrate to event attributes for DOM elements (`on:click` → `onclick`)\n- migrate slot creations to render tags (`<slot />` → `{@render children()}`)\n- migrate slot usages to snippets (`<div slot=\"x\">...</div>` → `{#snippet x()}<div>...</div>{/snippet}`)\n- migrate obvious component creations (`new Component(...)` → `mount(Component, ...)`)\n\nYou can also migrate a single component in VS Code through the `Migrate Component to Svelte 5 Syntax` command, or in our Playground through the `Migrate` button.\n\nNot everything can be migrated automatically, and some migrations need manual cleanup afterwards. The following sections describe these in more detail.\n\n### run\n\nYou may see that the migration script converts some of your `$:` statements to a `run` function which is imported from `svelte/legacy`. This happens if the migration script couldn't reliably migrate the statement to a `$derived` and concluded this is a side effect instead. In some cases this may be wrong and it's best to change this to use a `$derived` instead. In other cases it may be right, but since `$:` statements also ran on the server but `$effect` does not, it isn't safe to transform it as such. Instead, `run` is used as a stopgap solution. `run` mimics most of the characteristics of `$:`, in that it runs on the server once, and runs as `$effect.pre` on the client (`$effect.pre` runs _before_ changes are applied to the DOM; most likely you want to use `$effect` instead).\n\n```svelte\n<script>\n\t---import { run } from 'svelte/legacy';---\n\t---run(() => {---\n\t+++$effect(() => {+++\n\t\t// some side effect code\n\t})\n</script>\n```\n\n### Event modifiers\n\nEvent modifiers are not applicable to event attributes (e.g. you can't do `onclick|preventDefault={...}`). Therefore, when migrating event directives to event attributes, we need a function-replacement for these modifiers. These are imported from `svelte/legacy`, and should be migrated away from in favor of e.g. just using `event.preventDefault()`.\n\n```svelte\n<script>\n\t---import { preventDefault } from 'svelte/legacy';---\n</script>\n\n<button\n\tonclick={---preventDefault---((event) => {\n\t\t+++event.preventDefault();+++\n\t\t// ...\n\t})}\n>\n\tclick me\n</button>\n```\n\n### Things that are not automigrated\n\nThe migration script does not convert `createEventDispatcher`. You need to adjust those parts manually. It doesn't do it because it's too risky because it could result in breakage for users of the component, which the migration script cannot find out.\n\nThe migration script does not convert `beforeUpdate/afterUpdate`. It doesn't do it because it's impossible to determine the actual intent of the code. As a rule of thumb you can often go with a combination of `$effect.pre` (runs at the same time as `beforeUpdate` did) and `tick` (imported from `svelte`, allows you to wait until changes are applied to the DOM and then do some work).\n\n## Components are no longer classes\n\nIn Svelte 3 and 4, components are classes. In Svelte 5 they are functions and should be instantiated differently. If you need to manually instantiate components, you should use `mount` or `hydrate` (imported from `svelte`) instead. If you see this error using SvelteKit, try updating to the latest version of SvelteKit first, which adds support for Svelte 5. If you're using Svelte without SvelteKit, you'll likely have a `main.js` file (or similar) which you need to adjust:\n\n```js\n+++import { mount } from 'svelte';+++\nimport App from './App.svelte'\n\n---const app = new App({ target: document.getElementById(\"app\") });---\n+++const app = mount(App, { target: document.getElementById(\"app\") });+++\n\nexport default app;\n```\n\n`mount` and `hydrate` have the exact same API. The difference is that `hydrate` will pick up the Svelte's server-rendered HTML inside its target and hydrate it. Both return an object with the exports of the component and potentially property accessors (if compiled with `accessors: true`). They do not come with the `$on`, `$set` and `$destroy` methods you may know from the class component API. These are its replacements:\n\nFor `$on`, instead of listening to events, pass them via the `events` property on the options argument.\n\n```js\n+++import { mount } from 'svelte';+++\nimport App from './App.svelte'\n\n---const app = new App({ target: document.getElementById(\"app\") });\napp.$on('event', callback);---\n+++const app = mount(App, { target: document.getElementById(\"app\"), events: { event: callback } });+++\n```\n\n> [!NOTE] Note that using `events` is discouraged — instead, [use callbacks](#Event-changes)\n\nFor `$set`, use `$state` instead to create a reactive property object and manipulate it. If you're doing this inside a `.js` or `.ts` file, adjust the ending to include `.svelte`, i.e. `.svelte.js` or `.svelte.ts`.\n\n```js\n+++import { mount } from 'svelte';+++\nimport App from './App.svelte'\n\n---const app = new App({ target: document.getElementById(\"app\"), props: { foo: 'bar' } });\napp.$set({ foo: 'baz' });---\n+++const props = $state({ foo: 'bar' });\nconst app = mount(App, { target: document.getElementById(\"app\"), props });\nprops.foo = 'baz';+++\n```\n\nFor `$destroy`, use `unmount` instead.\n\n```js\n+++import { mount, unmount } from 'svelte';+++\nimport App from './App.svelte'\n\n---const app = new App({ target: document.getElementById(\"app\"), props: { foo: 'bar' } });\napp.$destroy();---\n+++const app = mount(App, { target: document.getElementById(\"app\") });\nunmount(app);+++\n```\n\nAs a stop-gap-solution, you can also use `createClassComponent` or `asClassComponent` (imported from `svelte/legacy`) instead to keep the same API known from Svelte 4 after instantiating.\n\n```js\n+++import { createClassComponent } from 'svelte/legacy';+++\nimport App from './App.svelte'\n\n---const app = new App({ target: document.getElementById(\"app\") });---\n+++const app = createClassComponent({ component: App, target: document.getElementById(\"app\") });+++\n\nexport default app;\n```\n\nIf this component is not under your control, you can use the `compatibility.componentApi` compiler option for auto-applied backwards compatibility, which means code using `new Component(...)` keeps working without adjustments (note that this adds a bit of overhead to each component). This will also add `$set` and `$on` methods for all component instances you get through `bind:this`.\n\n```js\n/// svelte.config.js\nexport default {\n\tcompilerOptions: {\n\t\tcompatibility: {\n\t\t\tcomponentApi: 4\n\t\t}\n\t}\n};\n```\n\nNote that `mount` and `hydrate` are _not_ synchronous, so things like `onMount` won't have been called by the time the function returns and the pending block of promises will not have been rendered yet (because `#await` waits a microtask to wait for a potentially immediately-resolved promise). If you need that guarantee, call `flushSync` (import from `'svelte'`) after calling `mount/hydrate`.\n\n### Server API changes\n\nSimilarly, components no longer have a `render` method when compiled for server-side rendering. Instead, pass the function to `render` from `svelte/server`:\n\n```js\n+++import { render } from 'svelte/server';+++\nimport App from './App.svelte';\n\n---const { html, head } = App.render({ props: { message: 'hello' }});---\n+++const { html, head } = render(App, { props: { message: 'hello' }});+++\n```\n\nIn Svelte 4, rendering a component to a string also returned the CSS of all components. In Svelte 5, this is no longer the case by default because most of the time you're using a tooling chain that takes care of it in other ways (like SvelteKit). If you need CSS to be returned from `render`, you can set the `css` compiler option to `'injected'` and it will add `<style>` elements to the `head`.\n\n### Component typing changes\n\nThe change from classes towards functions is also reflected in the typings: `SvelteComponent`, the base class from Svelte 4, is deprecated in favour of the new `Component` type which defines the function shape of a Svelte component. To manually define a component shape in a `d.ts` file:\n\n```ts\nimport type { Component } from 'svelte';\nexport declare const MyComponent: Component<{\n\tfoo: string;\n}>;\n```\n\nTo declare that a component of a certain type is required:\n\n```js\nimport { ComponentA, ComponentB } from 'component-library';\n---import type { SvelteComponent } from 'svelte';---\n+++import type { Component } from 'svelte';+++\n\n---let C: typeof SvelteComponent<{ foo: string }> = $state(---\n+++let C: Component<{ foo: string }> = $state(+++\n\tMath.random() ? ComponentA : ComponentB\n);\n```\n\nThe two utility types `ComponentEvents` and `ComponentType` are also deprecated. `ComponentEvents` is obsolete because events are defined as callback props now, and `ComponentType` is obsolete because the new `Component` type is the component type already (i.e. `ComponentType<SvelteComponent<{ prop: string }>>` is equivalent to `Component<{ prop: string }>`).\n\n### bind:this changes\n\nBecause components are no longer classes, using `bind:this` no longer returns a class instance with `$set`, `$on` and `$destroy` methods on it. It only returns the instance exports (`export function/const`) and, if you're using the `accessors` option, a getter/setter-pair for each property.\n\n## `<svelte:component>` is no longer necessary\n\nIn Svelte 4, components are _static_ — if you render `<Thing>`, and the value of `Thing` changes, [nothing happens](/playground/7f1fa24f0ab44c1089dcbb03568f8dfa?version=4.2.18). To make it dynamic you had to use `<svelte:component>`.\n\nThis is no longer true in Svelte 5:\n\n```svelte\n<script>\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\tlet Thing = $state();\n</script>\n\n<select bind:value={Thing}>\n\t<option value={A}>A</option>\n\t<option value={B}>B</option>\n</select>\n\n<!-- these are equivalent -->\n<Thing />\n<svelte:component this={Thing} />\n```\nWhile migrating, keep in mind that your component's name should be capitalized (`Thing`) to distinguish it from elements, unless using dot notation.\n\n### Dot notation indicates a component\n\nIn Svelte 4, `<foo.bar>` would create an element with a tag name of `\"foo.bar\"`. In Svelte 5, `foo.bar` is treated as a component instead. This is particularly useful inside `each` blocks:\n\n```svelte\n{#each items as item}\n\t<item.component {...item.props} />\n{/each}\n```\n\n## Whitespace handling changed\n\nPreviously, Svelte employed a very complicated algorithm to determine if whitespace should be kept or not. Svelte 5 simplifies this which makes it easier to reason about as a developer. The rules are:\n\n- Whitespace between nodes is collapsed to one whitespace\n- Whitespace at the start and end of a tag is removed completely\n\n  This new behavior is slightly different from native HTML rendering. For example, `<p>foo<span> - bar</span></p>` will render:\n\n  - `foo - bar` in HTML\n  - `foo- bar` in Svelte 5\n\n  You can reintroduce the missing space by moving it outside the `<span>`...\n\n  ```svelte\n  <p>foo <span>- bar</span></p>\n  ```\n\n  ...or, if necessary for styling reasons, including it as an expression:\n\n  ```svelte\n  <p>foo<span>{' '}- bar</span></p>\n  ```\n\n- Certain exceptions apply such as keeping whitespace inside `pre` tags\n\nAs before, you can disable whitespace trimming by setting the `preserveWhitespace` option in your compiler settings or on a per-component basis in `<svelte:options>`.\n\n## Modern browser required\n\nSvelte 5 requires a modern browser (in other words, not Internet Explorer) for various reasons:\n\n- it uses [`Proxies`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)\n- elements with `clientWidth`/`clientHeight`/`offsetWidth`/`offsetHeight` bindings use a [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver) rather than a convoluted `<iframe>` hack\n- `<input type=\"range\" bind:value={...} />` only uses an `input` event listener, rather than also listening for `change` events as a fallback\n\nThe `legacy` compiler option, which generated bulkier but IE-friendly code, no longer exists.\n\n## Changes to compiler options\n\n- The `false`/`true` (already deprecated previously) and the `\"none\"` values were removed as valid values from the `css` option\n- The `legacy` option was repurposed\n- The `hydratable` option has been removed. Svelte components are always hydratable now\n- The `enableSourcemap` option has been removed. Source maps are always generated now, tooling can choose to ignore it\n- The `tag` option was removed. Use `<svelte:options customElement=\"tag-name\" />` inside the component instead\n- The `loopGuardTimeout`, `format`, `sveltePath`, `errorMode` and `varsReport` options were removed\n\n## The `children` prop is reserved\n\nContent inside component tags becomes a snippet prop called `children`. You cannot have a separate prop by that name.\n\n## Breaking changes in runes mode\n\nSome breaking changes only apply once your component is in runes mode.\n\n### Bindings to component exports are not allowed\n\nExports from runes mode components cannot be bound to directly. For example, having `export const foo = ...` in component `A` and then doing `<A bind:foo />` causes an error. Use `bind:this` instead — `<A bind:this={a} />` — and access the export as `a.foo`. This change makes things easier to reason about, as it enforces a clear separation between props and exports.\n\n### Bindings need to be explicitly defined using `$bindable()`\n\nIn Svelte 4 syntax, every property (declared via `export let`) is bindable, meaning you can `bind:` to it. In runes mode, properties are not bindable by default: you need to denote bindable props with the `$bindable` rune.\n\nIf a bindable property has a default value (e.g. `let { foo = $bindable('bar') } = $props();`), you need to pass a non-`undefined` value to that property if you're binding to it. This prevents ambiguous behavior — the parent and child must have the same value — and results in better performance (in Svelte 4, the default value was reflected back to the parent, resulting in wasteful additional render cycles).\n\n### `accessors` option is ignored\n\nSetting the `accessors` option to `true` makes properties of a component directly accessible on the component instance.\n\n```svelte\n<svelte:options accessors={true} />\n\n<script>\n\t// available via componentInstance.name\n\texport let name;\n</script>\n```\n\nIn runes mode, properties are never accessible on the component instance. You can use component exports instead if you need to expose them.\n\n```svelte\n<script>\n\tlet { name } = $props();\n\t// available via componentInstance.getName()\n\texport const getName = () => name;\n</script>\n```\n\nAlternatively, if the place where they are instantiated is under your control, you can also make use of runes inside `.js/.ts` files by adjusting their ending to include `.svelte`, i.e. `.svelte.js` or `.svelte.ts`, and then use `$state`:\n\n```js\n+++import { mount } from 'svelte';+++\nimport App from './App.svelte'\n\n---const app = new App({ target: document.getElementById(\"app\"), props: { foo: 'bar' } });\napp.foo = 'baz'---\n+++const props = $state({ foo: 'bar' });\nconst app = mount(App, { target: document.getElementById(\"app\"), props });\nprops.foo = 'baz';+++\n```\n\n### `immutable` option is ignored\n\nSetting the `immutable` option has no effect in runes mode. This concept is replaced by how `$state` and its variations work.\n\n### Classes are no longer \"auto-reactive\"\n\nIn Svelte 4, doing the following triggered reactivity:\n\n```svelte\n<script>\n\tlet foo = new Foo();\n</script>\n\n<button on:click={() => (foo.value = 1)}>{foo.value}</button\n>\n```\n\nThis is because the Svelte compiler treated the assignment to `foo.value` as an instruction to update anything that referenced `foo`. In Svelte 5, reactivity is determined at runtime rather than compile time, so you should define `value` as a reactive `$state` field on the `Foo` class. Wrapping `new Foo()` with `$state(...)` will have no effect — only vanilla objects and arrays are made deeply reactive.\n\n### Touch events are passive\n\nWhen using `ontouchstart` and `ontouchmove` event attributes, the handlers are [passive](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#using_passive_listeners) to align with browser defaults. This greatly improves responsiveness by allowing the browser to scroll the document immediately, rather than waiting to see if the event handler calls `event.preventDefault()`.\n\nIn the very rare cases that you need to prevent these event defaults, you should use [`on`](/docs/svelte/svelte-events#on) instead (for example inside an action).\n\n### Attribute/prop syntax is stricter\n\nIn Svelte 4, complex attribute values needn't be quoted:\n\n<!-- prettier-ignore -->\n```svelte\n<Component prop=this{is}valid />\n```\n\nThis is a footgun. In runes mode, if you want to concatenate stuff you must wrap the value in quotes:\n\n```svelte\n<Component prop=\"this{is}valid\" />\n```\n\nNote that Svelte 5 will also warn if you have a single expression wrapped in quotes, like `answer=\"{42}\"` — in Svelte 6, that will cause the value to be converted to a string, rather than passed as a number.\n\n### HTML structure is stricter\n\nIn Svelte 4, you were allowed to write HTML code that would be repaired by the browser when server-side rendering it. For example you could write this...\n\n```svelte\n<table>\n\t<tr>\n\t\t<td>hi</td>\n\t</tr>\n</table>\n```\n\n... and the browser would auto-insert a `<tbody>` element:\n\n```svelte\n<table>\n\t<tbody>\n\t\t<tr>\n\t\t\t<td>hi</td>\n\t\t</tr>\n\t</tbody>\n</table>\n```\n\nSvelte 5 is more strict about the HTML structure and will throw a compiler error in cases where the browser would repair the DOM.\n\n## Other breaking changes\n\n### Stricter `@const` assignment validation\n\nAssignments to destructured parts of a `@const` declaration are no longer allowed. It was an oversight that this was ever allowed.\n\n### :is(...), :has(...), and :where(...) are scoped\n\nPreviously, Svelte did not analyse selectors inside `:is(...)`, `:has(...)`, and `:where(...)`, effectively treating them as global. Svelte 5 analyses them in the context of the current component. Some selectors may now therefore be treated as unused if they were relying on this treatment. To fix this, use `:global(...)` inside the `:is(...)/:has(...)/:where(...)` selectors.\n\nWhen using Tailwind's `@apply` directive, add a `:global` selector to preserve rules that use Tailwind-generated `:is(...)` selectors:\n\n<!-- prettier-ignore -->\n```css\nmain +++:global+++ {\n\t@apply bg-blue-100 dark:bg-blue-900;\n}\n```\n\n### CSS hash position no longer deterministic\n\nPreviously Svelte would always insert the CSS hash last. This is no longer guaranteed in Svelte 5. This is only breaking if you [have very weird css selectors](https://stackoverflow.com/questions/15670631/does-the-order-of-classes-listed-on-an-item-affect-the-css).\n\n### Scoped CSS uses :where(...)\n\nTo avoid issues caused by unpredictable specificity changes, scoped CSS selectors now use `:where(.svelte-xyz123)` selector modifiers alongside `.svelte-xyz123` (where `xyz123` is, as previously, a hash of the `<style>` contents). You can read more detail [here](https://github.com/sveltejs/svelte/pull/10443).\n\nIn the event that you need to support ancient browsers that don't implement `:where`, you can manually alter the emitted CSS, at the cost of unpredictable specificity changes:\n\n```js\n// @errors: 2552\ncss = css.replace(/:where\\((.+?)\\)/, '$1');\n```\n\n### Error/warning codes have been renamed\n\nError and warning codes have been renamed. Previously they used dashes to separate the words, they now use underscores (e.g. foo-bar becomes foo_bar). Additionally, a handful of codes have been reworded slightly.\n\n### Reduced number of namespaces\n\nThe number of valid namespaces you can pass to the compiler option `namespace` has been reduced to `html` (the default), `mathml` and `svg`.\n\nThe `foreign` namespace was only useful for Svelte Native, which we're planning to support differently in a 5.x minor.\n\n### beforeUpdate/afterUpdate changes\n\n`beforeUpdate` no longer runs twice on initial render if it modifies a variable referenced in the template.\n\n`afterUpdate` callbacks in a parent component will now run after `afterUpdate` callbacks in any child components.\n\n`beforeUpdate/afterUpdate` no longer run when the component contains a `<slot>` and its content is updated.\n\nBoth functions are disallowed in runes mode — use `$effect.pre(...)` and `$effect(...)` instead.\n\n### `contenteditable` behavior change\n\nIf you have a `contenteditable` node with a corresponding binding _and_ a reactive value inside it (example: `<div contenteditable=true bind:textContent>count is {count}</div>`), then the value inside the contenteditable will not be updated by updates to `count` because the binding takes full control over the content immediately and it should only be updated through it.\n\n### `oneventname` attributes no longer accept string values\n\nIn Svelte 4, it was possible to specify event attributes on HTML elements as a string:\n\n```svelte\n<button onclick=\"alert('hello')\">...</button>\n```\n\nThis is not recommended, and is no longer possible in Svelte 5, where properties like `onclick` replace `on:click` as the mechanism for adding event handlers.\n\n### `null` and `undefined` become the empty string\n\nIn Svelte 4, `null` and `undefined` were printed as the corresponding string. In 99 out of 100 cases you want this to become the empty string instead, which is also what most other frameworks out there do. Therefore, in Svelte 5, `null` and `undefined` become the empty string.\n\n### `bind:files` values can only be `null`, `undefined` or `FileList`\n\n`bind:files` is now a two-way binding. As such, when setting a value, it needs to be either falsy (`null` or `undefined`) or of type `FileList`.\n\n### Bindings now react to form resets\n\nPreviously, bindings did not take into account `reset` event of forms, and therefore values could get out of sync with the DOM. Svelte 5 fixes this by placing a `reset` listener on the document and invoking bindings where necessary.\n\n### `walk` no longer exported\n\n`svelte/compiler` reexported `walk` from `estree-walker` for convenience. This is no longer true in Svelte 5, import it directly from that package instead in case you need it.\n\n### Content inside `svelte:options` is forbidden\n\nIn Svelte 4 you could have content inside a `<svelte:options />` tag. It was ignored, but you could write something in there. In Svelte 5, content inside that tag is a compiler error.\n\n### `<slot>` elements in declarative shadow roots are preserved\n\nSvelte 4 replaced the `<slot />` tag in all places with its own version of slots. Svelte 5 preserves them in the case they are a child of a `<template shadowrootmode=\"...\">` element.\n\n### `<svelte:element>` tag must be an expression\n\nIn Svelte 4, `<svelte:element this=\"div\">` is valid code. This makes little sense — you should just do `<div>`. In the vanishingly rare case that you _do_ need to use a literal value for some reason, you can do this:\n\n```svelte\n<svelte:element this=+++{+++\"div\"+++}+++>\n```\n\nNote that whereas Svelte 4 would treat `<svelte:element this=\"input\">` (for example) identically to `<input>` for the purposes of determining which `bind:` directives could be applied, Svelte 5 does not.\n\n### `mount` plays transitions by default\n\nThe `mount` function used to render a component tree plays transitions by default unless the `intro` option is set to `false`. This is different from legacy class components which, when manually instantiated, didn't play transitions by default.\n\n### `<img src={...}>` and `{@html ...}` hydration mismatches are not repaired\n\nIn Svelte 4, if the value of a `src` attribute or `{@html ...}` tag differ between server and client (a.k.a. a hydration mismatch), the mismatch is repaired. This is very costly: setting a `src` attribute (even if it evaluates to the same thing) causes images and iframes to be reloaded, and reinserting a large blob of HTML is slow.\n\nSince these mismatches are extremely rare, Svelte 5 assumes that the values are unchanged, but in development will warn you if they are not. To force an update you can do something like this:\n\n```svelte\n<script>\n\tlet { markup, src } = $props();\n\n\tif (typeof window !== 'undefined') {\n\t\t// stash the values...\n\t\tconst initial = { markup, src };\n\n\t\t// unset them...\n\t\tmarkup = src = undefined;\n\n\t\t$effect(() => {\n\t\t\t// ...and reset after we've mounted\n\t\t\tmarkup = initial.markup;\n\t\t\tsrc = initial.src;\n\t\t});\n\t}\n</script>\n\n{@html markup}\n<img {src} />\n```\n\n### Hydration works differently\n\nSvelte 5 makes use of comments during server-side rendering which are used for more robust and efficient hydration on the client. You therefore should not remove comments from your HTML output if you intend to hydrate it, and if you manually authored HTML to be hydrated by a Svelte component, you need to adjust that HTML to include said comments at the correct positions.\n\n### `onevent` attributes are delegated\n\nEvent attributes replace event directives: Instead of `on:click={handler}` you write `onclick={handler}`. For backwards compatibility the `on:event` syntax is still supported and behaves the same as in Svelte 4. Some of the `onevent` attributes however are delegated, which means you need to take care to not stop event propagation on those manually, as they then might never reach the listener for this event type at the root.\n\n### `--style-props` uses a different element\n\nSvelte 5 uses an extra `<svelte-css-wrapper>` element instead of a `<div>` to wrap the component when using CSS custom properties.\n\n<!-- TODO in final docs, add link to corresponding section for more details -->\n"
  },
  {
    "path": "documentation/docs/07-misc/99-faq.md",
    "content": "---\ntitle: Frequently asked questions\n---\n\n## I'm new to Svelte. Where should I start?\n\nWe think the best way to get started is playing through the interactive [tutorial](/tutorial). Each step there is mainly focused on one specific aspect and is easy to follow. You'll be editing and running real Svelte components right in your browser.\n\nFive to ten minutes should be enough to get you up and running. An hour and a half should get you through the entire tutorial.\n\n## Where can I get support?\n\nIf your question is about certain syntax, the [reference docs](/docs/svelte) are a good place to start.\n\nStack Overflow is a popular forum to ask code-level questions or if you’re stuck with a specific error. Read through the existing questions tagged with [Svelte](https://stackoverflow.com/questions/tagged/svelte+or+svelte-3) or [ask your own](https://stackoverflow.com/questions/ask?tags=svelte)!\n\nThere are online forums and chats which are a great place for discussion about best practices, application architecture or just to get to know fellow Svelte users. [Our Discord](/chat) or [the Reddit channel](https://www.reddit.com/r/sveltejs/) are examples of that. If you have an answerable code-level question, Stack Overflow is usually a better fit.\n\n## Are there any third-party resources?\n\nSvelte Society maintains a [list of books and videos](https://sveltesociety.dev/collection/a-list-of-books-and-courses-ac01dd10363184fa).\n\n## How can I get VS Code to syntax-highlight my .svelte files?\n\nThere is an [official VS Code extension for Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode).\n\n## Is there a tool to automatically format my .svelte files?\n\nYou can use prettier with the [prettier-plugin-svelte](https://www.npmjs.com/package/prettier-plugin-svelte) plugin.\n\n## How do I document my components?\n\nIn editors which use the Svelte Language Server you can document Components, functions and exports using specially formatted comments.\n\n````svelte\n<script>\n\t/** What should we call the user? */\n\texport let name = 'world';\n</script>\n\n<!--\n@component\nHere's some documentation for this component.\nIt will show up on hover.\n\n- You can use markdown here.\n- You can also use code blocks here.\n- Usage:\n  ```svelte\n  <main name=\"Arethra\">\n  ```\n-->\n<main>\n\t<h1>\n\t\tHello, {name}\n\t</h1>\n</main>\n````\n\nNote: The `@component` is necessary in the HTML comment which describes your component.\n\n## Does Svelte scale?\n\nThere will be a blog post about this eventually, but in the meantime, check out [this issue](https://github.com/sveltejs/svelte/issues/2546).\n\n## Is there a UI component library?\n\nThere are several [UI component libraries](/packages#component-libraries) as well as standalone components listed on [the packages page](/packages).\n\n## How do I test Svelte apps?\n\nHow your application is structured and where logic is defined will determine the best way to ensure it is properly tested. It is important to note that not all logic belongs within a component — this includes concerns such as data transformation, cross-component state management, and logging, among others. Remember that the Svelte library has its own test suite, so you do not need to write tests to validate implementation details provided by Svelte.\n\nA Svelte application will typically have three different types of tests: Unit, Component, and End-to-End (E2E).\n\n_Unit Tests_: Focus on testing business logic in isolation. Often this is validating individual functions and edge cases. By minimizing the surface area of these tests they can be kept lean and fast, and by extracting as much logic as possible from your Svelte components more of your application can be covered using them. When creating a new SvelteKit project, you will be asked whether you would like to setup [Vitest](https://vitest.dev/) for unit testing. There are a number of other test runners that could be used as well.\n\n_Component Tests_: Validating that a Svelte component mounts and interacts as expected throughout its lifecycle requires a tool that provides a Document Object Model (DOM). Components can be compiled (since Svelte is a compiler and not a normal library) and mounted to allow asserting against element structure, listeners, state, and all the other capabilities provided by a Svelte component. Tools for component testing range from an in-memory implementation like jsdom paired with a test runner like [Vitest](https://vitest.dev/) to solutions that leverage an actual browser to provide a visual testing capability such as [Playwright](https://playwright.dev/docs/test-components) or [Cypress](https://www.cypress.io/).\n\n_End-to-End Tests_: To ensure your users are able to interact with your application it is necessary to test it as a whole in a manner as close to production as possible. This is done by writing end-to-end (E2E) tests which load and interact with a deployed version of your application in order to simulate how the user will interact with your application. When creating a new SvelteKit project, you will be asked whether you would like to setup [Playwright](https://playwright.dev/) for end-to-end testing. There are many other E2E test libraries available for use as well.\n\nSome resources for getting started with testing:\n\n- [Svelte docs on testing](/docs/svelte/testing)\n- [Setup Vitest using the Svelte CLI](/docs/cli/vitest)\n- [Svelte Testing Library](https://testing-library.com/docs/svelte-testing-library/example/)\n- [Svelte Component Testing in Cypress](https://docs.cypress.io/guides/component-testing/svelte/overview)\n- [Example using uvu test runner with JSDOM](https://github.com/lukeed/uvu/tree/master/examples/svelte)\n- [Test Svelte components using Vitest & Playwright](https://davipon.hashnode.dev/test-svelte-component-using-vitest-playwright)\n- [Component testing with WebdriverIO](https://webdriver.io/docs/component-testing/svelte)\n\n## Is there a router?\n\nThe official routing library is [SvelteKit](/docs/kit). SvelteKit provides a filesystem router, server-side rendering (SSR), and hot module reloading (HMR) in one easy-to-use package. It shares similarities with Next.js for React and Nuxt.js for Vue. SvelteKit also supports hash-based routing for client-side applications.\n\nHowever, you can use any router library. A sampling of available routers are highlighted [on the packages page](/packages#routing).\n\n## How do I write a mobile app with Svelte?\n\nWhile most mobile apps are written without using JavaScript, if you'd like to leverage your existing Svelte components and knowledge of Svelte when building mobile apps, you can turn a [SvelteKit SPA](https://kit.svelte.dev/docs/single-page-apps) into a mobile app with [Tauri](https://v2.tauri.app/start/frontend/sveltekit/) or [Capacitor](https://capacitorjs.com/solution/svelte). Mobile features like the camera, geolocation, and push notifications are available via plugins for both platforms.\n\nSome work has been completed towards [custom renderer support in Svelte 5](https://github.com/sveltejs/svelte/issues/15470), but this feature is not yet available. The custom rendering API would support additional mobile frameworks like Lynx JS and Svelte Native. Svelte Native was an option available for Svelte 4, but Svelte 5 does not currently support it. Svelte Native lets you write NativeScript apps using Svelte components that contain [NativeScript UI components](https://docs.nativescript.org/ui/) rather than DOM elements, which may be familiar for users coming from React Native.\n\n## Can I tell Svelte not to remove my unused styles?\n\nNo. Svelte removes the styles from the component and warns you about them in order to prevent issues that would otherwise arise.\n\nSvelte's component style scoping works by generating a class unique to the given component, adding it to the relevant elements in the component that are under Svelte's control, and then adding it to each of the selectors in that component's styles. When the compiler can't see what elements a style selector applies to, there would be two bad options for keeping it:\n\n- If it keeps the selector and adds the scoping class to it, the selector will likely not match the expected elements in the component, and they definitely won't if they were created by a child component or `{@html ...}`.\n- If it keeps the selector without adding the scoping class to it, the given style will become a global style, affecting your entire page.\n\nIf you need to style something that Svelte can't identify at compile time, you will need to explicitly opt into global styles by using `:global(...)`. But also keep in mind that you can wrap `:global(...)` around only part of a selector. `.foo :global(.bar) { ... }` will style any `.bar` elements that appear within the component's `.foo` elements. As long as there's some parent element in the current component to start from, partially global selectors like this will almost always be able to get you what you want.\n\n## Is Svelte v2 still available?\n\nNew features aren't being added to it, and bugs will probably only be fixed if they are extremely nasty or present some sort of security vulnerability.\n\nThe documentation is still available [here](https://v2.svelte.dev/guide).\n\n## How do I do hot module reloading?\n\nWe recommend using [SvelteKit](/docs/kit), which supports HMR out of the box and is built on top of [Vite](https://vitejs.dev/) and [svelte-hmr](https://github.com/sveltejs/svelte-hmr). There are also community plugins for [rollup](https://github.com/rixo/rollup-plugin-svelte-hot) and [webpack](https://github.com/sveltejs/svelte-loader).\n"
  },
  {
    "path": "documentation/docs/07-misc/index.md",
    "content": "---\ntitle: Misc\n---\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/client-errors.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### async_derived_orphan\n\n```\nCannot create a `$derived(...)` with an `await` expression outside of an effect tree\n```\n\nIn Svelte there are two types of reaction — [`$derived`](/docs/svelte/$derived) and [`$effect`](/docs/svelte/$effect). Deriveds can be created anywhere, because they run _lazily_ and can be [garbage collected](https://developer.mozilla.org/en-US/docs/Glossary/Garbage_collection) if nothing references them. Effects, by contrast, keep running eagerly whenever their dependencies change, until they are destroyed.\n\nBecause of this, effects can only be created inside other effects (or [effect roots](/docs/svelte/$effect#$effect.root), such as the one that is created when you first mount a component) so that Svelte knows when to destroy them.\n\nSome sleight of hand occurs when a derived contains an `await` expression: Since waiting until we read `{await getPromise()}` to call `getPromise` would be too late, we use an effect to instead call it proactively, notifying Svelte when the value is available. But since we're using an effect, we can only create asynchronous deriveds inside another effect.\n\n### bind_invalid_checkbox_value\n\n```\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n```\n\n### bind_invalid_export\n\n```\nComponent %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n```\n\n### bind_not_bindable\n\n```\nA component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n```\n\n### component_api_changed\n\n```\nCalling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n```\n\nSee the [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.\n\n### component_api_invalid_new\n\n```\nAttempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n```\n\nSee the [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.\n\n### derived_references_self\n\n```\nA derived value cannot reference itself recursively\n```\n\n### each_key_duplicate\n\n```\nKeyed each block has duplicate key at indexes %a% and %b%\n```\n\n```\nKeyed each block has duplicate key `%value%` at indexes %a% and %b%\n```\n\n### each_key_volatile\n\n```\nKeyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n```\n\nThe key expression in a keyed each block must return the same value when called multiple times for the same item. Using expressions like `[item.a, item.b]` creates a new array each time, which will never be equal to itself. Instead, use a primitive value or create a stable key like `item.a + '-' + item.b`.\n\n### effect_in_teardown\n\n```\n`%rune%` cannot be used inside an effect cleanup function\n```\n\n### effect_in_unowned_derived\n\n```\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\n```\n\n### effect_orphan\n\n```\n`%rune%` can only be used inside an effect (e.g. during component initialisation)\n```\n\n### effect_pending_outside_reaction\n\n```\n`$effect.pending()` can only be called inside an effect or derived\n```\n\n### effect_update_depth_exceeded\n\n```\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n```\n\nIf an effect updates some state that it also depends on, it will re-run, potentially in a loop:\n\n```js\nlet count = $state(0);\n\n$effect(() => {\n\t// this both reads and writes `count`,\n\t// so will run in an infinite loop\n\tcount += 1;\n});\n```\n\n(Svelte intervenes before this can crash your browser tab.)\n\nThe same applies to array mutations, since these both read and write to the array:\n\n```js\nlet array = $state(['hello']);\n\n$effect(() => {\n\tarray.push('goodbye');\n});\n```\n\nNote that it's fine for an effect to re-run itself as long as it 'settles':\n\n```js\nlet array = ['a', 'b', 'c'];\n// ---cut---\n$effect(() => {\n\t// this is okay, because sorting an already-sorted array\n\t// won't result in a mutation\n\tarray.sort();\n});\n```\n\nOften when encountering this issue, the value in question shouldn't be state (for example, if you are pushing to a `logs` array in an effect, make `logs` a normal array rather than `$state([])`). In the rare cases where you really _do_ need to write to state in an effect — [which you should avoid]($effect#When-not-to-use-$effect) — you can read the state with [untrack](svelte#untrack) to avoid adding it as a dependency.\n\n### flush_sync_in_effect\n\n```\nCannot use `flushSync` inside an effect\n```\n\nThe `flushSync()` function can be used to flush any pending effects synchronously. It cannot be used if effects are currently being flushed — in other words, you can call it after a state change but _not_ inside an effect.\n\nThis restriction only applies when using the `experimental.async` option, which will be active by default in Svelte 6.\n\n### fork_discarded\n\n```\nCannot commit a fork that was already discarded\n```\n\n### fork_timing\n\n```\nCannot create a fork inside an effect or when state changes are pending\n```\n\n### get_abort_signal_outside_reaction\n\n```\n`getAbortSignal()` can only be called inside an effect or derived\n```\n\n### hydratable_missing_but_required\n\n```\nExpected to find a hydratable with key `%key%` during hydration, but did not.\n```\n\nThis can happen if you render a hydratable on the client that was not rendered on the server, and means that it was forced to fall back to running its function blockingly during hydration. This is bad for performance, as it blocks hydration until the asynchronous work completes.\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\n\tif (BROWSER) {\n\t\t// bad! nothing can become interactive until this asynchronous work is done\n\t\tawait hydratable('foo', get_slow_random_number);\n\t}\n</script>\n```\n\n### hydration_failed\n\n```\nFailed to hydrate the application\n```\n\n### invalid_snippet\n\n```\nCould not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n```\n\n### lifecycle_legacy_only\n\n```\n`%name%(...)` cannot be used in runes mode\n```\n\n### props_invalid_value\n\n```\nCannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n```\n\n### props_rest_readonly\n\n```\nRest element properties of `$props()` such as `%property%` are readonly\n```\n\n### rune_outside_svelte\n\n```\nThe `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n```\n\n### set_context_after_init\n\n```\n`setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n```\n\nThis restriction only applies when using the `experimental.async` option, which will be active by default in Svelte 6.\n\n### state_descriptors_fixed\n\n```\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n```\n\n### state_prototype_fixed\n\n```\nCannot set prototype of `$state` object\n```\n\n### state_unsafe_mutation\n\n```\nUpdating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n```\n\nThis error occurs when state is updated while evaluating a `$derived`. You might encounter it while trying to 'derive' two pieces of state in one go:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\n\tlet even = $state(true);\n\n\tlet odd = $derived.by(() => {\n\t\teven = count % 2 === 0;\n\t\treturn !even;\n\t});\n</script>\n\n<button onclick={() => count++}>{count}</button>\n\n<p>{count} is even: {even}</p>\n<p>{count} is odd: {odd}</p>\n```\n\nThis is forbidden because it introduces instability: if `<p>{count} is even: {even}</p>` is updated before `odd` is recalculated, `even` will be stale. In most cases the solution is to make everything derived:\n\n```js\nlet count = 0;\n// ---cut---\nlet even = $derived(count % 2 === 0);\nlet odd = $derived(!even);\n```\n\nIf side-effects are unavoidable, use [`$effect`]($effect) instead.\n\n### svelte_boundary_reset_onerror\n\n```\nA `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n```\n\nIf a [`<svelte:boundary>`](https://svelte.dev/docs/svelte/svelte-boundary) has an `onerror` function, it must not call the provided `reset` function synchronously since the boundary is still in a broken state. Typically, `reset()` is called later, once the error has been resolved.\n\nIf it's possible to resolve the error inside the `onerror` callback, you must at least wait for the boundary to settle before calling `reset()`, for example using [`tick`](https://svelte.dev/docs/svelte/lifecycle-hooks#tick):\n\n```svelte\n<svelte:boundary onerror={async (error, reset) => {\n\tfixTheError();\n\t+++await tick();+++\n\treset();\n}}>\n\n</svelte:boundary>\n```\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/client-warnings.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### assignment_value_stale\n\n```\nAssignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n```\n\nGiven a case like this...\n\n```svelte\n<script>\n\tlet object = $state({ array: null });\n\n\tfunction add() {\n\t\t(object.array ??= []).push(object.array.length);\n\t}\n</script>\n\n<button onclick={add}>add</button>\n<p>items: {JSON.stringify(object.items)}</p>\n```\n\n...the array being pushed to when the button is first clicked is the `[]` on the right-hand side of the assignment, but the resulting value of `object.array` is an empty state proxy. As a result, the pushed value will be discarded.\n\nYou can fix this by separating it into two statements:\n\n```js\nlet object = { array: [0] };\n// ---cut---\nfunction add() {\n\tobject.array ??= [];\n\tobject.array.push(object.array.length);\n}\n```\n\n### await_reactivity_loss\n\n```\nDetected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n```\n\nSvelte's signal-based reactivity works by tracking which bits of state are read when a template or `$derived(...)` expression executes. If an expression contains an `await`, Svelte transforms it such that any state _after_ the `await` is also tracked — in other words, in a case like this...\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\nlet total = $derived(await a + b);\n```\n\n...both `a` and `b` are tracked, even though `b` is only read once `a` has resolved, after the initial execution.\n\nThis does _not_ apply to an `await` that is not 'visible' inside the expression. In a case like this...\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\nasync function sum() {\n\treturn await a + b;\n}\n\nlet total = $derived(await sum());\n```\n\n...`total` will depend on `a` (which is read immediately) but not `b` (which is not). The solution is to pass the values into the function:\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\n/**\n * @param {Promise<number>} a\n * @param {number} b\n */\nasync function sum(a, b) {\n\treturn await a + b;\n}\n\nlet total = $derived(await sum(a, b));\n```\n\n### await_waterfall\n\n```\nAn async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n```\n\nIn a case like this...\n\n```js\nasync function one() { return 1 }\nasync function two() { return 2 }\n// ---cut---\nlet a = $derived(await one());\nlet b = $derived(await two());\n```\n\n...the second `$derived` will not be created until the first one has resolved. Since `await two()` does not depend on the value of `a`, this delay, often described as a 'waterfall', is unnecessary.\n\n(Note that if the values of `await one()` and `await two()` subsequently change, they can do so concurrently — the waterfall only occurs when the deriveds are first created.)\n\nYou can solve this by creating the promises first and _then_ awaiting them:\n\n```js\nasync function one() { return 1 }\nasync function two() { return 2 }\n// ---cut---\nlet aPromise = $derived(one());\nlet bPromise = $derived(two());\n\nlet a = $derived(await aPromise);\nlet b = $derived(await bPromise);\n```\n\n### binding_property_non_reactive\n\n```\n`%binding%` is binding to a non-reactive property\n```\n\n```\n`%binding%` (%location%) is binding to a non-reactive property\n```\n\n### console_log_state\n\n```\nYour `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n```\n\nWhen logging a [proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy), browser devtools will log the proxy itself rather than the value it represents. In the case of Svelte, the 'target' of a `$state` proxy might not resemble its current value, which can be confusing.\n\nThe easiest way to log a value as it changes over time is to use the [`$inspect`](/docs/svelte/$inspect) rune. Alternatively, to log things on a one-off basis (for example, inside an event handler) you can use [`$state.snapshot`](/docs/svelte/$state#$state.snapshot) to take a snapshot of the current value.\n\n### event_handler_invalid\n\n```\n%handler% should be a function. Did you mean to %suggestion%?\n```\n\n### hydratable_missing_but_expected\n\n```\nExpected to find a hydratable with key `%key%` during hydration, but did not.\n```\n\nThis can happen if you render a hydratable on the client that was not rendered on the server, and means that it was forced to fall back to running its function blockingly during hydration. This is bad for performance, as it blocks hydration until the asynchronous work completes.\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\n\tif (BROWSER) {\n\t\t// bad! nothing can become interactive until this asynchronous work is done\n\t\tawait hydratable('foo', get_slow_random_number);\n\t}\n</script>\n```\n\n### hydration_attribute_changed\n\n```\nThe `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n```\n\nCertain attributes like `src` on an `<img>` element will not be repaired during hydration, i.e. the server value will be kept. That's because updating these attributes can cause the image to be refetched (or in the case of an `<iframe>`, for the frame to be reloaded), even if they resolve to the same resource.\n\nTo fix this, either silence the warning with a [`svelte-ignore`](basic-markup#Comments) comment, or ensure that the value stays the same between server and client. If you really need the value to change on hydration, you can force an update like this:\n\n```svelte\n<script>\n\tlet { src } = $props();\n\n\tif (typeof window !== 'undefined') {\n\t\t// stash the value...\n\t\tconst initial = src;\n\n\t\t// unset it...\n\t\tsrc = undefined;\n\n\t\t$effect(() => {\n\t\t\t// ...and reset after we've mounted\n\t\t\tsrc = initial;\n\t\t});\n\t}\n</script>\n\n<img {src} />\n```\n\n### hydration_html_changed\n\n```\nThe value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value\n```\n\n```\nThe value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n```\n\nIf the `{@html ...}` value changes between the server and the client, it will not be repaired during hydration, i.e. the server value will be kept. That's because change detection during hydration is expensive and usually unnecessary.\n\nTo fix this, either silence the warning with a [`svelte-ignore`](basic-markup#Comments) comment, or ensure that the value stays the same between server and client. If you really need the value to change on hydration, you can force an update like this:\n\n```svelte\n<script>\n\tlet { markup } = $props();\n\n\tif (typeof window !== 'undefined') {\n\t\t// stash the value...\n\t\tconst initial = markup;\n\n\t\t// unset it...\n\t\tmarkup = undefined;\n\n\t\t$effect(() => {\n\t\t\t// ...and reset after we've mounted\n\t\t\tmarkup = initial;\n\t\t});\n\t}\n</script>\n\n{@html markup}\n```\n\n### hydration_mismatch\n\n```\nHydration failed because the initial UI does not match what was rendered on the server\n```\n\n```\nHydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n```\n\nThis warning is thrown when Svelte encounters an error while hydrating the HTML from the server. During hydration, Svelte walks the DOM, expecting a certain structure. If that structure is different (for example because the HTML was repaired by the DOM because of invalid HTML), then Svelte will run into issues, resulting in this warning.\n\nDuring development, this error is often preceded by a `console.error` detailing the offending HTML, which needs fixing.\n\n### invalid_raw_snippet_render\n\n```\nThe `render` function passed to `createRawSnippet` should return HTML for a single element\n```\n\n### legacy_recursive_reactive_block\n\n```\nDetected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n```\n\n### lifecycle_double_unmount\n\n```\nTried to unmount a component that was not mounted\n```\n\n### ownership_invalid_binding\n\n```\n%parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n```\n\nConsider three components `GrandParent`, `Parent` and `Child`. If you do `<GrandParent bind:value>`, inside `GrandParent` pass on the variable via `<Parent {value} />` (note the missing `bind:`) and then do `<Child bind:value>` inside `Parent`, this warning is thrown.\n\nTo fix it, `bind:` to the value instead of just passing a property (i.e. in this example do `<Parent bind:value />`).\n\n### ownership_invalid_mutation\n\n```\nMutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n```\n\nConsider the following code:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Child from './Child.svelte';\n\tlet person = $state({ name: 'Florida', surname: 'Man' });\n</script>\n\n<Child {person} />\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\tlet { person } = $props();\n</script>\n\n<input bind:value={person.name}>\n<input bind:value={person.surname}>\n```\n\n`Child` is mutating `person` which is owned by `App` without being explicitly \"allowed\" to do so. This is strongly discouraged since it can create code that is hard to reason about at scale (\"who mutated this value?\"), hence the warning.\n\nTo fix it, either create callback props to communicate changes, or mark `person` as [`$bindable`]($bindable).\n\n### select_multiple_invalid_value\n\n```\nThe `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n```\n\nWhen using `<select multiple value={...}>`, Svelte will mark all selected `<option>` elements as selected by iterating over the array passed to `value`. If `value` is not an array, Svelte will emit this warning and keep the selected options as they are.\n\nTo silence the warning, ensure that `value`:\n\n- is an array for an explicit selection\n- is `null` or `undefined` to keep the selection as is\n\n### state_proxy_equality_mismatch\n\n```\nReactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n```\n\n`$state(...)` creates a [proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) of the value it is passed. The proxy and the value have different identities, meaning equality checks will always return `false`:\n\n```svelte\n<script>\n\tlet value = { foo: 'bar' };\n\tlet proxy = $state(value);\n\n\tvalue === proxy; // always false\n</script>\n```\n\nTo resolve this, ensure you're comparing values where both values were created with `$state(...)`, or neither were. Note that `$state.raw(...)` will _not_ create a state proxy.\n\n### state_proxy_unmount\n\n```\nTried to unmount a state proxy, rather than a component\n```\n\n`unmount` was called with a state proxy:\n\n```js\nimport { mount, unmount } from 'svelte';\nimport Component from './Component.svelte';\nlet target = document.body;\n// ---cut---\nlet component = $state(mount(Component, { target }));\n\n// later...\nunmount(component);\n```\n\nAvoid using `$state` here. If `component` _does_ need to be reactive for some reason, use `$state.raw` instead.\n\n### svelte_boundary_reset_noop\n\n```\nA `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n```\n\nWhen an error occurs while rendering the contents of a [`<svelte:boundary>`](https://svelte.dev/docs/svelte/svelte-boundary), the `onerror` handler is called with the error plus a `reset` function that attempts to re-render the contents.\n\nThis `reset` function should only be called once. After that, it has no effect — in a case like this, where a reference to `reset` is stored outside the boundary, clicking the button while `<Contents />` is rendered will _not_ cause the contents to be rendered again.\n\n```svelte\n<script>\n\tlet reset;\n</script>\n\n<button onclick={reset}>reset</button>\n\n<svelte:boundary onerror={(e, r) => (reset = r)}>\n\t<!-- contents -->\n\n\t{#snippet failed(e)}\n\t\t<p>oops! {e.message}</p>\n\t{/snippet}\n</svelte:boundary>\n```\n\n### transition_slide_display\n\n```\nThe `slide` transition does not work correctly for elements with `display: %value%`\n```\n\nThe [slide](/docs/svelte/svelte-transition#slide) transition works by animating the `height` of the element, which requires a `display` style like `block`, `flex` or `grid`. It does not work for:\n\n- `display: inline` (which is the default for elements like `<span>`), and its variants like `inline-block`, `inline-flex` and `inline-grid`\n- `display: table` and `table-[name]`, which are the defaults for elements like `<table>` and `<tr>`\n- `display: contents`\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/compile-errors.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### animation_duplicate\n\n```\nAn element can only have one 'animate' directive\n```\n\n### animation_invalid_placement\n\n```\nAn element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block\n```\n\n### animation_missing_key\n\n```\nAn element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block. Did you forget to add a key to your each block?\n```\n\n### attribute_contenteditable_dynamic\n\n```\n'contenteditable' attribute cannot be dynamic if element uses two-way binding\n```\n\n### attribute_contenteditable_missing\n\n```\n'contenteditable' attribute is required for textContent, innerHTML and innerText two-way bindings\n```\n\n### attribute_duplicate\n\n```\nAttributes need to be unique\n```\n\n### attribute_empty_shorthand\n\n```\nAttribute shorthand cannot be empty\n```\n\n### attribute_invalid_event_handler\n\n```\nEvent attribute must be a JavaScript expression, not a string\n```\n\n### attribute_invalid_multiple\n\n```\n'multiple' attribute must be static if select uses two-way binding\n```\n\n### attribute_invalid_name\n\n```\n'%name%' is not a valid attribute name\n```\n\n### attribute_invalid_sequence_expression\n\n```\nComma-separated expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses\n```\n\nAn attribute value cannot be a comma-separated sequence of expressions — in other words this is disallowed:\n\n```svelte\n<div class={size, color}>...</div>\n```\n\nInstead, make sure that the attribute value contains a single expression. In the example above it's likely that this was intended (see the [class documentation](class) for more details):\n\n```svelte\n<div class={[size, color]}>...</div>\n```\n\nIf you _do_ need to use the comma operator for some reason, wrap the sequence in parentheses:\n\n```svelte\n<div class={(size, color)}>...</div>\n```\n\nNote that this will evaluate to `color`, ignoring `size`.\n\n### attribute_invalid_type\n\n```\n'type' attribute must be a static text value if input uses two-way binding\n```\n\n### attribute_unquoted_sequence\n\n```\nAttribute values containing `{...}` must be enclosed in quote marks, unless the value only contains the expression\n```\n\n### bind_group_invalid_expression\n\n```\n`bind:group` can only bind to an Identifier or MemberExpression\n```\n\n### bind_group_invalid_snippet_parameter\n\n```\nCannot `bind:group` to a snippet parameter\n```\n\n### bind_invalid_expression\n\n```\nCan only bind to an Identifier or MemberExpression or a `{get, set}` pair\n```\n\n### bind_invalid_name\n\n```\n`bind:%name%` is not a valid binding\n```\n\n```\n`bind:%name%` is not a valid binding. %explanation%\n```\n\n### bind_invalid_parens\n\n```\n`bind:%name%={get, set}` must not have surrounding parentheses\n```\n\n### bind_invalid_target\n\n```\n`bind:%name%` can only be used with %elements%\n```\n\n### bind_invalid_value\n\n```\nCan only bind to state or props\n```\n\n### bindable_invalid_location\n\n```\n`$bindable()` can only be used inside a `$props()` declaration\n```\n\n### block_duplicate_clause\n\n```\n%name% cannot appear more than once within a block\n```\n\n### block_invalid_continuation_placement\n\n```\n{:...} block is invalid at this position (did you forget to close the preceding element or block?)\n```\n\n### block_invalid_elseif\n\n```\n'elseif' should be 'else if'\n```\n\n### block_invalid_placement\n\n```\n{#%name% ...} block cannot be %location%\n```\n\n### block_unclosed\n\n```\nBlock was left open\n```\n\n### block_unexpected_character\n\n```\nExpected a `%character%` character immediately following the opening bracket\n```\n\n### block_unexpected_close\n\n```\nUnexpected block closing tag\n```\n\n### component_invalid_directive\n\n```\nThis type of directive is not valid on components\n```\n\n### const_tag_cycle\n\n```\nCyclical dependency detected: %cycle%\n```\n\n### const_tag_invalid_expression\n\n```\n{@const ...} must consist of a single variable declaration\n```\n\n### const_tag_invalid_placement\n\n```\n`{@const}` must be the immediate child of `{#snippet}`, `{#if}`, `{:else if}`, `{:else}`, `{#each}`, `{:then}`, `{:catch}`, `<svelte:fragment>`, `<svelte:boundary>` or `<Component>`\n```\n\n### const_tag_invalid_reference\n\n```\nThe `{@const %name% = ...}` declaration is not available in this snippet\n```\n\nThe following is an error:\n\n```svelte\n<svelte:boundary>\n    {@const foo = 'bar'}\n\n    {#snippet failed()}\n        {foo}\n    {/snippet}\n</svelte:boundary>\n```\n\nHere, `foo` is not available inside `failed`. The top level code inside `<svelte:boundary>` becomes part of the implicit `children` snippet, in other words the above code is equivalent to this:\n\n```svelte\n<svelte:boundary>\n    {#snippet children()}\n        {@const foo = 'bar'}\n    {/snippet}\n\n    {#snippet failed()}\n        {foo}\n    {/snippet}\n</svelte:boundary>\n```\n\nThe same applies to components:\n\n```svelte\n<Component>\n    {@const foo = 'bar'}\n\n    {#snippet someProp()}\n        <!-- error -->\n        {foo}\n    {/snippet}\n</Component>\n```\n\n### constant_assignment\n\n```\nCannot assign to %thing%\n```\n\n### constant_binding\n\n```\nCannot bind to %thing%\n```\n\n### css_empty_declaration\n\n```\nDeclaration cannot be empty\n```\n\n### css_expected_identifier\n\n```\nExpected a valid CSS identifier\n```\n\n### css_global_block_invalid_combinator\n\n```\nA `:global` selector cannot follow a `%name%` combinator\n```\n\n### css_global_block_invalid_declaration\n\n```\nA top-level `:global {...}` block can only contain rules, not declarations\n```\n\n### css_global_block_invalid_list\n\n```\nA `:global` selector cannot be part of a selector list with entries that don't contain `:global`\n```\n\nThe following CSS is invalid:\n\n```css\n:global, x {\n    y {\n        color: red;\n    }\n}\n```\n\nThis is mixing a `:global` block, which means \"everything in here is unscoped\", with a scoped selector (`x` in this case). As a result it's not possible to transform the inner selector (`y` in this case) into something that satisfies both requirements. You therefore have to split this up into two selectors:\n\n```css\n:global {\n    y {\n        color: red;\n    }\n}\n\nx y {\n    color: red;\n}\n```\n\n### css_global_block_invalid_modifier\n\n```\nA `:global` selector cannot modify an existing selector\n```\n\n### css_global_block_invalid_modifier_start\n\n```\nA `:global` selector can only be modified if it is a descendant of other selectors\n```\n\n### css_global_block_invalid_placement\n\n```\nA `:global` selector cannot be inside a pseudoclass\n```\n\n### css_global_invalid_placement\n\n```\n`:global(...)` can be at the start or end of a selector sequence, but not in the middle\n```\n\n### css_global_invalid_selector\n\n```\n`:global(...)` must contain exactly one selector\n```\n\n### css_global_invalid_selector_list\n\n```\n`:global(...)` must not contain type or universal selectors when used in a compound selector\n```\n\n### css_nesting_selector_invalid_placement\n\n```\nNesting selectors can only be used inside a rule or as the first selector inside a lone `:global(...)`\n```\n\n### css_selector_invalid\n\n```\nInvalid selector\n```\n\n### css_type_selector_invalid_placement\n\n```\n`:global(...)` must not be followed by a type selector\n```\n\n### debug_tag_invalid_arguments\n\n```\n{@debug ...} arguments must be identifiers, not arbitrary expressions\n```\n\n### declaration_duplicate\n\n```\n`%name%` has already been declared\n```\n\n### declaration_duplicate_module_import\n\n```\nCannot declare a variable with the same name as an import from `<script module>`\n```\n\n### derived_invalid_export\n\n```\nCannot export derived state from a module. To expose the current derived value, export a function returning its value\n```\n\n### directive_invalid_value\n\n```\nDirective value must be a JavaScript expression enclosed in curly braces\n```\n\n### directive_missing_name\n\n```\n`%type%` name cannot be empty\n```\n\n### dollar_binding_invalid\n\n```\nThe $ name is reserved, and cannot be used for variables and imports\n```\n\n### dollar_prefix_invalid\n\n```\nThe $ prefix is reserved, and cannot be used for variables and imports\n```\n\n### duplicate_class_field\n\n```\n`%name%` has already been declared\n```\n\n### each_item_invalid_assignment\n\n```\nCannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. `array[i] = value` instead of `entry = value`, or `bind:value={array[i]}` instead of `bind:value={entry}`)\n```\n\nIn legacy mode, it was possible to reassign or bind to the each block argument itself:\n\n```svelte\n<script>\n\tlet array = [1, 2, 3];\n</script>\n\n{#each array as entry}\n\t<!-- reassignment -->\n\t<button on:click={() => entry = 4}>change</button>\n\n\t<!-- binding -->\n\t<input bind:value={entry}>\n{/each}\n```\n\nThis turned out to be buggy and unpredictable, particularly when working with derived values (such as `array.map(...)`), and as such is forbidden in runes mode. You can achieve the same outcome by using the index instead:\n\n```svelte\n<script>\n\tlet array = $state([1, 2, 3]);\n</script>\n\n{#each array as entry, i}\n\t<!-- reassignment -->\n\t<button onclick={() => array[i] = 4}>change</button>\n\n\t<!-- binding -->\n\t<input bind:value={array[i]}>\n{/each}\n```\n\n### each_key_without_as\n\n```\nAn `{#each ...}` block without an `as` clause cannot have a key\n```\n\n### effect_invalid_placement\n\n```\n`$effect()` can only be used as an expression statement\n```\n\n### element_invalid_closing_tag\n\n```\n`</%name%>` attempted to close an element that was not open\n```\n\n### element_invalid_closing_tag_autoclosed\n\n```\n`</%name%>` attempted to close element that was already automatically closed by `<%reason%>` (cannot nest `<%reason%>` inside `<%name%>`)\n```\n\n### element_unclosed\n\n```\n`<%name%>` was left open\n```\n\n### event_handler_invalid_component_modifier\n\n```\nEvent modifiers other than 'once' can only be used on DOM elements\n```\n\n### event_handler_invalid_modifier\n\n```\nValid event modifiers are %list%\n```\n\n### event_handler_invalid_modifier_combination\n\n```\nThe '%modifier1%' and '%modifier2%' modifiers cannot be used together\n```\n\n### expected_attribute_value\n\n```\nExpected attribute value\n```\n\n### expected_block_type\n\n```\nExpected 'if', 'each', 'await', 'key' or 'snippet'\n```\n\n### expected_identifier\n\n```\nExpected an identifier\n```\n\n### expected_pattern\n\n```\nExpected identifier or destructure pattern\n```\n\n### expected_tag\n\n```\nExpected 'html', 'render', 'attach', 'const', or 'debug'\n```\n\n### expected_token\n\n```\nExpected token %token%\n```\n\n### expected_whitespace\n\n```\nExpected whitespace\n```\n\n### experimental_async\n\n```\nCannot use `await` in deriveds and template expressions, or at the top level of a component, unless the `experimental.async` compiler option is `true`\n```\n\n### export_undefined\n\n```\n`%name%` is not defined\n```\n\n### global_reference_invalid\n\n```\n`%name%` is an illegal variable name. To reference a global variable called `%name%`, use `globalThis.%name%`\n```\n\n### host_invalid_placement\n\n```\n`$host()` can only be used inside custom element component instances\n```\n\n### illegal_await_expression\n\n```\n`use:`, `transition:` and `animate:` directives, attachments and bindings do not support await expressions\n```\n\n### illegal_element_attribute\n\n```\n`<%name%>` does not support non-event attributes or spread attributes\n```\n\n### import_svelte_internal_forbidden\n\n```\nImports of `svelte/internal/*` are forbidden. It contains private runtime code which is subject to change without notice. If you're importing from `svelte/internal/*` to work around a limitation of Svelte, please open an issue at https://github.com/sveltejs/svelte and explain your use case\n```\n\n### inspect_trace_generator\n\n```\n`$inspect.trace(...)` cannot be used inside a generator function\n```\n\n### inspect_trace_invalid_placement\n\n```\n`$inspect.trace(...)` must be the first statement of a function body\n```\n\n### invalid_arguments_usage\n\n```\nThe arguments keyword cannot be used within the template or at the top level of a component\n```\n\n### js_parse_error\n\n```\n%message%\n```\n\n### legacy_await_invalid\n\n```\nCannot use `await` in deriveds and template expressions, or at the top level of a component, unless in runes mode\n```\n\n### legacy_export_invalid\n\n```\nCannot use `export let` in runes mode — use `$props()` instead\n```\n\n### legacy_props_invalid\n\n```\nCannot use `$$props` in runes mode\n```\n\n### legacy_reactive_statement_invalid\n\n```\n`$:` is not allowed in runes mode, use `$derived` or `$effect` instead\n```\n\n### legacy_rest_props_invalid\n\n```\nCannot use `$$restProps` in runes mode\n```\n\n### let_directive_invalid_placement\n\n```\n`let:` directive at invalid position\n```\n\n### mixed_event_handler_syntaxes\n\n```\nMixing old (on:%name%) and new syntaxes for event handling is not allowed. Use only the on%name% syntax\n```\n\n### module_illegal_default_export\n\n```\nA component cannot have a default export\n```\n\n### node_invalid_placement\n\n```\n%message%. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\n```\n\nHTML restricts where certain elements can appear. In case of a violation the browser will 'repair' the HTML in a way that breaks Svelte's assumptions about the structure of your components. Some examples:\n\n- `<p>hello <div>world</div></p>` will result in `<p>hello </p><div>world</div><p></p>` (the `<div>` autoclosed the `<p>` because `<p>` cannot contain block-level elements)\n- `<option><div>option a</div></option>` will result in `<option>option a</option>` (the `<div>` is removed)\n- `<table><tr><td>cell</td></tr></table>` will result in `<table><tbody><tr><td>cell</td></tr></tbody></table>` (a `<tbody>` is auto-inserted)\n\n### options_invalid_value\n\n```\nInvalid compiler option: %details%\n```\n\n### options_removed\n\n```\nInvalid compiler option: %details%\n```\n\n### options_unrecognised\n\n```\nUnrecognised compiler option %keypath%\n```\n\n### props_duplicate\n\n```\nCannot use `%rune%()` more than once\n```\n\n### props_id_invalid_placement\n\n```\n`$props.id()` can only be used at the top level of components as a variable declaration initializer\n```\n\n### props_illegal_name\n\n```\nDeclaring or accessing a prop starting with `$$` is illegal (they are reserved for Svelte internals)\n```\n\n### props_invalid_identifier\n\n```\n`$props()` can only be used with an object destructuring pattern\n```\n\n### props_invalid_pattern\n\n```\n`$props()` assignment must not contain nested properties or computed keys\n```\n\n### props_invalid_placement\n\n```\n`$props()` can only be used at the top level of components as a variable declaration initializer\n```\n\n### reactive_declaration_cycle\n\n```\nCyclical dependency detected: %cycle%\n```\n\n### render_tag_invalid_call_expression\n\n```\nCalling a snippet function using apply, bind or call is not allowed\n```\n\n### render_tag_invalid_expression\n\n```\n`{@render ...}` tags can only contain call expressions\n```\n\n### render_tag_invalid_spread_argument\n\n```\ncannot use spread arguments in `{@render ...}` tags\n```\n\n### rune_invalid_arguments\n\n```\n`%rune%` cannot be called with arguments\n```\n\n### rune_invalid_arguments_length\n\n```\n`%rune%` must be called with %args%\n```\n\n### rune_invalid_computed_property\n\n```\nCannot access a computed property of a rune\n```\n\n### rune_invalid_name\n\n```\n`%name%` is not a valid rune\n```\n\n### rune_invalid_spread\n\n```\n`%rune%` cannot be called with a spread argument\n```\n\n### rune_invalid_usage\n\n```\nCannot use `%rune%` rune in non-runes mode\n```\n\n### rune_missing_parentheses\n\n```\nCannot use rune without parentheses\n```\n\n### rune_removed\n\n```\nThe `%name%` rune has been removed\n```\n\n### rune_renamed\n\n```\n`%name%` is now `%replacement%`\n```\n\n### runes_mode_invalid_import\n\n```\n%name% cannot be used in runes mode\n```\n\n### script_duplicate\n\n```\nA component can have a single top-level `<script>` element and/or a single top-level `<script module>` element\n```\n\n### script_invalid_attribute_value\n\n```\nIf the `%name%` attribute is supplied, it must be a boolean attribute\n```\n\n### script_invalid_context\n\n```\nIf the context attribute is supplied, its value must be \"module\"\n```\n\n### script_reserved_attribute\n\n```\nThe `%name%` attribute is reserved and cannot be used\n```\n\n### slot_attribute_duplicate\n\n```\nDuplicate slot name '%name%' in <%component%>\n```\n\n### slot_attribute_invalid\n\n```\nslot attribute must be a static value\n```\n\n### slot_attribute_invalid_placement\n\n```\nElement with a slot='...' attribute must be a child of a component or a descendant of a custom element\n```\n\n### slot_default_duplicate\n\n```\nFound default slot content alongside an explicit slot=\"default\"\n```\n\n### slot_element_invalid_attribute\n\n```\n`<slot>` can only receive attributes and (optionally) let directives\n```\n\n### slot_element_invalid_name\n\n```\nslot attribute must be a static value\n```\n\n### slot_element_invalid_name_default\n\n```\n`default` is a reserved word — it cannot be used as a slot name\n```\n\n### slot_snippet_conflict\n\n```\nCannot use `<slot>` syntax and `{@render ...}` tags in the same component. Migrate towards `{@render ...}` tags completely\n```\n\n### snippet_conflict\n\n```\nCannot use explicit children snippet at the same time as implicit children content. Remove either the non-whitespace content or the children snippet block\n```\n\n### snippet_invalid_export\n\n```\nAn exported snippet can only reference things declared in a `<script module>`, or other exportable snippets\n```\n\nIt's possible to export a snippet from a `<script module>` block, but only if it doesn't reference anything defined inside a non-module-level `<script>`. For example you can't do this...\n\n```svelte\n<script module>\n\texport { greeting };\n</script>\n\n<script>\n\tlet message = 'hello';\n</script>\n\n{#snippet greeting(name)}\n\t<p>{message} {name}!</p>\n{/snippet}\n```\n\n...because `greeting` references `message`, which is defined in the second `<script>`.\n\n### snippet_invalid_rest_parameter\n\n```\nSnippets do not support rest parameters; use an array instead\n```\n\n### snippet_parameter_assignment\n\n```\nCannot reassign or bind to snippet parameter\n```\n\n### snippet_shadowing_prop\n\n```\nThis snippet is shadowing the prop `%prop%` with the same name\n```\n\n### state_field_duplicate\n\n```\n`%name%` has already been declared on this class\n```\n\nAn assignment to a class field that uses a `$state` or `$derived` rune is considered a _state field declaration_. The declaration can happen in the class body...\n\n```js\nclass Counter {\n\tcount = $state(0);\n}\n```\n\n...or inside the constructor...\n\n```js\nclass Counter {\n\tconstructor() {\n\t\tthis.count = $state(0);\n\t}\n}\n```\n\n...but it can only happen once.\n\n### state_field_invalid_assignment\n\n```\nCannot assign to a state field before its declaration\n```\n\n### state_invalid_export\n\n```\nCannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\n```\n\n### state_invalid_placement\n\n```\n`%rune%(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\n```\n\n### store_invalid_scoped_subscription\n\n```\nCannot subscribe to stores that are not declared at the top level of the component\n```\n\n### store_invalid_subscription\n\n```\nCannot reference store value inside `<script module>`\n```\n\n### store_invalid_subscription_module\n\n```\nCannot reference store value outside a `.svelte` file\n```\n\nUsing a `$` prefix to refer to the value of a store is only possible inside `.svelte` files, where Svelte can automatically create subscriptions when a component is mounted and unsubscribe when the component is unmounted. Consider migrating to runes instead.\n\n### style_directive_invalid_modifier\n\n```\n`style:` directive can only use the `important` modifier\n```\n\n### style_duplicate\n\n```\nA component can have a single top-level `<style>` element\n```\n\n### svelte_body_illegal_attribute\n\n```\n`<svelte:body>` does not support non-event attributes or spread attributes\n```\n\n### svelte_boundary_invalid_attribute\n\n```\nValid attributes on `<svelte:boundary>` are `onerror` and `failed`\n```\n\n### svelte_boundary_invalid_attribute_value\n\n```\nAttribute value must be a non-string expression\n```\n\n### svelte_component_invalid_this\n\n```\nInvalid component definition — must be an `{expression}`\n```\n\n### svelte_component_missing_this\n\n```\n`<svelte:component>` must have a 'this' attribute\n```\n\n### svelte_element_missing_this\n\n```\n`<svelte:element>` must have a 'this' attribute with a value\n```\n\n### svelte_fragment_invalid_attribute\n\n```\n`<svelte:fragment>` can only have a slot attribute and (optionally) a let: directive\n```\n\n### svelte_fragment_invalid_placement\n\n```\n`<svelte:fragment>` must be the direct child of a component\n```\n\n### svelte_head_illegal_attribute\n\n```\n`<svelte:head>` cannot have attributes nor directives\n```\n\n### svelte_meta_duplicate\n\n```\nA component can only have one `<%name%>` element\n```\n\n### svelte_meta_invalid_content\n\n```\n<%name%> cannot have children\n```\n\n### svelte_meta_invalid_placement\n\n```\n`<%name%>` tags cannot be inside elements or blocks\n```\n\n### svelte_meta_invalid_tag\n\n```\nValid `<svelte:...>` tag names are %list%\n```\n\n### svelte_options_deprecated_tag\n\n```\n\"tag\" option is deprecated — use \"customElement\" instead\n```\n\n### svelte_options_invalid_attribute\n\n```\n`<svelte:options>` can only receive static attributes\n```\n\n### svelte_options_invalid_attribute_value\n\n```\nValue must be %list%, if specified\n```\n\n### svelte_options_invalid_customelement\n\n```\n\"customElement\" must be a string literal defining a valid custom element name or an object of the form { tag?: string; shadow?: \"open\" | \"none\" | `ShadowRootInit`; props?: { [key: string]: { attribute?: string; reflect?: boolean; type: .. } } }\n```\n\n### svelte_options_invalid_customelement_props\n\n```\n\"props\" must be a statically analyzable object literal of the form \"{ [key: string]: { attribute?: string; reflect?: boolean; type?: \"String\" | \"Boolean\" | \"Number\" | \"Array\" | \"Object\" }\"\n```\n\n### svelte_options_invalid_customelement_shadow\n\n```\n\"shadow\" must be either \"open\", \"none\" or `ShadowRootInit` object.\n```\n\nSee https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow#options for more information on valid shadow root constructor options\n\n### svelte_options_invalid_tagname\n\n```\nTag name must be lowercase and hyphenated\n```\n\nSee https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name for more information on valid tag names\n\n### svelte_options_reserved_tagname\n\n```\nTag name is reserved\n```\n\nSee https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name for more information on valid tag names\n\n### svelte_options_unknown_attribute\n\n```\n`<svelte:options>` unknown attribute '%name%'\n```\n\n### svelte_self_invalid_placement\n\n```\n`<svelte:self>` components can only exist inside `{#if}` blocks, `{#each}` blocks, `{#snippet}` blocks or slots passed to components\n```\n\n### tag_invalid_name\n\n```\nExpected a valid element or component name. Components must have a valid variable name or dot notation expression\n```\n\n### tag_invalid_placement\n\n```\n{@%name% ...} tag cannot be %location%\n```\n\n### textarea_invalid_content\n\n```\nA `<textarea>` can have either a value attribute or (equivalently) child content, but not both\n```\n\n### title_illegal_attribute\n\n```\n`<title>` cannot have attributes nor directives\n```\n\n### title_invalid_content\n\n```\n`<title>` can only contain text and {tags}\n```\n\n### transition_conflict\n\n```\nCannot use `%type%:` alongside existing `%existing%:` directive\n```\n\n### transition_duplicate\n\n```\nCannot use multiple `%type%:` directives on a single element\n```\n\n### typescript_invalid_feature\n\n```\nTypeScript language features like %feature% are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\n```\n\n### unexpected_eof\n\n```\nUnexpected end of input\n```\n\n### unexpected_reserved_word\n\n```\n'%word%' is a reserved word in JavaScript and cannot be used here\n```\n\n### unterminated_string_constant\n\n```\nUnterminated string constant\n```\n\n### void_element_invalid_content\n\n```\nVoid elements cannot have children or closing tags\n```\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/compile-warnings.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### a11y_accesskey\n\n```\nAvoid using accesskey\n```\n\nEnforce no `accesskey` on element. Access keys are HTML attributes that allow web developers to assign keyboard shortcuts to elements. Inconsistencies between keyboard shortcuts and keyboard commands used by screen reader and keyboard-only users create accessibility complications. To avoid complications, access keys should not be used.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: Avoid using accesskey -->\n<div accesskey=\"z\"></div>\n```\n\n### a11y_aria_activedescendant_has_tabindex\n\n```\nAn element with an aria-activedescendant attribute should have a tabindex value\n```\n\nAn element with `aria-activedescendant` must be tabbable, so it must either have an inherent `tabindex` or declare `tabindex` as an attribute.\n\n```svelte\n<!-- A11y: Elements with attribute aria-activedescendant should have tabindex value -->\n<div aria-activedescendant=\"some-id\"></div>\n```\n\n### a11y_aria_attributes\n\n```\n`<%name%>` should not have aria-* attributes\n```\n\nCertain reserved DOM elements do not support ARIA roles, states and properties. This is often because they are not visible, for example `meta`, `html`, `script`, `style`. This rule enforces that these DOM elements do not contain the `aria-*` props.\n\n```svelte\n<!-- A11y: <meta> should not have aria-* attributes -->\n<meta aria-hidden=\"false\" />\n```\n\n### a11y_autocomplete_valid\n\n```\n'%value%' is an invalid value for 'autocomplete' on `<input type=\"%type%\">`\n```\n\n### a11y_autofocus\n\n```\nAvoid using autofocus\n```\n\nEnforce that `autofocus` is not used on elements. Autofocusing elements can cause usability issues for sighted and non-sighted users alike.\n\n```svelte\n<!-- A11y: Avoid using autofocus -->\n<input autofocus />\n```\n\n### a11y_click_events_have_key_events\n\n```\nVisible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\"button\">` or `<a>` might be more appropriate\n```\n\nEnforce that visible, non-interactive elements with an `onclick` event are accompanied by a keyboard event handler.\n\nUsers should first consider whether an interactive element might be more appropriate such as a `<button type=\"button\">` element for actions or `<a>` element for navigations. These elements are more semantically meaningful and will have built-in key handling. E.g. `Space` and `Enter` will trigger a `<button>` and `Enter` will trigger an `<a>` element.\n\nIf a non-interactive element is required then `onclick` should be accompanied by an `onkeyup` or `onkeydown` handler that enables the user to perform equivalent actions via the keyboard. In order for the user to be able to trigger a key press, the element will also need to be focusable by adding a [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex). While an `onkeypress` handler will also silence this warning, it should be noted that the `keypress` event is deprecated.\n\n```svelte\n<!-- A11y: visible, non-interactive elements with an onclick event must be accompanied by a keyboard event handler. -->\n<div onclick={() => {}}></div>\n```\n\nCoding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users.\n\n### a11y_consider_explicit_label\n\n```\nButtons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\n```\n\n### a11y_distracting_elements\n\n```\nAvoid `<%name%>` elements\n```\n\nEnforces that no distracting elements are used. Elements that can be visually distracting can cause accessibility issues with visually impaired users. Such elements are most likely deprecated, and should be avoided.\n\nThe following elements are visually distracting: `<marquee>` and `<blink>`.\n\n```svelte\n<!-- A11y: Avoid <marquee> elements -->\n<marquee></marquee>\n```\n\n### a11y_figcaption_index\n\n```\n`<figcaption>` must be first or last child of `<figure>`\n```\n\n### a11y_figcaption_parent\n\n```\n`<figcaption>` must be an immediate child of `<figure>`\n```\n\nEnforce that certain DOM elements have the correct structure.\n\n```svelte\n<!-- A11y: <figcaption> must be an immediate child of <figure> -->\n<div>\n\t<figcaption>Image caption</figcaption>\n</div>\n```\n\n### a11y_hidden\n\n```\n`<%name%>` element should not be hidden\n```\n\nCertain DOM elements are useful for screen reader navigation and should not be hidden.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: <h2> element should not be hidden -->\n<h2 aria-hidden=\"true\">invisible header</h2>\n```\n\n### a11y_img_redundant_alt\n\n```\nScreenreaders already announce `<img>` elements as an image\n```\n\nEnforce img alt attribute does not contain the word image, picture, or photo. Screen readers already announce `img` elements as an image. There is no need to use words such as _image_, _photo_, and/or _picture_.\n\n```svelte\n<img src=\"foo\" alt=\"Foo eating a sandwich.\" />\n\n<!-- aria-hidden, won't be announced by screen reader -->\n<img src=\"bar\" aria-hidden=\"true\" alt=\"Picture of me taking a photo of an image\" />\n\n<!-- A11y: Screen readers already announce <img> elements as an image. -->\n<img src=\"foo\" alt=\"Photo of foo being weird.\" />\n\n<!-- A11y: Screen readers already announce <img> elements as an image. -->\n<img src=\"bar\" alt=\"Image of me at a bar!\" />\n\n<!-- A11y: Screen readers already announce <img> elements as an image. -->\n<img src=\"foo\" alt=\"Picture of baz fixing a bug.\" />\n```\n\n### a11y_incorrect_aria_attribute_type\n\n```\nThe value of '%attribute%' must be a %type%\n```\n\nEnforce that only the correct type of value is used for aria attributes. For example, `aria-hidden`\nshould only receive a boolean.\n\n```svelte\n<!-- A11y: The value of 'aria-hidden' must be exactly one of true or false -->\n<div aria-hidden=\"yes\"></div>\n```\n\n### a11y_incorrect_aria_attribute_type_boolean\n\n```\nThe value of '%attribute%' must be either 'true' or 'false'. It cannot be empty\n```\n\n### a11y_incorrect_aria_attribute_type_id\n\n```\nThe value of '%attribute%' must be a string that represents a DOM element ID\n```\n\n### a11y_incorrect_aria_attribute_type_idlist\n\n```\nThe value of '%attribute%' must be a space-separated list of strings that represent DOM element IDs\n```\n\n### a11y_incorrect_aria_attribute_type_integer\n\n```\nThe value of '%attribute%' must be an integer\n```\n\n### a11y_incorrect_aria_attribute_type_token\n\n```\nThe value of '%attribute%' must be exactly one of %values%\n```\n\n### a11y_incorrect_aria_attribute_type_tokenlist\n\n```\nThe value of '%attribute%' must be a space-separated list of one or more of %values%\n```\n\n### a11y_incorrect_aria_attribute_type_tristate\n\n```\nThe value of '%attribute%' must be exactly one of true, false, or mixed\n```\n\n### a11y_interactive_supports_focus\n\n```\nElements with the '%role%' interactive role must have a tabindex value\n```\n\nEnforce that elements with an interactive role and interactive handlers (mouse or key press) must be focusable or tabbable.\n\n```svelte\n<!-- A11y: Elements with the 'button' interactive role must have a tabindex value. -->\n<div role=\"button\" onkeypress={() => {}} />\n```\n\n### a11y_invalid_attribute\n\n```\n'%href_value%' is not a valid %href_attribute% attribute\n```\n\nEnforce that attributes important for accessibility have a valid value. For example, `href` should not be empty, `'#'`, or `javascript:`.\n\n```svelte\n<!-- A11y: '' is not a valid href attribute -->\n<a href=\"\">invalid</a>\n```\n\n### a11y_label_has_associated_control\n\n```\nA form label must be associated with a control\n```\n\nEnforce that a label tag has a text label and an associated control.\n\nThere are two supported ways to associate a label with a control:\n\n- Wrapping a control in a label tag.\n- Adding `for` to a label and assigning it the ID of an input on the page.\n\n```svelte\n<label for=\"id\">B</label>\n\n<label>C <input type=\"text\" /></label>\n\n<!-- A11y: A form label must be associated with a control. -->\n<label>A</label>\n```\n\n### a11y_media_has_caption\n\n```\n`<video>` elements must have a `<track kind=\"captions\">`\n```\n\nProviding captions for media is essential for deaf users to follow along. Captions should be a transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information. Not only is this important for accessibility, but can also be useful for all users in the case that the media is unavailable (similar to `alt` text on an image when an image is unable to load).\n\nThe captions should contain all important and relevant information to understand the corresponding media. This may mean that the captions are not a 1:1 mapping of the dialogue in the media content. However, captions are not necessary for video components with the `muted` attribute.\n\n```svelte\n<video><track kind=\"captions\" /></video>\n\n<audio muted></audio>\n\n<!-- A11y: Media elements must have a <track kind=\\\"captions\\\"> -->\n<video></video>\n\n<!-- A11y: Media elements must have a <track kind=\\\"captions\\\"> -->\n<video><track /></video>\n```\n\n### a11y_misplaced_role\n\n```\n`<%name%>` should not have role attribute\n```\n\nCertain reserved DOM elements do not support ARIA roles, states and properties. This is often because they are not visible, for example `meta`, `html`, `script`, `style`. This rule enforces that these DOM elements do not contain the `role` props.\n\n```svelte\n<!-- A11y: <meta> should not have role attribute -->\n<meta role=\"tooltip\" />\n```\n\n### a11y_misplaced_scope\n\n```\nThe scope attribute should only be used with `<th>` elements\n```\n\nThe scope attribute should only be used on `<th>` elements.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: The scope attribute should only be used with <th> elements -->\n<div scope=\"row\" />\n```\n\n### a11y_missing_attribute\n\n```\n`<%name%>` element should have %article% %sequence% attribute\n```\n\nEnforce that attributes required for accessibility are present on an element. This includes the following checks:\n\n- `<a>` should have an href (unless it's a [fragment-defining tag](https://github.com/sveltejs/svelte/issues/4697))\n- `<area>` should have alt, aria-label, or aria-labelledby\n- `<html>` should have lang\n- `<iframe>` should have title\n- `<img>` should have alt\n- `<object>` should have title, aria-label, or aria-labelledby\n- `<input type=\"image\">` should have alt, aria-label, or aria-labelledby\n\n```svelte\n<!-- A11y: <input type=\\\"image\\\"> element should have an alt, aria-label or aria-labelledby attribute -->\n<input type=\"image\" />\n\n<!-- A11y: <html> element should have a lang attribute -->\n<html></html>\n\n<!-- A11y: <a> element should have an href attribute -->\n<a>text</a>\n```\n\n### a11y_missing_content\n\n```\n`<%name%>` element should contain text\n```\n\nEnforce that heading elements (`h1`, `h2`, etc.) and anchors have content and that the content is accessible to screen readers\n\n```svelte\n<!-- A11y: <a> element should have child content -->\n<a href=\"/foo\"></a>\n\n<!-- A11y: <h1> element should have child content -->\n<h1></h1>\n```\n\n### a11y_mouse_events_have_key_events\n\n```\n'%event%' event must be accompanied by '%accompanied_by%' event\n```\n\nEnforce that `onmouseover` and `onmouseout` are accompanied by `onfocus` and `onblur`, respectively. This helps to ensure that any functionality triggered by these mouse events is also accessible to keyboard users.\n\n```svelte\n<!-- A11y: onmouseover must be accompanied by onfocus -->\n<div onmouseover={handleMouseover} />\n\n<!-- A11y: onmouseout must be accompanied by onblur -->\n<div onmouseout={handleMouseout} />\n```\n\n### a11y_no_abstract_role\n\n```\nAbstract role '%role%' is forbidden\n```\n\n### a11y_no_interactive_element_to_noninteractive_role\n\n```\n`<%element%>` cannot have role '%role%'\n```\n\n[WAI-ARIA](https://www.w3.org/TR/wai-aria-1.1/#usage_intro) roles should not be used to convert an interactive element to a non-interactive element. Non-interactive ARIA roles include `article`, `banner`, `complementary`, `img`, `listitem`, `main`, `region` and `tooltip`.\n\n```svelte\n<!-- A11y: <textarea> cannot have role 'listitem' -->\n<textarea role=\"listitem\"></textarea>\n```\n\n### a11y_no_noninteractive_element_interactions\n\n```\nNon-interactive element `<%element%>` should not be assigned mouse or keyboard event listeners\n```\n\nA non-interactive element does not support event handlers (mouse and key handlers). Non-interactive elements include `<main>`, `<area>`, `<h1>` (,`<h2>`, etc), `<p>`, `<img>`, `<li>`, `<ul>` and `<ol>`. Non-interactive [WAI-ARIA roles](https://www.w3.org/TR/wai-aria-1.1/#usage_intro) include `article`, `banner`, `complementary`, `img`, `listitem`, `main`, `region` and `tooltip`.\n\n```sv\n<!-- `A11y: Non-interactive element <li> should not be assigned mouse or keyboard event listeners.` -->\n<li onclick={() => {}}></li>\n\n<!-- `A11y: Non-interactive element <div> should not be assigned mouse or keyboard event listeners.` -->\n<div role=\"listitem\" onclick={() => {}}></div>\n```\n\n### a11y_no_noninteractive_element_to_interactive_role\n\n```\nNon-interactive element `<%element%>` cannot have interactive role '%role%'\n```\n\n[WAI-ARIA](https://www.w3.org/TR/wai-aria-1.1/#usage_intro) roles should not be used to convert a non-interactive element to an interactive element. Interactive ARIA roles include `button`, `link`, `checkbox`, `menuitem`, `menuitemcheckbox`, `menuitemradio`, `option`, `radio`, `searchbox`, `switch` and `textbox`.\n\n```svelte\n<!-- A11y: Non-interactive element <h3> cannot have interactive role 'searchbox' -->\n<h3 role=\"searchbox\">Button</h3>\n```\n\n### a11y_no_noninteractive_tabindex\n\n```\nnoninteractive element cannot have nonnegative tabIndex value\n```\n\nTab key navigation should be limited to elements on the page that can be interacted with.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: noninteractive element cannot have nonnegative tabIndex value -->\n<div tabindex=\"0\"></div>\n```\n\n### a11y_no_redundant_roles\n\n```\nRedundant role '%role%'\n```\n\nSome HTML elements have default ARIA roles. Giving these elements an ARIA role that is already set by the browser [has no effect](https://www.w3.org/TR/using-aria/#aria-does-nothing) and is redundant.\n\n```svelte\n<!-- A11y: Redundant role 'button' -->\n<button role=\"button\">...</button>\n\n<!-- A11y: Redundant role 'img' -->\n<img role=\"img\" src=\"foo.jpg\" />\n```\n\n### a11y_no_static_element_interactions\n\n```\n`<%element%>` with a %handler% handler must have an ARIA role\n```\n\nElements like `<div>` with interactive handlers like `click` must have an ARIA role.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: <div> with click handler must have an ARIA role -->\n<div onclick={() => ''}></div>\n```\n\n### a11y_positive_tabindex\n\n```\nAvoid tabindex values above zero\n```\n\nAvoid positive `tabindex` property values. This will move elements out of the expected tab order, creating a confusing experience for keyboard users.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: avoid tabindex values above zero -->\n<div tabindex=\"1\"></div>\n```\n\n### a11y_role_has_required_aria_props\n\n```\nElements with the ARIA role \"%role%\" must have the following attributes defined: %props%\n```\n\nElements with ARIA roles must have all required attributes for that role.\n\n```svelte\n<!-- A11y: A11y: Elements with the ARIA role \"checkbox\" must have the following attributes defined: \"aria-checked\" -->\n<span role=\"checkbox\" aria-labelledby=\"foo\" tabindex=\"0\"></span>\n```\n\n### a11y_role_supports_aria_props\n\n```\nThe attribute '%attribute%' is not supported by the role '%role%'\n```\n\nElements with explicit or implicit roles defined contain only `aria-*` properties supported by that role.\n\n```svelte\n<!-- A11y: The attribute 'aria-multiline' is not supported by the role 'link'. -->\n<div role=\"link\" aria-multiline></div>\n\n<!-- A11y: The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element <li>. -->\n<li aria-required></li>\n```\n\n### a11y_role_supports_aria_props_implicit\n\n```\nThe attribute '%attribute%' is not supported by the role '%role%'. This role is implicit on the element `<%name%>`\n```\n\nElements with explicit or implicit roles defined contain only `aria-*` properties supported by that role.\n\n```svelte\n<!-- A11y: The attribute 'aria-multiline' is not supported by the role 'link'. -->\n<div role=\"link\" aria-multiline></div>\n\n<!-- A11y: The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element <li>. -->\n<li aria-required></li>\n```\n\n### a11y_unknown_aria_attribute\n\n```\nUnknown aria attribute 'aria-%attribute%'\n```\n\n```\nUnknown aria attribute 'aria-%attribute%'. Did you mean '%suggestion%'?\n```\n\nEnforce that only known ARIA attributes are used. This is based on the [WAI-ARIA States and Properties spec](https://www.w3.org/WAI/PF/aria-1.1/states_and_properties).\n\n```svelte\n<!-- A11y: Unknown aria attribute 'aria-labeledby' (did you mean 'labelledby'?) -->\n<input type=\"image\" aria-labeledby=\"foo\" />\n```\n\n### a11y_unknown_role\n\n```\nUnknown role '%role%'\n```\n\n```\nUnknown role '%role%'. Did you mean '%suggestion%'?\n```\n\nElements with ARIA roles must use a valid, non-abstract ARIA role. A reference to role definitions can be found at [WAI-ARIA](https://www.w3.org/TR/wai-aria/#role_definitions) site.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: Unknown role 'toooltip' (did you mean 'tooltip'?) -->\n<div role=\"toooltip\"></div>\n```\n\n### attribute_avoid_is\n\n```\nThe \"is\" attribute is not supported cross-browser and should be avoided\n```\n\n### attribute_global_event_reference\n\n```\nYou are referencing `globalThis.%name%`. Did you forget to declare a variable with that name?\n```\n\n### attribute_illegal_colon\n\n```\nAttributes should not contain ':' characters to prevent ambiguity with Svelte directives\n```\n\n### attribute_invalid_property_name\n\n```\n'%wrong%' is not a valid HTML attribute. Did you mean '%right%'?\n```\n\n### attribute_quoted\n\n```\nQuoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\n```\n\n### bidirectional_control_characters\n\n```\nA bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\n```\n\nBidirectional control characters can alter the direction in which text appears to be in. For example, via control characters, you can make `defabc` look like `abcdef`. As a result, if you were to unknowingly copy and paste some code that has these control characters, they may alter the behavior of your code in ways you did not intend. See [trojansource.codes](https://trojansource.codes/) for more information.\n\n### bind_invalid_each_rest\n\n```\nThe rest operator (...) will create a new object and binding '%name%' with the original object will not work\n```\n\n### block_empty\n\n```\nEmpty block\n```\n\n### component_name_lowercase\n\n```\n`<%name%>` will be treated as an HTML element unless it begins with a capital letter\n```\n\n### css_unused_selector\n\n```\nUnused CSS selector \"%name%\"\n```\n\nSvelte traverses both the template and the `<style>` tag to find out which of the CSS selectors are not used within the template, so it can remove them.\n\nIn some situations a selector may target an element that is not 'visible' to the compiler, for example because it is part of an `{@html ...}` tag or you're overriding styles in a child component. In these cases, use [`:global`](/docs/svelte/global-styles) to preserve the selector as-is:\n\n```svelte\n<div class=\"post\">{@html content}</div>\n\n<style>\n  .post :global {\n    p {...}\n  }\n</style>\n```\n\n### custom_element_props_identifier\n\n```\nUsing a rest element or a non-destructured declaration with `$props()` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the `customElement.props` option.\n```\n\n### element_implicitly_closed\n\n```\nThis element is implicitly closed by the following `%tag%`, which can cause an unexpected DOM structure. Add an explicit `%closing%` to avoid surprises.\n```\n\nIn HTML, some elements are implicitly closed by another element. For example, you cannot nest a `<p>` inside another `<p>`:\n\n```html\n<!-- this HTML... -->\n<p><p>hello</p>\n\n<!-- results in this DOM structure -->\n<p></p>\n<p>hello</p>\n```\n\nSimilarly, a parent element's closing tag will implicitly close all child elements, even if the `</` was a typo and you meant to create a _new_ element. To avoid ambiguity, it's always a good idea to have an explicit closing tag.\n\n### element_invalid_self_closing_tag\n\n```\nSelf-closing HTML tags for non-void elements are ambiguous — use `<%name% ...></%name%>` rather than `<%name% ... />`\n```\n\nIn HTML, there's [no such thing as a self-closing tag](https://jakearchibald.com/2023/against-self-closing-tags-in-html/). While this _looks_ like a self-contained element with some text next to it...\n\n```html\n<div>\n\t<span class=\"icon\" /> some text!\n</div>\n```\n\n...a spec-compliant HTML parser (such as a browser) will in fact parse it like this, with the text _inside_ the icon:\n\n```html\n<div>\n\t<span class=\"icon\"> some text! </span>\n</div>\n```\n\nSome templating languages (including Svelte) will 'fix' HTML by turning `<span />` into `<span></span>`. Others adhere to the spec. Both result in ambiguity and confusion when copy-pasting code between different contexts, so Svelte prompts you to resolve the ambiguity directly by having an explicit closing tag.\n\nTo automate this, run the dedicated migration:\n\n```sh\nnpx sv migrate self-closing-tags\n```\n\nIn a future version of Svelte, self-closing tags may be upgraded from a warning to an error.\n\n### event_directive_deprecated\n\n```\nUsing `on:%name%` to listen to the %name% event is deprecated. Use the event attribute `on%name%` instead\n```\n\nSee [the migration guide](v5-migration-guide#Event-changes) for more info.\n\n### export_let_unused\n\n```\nComponent has unused export property '%name%'. If it is for external reference only, please consider using `export const %name%`\n```\n\n### legacy_code\n\n```\n`%code%` is no longer valid — please use `%suggestion%` instead\n```\n\n### legacy_component_creation\n\n```\nSvelte 5 components are no longer classes. Instantiate them using `mount` or `hydrate` (imported from 'svelte') instead.\n```\n\nSee the [migration guide](v5-migration-guide#Components-are-no-longer-classes) for more info.\n\n### node_invalid_placement_ssr\n\n```\n%message%. When rendering this component on the server, the resulting HTML will be modified by the browser (by moving, removing, or inserting elements), likely resulting in a `hydration_mismatch` warning\n```\n\nHTML restricts where certain elements can appear. In case of a violation the browser will 'repair' the HTML in a way that breaks Svelte's assumptions about the structure of your components. Some examples:\n\n- `<p>hello <div>world</div></p>` will result in `<p>hello </p><div>world</div><p></p>` (the `<div>` autoclosed the `<p>` because `<p>` cannot contain block-level elements)\n- `<option><div>option a</div></option>` will result in `<option>option a</option>` (the `<div>` is removed)\n- `<table><tr><td>cell</td></tr></table>` will result in `<table><tbody><tr><td>cell</td></tr></tbody></table>` (a `<tbody>` is auto-inserted)\n\nThis code will work when the component is rendered on the client (which is why this is a warning rather than an error), but if you use server rendering it will cause hydration to fail.\n\n### non_reactive_update\n\n```\n`%name%` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates\n```\n\nThis warning is thrown when the compiler detects the following:\n- a variable was declared without `$state` or `$state.raw`\n- the variable is reassigned\n- the variable is read in a reactive context\n\nIn this case, changing the value will not correctly trigger updates. Example:\n\n```svelte\n<script>\n\tlet reactive = $state('reactive');\n\tlet stale = 'stale';\n</script>\n\n<p>This value updates: {reactive}</p>\n<p>This value does not update: {stale}</p>\n\n<button onclick={() => {\n\tstale = 'updated';\n\treactive = 'updated';\n}}>update</button>\n```\n\nTo fix this, wrap your variable declaration with `$state`.\n\n### options_deprecated_accessors\n\n```\nThe `accessors` option has been deprecated. It will have no effect in runes mode\n```\n\n### options_deprecated_immutable\n\n```\nThe `immutable` option has been deprecated. It will have no effect in runes mode\n```\n\n### options_missing_custom_element\n\n```\nThe `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\n```\n\n### options_removed_enable_sourcemap\n\n```\nThe `enableSourcemap` option has been removed. Source maps are always generated now, and tooling can choose to ignore them\n```\n\n### options_removed_hydratable\n\n```\nThe `hydratable` option has been removed. Svelte components are always hydratable now\n```\n\n### options_removed_loop_guard_timeout\n\n```\nThe `loopGuardTimeout` option has been removed\n```\n\n### options_renamed_ssr_dom\n\n```\n`generate: \"dom\"` and `generate: \"ssr\"` options have been renamed to \"client\" and \"server\" respectively\n```\n\n### perf_avoid_inline_class\n\n```\nAvoid 'new class' — instead, declare the class at the top level scope\n```\n\n### perf_avoid_nested_class\n\n```\nAvoid declaring classes below the top level scope\n```\n\n### reactive_declaration_invalid_placement\n\n```\nReactive declarations only exist at the top level of the instance script\n```\n\n### reactive_declaration_module_script_dependency\n\n```\nReassignments of module-level declarations will not cause reactive statements to update\n```\n\n### script_context_deprecated\n\n```\n`context=\"module\"` is deprecated, use the `module` attribute instead\n```\n\n```svelte\n<script ---context=\"module\"--- +++module+++>\n\tlet foo = 'bar';\n</script>\n```\n\n### script_unknown_attribute\n\n```\nUnrecognized attribute — should be one of `generics`, `lang` or `module`. If this exists for a preprocessor, ensure that the preprocessor removes it\n```\n\n### slot_element_deprecated\n\n```\nUsing `<slot>` to render parent content is deprecated. Use `{@render ...}` tags instead\n```\n\nSee [the migration guide](v5-migration-guide#Snippets-instead-of-slots) for more info.\n\n### state_referenced_locally\n\n```\nThis reference only captures the initial value of `%name%`. Did you mean to reference it inside a %type% instead?\n```\n\nThis warning is thrown when the compiler detects the following:\n\n- A reactive variable is declared\n- ...and later reassigned...\n- ...and referenced in the same scope\n\nThis 'breaks the link' to the original state declaration. For example, if you pass the state to a function, the function loses access to the state once it is reassigned:\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport { setContext } from 'svelte';\n\n\tlet count = $state(0);\n\n\t// warning: state_referenced_locally\n\tsetContext('count', count);\n</script>\n\n<button onclick={() => count++}>\n\tincrement\n</button>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getContext } from 'svelte';\n\n\tconst count = getContext('count');\n</script>\n\n<!-- This will never update -->\n<p>The count is {count}</p>\n```\n\nTo fix this, reference the variable such that it is lazily evaluated. For the above example, this can be achieved by wrapping `count` in a function:\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport { setContext } from 'svelte';\n\n\tlet count = $state(0);\n\tsetContext('count', +++() => count+++);\n</script>\n\n<button onclick={() => count++}>\n\tincrement\n</button>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getContext } from 'svelte';\n\n\tconst count = getContext('count');\n</script>\n\n<!-- This will update -->\n<p>The count is {+++count()+++}</p>\n```\n\nFor more info, see [Passing state into functions]($state#Passing-state-into-functions).\n\n### store_rune_conflict\n\n```\nIt looks like you're using the `$%name%` rune, but there is a local binding called `%name%`. Referencing a local variable with a `$` prefix will create a store subscription. Please rename `%name%` to avoid the ambiguity\n```\n\n### svelte_component_deprecated\n\n```\n`<svelte:component>` is deprecated in runes mode — components are dynamic by default\n```\n\nIn previous versions of Svelte, the component constructor was fixed when the component was rendered. In other words, if you wanted `<X>` to re-render when `X` changed, you would either have to use `<svelte:component this={X}>` or put the component inside a `{#key X}...{/key}` block.\n\nIn Svelte 5 this is no longer true — if `X` changes, `<X>` re-renders.\n\nIn some cases `<object.property>` syntax can be used as a replacement; a lowercased variable with property access is recognized as a component in Svelte 5.\n\nFor complex component resolution logic, an intermediary, capitalized variable may be necessary. E.g. in places where `@const` can be used:\n\n<!-- prettier-ignore -->\n```svelte\n{#each items as item}\n\t---<svelte:component this={item.condition ? Y : Z} />---\n\t+++{@const Component = item.condition ? Y : Z}+++\n\t+++<Component />+++\n{/each}\n```\n\nA derived value may be used in other contexts:\n\n<!-- prettier-ignore -->\n```svelte\n<script>\n\t// ...\n\tlet condition = $state(false);\n\t+++const Component = $derived(condition ? Y : Z);+++\n</script>\n\n---<svelte:component this={condition ? Y : Z} />---\n+++<Component />+++\n```\n\n### svelte_element_invalid_this\n\n```\n`this` should be an `{expression}`. Using a string attribute value will cause an error in future versions of Svelte\n```\n\n### svelte_self_deprecated\n\n```\n`<svelte:self>` is deprecated — use self-imports (e.g. `import %name% from './%basename%'`) instead\n```\n\nSee [the note in the docs](legacy-svelte-self) for more info.\n\n### unknown_code\n\n```\n`%code%` is not a recognised code\n```\n\n```\n`%code%` is not a recognised code (did you mean `%suggestion%`?)\n```\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/server-errors.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### async_local_storage_unavailable\n\n```\nThe node API `AsyncLocalStorage` is not available, but is required to use async server rendering.\n```\n\nSome platforms require configuration flags to enable this API. Consult your platform's documentation.\n\n### await_invalid\n\n```\nEncountered asynchronous work while rendering synchronously.\n```\n\nYou (or the framework you're using) called [`render(...)`](svelte-server#render) with a component containing an `await` expression. Either `await` the result of `render` or wrap the `await` (or the component containing it) in a [`<svelte:boundary>`](svelte-boundary) with a `pending` snippet.\n\n### dynamic_element_invalid_tag\n\n```\n`<svelte:element this=\"%tag%\">` is not a valid element name — the element will not be rendered\n```\n\nThe value passed to the `this` prop of `<svelte:element>` must be a valid HTML element, SVG element, MathML element, or custom element name. A value containing invalid characters (such as whitespace or special characters) was provided, which could be a security risk. Ensure only valid tag names are passed.\n\n### html_deprecated\n\n```\nThe `html` property of server render results has been deprecated. Use `body` instead.\n```\n\n### hydratable_clobbering\n\n```\nAttempted to set `hydratable` with key `%key%` twice with different values.\n\n%stack%\n```\n\nThis error occurs when using `hydratable` multiple times with the same key. To avoid this, you can:\n- Ensure all invocations with the same key result in the same value\n- Update the keys to make both instances unique\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\n  // which one should \"win\" and be serialized in the rendered response?\n  const one = hydratable('not-unique', () => 1);\n  const two = hydratable('not-unique', () => 2);\n</script>\n```\n\n### hydratable_serialization_failed\n\n```\nFailed to serialize `hydratable` data for key `%key%`.\n\n`hydratable` can serialize anything [`uneval` from `devalue`](https://npmjs.com/package/uneval) can, plus Promises.\n\nCause:\n%stack%\n```\n\n### invalid_csp\n\n```\n`csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously.\n```\n\n### invalid_id_prefix\n\n```\nThe `idPrefix` option cannot include `--`.\n```\n\n### lifecycle_function_unavailable\n\n```\n`%name%(...)` is not available on the server\n```\n\nCertain methods such as `mount` cannot be invoked while running in a server context. Avoid calling them eagerly, i.e. not during render.\n\n### server_context_required\n\n```\nCould not resolve `render` context.\n```\n\nCertain functions such as `hydratable` cannot be invoked outside of a `render(...)` call, such as at the top level of a module.\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/server-warnings.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### unresolved_hydratable\n\n```\nA `hydratable` value with key `%key%` was created, but at least part of it was not used during the render.\n\nThe `hydratable` was initialized in:\n%stack%\n```\n\nThe most likely cause of this is creating a `hydratable` in the `script` block of your component and then `await`ing\nthe result inside a `svelte:boundary` with a `pending` snippet:\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\timport { getUser } from '$lib/get-user.js';\n\n\tconst user = hydratable('user', getUser);\n</script>\n\n<svelte:boundary>\n\t<h1>{(await user).name}</h1>\n\n\t{#snippet pending()}\n\t\t<div>Loading...</div>\n\t{/snippet}\n</svelte:boundary>\n```\n\nConsider inlining the `hydratable` call inside the boundary so that it's not called on the server.\n\nNote that this can also happen when a `hydratable` contains multiple promises and some but not all of them have been used.\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/shared-errors.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### experimental_async_required\n\n```\nCannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n```\n\n### invalid_default_snippet\n\n```\nCannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n```\n\nThis error would be thrown in a setup like this:\n\n```svelte\n<!--- file: Parent.svelte --->\n<List {items} let:entry>\n    <span>{entry}</span>\n</List>\n```\n\n```svelte\n<!--- file: List.svelte --->\n<script>\n    let { items, children } = $props();\n</script>\n\n<ul>\n    {#each items as item}\n        <li>{@render children(item)}</li>\n    {/each}\n</ul>\n```\n\nHere, `List.svelte` is using `{@render children(item)` which means it expects `Parent.svelte` to use snippets. Instead, `Parent.svelte` uses the deprecated `let:` directive. This combination of APIs is incompatible, hence the error.\n\n### invalid_snippet_arguments\n\n```\nA snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n```\n\n### invariant_violation\n\n```\nAn invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n```\n\n### lifecycle_outside_component\n\n```\n`%name%(...)` can only be used during component initialisation\n```\n\nCertain lifecycle methods can only be used during component initialisation. To fix this, make sure you're invoking the method inside the _top level of the instance script_ of your component.\n\n```svelte\n<script>\n    import { onMount } from 'svelte';\n\n    function handleClick() {\n        // This is wrong\n        onMount(() => {})\n    }\n\n    // This is correct\n    onMount(() => {})\n</script>\n\n<button onclick={handleClick}>click me</button>\n```\n\n### missing_context\n\n```\nContext was not set in a parent component\n```\n\nThe [`createContext()`](svelte#createContext) utility returns a `[get, set]` pair of functions. `get` will throw an error if `set` was not used to set the context in a parent component.\n\n### snippet_without_render_tag\n\n```\nAttempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n```\n\nA component throwing this error will look something like this (`children` is not being rendered):\n\n```svelte\n<script>\n    let { children } = $props();\n</script>\n\n{children}\n```\n\n...or like this (a parent component is passing a snippet where a non-snippet value is expected):\n\n```svelte\n<!--- file: Parent.svelte --->\n<ChildComponent>\n  {#snippet label()}\n    <span>Hi!</span>\n  {/snippet}\n</ChildComponent>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n  let { label } = $props();\n</script>\n\n<!-- This component doesn't expect a snippet, but the parent provided one -->\n<p>{label}</p>\n```\n\n### store_invalid_shape\n\n```\n`%name%` is not a store with a `subscribe` method\n```\n\n### svelte_element_invalid_this_value\n\n```\nThe `this` prop on `<svelte:element>` must be a string, if defined\n```\n"
  },
  {
    "path": "documentation/docs/98-reference/.generated/shared-warnings.md",
    "content": "<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n### dynamic_void_element_content\n\n```\n`<svelte:element this=\"%tag%\">` is a void element — it cannot have content\n```\n\nElements such as `<input>` cannot have content, any children passed to these elements will be ignored.\n\n### state_snapshot_uncloneable\n\n```\nValue cannot be cloned with `$state.snapshot` — the original value was returned\n```\n\n```\nThe following properties cannot be cloned with `$state.snapshot` — the return value contains the originals:\n\n%properties%\n```\n\n`$state.snapshot` tries to clone the given value in order to return a reference that no longer changes. Certain objects may not be cloneable, in which case the original value is returned. In the following example, `property` is cloned, but `window` is not, because DOM elements are uncloneable:\n\n```js\nconst object = $state({ property: 'this is cloneable', window })\nconst snapshot = $state.snapshot(object);\n```\n"
  },
  {
    "path": "documentation/docs/98-reference/20-svelte.md",
    "content": "---\ntitle: svelte\n---\n\n> MODULE: svelte\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-action.md",
    "content": "---\ntitle: svelte/action\n---\n\nThis module provides types for [actions](use), which have been superseded by [attachments](@attach).\n\n> MODULE: svelte/action\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-animate.md",
    "content": "---\ntitle: svelte/animate\n---\n\n> MODULE: svelte/animate\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-attachments.md",
    "content": "---\ntitle: svelte/attachments\ntags: attachments\n---\n\n> MODULE: svelte/attachments\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-compiler.md",
    "content": "---\ntitle: svelte/compiler\n---\n\n> MODULE: svelte/compiler\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-easing.md",
    "content": "---\ntitle: svelte/easing\n---\n\n> MODULE: svelte/easing\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-events.md",
    "content": "---\ntitle: svelte/events\n---\n\n> MODULE: svelte/events\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-legacy.md",
    "content": "---\ntitle: svelte/legacy\n---\n\nThis module provides various functions for use during the migration, since some features can't be replaced one to one with new features. All imports are marked as deprecated and should be migrated away from over time.\n\n> MODULE: svelte/legacy\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-motion.md",
    "content": "---\ntitle: svelte/motion\n---\n\n> MODULE: svelte/motion\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-reactivity-window.md",
    "content": "---\ntitle: svelte/reactivity/window\n---\n\nThis module exports reactive versions of various `window` values, each of which has a reactive `current` property that you can reference in reactive contexts (templates, [deriveds]($derived) and [effects]($effect)) without using [`<svelte:window>`](svelte-window) bindings or manually creating your own event listeners.\n\n```svelte\n<script>\n\timport { innerWidth, innerHeight } from 'svelte/reactivity/window';\n</script>\n\n<p>{innerWidth.current}x{innerHeight.current}</p>\n```\n\n> MODULE: svelte/reactivity/window\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-reactivity.md",
    "content": "---\ntitle: svelte/reactivity\n---\n\nSvelte provides reactive versions of various built-ins like [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) and [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) that can be used just like their native counterparts, as well as a handful of additional utilities for handling reactivity.\n\n> MODULE: svelte/reactivity\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-server.md",
    "content": "---\ntitle: svelte/server\n---\n\n> MODULE: svelte/server\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-store.md",
    "content": "---\ntitle: svelte/store\n---\n\n> MODULE: svelte/store\n"
  },
  {
    "path": "documentation/docs/98-reference/21-svelte-transition.md",
    "content": "---\ntitle: svelte/transition\ntags: transitions\n---\n\n> MODULE: svelte/transition\n"
  },
  {
    "path": "documentation/docs/98-reference/30-compiler-errors.md",
    "content": "---\ntitle: 'Compiler errors'\n---\n\n@include .generated/compile-errors.md\n"
  },
  {
    "path": "documentation/docs/98-reference/30-compiler-warnings.md",
    "content": "---\ntitle: 'Compiler warnings'\n---\n\nSvelte warns you at compile time if it catches potential mistakes, such as writing inaccessible markup.\n\nSome warnings may be incorrect in your concrete use case. You can disable such false positives by placing a `<!-- svelte-ignore <code> -->` comment above the line that causes the warning. Example:\n\n```svelte\n<!-- svelte-ignore a11y_autofocus -->\n<input autofocus />\n```\n\nYou can list multiple rules in a single comment (separated by commas), and add an explanatory note (in parentheses) alongside them:\n\n```svelte\n<!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_static_element_interactions (because of reasons) -->\n<div onclick>...</div>\n```\n\n@include .generated/compile-warnings.md\n"
  },
  {
    "path": "documentation/docs/98-reference/30-runtime-errors.md",
    "content": "---\ntitle: 'Runtime errors'\n---\n\n## Client errors\n\n@include .generated/client-errors.md\n\n## Server errors\n\n@include .generated/server-errors.md\n\n## Shared errors\n\n@include .generated/shared-errors.md\n"
  },
  {
    "path": "documentation/docs/98-reference/30-runtime-warnings.md",
    "content": "---\ntitle: 'Runtime warnings'\n---\n\n## Client warnings\n\n@include .generated/client-warnings.md\n\n## Shared warnings\n\n@include .generated/shared-warnings.md\n"
  },
  {
    "path": "documentation/docs/98-reference/index.md",
    "content": "---\ntitle: Reference\n---\n"
  },
  {
    "path": "documentation/docs/99-legacy/00-legacy-overview.md",
    "content": "---\ntitle: Overview\n---\n\nSvelte 5 introduced some significant changes to Svelte's API, including [runes](what-are-runes), [snippets](snippet) and event attributes. As a result, some Svelte 3/4 features are deprecated (though supported for now, unless otherwise specified) and will eventually be removed. We recommend that you incrementally [migrate your existing code](v5-migration-guide).\n\nThe following pages document these features for\n\n- people still using Svelte 3/4\n- people using Svelte 5, but with components that haven't yet been migrated\n\nSince Svelte 3/4 syntax still works in Svelte 5, we will distinguish between _legacy mode_ and _runes mode_. Once a component is in runes mode (which you can opt into by using runes, or by explicitly setting the `runes: true` compiler option), legacy mode features are no longer available.\n\nIf you're exclusively interested in the Svelte 3/4 syntax, you can browse its documentation at [v4.svelte.dev](https://v4.svelte.dev).\n"
  },
  {
    "path": "documentation/docs/99-legacy/01-legacy-let.md",
    "content": "---\ntitle: Reactive let/var declarations\n---\n\nIn runes mode, reactive state is explicitly declared with the [`$state` rune]($state).\n\nIn legacy mode, variables declared at the top level of a component are automatically considered _reactive_. Reassigning or mutating these variables (`count += 1` or `object.x = y`) will cause the UI to update.\n\n```svelte\n<script>\n\tlet count = 0;\n</script>\n\n<button on:click={() => count += 1}>\n\tclicks: {count}\n</button>\n```\n\nBecause Svelte's legacy mode reactivity is based on _assignments_, using array methods like `.push()` and `.splice()` won't automatically trigger updates. A subsequent assignment is required to 'tell' the compiler to update the UI:\n\n```svelte\n<script>\n\tlet numbers = [1, 2, 3, 4];\n\n\tfunction addNumber() {\n\t\t// this method call does not trigger an update\n\t\tnumbers.push(numbers.length + 1);\n\n\t\t// this assignment will update anything\n\t\t// that depends on `numbers`\n\t\tnumbers = numbers;\n\t}\n</script>\n```\n"
  },
  {
    "path": "documentation/docs/99-legacy/02-legacy-reactive-assignments.md",
    "content": "---\ntitle: Reactive $: statements\n---\n\nIn runes mode, reactions to state updates are handled with the [`$derived`]($derived) and [`$effect`]($effect) runes.\n\nIn legacy mode, any top-level statement (i.e. not inside a block or a function) can be made reactive by prefixing it with a `$:` [label](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label). These statements run after other code in the `<script>` and before the component markup is rendered, then whenever the values that they depend on change.\n\n```svelte\n<script>\n\tlet a = 1;\n\tlet b = 2;\n\n\t// this is a 'reactive statement', and it will re-run\n\t// when `a`, `b` or `sum` change\n\t$: console.log(`${a} + ${b} = ${sum}`);\n\n\t// this is a 'reactive assignment' — `sum` will be\n\t// recalculated when `a` or `b` change. It is\n\t// not necessary to declare `sum` separately\n\t$: sum = a + b;\n</script>\n```\n\nStatements are ordered _topologically_ by their dependencies and their assignments: since the `console.log` statement depends on `sum`, `sum` is calculated first even though it appears later in the source.\n\nMultiple statements can be combined by putting them in a block:\n\n```js\n// @noErrors\n$: {\n\t// recalculate `total` when `items` changes\n\ttotal = 0;\n\n\tfor (const item of items) {\n\t\ttotal += item.value;\n\t}\n}\n```\n\nThe left-hand side of a reactive assignments can be an identifier, or it can be a destructuring assignment:\n\n```js\n// @noErrors\n$: ({ larry, moe, curly } = stooges);\n```\n\n## Understanding dependencies\n\nThe dependencies of a `$:` statement are determined at compile time — they are whichever variables are referenced (but not assigned to) inside the statement.\n\nIn other words, a statement like this will _not_ re-run when `count` changes, because the compiler cannot 'see' the dependency:\n\n```js\n// @noErrors\nlet count = 0;\nlet double = () => count * 2;\n\n$: doubled = double();\n```\n\nSimilarly, topological ordering will fail if dependencies are referenced indirectly: `z` will never update, because `y` is not considered 'dirty' when the update occurs. Moving `$: z = y` below `$: setY(x)` will fix it:\n\n```svelte\n<script>\n\tlet x = 0;\n\tlet y = 0;\n\n\t$: z = y;\n\t$: setY(x);\n\n\tfunction setY(value) {\n\t\ty = value;\n\t}\n</script>\n```\n\n## Browser-only code\n\nReactive statements run during server-side rendering as well as in the browser. This means that any code that should only run in the browser must be wrapped in an `if` block:\n\n```js\n// @noErrors\n$: if (browser) {\n\tdocument.title = title;\n}\n```\n"
  },
  {
    "path": "documentation/docs/99-legacy/03-legacy-export-let.md",
    "content": "---\ntitle: export let\n---\n\nIn runes mode, [component props](basic-markup#Component-props) are declared with the [`$props`]($props) rune, allowing parent components to pass in data.\n\nIn legacy mode, props are marked with the `export` keyword, and can have a default value:\n\n```svelte\n<script>\n\texport let foo;\n\texport let bar = 'default value';\n\n\t// Values that are passed in as props\n\t// are immediately available\n\tconsole.log({ foo });\n</script>\n```\n\nThe default value is used if it would otherwise be `undefined` when the component is created.\n\n> [!NOTE] Unlike in runes mode, if the parent component changes a prop from a defined value to `undefined`, it does not revert to the initial value.\n\nProps without default values are considered _required_, and Svelte will print a warning during development if no value is provided, which you can squelch by specifying `undefined` as the default value:\n\n```js\nexport let foo +++= undefined;+++\n```\n\n## Component exports\n\nAn exported `const`, `class` or `function` declaration is _not_ considered a prop — instead, it becomes part of the component's API:\n\n```svelte\n<!--- file: Greeter.svelte--->\n<script>\n\texport function greet(name) {\n\t\talert(`hello ${name}!`);\n\t}\n</script>\n```\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Greeter from './Greeter.svelte';\n\n\tlet greeter;\n</script>\n\n<Greeter bind:this={greeter} />\n\n<button on:click={() => greeter.greet('world')}>\n\tgreet\n</button>\n```\n\n## Renaming props\n\nThe `export` keyword can appear separately from the declaration. This is useful for renaming props, for example in the case of a reserved word:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\t/** @type {string} */\n\tlet className;\n\n\t// creates a `class` property, even\n\t// though it is a reserved word\n\texport { className as class };\n</script>\n```\n"
  },
  {
    "path": "documentation/docs/99-legacy/04-legacy-$$props-and-$$restProps.md",
    "content": "---\ntitle: $$props and $$restProps\n---\n\nIn runes mode, getting an object containing all the props that were passed in is easy, using the [`$props`]($props) rune.\n\nIn legacy mode, we use `$$props` and `$$restProps`:\n\n- `$$props` contains all the props that were passed in, including ones that are not individually declared with the `export` keyword\n- `$$restProps` contains all the props that were passed in _except_ the ones that were individually declared\n\nFor example, a `<Button>` component might need to pass along all its props to its own `<button>` element, except the `variant` prop:\n\n```svelte\n<script>\n\texport let variant;\n</script>\n\n<button {...$$restProps} class=\"variant-{variant} {$$props.class ?? ''}\">\n\tclick me\n</button>\n\n<style>\n\t.variant-danger {\n\t\tbackground: red;\n\t}\n</style>\n```\n\nIn Svelte 3/4 using `$$props` and `$$restProps` creates a modest performance penalty, so they should only be used when needed.\n"
  },
  {
    "path": "documentation/docs/99-legacy/10-legacy-on.md",
    "content": "---\ntitle: on:\n---\n\nIn runes mode, event handlers are just like any other attribute or prop.\n\nIn legacy mode, we use the `on:` directive:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet count = 0;\n\n\t/** @param {MouseEvent} event */\n\tfunction handleClick(event) {\n\t\tcount += 1;\n\t}\n</script>\n\n<button on:click={handleClick}>\n\tcount: {count}\n</button>\n```\n\nHandlers can be declared inline with no performance penalty:\n\n```svelte\n<button on:click={() => (count += 1)}>\n\tcount: {count}\n</button>\n```\n\nAdd _modifiers_ to element event handlers with the `|` character.\n\n```svelte\n<form on:submit|preventDefault={handleSubmit}>\n\t<!-- the `submit` event's default is prevented,\n\t     so the page won't reload -->\n</form>\n```\n\nThe following modifiers are available:\n\n- `preventDefault` — calls `event.preventDefault()` before running the handler\n- `stopPropagation` — calls `event.stopPropagation()`, preventing the event reaching the next element\n- `stopImmediatePropagation` — calls `event.stopImmediatePropagation()`, preventing other listeners of the same event from being fired.\n- `passive` — improves scrolling performance on touch/wheel events (Svelte will add it automatically where it's safe to do so)\n- `nonpassive` — explicitly set `passive: false`\n- `capture` — fires the handler during the _capture_ phase instead of the _bubbling_ phase\n- `once` — remove the handler after the first time it runs\n- `self` — only trigger handler if `event.target` is the element itself\n- `trusted` — only trigger handler if `event.isTrusted` is `true`. I.e. if the event is triggered by a user action.\n\nModifiers can be chained together, e.g. `on:click|once|capture={...}`.\n\nIf the `on:` directive is used without a value, the component will _forward_ the event, meaning that a consumer of the component can listen for it.\n\n```svelte\n<button on:click>\n\tThe component itself will emit the click event\n</button>\n```\n\nIt's possible to have multiple event listeners for the same event:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\tlet count = 0;\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n\n\t/** @param {MouseEvent} event */\n\tfunction log(event) {\n\t\tconsole.log(event);\n\t}\n</script>\n\n<button on:click={increment} on:click={log}>\n\tclicks: {count}\n</button>\n```\n\n## Component events\n\nComponents can dispatch events by creating a _dispatcher_ when they are initialised:\n\n```svelte\n<!--- file: Stepper.svelte -->\n<script>\n\timport { createEventDispatcher } from 'svelte';\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click={() => dispatch('decrement')}>decrement</button>\n<button on:click={() => dispatch('increment')}>increment</button>\n```\n\n`dispatch` creates a [`CustomEvent`](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent). If a second argument is provided, it becomes the `detail` property of the event object.\n\nA consumer of this component can listen for the dispatched events:\n\n```svelte\n<script>\n\timport Stepper from './Stepper.svelte';\n\n\tlet n = 0;\n</script>\n\n<Stepper\n\ton:decrement={() => n -= 1}\n\ton:increment={() => n += 1}\n/>\n\n<p>n: {n}</p>\n```\n\nComponent events do not bubble — a parent component can only listen for events on its immediate children.\n\nOther than `once`, modifiers are not valid on component event handlers.\n\n> [!NOTE]\n> If you're planning an eventual migration to Svelte 5, use callback props instead. This will make upgrading easier as `createEventDispatcher` is deprecated:\n>\n> ```svelte\n> <!--- file: Stepper.svelte --->\n> <script>\n> \texport let decrement;\n> \texport let increment;\n> </script>\n>\n> <button on:click={decrement}>decrement</button>\n> <button on:click={increment}>increment</button>\n> ```\n"
  },
  {
    "path": "documentation/docs/99-legacy/20-legacy-slots.md",
    "content": "---\ntitle: <slot>\n---\n\nIn Svelte 5, content can be passed to components in the form of [snippets](snippet) and rendered using [render tags](@render).\n\nIn legacy mode, content inside component tags is considered _slotted content_, which can be rendered by the component using a `<slot>` element:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Modal from './Modal.svelte';\n</script>\n\n<Modal>This is some slotted content</Modal>\n```\n\n```svelte\n<!--- file: Modal.svelte --->\n<div class=\"modal\">\n\t<slot></slot>\n</div>\n```\n\n> [!NOTE] If you want to render a regular `<slot>` element, you can use `<svelte:element this={'slot'} />`.\n\n## Named slots\n\nA component can have _named_ slots in addition to the default slot. On the parent side, add a `slot=\"...\"` attribute to an element, component or [`<svelte:fragment>`](legacy-svelte-fragment) directly inside the component tags.\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Modal from './Modal.svelte';\n\n\tlet open = true;\n</script>\n\n{#if open}\n\t<Modal>\n\t\tThis is some slotted content\n\n\t\t+++<div slot=\"buttons\">+++\n\t\t\t<button on:click={() => open = false}>\n\t\t\t\tclose\n\t\t\t</button>\n\t\t+++</div>+++\n\t</Modal>\n{/if}\n```\n\nOn the child side, add a corresponding `<slot name=\"...\">` element:\n\n```svelte\n<!--- file: Modal.svelte --->\n<div class=\"modal\">\n\t<slot></slot>\n\t<hr>\n\t+++<slot name=\"buttons\"></slot>+++\n</div>\n```\n\n## Fallback content\n\nIf no slotted content is provided, a component can define fallback content by putting it inside the `<slot>` element:\n\n```svelte\n<slot>\n\tThis will be rendered if no slotted content is provided\n</slot>\n```\n\n## Passing data to slotted content\n\nSlots can be rendered zero or more times and can pass values _back_ to the parent using props. The parent exposes the values to the slot template using the `let:` directive.\n\n```svelte\n<!--- file: FancyList.svelte --->\n<ul>\n\t{#each items as data}\n\t\t<li class=\"fancy\">\n\t\t\t<!-- 'item' here... -->\n\t\t\t<slot item={process(data)} />\n\t\t</li>\n\t{/each}\n</ul>\n```\n\n```svelte\n<!--- file: App.svelte --->\n<!-- ...corresponds to 'item' here: -->\n<FancyList {items} let:item={processed}>\n\t<div>{processed.text}</div>\n</FancyList>\n```\n\nThe usual shorthand rules apply — `let:item` is equivalent to `let:item={item}`, and `<slot {item}>` is equivalent to `<slot item={item}>`.\n\nNamed slots can also expose values. The `let:` directive goes on the element with the `slot` attribute.\n\n```svelte\n<!--- file: FancyList.svelte --->\n<ul>\n\t{#each items as item}\n\t\t<li class=\"fancy\">\n\t\t\t<slot name=\"item\" item={process(data)} />\n\t\t</li>\n\t{/each}\n</ul>\n\n<slot name=\"footer\" />\n```\n\n```svelte\n<!--- file: App.svelte --->\n<FancyList {items}>\n\t<div slot=\"item\" let:item>{item.text}</div>\n\t<p slot=\"footer\">Copyright (c) 2019 Svelte Industries</p>\n</FancyList>\n```\n\n\n"
  },
  {
    "path": "documentation/docs/99-legacy/21-legacy-$$slots.md",
    "content": "---\ntitle: $$slots\n---\n\nIn runes mode, we know which [snippets](snippet) were provided to a component, as they're just normal props.\n\nIn legacy mode, the way to know if content was provided for a given slot is with the `$$slots` object, whose keys are the names of the slots passed into the component by the parent.\n\n```svelte\n<!--- file: Card.svelte --->\n<div>\n\t<slot name=\"title\" />\n\t{#if $$slots.description}\n\t\t<!-- This <hr> and slot will render only if `slot=\"description\"` is provided. -->\n\t\t<hr />\n\t\t<slot name=\"description\" />\n\t{/if}\n</div>\n```\n\n```svelte\n<!--- file: App.svelte --->\n<Card>\n\t<h1 slot=\"title\">Blog Post Title</h1>\n\t<!-- No slot named \"description\" was provided so the optional slot will not be rendered. -->\n</Card>\n```\n"
  },
  {
    "path": "documentation/docs/99-legacy/22-legacy-svelte-fragment.md",
    "content": "---\ntitle: <svelte:fragment>\n---\n\nThe `<svelte:fragment>` element allows you to place content in a [named slot](legacy-slots) without wrapping it in a container DOM element. This keeps the flow layout of your document intact.\n\n```svelte\n<!--- file: Widget.svelte --->\n<div>\n\t<slot name=\"header\">No header was provided</slot>\n\t<p>Some content between header and footer</p>\n\t<slot name=\"footer\" />\n</div>\n```\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget>\n\t<h1 slot=\"header\">Hello</h1>\n\t<svelte:fragment slot=\"footer\">\n\t\t<p>All rights reserved.</p>\n\t\t<p>Copyright (c) 2019 Svelte Industries</p>\n\t</svelte:fragment>\n</Widget>\n```\n\n> [!NOTE]\n> In Svelte 5+, this concept is obsolete, as snippets don't create a wrapping element\n"
  },
  {
    "path": "documentation/docs/99-legacy/30-legacy-svelte-component.md",
    "content": "---\ntitle: <svelte:component>\n---\n\nIn runes mode, `<MyComponent>` will re-render if the value of `MyComponent` changes. See the [Svelte 5 migration guide](/docs/svelte/v5-migration-guide#svelte:component-is-no-longer-necessary) for an example.\n\nIn legacy mode, it won't — we must use `<svelte:component>`, which destroys and recreates the component instance when the value of its `this` expression changes:\n\n```svelte\n<svelte:component this={MyComponent} />\n```\n\nIf `this` is falsy, no component is rendered.\n"
  },
  {
    "path": "documentation/docs/99-legacy/31-legacy-svelte-self.md",
    "content": "---\ntitle: <svelte:self>\n---\n\nThe `<svelte:self>` element allows a component to include itself, recursively.\n\nIt cannot appear at the top level of your markup; it must be inside an if or each block or passed to a component's slot to prevent an infinite loop.\n\n```svelte\n<script>\n\texport let count;\n</script>\n\n{#if count > 0}\n\t<p>counting down... {count}</p>\n\t<svelte:self count={count - 1} />\n{:else}\n\t<p>lift-off!</p>\n{/if}\n```\n\n> [!NOTE]\n> This concept is obsolete, as components can import themselves:\n> ```svelte\n> <!--- file: App.svelte --->\n> <script>\n> \timport Self from './App.svelte'\n> \texport let count;\n> </script>\n>\n> {#if count > 0}\n> \t<p>counting down... {count}</p>\n> \t<Self count={count - 1} />\n> {:else}\n> \t<p>lift-off!</p>\n> {/if}\n> ```\n"
  },
  {
    "path": "documentation/docs/99-legacy/40-legacy-component-api.md",
    "content": "---\ntitle: Imperative component API\n---\n\nIn Svelte 3 and 4, the API for interacting with a component is different than in Svelte 5. Note that this page does _not_ apply to legacy mode components in a Svelte 5 application.\n\n## Creating a component\n\n```ts\n// @noErrors\nconst component = new Component(options);\n```\n\nA client-side component — that is, a component compiled with `generate: 'dom'` (or the `generate` option left unspecified) is a JavaScript class.\n\n```ts\n// @noErrors\nimport App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n\tprops: {\n\t\t// assuming App.svelte contains something like\n\t\t// `export let answer`:\n\t\tanswer: 42\n\t}\n});\n```\n\nThe following initialisation options can be provided:\n\n| option    | default     | description                                                                                          |\n| --------- | ----------- | ---------------------------------------------------------------------------------------------------- |\n| `target`  | **none**    | An `HTMLElement` or `ShadowRoot` to render to. This option is required                               |\n| `anchor`  | `null`      | A child of `target` to render the component immediately before                                       |\n| `props`   | `{}`        | An object of properties to supply to the component                                                   |\n| `context` | `new Map()` | A `Map` of root-level context key-value pairs to supply to the component                             |\n| `hydrate` | `false`     | See below                                                                                            |\n| `intro`   | `false`     | If `true`, will play transitions on initial render, rather than waiting for subsequent state changes |\n\nExisting children of `target` are left where they are.\n\nThe `hydrate` option instructs Svelte to upgrade existing DOM (usually from server-side rendering) rather than creating new elements. It will only work if the component was compiled with the [`hydratable: true` option](/docs/svelte-compiler#compile). Hydration of `<head>` elements only works properly if the server-side rendering code was also compiled with `hydratable: true`, which adds a marker to each element in the `<head>` so that the component knows which elements it's responsible for removing during hydration.\n\nWhereas children of `target` are normally left alone, `hydrate: true` will cause any children to be removed. For that reason, the `anchor` option cannot be used alongside `hydrate: true`.\n\nThe existing DOM doesn't need to match the component — Svelte will 'repair' the DOM as it goes.\n\n```ts\n/// file: index.js\n// @noErrors\nimport App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.querySelector('#server-rendered-html'),\n\thydrate: true\n});\n```\n\n> [!NOTE]\n> In Svelte 5+, use [`mount`](svelte#mount) instead\n\n## `$set`\n\n```ts\n// @noErrors\ncomponent.$set(props);\n```\n\nProgrammatically sets props on an instance. `component.$set({ x: 1 })` is equivalent to `x = 1` inside the component's `<script>` block.\n\nCalling this method schedules an update for the next microtask — the DOM is _not_ updated synchronously.\n\n```ts\n// @noErrors\ncomponent.$set({ answer: 42 });\n```\n\n> [!NOTE]\n> In Svelte 5+, use `$state` instead to create a component props and update that\n>\n> ```js\n> // @noErrors\n> let props = $state({ answer: 42 });\n> const component = mount(Component, { props });\n> // ...\n> props.answer = 24;\n> ```\n\n## `$on`\n\n```ts\n// @noErrors\ncomponent.$on(ev, callback);\n```\n\nCauses the `callback` function to be called whenever the component dispatches an `event`.\n\nA function is returned that will remove the event listener when called.\n\n```ts\n// @noErrors\nconst off = component.$on('selected', (event) => {\n\tconsole.log(event.detail.selection);\n});\n\noff();\n```\n\n> [!NOTE]\n> In Svelte 5+, pass callback props instead\n\n## `$destroy`\n\n```js\n// @noErrors\ncomponent.$destroy();\n```\n\nRemoves a component from the DOM and triggers any `onDestroy` handlers.\n\n> [!NOTE]\n> In Svelte 5+, use [`unmount`](svelte#unmount) instead\n\n## Component props\n\n```js\n// @noErrors\ncomponent.prop;\n```\n\n```js\n// @noErrors\ncomponent.prop = value;\n```\n\nIf a component is compiled with `accessors: true`, each instance will have getters and setters corresponding to each of the component's props. Setting a value will cause a _synchronous_ update, rather than the default async update caused by `component.$set(...)`.\n\nBy default, `accessors` is `false`, unless you're compiling as a custom element.\n\n```js\n// @noErrors\nconsole.log(component.count);\ncomponent.count += 1;\n```\n\n> [!NOTE]\n> In Svelte 5+, this concept is obsolete. If you want to make properties accessible from the outside, `export` them\n\n## Server-side component API\n\n```js\n// @noErrors\nconst result = Component.render(...)\n```\n\nUnlike client-side components, server-side components don't have a lifespan after you render them — their whole job is to create some HTML and CSS. For that reason, the API is somewhat different.\n\nA server-side component exposes a `render` method that can be called with optional props. It returns an object with `head`, `html`, and `css` properties, where `head` contains the contents of any `<svelte:head>` elements encountered.\n\nYou can import a Svelte component directly into Node using `svelte/register`.\n\n```js\n// @noErrors\nrequire('svelte/register');\n\nconst App = require('./App.svelte').default;\n\nconst { head, html, css } = App.render({\n\tanswer: 42\n});\n```\n\nThe `.render()` method accepts the following parameters:\n\n| parameter | default | description                                        |\n| --------- | ------- | -------------------------------------------------- |\n| `props`   | `{}`    | An object of properties to supply to the component |\n| `options` | `{}`    | An object of options                               |\n\nThe `options` object takes in the following options:\n\n| option    | default     | description                                                              |\n| --------- | ----------- | ------------------------------------------------------------------------ |\n| `context` | `new Map()` | A `Map` of root-level context key-value pairs to supply to the component |\n\n```js\n// @noErrors\nconst { head, html, css } = App.render(\n\t// props\n\t{ answer: 42 },\n\t// options\n\t{\n\t\tcontext: new Map([['context-key', 'context-value']])\n\t}\n);\n```\n\n> [!NOTE]\n> In Svelte 5+, use [`render`](svelte-server#render) instead\n"
  },
  {
    "path": "documentation/docs/99-legacy/index.md",
    "content": "---\ntitle: Legacy APIs\n---\n"
  },
  {
    "path": "documentation/docs/index.md",
    "content": "---\ntitle: Svelte\n---\n"
  },
  {
    "path": "eslint.config.js",
    "content": "import svelte_config from '@sveltejs/eslint-config';\nimport lube from 'eslint-plugin-lube';\n\nconst no_compiler_imports = {\n\tmeta: {\n\t\ttype: /** @type {const} */ ('problem'),\n\t\tdocs: {\n\t\t\tdescription:\n\t\t\t\t'Enforce that there are no imports to the compiler in runtime code. ' +\n\t\t\t\t'This prevents accidental inclusion of the compiler runtime and ' +\n\t\t\t\t\"ensures that TypeScript does not pick up more ambient types (for example from Node) that shouldn't be available in the browser.\"\n\t\t}\n\t},\n\tcreate(context) {\n\t\treturn {\n\t\t\tProgram: () => {\n\t\t\t\t// Do a simple string search because ESLint doesn't provide a way to check JSDoc comments.\n\t\t\t\t// The string search could in theory yield false positives, but in practice it's unlikely.\n\t\t\t\tconst text = context.sourceCode.getText();\n\t\t\t\tconst idx = Math.max(text.indexOf('../compiler/'), text.indexOf('#compiler'));\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tstart: context.sourceCode.getLocFromIndex(idx),\n\t\t\t\t\t\t\tend: context.sourceCode.getLocFromIndex(idx + 12)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t'References to compiler code are forbidden in runtime code (both for type and value imports)'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n\n/** @type {import('eslint').Linter.Config[]} */\nexport default [\n\t...svelte_config,\n\t{\n\t\tlanguageOptions: {\n\t\t\tparserOptions: {\n\t\t\t\tprojectService: true,\n\t\t\t\ttsconfigRootDir: import.meta.dirname\n\t\t\t}\n\t\t},\n\t\tplugins: {\n\t\t\tlube,\n\t\t\tcustom: { rules: { no_compiler_imports } }\n\t\t},\n\t\trules: {\n\t\t\t'@typescript-eslint/await-thenable': 'error',\n\t\t\t'@typescript-eslint/require-await': 'error',\n\t\t\t'no-console': 'error',\n\t\t\t'lube/svelte-naming-convention': ['error', { fixSameNames: true }],\n\t\t\t// eslint isn't that well-versed with JSDoc to know that `foo: /** @type{..} */ (foo)` isn't a violation of this rule, so turn it off\n\t\t\t'object-shorthand': 'off',\n\t\t\t// eslint is being a dummy here too\n\t\t\t'@typescript-eslint/prefer-promise-reject-errors': 'off',\n\t\t\t'no-var': 'off',\n\n\t\t\t// TODO: enable these rules and run `pnpm lint:fix`\n\t\t\t// skipping that for now so as to avoid impacting real work\n\t\t\t'@stylistic/quotes': 'off',\n\t\t\t'@typescript-eslint/no-unused-vars': 'off',\n\t\t\t'prefer-const': 'off'\n\t\t}\n\t},\n\t{\n\t\t// If you get an error along the lines of \"@typescript-eslint/await-thenable needs a project service configured\", then that likely means\n\t\t// that eslint rules that need to be type-aware run through a Svelte file which seems unsupported at the moment. In that case, ensure that\n\t\t// these are excluded to run on Svelte files.\n\t\tfiles: ['**/*.svelte'],\n\t\trules: {\n\t\t\t'@typescript-eslint/await-thenable': 'off',\n\t\t\t'@typescript-eslint/prefer-promise-reject-errors': 'off',\n\t\t\t'@typescript-eslint/require-await': 'off'\n\t\t}\n\t},\n\t{\n\t\tfiles: ['packages/svelte/src/**/*'],\n\t\tignores: ['packages/svelte/src/compiler/**/*'],\n\t\trules: {\n\t\t\t'custom/no_compiler_imports': 'error',\n\t\t\t'svelte/no-svelte-internal': 'off'\n\t\t}\n\t},\n\t{\n\t\tignores: [\n\t\t\t'**/*.d.ts',\n\t\t\t'**/tests',\n\t\t\t'packages/svelte/scripts/process-messages/templates/*.js',\n\t\t\t'packages/svelte/scripts/_bundle.js',\n\t\t\t'packages/svelte/src/compiler/errors.js',\n\t\t\t'packages/svelte/src/internal/client/errors.js',\n\t\t\t'packages/svelte/src/internal/client/warnings.js',\n\t\t\t'packages/svelte/src/internal/shared/warnings.js',\n\t\t\t'packages/svelte/src/internal/server/warnings.js',\n\t\t\t'packages/svelte/compiler/index.js',\n\t\t\t// stuff we don't want to lint\n\t\t\t'benchmarking/**',\n\t\t\t'coverage/**',\n\t\t\t'playgrounds/sandbox/**',\n\t\t\t// exclude top level config files\n\t\t\t'*.config.js',\n\t\t\t'vitest-xhtml-environment.ts',\n\t\t\t// documentation can contain invalid examples\n\t\t\t'documentation',\n\t\t\t'tmp/**'\n\t\t]\n\t}\n];\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"svelte-monorepo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"monorepo for svelte and friends\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.4.0\",\n  \"engines\": {\n    \"pnpm\": \">=9.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/sveltejs/svelte.git\"\n  },\n  \"scripts\": {\n    \"build\": \"pnpm -r --filter=./packages/* build\",\n    \"check\": \"cd packages/svelte && pnpm build && cd ../../ && pnpm -r check\",\n    \"lint\": \"eslint && prettier --check .\",\n    \"format\": \"prettier --write .\",\n    \"test\": \"vitest run\",\n    \"changeset:version\": \"changeset version && pnpm -r generate:version && git add --all\",\n    \"changeset:publish\": \"changeset publish\",\n    \"bench\": \"NODE_ENV=production node --allow-natives-syntax ./benchmarking/run.js\",\n    \"bench:compare\": \"NODE_ENV=production node --allow-natives-syntax ./benchmarking/compare/index.js\",\n    \"bench:debug\": \"NODE_ENV=production node --allow-natives-syntax --inspect-brk ./benchmarking/run.js\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.29.8\",\n    \"@eslint/js\": \"^10.0.0\",\n    \"@sveltejs/eslint-config\": \"^9.0.0\",\n    \"@svitejs/changesets-changelog-github-compact\": \"^1.1.0\",\n    \"@types/node\": \"^20.11.5\",\n    \"@types/picomatch\": \"^4.0.2\",\n    \"@vitest/coverage-v8\": \"^2.1.9\",\n    \"eslint\": \"^10.0.0\",\n    \"eslint-plugin-lube\": \"^0.5.1\",\n    \"eslint-plugin-svelte\": \"^3.15.0\",\n    \"jsdom\": \"25.0.1\",\n    \"playwright\": \"^1.58.0\",\n    \"prettier\": \"^3.2.4\",\n    \"prettier-plugin-svelte\": \"^3.4.0\",\n    \"svelte\": \"workspace:^\",\n    \"typescript\": \"^5.5.4\",\n    \"typescript-eslint\": \"^8.56.0\",\n    \"v8-natives\": \"^1.2.5\",\n    \"vitest\": \"^2.1.9\"\n  }\n}\n"
  },
  {
    "path": "packages/svelte/.gitignore",
    "content": "/types/*.map\n/types/compiler\n/compiler/index.js\n\n/action.d.ts\n/animate.d.ts\n/compiler.d.ts\n/easing.d.ts\n/index.d.ts\n/legacy.d.ts\n/motion.d.ts\n/store.d.ts\n/transition.d.ts\n\n/scripts/_bundle.js\n"
  },
  {
    "path": "packages/svelte/CHANGELOG-pre-5.md",
    "content": "# svelte\n\n## 4.2.3\n\n### Patch Changes\n\n- fix: improve a11y-click-events-have-key-events message ([#9358](https://github.com/sveltejs/svelte/pull/9358))\n\n- fix: more robust hydration of html tag ([#9184](https://github.com/sveltejs/svelte/pull/9184))\n\n## 4.2.2\n\n### Patch Changes\n\n- fix: support camelCase properties on custom elements ([#9328](https://github.com/sveltejs/svelte/pull/9328))\n\n- fix: add missing plaintext-only value to contenteditable type ([#9242](https://github.com/sveltejs/svelte/pull/9242))\n\n- chore: upgrade magic-string to 0.30.4 ([#9292](https://github.com/sveltejs/svelte/pull/9292))\n\n- fix: ignore trailing comments when comparing nodes ([#9197](https://github.com/sveltejs/svelte/pull/9197))\n\n## 4.2.1\n\n### Patch Changes\n\n- fix: update style directive when style attribute is present and is updated via an object prop ([#9187](https://github.com/sveltejs/svelte/pull/9187))\n\n- fix: css sourcemap generation with unicode filenames ([#9120](https://github.com/sveltejs/svelte/pull/9120))\n\n- fix: do not add module declared variables as dependencies ([#9122](https://github.com/sveltejs/svelte/pull/9122))\n\n- fix: handle `svelte:element` with dynamic this and spread attributes ([#9112](https://github.com/sveltejs/svelte/pull/9112))\n\n- fix: silence false positive reactive component warning ([#9094](https://github.com/sveltejs/svelte/pull/9094))\n\n- fix: head duplication when binding is present ([#9124](https://github.com/sveltejs/svelte/pull/9124))\n\n- fix: take custom attribute name into account when reflecting property ([#9140](https://github.com/sveltejs/svelte/pull/9140))\n\n- fix: add `indeterminate` to the list of HTMLAttributes ([#9180](https://github.com/sveltejs/svelte/pull/9180))\n\n- fix: recognize option value on spread attribute ([#9125](https://github.com/sveltejs/svelte/pull/9125))\n\n## 4.2.0\n\n### Minor Changes\n\n- feat: move `svelteHTML` from language-tools into core to load the correct `svelte/element` types ([#9070](https://github.com/sveltejs/svelte/pull/9070))\n\n## 4.1.2\n\n### Patch Changes\n\n- fix: allow child element with slot attribute within svelte:element ([#9038](https://github.com/sveltejs/svelte/pull/9038))\n\n- fix: Add data-\\* to svg attributes ([#9036](https://github.com/sveltejs/svelte/pull/9036))\n\n## 4.1.1\n\n### Patch Changes\n\n- fix: `svelte:component` spread props change not picked up ([#9006](https://github.com/sveltejs/svelte/pull/9006))\n\n## 4.1.0\n\n### Minor Changes\n\n- feat: add ability to extend custom element class ([#8991](https://github.com/sveltejs/svelte/pull/8991))\n\n### Patch Changes\n\n- fix: ensure `svelte:component` evaluates props once ([#8946](https://github.com/sveltejs/svelte/pull/8946))\n\n- fix: remove `let:variable` slot bindings from select binding dependencies ([#8969](https://github.com/sveltejs/svelte/pull/8969))\n\n- fix: handle destructured primitive literals ([#8871](https://github.com/sveltejs/svelte/pull/8871))\n\n- perf: optimize imports that are not mutated or reassigned ([#8948](https://github.com/sveltejs/svelte/pull/8948))\n\n- fix: don't add accessor twice ([#8996](https://github.com/sveltejs/svelte/pull/8996))\n\n## 4.0.5\n\n### Patch Changes\n\n- fix: generate type definition with nullable types ([#8924](https://github.com/sveltejs/svelte/pull/8924))\n\n## 4.0.4\n\n### Patch Changes\n\n- fix: claim svg tags in raw mustache tags correctly ([#8910](https://github.com/sveltejs/svelte/pull/8910))\n\n- fix: repair invalid raw html content during hydration ([#8912](https://github.com/sveltejs/svelte/pull/8912))\n\n## 4.0.3\n\n### Patch Changes\n\n- fix: handle falsy srcset values ([#8901](https://github.com/sveltejs/svelte/pull/8901))\n\n## 4.0.2\n\n### Patch Changes\n\n- fix: reflect all custom element prop updates back to attribute ([#8898](https://github.com/sveltejs/svelte/pull/8898))\n\n- fix: shrink custom element baseline a bit ([#8858](https://github.com/sveltejs/svelte/pull/8858))\n\n- fix: use non-destructive hydration for all `@html` tags ([#8880](https://github.com/sveltejs/svelte/pull/8880))\n\n- fix: align `disclose-version` exports specification ([#8874](https://github.com/sveltejs/svelte/pull/8874))\n\n- fix: check srcset when hydrating to prevent needless requests ([#8868](https://github.com/sveltejs/svelte/pull/8868))\n\n## 4.0.1\n\n### Patch Changes\n\n- fix: ensure identifiers in destructuring contexts don't clash with existing ones ([#8840](https://github.com/sveltejs/svelte/pull/8840))\n\n- fix: ensure `createEventDispatcher` and `ActionReturn` work with types from generic function parameters ([#8872](https://github.com/sveltejs/svelte/pull/8872))\n\n- fix: apply transition to `<svelte:element>` with local transition ([#8865](https://github.com/sveltejs/svelte/pull/8865))\n\n- fix: relax a11y \"no redundant role\" rule for li, ul, ol ([#8867](https://github.com/sveltejs/svelte/pull/8867))\n\n- fix: remove tsconfig.json from published package ([#8859](https://github.com/sveltejs/svelte/pull/8859))\n\n## 4.0.0\n\n### Major Changes\n\n- breaking: Minimum supported Node version is now Node 16 ([#8566](https://github.com/sveltejs/svelte/pull/8566))\n\n- breaking: Minimum supported webpack version is now webpack 5 ([#8515](https://github.com/sveltejs/svelte/pull/8515))\n\n- breaking: Bundlers must specify the `browser` condition when building a frontend bundle for the browser ([#8516](https://github.com/sveltejs/svelte/pull/8516))\n\n- breaking: Minimum supported vite-plugin-svelte version is now 2.4.1. SvelteKit users can upgrade to 1.20.0 or newer to ensure a compatible version ([#8516](https://github.com/sveltejs/svelte/pull/8516))\n\n- breaking: Minimum supported `rollup-plugin-svelte` version is now 7.1.5 ([198dbcf](https://github.com/sveltejs/svelte/commit/198dbcf))\n\n- breaking: Minimum supported `svelte-loader` is now 3.1.8 ([198dbcf](https://github.com/sveltejs/svelte/commit/198dbcf))\n\n- breaking: Minimum supported TypeScript version is now TypeScript 5 (it will likely work with lower versions, but we make no guarantees about that) ([#8488](https://github.com/sveltejs/svelte/pull/8488))\n\n- breaking: Remove `svelte/register` hook, CJS runtime version and CJS compiler output ([#8613](https://github.com/sveltejs/svelte/pull/8613))\n\n- breaking: Stricter types for `createEventDispatcher` (see PR for migration instructions) ([#7224](https://github.com/sveltejs/svelte/pull/7224))\n\n- breaking: Stricter types for `Action` and `ActionReturn` (see PR for migration instructions) ([#7442](https://github.com/sveltejs/svelte/pull/7442))\n\n- breaking: Stricter types for `onMount` - now throws a type error when returning a function asynchronously to catch potential mistakes around callback functions\n  (see PR for migration instructions) ([#8136](https://github.com/sveltejs/svelte/pull/8136))\n\n- breaking: Overhaul and drastically improve creating custom elements with Svelte (see PR for list of changes and migration instructions) ([#8457](https://github.com/sveltejs/svelte/pull/8457))\n\n- breaking: Deprecate `SvelteComponentTyped` in favor of `SvelteComponent` ([#8512](https://github.com/sveltejs/svelte/pull/8512))\n\n- breaking: Make transitions local by default to prevent confusion around page navigations ([#6686](https://github.com/sveltejs/svelte/issues/6686))\n\n- breaking: Error on falsy values instead of stores passed to `derived` ([#7947](https://github.com/sveltejs/svelte/pull/7947))\n\n- breaking: Custom store implementers now need to pass an `update` function additionally to the `set` function ([#6750](https://github.com/sveltejs/svelte/pull/6750))\n\n- breaking: Do not expose default slot bindings to named slots and vice versa ([#6049](https://github.com/sveltejs/svelte/pull/6049))\n\n- breaking: Change order in which preprocessors are applied ([#8618](https://github.com/sveltejs/svelte/pull/8618))\n\n- breaking: The runtime now makes use of `classList.toggle(name, boolean)` which does not work in very old browsers ([#8629](https://github.com/sveltejs/svelte/pull/8629))\n\n- breaking: apply `inert` to outroing elements ([#8628](https://github.com/sveltejs/svelte/pull/8628))\n\n- breaking: use `CustomEvent` constructor instead of deprecated `createEvent` method ([#8775](https://github.com/sveltejs/svelte/pull/8775))\n\n### Minor Changes\n\n- Add a way to modify attributes for script/style preprocessors ([#8618](https://github.com/sveltejs/svelte/pull/8618))\n\n- Improve hydration speed by adding `data-svelte-h` attribute to detect unchanged HTML elements ([#7426](https://github.com/sveltejs/svelte/pull/7426))\n\n- Add `a11y no-noninteractive-element-interactions` rule ([#8391](https://github.com/sveltejs/svelte/pull/8391))\n\n- Add `a11y-no-static-element-interactions`rule ([#8251](https://github.com/sveltejs/svelte/pull/8251))\n\n- Allow `#each` to iterate over iterables like `Set`, `Map` etc ([#7425](https://github.com/sveltejs/svelte/issues/7425))\n\n- Improve duplicate key error for keyed `each` blocks ([#8411](https://github.com/sveltejs/svelte/pull/8411))\n\n- Warn about `:` in attributes and props to prevent ambiguity with Svelte directives ([#6823](https://github.com/sveltejs/svelte/issues/6823))\n\n- feat: add version info to `window`. You can opt out by setting `discloseVersion` to `false` in the compiler options ([#8761](https://github.com/sveltejs/svelte/pull/8761))\n\n- feat: smaller minified output for destructor chunks ([#8763](https://github.com/sveltejs/svelte/pull/8763))\n\n### Patch Changes\n\n- Bind `null` option and input values consistently ([#8312](https://github.com/sveltejs/svelte/issues/8312))\n\n- Allow `$store` to be used with changing values including nullish values ([#7555](https://github.com/sveltejs/svelte/issues/7555))\n\n- Initialize stylesheet with `/* empty */` to enable setting CSP directive that also works in Safari ([#7800](https://github.com/sveltejs/svelte/pull/7800))\n\n- Treat slots as if they don't exist when using CSS adjacent and general sibling combinators ([#8284](https://github.com/sveltejs/svelte/issues/8284))\n\n- Fix transitions so that they don't require a `style-src 'unsafe-inline'` Content Security Policy (CSP) ([#6662](https://github.com/sveltejs/svelte/issues/6662)).\n\n- Explicitly disallow `var` declarations extending the reactive statement scope ([#6800](https://github.com/sveltejs/svelte/pull/6800))\n\n- Improve error message when trying to use `animate:` directives on inline components ([#8641](https://github.com/sveltejs/svelte/issues/8641))\n\n- fix: export ComponentType from `svelte` entrypoint ([#8578](https://github.com/sveltejs/svelte/pull/8578))\n\n- fix: never use html optimization for mustache tags in hydration mode ([#8744](https://github.com/sveltejs/svelte/pull/8744))\n\n- fix: derived store types ([#8578](https://github.com/sveltejs/svelte/pull/8578))\n\n- Generate type declarations with dts-buddy ([#8578](https://github.com/sveltejs/svelte/pull/8578))\n\n- fix: ensure types are loaded with all TS settings ([#8721](https://github.com/sveltejs/svelte/pull/8721))\n\n- fix: account for preprocessor source maps when calculating meta info ([#8778](https://github.com/sveltejs/svelte/pull/8778))\n\n- chore: deindent cjs output for compiler ([#8785](https://github.com/sveltejs/svelte/pull/8785))\n\n- warn on boolean compilerOptions.css ([#8710](https://github.com/sveltejs/svelte/pull/8710))\n\n- fix: export correct SvelteComponent type ([#8721](https://github.com/sveltejs/svelte/pull/8721))\n\n## 4.0.0-next.3\n\n### Patch Changes\n\n- feat: smaller minified output for destructor chunks ([#8763](https://github.com/sveltejs/svelte/pull/8763))\n\n- breaking: use `CustomEvent` constructor instead of deprecated `createEvent` method ([#8775](https://github.com/sveltejs/svelte/pull/8775))\n\n- fix: account for preprocessor source maps when calculating meta info ([#8778](https://github.com/sveltejs/svelte/pull/8778))\n\n- chore: deindent cjs output for compiler ([#8785](https://github.com/sveltejs/svelte/pull/8785))\n\n- feat: add version info to `window`. You can opt out by setting `discloseVersion` to `false` in the compiler options ([#8761](https://github.com/sveltejs/svelte/pull/8761))\n\n## 4.0.0-next.2\n\n### Patch Changes\n\n- fix: never use html optimization for mustache tags in hydration mode ([#8744](https://github.com/sveltejs/svelte/pull/8744))\n\n- fix: ensure types are loaded with all TS settings ([#8721](https://github.com/sveltejs/svelte/pull/8721))\n\n- warn on boolean compilerOptions.css ([#8710](https://github.com/sveltejs/svelte/pull/8710))\n\n- fix: export correct SvelteComponent type ([#8721](https://github.com/sveltejs/svelte/pull/8721))\n\n## 4.0.0-next.1\n\n### Patch Changes\n\n- fix: export ComponentType from `svelte` entrypoint ([#8694](https://github.com/sveltejs/svelte/pull/8694))\n\n- fix: derived store types ([#8700](https://github.com/sveltejs/svelte/pull/8700))\n\n- Generate type declarations with dts-buddy ([#8702](https://github.com/sveltejs/svelte/pull/8702))\n\n## 4.0.0-next.0\n\n### Major Changes\n\n- breaking: Minimum supported Node version is now Node 16 ([#8566](https://github.com/sveltejs/svelte/pull/8566))\n- breaking: Minimum supported webpack version is now webpack 5 ([#8515](https://github.com/sveltejs/svelte/pull/8515))\n- breaking: Bundlers must specify the `browser` condition when building a frontend bundle for the browser ([#8516](https://github.com/sveltejs/svelte/pull/8516))\n- breaking: Minimum supported vite-plugin-svelte version is now 2.4.1. SvelteKit users can upgrade to 1.20.0 or newer to ensure a compatible version ([#8516](https://github.com/sveltejs/svelte/pull/8516))\n- breaking: Minimum supported `rollup-plugin-svelte` version is now 7.1.5 ([198dbcf](https://github.com/sveltejs/svelte/commit/198dbcf))\n- breaking: Minimum supported `svelte-loader` is now 3.1.8 ([198dbcf](https://github.com/sveltejs/svelte/commit/198dbcf))\n- breaking: Minimum supported TypeScript version is now TypeScript 5 (it will likely work with lower versions, but we make no guarantees about that) ([#8488](https://github.com/sveltejs/svelte/pull/8488))\n- breaking: Remove `svelte/register` hook, CJS runtime version and CJS compiler output ([#8613](https://github.com/sveltejs/svelte/pull/8613))\n- breaking: Stricter types for `createEventDispatcher` (see PR for migration instructions) ([#7224](https://github.com/sveltejs/svelte/pull/7224))\n- breaking: Stricter types for `Action` and `ActionReturn` (see PR for migration instructions) ([#7442](https://github.com/sveltejs/svelte/pull/7442))\n- breaking: Stricter types for `onMount` - now throws a type error when returning a function asynchronously to catch potential mistakes around callback functions (see PR for migration instructions) ([#8136](https://github.com/sveltejs/svelte/pull/8136))\n- breaking: Overhaul and drastically improve creating custom elements with Svelte (see PR for list of changes and migration instructions) ([#8457](https://github.com/sveltejs/svelte/pull/8457))\n- breaking: Deprecate `SvelteComponentTyped` in favor of `SvelteComponent` ([#8512](https://github.com/sveltejs/svelte/pull/8512))\n- breaking: Make transitions local by default to prevent confusion around page navigations ([#6686](https://github.com/sveltejs/svelte/issues/6686))\n- breaking: Error on falsy values instead of stores passed to `derived` ([#7947](https://github.com/sveltejs/svelte/pull/7947))\n- breaking: Custom store implementers now need to pass an `update` function additionally to the `set` function ([#6750](https://github.com/sveltejs/svelte/pull/6750))\n- breaking: Do not expose default slot bindings to named slots and vice versa ([#6049](https://github.com/sveltejs/svelte/pull/6049))\n- breaking: Change order in which preprocessors are applied ([#8618](https://github.com/sveltejs/svelte/pull/8618))\n- breaking: The runtime now makes use of `classList.toggle(name, boolean)` which does not work in very old browsers ([#8629](https://github.com/sveltejs/svelte/pull/8629))\n- breaking: apply `inert` to outroing elements ([#8627](https://github.com/sveltejs/svelte/pull/8627))\n\n### Minor Changes\n\n- Add a way to modify attributes for script/style preprocessors ([#8618](https://github.com/sveltejs/svelte/pull/8618))\n- Improve hydration speed by adding `data-svelte-h` attribute to detect unchanged HTML elements ([#7426](https://github.com/sveltejs/svelte/pull/7426))\n- Add `a11y no-noninteractive-element-interactions` rule ([#8391](https://github.com/sveltejs/svelte/pull/8391))\n- Add `a11y-no-static-element-interactions`rule ([#8251](https://github.com/sveltejs/svelte/pull/8251))\n- Allow `#each` to iterate over iterables like `Set`, `Map` etc ([#7425](https://github.com/sveltejs/svelte/issues/7425))\n- Improve duplicate key error for keyed `each` blocks ([#8411](https://github.com/sveltejs/svelte/pull/8411))\n- Warn about `:` in attributes and props to prevent ambiguity with Svelte directives ([#6823](https://github.com/sveltejs/svelte/issues/6823))\n\n### Patch Changes\n\n- Bind `null` option and input values consistently ([#8312](https://github.com/sveltejs/svelte/issues/8312))\n- Allow `$store` to be used with changing values including nullish values ([#7555](https://github.com/sveltejs/svelte/issues/7555))\n- Initialize stylesheet with `/* empty */` to enable setting CSP directive that also works in Safari ([#7800](https://github.com/sveltejs/svelte/pull/7800))\n- Treat slots as if they don't exist when using CSS adjacent and general sibling combinators ([#8284](https://github.com/sveltejs/svelte/issues/8284))\n- Fix transitions so that they don't require a `style-src 'unsafe-inline'` Content Security Policy (CSP) ([#6662](https://github.com/sveltejs/svelte/issues/6662)).\n- Explicitly disallow `var` declarations extending the reactive statement scope ([#6800](https://github.com/sveltejs/svelte/pull/6800))\n- Improve error message when trying to use `animate:` directives on inline components ([#8641](https://github.com/sveltejs/svelte/issues/8641))\n\n## 3.59.2\n\n- Fix escaping `<textarea bind:value={...}>` values in SSR\n\n## 3.59.1\n\n- Handle dynamic values in `a11y-autocomplete-valid` ([#8567](https://github.com/sveltejs/svelte/pull/8567))\n\n## 3.59.0\n\n- Add `ResizeObserver` bindings `contentRect`/`contentBoxSize`/`borderBoxSize`/`devicePixelContentBoxSize` ([#8022](https://github.com/sveltejs/svelte/pull/8022))\n- Add `devicePixelRatio` binding for `<svelte:window>` ([#8285](https://github.com/sveltejs/svelte/issues/8285))\n- Add `fullscreenElement` and `visibilityState` bindings for `<svelte:document>` ([#8507](https://github.com/sveltejs/svelte/pull/8507))\n- Add `a11y-autocomplete-valid` warning ([#8520](https://github.com/sveltejs/svelte/pull/8520))\n- Fix handling of `width`/`height` attributes when spreading ([#6752](https://github.com/sveltejs/svelte/issues/6752))\n- Fix updating of interpolated `style:` directive when using spread ([#8438](https://github.com/sveltejs/svelte/issues/8438))\n- Remove `style:` directive property when value is `undefined` ([#8462](https://github.com/sveltejs/svelte/issues/8462))\n- Fix type of `VERSION` compiler export ([#8498](https://github.com/sveltejs/svelte/issues/8498))\n- Relax `a11y-no-redundant-roles` warning ([#8536](https://github.com/sveltejs/svelte/pull/8536))\n- Handle nested array rest destructuring ([#8552](https://github.com/sveltejs/svelte/issues/8552), [#8554](https://github.com/sveltejs/svelte/issues/8554))\n\n## 3.58.0\n\n- Add `bind:innerText` for `contenteditable` elements ([#3311](https://github.com/sveltejs/svelte/issues/3311))\n- Add support for CSS `@container` queries ([#6969](https://github.com/sveltejs/svelte/issues/6969))\n- Respect `preserveComments` in DOM output ([#7182](https://github.com/sveltejs/svelte/pull/7182))\n- Allow use of `document` for `target` in typings ([#7554](https://github.com/sveltejs/svelte/pull/7554))\n- Add `a11y-interactive-supports-focus` warning ([#8392](https://github.com/sveltejs/svelte/pull/8392))\n- Fix equality check when updating dynamic text ([#5931](https://github.com/sveltejs/svelte/issues/5931))\n- Relax `a11y-no-noninteractive-element-to-interactive-role` warning ([#8402](https://github.com/sveltejs/svelte/pull/8402))\n- Properly handle microdata attributes ([#8413](https://github.com/sveltejs/svelte/issues/8413))\n- Prevent name collision when using computed destructuring variables ([#8417](https://github.com/sveltejs/svelte/issues/8417))\n- Fix escaping `<textarea value={...}>` values in SSR ([#8429](https://github.com/sveltejs/svelte/issues/8429))\n\n## 3.57.0\n\n- Add `<svelte:document>` ([#3310](https://github.com/sveltejs/svelte/issues/3310))\n- Add a11y `no-noninteractive-element-to-interactive-role` ([#8167](https://github.com/sveltejs/svelte/pull/8167))\n- Stop intro transition from triggering incorrectly ([#6152](https://github.com/sveltejs/svelte/issues/6152), [#6812](https://github.com/sveltejs/svelte/issues/6812))\n- Support computed and literal properties when destructuring objects in the template ([#6609](https://github.com/sveltejs/svelte/issues/6609))\n- Give `style:` directive precedence over `style=` attribute ([#7475](https://github.com/sveltejs/svelte/issues/7475))\n- Select `<option>` with `selected` attribute when initial state is `undefined` ([#8361](https://github.com/sveltejs/svelte/issues/8361))\n- Prevent derived store callbacks after store is unsubscribed from ([#8364](https://github.com/sveltejs/svelte/issues/8364))\n- Account for `bind:group` members being spread across multiple control flow blocks ([#8372](https://github.com/sveltejs/svelte/issues/8372))\n- Revert buggy reactive statement optimization ([#8374](https://github.com/sveltejs/svelte/issues/8374))\n- Support CSS units in the `fly` and `blur` transitions ([#7623](https://github.com/sveltejs/svelte/pull/7623))\n\n## 3.56.0\n\n- Add `|stopImmediatePropagation` event modifier ([#5085](https://github.com/sveltejs/svelte/issues/5085))\n- Add `axis` parameter to `slide` transition ([#6182](https://github.com/sveltejs/svelte/issues/6182))\n- Add `readonly` utility to convert `writable` store to readonly ([#6518](https://github.com/sveltejs/svelte/pull/6518))\n- Add `readyState` binding for media elements ([#6666](https://github.com/sveltejs/svelte/issues/6666))\n- Generate valid automatic component names when the filename contains only special characters ([#7143](https://github.com/sveltejs/svelte/issues/7143))\n- Add `naturalWidth` and `naturalHeight` bindings ([#7771](https://github.com/sveltejs/svelte/issues/7771))\n- Support `<!-- svelte-ignore ... -->` on components ([#8082](https://github.com/sveltejs/svelte/issues/8082))\n- Add a11y warnings:\n  - `aria-activedescendant-has-tabindex`: checks that elements with `aria-activedescendant` have a `tabindex` ([#8172](https://github.com/sveltejs/svelte/pull/8172))\n  - `role-supports-aria-props`: checks that the (implicit) element role supports the given aria attributes ([#8195](https://github.com/sveltejs/svelte/pull/8195))\n- Add `data-sveltekit-replacestate` and `data-sveltekit-keepfocus` attribute typings ([#8281](https://github.com/sveltejs/svelte/issues/8281))\n- Compute node dimensions immediately before crossfading ([#4111](https://github.com/sveltejs/svelte/issues/4111))\n- Fix potential infinite invalidate loop with `<svelte:component>` ([#4129](https://github.com/sveltejs/svelte/issues/4129))\n- Ensure `bind:offsetHeight` updates initially ([#4233](https://github.com/sveltejs/svelte/issues/4233))\n- Don't set selected options if value is unbound or not passed ([#5644](https://github.com/sveltejs/svelte/issues/5644))\n- Validate component `:global()` selectors ([#6272](https://github.com/sveltejs/svelte/issues/6272))\n- Improve warnings:\n  - Make `noreferrer` warning less zealous ([#6289](https://github.com/sveltejs/svelte/issues/6289))\n  - Omit a11y warnings on `<video aria-hidden=\"true\">` ([#7874](https://github.com/sveltejs/svelte/issues/7874))\n  - Omit a11y warnings on `<svelte:element>` ([#7939](https://github.com/sveltejs/svelte/issues/7939))\n  - Detect unused empty attribute CSS selectors ([#8042](https://github.com/sveltejs/svelte/issues/8042))\n  - Omit \"no child content\" warning on elements with `aria-label` ([#8296](https://github.com/sveltejs/svelte/issues/8296))\n- Check value equality for `<input type=\"search\">` and `<input type=\"url\">` ([#7027](https://github.com/sveltejs/svelte/issues/7027))\n- Do not select a disabled `<option>` by default when the initial bound value is undefined ([#7041](https://github.com/sveltejs/svelte/issues/7041))\n- Handle `{@html}` tags inside `<template>` tags ([#7364](https://github.com/sveltejs/svelte/pull/7364))\n- Ensure `afterUpdate` is not called after `onDestroy` ([#7476](https://github.com/sveltejs/svelte/issues/7476))\n- Improve handling of `inert` attribute ([#7500](https://github.com/sveltejs/svelte/issues/7500))\n- Reduce use of template literals in SSR output for better performance ([#7539](https://github.com/sveltejs/svelte/pull/7539))\n- Ensure `<input>` value persists when swapping elements with spread attributes in an `{#each}` block ([#7578](https://github.com/sveltejs/svelte/issues/7578))\n- Simplify generated code for reactive statements if dependencies are all static ([#7942](https://github.com/sveltejs/svelte/pull/7942))\n- Fix race condition on `<svelte:element>` with transitions ([#7948](https://github.com/sveltejs/svelte/issues/7948))\n- Allow assigning to a property of a `const` when destructuring ([#7964](https://github.com/sveltejs/svelte/issues/7964))\n- Match browser behavior for decoding malformed HTML entities ([#8026](https://github.com/sveltejs/svelte/issues/8026))\n- Ensure `trusted-types` CSP compatibility for Web Components ([#8134](https://github.com/sveltejs/svelte/issues/8134))\n- Optimise `<svelte:element>` output code for static tag and static attribute ([#8161](https://github.com/sveltejs/svelte/pull/8161))\n- Don't throw when calling unsubscribing from a store twice ([#8186](https://github.com/sveltejs/svelte/pull/8186))\n- Clear inputs when `bind:group` value is set to `undefined` ([#8214](https://github.com/sveltejs/svelte/issues/8214))\n- Fix handling of nested arrays with keyed `{#each}` containing a non-keyed `{#each}` ([#8282](https://github.com/sveltejs/svelte/issues/8282))\n\n## 3.55.1\n\n- Fix `draw` transition with delay showing a dot at the beginning of the path ([#6816](https://github.com/sveltejs/svelte/issues/6816))\n- Fix infinity runtime call stack when propagating bindings ([#7032](https://github.com/sveltejs/svelte/issues/7032))\n- Fix static `<svelte:element>` optimization in production mode ([#7937](https://github.com/sveltejs/svelte/issues/7937))\n- Fix `svelte-ignore` comment breaking named slot ([#8075](https://github.com/sveltejs/svelte/issues/8075))\n- Revert change to prevent running init binding unnecessarily ([#8103](https://github.com/sveltejs/svelte/issues/8103))\n- Fix adding duplicate event listeners with `<svelte:element on:event>` ([#8129](https://github.com/sveltejs/svelte/issues/8129))\n- Improve detection of promises that are also functions ([#8162](https://github.com/sveltejs/svelte/pull/8162))\n- Avoid mutating spread component props during SSR ([#8171](https://github.com/sveltejs/svelte/issues/8171))\n- Add missing typing for global `part` attribute ([#8181](https://github.com/sveltejs/svelte/issues/8181))\n- Add missing `submitter` property to `on:submit` event type\n\n## 3.55.0\n\n- Add `svelte/elements` for HTML/Svelte typings ([#7649](https://github.com/sveltejs/svelte/pull/7649))\n\n## 3.54.0\n\n- Pass `options.direction` argument to custom transition functions ([#3918](https://github.com/sveltejs/svelte/issues/3918))\n- Support fallback a11y WAI-ARIA roles ([#8044](https://github.com/sveltejs/svelte/issues/8044))\n- Prevent running init binding unnecessarily ([#5689](https://github.com/sveltejs/svelte/issues/5689), [#6298](https://github.com/sveltejs/svelte/issues/6298))\n- Allow updating variables from `@const` declared function ([#7843](https://github.com/sveltejs/svelte/issues/7843))\n- Do not emit `a11y-no-noninteractive-tabindex` warning if element has a `tabpanel` ([#8025](https://github.com/sveltejs/svelte/pull/8025))\n- Fix escaping SSR'd values in `style:` directive ([#8085](https://github.com/sveltejs/svelte/issues/8085))\n\n## 3.53.1\n\n- Fix exception in `rel=` attribute check with dynamic values ([#7994](https://github.com/sveltejs/svelte/issues/7994))\n- Do not emit deprecation warnings for `css` compiler options for now ([#8009](https://github.com/sveltejs/svelte/issues/8009))\n- Make compiler run in browser again ([#8010](https://github.com/sveltejs/svelte/issues/8010))\n- Upgrade `tslib` ([#8013](https://github.com/sveltejs/svelte/issues/8013))\n\n## 3.53.0\n\n- Check whether `parentNode` exists before removing child ([#6037](https://github.com/sveltejs/svelte/issues/6037))\n- Upgrade various dependencies, notably `css-tree` to `2.2.1` ([#7572](https://github.com/sveltejs/svelte/pull/7572), [#7982](https://github.com/sveltejs/svelte/pull/7982))\n- Extend `css` compiler option with `'external' | 'injected' | 'none'` settings and deprecate old `true | false` values ([#7914](https://github.com/sveltejs/svelte/pull/7914))\n\n## 3.52.0\n\n- Throw compile-time error when attempting to update `const` variable ([#4895](https://github.com/sveltejs/svelte/issues/4895))\n- Warn when using `<a target=\"_blank\">` without `rel=\"noreferrer\"` ([#6188](https://github.com/sveltejs/svelte/issues/6188))\n- Support `style:foo|important` modifier ([#7365](https://github.com/sveltejs/svelte/issues/7365))\n- Fix hydration regression with `{@html}` and components in `<svelte:head>` ([#7941](https://github.com/sveltejs/svelte/pull/7941))\n\n## 3.51.0\n\n- Add a11y warnings:\n  - `a11y-click-events-have-key-events`: check if click event is accompanied by key events ([#5073](https://github.com/sveltejs/svelte/pull/5073))\n  - `a11y-no-noninteractive-tabindex`: check for tabindex on non-interactive elements ([#6693](https://github.com/sveltejs/svelte/pull/6693))\n- Warn when two-way binding to `{...rest}` object in `{#each}` block ([#6860](https://github.com/sveltejs/svelte/issues/6860))\n- Support `--style-props` on `<svelte:component>` ([#7461](https://github.com/sveltejs/svelte/issues/7461))\n- Supports nullish values for component event handlers ([#7568](https://github.com/sveltejs/svelte/issues/7568))\n- Supports SVG elements with `<svelte:element>`([#7613](https://github.com/sveltejs/svelte/issues/7613))\n- Treat `inert` as boolean attribute ([#7785](https://github.com/sveltejs/svelte/pull/7785))\n- Support `--style-props` for SVG components ([#7808](https://github.com/sveltejs/svelte/issues/7808))\n- Fix false positive dev warnings about unset props when they are bound ([#4457](https://github.com/sveltejs/svelte/issues/4457))\n- Fix hydration with `{@html}` and components in `<svelte:head>` ([#4533](https://github.com/sveltejs/svelte/issues/4533), [#6463](https://github.com/sveltejs/svelte/issues/6463), [#7444](https://github.com/sveltejs/svelte/issues/7444))\n- Support scoped style for `<svelte:element>` ([#7443](https://github.com/sveltejs/svelte/issues/7443))\n- Improve error message for invalid value for `<svelte:component this={...}>` ([#7550](https://github.com/sveltejs/svelte/issues/7550))\n- Improve error message when using logic blocks or tags at invalid location ([#7552](https://github.com/sveltejs/svelte/issues/7552))\n- Warn instead of throwing error if `<svelte:element>` is a void tag ([#7566](https://github.com/sveltejs/svelte/issues/7566))\n- Supports custom elements in `<svelte:element>` ([#7733](https://github.com/sveltejs/svelte/issues/7733))\n- Fix calling component unmount if a component is mounted and then immediately unmounted ([#7817](https://github.com/sveltejs/svelte/issues/7817))\n- Do not generate `a11y-role-has-required-aria-props` warning when elements match their semantic role ([#7837](https://github.com/sveltejs/svelte/issues/7837))\n- Improve performance of custom element data setting in `<svelte:element>` ([#7869](https://github.com/sveltejs/svelte/pull/7869))\n\n## 3.50.1\n\n- Add all global objects and functions as known globals ([#3805](https://github.com/sveltejs/svelte/issues/3805), [#7223](https://github.com/sveltejs/svelte/issues/7223))\n- Fix regression with style manager ([#7828](https://github.com/sveltejs/svelte/issues/7828))\n\n## 3.50.0\n\n- Add a11y warnings:\n  - `a11y-incorrect-aria-attribute-type`: check ARIA state and property values ([#6978](https://github.com/sveltejs/svelte/pull/6978))\n  - `a11y-no-abstract-role`: check that ARIA roles are non-abstract ([#6241](https://github.com/sveltejs/svelte/pull/6241))\n  - `a11y-no-interactive-element-to-noninteractive-role`: check for non-interactive roles used on interactive elements ([#5955](https://github.com/sveltejs/svelte/pull/5955))\n  - `a11y-role-has-required-aria-props`: check that elements with `role` attribute have all required attributes for that role ([#5852](https://github.com/sveltejs/svelte/pull/5852))\n- Add `ComponentEvents` convenience type ([#7702](https://github.com/sveltejs/svelte/pull/7702))\n- Add `SveltePreprocessor` utility type ([#7742](https://github.com/sveltejs/svelte/pull/7742))\n- Enhance action typings ([#7805](https://github.com/sveltejs/svelte/pull/7805))\n- Remove empty stylesheets created from transitions ([#4801](https://github.com/sveltejs/svelte/issues/4801), [#7164](https://github.com/sveltejs/svelte/issues/7164))\n- Make `a11y-label-has-associated-control` warning check all descendants for input control ([#5528](https://github.com/sveltejs/svelte/issues/5528))\n- Only show lowercase component name warnings for non-HTML/SVG elements ([#5712](https://github.com/sveltejs/svelte/issues/5712))\n- Disallow invalid CSS selectors starting with a combinator ([#7643](https://github.com/sveltejs/svelte/issues/7643))\n- Use `Node.parentNode` instead of `Node.parentElement` for legacy browser support ([#7723](https://github.com/sveltejs/svelte/issues/7723))\n- Handle arrow function on `<slot>` inside `<svelte:fragment>` ([#7485](https://github.com/sveltejs/svelte/issues/7485))\n- Improve parsing speed when encountering large blocks of whitespace ([#7675](https://github.com/sveltejs/svelte/issues/7675))\n- Fix `class:` directive updates in aborted/restarted transitions ([#7764](https://github.com/sveltejs/svelte/issues/7764))\n\n## 3.49.0\n\n- Improve performance of string escaping during SSR ([#5701](https://github.com/sveltejs/svelte/pull/5701))\n- Add `ComponentType` and `ComponentProps` convenience types ([#6770](https://github.com/sveltejs/svelte/pull/6770))\n- Add support for CSS `@layer` ([#7504](https://github.com/sveltejs/svelte/issues/7504))\n- Export `CompileOptions` from `svelte/compiler` ([#7658](https://github.com/sveltejs/svelte/pull/7658))\n- Fix DOM-less components not being properly destroyed ([#7488](https://github.com/sveltejs/svelte/issues/7488))\n- Fix `class:` directive updates with `<svelte:element>` ([#7521](https://github.com/sveltejs/svelte/issues/7521), [#7571](https://github.com/sveltejs/svelte/issues/7571))\n- Harden attribute escaping during SSR ([#7530](https://github.com/sveltejs/svelte/pull/7530))\n\n## 3.48.0\n\n- Allow creating cancelable custom events with `createEventDispatcher` ([#4623](https://github.com/sveltejs/svelte/issues/4623))\n- Support `{@const}` tag in `{#if}` blocks [#7241](https://github.com/sveltejs/svelte/issues/7241)\n- Return the context object in `setContext` [#7427](https://github.com/sveltejs/svelte/issues/7427)\n- Allow comments inside `{#each}` blocks when using `animate:` ([#3999](https://github.com/sveltejs/svelte/issues/3999))\n- Fix `|local` transitions in `{#key}` blocks ([#5950](https://github.com/sveltejs/svelte/issues/5950))\n- Support svg namespace for `{@html}` ([#7002](https://github.com/sveltejs/svelte/issues/7002), [#7450](https://github.com/sveltejs/svelte/issues/7450))\n- Fix `{@const}` tag not working inside a component when there's no `let:` [#7189](https://github.com/sveltejs/svelte/issues/7189)\n- Remove extraneous leading newline inside `<pre>` and `<textarea>` ([#7264](https://github.com/sveltejs/svelte/issues/7264))\n- Fix erroneous setting of `textContent` for `<template>` elements ([#7297](https://github.com/sveltejs/svelte/pull/7297))\n- Fix value of `let:` bindings not updating in certain cases ([#7440](https://github.com/sveltejs/svelte/issues/7440))\n- Fix handling of void tags in `<svelte:element>` ([#7449](https://github.com/sveltejs/svelte/issues/7449))\n- Fix handling of boolean attributes in `<svelte:element>` ([#7478](https://github.com/sveltejs/svelte/issues/7478))\n- Add special style scoping handling of `[open]` selectors on `<dialog>` elements ([#7495](https://github.com/sveltejs/svelte/issues/7494))\n\n## 3.47.0\n\n- Add support for dynamic elements through `<svelte:element>` ([#2324](https://github.com/sveltejs/svelte/issues/2324))\n- Miscellaneous variable context fixes in `{@const}` ([#7222](https://github.com/sveltejs/svelte/pull/7222))\n- Fix `{#key}` block not being reactive when the key variable is not otherwise used ([#7408](https://github.com/sveltejs/svelte/issues/7408))\n- Add `Symbol` as a known global ([#7418](https://github.com/sveltejs/svelte/issues/7418))\n\n## 3.46.6\n\n- Actually include action TypeScript interface in published package ([#7407](https://github.com/sveltejs/svelte/pull/7407))\n\n## 3.46.5\n\n- Add TypeScript interfaces for typing actions ([#6538](https://github.com/sveltejs/svelte/issues/6538))\n- Do not generate `unused-export-let` warning inside `<script context=\"module\">` blocks ([#7055](https://github.com/sveltejs/svelte/issues/7055))\n- Do not collapse whitespace-only CSS vars ([#7152](https://github.com/sveltejs/svelte/issues/7152))\n- Add `aria-description` to the list of allowed ARIA attributes ([#7301](https://github.com/sveltejs/svelte/issues/7301))\n- Fix attribute escaping during SSR ([#7327](https://github.com/sveltejs/svelte/issues/7327))\n- Prevent `.innerHTML` optimization from being used when `style:` directive is present ([#7386](https://github.com/sveltejs/svelte/issues/7386))\n\n## 3.46.4\n\n- Avoid `maximum call stack size exceeded` errors on large components ([#4694](https://github.com/sveltejs/svelte/issues/4694))\n- Preserve leading space with `preserveWhitespace: true` ([#4731](https://github.com/sveltejs/svelte/issues/4731))\n- Preserve leading space in `<pre>` tags ([#6437](https://github.com/sveltejs/svelte/issues/6437))\n- Improve error message when trying to use `style:` directives on inline components ([#7177](https://github.com/sveltejs/svelte/issues/7177))\n- Add `FormData` as a known global ([#7199](https://github.com/sveltejs/svelte/pull/7199))\n- Mark `css`/`instance`/`module` AST properties as optional in types ([#7204](https://github.com/sveltejs/svelte/pull/7204))\n\n## 3.46.3\n\n- Ignore whitespace in `{#each}` blocks when containing elements with `animate:` ([#5477](https://github.com/sveltejs/svelte/pull/5477))\n- Throw compiler error when variable in `context=\"instance\"` collides with import in `context=\"module\"` ([#7090](https://github.com/sveltejs/svelte/issues/7090))\n- Fix compiler crash when `{@const}` contains arrow functions ([#7134](https://github.com/sveltejs/svelte/issues/7134))\n\n## 3.46.2\n\n- Export `FlipParams` interface from `svelte/animate` ([#7103](https://github.com/sveltejs/svelte/issues/7103))\n- Fix `style:` directive reactivity inside `{#each}` block ([#7136](https://github.com/sveltejs/svelte/issues/7136))\n\n## 3.46.1\n\n- Handle `style:kebab-case` directives ([#7122](https://github.com/sveltejs/svelte/issues/7122))\n- Improve AST produced for `style:` directives ([#7127](https://github.com/sveltejs/svelte/pull/7127))\n\n## 3.46.0\n\n- Implement `{@const}` tag ([RFC #33](https://github.com/sveltejs/rfcs/pull/33), [#6413](https://github.com/sveltejs/svelte/pull/6413))\n- Implement `style:` directive ([RFC #42](https://github.com/sveltejs/rfcs/pull/42), [#5923](https://github.com/sveltejs/svelte/pull/5923))\n- Fix style manager conflicts when using multiple Svelte instances ([#7026](https://github.com/sveltejs/svelte/issues/7026))\n- Fix hydration when using `{@html}` ([#7115](https://github.com/sveltejs/svelte/issues/7115))\n\n## 3.45.0\n\n- Fix non-boolean attribute rendering in SSR to render truthy values as-is ([#6121](https://github.com/sveltejs/svelte/issues/6121))\n- Fix binding to a member expression also invalidating the member property ([#6921](https://github.com/sveltejs/svelte/issues/6921))\n- Fix default values in `{#each}`/etc. destructurings not being considered references for the purposes of compiler warnings ([#6964](https://github.com/sveltejs/svelte/issues/6964))\n- Fix `{:else if}` value incorrectly being cached ([#7043](https://github.com/sveltejs/svelte/pull/7043))\n- Add `a11y-no-redundant-roles` warning ([#7067](https://github.com/sveltejs/svelte/pull/7067))\n- Fix code generation error with arrow functions whose bodies are object destructuring assignments ([#7087](https://github.com/sveltejs/svelte/issues/7087))\n\n## 3.44.3\n\n- Fix `bind:this` binding inside `onMount` for manually instantiated component ([#6760](https://github.com/sveltejs/svelte/issues/6760))\n- Prevent cursor jumps with one-way binding for other `type=\"text\"`-like `<input>`s ([#6941](https://github.com/sveltejs/svelte/pull/6941))\n- Exclude `async` loops from `loopGuardTimeout` ([#6945](https://github.com/sveltejs/svelte/issues/6945))\n\n## 3.44.2\n\n- Fix overly restrictive preprocessor types ([#6904](https://github.com/sveltejs/svelte/pull/6904))\n- More specific typing for crossfade function - returns a tuple, not an array ([#6926](https://github.com/sveltejs/svelte/issues/6926))\n- Add `URLSearchParams` as a known global ([#6938](https://github.com/sveltejs/svelte/pull/6938))\n- Add `types` field to `exports` map ([#6939](https://github.com/sveltejs/svelte/issues/6939))\n\n## 3.44.1\n\n- Fix code generation when a multi-line `return` statement contains comments ([code-red#36](https://github.com/Rich-Harris/code-red/issues/36))\n- Fix code generation when `for`/`if`/`while` statements have empty bodies ([#6884](https://github.com/sveltejs/svelte/issues/6884))\n\n## 3.44.0\n\n- Add `enableSourcemap` compiler option ([#6835](https://github.com/sveltejs/svelte/pull/6835))\n\n## 3.43.2\n\n- Fix regression where user-specified `import`s were not rewritten according to the `sveltePath` option ([#6834](https://github.com/sveltejs/svelte/issues/6834))\n\n## 3.43.1\n\n- Prevent a rejecting promise used in `{#await}` during SSR from appearing as an unhandled rejection ([#6789](https://github.com/sveltejs/svelte/issues/6789))\n\n## 3.43.0\n\n- Use export map to expose no-op versions of lifecycle functions for SSR ([#6743](https://github.com/sveltejs/svelte/pull/6743))\n- Prefer `context` passed to component constructor, even when running synchronously in another component ([#6753](https://github.com/sveltejs/svelte/issues/6753))\n- Handle preprocessors that return empty sourcemaps ([#6757](https://github.com/sveltejs/svelte/pull/6757))\n\n## 3.42.6\n\n- Hide private preprocess typings ([#6622](https://github.com/sveltejs/svelte/issues/6622))\n- Fix reactive function in `{:else if}` expression not being properly re-run ([#6727](https://github.com/sveltejs/svelte/pull/6727))\n\n## 3.42.5\n\n- In `draw` transition, account for `stroke-linecap` in determining length ([#4540](https://github.com/sveltejs/svelte/issues/4540))\n- Fix regression with destructuring assignments with default values ([#6699](https://github.com/sveltejs/svelte/issues/6699))\n\n## 3.42.4\n\n- Only apply optimized `src` attribute handling when in an `html` namespace ([#6575](https://github.com/sveltejs/svelte/issues/6575))\n- Fix styles for transitions and animations being attached to the wrong `document` in `<iframe>`s ([#6637](https://github.com/sveltejs/svelte/issues/6637))\n- Fix `<select>` with a `{...spread}` attribute that didn't provide a `value` key getting its value improperly unset ([#6675](https://github.com/sveltejs/svelte/issues/6675))\n\n## 3.42.3\n\n- Add `BigInt` as a known global ([#6671](https://github.com/sveltejs/svelte/pull/6671))\n- Fix regression where `onDestroy` in `svelte/ssr` was improperly a no-op ([#6676](https://github.com/sveltejs/svelte/issues/6676))\n\n## 3.42.2\n\n- Collapse whitespace in `class` and `style` attributes ([#6004](https://github.com/sveltejs/svelte/issues/6004))\n- Deselect all `<option>`s in a `<select>` where the bound `value` doesn't match any of them ([#6126](https://github.com/sveltejs/svelte/issues/6126))\n- In hydrated components, only rely on helpers for creating the types of elements present in the component ([#6555](https://github.com/sveltejs/svelte/issues/6555))\n- Add `HTMLElement` and `SVGElement` as known globals ([#6643](https://github.com/sveltejs/svelte/issues/6643))\n- Account for scaling in `flip` animations ([#6657](https://github.com/sveltejs/svelte/issues/6657))\n\n## 3.42.1\n\n- Fix regression with reordering keyed `{#each}` blocks when compiling with hydration enabled ([#6561](https://github.com/sveltejs/svelte/issues/6561))\n\n## 3.42.0\n\n- Allow `use:actions` to be used on `<svelte:body>` ([#3163](https://github.com/sveltejs/svelte/issues/3163))\n- Improve parser errors for certain invalid components ([#6259](https://github.com/sveltejs/svelte/issues/6259), [#6288](https://github.com/sveltejs/svelte/issues/6288))\n- Fix paths in generator JS sourcemaps to be relative ([#6598](https://github.com/sveltejs/svelte/pull/6598))\n- Fix overzealous warnings about `context=\"module\"` variables not being reactive ([#6606](https://github.com/sveltejs/svelte/issues/6606))\n\n## 3.41.0\n\n- Support `export { ... } from` syntax in components ([#2214](https://github.com/sveltejs/svelte/issues/2214))\n- Support `export let { ... } =` syntax in components ([#5612](https://github.com/sveltejs/svelte/issues/5612))\n- Support `{#await ... then/catch}` without a variable for the resolved/rejected value ([#6270](https://github.com/sveltejs/svelte/issues/6270))\n\n## 3.40.3\n\n- Fix `<slot>` data when a transition is cancelled before completing ([#5394](https://github.com/sveltejs/svelte/issues/5394))\n- Fix destructuring into variables beginning with `$` so that they result in store updates ([#5653](https://github.com/sveltejs/svelte/issues/5653))\n- Fix `in:` transition configuration not properly updating when it's changed after its initial creation ([#6505](https://github.com/sveltejs/svelte/issues/6505))\n- Fix applying `:global()` for `>` selector combinator ([#6550](https://github.com/sveltejs/svelte/issues/6550))\n- Fix mounting component at detached DOM node ([#6567](https://github.com/sveltejs/svelte/issues/6567))\n\n## 3.40.2\n\n- Fix dynamic `autofocus={...}` attribute handling ([#4995](https://github.com/sveltejs/svelte/issues/4995))\n- Add filename to combined source map if needed ([#6089](https://github.com/sveltejs/svelte/pull/6089))\n- In AST, parse empty attribute values as an empty string ([#6286](https://github.com/sveltejs/svelte/issues/6286))\n- Fix tracking whether transition has started ([#6399](https://github.com/sveltejs/svelte/pull/6399))\n- Fix incorrect scoping of `:global()` selectors ([#6550](https://github.com/sveltejs/svelte/issues/6550))\n\n## 3.40.1\n\n- Fix store reactivity regression when using reactive statements ([#6557](https://github.com/sveltejs/svelte/issues/6557))\n\n## 3.40.0\n\n- Support rendering a component in a shadow DOM ([#5869](https://github.com/sveltejs/svelte/issues/5869))\n- Fix `:root` selector being erroneously scoped to component ([#4767](https://github.com/sveltejs/svelte/issues/4767))\n- Fix `.end` in AST for expressions inside attributes ([#6258](https://github.com/sveltejs/svelte/issues/6258))\n- Fix one-way `<select>` binding when it has a spread attribute ([#6433](https://github.com/sveltejs/svelte/issues/6433))\n- Various hydration improvements and fixes ([#6449](https://github.com/sveltejs/svelte/pull/6449))\n- Use smaller versions of internal helpers when compiling without hydration support ([#6462](https://github.com/sveltejs/svelte/issues/6462))\n- Fix two-way binding of values when updating through synchronous component accessors ([#6502](https://github.com/sveltejs/svelte/issues/6502))\n\n## 3.39.0\n\n- Support `bind:group` in SSR ([#4621](https://github.com/sveltejs/svelte/pull/4621))\n- Add a11y warning `a11y-mouse-events-have-key-events` which checks that `mouseover`/`mouseout` are accompanied by `focus`/`blur` event handlers ([#5938](https://github.com/sveltejs/svelte/pull/5938))\n- Make it possible to silence more warnings ([#5954](https://github.com/sveltejs/svelte/issues/5954))\n- Add `|trusted` event modifier ([#6137](https://github.com/sveltejs/svelte/issues/6137))\n- Add `varsReport` compiler option to include all variables reference in the component in the `variables` report ([#6192](https://github.com/sveltejs/svelte/pull/6192))\n- Add `errorMode` compiler option to try to continue compiling when an error is detected ([#6194](https://github.com/sveltejs/svelte/pull/6194))\n- Expose `svelte/ssr` which exports lifecycle methods as no-ops ([#6416](https://github.com/sveltejs/svelte/pull/6416))\n- Add `getAllContexts` ([#6447](https://github.com/sveltejs/svelte/issues/6447))\n- Throw proper error for `export default function() {}` and `export default class {}` rather than crashing the compiler ([#3275](https://github.com/sveltejs/svelte/issues/3275))\n- Fix SSR rendering of falsy `input` values ([#4551](https://github.com/sveltejs/svelte/issues/4551))\n- Fix `preserveComments` in SSR mode ([#4730](https://github.com/sveltejs/svelte/issues/4730))\n- Do not warn if `context=\"module\"` variables are not the only dependencies in reactive statements ([#5954](https://github.com/sveltejs/svelte/issues/5954))\n- Stop checking `a11y-media-has-caption` a11y warning on `<audio>` elements ([#6054](https://github.com/sveltejs/svelte/issues/6054))\n- Fix erroneous \"unknown prop\" warning when using slot on a component ([#6065](https://github.com/sveltejs/svelte/pull/6065))\n- Add sourcemaps to all HTML elements ([#6092](https://github.com/sveltejs/svelte/issues/6092))\n- Relax `derived` function signature ([#6178](https://github.com/sveltejs/svelte/issues/6178))\n- Throw compiler error when passing empty directive names ([#6299](https://github.com/sveltejs/svelte/issues/6299))\n- Fix compiler error when using `:where()` inside `:global()` ([#6434](https://github.com/sveltejs/svelte/issues/6434))\n- Fix ordering of elements in keyed `{#each}` ([#6444](https://github.com/sveltejs/svelte/issues/6444))\n- Remove deprecated a11y warning `a11y-no-onchange warning` ([#6457](https://github.com/sveltejs/svelte/issues/6457))\n- Fix `:global()` with pseudo element not being seen as global ([#6468](https://github.com/sveltejs/svelte/issues/6468))\n- Allow `:global()` to contain multiple selectors when it is not part of a larger selector ([#6477](https://github.com/sveltejs/svelte/issues/6477))\n- Make `<script>` and `<style>` end tag parsing more robust ([#6511](https://github.com/sveltejs/svelte/pull/6511))\n\n## 3.38.3\n\n- Speed up hydration by reducing amount of element reorderings ([#4308](https://github.com/sveltejs/svelte/issues/4308))\n- Fix escaping attribute values when using a spread in SSR ([#5756](https://github.com/sveltejs/svelte/issues/5756))\n- Throw compiler error when `:global()` contains multiple selectors ([#5907](https://github.com/sveltejs/svelte/issues/5907))\n- Give explicit error rather than crashing when an attribute shorthand `{}` is empty ([#6086](https://github.com/sveltejs/svelte/issues/6086))\n- Make `<textarea>` end tag parsing more robust ([#6276](https://github.com/sveltejs/svelte/issues/6276))\n- Fix `:global(...):some-pseudoclass` selectors not being seen as global ([#6306](https://github.com/sveltejs/svelte/issues/6306))\n- Fix type signatures of `writable` and `readable` so it's possible to call them without arguments ([#6291](https://github.com/sveltejs/svelte/issues/6291), [#6345](https://github.com/sveltejs/svelte/issues/6345))\n- Preserve `this` in bubbled events ([#6310](https://github.com/sveltejs/svelte/issues/6310))\n- Fix slot props not updating when transition is aborted ([#6386](https://github.com/sveltejs/svelte/issues/6386))\n- Fix generic props relationship in `SvelteComponentTyped` ([#6400](https://github.com/sveltejs/svelte/pull/6400))\n\n## 3.38.2\n\n- Revert hydration optimisation for the time being ([#6279](https://github.com/sveltejs/svelte/issues/6279))\n\n## 3.38.1\n\n- Fix hydration regression ([#6274](https://github.com/sveltejs/svelte/issues/6274))\n\n## 3.38.0\n\n- Avoid recreating DOM elements during hydration ([#1067](https://github.com/sveltejs/svelte/issues/1067))\n- Support passing CSS custom properties to component ([#5628](https://github.com/sveltejs/svelte/issues/5628))\n- Support `:global()` as part of compound CSS selectors ([#6222](https://github.com/sveltejs/svelte/issues/6222))\n- Fix updating `<slot>` contents when there's an aborted transition ([#3542](https://github.com/sveltejs/svelte/issues/3542))\n- Fix setting boolean attributes on custom elements ([#5951](https://github.com/sveltejs/svelte/issues/5951))\n- Add missing function overload for `derived` to allow explicitly setting an initial value for non-async derived stores ([#6172](https://github.com/sveltejs/svelte/pull/6172))\n- Fix dynamic `href` values erroneously triggering a11y warnings ([#5990](https://github.com/sveltejs/svelte/issues/5990))\n- Fix scope leak when updating an `{#await}` block ([#6173](https://github.com/sveltejs/svelte/issues/6173))\n- Pass full markup source to `script`/`style` preprocessors ([#6169](https://github.com/sveltejs/svelte/pull/6169))\n- Fix `crossfade` types to mark `fallback` as optional ([#6201](https://github.com/sveltejs/svelte/pull/6201))\n- Add missing \"context\" typing to `SvelteComponent` constructor options ([#6236](https://github.com/sveltejs/svelte/pull/6236))\n- Don't automatically switch to `svg` namespace when in `foreign` namespace ([#6257](https://github.com/sveltejs/svelte/issues/6257))\n\n## 3.37.0\n\n- Allow root-level context to be passed to the component constructor ([#6032](https://github.com/sveltejs/svelte/pull/6032))\n\n## 3.36.0\n\n- Add `this: void` typing to store functions ([#6094](https://github.com/sveltejs/svelte/pull/6094))\n- Export `Spring`, `Tweened` and `EasingFunction` interfaces ([#6070](https://github.com/sveltejs/svelte/issues/6070), [#6056](https://github.com/sveltejs/svelte/pull/6056))\n- Export interfaces for transition parameters ([#5207](https://github.com/sveltejs/svelte/issues/5207))\n- Export store's useful TypeScript definitions ([#5864](https://github.com/sveltejs/svelte/issues/5864))\n- Fix previous breaking change to `svelte/preprocess` types location ([#6100](https://github.com/sveltejs/svelte/pull/6100))\n- Fix missing slotted elements in AST ([#6066](https://github.com/sveltejs/svelte/issues/6066))\n\n## 3.35.0\n\n- Implement slotted components and `<svelte:fragment slot=\"...\">` ([#1037](https://github.com/sveltejs/svelte/issues/1037), [#2079](https://github.com/sveltejs/svelte/issues/2079))\n- Fix reactivity bug where `slot=\"...\"` is specified after attributes that should be reactive ([#5626](https://github.com/sveltejs/svelte/issues/5626))\n\n## 3.34.0\n\n- Add a `cssHash` option for controlling the classname used for CSS scoping ([#570](https://github.com/sveltejs/svelte/issues/570))\n\n## 3.33.0\n\n- In custom elements, call `onMount` functions when connecting and clean up when disconnecting ([#1152](https://github.com/sveltejs/svelte/issues/1152), [#2227](https://github.com/sveltejs/svelte/issues/2227), [#4522](https://github.com/sveltejs/svelte/pull/4522))\n- Allow destructured defaults to refer to other variables ([#5066](https://github.com/sveltejs/svelte/issues/5066))\n- Do not emit `contextual-store` warnings for function parameters or declared variables ([#6008](https://github.com/sveltejs/svelte/pull/6008))\n\n## 3.32.3\n\n- Fix removal of lone `:host` selectors ([#5982](https://github.com/sveltejs/svelte/issues/5982))\n\n## 3.32.2\n\n- Fix unnecessary additional invalidation with `<Component bind:prop={obj.foo}/>` ([#3075](https://github.com/sveltejs/svelte/issues/3075), [#4447](https://github.com/sveltejs/svelte/issues/4447), [#5555](https://github.com/sveltejs/svelte/issues/5555))\n- Fix scoping of selectors with `:global()` and `~` sibling combinators ([#5499](https://github.com/sveltejs/svelte/issues/5499))\n- Fix removal of `:host` selectors as unused when compiling to a custom element ([#5946](https://github.com/sveltejs/svelte/issues/5946))\n\n## 3.32.1\n\n- Warn when using `module` variables reactively, and close weird reactivity loophole ([#5847](https://github.com/sveltejs/svelte/pull/5847))\n- Throw a parser error for `class:` directives with an empty class name ([#5858](https://github.com/sveltejs/svelte/issues/5858))\n- Fix extraneous store subscription in SSR mode ([#5883](https://github.com/sveltejs/svelte/issues/5883))\n- Don't emit update code for `class:` directives whose expression is not dynamic ([#5919](https://github.com/sveltejs/svelte/issues/5919))\n- Fix type inference for derived stores ([#5935](https://github.com/sveltejs/svelte/pull/5935))\n- Make parameters of built-in animations and transitions optional ([#5936](https://github.com/sveltejs/svelte/pull/5936))\n- Make `SvelteComponentDev` typings more forgiving ([#5937](https://github.com/sveltejs/svelte/pull/5937))\n- Fix `foreign` elements incorrectly disallowing `bind:this` ([#5942](https://github.com/sveltejs/svelte/pull/5942))\n\n## 3.32.0\n\n- Allow multiple instances of the same action on an element ([#5516](https://github.com/sveltejs/svelte/issues/5516))\n- Support `foreign` namespace, which disables certain HTML5-specific behaviour and checks ([#5652](https://github.com/sveltejs/svelte/pull/5652))\n- Support inline comment sourcemaps in code from preprocessors ([#5854](https://github.com/sveltejs/svelte/pull/5854))\n\n## 3.31.2\n\n- Rework SSR store handling to subscribe and unsubscribe as in DOM mode ([#3375](https://github.com/sveltejs/svelte/issues/3375), [#3582](https://github.com/sveltejs/svelte/issues/3582), [#3636](https://github.com/sveltejs/svelte/issues/3636))\n- Fix error when removing elements that are already transitioning out ([#5789](https://github.com/sveltejs/svelte/issues/5789), [#5808](https://github.com/sveltejs/svelte/issues/5808))\n- Fix duplicate content race condition with `{#await}` blocks and out transitions ([#5815](https://github.com/sveltejs/svelte/issues/5815))\n- Deconflict variable names used for contextual actions ([#5834](https://github.com/sveltejs/svelte/issues/5834))\n\n## 3.31.1\n\n- Fix scrolling of element with resize listener by making the `<iframe>` have `z-index: -1` ([#5448](https://github.com/sveltejs/svelte/issues/5448))\n- Fix location of automatically declared reactive variables ([#5749](https://github.com/sveltejs/svelte/issues/5749))\n- Warn when using `className` or `htmlFor` attributes ([#5777](https://github.com/sveltejs/svelte/issues/5777))\n- Fix checkbox `bind:group` in keyed `{#each}` where the array can be reordered ([#5779](https://github.com/sveltejs/svelte/issues/5779))\n- Fix checkbox `bind:group` in nested `{#each}` contexts ([#5811](https://github.com/sveltejs/svelte/issues/5811))\n- Add graphics roles as known ARIA roles ([#5822](https://github.com/sveltejs/svelte/pull/5822))\n- Fix local transitions if a parent has a cancelled outro transition ([#5829](https://github.com/sveltejs/svelte/issues/5829))\n- Support `use:obj.some.deep.function` as actions ([#5844](https://github.com/sveltejs/svelte/issues/5844))\n\n## 3.31.0\n\n- Use a separate `SvelteComponentTyped` interface for typed components ([#5738](https://github.com/sveltejs/svelte/pull/5738))\n\n## 3.30.1\n\n- Support consuming decoded sourcemaps as created by the `source-map` library's `SourceMapGenerator` ([#5722](https://github.com/sveltejs/svelte/issues/5722))\n- Actually export `hasContext` ([#5726](https://github.com/sveltejs/svelte/issues/5726))\n\n## 3.30.0\n\n- Add a typed `SvelteComponent` interface ([#5431](https://github.com/sveltejs/svelte/pull/5431))\n- Support spread into `<slot>` props ([#5456](https://github.com/sveltejs/svelte/issues/5456))\n- Fix setting reactive dependencies which don't appear in the template to `undefined` ([#5538](https://github.com/sveltejs/svelte/issues/5538))\n- Support preprocessor sourcemaps during compilation ([#5584](https://github.com/sveltejs/svelte/pull/5584))\n- Fix ordering of elements when using `{#if}` inside `{#key}` ([#5680](https://github.com/sveltejs/svelte/issues/5680))\n- Add `hasContext` lifecycle function ([#5690](https://github.com/sveltejs/svelte/pull/5690))\n- Fix missing `walk` types in `svelte/compiler` ([#5696](https://github.com/sveltejs/svelte/pull/5696))\n\n## 3.29.7\n\n- Include `./register` in exports map ([#5670](https://github.com/sveltejs/svelte/issues/5670))\n\n## 3.29.6\n\n- Include `./package.json` in export map ([#5659](https://github.com/sveltejs/svelte/issues/5659))\n\n## 3.29.5\n\n- Fix `$$props` and `$$restProps` when compiling to a custom element ([#5482](https://github.com/sveltejs/svelte/issues/5482))\n- Include an export map in `package.json` ([#5556](https://github.com/sveltejs/svelte/issues/5556))\n- Fix function calls in `<slot>` props that use contextual values ([#5565](https://github.com/sveltejs/svelte/issues/5565))\n- Fix handling aborted transitions in `{:else}` blocks ([#5573](https://github.com/sveltejs/svelte/issues/5573))\n- Add `Element` and `Node` to known globals ([#5586](https://github.com/sveltejs/svelte/issues/5586))\n- Fix `$$slots` when compiling to custom elements ([#5594](https://github.com/sveltejs/svelte/issues/5594))\n- Fix internal `import`s so that we're exposing a valid ES module ([#5617](https://github.com/sveltejs/svelte/issues/5617))\n\n## 3.29.4\n\n- Fix code generation error with `??` alongside logical operators ([#5558](https://github.com/sveltejs/svelte/issues/5558))\n\n## 3.29.3\n\n- Hopefully actually republish with proper UMD build for use in the REPL\n\n## 3.29.2\n\n- Republish with proper UMD build for use in the REPL\n\n## 3.29.1\n\n- Fix compiler hanging on `<slot slot=\"...\">` ([#5475](https://github.com/sveltejs/svelte/issues/5475))\n- Fix types on `get` function in `svelte/store` ([#5483](https://github.com/sveltejs/svelte/pull/5483))\n- Add missing `end` field on ASTs for non-top-level `<style>` elements ([#5487](https://github.com/sveltejs/svelte/pull/5487))\n- Fix `{#if}` inside `{#await}` with destructuring ([#5508](https://github.com/sveltejs/svelte/issues/5508))\n- Fix types on lifecycle hooks ([#5529](https://github.com/sveltejs/svelte/pull/5529))\n\n## 3.29.0\n\n- Support `<slot slot=\"...\">` ([#2079](https://github.com/sveltejs/svelte/issues/2079))\n- Fix unmounting components with a bidirectional transition with a delay ([#4954](https://github.com/sveltejs/svelte/issues/4954))\n- Add types to `get` function in `svelte/store` ([#5269](https://github.com/sveltejs/svelte/pull/5269))\n- Add a warning when a component looks like it's trying to use another component without beginning with a capital letter ([#5302](https://github.com/sveltejs/svelte/pull/5302))\n- Add `EventSource` to known globals ([#5463](https://github.com/sveltejs/svelte/issues/5463))\n- Fix compiler exception with `~`/`+` combinators and `{...spread}` attributes ([#5465](https://github.com/sveltejs/svelte/issues/5465))\n\n## 3.28.0\n\n- Add `{#key}` block for keying arbitrary content on an expression ([#1469](https://github.com/sveltejs/svelte/issues/1469))\n\n## 3.27.0\n\n- Add `|nonpassive` event modifier, explicitly passing `passive: false` ([#2068](https://github.com/sveltejs/svelte/issues/2068))\n- Scope CSS selectors with `~` and `+` combinators ([#3104](https://github.com/sveltejs/svelte/issues/3104))\n- Fix keyed `{#each}` not reacting to key changing ([#5444](https://github.com/sveltejs/svelte/issues/5444))\n- Fix destructuring into store values ([#5449](https://github.com/sveltejs/svelte/issues/5449))\n- Fix erroneous `missing-declaration` warning with `use:obj.method` ([#5451](https://github.com/sveltejs/svelte/issues/5451))\n\n## 3.26.0\n\n- Support `use:obj.method` as actions ([#3935](https://github.com/sveltejs/svelte/issues/3935))\n- Support `_` as numeric separator ([#5407](https://github.com/sveltejs/svelte/issues/5407))\n- Fix assignments to properties on store values ([#5412](https://github.com/sveltejs/svelte/issues/5412))\n- Add special style scoping handling of `[open]` selectors on `<details>` elements ([#5421](https://github.com/sveltejs/svelte/issues/5421))\n- Support `import.meta` in template expressions ([#5422](https://github.com/sveltejs/svelte/issues/5422))\n\n## 3.25.1\n\n- Fix specificity of certain styles involving a child selector ([#4795](https://github.com/sveltejs/svelte/issues/4795))\n- Fix transitions that are parameterised with stores ([#5244](https://github.com/sveltejs/svelte/issues/5244))\n- Fix scoping of styles involving child selector and `*` ([#5370](https://github.com/sveltejs/svelte/issues/5370))\n- Fix destructuring which reassigns stores ([#5388](https://github.com/sveltejs/svelte/issues/5388))\n- Fix `{#await}`s with no `{:catch}` getting stuck unresolved if the promise rejects ([#5401](https://github.com/sveltejs/svelte/issues/5401))\n\n## 3.25.0\n\n- Use `null` rather than `undefined` for coerced bound value of `<input type=\"number\">` ([#1701](https://github.com/sveltejs/svelte/issues/1701))\n- Expose object of which slots have received content in `$$slots` ([#2106](https://github.com/sveltejs/svelte/issues/2106))\n- Correctly disallow using lifecycle hooks after synchronous component initialisation ([#4259](https://github.com/sveltejs/svelte/issues/4259), [#4899](https://github.com/sveltejs/svelte/issues/4899))\n- Re-throw an unhandled rejection when an `{#await}` block with no `{:catch}` gets a rejection ([#5129](https://github.com/sveltejs/svelte/issues/5129))\n- Add types to `createEventDispatcher` ([#5211](https://github.com/sveltejs/svelte/issues/5211))\n- In SSR mode, do not automatically declare variables for reactive assignments to member expressions ([#5247](https://github.com/sveltejs/svelte/issues/5247))\n- Include selector in message of `unused-css-selector` warning ([#5252](https://github.com/sveltejs/svelte/issues/5252))\n- Fix using `<Namespaced.Component/>`s in child `{#await}`/`{#each}` contexts ([#5255](https://github.com/sveltejs/svelte/issues/5255))\n- Fix using `<svelte:component>` in `{:catch}` ([#5259](https://github.com/sveltejs/svelte/issues/5259))\n- Fix setting one-way bound `<input>` `value` to `undefined` when it has spread attributes ([#5270](https://github.com/sveltejs/svelte/issues/5270))\n- Fix deep two-way bindings inside an `{#each}` involving a store ([#5286](https://github.com/sveltejs/svelte/issues/5286))\n- Use valid XHTML for elements that are optimised and inserted with `.innerHTML` ([#5315](https://github.com/sveltejs/svelte/issues/5315))\n- Fix reactivity of `$$props` in slot fallback content ([#5367](https://github.com/sveltejs/svelte/issues/5367))\n\n## 3.24.1\n\n- Prevent duplicate invalidation with certain two-way component bindings ([#3180](https://github.com/sveltejs/svelte/issues/3180), [#5117](https://github.com/sveltejs/svelte/issues/5117), [#5144](https://github.com/sveltejs/svelte/issues/5144))\n- Fix reactivity when passing `$$props` to a `<slot>` ([#3364](https://github.com/sveltejs/svelte/issues/3364))\n- Fix transitions on `{#each}` `{:else}` ([#4970](https://github.com/sveltejs/svelte/issues/4970))\n- Fix unneeded invalidation of `$$props` and `$$restProps` ([#4993](https://github.com/sveltejs/svelte/issues/4993), [#5118](https://github.com/sveltejs/svelte/issues/5118))\n- Provide better compiler error message when mismatched tags are due to autoclosing of tags ([#5049](https://github.com/sveltejs/svelte/issues/5049))\n- Add `a11y-label-has-associated-control` warning ([#5074](https://github.com/sveltejs/svelte/pull/5074))\n- Add `a11y-media-has-caption` warning ([#5075](https://github.com/sveltejs/svelte/pull/5075))\n- Fix `bind:group` when using contextual reference ([#5174](https://github.com/sveltejs/svelte/issues/5174))\n\n## 3.24.0\n\n- Support nullish coalescing (`??`) and optional chaining (`?.`) operators ([#1972](https://github.com/sveltejs/svelte/issues/1972))\n- Support `import.meta` ([#4379](https://github.com/sveltejs/svelte/issues/4379))\n- Fix only setting `<input>` values when they're changed when there are spread attributes ([#4418](https://github.com/sveltejs/svelte/issues/4418))\n- Fix placement of `{@html}` when used at the root of a slot, at the root of a component, or in `<svelte:head>` ([#5012](https://github.com/sveltejs/svelte/issues/5012), [#5071](https://github.com/sveltejs/svelte/pull/5071))\n- Fix certain handling of two-way bound `contenteditable` elements ([#5018](https://github.com/sveltejs/svelte/issues/5018))\n- Fix handling of `import`ed value that is used as a store and is also mutated ([#5019](https://github.com/sveltejs/svelte/issues/5019))\n- Do not display `a11y-missing-content` warning on elements with `contenteditable` bindings ([#5020](https://github.com/sveltejs/svelte/issues/5020))\n- Fix handling of `this` in inline function expressions in the template ([#5033](https://github.com/sveltejs/svelte/issues/5033))\n- Fix collapsing HTML with static content ([#5040](https://github.com/sveltejs/svelte/issues/5040))\n- Prevent use of `$store` at compile time when top-level `store` has been shadowed ([#5048](https://github.com/sveltejs/svelte/issues/5048))\n- Update `<select>` with one-way `value` binding when the available `<option>`s change ([#5051](https://github.com/sveltejs/svelte/issues/5051))\n- Fix published `tweened` types so the `.set()` and `.update()` options are optional ([#5062](https://github.com/sveltejs/svelte/issues/5062))\n- Fix contextual `bind:this` inside `{#each}` block ([#5067](https://github.com/sveltejs/svelte/issues/5067))\n- Preprocess self-closing `<script>` and `<style>` tags ([#5080](https://github.com/sveltejs/svelte/issues/5080))\n- Fix types for animation- and transition-related param objects so each param is optional ([#5083](https://github.com/sveltejs/svelte/pull/5083))\n\n## 3.23.2\n\n- Fix `bind:group` inside `{#each}` ([#3243](https://github.com/sveltejs/svelte/issues/3243))\n- Don't crash when using an arrow function as a statement ([#4617](https://github.com/sveltejs/svelte/issues/4617))\n- Deconflict `bind:this` variable ([#4636](https://github.com/sveltejs/svelte/issues/4636))\n\n## 3.23.1\n\n- Fix checkbox `bind:group` when multiple options have the same value ([#4397](https://github.com/sveltejs/svelte/issues/4397))\n- Fix `bind:this` to the value of an `{#each}` block ([#4517](https://github.com/sveltejs/svelte/issues/4517))\n- Fix reactivity when assigning to contextual `{#each}` variable ([#4574](https://github.com/sveltejs/svelte/issues/4574), [#4744](https://github.com/sveltejs/svelte/issues/4744))\n- Fix binding to contextual `{#each}` values that shadow outer names ([#4757](https://github.com/sveltejs/svelte/issues/4757))\n- Work around EdgeHTML DOM issue when removing attributes during hydration ([#4911](https://github.com/sveltejs/svelte/pull/4911))\n- Throw CSS parser error when `:global()` does not contain a selector ([#4930](https://github.com/sveltejs/svelte/issues/4930))\n\n## 3.23.0\n\n- Update `<select>` with `bind:value` when the available `<option>`s change ([#1764](https://github.com/sveltejs/svelte/issues/1764))\n- Add `muted` binding for media elements ([#2998](https://github.com/sveltejs/svelte/issues/2998))\n- Fix inconsistencies when setting a two-way bound `<input>` to `undefined` ([#3569](https://github.com/sveltejs/svelte/issues/3569))\n- Fix setting `<select multiple>` when there are spread attributes ([#4392](https://github.com/sveltejs/svelte/issues/4392))\n- Fix let-less `<slot>` with context overflow ([#4624](https://github.com/sveltejs/svelte/issues/4624))\n- Fix resize listening on certain older browsers ([#4752](https://github.com/sveltejs/svelte/issues/4752))\n- Add `a11y-no-onchange` warning ([#4788](https://github.com/sveltejs/svelte/pull/4788))\n- Fix `use:` actions being recreated when a keyed `{#each}` is reordered ([#4693](https://github.com/sveltejs/svelte/issues/4693))\n- Fix `{@html}` when using tags that can only appear inside certain tags ([#4852](https://github.com/sveltejs/svelte/issues/4852))\n- Fix reactivity when binding directly to `{#each}` context ([#4879](https://github.com/sveltejs/svelte/issues/4879))\n\n## 3.22.3\n\n- Support default values and trailing commas in destructuring `{#await}` ([#4560](https://github.com/sveltejs/svelte/issues/4560), [#4810](https://github.com/sveltejs/svelte/issues/4810))\n- Fix handling of `tweened` store when set using `duration: 0` ([#4799](https://github.com/sveltejs/svelte/issues/4799), [#4846](https://github.com/sveltejs/svelte/issues/4846))\n- Fix setting `value` attribute with `bind:group` and attribute spread ([#4803](https://github.com/sveltejs/svelte/issues/4803))\n- Fix issue with compound `{#if}` block involving static condition, dynamic condition, and inline component ([#4840](https://github.com/sveltejs/svelte/issues/4840))\n- Update a11y warnings per ARIA 1.2 working draft ([#4844](https://github.com/sveltejs/svelte/issues/4844))\n\n## 3.22.2\n\n- Fix compiler exception with `a11y-img-redundant-alt` and value-less `alt` attribute ([#4777](https://github.com/sveltejs/svelte/issues/4777))\n\n## 3.22.1\n\n- Fix compiler exception with `a11y-img-redundant-alt` and dynamic `alt` attribute ([#4770](https://github.com/sveltejs/svelte/issues/4770))\n\n## 3.22.0\n\n- Fix misaligned line numbers in source maps ([#3906](https://github.com/sveltejs/svelte/issues/3906))\n- Make setting a `tweened` store using `duration: 0` instantly update the value ([#4399](https://github.com/sveltejs/svelte/issues/4399))\n- Fix reactivity with imported values that are then mutated ([#4555](https://github.com/sveltejs/svelte/issues/4555))\n- Fix contextual dynamic `bind:this` inside `{#each}` block ([#4686](https://github.com/sveltejs/svelte/issues/4686))\n- Do not display a11y warning about missing `href` for `<a>` with `name` or `id` ([#4697](https://github.com/sveltejs/svelte/issues/4697))\n- Disable infinite loop guard inside generators ([#4698](https://github.com/sveltejs/svelte/issues/4698))\n- Display `a11y-invalid-attribute` warning for `href=\"javascript:...\"` ([#4733](https://github.com/sveltejs/svelte/pull/4733))\n- Implement `a11y-img-redundant-alt` warning ([#4750](https://github.com/sveltejs/svelte/pull/4750))\n- Fix variable name conflict with component called `<Anchor>` ([#4768](https://github.com/sveltejs/svelte/issues/4768))\n\n## 3.21.0\n\n- Support dimension bindings in cross-origin environments ([#2147](https://github.com/sveltejs/svelte/issues/2147))\n- Fix several related outro bugs ([#3202](https://github.com/sveltejs/svelte/issues/3202), [#3410](https://github.com/sveltejs/svelte/issues/3410), [#3685](https://github.com/sveltejs/svelte/issues/3685), [#4620](https://github.com/sveltejs/svelte/issues/4620), [#4630](https://github.com/sveltejs/svelte/issues/4630))\n- Try using `globalThis` rather than `globals` for the benefit of non-Node servers and web workers ([#3561](https://github.com/sveltejs/svelte/issues/3561), [#4545](https://github.com/sveltejs/svelte/issues/4545))\n- Support `{#await ... catch ...}` syntax shorthand ([#3623](https://github.com/sveltejs/svelte/issues/3623))\n- Fix attaching of JS debugging comments to HTML comments ([#4565](https://github.com/sveltejs/svelte/issues/4565))\n- Fix `<svelte:component/>` within `<slot/>` ([#4597](https://github.com/sveltejs/svelte/issues/4597))\n- Fix bug with updating simple `{#if}` blocks ([#4629](https://github.com/sveltejs/svelte/issues/4629))\n- Fix issues with `<input type=\"number\">` updates ([#4631](https://github.com/sveltejs/svelte/issues/4631), [#4687](https://github.com/sveltejs/svelte/issues/4687))\n- Prevent illegal attribute names ([#4648](https://github.com/sveltejs/svelte/issues/4648))\n- Fix `{#if}` block directly within `<slot/>` ([#4703](https://github.com/sveltejs/svelte/issues/4703))\n\n## 3.20.1\n\n- Fix compiler regression with slots ([#4562](https://github.com/sveltejs/svelte/issues/4562))\n\n## 3.20.0\n\n- Allow destructuring in `{#await}` blocks ([#1851](https://github.com/sveltejs/svelte/issues/1851))\n- Allow `<svelte:self>` to be used in a slot ([#2798](https://github.com/sveltejs/svelte/issues/2798))\n- Expose object of unknown props in `$$restProps` ([#2930](https://github.com/sveltejs/svelte/issues/2930))\n- Prevent passing named slots other than from the top level within a component ([#3385](https://github.com/sveltejs/svelte/issues/3385))\n- Allow transitions and animations to work within iframes ([#3624](https://github.com/sveltejs/svelte/issues/3624))\n- Fix initialising slot fallbacks when unnecessary ([#3763](https://github.com/sveltejs/svelte/issues/3763))\n- Disallow binding directly to `const` variables ([#4479](https://github.com/sveltejs/svelte/issues/4479))\n- Fix re-attaching event handlers on keyed `{#each}` blocks ([#4491](https://github.com/sveltejs/svelte/issues/4491))\n- Fix updating keyed `{#each}` blocks with `{:else}` ([#4536](https://github.com/sveltejs/svelte/issues/4536), [#4549](https://github.com/sveltejs/svelte/issues/4549))\n- Fix hydration of top-level content ([#4542](https://github.com/sveltejs/svelte/issues/4542))\n\n## 3.19.2\n\n- In `dev` mode, display a runtime warning when a component is passed an unexpected slot ([#1020](https://github.com/sveltejs/svelte/issues/1020), [#1447](https://github.com/sveltejs/svelte/issues/1447))\n- In `vars` array, correctly indicate whether `module` variables are `mutated` or `reassigned` ([#3215](https://github.com/sveltejs/svelte/issues/3215))\n- Fix spread props not updating in certain situations ([#3521](https://github.com/sveltejs/svelte/issues/3521), [#4480](https://github.com/sveltejs/svelte/issues/4480))\n- Use the fallback content for slots if they are passed only whitespace ([#4092](https://github.com/sveltejs/svelte/issues/4092))\n- Fix bitmask overflow for `{#if}` blocks ([#4263](https://github.com/sveltejs/svelte/issues/4263))\n- In `dev` mode, check for unknown props even if the component has no writable props ([#4323](https://github.com/sveltejs/svelte/issues/4323))\n- Exclude global variables from `$capture_state` ([#4463](https://github.com/sveltejs/svelte/issues/4463))\n- Fix bitmask overflow for slots ([#4481](https://github.com/sveltejs/svelte/issues/4481))\n\n## 3.19.1\n\n- Do not treat modifications to `$$props` as updates to a store called `$props` ([#4368](https://github.com/sveltejs/svelte/issues/4368))\n- Deconflict `value` parameter name used in contextual bindings ([#4445](https://github.com/sveltejs/svelte/issues/4445))\n- Fix dev mode validation of `{#each}` blocks using strings ([#4450](https://github.com/sveltejs/svelte/issues/4450))\n\n## 3.19.0\n\n- Fix indirect bindings involving elements with spreads ([#3680](https://github.com/sveltejs/svelte/issues/3680))\n- `$capture_state`/`$inject_state` now act on the component's entire state, rather than its props ([#3822](https://github.com/sveltejs/svelte/pull/3822))\n- Warn when using `<Foo/>` and `Foo` is dynamic ([#4331](https://github.com/sveltejs/svelte/issues/4331))\n- Display compilation warnings in `svelte/register` in dev mode ([#4364](https://github.com/sveltejs/svelte/issues/4364))\n- Fix unneeded updating of keyed each blocks ([#4373](https://github.com/sveltejs/svelte/issues/4373))\n- Throw runtime error in dev mode for non-array-like values in `{#each}` blocks ([#4408](https://github.com/sveltejs/svelte/issues/4408))\n\n## 3.18.2\n\n- Fix binding to module-level variables ([#4086](https://github.com/sveltejs/svelte/issues/4086))\n- Improve parsing error messages when there is a pending unclosed tag ([#4131](https://github.com/sveltejs/svelte/issues/4131))\n- Disallow attribute/prop names from matching two-way-bound names or `{shorthand}` attribute/prop names ([#4325](https://github.com/sveltejs/svelte/issues/4325))\n- Improve performance of `flush()` by not using `.shift()` ([#4356](https://github.com/sveltejs/svelte/pull/4356))\n- Permit reserved keywords as destructuring keys in `{#each}` ([#4372](https://github.com/sveltejs/svelte/issues/4372))\n- Disallow reserved keywords in `{expressions}` ([#4372](https://github.com/sveltejs/svelte/issues/4372))\n- Fix code generation error with precedence of arrow functions ([#4384](https://github.com/sveltejs/svelte/issues/4384))\n- Fix event handlers that are dynamic via reactive declarations or stores ([#4388](https://github.com/sveltejs/svelte/issues/4388))\n- Fix invalidation in expressions like `++foo.bar` ([#4393](https://github.com/sveltejs/svelte/issues/4393))\n\n## 3.18.1\n\n- Fix code generation error with adjacent inline and block comments ([#4312](https://github.com/sveltejs/svelte/issues/4312))\n- Fix detection of unused CSS selectors that begin with a `:global()` but contain a scoped portion ([#4314](https://github.com/sveltejs/svelte/issues/4314))\n\n## 3.18.0\n\n- Fix infinite loop when instantiating another component during `onMount` ([#3218](https://github.com/sveltejs/svelte/issues/3218))\n- Make autosubscribing to a nullish store a no-op ([#2181](https://github.com/sveltejs/svelte/issues/2181))\n\n## 3.17.3\n\n- Fix updating a `<slot>` inside an `{#if}` or other block ([#4292](https://github.com/sveltejs/svelte/issues/4292))\n- Fix using RxJS observables in `derived` stores ([#4298](https://github.com/sveltejs/svelte/issues/4298))\n- Add dev mode check to disallow duplicate keys in a keyed `{#each}` ([#4301](https://github.com/sveltejs/svelte/issues/4301))\n- Fix hydration of `<title>` when starting from SSR-generated code with `hydratable: true` ([#4310](https://github.com/sveltejs/svelte/issues/4310))\n\n## 3.17.2\n\n- Fix removing attributes during hydration ([#1733](https://github.com/sveltejs/svelte/issues/1733))\n- Disallow two-way binding to a variable declared by an `{#await}` block ([#4012](https://github.com/sveltejs/svelte/issues/4012))\n- Allow access to `let:` variables in sibling attributes on slot root ([#4173](https://github.com/sveltejs/svelte/issues/4173))\n- Fix `~=` and class selector matching against values separated by any whitespace characters ([#4242](https://github.com/sveltejs/svelte/issues/4242))\n- Fix code generation for `await`ed expressions that need parentheses ([#4267](https://github.com/sveltejs/svelte/issues/4267))\n- Preserve JavaScript comments from the original component source where possible ([#4268](https://github.com/sveltejs/svelte/issues/4268))\n- Add some more known globals ([#4276](https://github.com/sveltejs/svelte/pull/4276))\n- Correctly apply event modifiers to `<svelte:body>` events ([#4278](https://github.com/sveltejs/svelte/issues/4278))\n\n## 3.17.1\n\n- Only attach SSR mode markers to a component's `<head>` elements when compiling with `hydratable: true` ([#4258](https://github.com/sveltejs/svelte/issues/4258))\n\n## 3.17.0\n\n- Remove old `<head>` elements during hydration so they aren't duplicated ([#1607](https://github.com/sveltejs/svelte/issues/1607))\n- Prevent text input cursor jumping in Safari with one-way binding ([#3449](https://github.com/sveltejs/svelte/issues/3449))\n- Expose compiler version in dev events ([#4047](https://github.com/sveltejs/svelte/issues/4047))\n- Don't run actions before their element is in the document ([#4166](https://github.com/sveltejs/svelte/issues/4166))\n- Fix reactive assignments with destructuring and stores where the destructured value should be undefined ([#4170](https://github.com/sveltejs/svelte/issues/4170))\n- Fix hydrating `{:else}` in `{#each}` ([#4202](https://github.com/sveltejs/svelte/issues/4202))\n- Do not automatically declare variables in reactive declarations when assigning to a member expression ([#4212](https://github.com/sveltejs/svelte/issues/4212))\n- Fix stringifying of attributes in SSR mode when there are spread attributes ([#4240](https://github.com/sveltejs/svelte/issues/4240))\n- Only render one `<title>` in SSR mode when multiple components provide one ([#4250](https://github.com/sveltejs/svelte/pull/4250))\n\n## 3.16.7\n\n- Also apply actions in the order they're given along with other directives ([#2446](https://github.com/sveltejs/svelte/issues/2446), [#4156](https://github.com/sveltejs/svelte/pull/4156))\n- Check whether a dynamic event handler is a function before calling it ([#4090](https://github.com/sveltejs/svelte/issues/4090))\n- Correctly mark event handlers as dynamic when they involve an expression used in a `bind:` elsewhere ([#4155](https://github.com/sveltejs/svelte/pull/4155))\n\n## 3.16.6\n\n- Fix CSS specificity bug when encapsulating styles ([#1277](https://github.com/sveltejs/svelte/issues/1277))\n- Apply directives in the order they're given ([#2446](https://github.com/sveltejs/svelte/issues/2446))\n- Fix destructuring in `let:` directives ([#2751](https://github.com/sveltejs/svelte/issues/2751))\n- Preserve whitespace around `<tspan>`s in `<svg>`s ([#3998](https://github.com/sveltejs/svelte/issues/3998))\n\n## 3.16.5\n\n- Better fix for cascading invalidations and fix some regressions ([#4098](https://github.com/sveltejs/svelte/issues/4098), [#4114](https://github.com/sveltejs/svelte/issues/4114), [#4120](https://github.com/sveltejs/svelte/issues/4120))\n\n## 3.16.4\n\n- Fix slots with props not propagating through to inner slots ([#4061](https://github.com/sveltejs/svelte/issues/4061))\n- Fix noting autosubscribed stores as `referenced` in `vars` for tooling ([#4081](https://github.com/sveltejs/svelte/issues/4081))\n- Fix cascading invalidations in certain situations ([#4094](https://github.com/sveltejs/svelte/issues/4094))\n\n## 3.16.3\n\n- Fix bitmask overflow when using slotted components ([#4077](https://github.com/sveltejs/svelte/issues/4077))\n- Remove unnecessary `$$invalidate` calls from init block ([#4018](https://github.com/sveltejs/svelte/issues/4018))\n\n## 3.16.2\n\n- Handle slot updates when parent component has a bitmask overflow ([#4078](https://github.com/sveltejs/svelte/pull/4078))\n\n## 3.16.1\n\n- Fix unused export warning for props used as stores ([#4021](https://github.com/sveltejs/svelte/issues/4021))\n- Fix `{:then}` without resolved value containing `{#each}` ([#4022](https://github.com/sveltejs/svelte/issues/4022))\n- Fix incorrect code generated with `loopGuardTimeout` ([#4034](https://github.com/sveltejs/svelte/issues/4034))\n- Fix handling of bitmask overflow and globals ([#4037](https://github.com/sveltejs/svelte/issues/4037))\n- Fix `{:then}` containing `{#if}` ([#4044](https://github.com/sveltejs/svelte/issues/4044))\n- Fix bare `import`s in `format: 'cjs'` output mode ([#4055](https://github.com/sveltejs/svelte/issues/4050))\n- Warn when using a known global as a component name ([#4070](https://github.com/sveltejs/svelte/issues/4070))\n\n## 3.16.0\n\n- Use bitmasks to track changes ([#3945](https://github.com/sveltejs/svelte/pull/3945))\n- Fix heisenbug with component styles ([#3977](https://github.com/sveltejs/svelte/issues/3977))\n- Do not warn about missing expected props for `export function foo() {}` ([#3954](https://github.com/sveltejs/svelte/issues/3954))\n- Fix `context=\"module\"` exports with the same name as an instance variable ([#3983](https://github.com/sveltejs/svelte/issues/3983))\n- Fix binding to contextual values from `{#each}` blocks referring to global variables ([#3992](https://github.com/sveltejs/svelte/issues/3992))\n- Use `requestAnimationFrame` callback argument for smoother transitions ([#4014](https://github.com/sveltejs/svelte/pull/4014))\n- Fix `listen_dev` argument order ([#4016](https://github.com/sveltejs/svelte/pull/4016))\n\n## 3.15.0\n\n- Hide commented sections from preprocessors ([#3894](https://github.com/sveltejs/svelte/pull/3894))\n- Add `seeking` and `ended` bindings to media elements ([#3650](https://github.com/sveltejs/svelte/pull/3650))\n- Add `videoWidth` and `videoHeight` bindings to video elements ([#3927](https://github.com/sveltejs/svelte/pull/3927))\n- Fix for dynamic event handlers ([#3934](https://github.com/sveltejs/svelte/pull/3934))\n- Handle scale transforms when using the `flip` animation ([#3555](https://github.com/sveltejs/svelte/issues/3555))\n- Fix some code generation bugs ([#3929](https://github.com/sveltejs/svelte/issues/3929), [#3939](https://github.com/sveltejs/svelte/issues/3939))\n- Add `aria-hidden=\"true\"` to objects generated when adding resize-listeners, to improve accessibility ([#3948](https://github.com/sveltejs/svelte/issues/3948))\n\n## 3.14.1\n\n- Deconflict block method names with other variables ([#3900](https://github.com/sveltejs/svelte/issues/3900))\n- Fix entity encoding issue in text nodes with constant expressions ([#3911](https://github.com/sveltejs/svelte/issues/3911))\n- Make code for unknown prop warnings compatible with older js engines ([#3914](https://github.com/sveltejs/svelte/issues/3914))\n\n## 3.14.0\n\n- Add `loopGuardTimeout` option that augments `for`/`while` loops to prevent infinite loops, primarily for use in the REPL ([#3887](https://github.com/sveltejs/svelte/pull/3887))\n- Keep component bindings in sync when changed in reactive statements ([#3382](https://github.com/sveltejs/svelte/issues/3382))\n- Update attributes before bindings ([#3857](https://github.com/sveltejs/svelte/issues/3857))\n- Prevent variable naming conflict ([#3899](https://github.com/sveltejs/svelte/issues/3899))\n\n## 3.13.0\n\n- New structured code generation, which eliminates a number of edge cases and obscure bugs ([#3539](https://github.com/sveltejs/svelte/pull/3539))\n\nAlso:\n\n- Fix `{#each}` context not shadowing outer scope when using `bind:` ([#1565](https://github.com/sveltejs/svelte/issues/1565))\n- Fix edge cases in matching selectors against elements ([#1710](https://github.com/sveltejs/svelte/issues/1710))\n- Fix several bugs related to interaction of `{...spread}` attributes with other features ([#2721](https://github.com/sveltejs/svelte/issues/2721), [#2916](https://github.com/sveltejs/svelte/issues/2916), [#3421](https://github.com/sveltejs/svelte/issues/3421), [#3681](https://github.com/sveltejs/svelte/issues/3681), [#3764](https://github.com/sveltejs/svelte/issues/3764), [#3790](https://github.com/sveltejs/svelte/issues/3790))\n- Allow exiting a reactive block early with `break $` ([#2828](https://github.com/sveltejs/svelte/issues/2828))\n- Fix binding to props that have been renamed with `export { ... as ... }` ([#3508](https://github.com/sveltejs/svelte/issues/3508))\n- Fix application of style scoping class in cases of ambiguity ([#3544](https://github.com/sveltejs/svelte/issues/3544))\n- Check attributes have changed before setting them to avoid image flicker ([#3579](https://github.com/sveltejs/svelte/pull/3579))\n- Fix generating malformed code for `{@debug}` tags with no dependencies ([#3588](https://github.com/sveltejs/svelte/issues/3588))\n- Fix generated code in specific case involving compound ifs and child components ([#3595](https://github.com/sveltejs/svelte/issues/3595))\n- Fix `bind:this` binding to a store ([#3591](https://github.com/sveltejs/svelte/issues/3591))\n- Use safer `HTMLElement` check before extending class ([#3608](https://github.com/sveltejs/svelte/issues/3608))\n- Add `location` as a known global ([#3619](https://github.com/sveltejs/svelte/pull/3619))\n- Support `{#await}` with `{:catch}` but no `{:then}` ([#3623](https://github.com/sveltejs/svelte/issues/3623))\n- Clean up dead code emitted for `<slot/>`s ([#3631](https://github.com/sveltejs/svelte/issues/3631))\n- Fix tracking of dependencies of compound assignments in reactive statements ([#3634](https://github.com/sveltejs/svelte/issues/3634))\n- Flush changes in newly attached block when using `{#await}` ([#3660](https://github.com/sveltejs/svelte/issues/3660))\n- Throw exception immediately when calling `createEventDispatcher()` after component instantiation ([#3667](https://github.com/sveltejs/svelte/pull/3667))\n- Fix globals shadowing contextual template scope ([#3674](https://github.com/sveltejs/svelte/issues/3674))\n- Fix `<svelte:window>` bindings to stores ([#3832](https://github.com/sveltejs/svelte/issues/3832))\n- Deconflict generated var names with builtins ([#3724](https://github.com/sveltejs/svelte/issues/3724))\n- Allow spring/tweened values to be initially undefined ([#3761](https://github.com/sveltejs/svelte/issues/3761))\n- Warn if using `<svelte:options tag=\"...\">` without `customElement: true` option ([#3782](https://github.com/sveltejs/svelte/pull/3782))\n- Add `Event` to list of known globals ([#3810](https://github.com/sveltejs/svelte/pull/3810))\n- Throw helpful error on empty CSS declaration ([#3801](https://github.com/sveltejs/svelte/issues/3801))\n- Support `easing` param on `fade` transition ([#3823](https://github.com/sveltejs/svelte/pull/3823))\n- Generate valid names from filenames with unicode characters ([#3845](https://github.com/sveltejs/svelte/issues/3845))\n- Don't generate any code for markup-less components ([#2200](https://github.com/sveltejs/svelte/issues/2200))\n- Deconflict with internal name `block` ([#3854](https://github.com/sveltejs/svelte/issues/3854))\n- Set attributes before bindings, to prevent erroneous assignments to `input.files` ([#3828](https://github.com/sveltejs/svelte/issues/3828))\n- Smarter unused CSS detection ([#3825](https://github.com/sveltejs/svelte/pull/3825))\n- Allow dynamic event handlers ([#3040](https://github.com/sveltejs/svelte/issues/3040))\n- Prevent erroneous `\"undefined\"` class name ([#3876](https://github.com/sveltejs/svelte/pull/3876))\n- Prevent resetting of `src` attribute unless changed ([#3579](https://github.com/sveltejs/svelte/pull/3579))\n- Prevent hydration of void element 'children' ([#3882](https://github.com/sveltejs/svelte/issues/3882))\n- Hoist globals even if mentioned in `<script>` block ([#3745](https://github.com/sveltejs/svelte/pull/3745))\n\n## 3.12.1\n\n- Escape `@` symbols in props, again ([#3545](https://github.com/sveltejs/svelte/issues/3545))\n\n## 3.12.0\n\n- Fire events on `document` in development to facilitate dev tooling ([#3005](https://github.com/sveltejs/svelte/pull/3005))\n- Remove old props when the keys in spread props are removed ([#2282](https://github.com/sveltejs/svelte/issues/2282))\n\n## 3.11.0\n\n- `$capture_state` and `$inject_state` HMR hooks in dev mode ([#3148](https://github.com/sveltejs/svelte/pull/3148))\n- Allow unclosed tags inside if/each/etc blocks ([#2807](https://github.com/sveltejs/svelte/issues/2807))\n- Invalidate unreferenced store values inside `<script>` ([#3537](https://github.com/sveltejs/svelte/issues/3537))\n- Print `null` text when hydrating ([#3379](https://github.com/sveltejs/svelte/pull/3379))\n\n## 3.10.1\n\n- Preserve reactivity inside if block heads etc ([#3512](https://github.com/sveltejs/svelte/issues/3512))\n- Fix store bindings inside each blocks ([#3455](https://github.com/sveltejs/svelte/issues/3455))\n- Generate correct code for if-else blocks with static conditions ([#3505](https://github.com/sveltejs/svelte/issues/3505))\n- Avoid generating unnecessary component update code ([#3526](https://github.com/sveltejs/svelte/issues/3526))\n- Make `bind:currentTime` more reliable ([#3524](https://github.com/sveltejs/svelte/issues/3524))\n- Prevent errors when setting spread props on SVG elements ([#3522](https://github.com/sveltejs/svelte/issues/3522))\n\n## 3.10.0\n\n- Add `blur` transition ([#3477](https://github.com/sveltejs/svelte/pull/3477))\n- Prevent `<input type=\"number\">` edge case with spread props ([#3426](https://github.com/sveltejs/svelte/issues/3426))\n- Robustify cyclical dependency detection, improve errors ([#3459](https://github.com/sveltejs/svelte/issues/3459))\n\n## 3.9.2\n\n- Fix handling of additional @-rules in style blocks ([#2995](https://github.com/sveltejs/svelte/pull/2995))\n- Fix if blocks with complex but static conditions ([#3447](https://github.com/sveltejs/svelte/issues/3447))\n\n## 3.9.1\n\n- Only update style properties if necessary ([#3433](https://github.com/sveltejs/svelte/issues/3433))\n- Only update if/await blocks if necessary ([#2355](https://github.com/sveltejs/svelte/issues/2355))\n- Set context correctly inside await blocks ([#2443](https://github.com/sveltejs/svelte/issues/2443))\n- Handle `!important` inline styles ([#1834](https://github.com/sveltejs/svelte/issues/1834))\n- Make index references reactive in event handlers inside keyed each blocks ([#2569](https://github.com/sveltejs/svelte/issues/2569))\n\n## 3.9.0\n\n- Support `is` attribute on elements, with a warning ([#3182](https://github.com/sveltejs/svelte/issues/3182))\n- Handle missing slot prop ([#3322](https://github.com/sveltejs/svelte/issues/3322))\n- Don't set undefined/null input values, unless previous value exists ([#1233](https://github.com/sveltejs/svelte/issues/1233))\n- Fix style attribute optimisation bailout ([#1830](https://github.com/sveltejs/svelte/issues/1830))\n\n## 3.8.1\n\n- Set SVG namespace for slotted elements ([#3321](https://github.com/sveltejs/svelte/issues/3321))\n\n## 3.8.0\n\n- Add `self` event modifier ([#3372](https://github.com/sveltejs/svelte/issues/3372))\n- Generate valid code when spreading literal ([#3185](https://github.com/sveltejs/svelte/issues/3185))\n- Coerce tag values to string before checking equality ([#2290](https://github.com/sveltejs/svelte/issues/2290))\n\n## 3.7.1\n\n- Assume `let` variables are dynamic for slots ([#3354](https://github.com/sveltejs/svelte/issues/3354))\n- Allow transition functions to return nothing ([#2246](https://github.com/sveltejs/svelte/pull/2246))\n\n## 3.7.0\n\n- Disable warnings via `svelte-ignore` comments ([#3351](https://github.com/sveltejs/svelte/pull/3351))\n- Throw if `$` or `$$...` is referenced as global ([#3272](https://github.com/sveltejs/svelte/issues/3272))\n- Remount HTML tags correctly ([#3329](https://github.com/sveltejs/svelte/pull/3329))\n- Treat data attributes like other attributes ([#3337](https://github.com/sveltejs/svelte/issues/3337))\n\n## 3.6.11\n\n- Handle reassigned RxJS observables ([#3304](https://github.com/sveltejs/svelte/issues/3304))\n- Remove commas from HTMLified attributes with multiple chunks ([#3341](https://github.com/sveltejs/svelte/issues/3341))\n- Prevent `class` on element with scoped styles from rendering as `undefined` ([#3283](https://github.com/sveltejs/svelte/issues/3283))\n- Allow references to index in key expression ([#3274](https://github.com/sveltejs/svelte/issues/3274))\n- Mark attribute selectors as used if corresponding binding exists ([#3281](https://github.com/sveltejs/svelte/issues/3281))\n- Preserve `async`/`*` when hoisting functions ([#3179](https://github.com/sveltejs/svelte/issues/3179))\n- Make `raf` a noop on server ([#3324](https://github.com/sveltejs/svelte/issues/3324))\n- Prevent erroneous a11y warning for image input with alt attribute ([#3331](https://github.com/sveltejs/svelte/issues/3331))\n- Add several well-known globals ([#3316](https://github.com/sveltejs/svelte/pull/3316))\n\n## 3.6.10\n\n- Use `change` event for file inputs ([#3226](https://github.com/sveltejs/svelte/issues/3226))\n- Always fire reactive declarations with `$$props` ([#3286](https://github.com/sveltejs/svelte/issues/3286))\n- More conservative spread prop updates ([#3289](https://github.com/sveltejs/svelte/issues/3289))\n- Quote props if necessary in SSR mode ([#3312](https://github.com/sveltejs/svelte/issues/3312))\n\n## 3.6.9\n\n- Always update derived stores with a derived input whose value does not change ([#3191](https://github.com/sveltejs/svelte/issues/3191))\n\n## 3.6.8\n\n- Preserve global keyframes that don't match local elements ([#3228](https://github.com/sveltejs/svelte/issues/3228))\n- Fix spread/`class:` combination ([#3242](https://github.com/sveltejs/svelte/pull/3242))\n- Never scope `:root` selector ([#3250](https://github.com/sveltejs/svelte/pull/3250))\n- Prevent trailing commas in function arguments ([#3255](https://github.com/sveltejs/svelte/pull/3260))\n\n## 3.6.7\n\n- Prevent corruption of outro callbacks with nested keyed each blocks ([#3209](https://github.com/sveltejs/svelte/pull/3209))\n- Prevent cursor jumping in bound input in Safari ([#3199](https://github.com/sveltejs/svelte/issues/3199))\n- Make resize listener object unfocusable ([#3206](https://github.com/sveltejs/svelte/issues/3206))\n\n## 3.6.6\n\n- Prevent dynamic components being detached twice ([#3113](https://github.com/sveltejs/svelte/issues/3113), [#2086](https://github.com/sveltejs/svelte/issues/2086))\n\n## 3.6.5\n\n- Handle RxJS-style observables with `get` ([#3153](https://github.com/sveltejs/svelte/issues/3153))\n- Pass `let` values to bindings ([#3140](https://github.com/sveltejs/svelte/issues/3140))\n- Escape `@` symbols in props ([#3173](https://github.com/sveltejs/svelte/issues/3173))\n- Scale crossfaded elements ([#3175](https://github.com/sveltejs/svelte/pull/3175))\n\n## 3.6.4\n\n- Run `onMount` functions in correct order, and before initial `afterUpdate` functions ([#2281](https://github.com/sveltejs/svelte/issues/2281))\n- Fix code transformation for shorthand methods ([#2906](https://github.com/sveltejs/svelte/issues/2906))\n- Fix assignments in inline functions ([#3038](https://github.com/sveltejs/svelte/issues/3038))\n\n## 3.6.3\n\n- Fix await block mounting inside removed if block ([#1496](https://github.com/sveltejs/svelte/issues/1496))\n- Update when element references are removed ([#2034](https://github.com/sveltejs/svelte/issues/2034))\n- Don't attempt to serialize non-string values in server-rendered bindings ([#2135](https://github.com/sveltejs/svelte/issues/2135))\n- Recognise dependencies in function expressions ([#2693](https://github.com/sveltejs/svelte/issues/2693))\n- Scope pseudo-class selectors without class/type ([#1705](https://github.com/sveltejs/svelte/issues/1705))\n- Allow nested at-rules ([#3135](https://github.com/sveltejs/svelte/issues/3135))\n- Allow attributes to contain `=` characters ([#3149](https://github.com/sveltejs/svelte/pull/3149))\n\n## 3.6.2\n\n- Fix placement of each-else block ([#2917](https://github.com/sveltejs/svelte/issues/2917))\n- Make context accessible to `bind:this` ([#2806](https://github.com/sveltejs/svelte/issues/2806))\n- Pass hoisted values to slots ([#2586](https://github.com/sveltejs/svelte/issues/2586))\n\n## 3.6.1\n\n- Fix escaping of `@` in dev mode debug filename ([#3114](https://github.com/sveltejs/svelte/pull/3114))\n\n## 3.6.0\n\n- Add `innerHTML` and `textContent` bindings for `contenteditable` elements ([#2996](https://github.com/sveltejs/svelte/pull/2996))\n- Fix destructuring assignments where targets are member expressions ([#3092](https://github.com/sveltejs/svelte/issues/3092))\n- Deconflict with used globals ([#2963](https://github.com/sveltejs/svelte/pull/2963))\n- Always run `onDestroy` functions, not just for detaching components ([#3058](https://github.com/sveltejs/svelte/issues/3058))\n- Fix scope analysis around catch clauses ([#3064](https://github.com/sveltejs/svelte/issues/3064))\n- Add error constructors to known globals ([#3064](https://github.com/sveltejs/svelte/issues/3064))\n- Always bail out of hoisting on encountering local state in function definition ([#3044](https://github.com/sveltejs/svelte/issues/3044))\n- Fix incorrect merging of top-level text nodes ([#3027](https://github.com/sveltejs/svelte/issues/3027))\n- Handle removal of components in each blocks without props ([#3035](https://github.com/sveltejs/svelte/issues/3035))\n- Only call subscriber once when resubscribing to a store ([#3022](https://github.com/sveltejs/svelte/issues/3022))\n- Check for existence of dynamic component before introing ([#3054](https://github.com/sveltejs/svelte/issues/3054))\n- Sanitize names of bubbled event handlers ([#2923](https://github.com/sveltejs/svelte/issues/2923))\n\n## 3.5.4\n\n- Preserve whitespace at the boundaries of `{#each}` blocks ([#713](https://github.com/sveltejs/svelte/issues/713))\n- Fix dynamic `bind:this` on components ([#2333](https://github.com/sveltejs/svelte/issues/2333))\n- Fix binding to values in a component when it uses `$$props` ([#2725](https://github.com/sveltejs/svelte/issues/2725))\n- Fix parsing ambiguous HTML entities ([#3071](https://github.com/sveltejs/svelte/pull/3071))\n\n## 3.5.3\n\n- Don't double-destroy keyed each blocks with outros ([#3055](https://github.com/sveltejs/svelte/issues/3055))\n\n## 3.5.2\n\n- Prevent duplicated outros causing errors ([#3001](https://github.com/sveltejs/svelte/issues/3001))\n- Fix automatic name generation ([#2843](https://github.com/sveltejs/svelte/issues/2843))\n- Fix .d.ts stubs ([#3009](https://github.com/sveltejs/svelte/pull/3009))\n- Don't strip non-breaking spaces ([#3014](https://github.com/sveltejs/svelte/issues/3014))\n- Fix `requestAnimationFrame` context ([#2933](https://github.com/sveltejs/svelte/issues/2933))\n- Allow space before attribute value ([#3026](https://github.com/sveltejs/svelte/issues/3026))\n- Remove null/undefined attributes ([#1434](https://github.com/sveltejs/svelte/issues/1434))\n- Fix whitespace in static markup ([#3030](https://github.com/sveltejs/svelte/pull/3030))\n\n## 3.5.1\n\n- Accommodate webpack idiosyncrasies\n\n## 3.5.0\n\n- Update package folder structure ([#2887](https://github.com/sveltejs/svelte/pull/2887))\n- Support `once` modifier on component events ([#2654](https://github.com/sveltejs/svelte/issues/2654))\n- Allow empty `<title>` tags ([#2980](https://github.com/sveltejs/svelte/issues/2980))\n- Render textarea binding values inside element ([#2975](https://github.com/sveltejs/svelte/pull/2975))\n- Fix delayed animation glitch ([#2871](https://github.com/sveltejs/svelte/issues/2871))\n- Solve diamond dependencies problem with stores ([#2660](https://github.com/sveltejs/svelte/issues/2660))\n- Fix missing outros inside each blocks ([#2689](https://github.com/sveltejs/svelte/issues/2689))\n- Support animations without transitions ([#2908](https://github.com/sveltejs/svelte/issues/2908))\n- Add missing transition events ([#2912](https://github.com/sveltejs/svelte/pull/2912))\n\n## 3.4.4\n\n- Publish type declaration files ([#2874](https://github.com/sveltejs/svelte/issues/2874))\n- Don't trigger updates for unreferenced values ([#2865](https://github.com/sveltejs/svelte/pull/2865))\n- Omit readonly bindings from SSR output ([#2339](https://github.com/sveltejs/svelte/issues/2339))\n- Prevent outdated animation CSS ([#2871](https://github.com/sveltejs/svelte/issues/2871))\n- Repair dynamic `{@html ...}` in head ([#2880](https://github.com/sveltejs/svelte/pull/2880))\n- Don't create unknown prop warnings for internal props, or if component has `$$props` ([#2881](https://github.com/sveltejs/svelte/pull/2881))\n\n## 3.4.3\n\n- Add type declaration files for everything ([#2842](https://github.com/sveltejs/svelte/pull/2842))\n- Prevent `svelte/store` being bundled ([#2786](https://github.com/sveltejs/svelte/issues/2786))\n- Warn on unknown props in dev mode ([#2840](https://github.com/sveltejs/svelte/pull/2840))\n- Treat `requestAnimationFrame` as a no-op on the server ([#2856](https://github.com/sveltejs/svelte/pull/2856))\n- Add `raw` property to AST's `Text` nodes ([#2714](https://github.com/sveltejs/svelte/issues/2714))\n- Add `<details bind:open>` ([#2854](https://github.com/sveltejs/svelte/issues/2854))\n\n## 3.4.2\n\n- Use empty string for empty data attributes ([#2804](https://github.com/sveltejs/svelte/pull/2804))\n- Support `customElement: true` with no `<svelte:options>` ([#2821](https://github.com/sveltejs/svelte/issues/2821))\n- Add docstrings to `svelte/store` ([#2795](https://github.com/sveltejs/svelte/pull/2795))\n\n## 3.4.1\n\n- Handle non-falsy non-function return values from derivers ([#2780](https://github.com/sveltejs/svelte/issues/2780))\n- Allow `spring` to work server-side ([#2773](https://github.com/sveltejs/svelte/issues/2773))\n\n## 3.4.0\n\n- Allow custom element to be defined without a `tag` ([#2417](https://github.com/sveltejs/svelte/issues/2417))\n- Fix parsing of quote marks inside attribute values ([#2715](https://github.com/sveltejs/svelte/pull/2754))\n- Convert `svelte/store` to TypeScript ([#2733](https://github.com/sveltejs/svelte/pull/2733))\n- Allow `debug` tags to include hoisted values ([#2764](https://github.com/sveltejs/svelte/issues/2764))\n- Parse error if attribute name is missing `=` ([#1513](https://github.com/sveltejs/svelte/pull/2770))\n- Allow reactive declarations to depend on mutated `const` values ([#2728](https://github.com/sveltejs/svelte/issues/2728))\n\n## 3.3.0\n\n- Allow multiple event listeners on a single node ([#2688](https://github.com/sveltejs/svelte/issues/2688))\n- Allow derivers to return a cleanup function ([#2553](https://github.com/sveltejs/svelte/issues/2553))\n- Support namespaced components (`<Foo.Bar/>`) ([#2743](https://github.com/sveltejs/svelte/pull/2743))\n\n## 3.2.2\n\n- Add `window` and `document` to expected globals ([#2722](https://github.com/sveltejs/svelte/pull/2722))\n- Prevent hoisting of functions that depend on reactive state ([#2703](https://github.com/sveltejs/svelte/pull/2703))\n- Generate correct code when slot has no changes ([#2697](https://github.com/sveltejs/svelte/issues/2697))\n- Prevent `Object.prototype`-related bugs ([#2696](https://github.com/sveltejs/svelte/pull/2696))\n\n## 3.2.1\n\n- Use same comparison logic for `derived` as for other stores ([#2644](https://github.com/sveltejs/svelte/issues/2644))\n- Invalidate dependencies of reactive declarations ([#2444](https://github.com/sveltejs/svelte/issues/2444))\n- Fix instrumentation of auto-subscription self-assignments ([#2681](https://github.com/sveltejs/svelte/issues/2681))\n- Warn on non-top-level or module-context statements labeled with `$:` ([#2176](https://github.com/sveltejs/svelte/issues/2176))\n\n## 3.2.0\n\n- Improve `spring` animations, and add `hard`/`soft` options ([#2627](https://github.com/sveltejs/svelte/pull/2627))\n- Expose `parse` and `walk` functions ([#2661](https://github.com/sveltejs/svelte/issues/2661), [#2534](https://github.com/sveltejs/svelte/pull/2534))\n- Support array/object rest in `each` block destructuring patterns ([#2647](https://github.com/sveltejs/svelte/issues/2647), [#2658](https://github.com/sveltejs/svelte/pull/2658))\n- Use `setAttribute` to change `form` property on form elements ([#1742](https://github.com/sveltejs/svelte/issues/1742))\n- Fix a11y warning when `<figcaption>` is non-direct descendant of `<figure>` ([#2582](https://github.com/sveltejs/svelte/issues/2582))\n- Squelch erroneous 'empty block' warnings ([#1716](https://github.com/sveltejs/svelte/issues/1716))\n- Fix IE9/10 error with `insertBefore` ([#2573](https://github.com/sveltejs/svelte/issues/2573))\n- Prevent `$$scope` from being spread onto an element ([#2520](https://github.com/sveltejs/svelte/issues/2520))\n- Resubscribe to stores that are assigned to in `<script>` ([#2435](https://github.com/sveltejs/svelte/issues/2435))\n- Allow reactive declarations to depend on `const` variables ([#2285](https://github.com/sveltejs/svelte/issues/2285))\n- Trigger store changes on UpdateExpression ([#2625](https://github.com/sveltejs/svelte/issues/2625))\n- Squelch missing prop warning if variable is initialised ([#2635](https://github.com/sveltejs/svelte/issues/2635))\n- Add `alert`, `confirm` and `prompt` to known globals ([#2648](https://github.com/sveltejs/svelte/issues/2648))\n\n## 3.1.0\n\n- Allow store subscribe functions to return an object with an `unsubscribe` method, providing native RxJS support ([#2549](https://github.com/sveltejs/svelte/issues/2549))\n\n## 3.0.1\n\n- Prevent text input cursor jumping in Safari ([#2506](https://github.com/sveltejs/svelte/issues/2506))\n- Allow assignments to member expressions ([#2510](https://github.com/sveltejs/svelte/issues/2510))\n- Prevent mutually dependent functions causing an infinite during hoisting ([#2542](https://github.com/sveltejs/svelte/issues/2542))\n- Reuse scheduler promise instead of creating new one each time ([#2555](https://github.com/sveltejs/svelte/pull/2555))\n- Various site/docs fixes\n\n## 3.0.0\n\n- Everything\n\n## 2.15.4\n\n- IE `classList` fix ([#1868](https://github.com/sveltejs/svelte/pull/1868))\n\n## 2.15.3\n\n- Don't mutate AST\n\n## 2.15.2\n\n- Expose `stats.props` ([#1837](https://github.com/sveltejs/svelte/issues/1837))\n\n## 2.15.1\n\n- Don't throw missing store error when store is declared in component ([#1828](https://github.com/sveltejs/svelte/issues/1828))\n\n## 2.15.0\n\n- Event modifiers ([#1088](https://github.com/sveltejs/svelte/issues/1088))\n- Wheel and touch events are passive by default ([#1088](https://github.com/sveltejs/svelte/issues/1088))\n- Add `<svelte:document>` tag ([#1484](https://github.com/sveltejs/svelte/issues/1484))\n- Include binding values in server-rendered HTML ([#1205](https://github.com/sveltejs/svelte/issues/1205))\n- Remove attributes when value is undefined/null ([#1434](https://github.com/sveltejs/svelte/issues/1434))\n- Initialise window scroll from component data ([#938](https://github.com/sveltejs/svelte/issues/938))\n- Remove references to unused properties in generated code ([#1187](https://github.com/sveltejs/svelte/issues/1187))\n- Add TypeScript definitions for store ([#1207](https://github.com/sveltejs/svelte/issues/1207))\n- Better error for missing store ([#1807](https://github.com/sveltejs/svelte/issues/1807))\n\n## 2.14.3\n\n- Account for directive dependencies ([#1793](https://github.com/sveltejs/svelte/issues/1793))\n- Detach each block iterations in each blocks with no update method ([#1795](https://github.com/sveltejs/svelte/issues/1795))\n\n## 2.14.2\n\n- Fix issue with nested `{#if}` blocks ([#1780](https://github.com/sveltejs/svelte/issues/1780))\n\n## 2.14.1\n\n- Fix block insertion order regression ([#1778](https://github.com/sveltejs/svelte/issues/1778))\n- Fix blocks inside `<svelte:head>` ([#1774](https://github.com/sveltejs/svelte/issues/1774))\n- Better attribute parsing ([#1772](https://github.com/sveltejs/svelte/issues/1772))\n- Fix parse errors inside directives ([#1788](https://github.com/sveltejs/svelte/issues/1788))\n\n## 2.14.0\n\n- Refactor internals ([#1678](https://github.com/sveltejs/svelte/issues/1678))\n- Deprecate `onerror` option ([#1745](https://github.com/sveltejs/svelte/issues/1745))\n- Handle edge cases where `destroy` is called before `mount` ([#1653](https://github.com/sveltejs/svelte/pull/1653))\n- Make `scroll` binding more efficient ([#1579](https://github.com/sveltejs/svelte/pull/1770))\n- Make 'readonly property' store error more informative ([#1761](https://github.com/sveltejs/svelte/pull/1761))\n\n## 2.13.5\n\n- Fix missing dependencies in shorthand class directives ([#1739](https://github.com/sveltejs/svelte/issues/1739))\n\n## 2.13.4\n\n- Support dynamic `import()` in template expressions\n\n## 2.13.3\n\n- Fix bug with keyed each blocks and nested components ([#1706](https://github.com/sveltejs/svelte/issues/1706))\n\n## 2.13.2\n\n- Coalesce simultaneous store/component updates ([#1520](https://github.com/sveltejs/svelte/issues/1520))\n- Fix nested transitions preventing each block item removal ([#1617](https://github.com/sveltejs/svelte/issues/1617))\n- Add `class` directive shorthand and encapsulate styles ([#1695](https://github.com/sveltejs/svelte/pull/1695))\n- Prevent erroneous updates of bound inputs ([#1699](https://github.com/sveltejs/svelte/issues/1699))\n\n## 2.13.1\n\n- Coerce second argument to `toggleClass` ([#1685](https://github.com/sveltejs/svelte/issues/1685))\n\n## 2.13.0\n\n- Add `class` directive ([#890](https://github.com/sveltejs/svelte/issues/890))\n- Remove sourcemaps from npm package ([#1690](https://github.com/sveltejs/svelte/pull/1690))\n\n## 2.12.1\n\n- Allow actions to take any expression ([#1676](https://github.com/sveltejs/svelte/issues/1676))\n- Run transitions in component context ([#1675](https://github.com/sveltejs/svelte/issues/1675))\n- Correctly set select value on mount ([#1666](https://github.com/sveltejs/svelte/issues/1666))\n- Support `{@debug}` in SSR ([#1659](https://github.com/sveltejs/svelte/issues/1659))\n- Don't treat `&nbsp;` as empty whitespace ([#1658](https://github.com/sveltejs/svelte/issues/1658))\n- Fix outros for if blocks with no else ([#1688](https://github.com/sveltejs/svelte/pull/1688))\n- Set `style.cssText` in spread attributes ([#1684](https://github.com/sveltejs/svelte/pull/1684))\n\n## 2.12.0\n\n- Initialise actions on mount rather than hydrate ([#1653](https://github.com/sveltejs/svelte/pull/1653))\n- Allow nonexistent components to be destroyed ([#1677](https://github.com/sveltejs/svelte/pull/1677))\n- Pass AMD ID from CLI correctly ([#1672](https://github.com/sveltejs/svelte/pull/1672))\n- Minor AST tweaks ([#1673](https://github.com/sveltejs/svelte/pull/1673), [#1674](https://github.com/sveltejs/svelte/pull/1674))\n- Reduce code duplication in component initialisation ([#1670](https://github.com/sveltejs/svelte/pull/1670))\n\n## 2.11.0\n\n- Add `--shared` CLI option ([#1649](https://github.com/sveltejs/svelte/pull/1649))\n- Run first `onstate` _before_ fragment is rendered ([#1522](https://github.com/sveltejs/svelte/issues/1522))\n- Exclude current computed prop from state object ([#1544](https://github.com/sveltejs/svelte/issues/1544))\n\n## 2.10.1\n\n- Add sourcemaps to `{@debug}` tags ([#1647](https://github.com/sveltejs/svelte/pull/1647))\n\n## 2.10.0\n\n- Add a `{@debug}` tag, for inspecting values in templates in dev mode ([#1635](https://github.com/sveltejs/svelte/issues/1635))\n- Fix dimension bindings in iOS ([#1642](https://github.com/sveltejs/svelte/pull/1642))\n\n## 2.9.11\n\n- Pass props to custom elements rather than setting attributes, where appropriate ([#875](https://github.com/sveltejs/svelte/issues/875))\n- Handle whitespace in lists consistently between SSR and DOM renderers ([#1637](https://github.com/sveltejs/svelte/pull/1637))\n- Improve error for invalid `ref` names ([#1613](https://github.com/sveltejs/svelte/issues/1613))\n\n## 2.9.10\n\n- Handle `null` consistently in tags ([#1598](https://github.com/sveltejs/svelte/issues/1598))\n- Support object rest in computed properties ([#1540](https://github.com/sveltejs/svelte/issues/1540))\n- Always update dynamic components when expression changes ([#1621](https://github.com/sveltejs/svelte/issues/1621))\n- Encapsulate local styles inside global styles ([#1618](https://github.com/sveltejs/svelte/issues/1618))\n\n## 2.9.9\n\n- Fix attribute name regex ([#1623](https://github.com/sveltejs/svelte/pull/1623))\n\n## 2.9.8\n\n- Sanitize spread attributes in SSR — fixes vulnerability CVE-2018-6341 ([#1623](https://github.com/sveltejs/svelte/pull/1623))\n\n## 2.9.7\n\n- Allow `<input type=file bind:files>` ([#1608](https://github.com/sveltejs/svelte/issues/1608))\n- Ensure child window exists before removing listener in `addResizeHandler` ([#1600](https://github.com/sveltejs/svelte/issues/1600))\n- Handle transitions in `else` block ([#1589](https://github.com/sveltejs/svelte/issues/1589))\n\n## 2.9.6\n\n- Provide more useful error if SSR component attempts to render non-SSR component ([#1605](https://github.com/sveltejs/svelte/issues/1605))\n\n## 2.9.5\n\n- Null out refs to dynamic components ([#1596](https://github.com/sveltejs/svelte/issues/1596))\n\n## 2.9.4\n\n- Make identifier optional for `then` and `catch` blocks ([#1507](https://github.com/sveltejs/svelte/issues/1507))\n- Group outros correctly ([#1575](https://github.com/sveltejs/svelte/issues/1575))\n\n## 2.9.3\n\n- Fix bug when an each block contains transitions but its else branch does not ([#1559](https://github.com/sveltejs/svelte/issues/1559))\n- If an event handler throws an exception, don't block all future calls to that handler ([#1573](https://github.com/sveltejs/svelte/issues/1573))\n\n## 2.9.2\n\n- Fix conflict when using multiple if-else blocks, some of which use outros and some of which do not ([#1580](https://github.com/sveltejs/svelte/issues/1580))\n- Fix some cases where `.innerHTML` was being used to create child elements when it shouldn't ([#1581](https://github.com/sveltejs/svelte/issues/1581))\n\n## 2.9.1\n\n- Use `template.content` instead of `template` where appropriate ([#1571](https://github.com/sveltejs/svelte/issues/1571))\n\n## 2.9.0\n\n- Play outro transitions on `<svelte:component>` if `nestedTransitions` is true ([#1568](https://github.com/sveltejs/svelte/issues/1568))\n- Allow illegal identifiers to be component prop names, for e.g. spreading `data-foo` props ([#887](https://github.com/sveltejs/svelte/issues/887))\n- Abort transition when node is detached ([#1561](https://github.com/sveltejs/svelte/issues/1561))\n- Only include `transitionManager` when necessary ([#1514](https://github.com/sveltejs/svelte/issues/1514))\n\n## 2.8.1\n\n- Fix prefixed animation name replacement ([#1556](https://github.com/sveltejs/svelte/pull/1556))\n\n## 2.8.0\n\n- Correctly set store on nested components (to parent store, not root store) ([#1538](https://github.com/sveltejs/svelte/issues/1538))\n\n## 2.7.2\n\n- Prevent unnecessary remounts ([#1527](https://github.com/sveltejs/svelte/issues/1527))\n- Allow `refs.*` as callee ([#1526](https://github.com/sveltejs/svelte/pull/1526))\n- Handle empty lists when outroing ([#1532](https://github.com/sveltejs/svelte/issues/1532))\n\n## 2.7.1\n\n- Fix spread props with multiple dependencies ([#1515](https://github.com/sveltejs/svelte/issues/1515))\n\n## 2.7.0\n\n- Add `__svelte_meta` object to elements in dev mode, containing source info ([#1499](https://github.com/sveltejs/svelte/issues/1499))\n- Fix `bind:online` in dev mode ([#1502](https://github.com/sveltejs/svelte/issues/1502))\n- Update v1 warnings/errors ([#1508](https://github.com/sveltejs/svelte/pull/1508))\n- Transform prefixed keyframes ([#1504](https://github.com/sveltejs/svelte/issues/1504))\n\n## 2.6.6\n\n- Fix nested transition bug ([#1497](https://github.com/sveltejs/svelte/issues/1497))\n\n## 2.6.5\n\n- Handle cases where only some `if` block branches have outros ([#1492](https://github.com/sveltejs/svelte/issues/1492))\n\n## 2.6.4\n\n- Web worker support ([#1487](https://github.com/sveltejs/svelte/issues/1487))\n- Update dynamic component bindings when component changes ([#1489](https://github.com/sveltejs/svelte/issues/1489))\n\n## 2.6.3\n\n- Nested transitions respect `skipIntroByDefault` ([#1460](https://github.com/sveltejs/svelte/issues/1460))\n- Always create outro for top-level block ([#1470](https://github.com/sveltejs/svelte/issues/1470))\n\n## 2.6.2\n\n- Fix spread+bindings on dynamic components ([#1433](https://github.com/sveltejs/svelte/issues/1433))\n- Abort in-progress animations, if a new one starts ([#1458](https://github.com/sveltejs/svelte/issues/1458))\n- Allow animations to be parameterised ([#1462](https://github.com/sveltejs/svelte/issues/1462))\n\n## 2.6.1\n\n- Absolutely position outroing animated nodes ([#1457](https://github.com/sveltejs/svelte/pull/1457))\n\n## 2.6.0\n\n- Add `animate` directive ([#1454](https://github.com/sveltejs/svelte/pull/1454))\n- Add `skipIntroByDefault` compiler option and `intro: true` init option ([#1448](https://github.com/sveltejs/svelte/pull/1448))\n- Add `nestedTransitions` compiler option ([#1451](https://github.com/sveltejs/svelte/pull/1451))\n- Component outros, if `nestedTransitions` is true ([#1211](https://github.com/sveltejs/svelte/issues/1211))\n- Allow transition functions to return a function, for inter-transition coordination ([#1453](https://github.com/sveltejs/svelte/pull/1453))\n- Pass `1 - t` as second argument to transition functions ([#1452](https://github.com/sveltejs/svelte/pull/1452))\n\n## 2.5.1\n\n- Add new ARIA attributes ([#1436](https://github.com/sveltejs/svelte/pull/1436))\n- Add `Promise` to whitelisted globals ([#1441](https://github.com/sveltejs/svelte/issues/1441))\n- Allow spaces around reserved keyword attributes ([#1445](https://github.com/sveltejs/svelte/issues/1445))\n\n## 2.5.0\n\n- Support transitions in `await` blocks ([#956](https://github.com/sveltejs/svelte/issues/956))\n- Abort outros if block is recreated ([#1425](https://github.com/sveltejs/svelte/issues/1425))\n- Wait until transitions have completed before removing styles ([#648](https://github.com/sveltejs/svelte/issues/648))\n- Support event shorthand on dynamic components ([#1427](https://github.com/sveltejs/svelte/pull/1427))\n- Various codegen improvements ([#1419](https://github.com/sveltejs/svelte/pull/1419), [#1421](https://github.com/sveltejs/svelte/pull/1421), [#1422](https://github.com/sveltejs/svelte/pull/1422), [#1424](https://github.com/sveltejs/svelte/pull/1424))\n- Correctly handle `await` blocks with no dynamic content ([#1417](https://github.com/sveltejs/svelte/issues/1417))\n- Allow spread props on elements with static attribute tests ([#1429](https://github.com/sveltejs/svelte/pull/1429))\n\n## 2.4.4\n\n- Declare missing variable in Store ([#1415](https://github.com/sveltejs/svelte/issues/1415))\n- ALways declare spread levels ([#1413](https://github.com/sveltejs/svelte/issues/1413))\n\n## 2.4.3\n\n- `ref` directives prevent HTMLified content ([#1407](https://github.com/sveltejs/svelte/issues/1407))\n- Store computed properties update components immediately upon declaration ([#1327](https://github.com/sveltejs/svelte/issues/1327))\n\n## 2.4.2\n\n- Evaluate `each` key in child scope ([#1397](https://github.com/sveltejs/svelte/issues/1397))\n- Prevent false negatives and positives when detecting cyclical computed store properties ([#1399](https://github.com/sveltejs/svelte/issues/1399))\n- Only update dynamic component props ([#1394](https://github.com/sveltejs/svelte/issues/1394))\n\n## 2.4.1\n\n- Fix DOM event context ([#1390](https://github.com/sveltejs/svelte/issues/1390))\n\n## 2.4.0\n\n- Integrate CLI ([#1360](https://github.com/sveltejs/svelte/issues/1360))\n- Allow arbitrary destructuring for each block items, with binding ([#1385](https://github.com/sveltejs/svelte/pull/1385))\n- Each block keys can use arbitrary expressions ([#703](https://github.com/sveltejs/svelte/issues/703))\n- `bind:offsetWidth`, `bind:offsetHeight`, `bind:clientWidth` and `bind:clientHeight` ([#984](https://github.com/sveltejs/svelte/issues/984))\n- Leaner generated code for `each` blocks ([#1287](https://github.com/sveltejs/svelte/issues/1287))\n\n## 2.3.0\n\n- Allow computed properties to have entire state object as dependency ([#1303](https://github.com/sveltejs/svelte/issues/1303))\n- Fix `stats` when `options.generate` is `false` ([#1368](https://github.com/sveltejs/svelte/issues/1368))\n- Assign custom methods to custom elements ([#1369](https://github.com/sveltejs/svelte/issues/1369))\n- Fix `this` value in custom event handlers ([#1297](https://github.com/sveltejs/svelte/issues/1297))\n- Re-evaluate `each` values lazily ([#1286](https://github.com/sveltejs/svelte/issues/1286))\n- Preserve outer context in `await` blocks ([#1251](https://github.com/sveltejs/svelte/issues/1251))\n\n## 2.2.0\n\n- Internal refactoring ([#1367](https://github.com/sveltejs/svelte/pull/1367))\n\n## 2.1.1\n\n- Report initial `changed` based on state, not expected props ([#1356](https://github.com/sveltejs/svelte/issues/1356))\n- Set state to empty object, not null, on destroy ([#1354](https://github.com/sveltejs/svelte/issues/1354))\n- Prevent stale state in component event handlers ([#1353](https://github.com/sveltejs/svelte/issues/1353))\n\n## 2.1.0\n\n- Allow shorthand imports ([#1038](https://github.com/sveltejs/svelte/issues/1038))\n- Update spread props inside each blocks ([#1337](https://github.com/sveltejs/svelte/issues/1337))\n\n## 2.0.0\n\n_See [the blog post](https://svelte.dev/blog/version-2) for information on how to upgrade your apps_\n\n- New template syntax ([#1318](https://github.com/sveltejs/svelte/issues/1318))\n- Emit ES2015 code, not ES5 ([#1348](https://github.com/sveltejs/svelte/pull/1348))\n- Add `onstate` and `onupdate` hooks, remove `component.observe` method ([#1197](https://github.com/sveltejs/svelte/issues/1197))\n- Use destructuring syntax for computed properties ([#1069](https://github.com/sveltejs/svelte/issues/1069)\n- Change signature of `svelte.compile` ([#1298](https://github.com/sveltejs/svelte/pull/1298))\n- Remove `validate` and `Stylesheet` from public API ([#1348](https://github.com/sveltejs/svelte/pull/1348))\n- Don't typecast numeric attributes ([#657](https://github.com/sveltejs/svelte/issues/657))\n- Always compile with `Store` support, and cascading disabled ([#1348](https://github.com/sveltejs/svelte/pull/1348))\n- Remove unused `hash` property from AST ([#1348](https://github.com/sveltejs/svelte/pull/1348))\n- Rename `loc` property to `start` in warnings and errors ([#1348](https://github.com/sveltejs/svelte/pull/1348))\n\n## 1.64.1\n\n- Fix computed properties in SSR renderer ([#1349](https://github.com/sveltejs/svelte/issues/1349))\n\n## 1.64.0\n\n- Deprecate passing a string argument to `component.get` ([#1347](https://github.com/sveltejs/svelte/pull/1347))\n\n## 1.63.1\n\n- Allow `observe` method to be overwritten\n\n## 1.63.0\n\n- Add `onstate` and `onupdate` lifecycle hooks and deprecate `component.observe` ([#1197](https://github.com/sveltejs/svelte/issues/1197))\n- Add `on` and `fire` to `Store`, deprecate `onchange` and `observe` ([#1344](https://github.com/sveltejs/svelte/pull/1344))\n- Require computed properties to have destructured argument in v2 mode ([#1069](https://github.com/sveltejs/svelte/issues/1069))\n\n## 1.62.0\n\n- Add a `code` field to errors and warnings ([#474](https://github.com/sveltejs/svelte/issues/474))\n- When using v2 syntax, do not use interpolation in non-root `<style>` tags ([#1339](https://github.com/sveltejs/svelte/issues/1339))\n\n## 1.61.0\n\n- Support v2 syntax with `parser: 'v2'` option ([#1318](https://github.com/sveltejs/svelte/issues/1318))\n\n## 1.60.3\n\n- Fix validation of `multiple` attributes on bound `<select>` elements ([#1331](https://github.com/sveltejs/svelte/issues/1331))\n\n## 1.60.2\n\n- Fix order of insertions for keyed each blocks with siblings ([#1306](https://github.com/sveltejs/svelte/issues/1306))\n- Bail out of CSS DCE if element has spread attribute ([#1300](https://github.com/sveltejs/svelte/issues/1300))\n- Allow `console` etc in component events ([#1278](https://github.com/sveltejs/svelte/issues/1278))\n- Deconflict against inherited contexts ([#1275](https://github.com/sveltejs/svelte/issues/1275))\n- Make CSS DCE case insensitive ([#1269](https://github.com/sveltejs/svelte/issues/1269))\n- Error on dynamic `multiple` attribute for bound select ([#1270](https://github.com/sveltejs/svelte/issues/1270))\n- Allow custom events on `<:Window>` ([#1268](https://github.com/sveltejs/svelte/issues/1268))\n\n## 1.60.1\n\n- Fix spread updates on dynamic components ([#1307](https://github.com/sveltejs/svelte/issues/1307))\n\n## 1.60.0\n\n- Spread properties ([#195](https://github.com/sveltejs/svelte/issues/195))\n- `svelte.compile` returns an object with `{ js, css, ast }` properties, where `js` and `css` are `{ code, map }` objects ([#1298](https://github.com/sveltejs/svelte/pull/1298))\n- Fixed broken compile errors when using Rollup ([#1296](https://github.com/sveltejs/svelte/pull/1296))\n\n## 1.59.0\n\n- Deprecate `teardown` in custom event handlers ([#531](https://github.com/sveltejs/svelte/issues/531))\n- Allow static content in keyed `each` block ([#1291](https://github.com/sveltejs/svelte/issues/1291))\n- Allow empty content in keyed `each` block ([#1295](https://github.com/sveltejs/svelte/issues/1295))\n- Only delete applicable transitions ([#1290](https://github.com/sveltejs/svelte/issues/1290))\n\n## 1.58.5\n\n- Allow backtick string literals for `svg`, `tag`, and `props` properties ([#1284](https://github.com/sveltejs/svelte/issues/1284))\n- Fix removal of transition styles under Firefox ([#1288](https://github.com/sveltejs/svelte/pull/1288))\n\n## 1.58.4\n\n- Fix initial state regression ([#1283](https://github.com/sveltejs/svelte/pull/1283))\n\n## 1.58.3\n\n- Actions run in the context of the component ([#1279](https://github.com/sveltejs/svelte/pull/1279))\n- Set refs when mounting dynamic components ([#1280](https://github.com/sveltejs/svelte/pull/1280))\n\n## 1.58.2\n\n- (1.58.1 failed to publish)\n\n## 1.58.1\n\n- Actions ([#1247](https://github.com/sveltejs/svelte/pull/1247))\n- Support `preserveComments` option in SSR mode ([#1265](https://github.com/sveltejs/svelte/issues/1265))\n- Fix performance regression ([#1274](https://github.com/sveltejs/svelte/pull/1274))\n\n## 1.58.0\n\n- Fast row swapping ([#588](https://github.com/sveltejs/svelte/issues/588))\n- Better error messages for invalid directives ([#1242](https://github.com/sveltejs/svelte/pull/1242))\n- Fix local context variable bugs ([#1240](https://github.com/sveltejs/svelte/pull/1243), [#1254](https://github.com/sveltejs/svelte/pull/1254))\n- Skip missing property warnings for computed/global properties in dev mode ([#1246](https://github.com/sveltejs/svelte/pull/1246))\n- Add end position to warnings ([#1250](https://github.com/sveltejs/svelte/pull/1250))\n\n## 1.57.4\n\n- Deconflict context names ([#1229](https://github.com/sveltejs/svelte/issues/1229))\n- Use `setAttribute` to set input types ([#1209](https://github.com/sveltejs/svelte/issues/1209))\n- Scale transition duration correctly ([#1221](https://github.com/sveltejs/svelte/issues/1221))\n\n## 1.57.3\n\n- Fix scoped CSS on static child elements ([#1223](https://github.com/sveltejs/svelte/issues/1223))\n\n## 1.57.2\n\n- Fix scoped CSS on SVG elements ([#1224](https://github.com/sveltejs/svelte/issues/1224))\n\n## 1.57.1\n\n- Add each_value to contextProps ([#1206](https://github.com/sveltejs/svelte/issues/1206))\n\n## 1.57.0\n\n- Use classes (not attributes) for style encapsulation, and base36-encode hashes ([#1118](https://github.com/sveltejs/svelte/issues/1118))\n\n## 1.56.4\n\n- Allow `component` and `state` to be context names ([#1213](https://github.com/sveltejs/svelte/issues/1213))\n- Don't remove `@supports` rules when `cascade: false` ([#1215](https://github.com/sveltejs/svelte/issues/1215))\n\n## 1.56.3\n\n- Top-level transitions work inside nested components ([#1188](https://github.com/sveltejs/svelte/issues/1188))\n- Always use internal `_mount` method ([#1201](https://github.com/sveltejs/svelte/issues/1201))\n\n## 1.56.2\n\n- Null out `key` for children of keyed each blocks ([#1202](https://github.com/sveltejs/svelte/issues/1202))\n\n## 1.56.1\n\n- Fix if-in-each bug ([#1195](https://github.com/sveltejs/svelte/issues/1195))\n- Cross-browser `scrollX`/`scrollY` support ([#1175](https://github.com/sveltejs/svelte/issues/1175))\n\n## 1.56.0\n\n- Internal refactor ([#1122](https://github.com/sveltejs/svelte/issues/1122))\n- Use correct context for component events ([#1184](https://github.com/sveltejs/svelte/issues/1184))\n- Allow observing `$foo` in dev mode ([#1181](https://github.com/sveltejs/svelte/issues/1181))\n- Handle dynamic data in default slot ([#1144](https://github.com/sveltejs/svelte/issues/1144))\n\n## 1.55.1\n\n- Fix cancellation of store `onchange` handlers ([#1177](https://github.com/sveltejs/svelte/issues/1177))\n- Write `[\"default\"]` instead of `.default` in legacy mode ([#1166](https://github.com/sveltejs/svelte/issues/1166))\n- Upgrade Acorn ([#1182](https://github.com/sveltejs/svelte/pull/1182))\n- Don't warn about capitalisation if `options.name` begins with non-alphabetical character ([#1179](https://github.com/sveltejs/svelte/pull/1179))\n\n## 1.55.0\n\n- Add `immutable` compiler option for Svelte and runtime option for `Store` ([#1146](https://github.com/sveltejs/svelte/issues/1146))\n- Fix component store bindings ([#1100](https://github.com/sveltejs/svelte/issues/1100))\n- Fire `oncreate` when custom element is attached ([#1117](https://github.com/sveltejs/svelte/issues/1117))\n- Downgrade empty blocks to a warning ([#1156](https://github.com/sveltejs/svelte/pull/1156))\n- Error on unclosed comment ([#1156](https://github.com/sveltejs/svelte/pull/1156))\n\n## 1.54.2\n\n- Prevent `await` blocks using stale state ([#1131](https://github.com/sveltejs/svelte/issues/1131))\n- Prevent erroneous missing data warnings for custom elements ([#1065](https://github.com/sveltejs/svelte/issues/1065))\n- Remove empty selectors in prod mode ([#1138](https://github.com/sveltejs/svelte/issues/1138))\n- Escape attribute values in SSR mode ([#1155](https://github.com/sveltejs/svelte/pull/1155))\n- Remove `<noscript>` elements in DOM mode ([#1108](https://github.com/sveltejs/svelte/issues/1108))\n- Allow hydration of non-root `<script>`/`<style>` tags ([#1163](https://github.com/sveltejs/svelte/pull/1163))\n- Allow interpolation in non-root `<style>` tags ([#1163](https://github.com/sveltejs/svelte/pull/1163))\n\n## 1.54.1\n\n- Hoist destructured references ([#1139](https://github.com/sveltejs/svelte/issues/1139))\n- Add `bind:volume` for media elements ([#1143](https://github.com/sveltejs/svelte/issues/1143))\n\n## 1.54.0\n\n- Run `oncreate` hooks depth-first, top-to-bottom ([#1135](https://github.com/sveltejs/svelte/issues/1135))\n- Render boolean attributes correctly in SSR mode ([#1109](https://github.com/sveltejs/svelte/issues/1109))\n- Add `feed` aria role to expected roles when doing a11y checks ([#1124](https://github.com/sveltejs/svelte/pull/1124))\n- More complete fix for case sensitive attributes ([#1062](https://github.com/sveltejs/svelte/issues/1062))\n- Handle CLRF line endings in await block comments ([#1132](https://github.com/sveltejs/svelte/issues/1132))\n\n## 1.53.0\n\n- Base scoping selectors on `<style>` contents alone ([#1091](https://github.com/sveltejs/svelte/issues/1091))\n\n## 1.52.0\n\n- Deconflict referenced globals ([#1079](https://github.com/sveltejs/svelte/issues/1079))\n- Validate contents of `await` blocks ([#1061](https://github.com/sveltejs/svelte/issues/1061))\n- Fire `oncreate` for components in `await` blocks ([#1061](https://github.com/sveltejs/svelte/issues/1061))\n- Automatically fix attribute casing ([#1062](https://github.com/sveltejs/svelte/issues/1062))\n- Fix escaping in `<script>` and `<style>` ([#1082](https://github.com/sveltejs/svelte/issues/1082))\n- Error if invalid characters are used in computed properties, and allow any valid identifier in props ([#1083](https://github.com/sveltejs/svelte/issues/1083))\n- Don't run a11y tests on components ([#1110](https://github.com/sveltejs/svelte/issues/1110))\n- Respect `store` option in SSR mode ([#1107](https://github.com/sveltejs/svelte/issues/1107))\n\n## 1.51.1\n\n- Only escape <, > and & characters ([#1082](https://github.com/sveltejs/svelte/issues/1082))\n\n## 1.51.0\n\n- Lock `scroll` bindings ([#1071](https://github.com/sveltejs/svelte/issues/1071))\n- Escape HTML entities when compiling to static HTML ([#1066](https://github.com/sveltejs/svelte/issues/1066))\n- Apply a11y warnings to SVG `<a>` attributes with `xlink:href` ([#1008](https://github.com/sveltejs/svelte/issues/1008))\n\n## 1.50.1\n\n- Prevent main fragment being created twice in custom elements ([#1064](https://github.com/sveltejs/svelte/pull/1064))\n\n## 1.50.0\n\n- Detect unused/misplaced components ([#1039](https://github.com/sveltejs/svelte/issues/1039))\n- Warn on unused event definitions/transitions ([#1051](https://github.com/sveltejs/svelte/issues/1051))\n- Remove whitespace inside `<:Head>` ([#1026](https://github.com/sveltejs/svelte/issues/1026))\n- Optimise `<title>` ([#1027](https://github.com/sveltejs/svelte/issues/1027))\n- Add `bind: false` option to disable two-way binding ([#54](https://github.com/sveltejs/svelte/issues/54))\n\n## 1.49.3\n\n- Return `html` from SSR compiler `render().toString()` methods ([#1044](https://github.com/sveltejs/svelte/issues/1044))\n- Correctly reinitialise dynamic components ([#1040](https://github.com/sveltejs/svelte/issues/1040))\n- Allow `<option>` outside `<select>` ([#1022](https://github.com/sveltejs/svelte/issues/1022))\n- Fix data references in await-block event handlers ([#1032](https://github.com/sveltejs/svelte/issues/1032))\n\n## 1.49.2\n\n- Add `store.umd.js` ([#967](https://github.com/sveltejs/svelte/issues/967))\n- Warn on use of `this` inside computed properties ([#1033](https://github.com/sveltejs/svelte/pull/1033))\n\n## 1.49.1\n\n- Pass `store` to children in SSR mode ([#1029](https://github.com/sveltejs/svelte/pull/1029))\n\n## 1.49.0\n\n- Support `store` as a component property ([#1028](https://github.com/sveltejs/svelte/pull/1028))\n\n## 1.48.0\n\n- Added `<:Head>` component for injecting contents into document head ([#1013](https://github.com/sveltejs/svelte/issues/1013)))\n- SSR `render(...)` method now returns a `{ html, css: { code, map }, head }` object ([#1013](https://github.com/sveltejs/svelte/issues/1013))\n- SSR `renderCss(...)` method is deprecated ([#1013](https://github.com/sveltejs/svelte/issues/1013))\n- Add a `preload` function to components ([#1015](https://github.com/sveltejs/svelte/issues/1015))\n- Expose `this.root` on nested components ([#1023](https://github.com/sveltejs/svelte/pull/1023))\n\n## 1.47.2\n\n- Deconflict computed properties against arguments to `_recompute` ([#1012](https://github.com/sveltejs/svelte/issues/1012))\n- Allow `await` blocks in slots ([#1018](https://github.com/sveltejs/svelte/issues/1018))\n- Allow components without slots to have whitespace as only child ([#1007](https://github.com/sveltejs/svelte/issues/1007))\n- Correctly set `toString` on `CompileError` ([#1016](https://github.com/sveltejs/svelte/pull/1016))\n\n## 1.47.1\n\n- Sanitize filenames in SSR mode ([#1005](https://github.com/sveltejs/svelte/issues/1005))\n\n## 1.47.0\n\n- Support dynamic `import(...)` inside `<script>` tags ([#1003](https://github.com/sveltejs/svelte/issues/1003))\n\n## 1.46.1\n\n- `await...then` shorthand ([#957](https://github.com/sveltejs/svelte/issues/957))\n- Allow dynamic components inside elements ([#993](https://github.com/sveltejs/svelte/issues/993))\n- Don't use `dataset` on SVG nodes ([#982](https://github.com/sveltejs/svelte/issues/982))\n- Fix erroneous `<figcaption>` a11y warning ([#991](https://github.com/sveltejs/svelte/issues/991))\n- Handle empty classes when pruning unused selectors ([#978](https://github.com/sveltejs/svelte/issues/978))\n- Better trimming of SSR'd output ([#976](https://github.com/sveltejs/svelte/issues/976))\n- Don't add `event` to `expectedProperties` ([#972](https://github.com/sveltejs/svelte/issues/972))\n- Emit error on bad `set` arguments in dev mode ([#990](https://github.com/sveltejs/svelte/issues/990))\n\n## 1.46.0\n\n- Pass `filename` through to preprocessors ([#983](https://github.com/sveltejs/svelte/issues/983))\n\n## 1.45.0\n\n- Dynamic components ([#971](https://github.com/sveltejs/svelte/pull/971))\n\n## 1.44.2\n\n- Fix `await` blocks with siblings ([#974](https://github.com/sveltejs/svelte/issues/974))\n- Fix `await` blocks inside `if` blocks ([#975](https://github.com/sveltejs/svelte/issues/975))\n\n## 1.44.1\n\n- Fix bidirectional transitions that reference state ([#962](https://github.com/sveltejs/svelte/issues/962))\n\n## 1.44.0\n\n- Add `svelte.preprocess` ([#181](https://github.com/sveltejs/svelte/issues/181), [#876](https://github.com/sveltejs/svelte/issues/876))\n- Add `{{#await ...}}` blocks ([#654](https://github.com/sveltejs/svelte/issues/654))\n\n## 1.43.1\n\n- Fix parameterised transitions ([#962](https://github.com/sveltejs/svelte/issues/962))\n- Prevent boolean attributes breaking estree-walker expectations ([#961](https://github.com/sveltejs/svelte/issues/961))\n- Throw error on cyclical store computations ([#964](https://github.com/sveltejs/svelte/pull/964))\n\n## 1.43.0\n\n- Export `Store` class to manage global state ([#930](https://github.com/sveltejs/svelte/issues/930))\n- Recognise `aria-current` ([#953](https://github.com/sveltejs/svelte/pull/953))\n- Support SSR register options including `extensions` ([#939](https://github.com/sveltejs/svelte/issues/939))\n- Friendlier error for illegal contexts ([#934](https://github.com/sveltejs/svelte/issues/934))\n- Remove whitespace around `<:Window>` components ([#943](https://github.com/sveltejs/svelte/issues/943))\n\n## 1.42.1\n\n- Correctly append items inside a slotted `each` block ([#932](https://github.com/sveltejs/svelte/pull/932))\n- Fix `<:Window bind:online/>` ([#936](https://github.com/sveltejs/svelte/issues/936))\n- Attach globals to state upon initialisation ([#908](https://github.com/sveltejs/svelte/issues/908))\n\n## 1.42.0\n\n- Implement `indeterminate` binding for checkbox inputs ([#910](https://github.com/sveltejs/svelte/issues/910))\n- Use `<option>` children as `value` attribute if none exists ([#928](https://github.com/sveltejs/svelte/issues/928))\n- Allow quoted property names in default export and sub-properties ([#914](https://github.com/sveltejs/svelte/issues/914))\n- Various improvements to generated code for bindings\n\n## 1.41.4\n\n- Handle self-destructive bindings ([#917](https://github.com/sveltejs/svelte/issues/917))\n- Prevent `innerHTML` with `<option>` elements ([#915](https://github.com/sveltejs/svelte/issues/915))\n- Use `dataset` unless `legacy` is true ([#858](https://github.com/sveltejs/svelte/issues/858))\n- Add `prepare` script to facilitate installing from git ([#923](https://github.com/sveltejs/svelte/pull/923))\n\n## 1.41.3\n\n- Prevent argument name clashes ([#911](https://github.com/sveltejs/svelte/issues/911))\n- Fix UMD factory arguments ([#918](https://github.com/sveltejs/svelte/pull/918))\n- Don't attempt to set computed values ([#893](https://github.com/sveltejs/svelte/issues/893))\n- Fix TypeScript build error ([#919](https://github.com/sveltejs/svelte/issues/919))\n\n## 1.41.2\n\n- Handle attribute selectors with no value ([#905](https://github.com/sveltejs/svelte/issues/905))\n- Retain `async` keyword when extracting functions ([#904](https://github.com/sveltejs/svelte/issues/904))\n- Shallow clone `data` on initialisation ([#891](https://github.com/sveltejs/svelte/pull/891))\n\n## 1.41.1\n\n- Fix updates of destructured each blocks ([#897](https://github.com/sveltejs/svelte/pull/897))\n- Don't warn on `options.*` event handler callee ([#900](https://github.com/sveltejs/svelte/pull/900))\n\n## 1.41.0\n\n- `onwarn` and `onerror` receive default handlers as second arguments ([#883](https://github.com/sveltejs/svelte/pull/883))\n- Recognise `muted` as boolean property on `<audio>` elements ([#886](https://github.com/sveltejs/svelte/pull/886))\n- Array destructuring for `each` block contexts ([#889](https://github.com/sveltejs/svelte/pull/889))\n\n## 1.40.2\n\n- Ignore `@apply` and similar in CSS ([#871](https://github.com/sveltejs/svelte/issues/871))\n- Properly escape CSS in custom elements ([#872](https://github.com/sveltejs/svelte/issues/872))\n\n## 1.40.1\n\n- Always use explicit closing tags with `innerHTML` ([#866](https://github.com/sveltejs/svelte/issues/866))\n- Escape text in `textContent` and `innerHTML` expressions ([#868](https://github.com/sveltejs/svelte/issues/868))\n\n## 1.40.0\n\n- Short fragment method names ([#863](https://github.com/sveltejs/svelte/pull/863))\n- Extract declarations out of default export ([#756](https://github.com/sveltejs/svelte/issues/756))\n\n## 1.39.4\n\n- Extract shared init logic ([#855](https://github.com/sveltejs/svelte/pull/855))\n- Allow `console.*` calls in event handlers ([#782](https://github.com/sveltejs/svelte/issues/782))\n- Marker comments in output ([#823](https://github.com/sveltejs/svelte/issues/823))\n- Use `textContent` and `innerHTML` where appropriate ([#23](https://github.com/sveltejs/svelte/issues/23))\n- Various improvements to generated code\n\n## 1.39.3\n\n- Allow `slot='...'` inside custom elements ([#827](https://github.com/sveltejs/svelte/issues/827))\n- Disallow `slot='...'` inside if/each blocks ([#849](https://github.com/sveltejs/svelte/issues/849))\n- Use correct parent node for slotted if blocks ([#850](https://github.com/sveltejs/svelte/issues/850))\n\n## 1.39.2\n\n- Escape CSS in shadow DOM ([#840](https://github.com/sveltejs/svelte/issues/840))\n- Fix missing anchor bug inside SVG elements ([#843](https://github.com/sveltejs/svelte/issues/843))\n\n## 1.39.1\n\n- Always use anchors for slotted content ([#822](https://github.com/sveltejs/svelte/issues/822))\n- Prevent ES6 in helpers ([#838](https://github.com/sveltejs/svelte/issues/838))\n- Correctly determine whether to use `timeRangesToArray` ([#837](https://github.com/sveltejs/svelte/pull/837))\n\n## 1.39.0\n\n- Always attach fragment to shadow root ([#821](https://github.com/sveltejs/svelte/issues/821))\n- Add `buffered`, `seekable`, `played` bindings to media elements ([#819](https://github.com/sveltejs/svelte/pull/819))\n- Quote `class` properties in legacy mode ([#830](https://github.com/sveltejs/svelte/issues/830))\n- Warn on missing `lang` attribute on `<html>` ([#828](https://github.com/sveltejs/svelte/pull/828))\n\n## 1.38.0\n\n- Compile-time a11y warnings ([#815](https://github.com/sveltejs/svelte/pull/815))\n- Remove redundant input blowback guards ([#645](https://github.com/sveltejs/svelte/issues/645))\n- Use component name in debugging messages ([#781](https://github.com/sveltejs/svelte/issues/781))\n\n## 1.37.0\n\n- Experimental support for compiling to custom elements ([#797](https://github.com/sveltejs/svelte/issues/797))\n\n## 1.36.0\n\n- Optimize `style` attributes where possible ([#455](https://github.com/sveltejs/svelte/issues/455))\n\n## 1.35.0\n\n- `set` and `get` continue to work until `destroy` is complete ([#788](https://github.com/sveltejs/svelte/issues/788))\n- Observers of unchanged bound values don't fire incorrectly ([#804](https://github.com/sveltejs/svelte/issues/804))\n- Nested components with slotted content render correctly in SSR mode ([#801](https://github.com/sveltejs/svelte/issues/801))\n- More efficient rendering of raw and slotted content ([#637](https://github.com/sveltejs/svelte/issues/637))\n- Handle unquoted attributes in attribute selectors ([#798](https://github.com/sveltejs/svelte/issues/798))\n\n## 1.34.0\n\n- Support nested `<slot>` elements ([#790](https://github.com/sveltejs/svelte/issues/790))\n- Attach `options` to instance ([#550](https://github.com/sveltejs/svelte/issues/550), [#777](https://github.com/sveltejs/svelte/issues/777))\n- Error if transitions are applied to component ([#791](https://github.com/sveltejs/svelte/issues/791))\n- Handle CSS variables in `<style>` tag ([#757](https://github.com/sveltejs/svelte/issues/757))\n\n## 1.33.0\n\n- Replace `{{yield}}` with `<slot>` — adds fallback content named slots, and `options.slots` ([#763](https://github.com/sveltejs/svelte/issues/763))\n\n## 1.32.0\n\n- Allow `anchor` initialisation option, alongside `target` ([#784](https://github.com/sveltejs/svelte/issues/784))\n- Remove leading CSS selectors safely ([#783](https://github.com/sveltejs/svelte/issues/783))\n\n## 1.31.0\n\n- Add `legacy` compile option, which adds IE9 compatibility ([#773](https://github.com/sveltejs/svelte/issues/773))\n\n## 1.30.0\n\n- Update all component bindings simultaneously ([#760](https://github.com/sveltejs/svelte/issues/760))\n- Fix `@keyframes` atrules with `from` and `to` selectors ([#774](https://github.com/sveltejs/svelte/issues/774))\n\n## 1.29.3\n\n- Only recompute tag and attribute values if they could have changed ([#768](https://github.com/sveltejs/svelte/issues/768))\n- Fix CSS scoping with multiple levels of descendant selectors ([#767](https://github.com/sveltejs/svelte/issues/767))\n\n## 1.29.2\n\n- Preserve space before non-parenthesized media query expression ([#759](https://github.com/sveltejs/svelte/issues/759))\n- Call `create()` on new iterations of static each blocks ([#762](https://github.com/sveltejs/svelte/issues/762))\n- Use `change` events as well as `input` events to bind range inputs ([#740](https://github.com/sveltejs/svelte/issues/740))\n\n## 1.29.1\n\n- Replace `set` and `destroy` with `noop` when component is destroyed ([#744](https://github.com/sveltejs/svelte/issues/744))\n\n## 1.29.0\n\n- Add static `setup` method ([#578](https://github.com/sveltejs/svelte/issues/578))\n- Hoist if block selectors ([#751](https://github.com/sveltejs/svelte/pull/751))\n- More sigil escaping fixes ([#750](https://github.com/sveltejs/svelte/pull/750))\n\n## 1.28.1\n\n- Fix unescaping of special words in SSR mode ([#741](https://github.com/sveltejs/svelte/issues/741))\n\n## 1.28.0\n\n- Support `ref:foo` as a CSS selector ([#693](https://github.com/sveltejs/svelte/issues/693))\n- Prevent magic-string bugs by only minifying CSS combinators if `cascade: false` ([#743](https://github.com/sveltejs/svelte/issues/743))\n- Don't throw an error if component is destroyed twice ([#643](https://github.com/sveltejs/svelte/issues/643))\n\n## 1.27.0\n\n- Minify CSS and remove unused styles ([#697](https://github.com/sveltejs/svelte/issues/697))\n- Optimize ternary expressions when excluding unused CSS ([#696](https://github.com/sveltejs/svelte/issues/696))\n- Clear refs after `ondestroy` callbacks fire ([#706](https://github.com/sveltejs/svelte/issues/706))\n- Prevent certain forms of component binding blowback ([#721](https://github.com/sveltejs/svelte/issues/721))\n- Use helper to encapsulate styles ([#375](https://github.com/sveltejs/svelte/issues/375))\n- Event propagation shorthand — `on:foo` equals `on:foo='fire(\"foo\", event)` ([#638](https://github.com/sveltejs/svelte/issues/638))\n- Allow `refs.*` in event handlers, and validate them ([#686](https://github.com/sveltejs/svelte/issues/686))\n\n## 1.26.2\n\n- Unescape `#` characters ([#722](https://github.com/sveltejs/svelte/issues/722))\n\n## 1.26.1\n\n- Fix select binding regression ([#724](https://github.com/sveltejs/svelte/issues/724))\n\n## 1.26.0\n\n- Enforce correct order of operations when initialising ([#708](https://github.com/sveltejs/svelte/issues/708) and [#714](https://github.com/sveltejs/svelte/issues/714))\n- Ensure data is up-to-date when re-rendering yield block ([#711](https://github.com/sveltejs/svelte/issues/711))\n- Fix unescaping of strings, preserve at-rules in CSS ([#712](https://github.com/sveltejs/svelte/issues/712))\n- Preserve whitespace at end of each blocks ([#713](https://github.com/sveltejs/svelte/issues/713))\n\n## 1.25.1\n\n- Better CSS sourcemaps ([#716](https://github.com/sveltejs/svelte/pull/716))\n\n## 1.25.0\n\n- Fix hoisted event handlers ([#699](https://github.com/sveltejs/svelte/issues/699))\n- Fire `intro.start` and `outro.start` events ([#702](https://github.com/sveltejs/svelte/issues/702))\n- Preserve order of components in keyed each blocks ([#700](https://github.com/sveltejs/svelte/issues/700))\n- Add `cssMap` property to compiler output ([#698](https://github.com/sveltejs/svelte/pull/698/))\n\n## 1.24.0\n\n- Deconflict names with imports in SSR compiler ([#655](https://github.com/sveltejs/svelte/issues/655))\n- Improved transition performance ([#670](https://github.com/sveltejs/svelte/pull/670))\n- Run transitions on initial render ([#651](https://github.com/sveltejs/svelte/issues/651))\n- Add dev mode warning if `hydrate` is true but `hydratable` was false ([#664](https://github.com/sveltejs/svelte/issues/664))\n- Manipulate sourcemap to make missing loop values obvious ([#683](https://github.com/sveltejs/svelte/pull/683))\n- Only add CSS scoping attributes where necessary ([#679](https://github.com/sveltejs/svelte/issues/679))\n- Warn on unused CSS selectors ([#678](https://github.com/sveltejs/svelte/issues/678))\n- Fix `<select>` binding in loop ([#685](https://github.com/sveltejs/svelte/issues/685))\n- Prevent bindings from calling `oncreate` functions prematurely ([#694](https://github.com/sveltejs/svelte/pull/694))\n- Simpler codegen ([#673](https://github.com/sveltejs/svelte/pull/673))\n\n## 1.23.4\n\n- Don't recreate if blocks incorrectly ([#669](https://github.com/sveltejs/svelte/pull/669))\n\n## 1.23.3\n\n- Pass parameters to `get_block` ([#667](https://github.com/sveltejs/svelte/issues/667))\n\n## 1.23.2\n\n- Fix if blocks being recreated on update ([#665](https://github.com/sveltejs/svelte/issues/665))\n\n## 1.23.1\n\n- Fix each-else blocks that are empty on initial render ([#662](https://github.com/sveltejs/svelte/issues/662))\n\n## 1.23.0\n\n- Hydration ([#649](https://github.com/sveltejs/svelte/pull/649))\n- Correctly transform CSS selectors with pseudo-elements ([#658](https://github.com/sveltejs/svelte/issues/658))\n\n## 1.22.5\n\n- Fix nested component unmounting bug ([#643](https://github.com/sveltejs/svelte/issues/643))\n\n## 1.22.4\n\n- Include `ast` in `svelte.compile` return value ([#632](https://github.com/sveltejs/svelte/issues/632))\n- Set initial value of `<select>` binding, if unspecified ([#639](https://github.com/sveltejs/svelte/issues/639))\n- Mark indirect dependencies of `<select>` bindings (i.e. the dependencies of their `<option>` values) ([#639](https://github.com/sveltejs/svelte/issues/639))\n\n## 1.22.3\n\n- Fix nested component unmounting bug ([#625](https://github.com/sveltejs/svelte/issues/625))\n- Allow components to have computed member expression bindings ([#624](https://github.com/sveltejs/svelte/issues/624))\n- Handle empty `<style>` tags ([#634](https://github.com/sveltejs/svelte/issues/634))\n- Warn on missing component ([#623](https://github.com/sveltejs/svelte/issues/623))\n- Allow dynamic `type` attribute for unbound inputs ([#620](https://github.com/sveltejs/svelte/issues/620))\n- Rename `addEventListener` and `removeEventListener` directives ([#621](https://github.com/sveltejs/svelte/issues/621))\n\n## 1.22.2\n\n- Escape template strings correctly in SSR output ([#616](https://github.com/sveltejs/svelte/issues/616))\n- Prevent magic-string deprecation warning ([#617](https://github.com/sveltejs/svelte/pull/617))\n\n## 1.22.1\n\n- Sanitise event handler names ([#612](https://github.com/sveltejs/svelte/issues/612))\n\n## 1.22.0\n\n- Symmetry between `mount` and `unmount`. This is potentially a breaking change if your components import other components that were precompiled with an earlier version of Svelte ([#592](https://github.com/sveltejs/svelte/issues/592))\n- Add `cascade` option, which prevents styles affecting child components if `false`, unless selectors are wrapped in `:global(...)` and keyframe declaration IDs are prefixed with `-global-`. This will become the default behaviour in v2 ([#583](https://github.com/sveltejs/svelte/issues/583))\n- Support binding to computed member expressions ([#602](https://github.com/sveltejs/svelte/issues/602))\n- Coerce empty string in `number`/`range` inputs to `undefined`, not `0` ([#584](https://github.com/sveltejs/svelte/issues/584))\n- Fix insert location of DOM elements in each/if/nested component edge cases ([#610](https://github.com/sveltejs/svelte/issues/610))\n\n## 1.21.0\n\n- Always use `helpers` if referenced, not just for call expressions ([#575](https://github.com/sveltejs/svelte/issues/575))\n- Fix parsing of `<textarea>` children ([#599](https://github.com/sveltejs/svelte/pull/599))\n- Treat `<textarea>` value attributes and children as equivalent, and fail validation if both are present ([#599](https://github.com/sveltejs/svelte/pull/599))\n- Fix `<textarea>` SSR ([#599](https://github.com/sveltejs/svelte/pull/599))\n- Apply CSS transition styles immediately if transition has delay ([#574](https://github.com/sveltejs/svelte/issues/574))\n- Ensure `transitionManager` is treeshakeable ([#593](https://github.com/sveltejs/svelte/issues/593))\n- Fix for environments where `node.style.animation` is undefined ([#587](https://github.com/sveltejs/svelte/issues/587))\n- Fix order of operations when dealing with `<select>` elements ([#590](https://github.com/sveltejs/svelte/issues/590))\n- Downgrade 'invalid callee' to a warning ([#579](https://github.com/sveltejs/svelte/issues/579))\n- Convert to TypeScript ([#573](https://github.com/sveltejs/svelte/pull/573))\n\n## 1.20.2\n\n- Fix destruction of compound if-blocks with outros ([#572](https://github.com/sveltejs/svelte/pull/572))\n\n## 1.20.1\n\n- Fix insertion order of `if` blocks and their anchors ([#569](https://github.com/sveltejs/svelte/issues/569))\n\n## 1.20.0\n\n- Faster, better updates of keyed each blocks ([#373](https://github.com/sveltejs/svelte/issues/373), [#543](https://github.com/sveltejs/svelte/issues/543))\n- Use element IDs to robustly track dynamically injected `<style>` tags ([#554](https://github.com/sveltejs/svelte/issues/554))\n- Abort outros before corresponding intros ([#546](https://github.com/sveltejs/svelte/issues/546))\n- Generate less code for `if` blocks with `else` blocks ([#540](https://github.com/sveltejs/svelte/issues/540))\n- Ensure `{{yield}}` block content is injected into the right place ([#561](https://github.com/sveltejs/svelte/issues/561))\n- Simpler, more readable codegen code ([#559](https://github.com/sveltejs/svelte/pull/559))\n- Validate transition directives ([#564](https://github.com/sveltejs/svelte/issues/564))\n- Apply delays to bidirectional transitions ([#562](https://github.com/sveltejs/svelte/issues/562))\n- Handle all valid HTML entities ([#565](https://github.com/sveltejs/svelte/pull/565))\n- Fix outros on compound `if` blocks ([#565](https://github.com/sveltejs/svelte/pull/565))\n- Validation for `<:Window>` tags ([#565](https://github.com/sveltejs/svelte/pull/565))\n- Increased test coverage ([#565](https://github.com/sveltejs/svelte/pull/565))\n\n## 1.19.1\n\n- Export `generateKeyframes`, so that CSS transitions work\n\n## 1.19.0\n\n- Experimental support for transitions ([#7](https://github.com/sveltejs/svelte/issues/7))\n- Use `querySelector(':checked')` instead of `selectedOptions` ([#539](https://github.com/sveltejs/svelte/issues/539))\n- Stringify helpers before bundling them, to avoid renaming errors ([#538](https://github.com/sveltejs/svelte/issues/538))\n\n## 1.18.2\n\n- Parenthesize if-block conditions ([#532](https://github.com/sveltejs/svelte/issues/532))\n- Fix parsing of parenthesized expressions ([#534](https://github.com/sveltejs/svelte/issues/534))\n- Fix error on `bind:checked` that doesn't belong to a checkbox input ([#529](https://github.com/sveltejs/svelte/pull/529))\n\n## 1.18.1\n\n- Allow `destroy()` in event handlers ([#523](https://github.com/sveltejs/svelte/issues/523))\n- Fix bug with `{{yield}}` blocks following elements ([#524](https://github.com/sveltejs/svelte/issues/524))\n\n## 1.18.0\n\n- Visit `<select>` attributes after children, to ensure options are in the right state ([#521](https://github.com/sveltejs/svelte/pull/521))\n- Use sibling elements as anchors rather than creating comment nodes wherever possible ([#3](https://github.com/sveltejs/svelte/issues/3))\n\n## 1.17.2\n\n- Replace bad characters when creating variable names based on element names ([#516](https://github.com/sveltejs/svelte/issues/516))\n\n## 1.17.1\n\n- Fixes for static each-else and yield blocks ([#509](https://github.com/sveltejs/svelte/issues/509)), ([#514](https://github.com/sveltejs/svelte/issues/514))\n- Code generation tweaks ([#504](https://github.com/sveltejs/svelte/issues/504)), ([#507](https://github.com/sveltejs/svelte/issues/507))\n\n## 1.17.0\n\n- Add `currentTime`, `duration` and `paused` bindings for media elements ([#406](https://github.com/sveltejs/svelte/issues/406))\n- Don't treat helpers as dependencies ([#492](https://github.com/sveltejs/svelte/issues/492))\n- Allow `<:Window>` event handlers to access component state ([#497](https://github.com/sveltejs/svelte/pull/497))\n- Allow two-way binding to properties named 'component' ([#495](https://github.com/sveltejs/svelte/issues/495))\n- Group checkbox bindings correctly, to avoid erroneously unchecking siblings ([#498](https://github.com/sveltejs/svelte/issues/498))\n- Validate two-way bindings ([#494](https://github.com/sveltejs/svelte/pull/494))\n- Allow dynamic each-block to have static else-block ([#501](https://github.com/sveltejs/svelte/pull/501))\n- Initialise `<select>` value correctly ([#502](https://github.com/sveltejs/svelte/pull/502))\n\n## 1.16.0\n\n- Better code generation ([#489](https://github.com/sveltejs/svelte/pull/489)), ([#490](https://github.com/sveltejs/svelte/pull/490)), ([#491](https://github.com/sveltejs/svelte/pull/491))\n- Prevent binding blowback on initial render ([#488](https://github.com/sveltejs/svelte/pull/488))\n\n## 1.15.1\n\n- Clone data before merging it with state ([#479](https://github.com/sveltejs/svelte/issues/479))\n- Apply binding event handlers before user event handlers ([#486](https://github.com/sveltejs/svelte/issues/486))\n\n## 1.15.0\n\n- Dev mode — downgrade 'missing data' to a warning, and ignore whitelisted globals ([#475](https://github.com/sveltejs/svelte/issues/475))\n- Fix `<select>` value binding when options are updated late ([#476](https://github.com/sveltejs/svelte/issues/476))\n- Throw at compile time if event handler references invalid callee ([#473](https://github.com/sveltejs/svelte/pull/473))\n- Check for helper function purity ([#473](https://github.com/sveltejs/svelte/pull/473))\n- Validate `namespace` option ([#473](https://github.com/sveltejs/svelte/pull/473))\n\n## 1.14.1\n\n- Replace bad characters when creating variable names based on attributes ([#470](https://github.com/sveltejs/svelte/issues/470))\n\n## 1.14.0\n\n- Better guard against naming conflicts ([#465](https://github.com/sveltejs/svelte/issues/465))\n- Better error if getters and setters are used with `methods` ([#425](https://github.com/sveltejs/svelte/issues/425))\n- Don't create whitespace nodes inside elements that can't use them ([#189](https://github.com/sveltejs/svelte/issues/189))\n- Collapse consecutive `if` statements with the same condition ([#450](https://github.com/sveltejs/svelte/issues/450))\n- Window `scroll` bindings are bidirectional ([#404](https://github.com/sveltejs/svelte/issues/404))\n- Add `bind:online` to window ([#404](https://github.com/sveltejs/svelte/issues/404))\n- In dev mode, throw if read-only properties are set ([#404](https://github.com/sveltejs/svelte/issues/404))\n- Prevent conflicts with component name ([#464](https://github.com/sveltejs/svelte/pull/464))\n- Ensure event handler names are deconflicted ([#466](https://github.com/sveltejs/svelte/issues/466))\n\n## 1.13.7\n\n- Fix observers — `defer: true` now triggers callback after DOM is updated ([#441](https://github.com/sveltejs/svelte/issues/441))\n- Handle empty `computed` property ([#452](https://github.com/sveltejs/svelte/issues/452))\n- Correctly bind one-way `<select>` value attributes with objects ([#423](https://github.com/sveltejs/svelte/issues/423))\n- Hoist event handlers inside each blocks, where possible ([#456](https://github.com/sveltejs/svelte/pull/456))\n- Don't bind event handler callbacks ([#433](https://github.com/sveltejs/svelte/issues/433))\n- Internal refactoring and neater code generation ([#453](https://github.com/sveltejs/svelte/pull/453))\n\n## 1.13.6\n\n- Use `assign` helper instead of `Object.assign` for better performance and legacy compatibility ([#431](https://github.com/sveltejs/svelte/issues/431))\n- Improved code generation ([#419](https://github.com/sveltejs/svelte/issues/419)), ([#440](https://github.com/sveltejs/svelte/issues/440)), ([#442](https://github.com/sveltejs/svelte/issues/442))\n\n## 1.13.5\n\n- Read `range` and `number` input values as numbers ([#436](https://github.com/sveltejs/svelte/issues/436))\n- Better error for `bind:value='{{foo}}'` ([#437](https://github.com/sveltejs/svelte/issues/437))\n\n## 1.13.4\n\n- Prevent unclosed `<script>` tag causing infinite loop ([#435](https://github.com/sveltejs/svelte/pull/435))\n\n## 1.13.3\n\n- Correctly handle `{{true}}`, `{{false}}` and `{{null}}` ([#424](https://github.com/sveltejs/svelte/issues/424))\n- Update `<select>` value attributes correctly ([#423](https://github.com/sveltejs/svelte/issues/423))\n- Bind custom event handler callbacks ([#428](https://github.com/sveltejs/svelte/issues/428))\n- Disallow `import root` ([#430](https://github.com/sveltejs/svelte/pull/430))\n- Prevent component bindings mutating the wrong object ([#432](https://github.com/sveltejs/svelte/pull/432))\n\n## 1.13.2\n\n- Fix deep component bindings ([#420](https://github.com/sveltejs/svelte/issues/420))\n- Include `css` property in compiler output ([#409](https://github.com/sveltejs/svelte/issues/409))\n- Treat functions as mutable objects when recomputing ([#413](https://github.com/sveltejs/svelte/issues/413)\n- Include magic-string in bundle ([#410](https://github.com/sveltejs/svelte/issues/410))\n- Disable unneeded Bublé transformations for slimmer output ([#411](https://github.com/sveltejs/svelte/pull/411))\n\n## 1.13.1\n\n- Prevent infinite loops with pathological component bindings ([#398](https://github.com/sveltejs/svelte/issues/398))\n- More robust deconflicting ([#401](https://github.com/sveltejs/svelte/pull/401))\n\n## 1.13.0\n\n- Add `<:Window>` meta tag with event listeners, and a handful of bindings ([#371](https://github.com/sveltejs/svelte/issues/371))\n- Don't uncheck radios incorrectly ([#399](https://github.com/sveltejs/svelte/issues/399))\n\n## 1.12.1\n\n- Deconflict non-helper functions (`addCss` etc) ([#388](https://github.com/sveltejs/svelte/issues/388))\n- Allow reserved words in tags, e.g. `{{class}}` ([#383](https://github.com/sveltejs/svelte/issues/383))\n\n## 1.12.0\n\n- Shorthand attributes — `<Widget :foo/>` is equivalent to `<Widget foo='{{foo}}'/>` ([#384](https://github.com/sveltejs/svelte/pull/384))\n- Support `bind:group` for radio and checkbox inputs ([#311](https://github.com/sveltejs/svelte/issues/311), [#312](https://github.com/sveltejs/svelte/issues/312))\n- Better sourcemap support for two-way bindings\n\n## 1.11.4\n\n- Dev mode warning for bad `component.observe` arguments ([#369](https://github.com/sveltejs/svelte/issues/369))\n- Translate `component.on('teardown', ...)` to `component.on('destroy', ...)` and add dev warning ([#365](https://github.com/sveltejs/svelte/issues/365))\n- Use shared prototype to save bytes ([#378](https://github.com/sveltejs/svelte/pull/378))\n\n## 1.11.3\n\n- Undo CSS behaviour change in 1.11.2 ([#372](https://github.com/sveltejs/svelte/issues/372))\n- Pin version of css-tree ([#370](https://github.com/sveltejs/svelte/pull/370))\n\n## 1.11.2\n\n- Add component CSS to each document a component is rendered to ([#331](https://github.com/sveltejs/svelte/issues/331))\n\n## 1.11.1\n\n- Fix two-way binding for components inside `each` blocks ([#356](https://github.com/sveltejs/svelte/issues/356))\n\n## 1.11.0\n\n- Add `format: 'eval'` and `svelte.create`, to create components directly from source code ([#345](https://github.com/sveltejs/svelte/issues/345))\n- Node 4 compatibility ([#109](https://github.com/sveltejs/svelte/issues/109))\n\n## 1.10.3\n\n- Prevent `'</script>'` string occurrence breaking pages ([#349](https://github.com/sveltejs/svelte/pull/349))\n- Allow reference to whitelisted globals without properties ([#333](https://github.com/sveltejs/svelte/pull/333))\n- Don't remove `&nbsp;` incorrectly ([#348](https://github.com/sveltejs/svelte/issues/348))\n- `let` -> `var` in `addCss` block ([#351](https://github.com/sveltejs/svelte/pull/351))\n\n## 1.10.2\n\n- Accept any case for doctype declarations ([#336](https://github.com/sveltejs/svelte/issues/336))\n- Allow non-top-level `<script>` and `<style>` tags to pass through without processing ([#335](https://github.com/sveltejs/svelte/issues/335))\n\n## 1.10.1\n\n- typecheck argument in \\_set when in dev mode ([#342](https://github.com/sveltejs/svelte/issues/342))\n- Prevent duplicate helpers in non-shared mode ([#337](https://github.com/sveltejs/svelte/issues/337))\n\n## 1.10.0\n\n- Component self-references with `<:Self/>` ([#51](https://github.com/sveltejs/svelte/issues/51))\n- Two-way binding with `<select multiple>` ([#313](https://github.com/sveltejs/svelte/issues/313))\n\n## 1.9.1\n\n- Better error for malformed event handlers ([#220](https://github.com/sveltejs/svelte/issues/220))\n- Allow function expressions in tags ([#269](https://github.com/sveltejs/svelte/issues/269))\n\n## 1.9.0\n\n- Add development warnings ([#13](https://github.com/sveltejs/svelte/issues/13)), ([#320](https://github.com/sveltejs/svelte/pull/320)), ([#177](https://github.com/sveltejs/svelte/issues/177)), ([#249](https://github.com/sveltejs/svelte/issues/249))\n- Better error if parser encounters an unmatched closing tag ([#321](https://github.com/sveltejs/svelte/issues/321))\n\n## 1.8.1\n\n- Allow implicitly closed elements ([#318](https://github.com/sveltejs/svelte/pull/318))\n- More informative error messages for unclosed elements/blocks ([#258](https://github.com/sveltejs/svelte/issues/258))\n- Deprecate `onrender` and `onteardown` in favour of `oncreate` and `ondestroy` ([#40](https://github.com/sveltejs/svelte/issues/40))\n\n## 1.8.0\n\n- Prevent duplicate imports ([#308](https://github.com/sveltejs/svelte/issues/308))\n- Use `input` events (not `change`) for all input elements other than `checkbox` and `radio`, and textareas ([#309](https://github.com/sveltejs/svelte/pull/309))\n- Encapsulate keyframe declarations ([#245](https://github.com/sveltejs/svelte/issues/245))\n\n## 1.7.1\n\n- Deconflict imports and shared helpers ([#222](https://github.com/sveltejs/svelte/issues/222))\n- Deconflict each-block contexts and reserved words ([#222](https://github.com/sveltejs/svelte/issues/222))\n- Allow shorthand properties in expressions ([#296](https://github.com/sveltejs/svelte/issues/296))\n\n## 1.7.0\n\n- Include CSS AST in `svelte.parse` output ([#302](https://github.com/sveltejs/svelte/pull/302))\n- Better handling of CSS parse errors ([#302](https://github.com/sveltejs/svelte/pull/302))\n- Initialise `<select>` elements with two-way binding correctly ([#301](https://github.com/sveltejs/svelte/issues/301))\n- Allow local context in component event handlers inside `each` blocks ([#290](https://github.com/sveltejs/svelte/issues/290))\n- Fix two-way binding for components inside `each` blocks ([#290](https://github.com/sveltejs/svelte/issues/290))\n\n## 1.6.11\n\n- Initialise dynamic `<option>` value correctly ([#291](https://github.com/sveltejs/svelte/issues/291))\n\n## 1.6.10\n\n- Ensure `sources` and `sourcesContent` are populated in sourcemaps, even if none of the original code is used ([#295](https://github.com/sveltejs/svelte/pull/295))\n- Add `outputFilename` option to populate `file` and `sources` sourcemap properties correctly ([#295](https://github.com/sveltejs/svelte/pull/295))\n\n## 1.6.9\n\n- Don't trigger bindings for torn-down components ([#277](https://github.com/sveltejs/svelte/issues/277))\n- SSR: Handle two-way bindings ([#275](https://github.com/sveltejs/svelte/issues/275))\n- Improve performance by checking data has changed before updates ([#279](https://github.com/sveltejs/svelte/pull/279))\n- Parse CSS with css-tree to prevent transformation errors with unconventional styles ([#288](https://github.com/sveltejs/svelte/issues/288))\n\n## 1.6.8\n\n- Always trigger `onrender`, including when change initiator is a nested component ([#263](https://github.com/sveltejs/svelte/issues/263))\n- Handle default function parameters in computations ([#274](https://github.com/sveltejs/svelte/issues/274))\n\n## 1.6.7\n\n- SSR: Fix apostrophes ([#267](https://github.com/sveltejs/svelte/issues/267))\n- Add `xmlns` attributes to SVGs ([#262](https://github.com/sveltejs/svelte/pull/262))\n\n## 1.6.6\n\n- Omit text from comment anchors ([#247](https://github.com/sveltejs/svelte/issues/247))\n- Handle `xlink` attributes ([#264](https://github.com/sveltejs/svelte/issues/264))\n\n## 1.6.5\n\n- Handle `<!doctype>` declarations ([#255](https://github.com/sveltejs/svelte/pull/255))\n\n## 1.6.4\n\n- Fix updates of yields inside each blocks ([20e1b05](https://github.com/sveltejs/svelte/commit/20e1b05c45dc9fcddfe2e7c5c9fc3109f0d45fa9))\n- SSR: Handle attributes with values that begin with a number ([#248](https://github.com/sveltejs/svelte/issues/248))\n- Handle multiline comments in CSS ([#252](https://github.com/sveltejs/svelte/issues/252))\n\n## 1.6.3\n\n- Fix `{{yield}}` bugs for components inside `if` and `each` blocks ([#230](https://github.com/sveltejs/svelte/issues/230), [#231](https://github.com/sveltejs/svelte/issues/231))\n- Set attributes on `<svg>` elements correctly ([#233](https://github.com/sveltejs/svelte/issues/233))\n- Add `svelte.VERSION` property to compiler\n\n## 1.6.2\n\n- Use helpers for `addEventListener`, `removeEventListener`, `setAttribute` ([#227](https://github.com/sveltejs/svelte/pull/227))\n- Escape `sharedPath` ([#229](https://github.com/sveltejs/svelte/pull/229))\n- Handle attributes with values that begin with a number ([#234](https://github.com/sveltejs/svelte/issues/234))\n- Update dependencies\n\n## 1.6.1\n\n- SSR: Handle component directives at arbitrary positions ([#221](https://github.com/sveltejs/svelte/issues/221))\n- Provide useful feedback on invalid void closing tag ([#224](https://github.com/sveltejs/svelte/issues/224))\n\n## 1.6.0\n\n- Replace `standalone: false` with `shared: true`, or `shared: 'custom/path/to/shared.js'` ([#218](https://github.com/sveltejs/svelte/issues/218))\n- Include `shared.js` in package\n\n## 1.5.0\n\n- Implement `standalone: false` ([#9](https://github.com/sveltejs/svelte/issues/9))\n- SSR: Handle component directives ([216](https://github.com/sveltejs/svelte/issues/216))\n\n## 1.4.0\n\n- Keyed `each` blocks ([#81](https://github.com/sveltejs/svelte/issues/81))\n\n## 1.3.1\n\n- Remove file extensions from AMD dependencies ([#144](https://github.com/sveltejs/svelte/issues/144))\n- Throw if `options.name` is illegal ([#102](https://github.com/sveltejs/svelte/issues/102))\n\n## 1.3.0\n\n- SSR compiler: Support `format` option ([#196](https://github.com/sveltejs/svelte/issues/196))\n- SSR compiler: Don't self-close 'normal' elements ([#200](https://github.com/sveltejs/svelte/issues/200))\n- Remove leading spaces from scoped CSS ([#140](https://github.com/sveltejs/svelte/issues/140))\n- Internal refactoring\n\n## 1.2.5\n\n- Allow whitelisted globals in templates ([#185](https://github.com/sveltejs/svelte/issues/185))\n- Intercept parse errors with `options.onerror`\n\n## 1.2.4\n\n- SSR compiler: Implement `{{{triples}}}` ([#197](https://github.com/sveltejs/svelte/issues/197))\n- SSR compiler: Escape HTML in tags ([#197](https://github.com/sveltejs/svelte/issues/197))\n\n## 1.2.3\n\n- Add support for `namespace` declaration for SVG (etc) components ([#147](https://github.com/sveltejs/svelte/issues/147))\n- Throw error if methods or lifecycle hooks are arrow functions that use `this` or `arguments` ([#179](https://github.com/sveltejs/svelte/issues/179))\n- Use `setAttribute()` for `list` attributes, to preserve link to `<datalist>` ([#178](https://github.com/sveltejs/svelte/issues/178))\n- Throw error if default export is not an object literal ([#190](https://github.com/sveltejs/svelte/pull/190))\n- Internal refactoring\n\n## 1.2.2\n\n- Omit directives in server-side rendering ([#163](https://github.com/sveltejs/svelte/issues/167))\n- Handle comments in SSR ([#165](https://github.com/sveltejs/svelte/issues/165))\n- Support calling methods of `event`/`this` in event handlers ([#162](https://github.com/sveltejs/svelte/issues/162))\n- Remove `mount` from public API ([#150](https://github.com/sveltejs/svelte/issues/150))\n\n## 1.2.1\n\n- Server-side rendering is available as a compiler option (`generate: 'ssr'`) ([#159](https://github.com/sveltejs/svelte/pull/159))\n- Allow call expressions where function is not in `helpers` ([#163](https://github.com/sveltejs/svelte/issues/163))\n\n## 1.2.0\n\n- Server-side rendering of HTML ([#148](https://github.com/sveltejs/svelte/pull/148)) and CSS ([#154](https://github.com/sveltejs/svelte/pull/154))\n\n## 1.1.3\n\n- Handle `xmlns` attributes correctly ([#142](https://github.com/sveltejs/svelte/issues/142))\n- Error on duplicate `<style>`/`<script>` tags rather than failing silently ([#142](https://github.com/sveltejs/svelte/issues/142))\n- Don't create whitespace text nodes inside SVG elements ([#142](https://github.com/sveltejs/svelte/issues/142))\n- Require void elements to be lowercase, to eliminate confusion with components ([#137](https://github.com/sveltejs/svelte/issues/137))\n\n## 1.1.2\n\n- Deconflict variable names ([#88](https://github.com/sveltejs/svelte/issues/88), [#126](https://github.com/sveltejs/svelte/issues/126))\n\n## 1.1.1\n\n- Support multiple SVG elements in a component ([#130](https://github.com/sveltejs/svelte/issues/130))\n\n## 1.1.0\n\n- Separate fragment creation from `mount` ([#91](https://github.com/sveltejs/svelte/pull/91))\n- Trigger `onrender` hook at correct time for nested components ([#103](https://github.com/sveltejs/svelte/pull/103))\n- Fix keypath dynamic attributes in components ([#46](https://github.com/sveltejs/svelte/issues/46))\n- Implement `{{yield}}` ([#112](https://github.com/sveltejs/svelte/pull/112))\n- Optimise teardown ([#99](https://github.com/sveltejs/svelte/issues/99))\n- Require computed properties to have at least one dependency ([#115](https://github.com/sveltejs/svelte/pull/115))\n- Support `{{#each ...}}...{{else}}...{{/each}}` ([#90](https://github.com/sveltejs/svelte/issues/90))\n- Triple mustaches ([#35](https://github.com/sveltejs/svelte/issues/35))\n\n## 1.0.7\n\n- Correctly escape HTML entities ([#85](https://github.com/sveltejs/svelte/issues/85))\n\n## 1.0.6\n\n- Generate useful sourcemaps ([#60](https://github.com/sveltejs/svelte/issues/60))\n\n## 1.0.5\n\n- Ensure compiler only generates ES5 code ([#75](https://github.com/sveltejs/svelte/issues/75))\n- `get()` without arguments returns entire state object ([#73](https://github.com/sveltejs/svelte/issues/73))\n\n## 1.0.4\n\n- Handle empty attributes in elements and components ([#63](https://github.com/sveltejs/svelte/issues/63))\n- Detach top-level text nodes inside departing each blocks ([#62](https://github.com/sveltejs/svelte/issues/62))\n\n## 1.0.3\n\n- Better generated code for `if` blocks, especially with `else`/`elseif` chains ([#28](https://github.com/sveltejs/svelte/pull/28))\n- Trim unnecessary whitespace from `else`/`elseif` blocks ([#49](https://github.com/sveltejs/svelte/pull/49))\n- Handle trailing comments in script tags ([#64](https://github.com/sveltejs/svelte/issues/64))\n\n## 1.0.2\n\nSet `style.cssText` rather than `style` ([#44](https://github.com/sveltejs/svelte/issues/44))\n\n## 1.0.1\n\n- Preserve SVG namespace inside each blocks\n- Always use `setAttribute` with SVG elements\n\n## 1.0.0\n\n- Generate AMD, CJS, IIFE and UMD builds\n- Correctly insert text nodes before anchors ([#31](https://github.com/sveltejs/svelte/pull/31))\n\n## 0.3.0\n\n- Fix bug where departing element would unset `ref` incorrectly ([#24](https://github.com/sveltejs/svelte/issues/24))\n- Basic template validation ([#6](https://github.com/sveltejs/svelte/issues/6))\n- Fire `onrender` hooks once component is in DOM ([#18](https://github.com/sveltejs/svelte/issues/18))\n- Only detach nodes when necessary to do so ([#26](https://github.com/sveltejs/svelte/issues/26))\n\n## 0.2.2\n\n- On second thoughts, don't transpile build. Was only really for Uglify's benefit, which is daft\n\n## 0.2.1\n\n- Transpile build\n\n## 0.2.0\n\n- Only generate UMD build, for now\n- Include dependencies in the build, treat as `devDependencies`\n- Faster initial render\n- Parent data overrides child defaults\n- Remove top-level text nodes on teardown\n- Handle `readUntil` errors in parser\n- Basic `<select>` binding\n- Handle missing data\n- Prevent infinite set/observe loops\n- Add `bind:foo` shorthand\n- `else` and `elseif` blocks\n- Hoist imports\n\n## 0.1.1\n\n- Support unquoted attributes\n- Handle entities in attributes\n- Inline nested components\n- `fire` and `on` methods\n\n## 0.1.0\n\n- Breaking change – Svelte compiler now generates constructor functions rather than factories ([#2](https://github.com/sveltejs/svelte/issues/2))\n- SVG support\n\n## 0.0.2\n\n- First release capable of building TodoMVC\n\n## 0.0.1\n\n- Just squatting on the package name\n"
  },
  {
    "path": "packages/svelte/CHANGELOG.md",
    "content": "# svelte\n\n## 5.55.1\n\n### Patch Changes\n\n- fix: correctly handle bindings on the server ([#18009](https://github.com/sveltejs/svelte/pull/18009))\n\n- fix: prevent hydration error on async `{@html ...}` ([#17999](https://github.com/sveltejs/svelte/pull/17999))\n\n- fix: cleanup `superTypeParameters` in `ClassDeclarations`/`ClassExpression` ([#18015](https://github.com/sveltejs/svelte/pull/18015))\n\n- fix: improve duplicate module import error message ([#18016](https://github.com/sveltejs/svelte/pull/18016))\n\n- fix: reschedule new effects in prior batches ([#18021](https://github.com/sveltejs/svelte/pull/18021))\n\n## 5.55.0\n\n### Minor Changes\n\n- feat: export TweenOptions, SpringOptions, SpringUpdateOptions and Updater from svelte/motion ([#17967](https://github.com/sveltejs/svelte/pull/17967))\n\n### Patch Changes\n\n- fix: ensure HMR wrapper forwards correct start/end nodes to active effect ([#17985](https://github.com/sveltejs/svelte/pull/17985))\n\n## 5.54.1\n\n### Patch Changes\n\n- fix: hydration comments during hmr ([#17975](https://github.com/sveltejs/svelte/pull/17975))\n\n- fix: null out `effect.b` in `destroy_effect` ([#17980](https://github.com/sveltejs/svelte/pull/17980))\n\n- fix: group sync statements ([#17977](https://github.com/sveltejs/svelte/pull/17977))\n\n- fix: defer batch resolution until earlier intersecting batches have committed ([#17162](https://github.com/sveltejs/svelte/pull/17162))\n\n- fix: properly invoke `iterator.return()` during reactivity loss check ([#17966](https://github.com/sveltejs/svelte/pull/17966))\n\n- fix: remove trailing semicolon from {@const} tag printer ([#17962](https://github.com/sveltejs/svelte/pull/17962))\n\n## 5.54.0\n\n### Minor Changes\n\n- feat: allow `css`, `runes`, `customElement` compiler options to be functions ([#17951](https://github.com/sveltejs/svelte/pull/17951))\n\n### Patch Changes\n\n- fix: reinstate reactivity loss tracking ([#17801](https://github.com/sveltejs/svelte/pull/17801))\n\n## 5.53.13\n\n### Patch Changes\n\n- fix: ensure `$inspect` after top level await doesn't break builds ([#17943](https://github.com/sveltejs/svelte/pull/17943))\n\n- fix: resume inert effects when they come from offscreen ([#17942](https://github.com/sveltejs/svelte/pull/17942))\n\n- fix: don't eagerly access not-yet-initialized functions in template ([#17938](https://github.com/sveltejs/svelte/pull/17938))\n\n- fix: discard batches made obsolete by commit ([#17934](https://github.com/sveltejs/svelte/pull/17934))\n\n- fix: ensure \"is standalone child\" is correctly reset ([#17944](https://github.com/sveltejs/svelte/pull/17944))\n\n- fix: remove nodes in boundary when work is pending and HMR is active ([#17932](https://github.com/sveltejs/svelte/pull/17932))\n\n## 5.53.12\n\n### Patch Changes\n\n- fix: update `select.__value` on `change` ([#17745](https://github.com/sveltejs/svelte/pull/17745))\n\n- chore: add `invariant` helper for debugging ([#17929](https://github.com/sveltejs/svelte/pull/17929))\n\n- fix: ensure deriveds values are correct across batches ([#17917](https://github.com/sveltejs/svelte/pull/17917))\n\n- fix: handle async RHS in `assignment_value_stale` ([#17925](https://github.com/sveltejs/svelte/pull/17925))\n\n- fix: avoid traversing clean roots ([#17928](https://github.com/sveltejs/svelte/pull/17928))\n\n## 5.53.11\n\n### Patch Changes\n\n- fix: remove `untrack` circular dependency ([#17910](https://github.com/sveltejs/svelte/pull/17910))\n\n- fix: recover from errors that leave a corrupted effect tree ([#17888](https://github.com/sveltejs/svelte/pull/17888))\n\n- fix: properly lazily evaluate RHS when checking for `assignment_value_stale` ([#17906](https://github.com/sveltejs/svelte/pull/17906))\n\n- fix: resolve boundary in correct batch when hydrating ([#17914](https://github.com/sveltejs/svelte/pull/17914))\n\n- chore: rebase batches after process, not during ([#17900](https://github.com/sveltejs/svelte/pull/17900))\n\n## 5.53.10\n\n### Patch Changes\n\n- fix: re-process batch if new root effects were scheduled ([#17895](https://github.com/sveltejs/svelte/pull/17895))\n\n## 5.53.9\n\n### Patch Changes\n\n- fix: better `bind:this` cleanup timing ([#17885](https://github.com/sveltejs/svelte/pull/17885))\n\n## 5.53.8\n\n### Patch Changes\n\n- fix: `{@html}` no longer duplicates content inside `contenteditable` elements ([#17853](https://github.com/sveltejs/svelte/pull/17853))\n\n- fix: don't access inert block effects ([#17882](https://github.com/sveltejs/svelte/pull/17882))\n\n- fix: handle asnyc updates within pending boundary ([#17873](https://github.com/sveltejs/svelte/pull/17873))\n\n- perf: avoid re-traversing the effect tree after `$:` assignments ([#17848](https://github.com/sveltejs/svelte/pull/17848))\n\n- chore: simplify scheduling logic ([#17805](https://github.com/sveltejs/svelte/pull/17805))\n\n## 5.53.7\n\n### Patch Changes\n\n- fix: correctly add \\_\\_svelte_meta after else-if chains ([#17830](https://github.com/sveltejs/svelte/pull/17830))\n\n- perf: cache element interactivity and source line splitting in compiler ([#17839](https://github.com/sveltejs/svelte/pull/17839))\n\n- chore: avoid rescheduling effects during branch commit ([#17837](https://github.com/sveltejs/svelte/pull/17837))\n\n- perf: optimize CSS selector pruning ([#17846](https://github.com/sveltejs/svelte/pull/17846))\n\n- fix: preserve original boundary errors when keyed each rows are removed during async updates ([#17843](https://github.com/sveltejs/svelte/pull/17843))\n\n- perf: avoid O(n²) name scanning in scope `generate` and `unique` ([#17844](https://github.com/sveltejs/svelte/pull/17844))\n\n- fix: preserve each items that are needed by pending batches ([#17819](https://github.com/sveltejs/svelte/pull/17819))\n\n## 5.53.6\n\n### Patch Changes\n\n- perf: optimize parser hot paths for faster compilation ([#17811](https://github.com/sveltejs/svelte/pull/17811))\n\n- fix: `SvelteMap` incorrectly handles keys with `undefined` values ([#17826](https://github.com/sveltejs/svelte/pull/17826))\n\n- fix: SvelteURL `search` setter now returns the normalized value, matching native URL behavior ([#17828](https://github.com/sveltejs/svelte/pull/17828))\n\n- fix: visit synthetic value node during ssr ([#17824](https://github.com/sveltejs/svelte/pull/17824))\n\n- fix: always case insensitive event handlers during ssr ([#17822](https://github.com/sveltejs/svelte/pull/17822))\n\n- chore: more efficient effect scheduling ([#17808](https://github.com/sveltejs/svelte/pull/17808))\n\n- perf: optimize compiler analysis phase ([#17823](https://github.com/sveltejs/svelte/pull/17823))\n\n- fix: skip redundant batch.apply ([#17816](https://github.com/sveltejs/svelte/pull/17816))\n\n- chore: null out current_batch before committing branches ([#17809](https://github.com/sveltejs/svelte/pull/17809))\n\n## 5.53.5\n\n### Patch Changes\n\n- fix: escape `innerText` and `textContent` bindings of `contenteditable` ([`0df5abcae223058ceb95491470372065fb87951d`](https://github.com/sveltejs/svelte/commit/0df5abcae223058ceb95491470372065fb87951d))\n\n- fix: sanitize `transformError` values prior to embedding in HTML comments ([`0298e979371bb583855c9810db79a70a551d22b9`](https://github.com/sveltejs/svelte/commit/0298e979371bb583855c9810db79a70a551d22b9))\n\n## 5.53.4\n\n### Patch Changes\n\n- fix: set server context after async transformError ([#17799](https://github.com/sveltejs/svelte/pull/17799))\n\n- fix: hydrate if blocks correctly ([#17784](https://github.com/sveltejs/svelte/pull/17784))\n\n- fix: handle default parameters scope leaks ([#17788](https://github.com/sveltejs/svelte/pull/17788))\n\n- fix: prevent flushed effects from running again ([#17787](https://github.com/sveltejs/svelte/pull/17787))\n\n## 5.53.3\n\n### Patch Changes\n\n- fix: render `:catch` of `#await` block with correct key ([#17769](https://github.com/sveltejs/svelte/pull/17769))\n\n- chore: pin aria-query@5.3.1 ([#17772](https://github.com/sveltejs/svelte/pull/17772))\n\n- fix: make string coercion consistent to `toString` ([#17774](https://github.com/sveltejs/svelte/pull/17774))\n\n## 5.53.2\n\n### Patch Changes\n\n- fix: update expressions on server deriveds ([#17767](https://github.com/sveltejs/svelte/pull/17767))\n\n- fix: further obfuscate `node:crypto` import from overzealous static analysis ([#17763](https://github.com/sveltejs/svelte/pull/17763))\n\n## 5.53.1\n\n### Patch Changes\n\n- fix: handle shadowed function names correctly ([#17753](https://github.com/sveltejs/svelte/pull/17753))\n\n## 5.53.0\n\n### Minor Changes\n\n- feat: allow comments in tags ([#17671](https://github.com/sveltejs/svelte/pull/17671))\n\n- feat: allow error boundaries to work on the server ([#17672](https://github.com/sveltejs/svelte/pull/17672))\n\n### Patch Changes\n\n- fix: use TrustedHTML to test for customizable `<select>` support, where necessary ([#17743](https://github.com/sveltejs/svelte/pull/17743))\n\n- fix: ensure head effects are kept in the effect tree ([#17746](https://github.com/sveltejs/svelte/pull/17746))\n\n- chore: deactivate current_batch by default in unset_context ([#17738](https://github.com/sveltejs/svelte/pull/17738))\n\n## 5.52.0\n\n### Minor Changes\n\n- feat: support TrustedHTML in `{@html}` expressions ([#17701](https://github.com/sveltejs/svelte/pull/17701))\n\n### Patch Changes\n\n- fix: repair dynamic component truthy/falsy hydration mismatches ([#17737](https://github.com/sveltejs/svelte/pull/17737))\n\n- fix: re-run non-render-bound deriveds on the server ([#17674](https://github.com/sveltejs/svelte/pull/17674))\n\n## 5.51.5\n\n### Patch Changes\n\n- fix: check to make sure `svelte:element` tags are valid during SSR ([`73098bb26c6f06e7fd1b0746d817d2c5ee90755f`](https://github.com/sveltejs/svelte/commit/73098bb26c6f06e7fd1b0746d817d2c5ee90755f))\n\n- fix: misc option escaping and backwards compatibility ([#17741](https://github.com/sveltejs/svelte/pull/17741))\n\n- fix: strip event handlers during SSR ([`a0c7f289156e9fafaeaf5ca14af6c06fe9b9eae5`](https://github.com/sveltejs/svelte/commit/a0c7f289156e9fafaeaf5ca14af6c06fe9b9eae5))\n\n- fix: replace usage of `for in` with `for of Object.keys` ([`f89c7ddd7eebaa1ef3cc540400bec2c9140b330c`](https://github.com/sveltejs/svelte/commit/f89c7ddd7eebaa1ef3cc540400bec2c9140b330c))\n\n- fix: always escape option body in SSR ([`f7c80da18c215e3727c2a611b0b8744cc6e504c5`](https://github.com/sveltejs/svelte/commit/f7c80da18c215e3727c2a611b0b8744cc6e504c5))\n\n- chore: upgrade `devalue` ([#17739](https://github.com/sveltejs/svelte/pull/17739))\n\n## 5.51.4\n\n### Patch Changes\n\n- chore: proactively defer effects in pending boundary ([#17734](https://github.com/sveltejs/svelte/pull/17734))\n\n- fix: detect and error on non-idempotent each block keys in dev mode ([#17732](https://github.com/sveltejs/svelte/pull/17732))\n\n## 5.51.3\n\n### Patch Changes\n\n- fix: prevent event delegation logic conflicting between svelte instances ([#17728](https://github.com/sveltejs/svelte/pull/17728))\n\n- fix: treat CSS attribute selectors as case-insensitive for HTML enumerated attributes ([#17712](https://github.com/sveltejs/svelte/pull/17712))\n\n- fix: locate Rollup annontaion friendly to JS downgraders ([#17724](https://github.com/sveltejs/svelte/pull/17724))\n\n- fix: run effects in pending snippets ([#17719](https://github.com/sveltejs/svelte/pull/17719))\n\n## 5.51.2\n\n### Patch Changes\n\n- fix: take async into consideration for dev delegated handlers ([#17710](https://github.com/sveltejs/svelte/pull/17710))\n\n- fix: emit state_referenced_locally warning for non-destructured props ([#17708](https://github.com/sveltejs/svelte/pull/17708))\n\n## 5.51.1\n\n### Patch Changes\n\n- fix: don't crash on undefined `document.contentType` ([#17707](https://github.com/sveltejs/svelte/pull/17707))\n\n- fix: use symbols for encapsulated event delegation ([#17703](https://github.com/sveltejs/svelte/pull/17703))\n\n## 5.51.0\n\n### Minor Changes\n\n- feat: Use `TrustedTypes` for HTML handling where supported ([#16271](https://github.com/sveltejs/svelte/pull/16271))\n\n### Patch Changes\n\n- fix: sanitize template-literal-special-characters in SSR attribute values ([#17692](https://github.com/sveltejs/svelte/pull/17692))\n\n- fix: follow-up formatting in `print()` — flush block-level elements into separate sequences ([#17699](https://github.com/sveltejs/svelte/pull/17699))\n\n- fix: preserve delegated event handlers as long as one or more root components are using them ([#17695](https://github.com/sveltejs/svelte/pull/17695))\n\n## 5.50.3\n\n### Patch Changes\n\n- fix: take into account `nodeName` case sensitivity on XHTML pages ([#17689](https://github.com/sveltejs/svelte/pull/17689))\n\n- fix: render `multiple` and `selected` attributes as empty strings for XHTML compliance ([#17689](https://github.com/sveltejs/svelte/pull/17689))\n\n- fix: always lowercase HTML elements, for XHTML compliance ([#17664](https://github.com/sveltejs/svelte/pull/17664))\n\n- fix: freeze effects-inside-deriveds when disconnecting, unfreeze on reconnect ([#17682](https://github.com/sveltejs/svelte/pull/17682))\n\n- fix: propagate `$effect` errors to `<svelte:boundary>` ([#17684](https://github.com/sveltejs/svelte/pull/17684))\n\n## 5.50.2\n\n### Patch Changes\n\n- fix: resolve `effect_update_depth_exceeded` when using `bind:value` on `<select>` with derived state in legacy mode ([#17645](https://github.com/sveltejs/svelte/pull/17645))\n\n- fix: don't swallow `DOMException` when `media.play()` fails in `bind:paused` ([#17656](https://github.com/sveltejs/svelte/pull/17656))\n\n- chore: provide proper public type for `parseCss` result ([#17654](https://github.com/sveltejs/svelte/pull/17654))\n\n- fix: robustify blocker calculation ([#17676](https://github.com/sveltejs/svelte/pull/17676))\n\n- fix: reduce if block nesting ([#17662](https://github.com/sveltejs/svelte/pull/17662))\n\n## 5.50.1\n\n### Patch Changes\n\n- fix: render boolean attribute values as empty strings for XHTML compliance ([#17648](https://github.com/sveltejs/svelte/pull/17648))\n\n- fix: prevent async render tag hydration mismatches ([#17652](https://github.com/sveltejs/svelte/pull/17652))\n\n## 5.50.0\n\n### Minor Changes\n\n- feat: allow use of createContext when instantiating components programmatically ([#17575](https://github.com/sveltejs/svelte/pull/17575))\n\n### Patch Changes\n\n- fix: ensure infinite effect loops are cleared after flushing ([#17601](https://github.com/sveltejs/svelte/pull/17601))\n\n- fix: allow `{#key NaN}` ([#17642](https://github.com/sveltejs/svelte/pull/17642))\n\n- fix: detect store in each block expression regardless of AST shape ([#17636](https://github.com/sveltejs/svelte/pull/17636))\n\n- fix: treat `<menu>` like `<ul>`/`<ol>` for a11y role checks ([#17638](https://github.com/sveltejs/svelte/pull/17638))\n\n- fix: add vite-ignore comment inside dynamic crypto import ([#17623](https://github.com/sveltejs/svelte/pull/17623))\n\n- chore: wrap JSDoc URLs in `@see` and `@link` tags ([#17617](https://github.com/sveltejs/svelte/pull/17617))\n\n- fix: properly hydrate already-resolved async blocks ([#17641](https://github.com/sveltejs/svelte/pull/17641))\n\n- fix: emit `each_key_duplicate` error in production ([#16724](https://github.com/sveltejs/svelte/pull/16724))\n\n- fix: exit resolved async blocks on correct node when hydrating ([#17640](https://github.com/sveltejs/svelte/pull/17640))\n\n## 5.49.2\n\n### Patch Changes\n\n- chore: remove SvelteKit data attributes from elements.d.ts ([#17613](https://github.com/sveltejs/svelte/pull/17613))\n\n- fix: avoid erroneous async derived expressions for blocks ([#17604](https://github.com/sveltejs/svelte/pull/17604))\n\n- fix: avoid Cloudflare warnings about not having the \"node:crypto\" module ([#17612](https://github.com/sveltejs/svelte/pull/17612))\n\n- fix: reschedule effects inside unskipped branches ([#17604](https://github.com/sveltejs/svelte/pull/17604))\n\n## 5.49.1\n\n### Patch Changes\n\n- fix: merge consecutive large text nodes ([#17587](https://github.com/sveltejs/svelte/pull/17587))\n\n- fix: only create async functions in SSR output when necessary ([#17593](https://github.com/sveltejs/svelte/pull/17593))\n\n- fix: properly separate multiline html blocks from each other in `print()` ([#17319](https://github.com/sveltejs/svelte/pull/17319))\n\n- fix: prevent unhandled exceptions arising from dangling promises in <script> ([#17591](https://github.com/sveltejs/svelte/pull/17591))\n\n## 5.49.0\n\n### Minor Changes\n\n- feat: allow passing `ShadowRootInit` object to custom element `shadow` option ([#17088](https://github.com/sveltejs/svelte/pull/17088))\n\n### Patch Changes\n\n- fix: throw for unset `createContext` get on the server ([#17580](https://github.com/sveltejs/svelte/pull/17580))\n\n- fix: reset effects inside skipped branches ([#17581](https://github.com/sveltejs/svelte/pull/17581))\n\n- fix: preserve old dependencies when updating reaction inside fork ([#17579](https://github.com/sveltejs/svelte/pull/17579))\n\n- fix: more conservative assignment_value_stale warnings ([#17574](https://github.com/sveltejs/svelte/pull/17574))\n\n- fix: disregard `popover` elements when determining whether an element has content ([#17367](https://github.com/sveltejs/svelte/pull/17367))\n\n- fix: fire introstart/outrostart events after delay, if specified ([#17567](https://github.com/sveltejs/svelte/pull/17567))\n\n- fix: increment signal versions when discarding forks ([#17577](https://github.com/sveltejs/svelte/pull/17577))\n\n## 5.48.5\n\n### Patch Changes\n\n- fix: run boundary `onerror` callbacks in a microtask, in case they result in the boundary's destruction ([#17561](https://github.com/sveltejs/svelte/pull/17561))\n\n- fix: prevent unintended exports from namespaces ([#17562](https://github.com/sveltejs/svelte/pull/17562))\n\n- fix: each block breaking with effects interspersed among items ([#17550](https://github.com/sveltejs/svelte/pull/17550))\n\n## 5.48.4\n\n### Patch Changes\n\n- fix: avoid duplicating escaped characters in CSS AST ([#17554](https://github.com/sveltejs/svelte/pull/17554))\n\n## 5.48.3\n\n### Patch Changes\n\n- fix: hydration failing with settled async blocks ([#17539](https://github.com/sveltejs/svelte/pull/17539))\n\n- fix: add pointer and touch events to a11y_no_static_element_interactions warning ([#17551](https://github.com/sveltejs/svelte/pull/17551))\n\n- fix: handle false dynamic components in SSR ([#17542](https://github.com/sveltejs/svelte/pull/17542))\n\n- fix: avoid unnecessary block effect re-runs after async work completes ([#17535](https://github.com/sveltejs/svelte/pull/17535))\n\n- fix: avoid using dev-mode array.includes wrapper on internal array checks ([#17536](https://github.com/sveltejs/svelte/pull/17536))\n\n## 5.48.2\n\n### Patch Changes\n\n- fix: export `wait` function from internal client index ([#17530](https://github.com/sveltejs/svelte/pull/17530))\n\n## 5.48.1\n\n### Patch Changes\n\n- fix: hoist snippets above const in same block ([#17516](https://github.com/sveltejs/svelte/pull/17516))\n\n- fix: properly hydrate await in `{@html}` ([#17528](https://github.com/sveltejs/svelte/pull/17528))\n\n- fix: batch resolution of async work ([#17511](https://github.com/sveltejs/svelte/pull/17511))\n\n- fix: account for empty statements when visiting in transform async ([#17524](https://github.com/sveltejs/svelte/pull/17524))\n\n- fix: avoid async overhead for already settled promises ([#17461](https://github.com/sveltejs/svelte/pull/17461))\n\n- fix: better code generation for const tags with async dependencies ([#17518](https://github.com/sveltejs/svelte/pull/17518))\n\n## 5.48.0\n\n### Minor Changes\n\n- feat: export `parseCss` from `svelte/compiler` ([#17496](https://github.com/sveltejs/svelte/pull/17496))\n\n### Patch Changes\n\n- fix: handle non-string values in `svelte:element` `this` attribute ([#17499](https://github.com/sveltejs/svelte/pull/17499))\n\n- fix: faster deduplication of dependencies ([#17503](https://github.com/sveltejs/svelte/pull/17503))\n\n## 5.47.1\n\n### Patch Changes\n\n- fix: trigger `selectedcontent` reactivity ([#17486](https://github.com/sveltejs/svelte/pull/17486))\n\n## 5.47.0\n\n### Minor Changes\n\n- feat: customizable `<select>` elements ([#17429](https://github.com/sveltejs/svelte/pull/17429))\n\n### Patch Changes\n\n- fix: mark subtree of svelte boundary as dynamic ([#17468](https://github.com/sveltejs/svelte/pull/17468))\n\n- fix: don't reset static elements with debug/snippets ([#17477](https://github.com/sveltejs/svelte/pull/17477))\n\n## 5.46.4\n\n### Patch Changes\n\n- fix: use `devalue.uneval` to serialize `hydratable` keys ([`ef81048e238844b729942441541d6dcfe6c8ccca`](https://github.com/sveltejs/svelte/commit/ef81048e238844b729942441541d6dcfe6c8ccca))\n\n## 5.46.3\n\n### Patch Changes\n\n- fix: reconnect clean deriveds when they are read in a reactive context ([#17362](https://github.com/sveltejs/svelte/pull/17362))\n\n- fix: don't transform references of function declarations in legacy mode ([#17431](https://github.com/sveltejs/svelte/pull/17431))\n\n- fix: notify deriveds of changes to sources inside forks ([#17437](https://github.com/sveltejs/svelte/pull/17437))\n\n- fix: always reconnect deriveds in get, when appropriate ([#17451](https://github.com/sveltejs/svelte/pull/17451))\n\n- fix: prevent derives without dependencies from ever re-running ([`286b40c4526ce9970cb81ddd5e65b93b722fe468`](https://github.com/sveltejs/svelte/commit/286b40c4526ce9970cb81ddd5e65b93b722fe468))\n\n- fix: correctly update writable deriveds inside forks ([#17437](https://github.com/sveltejs/svelte/pull/17437))\n\n- fix: remove `$inspect` calls after await expressions when compiling for production server code ([#17407](https://github.com/sveltejs/svelte/pull/17407))\n\n- fix: clear batch between runs ([#17424](https://github.com/sveltejs/svelte/pull/17424))\n\n- fix: adjust `loc` property of `Program` nodes created from `<script>` elements ([#17428](https://github.com/sveltejs/svelte/pull/17428))\n\n- fix: don't revert source to UNINITIALIZED state when time travelling ([#17409](https://github.com/sveltejs/svelte/pull/17409))\n\n## 5.46.2\n\n### Notice\n\nNot published due to CI issue\n\n## 5.46.1\n\n### Patch Changes\n\n- fix: type `currentTarget` in `on` function ([#17370](https://github.com/sveltejs/svelte/pull/17370))\n\n- fix: skip static optimisation for stateless deriveds after `await` ([#17389](https://github.com/sveltejs/svelte/pull/17389))\n\n- fix: prevent infinite loop when HMRing a component with an `await` ([#17380](https://github.com/sveltejs/svelte/pull/17380))\n\n## 5.46.0\n\n### Minor Changes\n\n- feat: Add `csp` option to `render(...)`, and emit hashes when using `hydratable` ([#17338](https://github.com/sveltejs/svelte/pull/17338))\n\n## 5.45.10\n\n### Patch Changes\n\n- fix: race condition when importing `AsyncLocalStorage` ([#17350](https://github.com/sveltejs/svelte/pull/17350))\n\n## 5.45.9\n\n### Patch Changes\n\n- fix: correctly reschedule deferred effects when reviving a batch after async work ([#17332](https://github.com/sveltejs/svelte/pull/17332))\n\n- fix: correctly print `!doctype` during `print` ([#17341](https://github.com/sveltejs/svelte/pull/17341))\n\n## 5.45.8\n\n### Patch Changes\n\n- fix: set AST `root.start` to `0` and `root.end` to `template.length` ([#17125](https://github.com/sveltejs/svelte/pull/17125))\n\n- fix: prevent erroneous `state_referenced_locally` warnings on prop fallbacks ([#17329](https://github.com/sveltejs/svelte/pull/17329))\n\n## 5.45.7\n\n### Patch Changes\n\n- fix: Add `<textarea wrap=\"off\">` as a valid attribute value ([#17326](https://github.com/sveltejs/svelte/pull/17326))\n\n- fix: add more css selectors to `print()` ([#17330](https://github.com/sveltejs/svelte/pull/17330))\n\n- fix: don't crash on `hydratable` serialization failure ([#17315](https://github.com/sveltejs/svelte/pull/17315))\n\n## 5.45.6\n\n### Patch Changes\n\n- fix: don't issue a11y warning for `<video>` without captions if it has no `src` ([#17311](https://github.com/sveltejs/svelte/pull/17311))\n\n- fix: add `srcObject` to permitted `<audio>`/`<video>` attributes ([#17310](https://github.com/sveltejs/svelte/pull/17310))\n\n## 5.45.5\n\n### Patch Changes\n\n- fix: correctly reconcile each blocks after outroing branches are resumed ([#17258](https://github.com/sveltejs/svelte/pull/17258))\n\n- fix: destroy each items after siblings are resumed ([#17258](https://github.com/sveltejs/svelte/pull/17258))\n\n## 5.45.4\n\n### Patch Changes\n\n- chore: move DOM-related effect properties to `effect.nodes` ([#17293](https://github.com/sveltejs/svelte/pull/17293))\n\n- fix: allow `$props.id()` to occur after an `await` ([#17285](https://github.com/sveltejs/svelte/pull/17285))\n\n- fix: keep reactions up to date even when read outside of effect ([#17295](https://github.com/sveltejs/svelte/pull/17295))\n\n## 5.45.3\n\n### Patch Changes\n\n- add props to state_referenced_locally ([#17266](https://github.com/sveltejs/svelte/pull/17266))\n\n- fix: preserve node locations for better sourcemaps ([#17269](https://github.com/sveltejs/svelte/pull/17269))\n\n- fix: handle cross-realm Promises in `hydratable` ([#17284](https://github.com/sveltejs/svelte/pull/17284))\n\n## 5.45.2\n\n### Patch Changes\n\n- fix: array destructuring after await ([#17254](https://github.com/sveltejs/svelte/pull/17254))\n\n- fix: throw on invalid `{@tag}`s ([#17256](https://github.com/sveltejs/svelte/pull/17256))\n\n## 5.45.1\n\n### Patch Changes\n\n- fix: link offscreen items and last effect in each block correctly ([#17240](https://github.com/sveltejs/svelte/pull/17240))\n\n## 5.45.0\n\n### Minor Changes\n\n- feat: add `print(...)` function ([#16188](https://github.com/sveltejs/svelte/pull/16188))\n\n## 5.44.1\n\n### Patch Changes\n\n- fix: await blockers before initialising const ([#17226](https://github.com/sveltejs/svelte/pull/17226))\n\n- fix: link offscreen items and last effect in each block correctly ([#17244](https://github.com/sveltejs/svelte/pull/17244))\n\n- fix: generate correct code for simple destructurings ([#17237](https://github.com/sveltejs/svelte/pull/17237))\n\n- fix: ensure each block animations don't mess with transitions ([#17238](https://github.com/sveltejs/svelte/pull/17238))\n\n## 5.44.0\n\n### Minor Changes\n\n- feat: `hydratable` API ([#17154](https://github.com/sveltejs/svelte/pull/17154))\n\n## 5.43.15\n\n### Patch Changes\n\n- fix: don't execute attachments and attribute effects eagerly ([#17208](https://github.com/sveltejs/svelte/pull/17208))\n\n- chore: lift \"flushSync cannot be called in effects\" restriction ([#17139](https://github.com/sveltejs/svelte/pull/17139))\n\n- fix: store forked derived values ([#17212](https://github.com/sveltejs/svelte/pull/17212))\n\n## 5.43.14\n\n### Patch Changes\n\n- fix: correctly migrate named self closing slots ([#17199](https://github.com/sveltejs/svelte/pull/17199))\n\n- fix: error at compile time instead of at runtime on await expressions inside bindings/transitions/animations/attachments ([#17198](https://github.com/sveltejs/svelte/pull/17198))\n\n- fix: take async blockers into account for bindings/transitions/animations/attachments ([#17198](https://github.com/sveltejs/svelte/pull/17198))\n\n## 5.43.13\n\n### Patch Changes\n\n- fix: don't set derived values during time traveling ([#17200](https://github.com/sveltejs/svelte/pull/17200))\n\n## 5.43.12\n\n### Patch Changes\n\n- fix: maintain correct linked list of effects when updating each blocks ([#17191](https://github.com/sveltejs/svelte/pull/17191))\n\n## 5.43.11\n\n### Patch Changes\n\n- perf: don't use tracing overeager during dev ([#17183](https://github.com/sveltejs/svelte/pull/17183))\n\n- fix: don't cancel transition of already outroing elements ([#17186](https://github.com/sveltejs/svelte/pull/17186))\n\n## 5.43.10\n\n### Patch Changes\n\n- fix: avoid other batches running with queued root effects of main batch ([#17145](https://github.com/sveltejs/svelte/pull/17145))\n\n## 5.43.9\n\n### Patch Changes\n\n- fix: correctly handle functions when determining async blockers ([#17137](https://github.com/sveltejs/svelte/pull/17137))\n\n- fix: keep deriveds reactive after their original parent effect was destroyed ([#17171](https://github.com/sveltejs/svelte/pull/17171))\n\n- fix: ensure eager effects don't break reactions chain ([#17138](https://github.com/sveltejs/svelte/pull/17138))\n\n- fix: ensure async `@const` in boundary hydrates correctly ([#17165](https://github.com/sveltejs/svelte/pull/17165))\n\n- fix: take blockers into account when creating `#await` blocks ([#17137](https://github.com/sveltejs/svelte/pull/17137))\n\n- fix: parallelize async `@const`s in the template ([#17165](https://github.com/sveltejs/svelte/pull/17165))\n\n## 5.43.8\n\n### Patch Changes\n\n- fix: each block losing reactivity when items removed while promise pending ([#17150](https://github.com/sveltejs/svelte/pull/17150))\n\n## 5.43.7\n\n### Patch Changes\n\n- fix: properly defer document title until async work is complete ([#17158](https://github.com/sveltejs/svelte/pull/17158))\n\n- fix: ensure deferred effects can be rescheduled later on ([#17147](https://github.com/sveltejs/svelte/pull/17147))\n\n- fix: take blockers of components into account ([#17153](https://github.com/sveltejs/svelte/pull/17153))\n\n## 5.43.6\n\n### Patch Changes\n\n- fix: don't deactivate other batches ([#17132](https://github.com/sveltejs/svelte/pull/17132))\n\n## 5.43.5\n\n### Patch Changes\n\n- fix: ensure async static props/attributes are awaited ([#17120](https://github.com/sveltejs/svelte/pull/17120))\n\n- fix: wait on dependencies of async bindings ([#17120](https://github.com/sveltejs/svelte/pull/17120))\n\n- fix: await dependencies of style directives ([#17120](https://github.com/sveltejs/svelte/pull/17120))\n\n## 5.43.4\n\n### Patch Changes\n\n- chore: simplify connection/disconnection logic ([#17105](https://github.com/sveltejs/svelte/pull/17105))\n\n- fix: reconnect deriveds to effect tree when time-travelling ([#17105](https://github.com/sveltejs/svelte/pull/17105))\n\n## 5.43.3\n\n### Patch Changes\n\n- fix: ensure fork always accesses correct values ([#17098](https://github.com/sveltejs/svelte/pull/17098))\n\n- fix: change title only after any pending work has completed ([#17061](https://github.com/sveltejs/svelte/pull/17061))\n\n- fix: preserve symbols when creating derived rest properties ([#17096](https://github.com/sveltejs/svelte/pull/17096))\n\n## 5.43.2\n\n### Patch Changes\n\n- fix: treat each blocks with async dependencies as uncontrolled ([#17077](https://github.com/sveltejs/svelte/pull/17077))\n\n## 5.43.1\n\n### Patch Changes\n\n- fix: transform `$bindable` after `await` expressions ([#17066](https://github.com/sveltejs/svelte/pull/17066))\n\n## 5.43.0\n\n### Minor Changes\n\n- feat: out-of-order rendering ([#17038](https://github.com/sveltejs/svelte/pull/17038))\n\n### Patch Changes\n\n- fix: settle batch after DOM updates ([#17054](https://github.com/sveltejs/svelte/pull/17054))\n\n## 5.42.3\n\n### Patch Changes\n\n- fix: handle `<svelte:head>` rendered asynchronously ([#17052](https://github.com/sveltejs/svelte/pull/17052))\n\n- fix: don't restore batch in `#await` ([#17051](https://github.com/sveltejs/svelte/pull/17051))\n\n## 5.42.2\n\n### Patch Changes\n\n- fix: better error message for global variable assignments ([#17036](https://github.com/sveltejs/svelte/pull/17036))\n\n- chore: tweak memoizer logic ([#17042](https://github.com/sveltejs/svelte/pull/17042))\n\n## 5.42.1\n\n### Patch Changes\n\n- fix: ignore fork `discard()` after `commit()` ([#17034](https://github.com/sveltejs/svelte/pull/17034))\n\n## 5.42.0\n\n### Minor Changes\n\n- feat: experimental `fork` API ([#17004](https://github.com/sveltejs/svelte/pull/17004))\n\n### Patch Changes\n\n- fix: always allow `setContext` before first await in component ([#17031](https://github.com/sveltejs/svelte/pull/17031))\n\n- fix: less confusing names for inspect errors ([#17026](https://github.com/sveltejs/svelte/pull/17026))\n\n## 5.41.4\n\n### Patch Changes\n\n- fix: take into account static blocks when determining transition locality ([#17018](https://github.com/sveltejs/svelte/pull/17018))\n\n- fix: coordinate mount of snippets with await expressions ([#17021](https://github.com/sveltejs/svelte/pull/17021))\n\n- fix: better optimization of await expressions ([#17025](https://github.com/sveltejs/svelte/pull/17025))\n\n- fix: flush pending changes after rendering `failed` snippet ([#16995](https://github.com/sveltejs/svelte/pull/16995))\n\n## 5.41.3\n\n### Patch Changes\n\n- chore: exclude vite optimized deps from stack traces ([#17008](https://github.com/sveltejs/svelte/pull/17008))\n\n- perf: skip repeatedly traversing the same derived ([#17016](https://github.com/sveltejs/svelte/pull/17016))\n\n## 5.41.2\n\n### Patch Changes\n\n- fix: keep batches alive until all async work is complete ([#16971](https://github.com/sveltejs/svelte/pull/16971))\n\n- fix: don't preserve reactivity context across function boundaries ([#17002](https://github.com/sveltejs/svelte/pull/17002))\n\n- fix: make `$inspect` logs come from the callsite ([#17001](https://github.com/sveltejs/svelte/pull/17001))\n\n- fix: ensure guards (eg. if, each, key) run before their contents ([#16930](https://github.com/sveltejs/svelte/pull/16930))\n\n## 5.41.1\n\n### Patch Changes\n\n- fix: place `let:` declarations before `{@const}` declarations ([#16985](https://github.com/sveltejs/svelte/pull/16985))\n\n- fix: improve `each_key_without_as` error ([#16983](https://github.com/sveltejs/svelte/pull/16983))\n\n- chore: centralise branch management ([#16977](https://github.com/sveltejs/svelte/pull/16977))\n\n## 5.41.0\n\n### Minor Changes\n\n- feat: add `$state.eager(value)` rune ([#16849](https://github.com/sveltejs/svelte/pull/16849))\n\n### Patch Changes\n\n- fix: preserve `<select>` state while focused ([#16958](https://github.com/sveltejs/svelte/pull/16958))\n\n- chore: run boundary async effects in the context of the current batch ([#16968](https://github.com/sveltejs/svelte/pull/16968))\n\n- fix: error if `each` block has `key` but no `as` clause ([#16966](https://github.com/sveltejs/svelte/pull/16966))\n\n## 5.40.2\n\n### Patch Changes\n\n- fix: add hydration markers in `pending` branch of SSR boundary ([#16965](https://github.com/sveltejs/svelte/pull/16965))\n\n## 5.40.1\n\n### Patch Changes\n\n- chore: Remove sync-in-async warning for server rendering ([#16949](https://github.com/sveltejs/svelte/pull/16949))\n\n## 5.40.0\n\n### Minor Changes\n\n- feat: add `createContext` utility for type-safe context ([#16948](https://github.com/sveltejs/svelte/pull/16948))\n\n### Patch Changes\n\n- chore: simplify `batch.apply()` ([#16945](https://github.com/sveltejs/svelte/pull/16945))\n\n- fix: don't rerun async effects unnecessarily ([#16944](https://github.com/sveltejs/svelte/pull/16944))\n\n## 5.39.13\n\n### Patch Changes\n\n- fix: add missing type for `fr` attribute for `radialGradient` tags in svg ([#16943](https://github.com/sveltejs/svelte/pull/16943))\n\n- fix: unset context on stale promises ([#16935](https://github.com/sveltejs/svelte/pull/16935))\n\n## 5.39.12\n\n### Patch Changes\n\n- fix: better input cursor restoration for `bind:value` ([#16925](https://github.com/sveltejs/svelte/pull/16925))\n\n- fix: track the user's getter of `bind:this` ([#16916](https://github.com/sveltejs/svelte/pull/16916))\n\n- fix: generate correct SSR code for the case where `pending` is an attribute ([#16919](https://github.com/sveltejs/svelte/pull/16919))\n\n- fix: generate correct code for `each` blocks with async body ([#16923](https://github.com/sveltejs/svelte/pull/16923))\n\n## 5.39.11\n\n### Patch Changes\n\n- fix: flush batches whenever an async value resolves ([#16912](https://github.com/sveltejs/svelte/pull/16912))\n\n## 5.39.10\n\n### Patch Changes\n\n- fix: hydrate each blocks inside element correctly ([#16908](https://github.com/sveltejs/svelte/pull/16908))\n\n- fix: allow await in if block consequent and alternate ([#16890](https://github.com/sveltejs/svelte/pull/16890))\n\n- fix: don't replace rest props with `$$props` for excluded props ([#16898](https://github.com/sveltejs/svelte/pull/16898))\n\n- fix: correctly transform `$derived` private fields on server ([#16894](https://github.com/sveltejs/svelte/pull/16894))\n\n- fix: add `UNKNOWN` evaluation value before breaking for `binding.initial===SnippetBlock` ([#16910](https://github.com/sveltejs/svelte/pull/16910))\n\n## 5.39.9\n\n### Patch Changes\n\n- fix: flush when pending boundaries resolve ([#16897](https://github.com/sveltejs/svelte/pull/16897))\n\n## 5.39.8\n\n### Patch Changes\n\n- fix: check boundary `pending` attribute at runtime on server ([#16855](https://github.com/sveltejs/svelte/pull/16855))\n\n- fix: preserve tuple type in `$state.snapshot` ([#16864](https://github.com/sveltejs/svelte/pull/16864))\n\n- fix: allow await in svelte:boundary without pending ([#16857](https://github.com/sveltejs/svelte/pull/16857))\n\n- fix: update `bind:checked` error message to clarify usage with radio inputs ([#16874](https://github.com/sveltejs/svelte/pull/16874))\n\n## 5.39.7\n\n### Patch Changes\n\n- chore: simplify batch logic ([#16847](https://github.com/sveltejs/svelte/pull/16847))\n\n- fix: rebase pending batches when other batches are committed ([#16866](https://github.com/sveltejs/svelte/pull/16866))\n\n- fix: wrap async `children` in `$$renderer.async` ([#16862](https://github.com/sveltejs/svelte/pull/16862))\n\n- fix: silence label warning for buttons and anchor tags with title attributes ([#16872](https://github.com/sveltejs/svelte/pull/16872))\n\n- fix: coerce nullish `<title>` to empty string ([#16863](https://github.com/sveltejs/svelte/pull/16863))\n\n## 5.39.6\n\n### Patch Changes\n\n- fix: depend on reads of deriveds created within reaction (async mode) ([#16823](https://github.com/sveltejs/svelte/pull/16823))\n\n- fix: SSR regression of processing attributes of `<select>` and `<option>` ([#16821](https://github.com/sveltejs/svelte/pull/16821))\n\n- fix: async `class:` + spread attributes were compiled into sync server-side code ([#16834](https://github.com/sveltejs/svelte/pull/16834))\n\n- fix: ensure tick resolves within a macrotask ([#16825](https://github.com/sveltejs/svelte/pull/16825))\n\n## 5.39.5\n\n### Patch Changes\n\n- fix: allow `{@html await ...}` and snippets with async content on the server ([#16817](https://github.com/sveltejs/svelte/pull/16817))\n\n- fix: use nginx SSI-compatible comments for `$props.id()` ([#16820](https://github.com/sveltejs/svelte/pull/16820))\n\n## 5.39.4\n\n### Patch Changes\n\n- fix: restore hydration state after `await` in `<script>` ([#16806](https://github.com/sveltejs/svelte/pull/16806))\n\n## 5.39.3\n\n### Patch Changes\n\n- fix: remove outer hydration markers ([#16800](https://github.com/sveltejs/svelte/pull/16800))\n\n- fix: async hydration ([#16797](https://github.com/sveltejs/svelte/pull/16797))\n\n## 5.39.2\n\n### Patch Changes\n\n- fix: preserve SSR context when block expressions contain `await` ([#16791](https://github.com/sveltejs/svelte/pull/16791))\n\n- chore: bump some devDependencies ([#16787](https://github.com/sveltejs/svelte/pull/16787))\n\n## 5.39.1\n\n### Patch Changes\n\n- fix: issue `state_proxy_unmount` warning when unmounting a state proxy ([#16747](https://github.com/sveltejs/svelte/pull/16747))\n\n- fix: add `then` to class component `render` output ([#16783](https://github.com/sveltejs/svelte/pull/16783))\n\n## 5.39.0\n\n### Minor Changes\n\n- feat: experimental async SSR ([#16748](https://github.com/sveltejs/svelte/pull/16748))\n\n### Patch Changes\n\n- fix: correctly SSR hidden=\"until-found\" ([#16773](https://github.com/sveltejs/svelte/pull/16773))\n\n## 5.38.10\n\n### Patch Changes\n\n- fix: flush effects scheduled during boundary's pending phase ([#16738](https://github.com/sveltejs/svelte/pull/16738))\n\n## 5.38.9\n\n### Patch Changes\n\n- chore: generate CSS hash using the filename ([#16740](https://github.com/sveltejs/svelte/pull/16740))\n\n- fix: correctly analyze `<object.property>` components ([#16711](https://github.com/sveltejs/svelte/pull/16711))\n\n- fix: clean up scheduling system ([#16741](https://github.com/sveltejs/svelte/pull/16741))\n\n- fix: transform input defaults from spread ([#16481](https://github.com/sveltejs/svelte/pull/16481))\n\n- fix: don't destroy contents of `svelte:boundary` unless the boundary is an error boundary ([#16746](https://github.com/sveltejs/svelte/pull/16746))\n\n## 5.38.8\n\n### Patch Changes\n\n- fix: send `$effect.pending` count to the correct boundary ([#16732](https://github.com/sveltejs/svelte/pull/16732))\n\n## 5.38.7\n\n### Patch Changes\n\n- fix: replace `undefined` with `void(0)` in CallExpressions ([#16693](https://github.com/sveltejs/svelte/pull/16693))\n\n- fix: ensure batch exists when resetting a failed boundary ([#16698](https://github.com/sveltejs/svelte/pull/16698))\n\n- fix: place store setup inside async body ([#16687](https://github.com/sveltejs/svelte/pull/16687))\n\n## 5.38.6\n\n### Patch Changes\n\n- fix: don't fail on `flushSync` while flushing effects ([#16674](https://github.com/sveltejs/svelte/pull/16674))\n\n## 5.38.5\n\n### Patch Changes\n\n- fix: ensure async deriveds always get dependencies from thennable ([#16672](https://github.com/sveltejs/svelte/pull/16672))\n\n## 5.38.4\n\n### Patch Changes\n\n- fix: place instance-level snippets inside async body ([#16666](https://github.com/sveltejs/svelte/pull/16666))\n\n- fix: Add check for builtin custom elements in `set_custom_element_data` ([#16592](https://github.com/sveltejs/svelte/pull/16592))\n\n- fix: restore batch along with effect context ([#16668](https://github.com/sveltejs/svelte/pull/16668))\n\n- fix: wait until changes propagate before updating input selection state ([#16649](https://github.com/sveltejs/svelte/pull/16649))\n\n- fix: add \"Accept-CH\" as valid value for `http-equiv` ([#16671](https://github.com/sveltejs/svelte/pull/16671))\n\n## 5.38.3\n\n### Patch Changes\n\n- fix: ensure correct order of template effect values ([#16655](https://github.com/sveltejs/svelte/pull/16655))\n\n- fix: allow async `{@const}` in more places ([#16643](https://github.com/sveltejs/svelte/pull/16643))\n\n- fix: properly catch top level await errors ([#16619](https://github.com/sveltejs/svelte/pull/16619))\n\n- perf: prune effects without dependencies ([#16625](https://github.com/sveltejs/svelte/pull/16625))\n\n- fix: only emit `for_await_track_reactivity_loss` in async mode ([#16644](https://github.com/sveltejs/svelte/pull/16644))\n\n## 5.38.2\n\n### Patch Changes\n\n- perf: run blocks eagerly during flush instead of aborting ([#16631](https://github.com/sveltejs/svelte/pull/16631))\n\n- fix: don't clone non-proxies in `$inspect` ([#16617](https://github.com/sveltejs/svelte/pull/16617))\n\n- fix: avoid recursion error when tagging circular references ([#16622](https://github.com/sveltejs/svelte/pull/16622))\n\n## 5.38.1\n\n### Patch Changes\n\n- fix: wrap `abort` in `without_reactive_context` ([#16570](https://github.com/sveltejs/svelte/pull/16570))\n\n- fix: add `hint` as a possible value for `popover` attribute ([#16581](https://github.com/sveltejs/svelte/pull/16581))\n\n- fix: skip effects inside dynamic component that is about to be destroyed ([#16601](https://github.com/sveltejs/svelte/pull/16601))\n\n## 5.38.0\n\n### Minor Changes\n\n- feat: allow `await` inside `@const` declarations ([#16542](https://github.com/sveltejs/svelte/pull/16542))\n\n### Patch Changes\n\n- fix: remount at any hydration error ([#16248](https://github.com/sveltejs/svelte/pull/16248))\n\n- chore: emit `await_reactivity_loss` in `for await` loops ([#16521](https://github.com/sveltejs/svelte/pull/16521))\n\n- fix: emit `snippet_invalid_export` instead of `undefined_export` for exported snippets ([#16539](https://github.com/sveltejs/svelte/pull/16539))\n\n## 5.37.3\n\n### Patch Changes\n\n- fix: reset attribute cache after setting corresponding property ([#16543](https://github.com/sveltejs/svelte/pull/16543))\n\n## 5.37.2\n\n### Patch Changes\n\n- fix: double event processing in firefox due to event object being garbage collected ([#16527](https://github.com/sveltejs/svelte/pull/16527))\n\n- fix: add bindable dimension attributes types to SVG and MathML elements ([#16525](https://github.com/sveltejs/svelte/pull/16525))\n\n- fix: correctly differentiate static fields before emitting `duplicate_class_field` ([#16526](https://github.com/sveltejs/svelte/pull/16526))\n\n- fix: prevent last_propagated_event from being DCE'd ([#16538](https://github.com/sveltejs/svelte/pull/16538))\n\n## 5.37.1\n\n### Patch Changes\n\n- chore: remove some todos ([#16515](https://github.com/sveltejs/svelte/pull/16515))\n\n- fix: allow await expressions inside `{#await ...}` argument ([#16514](https://github.com/sveltejs/svelte/pull/16514))\n\n- fix: `append_styles` in an effect to make them available on mount ([#16509](https://github.com/sveltejs/svelte/pull/16509))\n\n- chore: remove `parser.template_untrimmed` ([#16511](https://github.com/sveltejs/svelte/pull/16511))\n\n- fix: always inject styles when compiling as a custom element ([#16509](https://github.com/sveltejs/svelte/pull/16509))\n\n## 5.37.0\n\n### Minor Changes\n\n- feat: ignore component options in `compileModule` ([#16362](https://github.com/sveltejs/svelte/pull/16362))\n\n### Patch Changes\n\n- fix: always mark props as stateful ([#16504](https://github.com/sveltejs/svelte/pull/16504))\n\n## 5.36.17\n\n### Patch Changes\n\n- fix: throw on duplicate class field declarations ([#16502](https://github.com/sveltejs/svelte/pull/16502))\n\n- fix: add types for `part` attribute to svg attributes ([#16499](https://github.com/sveltejs/svelte/pull/16499))\n\n## 5.36.16\n\n### Patch Changes\n\n- fix: don't update a focused input with values from its own past ([#16491](https://github.com/sveltejs/svelte/pull/16491))\n\n- fix: don't destroy effect roots created inside of deriveds ([#16492](https://github.com/sveltejs/svelte/pull/16492))\n\n## 5.36.15\n\n### Patch Changes\n\n- fix: preserve dirty status of deferred effects ([#16487](https://github.com/sveltejs/svelte/pull/16487))\n\n## 5.36.14\n\n### Patch Changes\n\n- fix: keep input in sync when binding updated via effect ([#16482](https://github.com/sveltejs/svelte/pull/16482))\n\n- fix: rename form accept-charset attribute ([#16478](https://github.com/sveltejs/svelte/pull/16478))\n\n- fix: prevent infinite async loop ([#16482](https://github.com/sveltejs/svelte/pull/16482))\n\n- fix: exclude derived writes from effect abort and rescheduling ([#16482](https://github.com/sveltejs/svelte/pull/16482))\n\n## 5.36.13\n\n### Patch Changes\n\n- fix: ensure subscriptions are picked up correctly by deriveds ([#16466](https://github.com/sveltejs/svelte/pull/16466))\n\n## 5.36.12\n\n### Patch Changes\n\n- chore: move `capture_signals` to legacy module ([#16456](https://github.com/sveltejs/svelte/pull/16456))\n\n## 5.36.11\n\n### Patch Changes\n\n- fix: always mark reactions of deriveds ([#16457](https://github.com/sveltejs/svelte/pull/16457))\n\n- fix: add labels to `@const` tags and props ([#16454](https://github.com/sveltejs/svelte/pull/16454))\n\n- fix: tag stores for `$inspect.trace()` ([#16452](https://github.com/sveltejs/svelte/pull/16452))\n\n## 5.36.10\n\n### Patch Changes\n\n- fix: prevent batches from getting intertwined ([#16446](https://github.com/sveltejs/svelte/pull/16446))\n\n## 5.36.9\n\n### Patch Changes\n\n- fix: don't reexecute derived with no dependencies on teardown ([#16438](https://github.com/sveltejs/svelte/pull/16438))\n\n- fix: disallow `export { foo as default }` in `<script module>` ([#16447](https://github.com/sveltejs/svelte/pull/16447))\n\n- fix: move ownership validation into async component body ([#16449](https://github.com/sveltejs/svelte/pull/16449))\n\n- fix: allow async destructured deriveds ([#16444](https://github.com/sveltejs/svelte/pull/16444))\n\n- fix: move store setup/cleanup outside of async component body ([#16443](https://github.com/sveltejs/svelte/pull/16443))\n\n## 5.36.8\n\n### Patch Changes\n\n- fix: keep effect in the graph if it has an abort controller ([#16430](https://github.com/sveltejs/svelte/pull/16430))\n\n- chore: Switch `payload.out` to an array ([#16428](https://github.com/sveltejs/svelte/pull/16428))\n\n## 5.36.7\n\n### Patch Changes\n\n- fix: allow instrinsic `<svelte:...>` elements to inherit from `SvelteHTMLElements` ([#16424](https://github.com/sveltejs/svelte/pull/16424))\n\n## 5.36.6\n\n### Patch Changes\n\n- fix: delegate functions with shadowed variables if declared locally ([#16417](https://github.com/sveltejs/svelte/pull/16417))\n\n- fix: handle error in correct boundary after reset ([#16171](https://github.com/sveltejs/svelte/pull/16171))\n\n- fix: make `<svelte:boundary>` reset function a noop after the first call ([#16171](https://github.com/sveltejs/svelte/pull/16171))\n\n## 5.36.5\n\n### Patch Changes\n\n- fix: silence `$inspect` errors when the effect is about to be destroyed ([#16391](https://github.com/sveltejs/svelte/pull/16391))\n\n- fix: more informative error when effects run in an infinite loop ([#16405](https://github.com/sveltejs/svelte/pull/16405))\n\n## 5.36.4\n\n### Patch Changes\n\n- fix: avoid microtask in flushSync ([#16394](https://github.com/sveltejs/svelte/pull/16394))\n\n- fix: ensure compiler state is reset before compilation ([#16396](https://github.com/sveltejs/svelte/pull/16396))\n\n## 5.36.3\n\n### Patch Changes\n\n- fix: don't log `await_reactivity_loss` warning when signal is read in `untrack` ([#16385](https://github.com/sveltejs/svelte/pull/16385))\n\n- fix: better handle $inspect on array mutations ([#16389](https://github.com/sveltejs/svelte/pull/16389))\n\n- fix: leave proxied array `length` untouched when deleting properties ([#16389](https://github.com/sveltejs/svelte/pull/16389))\n\n- fix: update `$effect.pending()` immediately after a batch is removed ([#16382](https://github.com/sveltejs/svelte/pull/16382))\n\n## 5.36.2\n\n### Patch Changes\n\n- fix: add `$effect.pending()` to types ([#16376](https://github.com/sveltejs/svelte/pull/16376))\n\n- fix: add `pending` snippet to `<svelte:boundary>` types ([#16379](https://github.com/sveltejs/svelte/pull/16379))\n\n## 5.36.1\n\n### Patch Changes\n\n- fix: only skip updating bound `<input>` if the input was the source of the change ([#16373](https://github.com/sveltejs/svelte/pull/16373))\n\n## 5.36.0\n\n### Minor Changes\n\n- feat: support `await` in components when using the `experimental.async` compiler option ([#15844](https://github.com/sveltejs/svelte/pull/15844))\n\n### Patch Changes\n\n- fix: silence a11y warning for inert elements ([#16339](https://github.com/sveltejs/svelte/pull/16339))\n\n- chore: clean up a11y analysis code ([#16345](https://github.com/sveltejs/svelte/pull/16345))\n\n## 5.35.7\n\n### Patch Changes\n\n- fix: silence autofocus a11y warning inside `<dialog>` ([#16341](https://github.com/sveltejs/svelte/pull/16341))\n\n- fix: don't show adjusted error messages in boundaries ([#16360](https://github.com/sveltejs/svelte/pull/16360))\n\n- chore: replace inline regex with variable ([#16340](https://github.com/sveltejs/svelte/pull/16340))\n\n## 5.35.6\n\n### Patch Changes\n\n- chore: simplify reaction/source ownership tracking ([#16333](https://github.com/sveltejs/svelte/pull/16333))\n\n- chore: simplify internal component `pop()` ([#16331](https://github.com/sveltejs/svelte/pull/16331))\n\n## 5.35.5\n\n### Patch Changes\n\n- fix: associate sources in Spring/Tween/SvelteMap/SvelteSet with correct reaction ([#16325](https://github.com/sveltejs/svelte/pull/16325))\n\n- fix: re-evaluate derived props during teardown ([#16278](https://github.com/sveltejs/svelte/pull/16278))\n\n## 5.35.4\n\n### Patch Changes\n\n- fix: abort and reschedule effect processing after state change in user effect ([#16280](https://github.com/sveltejs/svelte/pull/16280))\n\n## 5.35.3\n\n### Patch Changes\n\n- fix: account for mounting when `select_option` in `attribute_effect` ([#16309](https://github.com/sveltejs/svelte/pull/16309))\n\n- fix: do not proxify the value assigned to a derived ([#16302](https://github.com/sveltejs/svelte/pull/16302))\n\n## 5.35.2\n\n### Patch Changes\n\n- fix: bump esrap ([#16295](https://github.com/sveltejs/svelte/pull/16295))\n\n## 5.35.1\n\n### Patch Changes\n\n- feat: add parent hierarchy to `__svelte_meta` objects ([#16255](https://github.com/sveltejs/svelte/pull/16255))\n\n## 5.35.0\n\n### Minor Changes\n\n- feat: add `getAbortSignal()` ([#16266](https://github.com/sveltejs/svelte/pull/16266))\n\n### Patch Changes\n\n- chore: simplify props ([#16270](https://github.com/sveltejs/svelte/pull/16270))\n\n## 5.34.9\n\n### Patch Changes\n\n- fix: ensure unowned deriveds can add themselves as reactions while connected ([#16249](https://github.com/sveltejs/svelte/pull/16249))\n\n## 5.34.8\n\n### Patch Changes\n\n- fix: untrack `$inspect.with` and add check for unsafe mutation ([#16209](https://github.com/sveltejs/svelte/pull/16209))\n\n- fix: use fine grained for template if the component is not explicitly in legacy mode ([#16232](https://github.com/sveltejs/svelte/pull/16232))\n\n- lift unsafe_state_mutation constraints for SvelteSet, SvelteMap, SvelteDate, SvelteURL and SvelteURLSearchParams created inside the derived ([#16221](https://github.com/sveltejs/svelte/pull/16221))\n\n## 5.34.7\n\n### Patch Changes\n\n- fix: address css class matching regression ([#16204](https://github.com/sveltejs/svelte/pull/16204))\n\n## 5.34.6\n\n### Patch Changes\n\n- fix: match class and style directives against attribute selector ([#16179](https://github.com/sveltejs/svelte/pull/16179))\n\n## 5.34.5\n\n### Patch Changes\n\n- fix: keep spread non-delegated event handlers up to date ([#16180](https://github.com/sveltejs/svelte/pull/16180))\n\n- fix: remove undefined attributes on hydration ([#16178](https://github.com/sveltejs/svelte/pull/16178))\n\n- fix: ensure sources within nested effects still register correctly ([#16193](https://github.com/sveltejs/svelte/pull/16193))\n\n- fix: avoid shadowing a variable in dynamic components ([#16185](https://github.com/sveltejs/svelte/pull/16185))\n\n## 5.34.4\n\n### Patch Changes\n\n- fix: don't set state withing `with_parent` in proxy ([#16176](https://github.com/sveltejs/svelte/pull/16176))\n\n- fix: use compiler-driven reactivity in legacy mode template expressions ([#16100](https://github.com/sveltejs/svelte/pull/16100))\n\n## 5.34.3\n\n### Patch Changes\n\n- fix: don't eagerly execute deriveds on resume ([#16150](https://github.com/sveltejs/svelte/pull/16150))\n\n- fix: prevent memory leaking signals in legacy mode ([#16145](https://github.com/sveltejs/svelte/pull/16145))\n\n- fix: don't define `error.message` if it's not configurable ([#16149](https://github.com/sveltejs/svelte/pull/16149))\n\n## 5.34.2\n\n### Patch Changes\n\n- fix: add missing typings for some dimension bindings ([#16142](https://github.com/sveltejs/svelte/pull/16142))\n\n- fix: prune typescript class field declarations ([#16154](https://github.com/sveltejs/svelte/pull/16154))\n\n## 5.34.1\n\n### Patch Changes\n\n- fix: correctly tag private class state fields ([#16132](https://github.com/sveltejs/svelte/pull/16132))\n\n## 5.34.0\n\n### Minor Changes\n\n- feat: add source name logging to `$inspect.trace` ([#16060](https://github.com/sveltejs/svelte/pull/16060))\n\n### Patch Changes\n\n- fix: add `command` and `commandfor` to `HTMLButtonAttributes` ([#16117](https://github.com/sveltejs/svelte/pull/16117))\n\n- fix: better `$inspect.trace()` output ([#16131](https://github.com/sveltejs/svelte/pull/16131))\n\n- fix: properly hydrate dynamic css props components and remove element removal ([#16118](https://github.com/sveltejs/svelte/pull/16118))\n\n## 5.33.19\n\n### Patch Changes\n\n- fix: reset `is_flushing` if `flushSync` is called and there's no scheduled effect ([#16119](https://github.com/sveltejs/svelte/pull/16119))\n\n## 5.33.18\n\n### Patch Changes\n\n- chore: bump `esrap` dependency ([#16106](https://github.com/sveltejs/svelte/pull/16106))\n\n- fix: destructuring state in ssr ([#16102](https://github.com/sveltejs/svelte/pull/16102))\n\n## 5.33.17\n\n### Patch Changes\n\n- chore: update acorn parser `ecmaVersion` to parse import attributes ([#16098](https://github.com/sveltejs/svelte/pull/16098))\n\n## 5.33.16\n\n### Patch Changes\n\n- fix: visit expression when destructuring state declarations ([#16081](https://github.com/sveltejs/svelte/pull/16081))\n\n- fix: move xmlns attribute from SVGAttributes to to DOMAttributes ([#16080](https://github.com/sveltejs/svelte/pull/16080))\n\n## 5.33.15\n\n### Patch Changes\n\n- fix: invoke parent boundary of deriveds that throw ([#16091](https://github.com/sveltejs/svelte/pull/16091))\n\n## 5.33.14\n\n### Patch Changes\n\n- Revert \"feat: enable TS autocomplete for Svelte HTML element definitions\" ([#16063](https://github.com/sveltejs/svelte/pull/16063))\n\n- fix: destructuring snippet arguments ([#16068](https://github.com/sveltejs/svelte/pull/16068))\n\n## 5.33.13\n\n### Patch Changes\n\n- fix: avoid recursion error in `EachBlock` visitor ([#16058](https://github.com/sveltejs/svelte/pull/16058))\n\n## 5.33.12\n\n### Patch Changes\n\n- fix: correctly transform reassignments to class fields in SSR mode ([#16051](https://github.com/sveltejs/svelte/pull/16051))\n\n## 5.33.11\n\n### Patch Changes\n\n- fix: treat transitive dependencies of each blocks as mutable in legacy mode if item is mutated ([#16038](https://github.com/sveltejs/svelte/pull/16038))\n\n## 5.33.10\n\n### Patch Changes\n\n- fix: use `fill: 'forwards'` on transition animations to prevent flicker ([#16035](https://github.com/sveltejs/svelte/pull/16035))\n\n## 5.33.9\n\n### Patch Changes\n\n- fix: put expressions in effects unless known to be static ([#15792](https://github.com/sveltejs/svelte/pull/15792))\n\n## 5.33.8\n\n### Patch Changes\n\n- fix: only `select_option` if `'value'` is in `next` ([#16032](https://github.com/sveltejs/svelte/pull/16032))\n\n## 5.33.7\n\n### Patch Changes\n\n- fix: `bind:value` to select with stores ([#16028](https://github.com/sveltejs/svelte/pull/16028))\n\n## 5.33.6\n\n### Patch Changes\n\n- fix: falsy attachments on components ([#16021](https://github.com/sveltejs/svelte/pull/16021))\n\n- fix: correctly mark <option> elements as selected during SSR ([#16017](https://github.com/sveltejs/svelte/pull/16017))\n\n## 5.33.5\n\n### Patch Changes\n\n- fix: handle derived destructured iterators ([#16015](https://github.com/sveltejs/svelte/pull/16015))\n\n- fix: avoid rerunning attachments when unrelated spread attributes change ([#15961](https://github.com/sveltejs/svelte/pull/15961))\n\n## 5.33.4\n\n### Patch Changes\n\n- fix: narrow `defaultChecked` to boolean ([#16009](https://github.com/sveltejs/svelte/pull/16009))\n\n- fix: warn when using rest or identifier in custom elements without props option ([#16003](https://github.com/sveltejs/svelte/pull/16003))\n\n## 5.33.3\n\n### Patch Changes\n\n- fix: allow using typescript in `customElement.extend` option ([#16001](https://github.com/sveltejs/svelte/pull/16001))\n\n- fix: cleanup event handlers on media elements ([#16005](https://github.com/sveltejs/svelte/pull/16005))\n\n## 5.33.2\n\n### Patch Changes\n\n- fix: correctly parse escaped unicode characters in css selector ([#15976](https://github.com/sveltejs/svelte/pull/15976))\n\n- fix: don't mark deriveds as clean if updating during teardown ([#15997](https://github.com/sveltejs/svelte/pull/15997))\n\n## 5.33.1\n\n### Patch Changes\n\n- fix: make deriveds on the server lazy again ([#15964](https://github.com/sveltejs/svelte/pull/15964))\n\n## 5.33.0\n\n### Minor Changes\n\n- feat: XHTML compliance ([#15538](https://github.com/sveltejs/svelte/pull/15538))\n\n- feat: add `fragments: 'html' | 'tree'` option for wider CSP compliance ([#15538](https://github.com/sveltejs/svelte/pull/15538))\n\n## 5.32.2\n\n### Patch Changes\n\n- chore: simplify `<pre>` cleaning ([#15980](https://github.com/sveltejs/svelte/pull/15980))\n\n- fix: attach `__svelte_meta` correctly to elements following a CSS wrapper ([#15982](https://github.com/sveltejs/svelte/pull/15982))\n\n- fix: import untrack directly from client in `svelte/attachments` ([#15974](https://github.com/sveltejs/svelte/pull/15974))\n\n## 5.32.1\n\n### Patch Changes\n\n- Warn when an invalid `<select multiple>` value is given ([#14816](https://github.com/sveltejs/svelte/pull/14816))\n\n## 5.32.0\n\n### Minor Changes\n\n- feat: warn on implicitly closed tags ([#15932](https://github.com/sveltejs/svelte/pull/15932))\n\n- feat: attachments `fromAction` utility ([#15933](https://github.com/sveltejs/svelte/pull/15933))\n\n### Patch Changes\n\n- fix: only re-run directly applied attachment if it changed ([#15962](https://github.com/sveltejs/svelte/pull/15962))\n\n## 5.31.1\n\n### Patch Changes\n\n- fix: avoid auto-parenthesis for special-keywords-only `MediaQuery` ([#15937](https://github.com/sveltejs/svelte/pull/15937))\n\n## 5.31.0\n\n### Minor Changes\n\n- feat: allow state fields to be declared inside class constructors ([#15820](https://github.com/sveltejs/svelte/pull/15820))\n\n### Patch Changes\n\n- fix: Add missing `AttachTag` in `Tag` union type inside the `AST` namespace from `\"svelte/compiler\"` ([#15946](https://github.com/sveltejs/svelte/pull/15946))\n\n## 5.30.2\n\n### Patch Changes\n\n- fix: falsy attachments types ([#15939](https://github.com/sveltejs/svelte/pull/15939))\n\n- fix: handle more hydration mismatches ([#15851](https://github.com/sveltejs/svelte/pull/15851))\n\n## 5.30.1\n\n### Patch Changes\n\n- fix: add `typeParams` to `SnippetBlock` for legacy parser ([#15921](https://github.com/sveltejs/svelte/pull/15921))\n\n## 5.30.0\n\n### Minor Changes\n\n- feat: allow generics on snippets ([#15915](https://github.com/sveltejs/svelte/pull/15915))\n\n## 5.29.0\n\n### Minor Changes\n\n- feat: attachments ([#15000](https://github.com/sveltejs/svelte/pull/15000))\n\n## 5.28.7\n\n### Patch Changes\n\n- fix: remove unncessary guards that require CSP privilege when removing event attributes ([#15846](https://github.com/sveltejs/svelte/pull/15846))\n\n- fix: rewrite destructuring logic to handle iterators ([#15813](https://github.com/sveltejs/svelte/pull/15813))\n\n## 5.28.6\n\n### Patch Changes\n\n- fix: use `transform.read` for `ownership_validator.mutation` array ([#15848](https://github.com/sveltejs/svelte/pull/15848))\n\n- fix: don't redeclare `$slots` ([#15849](https://github.com/sveltejs/svelte/pull/15849))\n\n## 5.28.5\n\n### Patch Changes\n\n- fix: proxify the value in assignment shorthands to the private field ([#15862](https://github.com/sveltejs/svelte/pull/15862))\n\n- fix: more frequently update `bind:buffered` to actual value ([#15874](https://github.com/sveltejs/svelte/pull/15874))\n\n## 5.28.4\n\n### Patch Changes\n\n- fix: treat nullish expression as empty string ([#15901](https://github.com/sveltejs/svelte/pull/15901))\n\n- fix: prevent invalid BigInt calls from blowing up at compile time ([#15900](https://github.com/sveltejs/svelte/pull/15900))\n\n- fix: warn on bidirectional control characters ([#15893](https://github.com/sveltejs/svelte/pull/15893))\n\n- fix: emit right error for a shadowed invalid rune ([#15892](https://github.com/sveltejs/svelte/pull/15892))\n\n## 5.28.3\n\n### Patch Changes\n\n- chore: avoid microtasks when flushing sync ([#15895](https://github.com/sveltejs/svelte/pull/15895))\n\n- fix: improve error message for migration errors when slot would be renamed ([#15841](https://github.com/sveltejs/svelte/pull/15841))\n\n- fix: allow characters in the supplementary special-purpose plane ([#15823](https://github.com/sveltejs/svelte/pull/15823))\n\n## 5.28.2\n\n### Patch Changes\n\n- fix: don't mark selector lists inside `:global` with multiple items as unused ([#15817](https://github.com/sveltejs/svelte/pull/15817))\n\n## 5.28.1\n\n### Patch Changes\n\n- fix: ensure `<svelte:boundary>` properly removes error content in production mode ([#15793](https://github.com/sveltejs/svelte/pull/15793))\n\n- fix: `update_version` after `delete` if `source` is `undefined` and `prop` in `target` ([#15796](https://github.com/sveltejs/svelte/pull/15796))\n\n- fix: emit error on wrong placement of the `:global` block selector ([#15794](https://github.com/sveltejs/svelte/pull/15794))\n\n## 5.28.0\n\n### Minor Changes\n\n- feat: partially evaluate more expressions ([#15781](https://github.com/sveltejs/svelte/pull/15781))\n\n## 5.27.3\n\n### Patch Changes\n\n- fix: use function declaration for snippets in server output to avoid TDZ violation ([#15789](https://github.com/sveltejs/svelte/pull/15789))\n\n## 5.27.2\n\n### Patch Changes\n\n- chore: use pkg.imports for common modules ([#15787](https://github.com/sveltejs/svelte/pull/15787))\n\n## 5.27.1\n\n### Patch Changes\n\n- chore: default params for html blocks ([#15778](https://github.com/sveltejs/svelte/pull/15778))\n\n- fix: correct suggested type for custom events without detail ([#15763](https://github.com/sveltejs/svelte/pull/15763))\n\n- fix: Throw on unrendered snippets in `dev` ([#15766](https://github.com/sveltejs/svelte/pull/15766))\n\n- fix: avoid unnecessary read version increments ([#15777](https://github.com/sveltejs/svelte/pull/15777))\n\n## 5.27.0\n\n### Minor Changes\n\n- feat: partially evaluate certain expressions ([#15494](https://github.com/sveltejs/svelte/pull/15494))\n\n### Patch Changes\n\n- fix: relax `:global` selector list validation ([#15762](https://github.com/sveltejs/svelte/pull/15762))\n\n## 5.26.3\n\n### Patch Changes\n\n- fix: correctly validate head snippets on the server ([#15755](https://github.com/sveltejs/svelte/pull/15755))\n\n- fix: ignore mutation validation for props that are not proxies in more cases ([#15759](https://github.com/sveltejs/svelte/pull/15759))\n\n- fix: allow self-closing tags within math namespace ([#15761](https://github.com/sveltejs/svelte/pull/15761))\n\n## 5.26.2\n\n### Patch Changes\n\n- fix: correctly validate `undefined` snippet params with default value ([#15750](https://github.com/sveltejs/svelte/pull/15750))\n\n## 5.26.1\n\n### Patch Changes\n\n- fix: update `state_referenced_locally` message ([#15733](https://github.com/sveltejs/svelte/pull/15733))\n\n## 5.26.0\n\n### Minor Changes\n\n- feat: add `css.hasGlobal` to `compile` output ([#15450](https://github.com/sveltejs/svelte/pull/15450))\n\n### Patch Changes\n\n- fix: add snippet argument validation in dev ([#15521](https://github.com/sveltejs/svelte/pull/15521))\n\n## 5.25.12\n\n### Patch Changes\n\n- fix: improve internal_set versioning mechanic ([#15724](https://github.com/sveltejs/svelte/pull/15724))\n\n- fix: don't transform reassigned state in labeled statement in `$derived` ([#15725](https://github.com/sveltejs/svelte/pull/15725))\n\n## 5.25.11\n\n### Patch Changes\n\n- fix: handle hydration mismatches in await blocks ([#15708](https://github.com/sveltejs/svelte/pull/15708))\n\n- fix: prevent ownership warnings if the fallback of a bindable is used ([#15720](https://github.com/sveltejs/svelte/pull/15720))\n\n## 5.25.10\n\n### Patch Changes\n\n- fix: set deriveds as `CLEAN` if they are assigned to ([#15592](https://github.com/sveltejs/svelte/pull/15592))\n\n- fix: better scope `:global()` with nesting selector `&` ([#15671](https://github.com/sveltejs/svelte/pull/15671))\n\n## 5.25.9\n\n### Patch Changes\n\n- fix: allow `$.state` and `$.derived` to be treeshaken ([#15702](https://github.com/sveltejs/svelte/pull/15702))\n\n- fix: rework binding ownership validation ([#15678](https://github.com/sveltejs/svelte/pull/15678))\n\n## 5.25.8\n\n### Patch Changes\n\n- fix: address untracked_writes memory leak ([#15694](https://github.com/sveltejs/svelte/pull/15694))\n\n## 5.25.7\n\n### Patch Changes\n\n- fix: ensure clearing of old values happens independent of root flushes ([#15664](https://github.com/sveltejs/svelte/pull/15664))\n\n## 5.25.6\n\n### Patch Changes\n\n- fix: ignore generic type arguments while creating AST ([#15659](https://github.com/sveltejs/svelte/pull/15659))\n\n- fix: better consider component and its snippets during css pruning ([#15630](https://github.com/sveltejs/svelte/pull/15630))\n\n## 5.25.5\n\n### Patch Changes\n\n- fix: add setters to `$derived` class properties ([#15628](https://github.com/sveltejs/svelte/pull/15628))\n\n- fix: silence assignment warning on more function bindings ([#15644](https://github.com/sveltejs/svelte/pull/15644))\n\n- fix: make sure CSS is preserved during SSR with bindings ([#15645](https://github.com/sveltejs/svelte/pull/15645))\n\n## 5.25.4\n\n### Patch Changes\n\n- fix: support TS type assertions ([#15642](https://github.com/sveltejs/svelte/pull/15642))\n\n- fix: ensure `undefined` class still applies scoping class, if necessary ([#15643](https://github.com/sveltejs/svelte/pull/15643))\n\n## 5.25.3\n\n### Patch Changes\n\n- fix: prevent state runes from being called with spread ([#15585](https://github.com/sveltejs/svelte/pull/15585))\n\n## 5.25.2\n\n### Patch Changes\n\n- feat: migrate reassigned deriveds to `$derived` ([#15581](https://github.com/sveltejs/svelte/pull/15581))\n\n## 5.25.1\n\n### Patch Changes\n\n- fix: prevent dev server from throwing errors when attempting to retrieve the proxied value of an iframe's contentWindow ([#15577](https://github.com/sveltejs/svelte/pull/15577))\n\n## 5.25.0\n\n### Minor Changes\n\n- feat: make deriveds writable ([#15570](https://github.com/sveltejs/svelte/pull/15570))\n\n## 5.24.1\n\n### Patch Changes\n\n- fix: use `get` in constructor for deriveds ([#15300](https://github.com/sveltejs/svelte/pull/15300))\n\n- fix: ensure toStore root effect is connected to correct parent effect ([#15574](https://github.com/sveltejs/svelte/pull/15574))\n\n## 5.24.0\n\n### Minor Changes\n\n- feat: allow state created in deriveds/effects to be written/read locally without self-invalidation ([#15553](https://github.com/sveltejs/svelte/pull/15553))\n\n### Patch Changes\n\n- fix: check if DOM prototypes are extensible ([#15569](https://github.com/sveltejs/svelte/pull/15569))\n\n- Keep inlined trailing JSDoc comments of properties when running svelte-migrate ([#15567](https://github.com/sveltejs/svelte/pull/15567))\n\n- fix: simplify set calls for proxyable values ([#15548](https://github.com/sveltejs/svelte/pull/15548))\n\n- fix: don't depend on deriveds created inside the current reaction ([#15564](https://github.com/sveltejs/svelte/pull/15564))\n\n## 5.23.2\n\n### Patch Changes\n\n- fix: don't hoist listeners that access non hoistable snippets ([#15534](https://github.com/sveltejs/svelte/pull/15534))\n\n## 5.23.1\n\n### Patch Changes\n\n- fix: invalidate parent effects when child effects update parent dependencies ([#15506](https://github.com/sveltejs/svelte/pull/15506))\n\n- fix: correctly match `:has()` selector during css pruning ([#15277](https://github.com/sveltejs/svelte/pull/15277))\n\n- fix: replace `undefined` with `void 0` to avoid edge case ([#15511](https://github.com/sveltejs/svelte/pull/15511))\n\n- fix: allow global-like pseudo-selectors refinement ([#15313](https://github.com/sveltejs/svelte/pull/15313))\n\n- chore: don't distribute unused types definitions ([#15473](https://github.com/sveltejs/svelte/pull/15473))\n\n- fix: add `files` and `group` to HTMLInputAttributes in elements.d.ts ([#15492](https://github.com/sveltejs/svelte/pull/15492))\n\n- fix: throw rune_invalid_arguments_length when $state.raw() is used with more than 1 arg ([#15516](https://github.com/sveltejs/svelte/pull/15516))\n\n## 5.23.0\n\n### Minor Changes\n\n- fix: make values consistent between effects and their cleanup functions ([#15469](https://github.com/sveltejs/svelte/pull/15469))\n\n## 5.22.6\n\n### Patch Changes\n\n- fix: skip `log_if_contains_state` if only logging literals ([#15468](https://github.com/sveltejs/svelte/pull/15468))\n\n- fix: Add `closedby` property to HTMLDialogAttributes type ([#15458](https://github.com/sveltejs/svelte/pull/15458))\n\n- fix: null and warnings for local handlers ([#15460](https://github.com/sveltejs/svelte/pull/15460))\n\n## 5.22.5\n\n### Patch Changes\n\n- fix: memoize `clsx` calls ([#15456](https://github.com/sveltejs/svelte/pull/15456))\n\n- fix: respect `svelte-ignore hydration_attribute_changed` on elements with spread attributes ([#15443](https://github.com/sveltejs/svelte/pull/15443))\n\n- fix: always use `setAttribute` when setting `style` ([#15323](https://github.com/sveltejs/svelte/pull/15323))\n\n- fix: make `style:` directive and CSS handling more robust ([#15418](https://github.com/sveltejs/svelte/pull/15418))\n\n## 5.22.4\n\n### Patch Changes\n\n- fix: never deduplicate expressions in templates ([#15451](https://github.com/sveltejs/svelte/pull/15451))\n\n## 5.22.3\n\n### Patch Changes\n\n- fix: run effect roots in tree order ([#15446](https://github.com/sveltejs/svelte/pull/15446))\n\n## 5.22.2\n\n### Patch Changes\n\n- fix: correctly set `is_updating` before flushing root effects ([#15442](https://github.com/sveltejs/svelte/pull/15442))\n\n## 5.22.1\n\n### Patch Changes\n\n- chore: switch acorn-typescript plugin ([#15393](https://github.com/sveltejs/svelte/pull/15393))\n\n## 5.22.0\n\n### Minor Changes\n\n- feat: Add `idPrefix` option to `render` ([#15428](https://github.com/sveltejs/svelte/pull/15428))\n\n### Patch Changes\n\n- fix: make dialog element and role interactive ([#15429](https://github.com/sveltejs/svelte/pull/15429))\n\n## 5.21.0\n\n### Minor Changes\n\n- chore: Reduce hydration comment for {:else if} ([#15250](https://github.com/sveltejs/svelte/pull/15250))\n\n### Patch Changes\n\n- fix: disallow `bind:group` to snippet parameters ([#15401](https://github.com/sveltejs/svelte/pull/15401))\n\n## 5.20.5\n\n### Patch Changes\n\n- fix: allow double hyphen css selector names ([#15384](https://github.com/sveltejs/svelte/pull/15384))\n\n- fix: class:directive not working with $restProps #15386 ([#15389](https://github.com/sveltejs/svelte/pull/15389))\n  fix: spread add an useless cssHash on non-scoped element\n\n- fix: catch error on @const tag in svelte:boundary in DEV mode ([#15369](https://github.com/sveltejs/svelte/pull/15369))\n\n- fix: allow for duplicate `var` declarations ([#15382](https://github.com/sveltejs/svelte/pull/15382))\n\n- fix : bug \"$0 is not defined\" on svelte:element with a function call on class ([#15396](https://github.com/sveltejs/svelte/pull/15396))\n\n## 5.20.4\n\n### Patch Changes\n\n- fix: update types and inline docs for flushSync ([#15348](https://github.com/sveltejs/svelte/pull/15348))\n\n## 5.20.3\n\n### Patch Changes\n\n- fix: allow `@const` inside `#key` ([#15377](https://github.com/sveltejs/svelte/pull/15377))\n\n- fix: remove unnecessary `?? ''` on some expressions ([#15287](https://github.com/sveltejs/svelte/pull/15287))\n\n- fix: correctly override class attributes with class directives ([#15352](https://github.com/sveltejs/svelte/pull/15352))\n\n## 5.20.2\n\n### Patch Changes\n\n- chore: remove unused `options.uid` in `render` ([#15302](https://github.com/sveltejs/svelte/pull/15302))\n\n- fix: do not warn for `binding_property_non_reactive` if binding is a store in an each ([#15318](https://github.com/sveltejs/svelte/pull/15318))\n\n- fix: prevent writable store value from becoming a proxy when reassigning using $-prefix ([#15283](https://github.com/sveltejs/svelte/pull/15283))\n\n- fix: `muted` reactive without `bind` and select/autofocus attributes working with function calls ([#15326](https://github.com/sveltejs/svelte/pull/15326))\n\n- fix: ensure input elements and elements with `dir` attribute are marked as non-static ([#15259](https://github.com/sveltejs/svelte/pull/15259))\n\n- fix: fire delegated events on target even it was disabled in the meantime ([#15319](https://github.com/sveltejs/svelte/pull/15319))\n\n## 5.20.1\n\n### Patch Changes\n\n- fix: ensure AST analysis on `svelte.js` modules succeeds ([#15297](https://github.com/sveltejs/svelte/pull/15297))\n\n- fix: ignore typescript abstract methods ([#15267](https://github.com/sveltejs/svelte/pull/15267))\n\n- fix: correctly ssr component in `svelte:head` with `$props.id()` or `css='injected'` ([#15291](https://github.com/sveltejs/svelte/pull/15291))\n\n## 5.20.0\n\n### Minor Changes\n\n- feat: SSR-safe ID generation with `$props.id()` ([#15185](https://github.com/sveltejs/svelte/pull/15185))\n\n### Patch Changes\n\n- fix: take private and public into account for `constant_assignment` of derived state ([#15276](https://github.com/sveltejs/svelte/pull/15276))\n\n- fix: value/checked not correctly set using spread ([#15239](https://github.com/sveltejs/svelte/pull/15239))\n\n- chore: tweak effect self invalidation logic, run transition dispatches without reactive context ([#15275](https://github.com/sveltejs/svelte/pull/15275))\n\n- fix: use `importNode` to clone templates for Firefox ([#15272](https://github.com/sveltejs/svelte/pull/15272))\n\n- fix: recurse into `$derived` for ownership validation ([#15166](https://github.com/sveltejs/svelte/pull/15166))\n\n## 5.19.10\n\n### Patch Changes\n\n- fix: when re-connecting unowned deriveds, remove their unowned flag ([#15255](https://github.com/sveltejs/svelte/pull/15255))\n\n- fix: allow mutation of private derived state ([#15228](https://github.com/sveltejs/svelte/pull/15228))\n\n## 5.19.9\n\n### Patch Changes\n\n- fix: ensure unowned derived dependencies are not duplicated when reactions are skipped ([#15232](https://github.com/sveltejs/svelte/pull/15232))\n\n- fix: hydrate `href` that is part of spread attributes ([#15226](https://github.com/sveltejs/svelte/pull/15226))\n\n## 5.19.8\n\n### Patch Changes\n\n- fix: properly set `value` property of custom elements ([#15206](https://github.com/sveltejs/svelte/pull/15206))\n\n- fix: ensure custom element updates don't run in hydration mode ([#15217](https://github.com/sveltejs/svelte/pull/15217))\n\n- fix: ensure tracking returns true, even if in unowned ([#15214](https://github.com/sveltejs/svelte/pull/15214))\n\n## 5.19.7\n\n### Patch Changes\n\n- chore: remove unused code from signal logic ([#15195](https://github.com/sveltejs/svelte/pull/15195))\n\n- fix: encounter svelte:element in blocks as sibling during pruning css ([#15165](https://github.com/sveltejs/svelte/pull/15165))\n\n## 5.19.6\n\n### Patch Changes\n\n- fix: do not prune selectors like `:global(.foo):has(.scoped)` ([#15140](https://github.com/sveltejs/svelte/pull/15140))\n\n- fix: don't error on slot prop inside block inside other component ([#15148](https://github.com/sveltejs/svelte/pull/15148))\n\n- fix: ensure reactions are correctly attached for unowned deriveds ([#15158](https://github.com/sveltejs/svelte/pull/15158))\n\n- fix: silence a11y attribute warnings when spread attributes present ([#15150](https://github.com/sveltejs/svelte/pull/15150))\n\n- fix: prevent false-positive ownership validations due to hot reload ([#15154](https://github.com/sveltejs/svelte/pull/15154))\n\n- fix: widen ownership when calling setContext ([#15153](https://github.com/sveltejs/svelte/pull/15153))\n\n## 5.19.5\n\n### Patch Changes\n\n- fix: improve derived connection to ownership graph ([#15137](https://github.com/sveltejs/svelte/pull/15137))\n\n- fix: correctly look for sibling elements inside blocks and components when pruning CSS ([#15106](https://github.com/sveltejs/svelte/pull/15106))\n\n## 5.19.4\n\n### Patch Changes\n\n- fix: Add `bind:focused` property to `HTMLAttributes` type ([#15122](https://github.com/sveltejs/svelte/pull/15122))\n\n- fix: lazily connect derievds (in deriveds) to their parent ([#15129](https://github.com/sveltejs/svelte/pull/15129))\n\n- fix: disallow $state/$derived in const tags ([#15115](https://github.com/sveltejs/svelte/pull/15115))\n\n## 5.19.3\n\n### Patch Changes\n\n- fix: don't throw for `undefined` non delegated event handlers ([#15087](https://github.com/sveltejs/svelte/pull/15087))\n\n- fix: consistently set value to blank string when value attribute is undefined ([#15057](https://github.com/sveltejs/svelte/pull/15057))\n\n- fix: optimise || expressions in template ([#15092](https://github.com/sveltejs/svelte/pull/15092))\n\n- fix: correctly handle `novalidate` attribute casing ([#15083](https://github.com/sveltejs/svelte/pull/15083))\n\n- fix: expand boolean attribute support ([#15095](https://github.com/sveltejs/svelte/pull/15095))\n\n- fix: avoid double deriveds in component props ([#15089](https://github.com/sveltejs/svelte/pull/15089))\n\n- fix: add check for `is` attribute to correctly detect custom elements ([#15086](https://github.com/sveltejs/svelte/pull/15086))\n\n## 5.19.2\n\n### Patch Changes\n\n- fix: address regression with untrack ([#15079](https://github.com/sveltejs/svelte/pull/15079))\n\n## 5.19.1\n\n### Patch Changes\n\n- fix: omit unnecessary nullish coallescing in template expressions ([#15056](https://github.com/sveltejs/svelte/pull/15056))\n\n- fix: more efficient template effect grouping ([#15050](https://github.com/sveltejs/svelte/pull/15050))\n\n- fix: ensure untrack correctly retains the active reaction ([#15065](https://github.com/sveltejs/svelte/pull/15065))\n\n- fix: initialize `files` bind on hydration ([#15059](https://github.com/sveltejs/svelte/pull/15059))\n\n## 5.19.0\n\n### Minor Changes\n\n- feat: Expose `ClassValue` from `svelte/elements` ([#15035](https://github.com/sveltejs/svelte/pull/15035))\n\n### Patch Changes\n\n- fix: create fewer deriveds for concatenated strings ([#15041](https://github.com/sveltejs/svelte/pull/15041))\n\n- fix: correctly parse leading comments in function binding ([#15020](https://github.com/sveltejs/svelte/pull/15020))\n\n## 5.18.0\n\n### Minor Changes\n\n- feat: allow `<template>` elements to contain any child ([#15007](https://github.com/sveltejs/svelte/pull/15007))\n\n### Patch Changes\n\n- fix: ensure resume effects are scheduled in topological order ([#15012](https://github.com/sveltejs/svelte/pull/15012))\n\n- fix: bump esrap ([#15015](https://github.com/sveltejs/svelte/pull/15015))\n\n- fix: remove listener on `bind_current_time` teardown ([#15013](https://github.com/sveltejs/svelte/pull/15013))\n\n## 5.17.5\n\n### Patch Changes\n\n- feat: allow const tag inside `svelte:boundary` ([#14993](https://github.com/sveltejs/svelte/pull/14993))\n\n- fix: ensure signal write invalidation within effects is consistent ([#14989](https://github.com/sveltejs/svelte/pull/14989))\n\n## 5.17.4\n\n### Patch Changes\n\n- fix: never consider inert boundary effects ([#14999](https://github.com/sveltejs/svelte/pull/14999))\n\n- fix: store access on component destroy ([#14968](https://github.com/sveltejs/svelte/pull/14968))\n\n- fix: correctly transform `pre` with no content ([#14973](https://github.com/sveltejs/svelte/pull/14973))\n\n- fix: wrap each block expression in derived to encapsulate effects ([#14967](https://github.com/sveltejs/svelte/pull/14967))\n\n## 5.17.3\n\n### Patch Changes\n\n- fix: reset dependency read versions after reaction execution ([#14964](https://github.com/sveltejs/svelte/pull/14964))\n\n## 5.17.2\n\n### Patch Changes\n\n- fix: account for parent scale when animating elements ([#14957](https://github.com/sveltejs/svelte/pull/14957))\n\n- fix: apply `overflow: hidden` style when transitioning elements, where necessary ([#14930](https://github.com/sveltejs/svelte/pull/14930))\n\n- fix: properly add owners to function bindings ([#14962](https://github.com/sveltejs/svelte/pull/14962))\n\n## 5.17.1\n\n### Patch Changes\n\n- fix: remove bindable prop validation ([#14946](https://github.com/sveltejs/svelte/pull/14946))\n\n- chore: tweak \"invalid assignment\" compiler error message ([#14955](https://github.com/sveltejs/svelte/pull/14955))\n\n- fix: silence false-positive stale value warning ([#14958](https://github.com/sveltejs/svelte/pull/14958))\n\n## 5.17.0\n\n### Minor Changes\n\n- feat: allow non-numeric values to be tweened by snapping immediately to new value ([#14941](https://github.com/sveltejs/svelte/pull/14941))\n\n### Patch Changes\n\n- fix: handle default values in object destructuring within \"each\" blocks when using characters like \"}\" and \"]\" ([#14554](https://github.com/sveltejs/svelte/pull/14554))\n\n- fix: account for min-width/height in `slide` transition ([#14942](https://github.com/sveltejs/svelte/pull/14942))\n\n- fix: prevent long delays causing erratic spring behaviour ([#14940](https://github.com/sveltejs/svelte/pull/14940))\n\n- feat: warn on using `slide` transition with table elements ([#14936](https://github.com/sveltejs/svelte/pull/14936))\n\n- chore: improve signal performance by reducing duplicate deps ([#14945](https://github.com/sveltejs/svelte/pull/14945))\n\n## 5.16.6\n\n### Patch Changes\n\n- fix: Make Tween duration 0 set current to target immediately ([#14937](https://github.com/sveltejs/svelte/pull/14937))\n\n- fix: guard against `customElements` being unavailable in browser extension contexts ([#14933](https://github.com/sveltejs/svelte/pull/14933))\n\n- fix: treat `inert` as a boolean attribute ([#14935](https://github.com/sveltejs/svelte/pull/14935))\n\n- fix: remove leading newline from `<pre>` contents ([#14922](https://github.com/sveltejs/svelte/pull/14922))\n\n## 5.16.5\n\n### Patch Changes\n\n- fix: inherit correct namespace for `<title>` elements ([#14817](https://github.com/sveltejs/svelte/pull/14817))\n\n- fix: don't throw `bind_invalid_export` if there's also a bindable prop with the same name ([#14813](https://github.com/sveltejs/svelte/pull/14813))\n\n## 5.16.4\n\n### Patch Changes\n\n- fix: use cached indexOf array prototype method internally ([#14912](https://github.com/sveltejs/svelte/pull/14912))\n\n- fix: make Tween work with continuous target changes ([#14895](https://github.com/sveltejs/svelte/pull/14895))\n\n## 5.16.3\n\n### Patch Changes\n\n- fix: correctly parse `each` with loose parser ([#14887](https://github.com/sveltejs/svelte/pull/14887))\n\n- fix: apply `clsx` logic to custom element `class` attributes ([#14907](https://github.com/sveltejs/svelte/pull/14907))\n\n## 5.16.2\n\n### Patch Changes\n\n- fix: ensure disconnected deriveds correctly connect again ([#14899](https://github.com/sveltejs/svelte/pull/14899))\n\n- fix: correctly highlight sources reassigned inside `trace` ([#14811](https://github.com/sveltejs/svelte/pull/14811))\n\n## 5.16.1\n\n### Patch Changes\n\n- fix: ensure unowned deriveds correctly get re-linked to the graph ([#14855](https://github.com/sveltejs/svelte/pull/14855))\n\n- fix: ensure $inspect.trace works correctly with null values ([#14853](https://github.com/sveltejs/svelte/pull/14853))\n\n## 5.16.0\n\n### Minor Changes\n\n- feat: allow `class` attribute to be an object or array, using `clsx` ([#14714](https://github.com/sveltejs/svelte/pull/14714))\n\n### Patch Changes\n\n- fix: don't include keyframes in global scope in the keyframes to rename ([#14822](https://github.com/sveltejs/svelte/pull/14822))\n\n## 5.15.0\n\n### Minor Changes\n\n- feat: add \"worker\" exports condition to better support bundling for worker-based environments ([#14779](https://github.com/sveltejs/svelte/pull/14779))\n\n## 5.14.6\n\n### Patch Changes\n\n- fix: treeshake `$inspect.trace` code if unused in modules ([#14774](https://github.com/sveltejs/svelte/pull/14774))\n\n- fix: Improve typescript DX for $inspect, $props, $bindable, and $host ([#14777](https://github.com/sveltejs/svelte/pull/14777))\n\n## 5.14.5\n\n### Patch Changes\n\n- fix: bump esrap dependency ([#14765](https://github.com/sveltejs/svelte/pull/14765))\n\n- fix: ensure svg namespace for `<a>` elements is correct ([#14756](https://github.com/sveltejs/svelte/pull/14756))\n\n- fix: treeshake `$inspect.trace` code if unused ([#14770](https://github.com/sveltejs/svelte/pull/14770))\n\n## 5.14.4\n\n### Patch Changes\n\n- fix: remove implements from class declarations ([#14749](https://github.com/sveltejs/svelte/pull/14749))\n\n- fix: remove unwanted properties from both replaced and unreplaced nodes ([#14744](https://github.com/sveltejs/svelte/pull/14744))\n\n## 5.14.3\n\n### Patch Changes\n\n- fix: bump esrap, prevent malformed AST ([#14742](https://github.com/sveltejs/svelte/pull/14742))\n\n- fix: compare array contents for equality mismatch detections, not the arrays themselves ([#14738](https://github.com/sveltejs/svelte/pull/14738))\n\n## 5.14.2\n\n### Patch Changes\n\n- fix: correctly highlight first rerun of `$inspect.trace` ([#14734](https://github.com/sveltejs/svelte/pull/14734))\n\n- chore: more loose parser improvements ([#14733](https://github.com/sveltejs/svelte/pull/14733))\n\n## 5.14.1\n\n### Patch Changes\n\n- fix: improve unowned derived performance ([#14724](https://github.com/sveltejs/svelte/pull/14724))\n\n## 5.14.0\n\n### Minor Changes\n\n- feat: adds $inspect.trace rune ([#14290](https://github.com/sveltejs/svelte/pull/14290))\n\n## 5.13.0\n\n### Minor Changes\n\n- feat: add `outro` option to `unmount` ([#14540](https://github.com/sveltejs/svelte/pull/14540))\n\n- feat: provide loose parser mode ([#14691](https://github.com/sveltejs/svelte/pull/14691))\n\n## 5.12.0\n\n### Minor Changes\n\n- feat: expose more AST types from `\"svelte/compiler\"` ([#14601](https://github.com/sveltejs/svelte/pull/14601))\n\n### Patch Changes\n\n- fix: don't add parenthesis to media query if already present ([#14699](https://github.com/sveltejs/svelte/pull/14699))\n\n- fix: ensure if block paths retain correct template namespacing ([#14685](https://github.com/sveltejs/svelte/pull/14685))\n\n## 5.11.3\n\n### Patch Changes\n\n- fix: allow unquoted slash in attributes ([#14615](https://github.com/sveltejs/svelte/pull/14615))\n\n- fix: better handle hydration of script/style elements ([#14683](https://github.com/sveltejs/svelte/pull/14683))\n\n- fix: make `defaultValue` work with spread ([#14640](https://github.com/sveltejs/svelte/pull/14640))\n\n- fix: avoid mutation validation for invalidate_inner_signals ([#14688](https://github.com/sveltejs/svelte/pull/14688))\n\n## 5.11.2\n\n### Patch Changes\n\n- fix: correctly handle ssr for `reactivity/window` ([#14681](https://github.com/sveltejs/svelte/pull/14681))\n\n## 5.11.1\n\n### Patch Changes\n\n- fix: account for global block in `is_empty` ([#14677](https://github.com/sveltejs/svelte/pull/14677))\n\n- fix: remove overzealous `reactive_declaration_non_reactive_property` warning ([#14663](https://github.com/sveltejs/svelte/pull/14663))\n\n## 5.11.0\n\n### Minor Changes\n\n- feat: add `svelte/reactivity/window` module ([#14660](https://github.com/sveltejs/svelte/pull/14660))\n\n### Patch Changes\n\n- fix: take into account registration state when setting custom element props ([#14508](https://github.com/sveltejs/svelte/pull/14508))\n\n## 5.10.1\n\n### Patch Changes\n\n- fix: ensure snippet hoisting works in the correct scope ([#14642](https://github.com/sveltejs/svelte/pull/14642))\n\n- fix: ensure $state.snapshot clones holey arrays correctly ([#14657](https://github.com/sveltejs/svelte/pull/14657))\n\n- fix: restore input binding selection position ([#14649](https://github.com/sveltejs/svelte/pull/14649))\n\n- fix: transform everything that is not a selector inside `:global` ([#14577](https://github.com/sveltejs/svelte/pull/14577))\n\n- Overwrite Spring.#last_value when using .set() with {instant: true} ([#14656](https://github.com/sveltejs/svelte/pull/14656))\n\n- fix: don't emit assignment warnings for bindings ([#14651](https://github.com/sveltejs/svelte/pull/14651))\n\n## 5.10.0\n\n### Minor Changes\n\n- feat: provide links to documentation for errors/warnings ([#14629](https://github.com/sveltejs/svelte/pull/14629))\n\n### Patch Changes\n\n- fix: allow exports with source from script module even if no bind is present ([#14620](https://github.com/sveltejs/svelte/pull/14620))\n\n- fix: deconflict `get_name` for literal class properties ([#14607](https://github.com/sveltejs/svelte/pull/14607))\n\n## 5.9.1\n\n### Patch Changes\n\n- fix: mark subtree dynamic for bind with sequence expressions ([#14626](https://github.com/sveltejs/svelte/pull/14626))\n\n## 5.9.0\n\n### Minor Changes\n\n- feat: add support for bind getters/setters ([#14307](https://github.com/sveltejs/svelte/pull/14307))\n\n### Patch Changes\n\n- fix: always run `if` block code the first time ([#14597](https://github.com/sveltejs/svelte/pull/14597))\n\n## 5.8.1\n\n### Patch Changes\n\n- fix: reinstate missing prefersReducedMotion export ([#14586](https://github.com/sveltejs/svelte/pull/14586))\n\n## 5.8.0\n\n### Minor Changes\n\n- feat: add `Spring` and `Tween` classes to `svelte/motion` ([#11519](https://github.com/sveltejs/svelte/pull/11519))\n\n## 5.7.1\n\n### Patch Changes\n\n- fix: ensure bindings always take precedence over spreads ([#14575](https://github.com/sveltejs/svelte/pull/14575))\n\n## 5.7.0\n\n### Minor Changes\n\n- feat: add `createSubscriber` function for creating reactive values that depend on subscriptions ([#14422](https://github.com/sveltejs/svelte/pull/14422))\n\n- feat: add reactive `MediaQuery` class, and a `prefersReducedMotion` class instance ([#14422](https://github.com/sveltejs/svelte/pull/14422))\n\n### Patch Changes\n\n- fix: treat `undefined` and `null` the same for the initial input value ([#14562](https://github.com/sveltejs/svelte/pull/14562))\n\n## 5.6.2\n\n### Patch Changes\n\n- chore: make if blocks tree-shakable ([#14549](https://github.com/sveltejs/svelte/pull/14549))\n\n## 5.6.1\n\n### Patch Changes\n\n- fix: handle static form values in combination with default values ([#14555](https://github.com/sveltejs/svelte/pull/14555))\n\n## 5.6.0\n\n### Minor Changes\n\n- feat: support `defaultValue/defaultChecked` for inputs ([#14289](https://github.com/sveltejs/svelte/pull/14289))\n\n## 5.5.4\n\n### Patch Changes\n\n- fix: better error messages for invalid HTML trees ([#14445](https://github.com/sveltejs/svelte/pull/14445))\n\n- fix: remove spreaded event handlers when they become nullish ([#14546](https://github.com/sveltejs/svelte/pull/14546))\n\n- fix: respect the unidirectional nature of time ([#14541](https://github.com/sveltejs/svelte/pull/14541))\n\n## 5.5.3\n\n### Patch Changes\n\n- fix: don't try to add owners to non-`$state` class fields ([#14533](https://github.com/sveltejs/svelte/pull/14533))\n\n- fix: capture infinite_loop_guard in error boundary ([#14534](https://github.com/sveltejs/svelte/pull/14534))\n\n- fix: proxify values when assigning using `||=`, `&&=` and `??=` operators ([#14273](https://github.com/sveltejs/svelte/pull/14273))\n\n## 5.5.2\n\n### Patch Changes\n\n- fix: use correct reaction when lazily creating deriveds inside `SvelteDate` ([#14525](https://github.com/sveltejs/svelte/pull/14525))\n\n## 5.5.1\n\n### Patch Changes\n\n- fix: don't throw with nullish actions ([#13559](https://github.com/sveltejs/svelte/pull/13559))\n\n- fix: leave update expressions untransformed unless a transformer is provided ([#14507](https://github.com/sveltejs/svelte/pull/14507))\n\n- chore: turn reactive_declaration_non_reactive_property into a runtime warning ([#14192](https://github.com/sveltejs/svelte/pull/14192))\n\n## 5.5.0\n\n### Minor Changes\n\n- feat: allow snippets to be exported from module scripts ([#14315](https://github.com/sveltejs/svelte/pull/14315))\n\n### Patch Changes\n\n- fix: ignore TypeScript generics on variables ([#14509](https://github.com/sveltejs/svelte/pull/14509))\n\n## 5.4.0\n\n### Minor Changes\n\n- feat: support `#each` without `as` ([#14396](https://github.com/sveltejs/svelte/pull/14396))\n\n## 5.3.2\n\n### Patch Changes\n\n- fix: correctly prune CSS for elements inside snippets ([#14494](https://github.com/sveltejs/svelte/pull/14494))\n\n- fix: render attributes during SSR regardless of case ([#14492](https://github.com/sveltejs/svelte/pull/14492))\n\n## 5.3.1\n\n### Patch Changes\n\n- fix: treat spread elements the same as call expressions ([#14488](https://github.com/sveltejs/svelte/pull/14488))\n\n- fix: correctly increment/decrement bigints ([#14485](https://github.com/sveltejs/svelte/pull/14485))\n\n## 5.3.0\n\n### Minor Changes\n\n- feat: add error boundaries with `<svelte:boundary>` ([#14211](https://github.com/sveltejs/svelte/pull/14211))\n\n## 5.2.12\n\n### Patch Changes\n\n- fix: upgrade to esm-env 1.2.1 to fix issues with non-Vite setups ([#14470](https://github.com/sveltejs/svelte/pull/14470))\n\n- fix: prevent infinite loops when pruning CSS ([#14474](https://github.com/sveltejs/svelte/pull/14474))\n\n- fix: generate correct code when encountering object expression statement ([#14480](https://github.com/sveltejs/svelte/pull/14480))\n\n## 5.2.11\n\n### Patch Changes\n\n- fix: ignore text and expressions outside the template when validating HTML ([#14468](https://github.com/sveltejs/svelte/pull/14468))\n\n- fix: better account for render tags when pruning CSS ([#14456](https://github.com/sveltejs/svelte/pull/14456))\n\n## 5.2.10\n\n### Patch Changes\n\n- fix: correctly remove unused selectors in middle of selector lists ([#14448](https://github.com/sveltejs/svelte/pull/14448))\n\n- chore: upgrade esm-env for Vite 6 support ([#14460](https://github.com/sveltejs/svelte/pull/14460))\n\n- fix: strip exported TypeScript function overloads ([#14458](https://github.com/sveltejs/svelte/pull/14458))\n\n## 5.2.9\n\n### Patch Changes\n\n- fix: show `:then` block for `null/undefined` value ([#14440](https://github.com/sveltejs/svelte/pull/14440))\n\n- fix: relax html parent validation ([#14442](https://github.com/sveltejs/svelte/pull/14442))\n\n- fix: prevent memory leak when creating deriveds inside untrack ([#14443](https://github.com/sveltejs/svelte/pull/14443))\n\n- fix: disregard TypeScript nodes when pruning CSS ([#14446](https://github.com/sveltejs/svelte/pull/14446))\n\n## 5.2.8\n\n### Patch Changes\n\n- fix: correctly prune each blocks ([#14403](https://github.com/sveltejs/svelte/pull/14403))\n\n- fix: provide temporary `LegacyComponentType` ([#14257](https://github.com/sveltejs/svelte/pull/14257))\n\n- fix: attach spread attribute events synchronously ([#14387](https://github.com/sveltejs/svelte/pull/14387))\n\n- fix: ensure last empty text node correctly hydrates ([#14425](https://github.com/sveltejs/svelte/pull/14425))\n\n- fix: correctly prune key blocks ([#14403](https://github.com/sveltejs/svelte/pull/14403))\n\n## 5.2.7\n\n### Patch Changes\n\n- fix: always use set for private identifiers ([#14378](https://github.com/sveltejs/svelte/pull/14378))\n\n## 5.2.6\n\n### Patch Changes\n\n- fix: remove template expression inlining ([#14374](https://github.com/sveltejs/svelte/pull/14374))\n\n## 5.2.5\n\n### Patch Changes\n\n- fix: correctly handle srcObject attribute on video elements ([#14369](https://github.com/sveltejs/svelte/pull/14369))\n\n- add `contentvisibilityautostatechange` event to element definitions ([#14373](https://github.com/sveltejs/svelte/pull/14373))\n\n- fix: tighten up `export default` validation ([#14368](https://github.com/sveltejs/svelte/pull/14368))\n\n- fix: include method definitions in class private fields ([#14365](https://github.com/sveltejs/svelte/pull/14365))\n\n## 5.2.4\n\n### Patch Changes\n\n- fix: ensure internal cloning can work circular values ([#14347](https://github.com/sveltejs/svelte/pull/14347))\n\n- fix: correctly update dynamic member expressions ([#14359](https://github.com/sveltejs/svelte/pull/14359))\n\n- fix: ensure is_pure takes into account $effect.tracking() ([#14333](https://github.com/sveltejs/svelte/pull/14333))\n\n- fix: coerce value to number when hydrating range/number input with changed value ([#14349](https://github.com/sveltejs/svelte/pull/14349))\n\n## 5.2.3\n\n### Patch Changes\n\n- fix: ensure dynamic call expressions correctly generate output ([#14345](https://github.com/sveltejs/svelte/pull/14345))\n\n## 5.2.2\n\n### Patch Changes\n\n- fix: treat property accesses of literals as pure ([#14325](https://github.com/sveltejs/svelte/pull/14325))\n\n## 5.2.1\n\n### Patch Changes\n\n- fix: mark pseudo classes nested inside `:not` as used ([#14303](https://github.com/sveltejs/svelte/pull/14303))\n\n- fix: disallow invalid attributes for `<svelte:window>` and `<svelte:document>` ([#14228](https://github.com/sveltejs/svelte/pull/14228))\n\n- fix: ensure props passed to components via mount are updateable ([#14210](https://github.com/sveltejs/svelte/pull/14210))\n\n- fix: mark subtree dynamic for img with loading attribute ([#14317](https://github.com/sveltejs/svelte/pull/14317))\n\n- fix: avoid relying on Node specifics within compiler ([#14314](https://github.com/sveltejs/svelte/pull/14314))\n\n## 5.2.0\n\n### Minor Changes\n\n- feat: better inlining of static attributes ([#14269](https://github.com/sveltejs/svelte/pull/14269))\n\n## 5.1.17\n\n### Patch Changes\n\n- fix: account for `:has(...)` as part of `:root` ([#14229](https://github.com/sveltejs/svelte/pull/14229))\n\n- fix: prevent nested pseudo class from being marked as unused ([#14229](https://github.com/sveltejs/svelte/pull/14229))\n\n- fix: use strict equality for key block comparisons in runes mode ([#14285](https://github.com/sveltejs/svelte/pull/14285))\n\n- fix: bump `is-reference` dependency to fix `import.meta` bug ([#14286](https://github.com/sveltejs/svelte/pull/14286))\n\n## 5.1.16\n\n### Patch Changes\n\n- fix: don't wrap pseudo classes inside `:global(...)` with another `:global(...)` during migration ([#14267](https://github.com/sveltejs/svelte/pull/14267))\n\n- fix: bail on named slots with that have reserved keywords during migration ([#14278](https://github.com/sveltejs/svelte/pull/14278))\n\n## 5.1.15\n\n### Patch Changes\n\n- fix: consider static attributes that are inlined in the template ([#14249](https://github.com/sveltejs/svelte/pull/14249))\n\n## 5.1.14\n\n### Patch Changes\n\n- fix: migration script messing with attributes ([#14260](https://github.com/sveltejs/svelte/pull/14260))\n\n- fix: do not treat reassigned synthetic binds as state in runes mode ([#14236](https://github.com/sveltejs/svelte/pull/14236))\n\n- fix: account for mutations in script module in ownership check ([#14253](https://github.com/sveltejs/svelte/pull/14253))\n\n- fix: consider img with loading attribute not static ([#14237](https://github.com/sveltejs/svelte/pull/14237))\n\n## 5.1.13\n\n### Patch Changes\n\n- fix: add migration task when there's a variable named that would conflict with a rune ([#14216](https://github.com/sveltejs/svelte/pull/14216))\n\n- fix: consider `valueOf` in the reactive methods of `SvelteDate` ([#14227](https://github.com/sveltejs/svelte/pull/14227))\n\n- fix: handle sibling combinators within `:has` ([#14213](https://github.com/sveltejs/svelte/pull/14213))\n\n- fix: consider variables with synthetic store sub as state ([#14195](https://github.com/sveltejs/svelte/pull/14195))\n\n- fix: read index as a source in legacy keyed each block ([#14208](https://github.com/sveltejs/svelte/pull/14208))\n\n- fix: account for shadowing children slot during migration ([#14224](https://github.com/sveltejs/svelte/pull/14224))\n\n- fix: ensure explicit nesting selector is always applied ([#14193](https://github.com/sveltejs/svelte/pull/14193))\n\n- fix: add `lang=\"ts\"` attribute during migration if needed ([#14222](https://github.com/sveltejs/svelte/pull/14222))\n\n## 5.1.12\n\n### Patch Changes\n\n- fix: ignore `as` type expressions on property definitions ([#14181](https://github.com/sveltejs/svelte/pull/14181))\n\n- fix: restore active reaction if then block throws ([#14191](https://github.com/sveltejs/svelte/pull/14191))\n\n- chore: adds legacy mode flag reducing bundle size in runes mode only apps ([#14180](https://github.com/sveltejs/svelte/pull/14180))\n\n## 5.1.11\n\n### Patch Changes\n\n- fix: error on TypeScript's `readonly` modifier ([#14153](https://github.com/sveltejs/svelte/pull/14153))\n\n- fix: remove scoping for `:not` selectors ([#14177](https://github.com/sveltejs/svelte/pull/14177))\n\n## 5.1.10\n\n### Patch Changes\n\n- fix: ensure non-matching elements are scoped for `:not(...)` selector ([#13999](https://github.com/sveltejs/svelte/pull/13999))\n\n- fix: ensure video elements autoplay in safari ([#14095](https://github.com/sveltejs/svelte/pull/14095))\n\n- fix: ensure trailing multiline comments on props produce correct code (#14143#issuecomment-2455702689) ([#14143](https://github.com/sveltejs/svelte/pull/14143))\n\n- fix: correctly infer `<a>` tag namespace ([#14134](https://github.com/sveltejs/svelte/pull/14134))\n\n- fix: check options namespace for top level `svelte:element`s ([#14101](https://github.com/sveltejs/svelte/pull/14101))\n\n- fix: ensure migrate keeps inline/trailing comments in $props type definition ([#14143](https://github.com/sveltejs/svelte/pull/14143))\n\n- fix: update links in JSDoc ([#14165](https://github.com/sveltejs/svelte/pull/14165))\n\n- fix: ensure SvelteMap and SvelteSet work with generators in dev ([#14103](https://github.com/sveltejs/svelte/pull/14103))\n\n- fix: only output the key for each_key_duplicate ([#14147](https://github.com/sveltejs/svelte/pull/14147))\n\n- fix: prevent migrated snippet from shadow snippet prop ([#14127](https://github.com/sveltejs/svelte/pull/14127))\n\n- fix: pass along `anchor` in legacy class wrappers ([#14100](https://github.com/sveltejs/svelte/pull/14100))\n\n- fix: recognize all custom element prop definitions ([#14084](https://github.com/sveltejs/svelte/pull/14084))\n\n- fix: migrate multiple declarations with only some exported correctly ([#14126](https://github.com/sveltejs/svelte/pull/14126))\n\n## 5.1.9\n\n### Patch Changes\n\n- fix: ensure transitions are applied to nested elements ([#14080](https://github.com/sveltejs/svelte/pull/14080))\n\n## 5.1.8\n\n### Patch Changes\n\n- fix: ensure compiler statements are correctly included ([#14074](https://github.com/sveltejs/svelte/pull/14074))\n\n## 5.1.7\n\n### Patch Changes\n\n- fix: ensure each block inert items are disposed of if the each block is also inert ([#13930](https://github.com/sveltejs/svelte/pull/13930))\n\n- fix: allow `warningFilter` option for `compileModule` ([#14066](https://github.com/sveltejs/svelte/pull/14066))\n\n- fix: ensure onMount correctly fires when new expressions are used ([#14049](https://github.com/sveltejs/svelte/pull/14049))\n\n- fix: wrap `:id`, `:where``:not` and `:has` with `:global` during migration ([#13850](https://github.com/sveltejs/svelte/pull/13850))\n\n- fix: ensure custom element attribute/prop changes are in their own context ([#14016](https://github.com/sveltejs/svelte/pull/14016))\n\n## 5.1.6\n\n### Patch Changes\n\n- fix: ensure child effects are destroyed before their deriveds ([#14043](https://github.com/sveltejs/svelte/pull/14043))\n\n## 5.1.5\n\n### Patch Changes\n\n- fix: replace typo in compiler error messages ([#14044](https://github.com/sveltejs/svelte/pull/14044))\n\n- fix: preserve the separator between selectors when an unused selector is in between ([#13954](https://github.com/sveltejs/svelte/pull/13954))\n\n- fix: more robust re-subscribe detection for `fromStore` ([#13995](https://github.com/sveltejs/svelte/pull/13995))\n\n- fix: allow to pass in TS preference to migration ([#13929](https://github.com/sveltejs/svelte/pull/13929))\n\n- fix: extend derived/state validation error to indirect exports ([#14039](https://github.com/sveltejs/svelte/pull/14039))\n\n- fix: minify inject CSS in prod mode ([#14006](https://github.com/sveltejs/svelte/pull/14006))\n\n- fix: ensure toStore subscription correctly syncs latest value ([#14015](https://github.com/sveltejs/svelte/pull/14015))\n\n- fix: don't access `requestAnimationFrame` until needed to reduce need for mocks during testing ([#14040](https://github.com/sveltejs/svelte/pull/14040))\n\n- fix: ensure element effects are executed in the correct order ([#14038](https://github.com/sveltejs/svelte/pull/14038))\n\n- fix: make compiler error extend from `Error` ([#14036](https://github.com/sveltejs/svelte/pull/14036))\n\n## 5.1.4\n\n### Patch Changes\n\n- fix: add empty stack to `CompileDiagnostic` to show error on build ([#13942](https://github.com/sveltejs/svelte/pull/13942))\n\n- fix: ensure effect_tracking correctly handles tracking reactions ([#14005](https://github.com/sveltejs/svelte/pull/14005))\n\n- fix: update broken links ([#13944](https://github.com/sveltejs/svelte/pull/13944))\n\n- fix: more exhaustive check during `SvelteMap.set` in deriveds ([#13951](https://github.com/sveltejs/svelte/pull/13951))\n\n- fix: trim whitespace while migrating blocks ([#13941](https://github.com/sveltejs/svelte/pull/13941))\n\n- fix: update links that previously pointed to preview site ([#14001](https://github.com/sveltejs/svelte/pull/14001))\n\n- fix: properly migrate imports types prefixed with $ ([#14007](https://github.com/sveltejs/svelte/pull/14007))\n\n## 5.1.3\n\n### Patch Changes\n\n- fix: rethrow errors from await block if no catch block exists ([#13819](https://github.com/sveltejs/svelte/pull/13819))\n\n- fix: ensure SVG element attributes have case preserved ([#13935](https://github.com/sveltejs/svelte/pull/13935))\n\n- fix: ensure bind:group works as intended with proxied state objects ([#13939](https://github.com/sveltejs/svelte/pull/13939))\n\n- fix: ensure value is correctly set to zero on the progress element ([#13924](https://github.com/sveltejs/svelte/pull/13924))\n\n- fix: skip comment nodes in snippet validation logic ([#13936](https://github.com/sveltejs/svelte/pull/13936))\n\n- fix: typo in `Action` types ([#13874](https://github.com/sveltejs/svelte/pull/13874))\n\n- fix: remove metadata from legacy AST ([#13927](https://github.com/sveltejs/svelte/pull/13927))\n\n## 5.1.2\n\n### Patch Changes\n\n- fix: improve consistency of transitions ([#13895](https://github.com/sveltejs/svelte/pull/13895))\n\n- fix: enable bound store props in runes mode components ([#13887](https://github.com/sveltejs/svelte/pull/13887))\n\n- fix: ensure each block references to imports are handled correctly ([#13892](https://github.com/sveltejs/svelte/pull/13892))\n\n- fix: ensure SvelteMap reactivity persists through deriveds ([#13877](https://github.com/sveltejs/svelte/pull/13877))\n\n- fix: ensure snippets after empty text correctly hydrate ([#13870](https://github.com/sveltejs/svelte/pull/13870))\n\n- fix: prevent migration script from adding `props.` to the `export let` identifier ([#13899](https://github.com/sveltejs/svelte/pull/13899))\n\n- fix: prevent var name clashing for delegated events without params ([#13896](https://github.com/sveltejs/svelte/pull/13896))\n\n## 5.1.1\n\n### Patch Changes\n\n- fix: internally wrap store subscribe in untrack ([#13858](https://github.com/sveltejs/svelte/pull/13858))\n\n- fix: allow binding to const with spread in legacy mode ([#13849](https://github.com/sveltejs/svelte/pull/13849))\n\n- fix: ensure props internally untracks current_value on sets ([#13859](https://github.com/sveltejs/svelte/pull/13859))\n\n- fix: properly traverse children when checking matches for `:has` ([#13866](https://github.com/sveltejs/svelte/pull/13866))\n\n## 5.1.0\n\n### Minor Changes\n\n- feat: export mount() options as the MountOptions type ([#13674](https://github.com/sveltejs/svelte/pull/13674))\n\n- feat: allow usage of getContext() within $derived runes ([#13830](https://github.com/sveltejs/svelte/pull/13830))\n\n### Patch Changes\n\n- fix: properly migrate ts with inferred type comments ([#13761](https://github.com/sveltejs/svelte/pull/13761))\n\n- fix: correct property name conversion in custom transitions ([#13820](https://github.com/sveltejs/svelte/pull/13820))\n\n- fix: ensure $effect.tracking returns false inside transition functions ([#13775](https://github.com/sveltejs/svelte/pull/13775))\n\n- fix: migrate default slots to children snippet ([#13760](https://github.com/sveltejs/svelte/pull/13760))\n\n- fix: don't print errors on migration errors ([#13754](https://github.com/sveltejs/svelte/pull/13754))\n\n- fix: prevent spread attribute from overriding class directive ([#13763](https://github.com/sveltejs/svelte/pull/13763))\n\n- fix: ensure `:has` selectors followed by other selectors match ([#13824](https://github.com/sveltejs/svelte/pull/13824))\n\n- fix: ensure muted DOM property works correctly in FF ([#13751](https://github.com/sveltejs/svelte/pull/13751))\n\n- fix: show filename information in `legacy_recursive_reactive_block` ([#13764](https://github.com/sveltejs/svelte/pull/13764))\n\n## 5.0.5\n\n### Patch Changes\n\n- fix: mark `:has` selectors with multiple preceding selectors as used ([#13750](https://github.com/sveltejs/svelte/pull/13750))\n\n- fix: ensure event context is reset before invoking callback ([#13737](https://github.com/sveltejs/svelte/pull/13737))\n\n- fix: add more robust check for `Element` prototype ([#13744](https://github.com/sveltejs/svelte/pull/13744))\n\n- fix: do not comment out unused selectors that are inside an unused selector ([#13746](https://github.com/sveltejs/svelte/pull/13746))\n\n- fix: more accurately detect `$derived` migration opportunities ([#13740](https://github.com/sveltejs/svelte/pull/13740))\n\n- fix: @debug does not work with proxied-state ([#13690](https://github.com/sveltejs/svelte/pull/13690))\n\n- fix: do not add jsdoc if no types found ([#13738](https://github.com/sveltejs/svelte/pull/13738))\n\n## 5.0.4\n\n### Patch Changes\n\n- fix: webview preload tag can be any string ([#13733](https://github.com/sveltejs/svelte/pull/13733))\n\n- fix: better children snippet / default slot interop ([#13734](https://github.com/sveltejs/svelte/pull/13734))\n\n## 5.0.3\n\n### Patch Changes\n\n- chore: ensure transition events are dispatched without current reaction ([#13719](https://github.com/sveltejs/svelte/pull/13719))\n\n## 5.0.2\n\n### Patch Changes\n\n- fix: don't blank css on migration error ([#13703](https://github.com/sveltejs/svelte/pull/13703))\n\n## 5.0.1\n\n### Patch Changes\n\n- fix: use typedef for JSDoc props and maintain comments ([#13698](https://github.com/sveltejs/svelte/pull/13698))\n\n## 5.0.0\n\nA new major version of Svelte has been released! 🎉\n\nThe new version brings:\n\n- even better performance,\n- a more granular reactivity system with runes,\n- more expressive template syntax with snippets and event attributes,\n- native TypeScript support,\n- and backwards compatibility with the previous syntax!\n\nFor more details check out the [Svelte docs](https://svelte-omnisite.vercel.app/) and the [migration guide](https://svelte-omnisite.vercel.app/docs/svelte/v5-migration-guide).\n\n## 5.0.0-next.272\n\n### Patch Changes\n\n- fix: ensure user effects are correctly executed on initialisation ([#13697](https://github.com/sveltejs/svelte/pull/13697))\n\n- breaking: state mutations inside the template are no longer allowed ([#13660](https://github.com/sveltejs/svelte/pull/13660))\n\n## 5.0.0-next.271\n\n### Patch Changes\n\n- fix: avoid chromium issue with dispatching blur on element removal ([#13694](https://github.com/sveltejs/svelte/pull/13694))\n\n## 5.0.0-next.270\n\n### Patch Changes\n\n- fix: bail out if slot name changes and $slots assigned to variable ([#13678](https://github.com/sveltejs/svelte/pull/13678))\n\n- feat: add `migration-task` for impossible to migrate slots ([#13658](https://github.com/sveltejs/svelte/pull/13658))\n\n- feat: tell users of `@migration-task` ([#13668](https://github.com/sveltejs/svelte/pull/13668))\n\n- fix: correct migration of uninitialised state ([#13673](https://github.com/sveltejs/svelte/pull/13673))\n\n- fix: ensure migrate correctly handles named slots ([#13676](https://github.com/sveltejs/svelte/pull/13676))\n\n- feat: add `migration-task` comment after errors ([#13659](https://github.com/sveltejs/svelte/pull/13659))\n\n- fix: migrate reactive statements with inner blocks ([#13675](https://github.com/sveltejs/svelte/pull/13675))\n\n- fix: migrating rest props type includes props types ([#13632](https://github.com/sveltejs/svelte/pull/13632))\n\n- fix: migrated snippet shadowing prop and let directive removal ([#13679](https://github.com/sveltejs/svelte/pull/13679))\n\n- chore: CompileDiagnostic no longer extends Error ([#13651](https://github.com/sveltejs/svelte/pull/13651))\n\n- fix: reset `reset_element` in `render` to prevent runtime error ([#13669](https://github.com/sveltejs/svelte/pull/13669))\n\n## 5.0.0-next.269\n\n### Patch Changes\n\n- fix: transitions within dynamic components now function correctly ([#13646](https://github.com/sveltejs/svelte/pull/13646))\n\n- fix: use `internal_set` in `await` block ([#13642](https://github.com/sveltejs/svelte/pull/13642))\n\n- fix: correctly applies autofocus to static elements ([#13648](https://github.com/sveltejs/svelte/pull/13648))\n\n- fix: `method` attribute is case insensitive ([#13639](https://github.com/sveltejs/svelte/pull/13639))\n\n- chore: avoid reporting inspections when an exception occurs ([#13601](https://github.com/sveltejs/svelte/pull/13601))\n\n- fix: ensure legacy run utility does not cause cycles ([#13643](https://github.com/sveltejs/svelte/pull/13643))\n\n- fix: better migration for leading and trailing comments ([#13630](https://github.com/sveltejs/svelte/pull/13630))\n\n## 5.0.0-next.268\n\n### Patch Changes\n\n- breaking: disallow state mutations in logic block expression ([#13625](https://github.com/sveltejs/svelte/pull/13625))\n\n- breaking: stronger enumerated types ([#13624](https://github.com/sveltejs/svelte/pull/13624))\n\n- chore: improve runtime performance of derived signals ([#13626](https://github.com/sveltejs/svelte/pull/13626))\n\n## 5.0.0-next.267\n\n### Patch Changes\n\n- fix: ensure inserted code is preserved during migration ([#13617](https://github.com/sveltejs/svelte/pull/13617))\n\n- fix: ensure each block consistency to internal mutations to the collection ([#13614](https://github.com/sveltejs/svelte/pull/13614))\n\n- chore: improve derived ownership model ([#13623](https://github.com/sveltejs/svelte/pull/13623))\n\n- fix: ensure await block scope transforms are isolated ([#13622](https://github.com/sveltejs/svelte/pull/13622))\n\n## 5.0.0-next.266\n\n### Patch Changes\n\n- feat: add hidden until-found and beforematch ([#13612](https://github.com/sveltejs/svelte/pull/13612))\n\n- fix: ensure local prop value is read during teardown ([#13611](https://github.com/sveltejs/svelte/pull/13611))\n\n- fix: take snippets into account when scoping CSS ([#13589](https://github.com/sveltejs/svelte/pull/13589))\n\n- breaking: scope `:not(...)` selectors ([#13568](https://github.com/sveltejs/svelte/pull/13568))\n\n- breaking: scope `:has(...)` selectors ([#13567](https://github.com/sveltejs/svelte/pull/13567))\n\n## 5.0.0-next.265\n\n### Patch Changes\n\n- fix: ensure source and filename are known to compileModule's source map ([#13546](https://github.com/sveltejs/svelte/pull/13546))\n\n- fix: cleanup non-branch effects created inside block effects ([#13600](https://github.com/sveltejs/svelte/pull/13600))\n\n- fix: do no rerun the each block when array change from empty to empty ([#13553](https://github.com/sveltejs/svelte/pull/13553))\n\n- fix: ensure effects destroy owned deriveds upon teardown ([#13563](https://github.com/sveltejs/svelte/pull/13563))\n\n- fix: ensure proxied arrays correctly update their length upon deletions ([#13549](https://github.com/sveltejs/svelte/pull/13549))\n\n- fix: avoid assigning input.value if the value is the same to fix `minlength` ([#13574](https://github.com/sveltejs/svelte/pull/13574))\n\n- fix: use `analysis.name` when migrating `<svelte:self>` ([#13544](https://github.com/sveltejs/svelte/pull/13544))\n\n- fix: strip BOM character from input ([#13548](https://github.com/sveltejs/svelte/pull/13548))\n\n## 5.0.0-next.264\n\n### Patch Changes\n\n- fix: exclude custom elements from HTML tree validation ([#13540](https://github.com/sveltejs/svelte/pull/13540))\n\n- fix: apply class/style directives after attributes ([#13535](https://github.com/sveltejs/svelte/pull/13535))\n\n- fix: make immutable option work more correctly ([#13526](https://github.com/sveltejs/svelte/pull/13526))\n\n- breaking: use `<svelte-css-wrapper>` instead of `<div>` for style props ([#13499](https://github.com/sveltejs/svelte/pull/13499))\n\n- fix: mark custom element with virtual class attribute as dynamic ([#13435](https://github.com/sveltejs/svelte/pull/13435))\n\n- fix: ensure set_text applies coercion to objects before diff ([#13542](https://github.com/sveltejs/svelte/pull/13542))\n\n## 5.0.0-next.263\n\n### Patch Changes\n\n- fix: add media listeners immediately when using `bind:paused` ([#13502](https://github.com/sveltejs/svelte/pull/13502))\n\n- fix: further improve reconciliation of inert each block rows ([#13527](https://github.com/sveltejs/svelte/pull/13527))\n\n- feat: add types for the search element ([#13489](https://github.com/sveltejs/svelte/pull/13489))\n\n- feat: support migrating `svelte:self` ([#13504](https://github.com/sveltejs/svelte/pull/13504))\n\n- feat: support migration of single assignment labeled statements ([#13461](https://github.com/sveltejs/svelte/pull/13461))\n\n- fix: correctly migrate `$slots` with bracket member expressions & slots with static props ([#13468](https://github.com/sveltejs/svelte/pull/13468))\n\n- feat: migrate slot usages ([#13500](https://github.com/sveltejs/svelte/pull/13500))\n\n- fix: recreate `SvelteDate` methods deriveds if they are destroyed ([#13515](https://github.com/sveltejs/svelte/pull/13515))\n\n- fix: allow imports from `svelte/legacy` in SSR ([#13523](https://github.com/sveltejs/svelte/pull/13523))\n\n## 5.0.0-next.262\n\n### Patch Changes\n\n- feat: enable snippets to fill slots ([#13427](https://github.com/sveltejs/svelte/pull/13427))\n\n- fix: strip internal properties from rest props during SSR ([#13492](https://github.com/sveltejs/svelte/pull/13492))\n\n- fix: allow combinator at start of nested CSS selector ([#13440](https://github.com/sveltejs/svelte/pull/13440))\n\n## 5.0.0-next.261\n\n### Patch Changes\n\n- fix: migrate `$Props` without creating non existent props ([#13484](https://github.com/sveltejs/svelte/pull/13484))\n\n- feat: support migration of `svelte:component` ([#13437](https://github.com/sveltejs/svelte/pull/13437))\n\n- feat: fix accessors and support migration of accessors ([#13456](https://github.com/sveltejs/svelte/pull/13456))\n\n- fix: move labeled statements that need reordering after props insertion point ([#13480](https://github.com/sveltejs/svelte/pull/13480))\n\n- feat: support migration of self closing tags ([#13479](https://github.com/sveltejs/svelte/pull/13479))\n\n- fix: various `svelte:component` migration bugs ([#13473](https://github.com/sveltejs/svelte/pull/13473))\n\n- fix: exclude type-only props from instance exports when migrating ([#13485](https://github.com/sveltejs/svelte/pull/13485))\n\n## 5.0.0-next.260\n\n### Patch Changes\n\n- fix: ensure use directives execute in the correct sequence ([#13384](https://github.com/sveltejs/svelte/pull/13384))\n\n- fix: blank CSS contents while migrating ([#13403](https://github.com/sveltejs/svelte/pull/13403))\n\n- fix: avoid migrating slots in custom elements ([#13406](https://github.com/sveltejs/svelte/pull/13406))\n\n- fix: don't consider children of rules when checking whether they are used or not ([#13410](https://github.com/sveltejs/svelte/pull/13410))\n\n- fix: treat `<img>` alt attribute as content for a11y labelling purposes ([#13411](https://github.com/sveltejs/svelte/pull/13411))\n\n- fix: make ownership widening more robust to userland proxies ([#13377](https://github.com/sveltejs/svelte/pull/13377))\n\n- fix: validation should not fail on anonymous declarations ([#13393](https://github.com/sveltejs/svelte/pull/13393))\n\n## 5.0.0-next.259\n\n### Patch Changes\n\n- fix: higher fidelity event migration ([#13362](https://github.com/sveltejs/svelte/pull/13362))\n\n- fix: properly remove root anchor node on unmount ([#13381](https://github.com/sveltejs/svelte/pull/13381))\n\n- fix: improve reconciliation of inert each block rows ([#13379](https://github.com/sveltejs/svelte/pull/13379))\n\n## 5.0.0-next.258\n\n### Patch Changes\n\n- fix: only use getComputedStyle with elements ([#13366](https://github.com/sveltejs/svelte/pull/13366))\n\n- fix: make each items reassignable in legacy mode ([#12257](https://github.com/sveltejs/svelte/pull/12257))\n\n## 5.0.0-next.257\n\n### Patch Changes\n\n- fix: only set attribute as property if element has setter ([#13341](https://github.com/sveltejs/svelte/pull/13341))\n\n## 5.0.0-next.256\n\n### Patch Changes\n\n- fix: only warn on context=\"module\" in runes mode ([#13332](https://github.com/sveltejs/svelte/pull/13332))\n\n- feat: deprecate `<svelte:self>` in runes mode ([#13333](https://github.com/sveltejs/svelte/pull/13333))\n\n- fix: set strings as attributes, non-strings as properties if property exists ([#13327](https://github.com/sveltejs/svelte/pull/13327))\n\n## 5.0.0-next.255\n\n### Patch Changes\n\n- fix: keep bound inputs in sync in runes mode ([#13328](https://github.com/sveltejs/svelte/pull/13328))\n\n- fix: silence snapshot warnings inside `$inspect` ([#13334](https://github.com/sveltejs/svelte/pull/13334))\n\n## 5.0.0-next.254\n\n### Patch Changes\n\n- feat: account for `zoom` when calculating animation transforms ([#13317](https://github.com/sveltejs/svelte/pull/13317))\n\n## 5.0.0-next.253\n\n### Patch Changes\n\n- fix: delete transformers shadowed by unreassigned state ([#13316](https://github.com/sveltejs/svelte/pull/13316))\n\n- fix: don't make wheel events passive by default ([#13322](https://github.com/sveltejs/svelte/pull/13322))\n\n## 5.0.0-next.252\n\n### Patch Changes\n\n- fix: handle `$Props` interface during migration ([#13305](https://github.com/sveltejs/svelte/pull/13305))\n\n- fix: attach effects-inside-deriveds to the parent of the derived ([#13309](https://github.com/sveltejs/svelte/pull/13309))\n\n- fix: simplify and robustify appending styles ([#13303](https://github.com/sveltejs/svelte/pull/13303))\n\n## 5.0.0-next.251\n\n### Patch Changes\n\n- fix: improve performance of scheduling effects ([#13300](https://github.com/sveltejs/svelte/pull/13300))\n\n## 5.0.0-next.250\n\n### Patch Changes\n\n- fix: correctly migrate sequence expressions ([#13291](https://github.com/sveltejs/svelte/pull/13291))\n\n- fix: avoid disconnecting deriveds that are still active ([#13292](https://github.com/sveltejs/svelte/pull/13292))\n\n- feat: Add accessibility warnings for buttons and anchors without explicit labels and content ([#13130](https://github.com/sveltejs/svelte/pull/13130))\n\n## 5.0.0-next.249\n\n### Patch Changes\n\n- fix: ensure snapshot logs don't affect dependency graph ([#13286](https://github.com/sveltejs/svelte/pull/13286))\n\n- fix: allow custom element styles to be updated in HMR mode ([#13225](https://github.com/sveltejs/svelte/pull/13225))\n\n- fix: inject styles correctly when mounting inside an iframe ([#13225](https://github.com/sveltejs/svelte/pull/13225))\n\n## 5.0.0-next.248\n\n### Patch Changes\n\n- feat: provide guidance in browser console when logging $state objects ([#13142](https://github.com/sveltejs/svelte/pull/13142))\n\n- fix: ensure correct parent effect is associated with render effects ([#13274](https://github.com/sveltejs/svelte/pull/13274))\n\n- feat: unwrap function expressions where possible, and optimise bindings ([#13269](https://github.com/sveltejs/svelte/pull/13269))\n\n## 5.0.0-next.247\n\n### Patch Changes\n\n- fix: wait until template strings are complete before sanitizing ([#13262](https://github.com/sveltejs/svelte/pull/13262))\n\n- fix: avoid flushing sync with $inspect ([#13239](https://github.com/sveltejs/svelte/pull/13239))\n\n- fix: separate `template_effect` for dynamic class/style directive with dynamic attributes ([#13171](https://github.com/sveltejs/svelte/pull/13171))\n\n- fix: treat pure call expressions as potentially reactive if they reference local bindings ([#13264](https://github.com/sveltejs/svelte/pull/13264))\n\n- fix: follow spec for `customElement` option ([#13247](https://github.com/sveltejs/svelte/pull/13247))\n\n- fix: tighten up `# svelte prefix validation ([#13261](https://github.com/sveltejs/svelte/pull/13261))\n\n## 5.0.0-next.246\n\n### Patch Changes\n\n- perf: inline module variables into template ([#13075](https://github.com/sveltejs/svelte/pull/13075))\n\n- fix: allow custom element events on slot to bubble inside custom element ([#13222](https://github.com/sveltejs/svelte/pull/13222))\n\n- fix: add missing `autocomplete` attribute tokens ([#13229](https://github.com/sveltejs/svelte/pull/13229))\n\n- feat: add infinite loop effect callstack ([#13231](https://github.com/sveltejs/svelte/pull/13231))\n\n## 5.0.0-next.245\n\n### Patch Changes\n\n- fix: visit expression for `svelte:component` references ([#13151](https://github.com/sveltejs/svelte/pull/13151))\n\n- fix: ensure signal graph is consistent before triggering $inspect signals ([#13153](https://github.com/sveltejs/svelte/pull/13153))\n\n- feat: better types for the `autocomplete` attribute ([#13201](https://github.com/sveltejs/svelte/pull/13201))\n\n- fix: widen ownership upon property access if necessary ([#13175](https://github.com/sveltejs/svelte/pull/13175))\n\n- fix: don't show `state_referenced_locally` warning on types ([#13177](https://github.com/sveltejs/svelte/pull/13177))\n\n- fix: ensure locally mutated bindable props persist with spreading props ([#13190](https://github.com/sveltejs/svelte/pull/13190))\n\n- fix: try catch `strict_equals` to avoid error accessing `STATE_SYMBOL` ([#13216](https://github.com/sveltejs/svelte/pull/13216))\n\n- fix: ensure types are easier to follow for TypeScript ([#13140](https://github.com/sveltejs/svelte/pull/13140))\n\n- fix: ensure $inspect effects are fine-grain ([#13199](https://github.com/sveltejs/svelte/pull/13199))\n\n- fix: ensure unowned derived signals correctly re-connect to graph ([#13184](https://github.com/sveltejs/svelte/pull/13184))\n\n- fix: ensure inner script tags are properly removed ([#13152](https://github.com/sveltejs/svelte/pull/13152))\n\n- chore: improve ssr parent validation ([#13158](https://github.com/sveltejs/svelte/pull/13158))\n\n- fix: prevent nullish snippet for rendering empty content ([#13083](https://github.com/sveltejs/svelte/pull/13083))\n\n- fix: allow more characters in the unicode range as component identifiers ([#13198](https://github.com/sveltejs/svelte/pull/13198))\n\n- fix: allow for nesting selector in pseudoclasses ([#13209](https://github.com/sveltejs/svelte/pull/13209))\n\n- fix: ensure StyleDirective and ClassDirective are marked as dynamic ([#13205](https://github.com/sveltejs/svelte/pull/13205))\n\n## 5.0.0-next.244\n\n### Patch Changes\n\n- fix: error on duplicate style and class directive ([#13097](https://github.com/sveltejs/svelte/pull/13097))\n\n- fix: ensure $host rune correctly compiles in variable declarations ([#13127](https://github.com/sveltejs/svelte/pull/13127))\n\n- fix: remove unnecessary update assignments ([#13113](https://github.com/sveltejs/svelte/pull/13113))\n\n- fix: error at compile time on unsupported TypeScript language features ([#12982](https://github.com/sveltejs/svelte/pull/12982))\n\n- fix: Ensure imports are above other statements ([#13132](https://github.com/sveltejs/svelte/pull/13132))\n\n## 5.0.0-next.243\n\n### Patch Changes\n\n- fix: ensure reactive graph is fully traversed in the marking phase for non-runes mode ([#13059](https://github.com/sveltejs/svelte/pull/13059))\n\n- fix: ensure reactivity system remains consistent with removals ([#13087](https://github.com/sveltejs/svelte/pull/13087))\n\n- fix: render undefined html as the empty string ([#13092](https://github.com/sveltejs/svelte/pull/13092))\n\n- fix: error on incorrect attributes for svelte:body ([#13084](https://github.com/sveltejs/svelte/pull/13084))\n\n- feat: provide AST node types with internal types stripped out ([#12968](https://github.com/sveltejs/svelte/pull/12968))\n\n## 5.0.0-next.242\n\n### Patch Changes\n\n- fix: insert comment before text in an each block, to prevent glued nodes ([#13073](https://github.com/sveltejs/svelte/pull/13073))\n\n- feat: better generated each block code in SSR mode ([#13060](https://github.com/sveltejs/svelte/pull/13060))\n\n## 5.0.0-next.241\n\n### Patch Changes\n\n- fix: prevent div/0 when generating transition keyframes ([#13058](https://github.com/sveltejs/svelte/pull/13058))\n\n- fix: error on invalid element name ([#13057](https://github.com/sveltejs/svelte/pull/13057))\n\n- fix: better compile errors for invalid tag names/placement ([#13045](https://github.com/sveltejs/svelte/pull/13045))\n\n- fix: ensure event currentTarget is reset after propagation logic ([#13042](https://github.com/sveltejs/svelte/pull/13042))\n\n## 5.0.0-next.240\n\n### Patch Changes\n\n- fix: use WAAPI to control timing of JS-based animations ([#13018](https://github.com/sveltejs/svelte/pull/13018))\n\n- fix: prevent binding to imports ([#13035](https://github.com/sveltejs/svelte/pull/13035))\n\n- fix: never abort bidirectional transitions ([#13018](https://github.com/sveltejs/svelte/pull/13018))\n\n## 5.0.0-next.239\n\n### Patch Changes\n\n- fix: properly handle proxied array length mutations ([#13026](https://github.com/sveltejs/svelte/pull/13026))\n\n- fix: repair `href` attribute mismatches ([#13032](https://github.com/sveltejs/svelte/pull/13032))\n\n## 5.0.0-next.238\n\n### Patch Changes\n\n- fix: always return true from `deleteProperty` trap ([#13008](https://github.com/sveltejs/svelte/pull/13008))\n\n- fix: handle deletions of previously-unread state proxy properties ([#13008](https://github.com/sveltejs/svelte/pull/13008))\n\n- fix: make internal sources ownerless ([#13013](https://github.com/sveltejs/svelte/pull/13013))\n\n- fix: join text nodes separated by comments ([#13009](https://github.com/sveltejs/svelte/pull/13009))\n\n## 5.0.0-next.237\n\n### Patch Changes\n\n- breaking: throw error if derived creates state and then depends on it ([#12985](https://github.com/sveltejs/svelte/pull/12985))\n\n- fix: ensure assignments to state field inside constructor trigger effects ([#12985](https://github.com/sveltejs/svelte/pull/12985))\n\n- fix: ensure $inspect works with SvelteMap and SvelteSet ([#12994](https://github.com/sveltejs/svelte/pull/12994))\n\n- chore: default options.filename to \"(unknown)\" ([#12997](https://github.com/sveltejs/svelte/pull/12997))\n\n- feat: allow non-synchronous legacy component instantiation ([#12970](https://github.com/sveltejs/svelte/pull/12970))\n\n## 5.0.0-next.236\n\n### Patch Changes\n\n- fix: properly transform destructured `$derived.by` declarations ([#12984](https://github.com/sveltejs/svelte/pull/12984))\n\n## 5.0.0-next.235\n\n### Patch Changes\n\n- chore: update client check for smaller bundle size ([#12975](https://github.com/sveltejs/svelte/pull/12975))\n\n- fix: correctly hydrate empty raw blocks ([#12979](https://github.com/sveltejs/svelte/pull/12979))\n\n## 5.0.0-next.234\n\n### Patch Changes\n\n- fix: allow deleting non-existent `$restProps` properties ([#12971](https://github.com/sveltejs/svelte/pull/12971))\n\n- feat: only traverse trailing static nodes during hydration ([#12935](https://github.com/sveltejs/svelte/pull/12935))\n\n## 5.0.0-next.233\n\n### Patch Changes\n\n- fix: more robust handling of var declarations ([#12949](https://github.com/sveltejs/svelte/pull/12949))\n\n- fix: remove buggy `validate_dynamic_component` check ([#12960](https://github.com/sveltejs/svelte/pull/12960))\n\n## 5.0.0-next.232\n\n### Patch Changes\n\n- breaking: remove `$state.link` rune pending further design work ([#12943](https://github.com/sveltejs/svelte/pull/12943))\n\n- fix: ensure `$store` reads are properly transformed ([#12952](https://github.com/sveltejs/svelte/pull/12952))\n\n- breaking: deprecate `context=\"module\"` in favor of `module` ([#12948](https://github.com/sveltejs/svelte/pull/12948))\n\n## 5.0.0-next.231\n\n### Patch Changes\n\n- breaking: remove callback from `$state.link` ([#12942](https://github.com/sveltejs/svelte/pull/12942))\n\n## 5.0.0-next.230\n\n### Patch Changes\n\n- fix: align list of passive events with browser defaults ([#12933](https://github.com/sveltejs/svelte/pull/12933))\n\n- fix: ensure `{#await}` scope shadowing is computed in the correct order ([#12945](https://github.com/sveltejs/svelte/pull/12945))\n\n- fix: don't skip custom elements with attributes ([#12939](https://github.com/sveltejs/svelte/pull/12939))\n\n## 5.0.0-next.229\n\n### Patch Changes\n\n- feat: add `$state.link` rune ([#12545](https://github.com/sveltejs/svelte/pull/12545))\n\n- fix: allow mixing slots and snippets in custom elements mode ([#12929](https://github.com/sveltejs/svelte/pull/12929))\n\n- fix: small legibility improvement in `Snippet` type hint ([#12928](https://github.com/sveltejs/svelte/pull/12928))\n\n- feat: support HMR with custom elements ([#12926](https://github.com/sveltejs/svelte/pull/12926))\n\n- feat: error on invalid component name ([#12821](https://github.com/sveltejs/svelte/pull/12821))\n\n## 5.0.0-next.228\n\n### Patch Changes\n\n- feat: skip over static nodes in compiled client code ([#12914](https://github.com/sveltejs/svelte/pull/12914))\n\n## 5.0.0-next.227\n\n### Patch Changes\n\n- breaking: disallow `Object.defineProperty` on state proxies with non-basic descriptors ([#12916](https://github.com/sveltejs/svelte/pull/12916))\n\n- breaking: allow frozen objects to be proxied ([#12916](https://github.com/sveltejs/svelte/pull/12916))\n\n- breaking: avoid mutations to underlying proxied object with $state ([#12916](https://github.com/sveltejs/svelte/pull/12916))\n\n- breaking: remove $state.is rune ([#12916](https://github.com/sveltejs/svelte/pull/12916))\n\n## 5.0.0-next.226\n\n### Patch Changes\n\n- fix: ensure typings for `<svelte:options>` are picked up ([#12903](https://github.com/sveltejs/svelte/pull/12903))\n\n- fix: exclude local declarations from non-reactive property warnings ([#12909](https://github.com/sveltejs/svelte/pull/12909))\n\n## 5.0.0-next.225\n\n### Patch Changes\n\n- chore: improve the performance of set_text for single expressions ([#12893](https://github.com/sveltejs/svelte/pull/12893))\n\n- fix: add cleanup function signature to `createRawSnippet` ([#12894](https://github.com/sveltejs/svelte/pull/12894))\n\n- feat: more efficient checking for missing SSR text node ([#12891](https://github.com/sveltejs/svelte/pull/12891))\n\n- fix: ensure nullish expressions render empty text ([#12898](https://github.com/sveltejs/svelte/pull/12898))\n\n## 5.0.0-next.224\n\n### Patch Changes\n\n- chore: inline start and end node properties into effect ([#12878](https://github.com/sveltejs/svelte/pull/12878))\n\n- fix: correctly ensure prop bindings are reactive when bound ([#12879](https://github.com/sveltejs/svelte/pull/12879))\n\n- fix: remove sapper bindings ([#12875](https://github.com/sveltejs/svelte/pull/12875))\n\n- chore: refactor internal signal dependency heuristic ([#12881](https://github.com/sveltejs/svelte/pull/12881))\n\n- fix: allow store as initial value for props in ssr ([#12885](https://github.com/sveltejs/svelte/pull/12885))\n\n## 5.0.0-next.223\n\n### Patch Changes\n\n- fix: treat module-level imports as non-reactive in legacy mode ([#12845](https://github.com/sveltejs/svelte/pull/12845))\n\n- breaking: remove foreign namespace ([#12869](https://github.com/sveltejs/svelte/pull/12869))\n\n- feat: more efficient text-only fragments ([#12864](https://github.com/sveltejs/svelte/pull/12864))\n\n- fix: ensure outro animation is not prematurely aborted ([#12865](https://github.com/sveltejs/svelte/pull/12865))\n\n- chore: improve performance of DOM traversal operations ([#12863](https://github.com/sveltejs/svelte/pull/12863))\n\n- feat: better destructuring assignments ([#12872](https://github.com/sveltejs/svelte/pull/12872))\n\n- fix: stricter `crossorigin` and `wrap` attributes types ([#12858](https://github.com/sveltejs/svelte/pull/12858))\n\n## 5.0.0-next.222\n\n### Patch Changes\n\n- fix: avoid throwing `store_invalid_subscription_module` for runes ([#12848](https://github.com/sveltejs/svelte/pull/12848))\n\n- fix: omit `$index` parameter where possible ([#12851](https://github.com/sveltejs/svelte/pull/12851))\n\n- feat: skip over static subtrees ([#12849](https://github.com/sveltejs/svelte/pull/12849))\n\n- chore: set `binding.kind` before analysis ([#12843](https://github.com/sveltejs/svelte/pull/12843))\n\n- feat: better compiler warnings for non-reactive dependencies of reactive statements ([#12824](https://github.com/sveltejs/svelte/pull/12824))\n\n- fix: skip unnecessary `$legacy` flag ([#12850](https://github.com/sveltejs/svelte/pull/12850))\n\n## 5.0.0-next.221\n\n### Patch Changes\n\n- fix: ensure onwheel is passive by default ([#12837](https://github.com/sveltejs/svelte/pull/12837))\n\n- chore: improve signal perf by using Set rather than array for reactions ([#12831](https://github.com/sveltejs/svelte/pull/12831))\n\n- fix: ensure each key validation occurs for updates ([#12836](https://github.com/sveltejs/svelte/pull/12836))\n\n## 5.0.0-next.220\n\n### Patch Changes\n\n- feat: warn on invalid event handlers ([#12818](https://github.com/sveltejs/svelte/pull/12818))\n\n## 5.0.0-next.219\n\n### Patch Changes\n\n- feat: add compiler error when encountering a $-prefixed store value outside a .svelte file ([#12799](https://github.com/sveltejs/svelte/pull/12799))\n\n## 5.0.0-next.218\n\n### Patch Changes\n\n- breaking: replace `$state.frozen` with `$state.raw` ([#12808](https://github.com/sveltejs/svelte/pull/12808))\n\n- fix: ensure inspect effects are skipped from effect parent logic ([#12810](https://github.com/sveltejs/svelte/pull/12810))\n\n## 5.0.0-next.217\n\n### Patch Changes\n\n- feat: deprecate `svelte:component` ([#12694](https://github.com/sveltejs/svelte/pull/12694))\n\n- feat: treat tag with `.` as a component, even if lowercase ([#12798](https://github.com/sveltejs/svelte/pull/12798))\n\n## 5.0.0-next.216\n\n### Patch Changes\n\n- feat: make custom element `tag` property optional ([#12754](https://github.com/sveltejs/svelte/pull/12754))\n\n- fix: improved memory profile for transitions/animations ([#12796](https://github.com/sveltejs/svelte/pull/12796))\n\n## 5.0.0-next.215\n\n### Patch Changes\n\n- fix: propagate custom element component prop changes ([#12774](https://github.com/sveltejs/svelte/pull/12774))\n\n- fix: prevent numerous transition/animation memory leaks ([#12759](https://github.com/sveltejs/svelte/pull/12759))\n\n## 5.0.0-next.214\n\n### Patch Changes\n\n- fix: ensure custom element styles append correctly during prod ([#12777](https://github.com/sveltejs/svelte/pull/12777))\n\n- fix: invalidate signals following ++/-- inside each block ([#12780](https://github.com/sveltejs/svelte/pull/12780))\n\n- feat: better code generation for destructuring assignments ([#12780](https://github.com/sveltejs/svelte/pull/12780))\n\n## 5.0.0-next.213\n\n### Patch Changes\n\n- fix: ensure custom elements do not sync flush on mount ([#12787](https://github.com/sveltejs/svelte/pull/12787))\n\n- fix: ensure event handlers referencing $host are not hoisted ([#12775](https://github.com/sveltejs/svelte/pull/12775))\n\n- fix: provide more hydration mismatch coverage ([#12755](https://github.com/sveltejs/svelte/pull/12755))\n\n- chore: simpler fallback values ([#12788](https://github.com/sveltejs/svelte/pull/12788))\n\n## 5.0.0-next.212\n\n### Patch Changes\n\n- perf: speed up $.exclude_from_object ([#12783](https://github.com/sveltejs/svelte/pull/12783))\n\n- chore: publish package provenance info ([#12779](https://github.com/sveltejs/svelte/pull/12779))\n\n- feat: simplify derived object destructuring ([#12781](https://github.com/sveltejs/svelte/pull/12781))\n\n## 5.0.0-next.211\n\n### Patch Changes\n\n- fix: improve prop binding warning validation for stores ([#12745](https://github.com/sveltejs/svelte/pull/12745))\n\n- chore: add error for derived self referencing ([#12746](https://github.com/sveltejs/svelte/pull/12746))\n\n- fix: skip `is_standalone` optimisation for dynamic components ([#12767](https://github.com/sveltejs/svelte/pull/12767))\n\n- fix: ensure unowned deriveds correctly update ([#12747](https://github.com/sveltejs/svelte/pull/12747))\n\n- fix: order of arguments for `push_element` in `svelte:element` ([#12763](https://github.com/sveltejs/svelte/pull/12763))\n\n## 5.0.0-next.210\n\n### Patch Changes\n\n- fix: avoid recreating handlers for component events ([#12722](https://github.com/sveltejs/svelte/pull/12722))\n\n- fix: call correct event handler for properties of non-reactive objects ([#12722](https://github.com/sveltejs/svelte/pull/12722))\n\n## 5.0.0-next.209\n\n### Patch Changes\n\n- fix: add css hash to custom element rendered with `svelte:element` ([#12715](https://github.com/sveltejs/svelte/pull/12715))\n\n- fix: correctly handle SvelteDate methods with arguments ([#12738](https://github.com/sveltejs/svelte/pull/12738))\n\n- fix: add touch events on microtask to avoid Chromium bug ([#12735](https://github.com/sveltejs/svelte/pull/12735))\n\n- fix: allow deletion of $restProps properties ([#12736](https://github.com/sveltejs/svelte/pull/12736))\n\n- feat: more efficient code generation when referencing globals ([#12712](https://github.com/sveltejs/svelte/pull/12712))\n\n## 5.0.0-next.208\n\n### Patch Changes\n\n- feat: add support for `<svelte:options css=\"injected\" />` ([#12660](https://github.com/sveltejs/svelte/pull/12660))\n\n- feat: function called as tagged template literal is reactively called ([#12692](https://github.com/sveltejs/svelte/pull/12692))\n\n## 5.0.0-next.207\n\n### Patch Changes\n\n- fix: only create `document.title` effect if value is dynamic ([#12698](https://github.com/sveltejs/svelte/pull/12698))\n\n## 5.0.0-next.206\n\n### Patch Changes\n\n- fix: allow nested `<dt>`/`<dd>` elements if they are within a `<dl>` element ([#12681](https://github.com/sveltejs/svelte/pull/12681))\n\n- chore: internal refactoring of client transform visitors ([#12683](https://github.com/sveltejs/svelte/pull/12683))\n\n## 5.0.0-next.205\n\n### Patch Changes\n\n- fix: always synchronously call `bind:this` ([#12679](https://github.com/sveltejs/svelte/pull/12679))\n\n## 5.0.0-next.204\n\n### Patch Changes\n\n- feat: allow ignoring runtime warnings ([#12608](https://github.com/sveltejs/svelte/pull/12608))\n\n- feat: perf tweaks for actions/styles/classes ([#12654](https://github.com/sveltejs/svelte/pull/12654))\n\n## 5.0.0-next.203\n\n### Patch Changes\n\n- chore: internal compiler refactoring ([#12651](https://github.com/sveltejs/svelte/pull/12651))\n\n- fix: widen `ComponentProps` constraint to accept more component shapes ([#12666](https://github.com/sveltejs/svelte/pull/12666))\n\n- feat: make `<svelte:component>` unnecessary in runes mode ([#12646](https://github.com/sveltejs/svelte/pull/12646))\n\n## 5.0.0-next.202\n\n### Patch Changes\n\n- fix: remove implicit passive behavior from OnDirective events ([#12645](https://github.com/sveltejs/svelte/pull/12645))\n\n- fix: always set draggable through `setAttribute` to avoid weird behavior ([#12649](https://github.com/sveltejs/svelte/pull/12649))\n\n## 5.0.0-next.201\n\n### Patch Changes\n\n- feat: remove $.unwrap calls from each block indexes ([#12640](https://github.com/sveltejs/svelte/pull/12640))\n\n- fix: error on `bind:this` to each block parameter ([#12638](https://github.com/sveltejs/svelte/pull/12638))\n\n- feat: remove `$.unwrap` calls from `bind:group` ([#12642](https://github.com/sveltejs/svelte/pull/12642))\n\n## 5.0.0-next.200\n\n### Patch Changes\n\n- fix: never set custom element props as attributes inside templates ([#12622](https://github.com/sveltejs/svelte/pull/12622))\n\n- feat: better code generation for `let:` directives in SSR mode ([#12611](https://github.com/sveltejs/svelte/pull/12611))\n\n- fix: correctly update stores when reassigning with operator other than `=` ([#12614](https://github.com/sveltejs/svelte/pull/12614))\n\n## 5.0.0-next.199\n\n### Patch Changes\n\n- fix: add missing hydration mismatch call-site ([#12604](https://github.com/sveltejs/svelte/pull/12604))\n\n- fix: apply dynamic event fixes to OnDirective ([#12582](https://github.com/sveltejs/svelte/pull/12582))\n\n- fix: ensure directives run in sequential order ([#12591](https://github.com/sveltejs/svelte/pull/12591))\n\n- fix: tweak element_invalid_self_closing_tag to exclude namespace ([#12585](https://github.com/sveltejs/svelte/pull/12585))\n\n- breaking: avoid flushing queued updates on mount/hydrate ([#12602](https://github.com/sveltejs/svelte/pull/12602))\n\n- feat: allow `:global` in more places ([#12560](https://github.com/sveltejs/svelte/pull/12560))\n\n## 5.0.0-next.198\n\n### Patch Changes\n\n- chore: remove internal `binding.expression` mechanism ([#12530](https://github.com/sveltejs/svelte/pull/12530))\n\n- fix: exclude `bind:this` from reactive state validation ([#12566](https://github.com/sveltejs/svelte/pull/12566))\n\n## 5.0.0-next.197\n\n### Patch Changes\n\n- fix: correctly set anchor inside HMR block ([#12575](https://github.com/sveltejs/svelte/pull/12575))\n\n## 5.0.0-next.196\n\n### Patch Changes\n\n- fix: ensure dynamic event handlers are wrapped in a derived ([#12563](https://github.com/sveltejs/svelte/pull/12563))\n\n- chore: tidy up dynamic event handler generated code ([#12553](https://github.com/sveltejs/svelte/pull/12553))\n\n- fix: dynamic event delegation for stateful call expressions ([#12549](https://github.com/sveltejs/svelte/pull/12549))\n\n- fix: ensure $state.snapshot correctly clones Date objects ([#12564](https://github.com/sveltejs/svelte/pull/12564))\n\n- fix: remove runtime validation of components/snippets, rely on types instead ([#12507](https://github.com/sveltejs/svelte/pull/12507))\n\n- fix: properly update store values ([#12562](https://github.com/sveltejs/svelte/pull/12562))\n\n## 5.0.0-next.195\n\n### Patch Changes\n\n- fix: update original source in HMR update ([#12547](https://github.com/sveltejs/svelte/pull/12547))\n\n## 5.0.0-next.194\n\n### Patch Changes\n\n- fix: bail-out of hydrating head if no anchor is found ([#12541](https://github.com/sveltejs/svelte/pull/12541))\n\n- chore: add warning for invalid render function of createRawSnippet ([#12535](https://github.com/sveltejs/svelte/pull/12535))\n\n- fix: correctly set filename on HMR wrappers ([#12543](https://github.com/sveltejs/svelte/pull/12543))\n\n- fix: only emit binding_property_non_reactive warning in runes mode ([#12544](https://github.com/sveltejs/svelte/pull/12544))\n\n## 5.0.0-next.193\n\n### Patch Changes\n\n- fix: improve validation error that occurs when using `{@render ...}` to render default slotted content ([#12521](https://github.com/sveltejs/svelte/pull/12521))\n\n- fix: reset hydrate node after `hydrate(...)` ([#12512](https://github.com/sveltejs/svelte/pull/12512))\n\n## 5.0.0-next.192\n\n### Patch Changes\n\n- fix: make animations more robust to quick shuffling ([#12496](https://github.com/sveltejs/svelte/pull/12496))\n\n- feat: warn if binding to a non-reactive property ([#12500](https://github.com/sveltejs/svelte/pull/12500))\n\n- fix: ensure $state proxy invokes set accessor if present ([#12503](https://github.com/sveltejs/svelte/pull/12503))\n\n## 5.0.0-next.191\n\n### Patch Changes\n\n- fix: properly assign trailing comments ([#12471](https://github.com/sveltejs/svelte/pull/12471))\n\n- breaking: remove deep reactivity from non-bindable props ([#12484](https://github.com/sveltejs/svelte/pull/12484))\n\n- fix: ensure async initial store value is noticed ([#12486](https://github.com/sveltejs/svelte/pull/12486))\n\n- fix: don't add imports to hoisted event parameters ([#12493](https://github.com/sveltejs/svelte/pull/12493))\n\n- fix: set `volume` through DOM property rather than attribute ([#12485](https://github.com/sveltejs/svelte/pull/12485))\n\n## 5.0.0-next.190\n\n### Patch Changes\n\n- fix: hydrate multiple `<svelte:head>` elements correctly ([#12475](https://github.com/sveltejs/svelte/pull/12475))\n\n- fix: assign correct scope to attributes of named slot ([#12476](https://github.com/sveltejs/svelte/pull/12476))\n\n- breaking: warn on quoted single-expression attributes in runes mode ([#12479](https://github.com/sveltejs/svelte/pull/12479))\n\n## 5.0.0-next.189\n\n### Patch Changes\n\n- feat: add createRawSnippet API ([#12425](https://github.com/sveltejs/svelte/pull/12425))\n\n## 5.0.0-next.188\n\n### Patch Changes\n\n- fix: ensure `$state.snapshot` never errors ([#12445](https://github.com/sveltejs/svelte/pull/12445))\n\n- feat: move dev-time component properties to private symbols' ([#12461](https://github.com/sveltejs/svelte/pull/12461))\n\n## 5.0.0-next.187\n\n### Patch Changes\n\n- fix: always pass original component to HMR wrapper ([#12454](https://github.com/sveltejs/svelte/pull/12454))\n\n- fix: ensure previous transitions are properly aborted ([#12460](https://github.com/sveltejs/svelte/pull/12460))\n\n## 5.0.0-next.186\n\n### Patch Changes\n\n- feat: skip pending block for already-resolved promises ([#12274](https://github.com/sveltejs/svelte/pull/12274))\n\n- feat: add ability to ignore warnings through `warningFilter` compiler option ([#12296](https://github.com/sveltejs/svelte/pull/12296))\n\n- fix: run animations in microtask so that deferred transitions can measure nodes correctly ([#12453](https://github.com/sveltejs/svelte/pull/12453))\n\n## 5.0.0-next.185\n\n### Patch Changes\n\n- fix: allow leading and trailing comments in mustache expression ([#11866](https://github.com/sveltejs/svelte/pull/11866))\n\n- fix: ensure hydration walks all nodes ([#12448](https://github.com/sveltejs/svelte/pull/12448))\n\n- fix: prevent whitespaces merging across component boundaries ([#12449](https://github.com/sveltejs/svelte/pull/12449))\n\n- fix: detect mutations within assignment expressions ([#12429](https://github.com/sveltejs/svelte/pull/12429))\n\n## 5.0.0-next.184\n\n### Patch Changes\n\n- fix: show correct errors for invalid runes in `.svelte.js` files ([#12432](https://github.com/sveltejs/svelte/pull/12432))\n\n- breaking: use structuredClone inside `$state.snapshot` ([#12413](https://github.com/sveltejs/svelte/pull/12413))\n\n## 5.0.0-next.183\n\n### Patch Changes\n\n- fix: properly validate snippet/slot interop ([#12421](https://github.com/sveltejs/svelte/pull/12421))\n\n- fix: cache call expressions in render tag arguments ([#12418](https://github.com/sveltejs/svelte/pull/12418))\n\n- fix: optimize `bind:group` ([#12406](https://github.com/sveltejs/svelte/pull/12406))\n\n## 5.0.0-next.182\n\n### Patch Changes\n\n- fix: abort outro when intro starts ([#12321](https://github.com/sveltejs/svelte/pull/12321))\n\n- feat: warn in dev on `{@html ...}` block hydration mismatch ([#12396](https://github.com/sveltejs/svelte/pull/12396))\n\n- feat: only create a maximum of one document event listener per event ([#12383](https://github.com/sveltejs/svelte/pull/12383))\n\n- fix: disallow using `let:` directives with component render tags ([#12400](https://github.com/sveltejs/svelte/pull/12400))\n\n- fix: mark variables in shorthand style directives as referenced ([#12392](https://github.com/sveltejs/svelte/pull/12392))\n\n- fix: handle empty else if block in legacy AST ([#12397](https://github.com/sveltejs/svelte/pull/12397))\n\n- fix: properly delay intro transitions ([#12389](https://github.com/sveltejs/svelte/pull/12389))\n\n## 5.0.0-next.181\n\n### Patch Changes\n\n- fix: reflect SvelteURLSearchParams changes to SvelteURL ([#12285](https://github.com/sveltejs/svelte/pull/12285))\n\n- fix: ensure hmr block effects are transparent for transitions ([#12384](https://github.com/sveltejs/svelte/pull/12384))\n\n- feat: simpler HMR logic ([#12391](https://github.com/sveltejs/svelte/pull/12391))\n\n## 5.0.0-next.180\n\n### Patch Changes\n\n- fix: handle nested `:global(...)` selectors ([#12365](https://github.com/sveltejs/svelte/pull/12365))\n\n- feat: include CSS in `<head>` when `css: 'injected'` ([#12374](https://github.com/sveltejs/svelte/pull/12374))\n\n- fix: destroy effects that error on creation ([#12376](https://github.com/sveltejs/svelte/pull/12376))\n\n- breaking: rename `legacy.componentApi` to `compatibility.componentApi` ([#12370](https://github.com/sveltejs/svelte/pull/12370))\n\n- fix: correctly validate `<svelte:component>` with `bind:this` ([#12368](https://github.com/sveltejs/svelte/pull/12368))\n\n## 5.0.0-next.179\n\n### Patch Changes\n\n- fix: ensure `$slots` returns a record of booleans ([#12359](https://github.com/sveltejs/svelte/pull/12359))\n\n- feat: single-pass hydration ([#12335](https://github.com/sveltejs/svelte/pull/12335))\n\n## 5.0.0-next.178\n\n### Patch Changes\n\n- fix: reconnected deep derived signals to graph ([#12350](https://github.com/sveltejs/svelte/pull/12350))\n\n## 5.0.0-next.177\n\n### Patch Changes\n\n- breaking: play transitions on `mount` by default ([#12351](https://github.com/sveltejs/svelte/pull/12351))\n\n- fix: make `<select>` `<option value>` behavior consistent ([#12316](https://github.com/sveltejs/svelte/pull/12316))\n\n- chore: stricter control flow syntax validation in runes mode ([#12342](https://github.com/sveltejs/svelte/pull/12342))\n\n- fix: resolve legacy component props equality for mutations ([#12348](https://github.com/sveltejs/svelte/pull/12348))\n\n- fix: make `$state` component exports settable ([#12345](https://github.com/sveltejs/svelte/pull/12345))\n\n## 5.0.0-next.176\n\n### Patch Changes\n\n- fix: correct start of `{:else if}` and `{:else}` ([#12043](https://github.com/sveltejs/svelte/pull/12043))\n\n- fix: reverse parent/child order in invalid HTML warning ([#12336](https://github.com/sveltejs/svelte/pull/12336))\n\n- fix: reorder reactive statements during migration ([#12329](https://github.com/sveltejs/svelte/pull/12329))\n\n- feat: better `<svelte:element>` SSR output ([#12339](https://github.com/sveltejs/svelte/pull/12339))\n\n- chore: align warning and error objects, add frame property ([#12326](https://github.com/sveltejs/svelte/pull/12326))\n\n- fix: ensure `$effect.root` is ignored on the server ([#12332](https://github.com/sveltejs/svelte/pull/12332))\n\n- fix: enable local transitions on `svelte:element` ([#12346](https://github.com/sveltejs/svelte/pull/12346))\n\n## 5.0.0-next.175\n\n### Patch Changes\n\n- fix: correctly compile $effect.root in svelte modules ([#12315](https://github.com/sveltejs/svelte/pull/12315))\n\n- fix: ensure `bind:this` works with component with no return value ([#12290](https://github.com/sveltejs/svelte/pull/12290))\n\n## 5.0.0-next.174\n\n### Patch Changes\n\n- fix: bail out of event hoisting when referencing store subscriptions ([#12301](https://github.com/sveltejs/svelte/pull/12301))\n\n- chore: make store initialization logic simpler ([#12281](https://github.com/sveltejs/svelte/pull/12281))\n\n- fix: make props optional during SSR ([#12284](https://github.com/sveltejs/svelte/pull/12284))\n\n- fix: ensure each blocks properly handle $state.frozen objects in prod ([#12305](https://github.com/sveltejs/svelte/pull/12305))\n\n- fix: ensure rest props access on hoisted event handlers works ([#12298](https://github.com/sveltejs/svelte/pull/12298))\n\n- fix: lazily create a derived for each read method on `SvelteDate.prototype` ([#12110](https://github.com/sveltejs/svelte/pull/12110))\n\n## 5.0.0-next.173\n\n### Patch Changes\n\n- chore: tidy up store logic ([#12277](https://github.com/sveltejs/svelte/pull/12277))\n\n## 5.0.0-next.172\n\n### Patch Changes\n\n- fix: handle duplicate signal dependencies gracefully ([#12261](https://github.com/sveltejs/svelte/pull/12261))\n\n## 5.0.0-next.171\n\n### Patch Changes\n\n- feat: simpler effect DOM boundaries ([#12258](https://github.com/sveltejs/svelte/pull/12258))\n\n## 5.0.0-next.170\n\n### Patch Changes\n\n- fix: bump dts-buddy for better type generation ([#12262](https://github.com/sveltejs/svelte/pull/12262))\n\n- breaking: expose `CompileError` interface, not class ([#12255](https://github.com/sveltejs/svelte/pull/12255))\n\n## 5.0.0-next.169\n\n### Patch Changes\n\n- breaking: rename `svelte/reactivity` helpers to include `Svelte` prefix ([#12248](https://github.com/sveltejs/svelte/pull/12248))\n\n- fix: avoid duplicate signal dependencies ([#12245](https://github.com/sveltejs/svelte/pull/12245))\n\n## 5.0.0-next.168\n\n### Patch Changes\n\n- fix: ensure HMR doesn't mess with anchor nodes ([#12242](https://github.com/sveltejs/svelte/pull/12242))\n\n- fix: deconflict multiple snippets of the same name ([#12221](https://github.com/sveltejs/svelte/pull/12221))\n\n## 5.0.0-next.167\n\n### Patch Changes\n\n- fix: make more types from `svelte/compiler` public ([#12189](https://github.com/sveltejs/svelte/pull/12189))\n\n- fix: support contenteditable binding undefined fallback ([#12210](https://github.com/sveltejs/svelte/pull/12210))\n\n- breaking: prevent usage of arguments keyword in certain places ([#12191](https://github.com/sveltejs/svelte/pull/12191))\n\n- fix(types): export CompileResult and Warning ([#12212](https://github.com/sveltejs/svelte/pull/12212))\n\n- fix: ensure element dir properties persist with text changes ([#12204](https://github.com/sveltejs/svelte/pull/12204))\n\n- fix: disallow accessing internal Svelte props ([#12207](https://github.com/sveltejs/svelte/pull/12207))\n\n- fix: make media bindings more robust ([#12206](https://github.com/sveltejs/svelte/pull/12206))\n\n- fix: allow slot attribute inside snippets ([#12188](https://github.com/sveltejs/svelte/pull/12188))\n\n- feat: allow `let props = $props()` and optimize prop read access ([#12201](https://github.com/sveltejs/svelte/pull/12201))\n\n- feat: improve type arguments for Snippet and $bindable ([#12197](https://github.com/sveltejs/svelte/pull/12197))\n\n## 5.0.0-next.166\n\n### Patch Changes\n\n- fix: remove correct event listener from document ([#12101](https://github.com/sveltejs/svelte/pull/12101))\n\n- fix: correctly serialize object assignment expressions ([#12175](https://github.com/sveltejs/svelte/pull/12175))\n\n- fix: robustify migration script around indentation and comments ([#12176](https://github.com/sveltejs/svelte/pull/12176))\n\n- fix: improve await block behaviour in non-runes mode ([#12179](https://github.com/sveltejs/svelte/pull/12179))\n\n- fix: improve select handling of dynamic value with placeholders ([#12181](https://github.com/sveltejs/svelte/pull/12181))\n\n## 5.0.0-next.165\n\n### Patch Changes\n\n- breaking: bump dts-buddy ([#12134](https://github.com/sveltejs/svelte/pull/12134))\n\n- fix: throw compilation error for malformed snippets ([#12144](https://github.com/sveltejs/svelte/pull/12144))\n\n## 5.0.0-next.164\n\n### Patch Changes\n\n- fix: prevent `a11y_label_has_associated_control` false positive for component or render tag in `<label>` ([#12119](https://github.com/sveltejs/svelte/pull/12119))\n\n- fix: allow multiple optional parameters with defaults in snippets ([#12070](https://github.com/sveltejs/svelte/pull/12070))\n\n## 5.0.0-next.163\n\n### Patch Changes\n\n- feat: more accurate `render`/`mount`/`hydrate` options ([#12111](https://github.com/sveltejs/svelte/pull/12111))\n\n- fix: better binding interop between runes/non-runes components ([#12123](https://github.com/sveltejs/svelte/pull/12123))\n\n## 5.0.0-next.162\n\n### Patch Changes\n\n- chore: remove anchor node from each block items ([#11836](https://github.com/sveltejs/svelte/pull/11836))\n\n## 5.0.0-next.161\n\n### Patch Changes\n\n- fix: wait a microtask for await blocks to reduce UI churn ([#11989](https://github.com/sveltejs/svelte/pull/11989))\n\n- fix: ensure state update expressions are serialised correctly ([#12109](https://github.com/sveltejs/svelte/pull/12109))\n\n- fix: repair each block length even without an else ([#12098](https://github.com/sveltejs/svelte/pull/12098))\n\n- fix: remove document event listeners on unmount ([#12105](https://github.com/sveltejs/svelte/pull/12105))\n\n## 5.0.0-next.160\n\n### Patch Changes\n\n- chore: improve runtime performance of capturing reactive signals ([#12093](https://github.com/sveltejs/svelte/pull/12093))\n\n## 5.0.0-next.159\n\n### Patch Changes\n\n- fix: ensure element size bindings don't unsubscribe multiple times from the resize observer ([#12091](https://github.com/sveltejs/svelte/pull/12091))\n\n- fix: prevent misidentification of bindings as delegatable event handlers if used outside event attribute ([#12081](https://github.com/sveltejs/svelte/pull/12081))\n\n- fix: preserve current input values when removing defaults ([#12083](https://github.com/sveltejs/svelte/pull/12083))\n\n- fix: preserve component function context for nested components ([#12089](https://github.com/sveltejs/svelte/pull/12089))\n\n## 5.0.0-next.158\n\n### Patch Changes\n\n- fix: adjust module declaration to work around language tools bug ([#12071](https://github.com/sveltejs/svelte/pull/12071))\n\n## 5.0.0-next.157\n\n### Patch Changes\n\n- fix: handle `is` attribute on elements with spread ([#12056](https://github.com/sveltejs/svelte/pull/12056))\n\n- fix: correctly process empty lines in messages ([#12057](https://github.com/sveltejs/svelte/pull/12057))\n\n- fix: rewrite state_unsafe_mutation message ([#12059](https://github.com/sveltejs/svelte/pull/12059))\n\n- fix: support function invocation from imported `*.svelte` components ([#12061](https://github.com/sveltejs/svelte/pull/12061))\n\n- fix: better types for `on` ([#12053](https://github.com/sveltejs/svelte/pull/12053))\n\n## 5.0.0-next.156\n\n### Patch Changes\n\n- fix: increment derived versions when updating ([#12047](https://github.com/sveltejs/svelte/pull/12047))\n\n## 5.0.0-next.155\n\n### Patch Changes\n\n- fix: robustify migration script ([#12019](https://github.com/sveltejs/svelte/pull/12019))\n\n- fix: relax constraint for `ComponentProps` ([#12026](https://github.com/sveltejs/svelte/pull/12026))\n\n- fix: address event delegation duplication behaviour ([#12014](https://github.com/sveltejs/svelte/pull/12014))\n\n- chore: remove `createRoot` references ([#12018](https://github.com/sveltejs/svelte/pull/12018))\n\n- chore: clear `Map`/`Set` before triggering `$inspect` callbacks ([#12013](https://github.com/sveltejs/svelte/pull/12013))\n\n- breaking: rename `$effect.active` to `$effect.tracking` ([#12022](https://github.com/sveltejs/svelte/pull/12022))\n\n## 5.0.0-next.154\n\n### Patch Changes\n\n- fix: ensure bound input content is resumed on hydration ([#11986](https://github.com/sveltejs/svelte/pull/11986))\n\n- fix: better `render` type ([#11997](https://github.com/sveltejs/svelte/pull/11997))\n\n- fix: SSR template escaping ([#12007](https://github.com/sveltejs/svelte/pull/12007))\n\n## 5.0.0-next.153\n\n### Patch Changes\n\n- feat: defer tasks without creating effects ([#11960](https://github.com/sveltejs/svelte/pull/11960))\n\n- fix: enusre dev validation in dynamic component works as intended ([#11985](https://github.com/sveltejs/svelte/pull/11985))\n\n- feat: detach inert effects ([#11955](https://github.com/sveltejs/svelte/pull/11955))\n\n- feat: sort possible bindings in invalid binding error ([#11950](https://github.com/sveltejs/svelte/pull/11950))\n\n- fix: apply style directives to element with empty style attribute ([#11971](https://github.com/sveltejs/svelte/pull/11971))\n\n## 5.0.0-next.152\n\n### Patch Changes\n\n- fix: validate form inside a form ([#11947](https://github.com/sveltejs/svelte/pull/11947))\n\n- fix: more robust handling of events in spread attributes ([#11942](https://github.com/sveltejs/svelte/pull/11942))\n\n- feat: simpler `<svelte:element> hydration ([#11773](https://github.com/sveltejs/svelte/pull/11773))\n\n- fix: make `legacy.componentApi` option more visible ([#11924](https://github.com/sveltejs/svelte/pull/11924))\n\n- feat: simpler hydration of CSS custom property wrappers ([#11948](https://github.com/sveltejs/svelte/pull/11948))\n\n- chore: optimise effects that only exist to return a teardown ([#11936](https://github.com/sveltejs/svelte/pull/11936))\n\n- feat: always create wrapper `<div>` for `<svelte:component>` with CSS custom properties ([#11792](https://github.com/sveltejs/svelte/pull/11792))\n\n- feat: add svelte/events package and export `on` function ([#11912](https://github.com/sveltejs/svelte/pull/11912))\n\n- feat: more efficient output for attributes in SSR ([#11949](https://github.com/sveltejs/svelte/pull/11949))\n\n- fix: update reactive set when deleting initial values ([#11967](https://github.com/sveltejs/svelte/pull/11967))\n\n- feat: simpler string normalization ([#11954](https://github.com/sveltejs/svelte/pull/11954))\n\n- fix: always assign text.nodeValue ([#11944](https://github.com/sveltejs/svelte/pull/11944))\n\n## 5.0.0-next.151\n\n### Patch Changes\n\n- fix: relax `Component` type ([#11929](https://github.com/sveltejs/svelte/pull/11929))\n\n- fix: sort `{@const ...}` tags topologically in legacy mode ([#11908](https://github.com/sveltejs/svelte/pull/11908))\n\n- chore: deprecate html in favour of body for render() ([#11927](https://github.com/sveltejs/svelte/pull/11927))\n\n- fix: append start/end info to `AssignmentPattern` and `VariableDeclarator` ([#11930](https://github.com/sveltejs/svelte/pull/11930))\n\n- fix: relax slot prop validation on components ([#11923](https://github.com/sveltejs/svelte/pull/11923))\n\n## 5.0.0-next.150\n\n### Patch Changes\n\n- fix: populate `this.#sources` when constructing reactive map ([#11913](https://github.com/sveltejs/svelte/pull/11913))\n\n- fix: omit `state_referenced_locally` warning for component exports ([#11905](https://github.com/sveltejs/svelte/pull/11905))\n\n- fix: ensure event.target is correct for delegation ([#11900](https://github.com/sveltejs/svelte/pull/11900))\n\n- chore: speed up regex ([#11918](https://github.com/sveltejs/svelte/pull/11918))\n\n- feat: bind `activeElement` and `pointerLockElement` in `<svelte:document>` ([#11879](https://github.com/sveltejs/svelte/pull/11879))\n\n- fix: correctly backport `svelte:element` to old AST ([#11917](https://github.com/sveltejs/svelte/pull/11917))\n\n- fix: add `unused-export-let` to legacy lint replacements ([#11896](https://github.com/sveltejs/svelte/pull/11896))\n\n## 5.0.0-next.149\n\n### Patch Changes\n\n- fix: keep default values of props a proxy after reassignment ([#11860](https://github.com/sveltejs/svelte/pull/11860))\n\n- fix: address map reactivity regression ([#11882](https://github.com/sveltejs/svelte/pull/11882))\n\n- fix: assign message to error object in `handle_error` using `Object.defineProperty` ([#11675](https://github.com/sveltejs/svelte/pull/11675))\n\n- fix: ensure frozen objects in state are correctly skipped ([#11889](https://github.com/sveltejs/svelte/pull/11889))\n\n## 5.0.0-next.148\n\n### Patch Changes\n\n- chore: improve $state.frozen performance in prod ([#11852](https://github.com/sveltejs/svelte/pull/11852))\n\n- breaking: removed deferred event updates ([#11855](https://github.com/sveltejs/svelte/pull/11855))\n\n## 5.0.0-next.147\n\n### Patch Changes\n\n- fix: improve reactive Map and Set implementations ([#11827](https://github.com/sveltejs/svelte/pull/11827))\n\n- fix: improve controlled each block cleanup performance ([#11839](https://github.com/sveltejs/svelte/pull/11839))\n\n## 5.0.0-next.146\n\n### Patch Changes\n\n- fix: allow for more svelte-ignore to work ([#11833](https://github.com/sveltejs/svelte/pull/11833))\n\n- fix: reevaluate namespace in slots ([#11849](https://github.com/sveltejs/svelte/pull/11849))\n\n## 5.0.0-next.145\n\n### Patch Changes\n\n- fix: `$state.is` missing second argument on the server ([#11835](https://github.com/sveltejs/svelte/pull/11835))\n\n- fix: prevent buggy ownership warning when reassigning state ([#11812](https://github.com/sveltejs/svelte/pull/11812))\n\n- fix: address regressed memory leak ([#11832](https://github.com/sveltejs/svelte/pull/11832))\n\n## 5.0.0-next.144\n\n### Patch Changes\n\n- fix: address derived memory leak on disconnection from reactive graph ([#11819](https://github.com/sveltejs/svelte/pull/11819))\n\n- fix: set correct scope for `@const` tags within slots ([#11798](https://github.com/sveltejs/svelte/pull/11798))\n\n- fix: better support for onwheel events in chrome ([#11808](https://github.com/sveltejs/svelte/pull/11808))\n\n- fix: coherent infinite loop guard ([#11815](https://github.com/sveltejs/svelte/pull/11815))\n\n- fix: make prop fallback values deeply reactive if needed ([#11804](https://github.com/sveltejs/svelte/pull/11804))\n\n- fix: robustify initial scroll value detection when scroll is smooth ([#11802](https://github.com/sveltejs/svelte/pull/11802))\n\n## 5.0.0-next.143\n\n### Patch Changes\n\n- feat: provide `Component` type that represents the new shape of Svelte components ([#11775](https://github.com/sveltejs/svelte/pull/11775))\n\n## 5.0.0-next.142\n\n### Patch Changes\n\n- fix: allow runelike writable as prop ([#11768](https://github.com/sveltejs/svelte/pull/11768))\n\n- fix: support `array.lastIndexOf` without second argument ([#11766](https://github.com/sveltejs/svelte/pull/11766))\n\n- fix: handle `this` parameter in TypeScript-annotated functions ([#11795](https://github.com/sveltejs/svelte/pull/11795))\n\n- fix: allow classes to be reassigned ([#11794](https://github.com/sveltejs/svelte/pull/11794))\n\n- fix: capture the correct event names when spreading attributes ([#11783](https://github.com/sveltejs/svelte/pull/11783))\n\n- fix: allow global next to `&` for nesting ([#11784](https://github.com/sveltejs/svelte/pull/11784))\n\n- fix: parse ongotpointercapture and onlostpointercapture events correctly ([#11790](https://github.com/sveltejs/svelte/pull/11790))\n\n- fix: only inject push/pop in SSR components when necessary ([#11771](https://github.com/sveltejs/svelte/pull/11771))\n\n## 5.0.0-next.141\n\n### Patch Changes\n\n- fix: throw on invalid attribute expressions ([#11736](https://github.com/sveltejs/svelte/pull/11736))\n\n- fix: use svg methods for updating svg attributes too ([#11755](https://github.com/sveltejs/svelte/pull/11755))\n\n- fix: don't warn on link without href if aria-disabled ([#11737](https://github.com/sveltejs/svelte/pull/11737))\n\n- fix: don't use console.trace inside dev warnings ([#11744](https://github.com/sveltejs/svelte/pull/11744))\n\n## 5.0.0-next.140\n\n### Patch Changes\n\n- breaking: event handlers + bindings now yield effect updates ([#11706](https://github.com/sveltejs/svelte/pull/11706))\n\n## 5.0.0-next.139\n\n### Patch Changes\n\n- fix: ensure we clear down each block opening anchors from document ([#11740](https://github.com/sveltejs/svelte/pull/11740))\n\n## 5.0.0-next.138\n\n### Patch Changes\n\n- fix: allow comments after last selector in css ([#11723](https://github.com/sveltejs/svelte/pull/11723))\n\n- fix: don't add scoping modifier to nesting selectors ([#11713](https://github.com/sveltejs/svelte/pull/11713))\n\n- chore: speedup hydration around input and select values ([#11717](https://github.com/sveltejs/svelte/pull/11717))\n\n- fix: update value like attributes in a separate template_effect ([#11720](https://github.com/sveltejs/svelte/pull/11720))\n\n- fix: improve handling of unowned derived signal ([#11712](https://github.com/sveltejs/svelte/pull/11712))\n\n## 5.0.0-next.137\n\n### Patch Changes\n\n- fix: migrate derivations without semicolons ([#11704](https://github.com/sveltejs/svelte/pull/11704))\n\n- fix: check for invalid bindings on window and document ([#11676](https://github.com/sveltejs/svelte/pull/11676))\n\n- fix: more efficient spread attributes in SSR output ([#11660](https://github.com/sveltejs/svelte/pull/11660))\n\n- fix: inline pointer events now correctly work in Chrome ([#11695](https://github.com/sveltejs/svelte/pull/11695))\n\n- fix: don't require warning codes to be separated by commas in non-runes mode ([#11669](https://github.com/sveltejs/svelte/pull/11669))\n\n## 5.0.0-next.136\n\n### Patch Changes\n\n- chore: remove `handle_compile_error` ([#11639](https://github.com/sveltejs/svelte/pull/11639))\n\n- breaking: disallow string literal values in `<svelte:element this=\"...\">` ([#11454](https://github.com/sveltejs/svelte/pull/11454))\n\n- fix: use coarse-grained updates for derived expressions passed to props in legacy mode ([#11652](https://github.com/sveltejs/svelte/pull/11652))\n\n- fix: robustify `bind:scrollX/Y` binding ([#11655](https://github.com/sveltejs/svelte/pull/11655))\n\n- feat: migrate `<svelte:element this=\"div\">` ([#11659](https://github.com/sveltejs/svelte/pull/11659))\n\n- feat: more information when hydration fails ([#11649](https://github.com/sveltejs/svelte/pull/11649))\n\n- fix: replay load and error events on load during hydration ([#11642](https://github.com/sveltejs/svelte/pull/11642))\n\n## 5.0.0-next.135\n\n### Patch Changes\n\n- fix: make messages more consistent ([#11643](https://github.com/sveltejs/svelte/pull/11643))\n\n- feat: introduce `rootDir` compiler option, make `filename` relative to it ([#11627](https://github.com/sveltejs/svelte/pull/11627))\n\n- fix: rename `__svelte_meta.filename` to `__svelte_meta.file` to align with svelte 4 ([#11627](https://github.com/sveltejs/svelte/pull/11627))\n\n- fix: avoid state_referenced_locally warning within type annotations ([#11638](https://github.com/sveltejs/svelte/pull/11638))\n\n## 5.0.0-next.134\n\n### Patch Changes\n\n- chore: improve SSR invalid element error message ([#11585](https://github.com/sveltejs/svelte/pull/11585))\n\n- fix: deduplicate children prop and default slot ([#10800](https://github.com/sveltejs/svelte/pull/10800))\n\n- feat: error on imports to `svelte/internal/*` ([#11632](https://github.com/sveltejs/svelte/pull/11632))\n\n- fix: better handle img loading attribute ([#11635](https://github.com/sveltejs/svelte/pull/11635))\n\n- feat: add $state.is rune ([#11613](https://github.com/sveltejs/svelte/pull/11613))\n\n- feat: provide $state warnings for accidental equality ([#11610](https://github.com/sveltejs/svelte/pull/11610))\n\n- feat: error when snippet shadow a prop ([#11631](https://github.com/sveltejs/svelte/pull/11631))\n\n- chore: use `new CustomEvent` instead of deprecated `initCustomEvent` ([#11629](https://github.com/sveltejs/svelte/pull/11629))\n\n## 5.0.0-next.133\n\n### Patch Changes\n\n- fix: add backwards-compat for old warning codes in legacy mode ([#11607](https://github.com/sveltejs/svelte/pull/11607))\n\n## 5.0.0-next.132\n\n### Patch Changes\n\n- chore: improve runtime overhead of creating comment templates ([#11591](https://github.com/sveltejs/svelte/pull/11591))\n\n- fix: replicate Svelte 4 props update detection in legacy mode ([#11577](https://github.com/sveltejs/svelte/pull/11577))\n\n- fix: allow for non optional chain call expression in render ([#11578](https://github.com/sveltejs/svelte/pull/11578))\n\n- fix: correctly handle falsy values of style directives in SSR mode ([#11583](https://github.com/sveltejs/svelte/pull/11583))\n\n- fix: improve handling of lazy image elements ([#11593](https://github.com/sveltejs/svelte/pull/11593))\n\n- fix: skip deriveds for props with known safe calls ([#11595](https://github.com/sveltejs/svelte/pull/11595))\n\n## 5.0.0-next.131\n\n### Patch Changes\n\n- chore: optimise effects ([#11569](https://github.com/sveltejs/svelte/pull/11569))\n\n- fix: ensure all effect cleanup functions are untracked ([#11567](https://github.com/sveltejs/svelte/pull/11567))\n\n## 5.0.0-next.130\n\n### Patch Changes\n\n- fix: improve internal mechanism for handling process_effects ([#11560](https://github.com/sveltejs/svelte/pull/11560))\n\n## 5.0.0-next.129\n\n### Patch Changes\n\n- fix: further adjust heuristics for effect_update_depth_exceeded ([#11558](https://github.com/sveltejs/svelte/pull/11558))\n\n## 5.0.0-next.128\n\n### Patch Changes\n\n- fix: improved $inspect handling of reactive Map/Set/Date ([#11553](https://github.com/sveltejs/svelte/pull/11553))\n\n- fix: adjust heuristics for effect_update_depth_exceeded ([#11557](https://github.com/sveltejs/svelte/pull/11557))\n\n## 5.0.0-next.127\n\n### Patch Changes\n\n- fix: don't warn on writes to `$state` ([#11540](https://github.com/sveltejs/svelte/pull/11540))\n\n- feat: provide better error messages in DEV ([#11526](https://github.com/sveltejs/svelte/pull/11526))\n\n- fix: better support for lazy img elements ([#11545](https://github.com/sveltejs/svelte/pull/11545))\n\n- fix: handle falsy prop aliases correctly ([#11539](https://github.com/sveltejs/svelte/pull/11539))\n\n- fix: ensure spread events are added even when rerunning spread immediately ([#11535](https://github.com/sveltejs/svelte/pull/11535))\n\n## 5.0.0-next.126\n\n### Patch Changes\n\n- fix: improve behaviour of unowned derived signals ([#11521](https://github.com/sveltejs/svelte/pull/11521))\n\n- fix: make `$effect.active()` true when updating deriveds ([#11500](https://github.com/sveltejs/svelte/pull/11500))\n\n- fix: skip parent element validation for snippet contents ([#11463](https://github.com/sveltejs/svelte/pull/11463))\n\n## 5.0.0-next.125\n\n### Patch Changes\n\n- fix: coerce incremented/decremented sources ([#11506](https://github.com/sveltejs/svelte/pull/11506))\n\n- feat: add support for svelte inspector ([#11514](https://github.com/sveltejs/svelte/pull/11514))\n\n- fix: skip AST analysis of TypeScript AST nodes ([#11513](https://github.com/sveltejs/svelte/pull/11513))\n\n- fix: use import.meta.hot.acceptExports when available to support partial hmr in vite ([#11453](https://github.com/sveltejs/svelte/pull/11453))\n\n- feat: better error for `bind:this` legacy API usage ([#11498](https://github.com/sveltejs/svelte/pull/11498))\n\n## 5.0.0-next.124\n\n### Patch Changes\n\n- fix: allow to access private fields after `this` reassignment ([#11487](https://github.com/sveltejs/svelte/pull/11487))\n\n- fix: only initiate scroll if scroll binding has existing value ([#11469](https://github.com/sveltejs/svelte/pull/11469))\n\n- fix: restore value after attribute removal during hydration ([#11465](https://github.com/sveltejs/svelte/pull/11465))\n\n- fix: check if svelte component exists on custom element destroy ([#11488](https://github.com/sveltejs/svelte/pull/11488))\n\n- fix: ensure derived is detected as dirty correctly ([#11496](https://github.com/sveltejs/svelte/pull/11496))\n\n- fix: prevent false positive ownership warning ([#11490](https://github.com/sveltejs/svelte/pull/11490))\n\n## 5.0.0-next.123\n\n### Patch Changes\n\n- fix: adjust order of `derived` function definition overloads ([#11426](https://github.com/sveltejs/svelte/pull/11426))\n\n## 5.0.0-next.122\n\n### Patch Changes\n\n- fix: mark function properties on runes as deprecated for better intellisense ([#11439](https://github.com/sveltejs/svelte/pull/11439))\n\n- fix: only warn about non-reactive state in runes mode ([#11434](https://github.com/sveltejs/svelte/pull/11434))\n\n- fix: prevent ownership validation from infering with component context ([#11438](https://github.com/sveltejs/svelte/pull/11438))\n\n- fix: ensure $inspect untracks inspected object ([#11432](https://github.com/sveltejs/svelte/pull/11432))\n\n## 5.0.0-next.121\n\n### Patch Changes\n\n- fix: set correct component context when rendering snippets ([#11401](https://github.com/sveltejs/svelte/pull/11401))\n\n- fix: detect style shorthands as stateful variables in legacy mode ([#11421](https://github.com/sveltejs/svelte/pull/11421))\n\n- fix: improve unowned derived signal behaviour ([#11408](https://github.com/sveltejs/svelte/pull/11408))\n\n- fix: rework binding type-checking strategy ([#11420](https://github.com/sveltejs/svelte/pull/11420))\n\n- fix: improve html escaping of element attributes ([#11411](https://github.com/sveltejs/svelte/pull/11411))\n\n## 5.0.0-next.120\n\n### Patch Changes\n\n- feat: MathML support ([#11387](https://github.com/sveltejs/svelte/pull/11387))\n\n## 5.0.0-next.119\n\n### Patch Changes\n\n- fix: generate correct code for arrow functions with bodies involving object expressions ([#11392](https://github.com/sveltejs/svelte/pull/11392))\n\n## 5.0.0-next.118\n\n### Patch Changes\n\n- fix: ensure no data loss occurs when using reactive Set methods ([#11385](https://github.com/sveltejs/svelte/pull/11385))\n\n- fix: handle reassignment of `$props` and `$restProps` ([#11348](https://github.com/sveltejs/svelte/pull/11348))\n\n- fix: disallow sequence expressions in `@const` tags ([#11357](https://github.com/sveltejs/svelte/pull/11357))\n\n## 5.0.0-next.117\n\n### Patch Changes\n\n- fix: collect all necessary setters of html elements when spreading attributes ([#11371](https://github.com/sveltejs/svelte/pull/11371))\n\n- fix: ensure reactions are kept dirty when marking them again ([#11364](https://github.com/sveltejs/svelte/pull/11364))\n\n- feat: leave view transition pseudo selectors untouched ([#11375](https://github.com/sveltejs/svelte/pull/11375))\n\n- fix: require whitespace after `@const` tag ([#11379](https://github.com/sveltejs/svelte/pull/11379))\n\n## 5.0.0-next.116\n\n### Patch Changes\n\n- fix: correctly interpret empty aria- attribute ([#11325](https://github.com/sveltejs/svelte/pull/11325))\n\n- fix: disallow mixing on:click and onclick syntax ([#11295](https://github.com/sveltejs/svelte/pull/11295))\n\n- fix: make hr, script and template valid select children ([#11344](https://github.com/sveltejs/svelte/pull/11344))\n\n- fix: apply modifiers to bubbled events ([#11369](https://github.com/sveltejs/svelte/pull/11369))\n\n- fix: allow `bind:this` on `<select>` with dynamic `multiple` attribute ([#11378](https://github.com/sveltejs/svelte/pull/11378))\n\n- feat: allow for literal property definition with state on classes ([#11326](https://github.com/sveltejs/svelte/pull/11326))\n\n- fix: disallow mounting a snippet ([#11347](https://github.com/sveltejs/svelte/pull/11347))\n\n- feat: only inject push/init/pop when necessary ([#11319](https://github.com/sveltejs/svelte/pull/11319))\n\n- feat: provide migration helper ([#11334](https://github.com/sveltejs/svelte/pull/11334))\n\n- fix: ensure store from props is hoisted correctly ([#11367](https://github.com/sveltejs/svelte/pull/11367))\n\n## 5.0.0-next.115\n\n### Patch Changes\n\n- fix: remove `bind_prop` in runes mode ([#11321](https://github.com/sveltejs/svelte/pull/11321))\n\n- fix: mark `accessors` and `immutable` as deprecated ([#11277](https://github.com/sveltejs/svelte/pull/11277))\n\n## 5.0.0-next.114\n\n### Patch Changes\n\n- feat: introduce types to express bindability ([#11225](https://github.com/sveltejs/svelte/pull/11225))\n\n## 5.0.0-next.113\n\n### Patch Changes\n\n- breaking: disallow binding to component exports in runes mode ([#11238](https://github.com/sveltejs/svelte/pull/11238))\n\n## 5.0.0-next.112\n\n### Patch Changes\n\n- fix: avoid hoisting error by using 'let' instead of 'var' ([#11291](https://github.com/sveltejs/svelte/pull/11291))\n\n## 5.0.0-next.111\n\n### Patch Changes\n\n- fix: run render functions for dynamic void elements ([#11258](https://github.com/sveltejs/svelte/pull/11258))\n\n- fix: allow events to continue propagating following an error ([#11263](https://github.com/sveltejs/svelte/pull/11263))\n\n- fix: resolve type definition error in `svelte/compiler` ([#11283](https://github.com/sveltejs/svelte/pull/11283))\n\n- feat: include `script` and `svelte:options` attributes in ast ([#11241](https://github.com/sveltejs/svelte/pull/11241))\n\n- fix: only destroy snippets when they have changed ([#11267](https://github.com/sveltejs/svelte/pull/11267))\n\n- fix: add type arguments to Map and Set ([#10820](https://github.com/sveltejs/svelte/pull/10820))\n\n- feat: implement `:global {...}` CSS blocks ([#11276](https://github.com/sveltejs/svelte/pull/11276))\n\n- feat: add read-only `bind:focused` ([#11271](https://github.com/sveltejs/svelte/pull/11271))\n\n## 5.0.0-next.110\n\n### Patch Changes\n\n- fix: make sure event attributes run after bindings ([#11230](https://github.com/sveltejs/svelte/pull/11230))\n\n## 5.0.0-next.109\n\n### Patch Changes\n\n- fix: more robust moving of each item nodes ([#11254](https://github.com/sveltejs/svelte/pull/11254))\n\n- fix: ensure that CSS is generated for the final frame of a transition ([#11251](https://github.com/sveltejs/svelte/pull/11251))\n\n- fix: more accurate error message when creating orphan effects ([#11227](https://github.com/sveltejs/svelte/pull/11227))\n\n- fix: support `$state.snapshot` as part of variable declarations ([#11235](https://github.com/sveltejs/svelte/pull/11235))\n\n- fix: optimize object property mutations in compilation ([#11243](https://github.com/sveltejs/svelte/pull/11243))\n\n- breaking: don't allow children in svelte:options ([#11250](https://github.com/sveltejs/svelte/pull/11250))\n\n- fix: possible name clash in hoisted functions ([#11237](https://github.com/sveltejs/svelte/pull/11237))\n\n- fix: preserve getters/setters in HMR mode ([#11231](https://github.com/sveltejs/svelte/pull/11231))\n\n## 5.0.0-next.108\n\n### Patch Changes\n\n- breaking: warn on slots and event handlers in runes mode, error on `<slot>` + `{@render ...}` tag usage in same component ([#11203](https://github.com/sveltejs/svelte/pull/11203))\n\n- fix: fall back to component namespace when not statically determinable, add way to tell `<svelte:element>` the namespace at runtime ([#11219](https://github.com/sveltejs/svelte/pull/11219))\n\n- fix: measure elements before taking siblings out of the flow ([#11216](https://github.com/sveltejs/svelte/pull/11216))\n\n- breaking: warn on self-closing non-void HTML tags ([#11114](https://github.com/sveltejs/svelte/pull/11114))\n\n- fix: take outroing elements out of the flow when animating siblings ([#11208](https://github.com/sveltejs/svelte/pull/11208))\n\n- fix: widen ownership when sub state is assigned to new state ([#11217](https://github.com/sveltejs/svelte/pull/11217))\n\n## 5.0.0-next.107\n\n### Patch Changes\n\n- fix: refine css `:global()` selector checks in a compound selector ([#11142](https://github.com/sveltejs/svelte/pull/11142))\n\n- fix: remove memory leak from bind:this ([#11194](https://github.com/sveltejs/svelte/pull/11194))\n\n- fix: remove memory leak from retaining old DOM elements ([#11197](https://github.com/sveltejs/svelte/pull/11197))\n\n- feat: add warning when using `$bindable` rune without calling it ([#11181](https://github.com/sveltejs/svelte/pull/11181))\n\n## 5.0.0-next.106\n\n### Patch Changes\n\n- feat: use state proxy ancestry for ownership validation ([#11184](https://github.com/sveltejs/svelte/pull/11184))\n\n- fix: make snippet effects transparent for transitions ([#11195](https://github.com/sveltejs/svelte/pull/11195))\n\n- fix: return ast from `compile` (like Svelte 4 does) ([#11191](https://github.com/sveltejs/svelte/pull/11191))\n\n- fix: ensure bind:this unmount behavior for members is conditional ([#11193](https://github.com/sveltejs/svelte/pull/11193))\n\n## 5.0.0-next.105\n\n### Patch Changes\n\n- breaking: remove unstate(), replace with $state.snapshot rune ([#11180](https://github.com/sveltejs/svelte/pull/11180))\n\n- fix: more accurate default value handling ([#11183](https://github.com/sveltejs/svelte/pull/11183))\n\n## 5.0.0-next.104\n\n### Patch Changes\n\n- fix: ssr comments in head elements that require raw content ([#10936](https://github.com/sveltejs/svelte/pull/10936))\n\n- fix: improve spreading of attributes ([#11177](https://github.com/sveltejs/svelte/pull/11177))\n\n## 5.0.0-next.103\n\n### Patch Changes\n\n- fix: throw error when auto-subscribed store variable shadow by local variable ([#11170](https://github.com/sveltejs/svelte/pull/11170))\n\n- fix: make ownership validation work correctly with HMR ([#11171](https://github.com/sveltejs/svelte/pull/11171))\n\n- fix: revert ownership widening change ([#11161](https://github.com/sveltejs/svelte/pull/11161))\n\n- fix: fix string name of reactive map and set iterator ([#11169](https://github.com/sveltejs/svelte/pull/11169))\n\n- feat: reactive `URL` and `URLSearchParams` classes ([#11157](https://github.com/sveltejs/svelte/pull/11157))\n\n- feat: update error message for snippet binding and assignments ([#11168](https://github.com/sveltejs/svelte/pull/11168))\n\n## 5.0.0-next.102\n\n### Patch Changes\n\n- fix: generate correct types for reactive Map/Set/Date ([#11153](https://github.com/sveltejs/svelte/pull/11153))\n\n## 5.0.0-next.101\n\n### Patch Changes\n\n- fix missing classes after dynamic expressions in class attribute ([#11134](https://github.com/sveltejs/svelte/pull/11134))\n\n- feat: simplify HMR implementation ([#11132](https://github.com/sveltejs/svelte/pull/11132))\n\n- fix: add validation around disallowed sequence expressions to element attributes ([#11149](https://github.com/sveltejs/svelte/pull/11149))\n\n## 5.0.0-next.100\n\n### Patch Changes\n\n- fix: further improvements to hmr component key generation ([#11129](https://github.com/sveltejs/svelte/pull/11129))\n\n## 5.0.0-next.99\n\n### Patch Changes\n\n- fix: use correct meta property for hmr key ([#11125](https://github.com/sveltejs/svelte/pull/11125))\n\n## 5.0.0-next.98\n\n### Patch Changes\n\n- fix: use keys for hmr modules ([#11123](https://github.com/sveltejs/svelte/pull/11123))\n\n- fix: addresses reactive Set bug in certain engines ([#11120](https://github.com/sveltejs/svelte/pull/11120))\n\n## 5.0.0-next.97\n\n### Patch Changes\n\n- fix: loosen proxy signal creation heuristics ([#11109](https://github.com/sveltejs/svelte/pull/11109))\n\n- fix: ensure top level snippets are defined when binding to component prop ([#11104](https://github.com/sveltejs/svelte/pull/11104))\n\n- feat: hot module reloading support for Svelte 5 ([#11106](https://github.com/sveltejs/svelte/pull/11106))\n\n## 5.0.0-next.96\n\n### Patch Changes\n\n- feat: introduce `$host` rune, deprecate `createEventDispatcher` ([#11059](https://github.com/sveltejs/svelte/pull/11059))\n\n- fix: execute sole static script tag ([#11095](https://github.com/sveltejs/svelte/pull/11095))\n\n- fix: make static `element` property available for the SvelteComponent type ([#11079](https://github.com/sveltejs/svelte/pull/11079))\n\n- fix: improve internal proxied state signal heuristic ([#11102](https://github.com/sveltejs/svelte/pull/11102))\n\n- fix: keep sibling selectors when dealing with slots/render tags/`svelte:element` tags ([#11096](https://github.com/sveltejs/svelte/pull/11096))\n\n- fix: ensure deep mutation ownership widening ([#11094](https://github.com/sveltejs/svelte/pull/11094))\n\n- fix: improve compiled output of multiple call expression in single text node ([#11097](https://github.com/sveltejs/svelte/pull/11097))\n\n- fix: improve hydration of svelte head blocks ([#11099](https://github.com/sveltejs/svelte/pull/11099))\n\n## 5.0.0-next.95\n\n### Patch Changes\n\n- breaking: robustify interop of exports and props in runes mode ([#11064](https://github.com/sveltejs/svelte/pull/11064))\n\n- fix: improve handled of unowned derived signals ([#11077](https://github.com/sveltejs/svelte/pull/11077))\n\n- fix: bundle CSS types ([#11067](https://github.com/sveltejs/svelte/pull/11067))\n\n## 5.0.0-next.94\n\n### Patch Changes\n\n- fix: add `anchor` support to mount() API ([#11050](https://github.com/sveltejs/svelte/pull/11050))\n\n## 5.0.0-next.93\n\n### Patch Changes\n\n- breaking: prevent unparenthesized sequence expressions in attributes ([#11032](https://github.com/sveltejs/svelte/pull/11032))\n\n- fix: ensure transition errors are not swallowed ([#11039](https://github.com/sveltejs/svelte/pull/11039))\n\n## 5.0.0-next.92\n\n### Patch Changes\n\n- fix: include compiler/package.json in package ([#11033](https://github.com/sveltejs/svelte/pull/11033))\n\n## 5.0.0-next.91\n\n### Patch Changes\n\n- fix: improve unowned derived signal heuristics ([#11029](https://github.com/sveltejs/svelte/pull/11029))\n\n- fix: ensure correct context for action update/destroy functions ([#11023](https://github.com/sveltejs/svelte/pull/11023))\n\n- feat: more efficient hydration markers ([#11019](https://github.com/sveltejs/svelte/pull/11019))\n\n- fix: ensure effect cleanup functions are called with null `this` ([#11024](https://github.com/sveltejs/svelte/pull/11024))\n\n- fix: correctly handle closure passed to $derived.by when destructuring ([#11028](https://github.com/sveltejs/svelte/pull/11028))\n\n- Add `name` to HTMLDetailsAttributes ([#11013](https://github.com/sveltejs/svelte/pull/11013))\n\n- breaking: move compiler.cjs to compiler/index.js ([#10988](https://github.com/sveltejs/svelte/pull/10988))\n\n## 5.0.0-next.90\n\n### Patch Changes\n\n- fix: hydrate HTML with surrounding whitespace ([#10996](https://github.com/sveltejs/svelte/pull/10996))\n\n- feat: faster HTML tags ([#10986](https://github.com/sveltejs/svelte/pull/10986))\n\n## 5.0.0-next.89\n\n### Patch Changes\n\n- fix: expose 'svelte/internal' to prevent Vite erroring on startup ([#10987](https://github.com/sveltejs/svelte/pull/10987))\n\n- fix: revert SSR shorthand comments ([#10980](https://github.com/sveltejs/svelte/pull/10980))\n\n- fix: child effects are removed from parent branches ([#10985](https://github.com/sveltejs/svelte/pull/10985))\n\n## 5.0.0-next.88\n\n### Patch Changes\n\n- fix: further improvements to effect scheduling and flushing ([#10971](https://github.com/sveltejs/svelte/pull/10971))\n\n- feat: re-export built-ins from `svelte/reactivity` on the server ([#10973](https://github.com/sveltejs/svelte/pull/10973))\n\n## 5.0.0-next.87\n\n### Patch Changes\n\n- fix: apply animate on prefix/suffix each block mutations ([#10965](https://github.com/sveltejs/svelte/pull/10965))\n\n## 5.0.0-next.86\n\n### Patch Changes\n\n- fix: improved effect sequencing and execution order ([#10949](https://github.com/sveltejs/svelte/pull/10949))\n\n- breaking: onDestroy functions run child-first ([#10949](https://github.com/sveltejs/svelte/pull/10949))\n\n- fix: improve action support for nested $effect ([#10962](https://github.com/sveltejs/svelte/pull/10962))\n\n## 5.0.0-next.85\n\n### Patch Changes\n\n- feat: use implicit return for each block keys ([#10938](https://github.com/sveltejs/svelte/pull/10938))\n\n- breaking: always run pre effects immediately ([#10928](https://github.com/sveltejs/svelte/pull/10928))\n\n- fix: improve order of pre-effect execution ([#10942](https://github.com/sveltejs/svelte/pull/10942))\n\n- feat: more efficient each block compiler output ([#10937](https://github.com/sveltejs/svelte/pull/10937))\n\n## 5.0.0-next.84\n\n### Patch Changes\n\n- fix: reliably remove undefined attributes during hydration ([#10917](https://github.com/sveltejs/svelte/pull/10917))\n\n- fix: Add `elementtiming` HTMLAttribute, remove `crossorigin` from HTMLInputAttributes ([#10921](https://github.com/sveltejs/svelte/pull/10921))\n\n- feat: shorter compiler output for attribute updates ([#10917](https://github.com/sveltejs/svelte/pull/10917))\n\n## 5.0.0-next.83\n\n### Patch Changes\n\n- feat: more efficient if block compiler output ([#10906](https://github.com/sveltejs/svelte/pull/10906))\n\n- fix: update type of `options.target` ([#10892](https://github.com/sveltejs/svelte/pull/10892))\n\n- fix: correctly hydrate controlled each-else block ([#10887](https://github.com/sveltejs/svelte/pull/10887))\n\n- fix: Add `dirname` to HTMLInputAttributes ([#10908](https://github.com/sveltejs/svelte/pull/10908))\n\n## 5.0.0-next.82\n\n### Patch Changes\n\n- fix: allow runes for variable declarations in the template ([#10879](https://github.com/sveltejs/svelte/pull/10879))\n\n- feat: take form resets into account for two way bindings ([#10617](https://github.com/sveltejs/svelte/pull/10617))\n\n- fix: handle multiple snippet parameters with one or more being optional ([#10833](https://github.com/sveltejs/svelte/pull/10833))\n\n- breaking: apply fallback value every time in runes mode ([#10797](https://github.com/sveltejs/svelte/pull/10797))\n\n## 5.0.0-next.81\n\n### Patch Changes\n\n- feat: add support for webkitdirectory DOM boolean attribute ([#10847](https://github.com/sveltejs/svelte/pull/10847))\n\n- fix: don't override instance methods during legacy class creation ([#10834](https://github.com/sveltejs/svelte/pull/10834))\n\n- fix: adjust scope parent for named slots ([#10843](https://github.com/sveltejs/svelte/pull/10843))\n\n- fix: improve handling of unowned derived signals ([#10842](https://github.com/sveltejs/svelte/pull/10842))\n\n- fix: improve element class attribute behaviour ([#10856](https://github.com/sveltejs/svelte/pull/10856))\n\n- fix: ensure select value is updated upon select option removal ([#10846](https://github.com/sveltejs/svelte/pull/10846))\n\n- fix: ensure capture events don't call delegated events ([#10831](https://github.com/sveltejs/svelte/pull/10831))\n\n## 5.0.0-next.80\n\n### Patch Changes\n\n- fix: add types for svelte/reactivity ([#10817](https://github.com/sveltejs/svelte/pull/10817))\n\n- fix: ensure arguments are supported on all reactive Date methods ([#10813](https://github.com/sveltejs/svelte/pull/10813))\n\n## 5.0.0-next.79\n\n### Patch Changes\n\n- feat: add reactive Map class to svelte/reactivity ([#10803](https://github.com/sveltejs/svelte/pull/10803))\n\n## 5.0.0-next.78\n\n### Patch Changes\n\n- fix: invalidate store when mutated inside each block ([#10785](https://github.com/sveltejs/svelte/pull/10785))\n\n- fix: make `set.has(...)` granular for existing properties' ([#10793](https://github.com/sveltejs/svelte/pull/10793))\n\n## 5.0.0-next.77\n\n### Patch Changes\n\n- fix: adjust render effect ordering ([#10783](https://github.com/sveltejs/svelte/pull/10783))\n\n- fix: handle component binding mutation ([#10786](https://github.com/sveltejs/svelte/pull/10786))\n\n## 5.0.0-next.76\n\n### Patch Changes\n\n- feat: add reactive Set class to svelte/reactivity ([#10781](https://github.com/sveltejs/svelte/pull/10781))\n\n- breaking: make `$props()` rune non-generic ([#10694](https://github.com/sveltejs/svelte/pull/10694))\n\n- fix: improve internal render effect sequencing ([#10769](https://github.com/sveltejs/svelte/pull/10769))\n\n## 5.0.0-next.75\n\n### Patch Changes\n\n- fix: use getters for derived class state fields, with memoisation ([#10757](https://github.com/sveltejs/svelte/pull/10757))\n\n## 5.0.0-next.74\n\n### Patch Changes\n\n- fix: prevent reactive statement reruns when they have indirect cyclic dependencies ([#10736](https://github.com/sveltejs/svelte/pull/10736))\n\n## 5.0.0-next.73\n\n### Patch Changes\n\n- fix: improve bind:this support around proxyied state ([#10732](https://github.com/sveltejs/svelte/pull/10732))\n\n- fix: bump specificity on all members of a selector list ([#10730](https://github.com/sveltejs/svelte/pull/10730))\n\n- breaking: preserve slots inside templates with a shadowrootmode attribute ([#10721](https://github.com/sveltejs/svelte/pull/10721))\n\n- chore: custom elements validation ([#10720](https://github.com/sveltejs/svelte/pull/10720))\n\n- fix: ensure performance.now() and requestAnimationFrame() are polyfilled in ssr ([#10715](https://github.com/sveltejs/svelte/pull/10715))\n\n- fix: eagerly unsubscribe when store is changed ([#10727](https://github.com/sveltejs/svelte/pull/10727))\n\n- fix: error when exporting reassigned state from module context ([#10728](https://github.com/sveltejs/svelte/pull/10728))\n\n## 5.0.0-next.72\n\n### Patch Changes\n\n- fix: adjust keyed each block equality handling ([#10699](https://github.com/sveltejs/svelte/pull/10699))\n\n- fix: improve indexed each equality ([#10702](https://github.com/sveltejs/svelte/pull/10702))\n\n- fix: prevent snippet children conflict ([#10700](https://github.com/sveltejs/svelte/pull/10700))\n\n## 5.0.0-next.71\n\n### Patch Changes\n\n- fix: improve namespace inference when having `{@render}` and `{@html}` tags ([#10631](https://github.com/sveltejs/svelte/pull/10631))\n\n- fix: don't collapse whitespace within text nodes ([#10691](https://github.com/sveltejs/svelte/pull/10691))\n\n## 5.0.0-next.70\n\n### Patch Changes\n\n- fix: better ownership mutation validation ([#10673](https://github.com/sveltejs/svelte/pull/10673))\n\n- fix: handle TypeScript's optional parameter syntax in snippets ([#10671](https://github.com/sveltejs/svelte/pull/10671))\n\n- fix: deduplicate generated props and action arg names ([#10669](https://github.com/sveltejs/svelte/pull/10669))\n\n## 5.0.0-next.69\n\n### Patch Changes\n\n- perf: bail early when traversing non-state ([#10654](https://github.com/sveltejs/svelte/pull/10654))\n\n- feat: improve ssr html mismatch validation ([#10658](https://github.com/sveltejs/svelte/pull/10658))\n\n- fix: improve ssr output of dynamic textarea elements ([#10638](https://github.com/sveltejs/svelte/pull/10638))\n\n- fix: improve ssr code generation for class property $derived ([#10661](https://github.com/sveltejs/svelte/pull/10661))\n\n- fix: warn when `$props` rune not called ([#10655](https://github.com/sveltejs/svelte/pull/10655))\n\n- fix: improve derived rune destructuring support ([#10665](https://github.com/sveltejs/svelte/pull/10665))\n\n- feat: allow arbitrary call expressions and optional chaining for snippets ([#10656](https://github.com/sveltejs/svelte/pull/10656))\n\n- fix: add `$set` and `$on` methods in legacy compat mode ([#10642](https://github.com/sveltejs/svelte/pull/10642))\n\n## 5.0.0-next.68\n\n### Patch Changes\n\n- fix: improve deep_read performance ([#10624](https://github.com/sveltejs/svelte/pull/10624))\n\n## 5.0.0-next.67\n\n### Patch Changes\n\n- fix: improve event delegation with shadowed bindings ([#10620](https://github.com/sveltejs/svelte/pull/10620))\n\n- feat: add reactive Date object to svelte/reactivity ([#10622](https://github.com/sveltejs/svelte/pull/10622))\n\n## 5.0.0-next.66\n\n### Patch Changes\n\n- fix: don't clear date input on temporarily invalid value ([#10616](https://github.com/sveltejs/svelte/pull/10616))\n\n- fix: use safe-equals comparison for `@const` tags in legacy mode ([#10606](https://github.com/sveltejs/svelte/pull/10606))\n\n- fix: improve proxy effect dependency tracking ([#10605](https://github.com/sveltejs/svelte/pull/10605))\n\n- fix: prevent window listeners from triggering events twice ([#10611](https://github.com/sveltejs/svelte/pull/10611))\n\n- feat: allow dynamic `type` attribute with `bind:value` ([#10608](https://github.com/sveltejs/svelte/pull/10608))\n\n- fix: make `bind_this` implementation more robust ([#10598](https://github.com/sveltejs/svelte/pull/10598))\n\n- fix: tweak initial `bind:clientWidth/clientHeight/offsetWidth/offsetHeight` update timing ([#10512](https://github.com/sveltejs/svelte/pull/10512))\n\n- fix: correctly handle proxied signal writes before reads ([#10612](https://github.com/sveltejs/svelte/pull/10612))\n\n## 5.0.0-next.65\n\n### Patch Changes\n\n- fix: improve $inspect handling of derived objects ([#10584](https://github.com/sveltejs/svelte/pull/10584))\n\n- fix: permit whitespace within template scripts ([#10591](https://github.com/sveltejs/svelte/pull/10591))\n\n- fix: allow boolean `contenteditable` attribute ([#10590](https://github.com/sveltejs/svelte/pull/10590))\n\n- fix: improve import event handler support ([#10592](https://github.com/sveltejs/svelte/pull/10592))\n\n## 5.0.0-next.64\n\n### Patch Changes\n\n- fix: inherit ownerlessness when creating child proxies ([#10577](https://github.com/sveltejs/svelte/pull/10577))\n\n## 5.0.0-next.63\n\n### Patch Changes\n\n- fix: handle member expressions in directives ([#10576](https://github.com/sveltejs/svelte/pull/10576))\n\n- fix: remove memory leak ([#10570](https://github.com/sveltejs/svelte/pull/10570))\n\n- fix: call beforeUpdate/afterUpdate callbacks when props are mutated ([#10570](https://github.com/sveltejs/svelte/pull/10570))\n\n- fix: improve props spreading logic ([#10574](https://github.com/sveltejs/svelte/pull/10574))\n\n## 5.0.0-next.62\n\n### Patch Changes\n\n- feat: allow state/derived/props to be explicitly exported from components ([#10523](https://github.com/sveltejs/svelte/pull/10523))\n\n- fix: replace proxy-based readonly validation with stack-trace-based ownership tracking ([#10464](https://github.com/sveltejs/svelte/pull/10464))\n\n- fix: correct context applied to batch_inspect ([#10569](https://github.com/sveltejs/svelte/pull/10569))\n\n## 5.0.0-next.61\n\n### Patch Changes\n\n- fix: improve each block item equality for immutable mode ([#10537](https://github.com/sveltejs/svelte/pull/10537))\n\n- fix: improve handling of unowned derived signals ([#10565](https://github.com/sveltejs/svelte/pull/10565))\n\n- fix: better handling of empty text node hydration ([#10545](https://github.com/sveltejs/svelte/pull/10545))\n\n- fix: ensure update methods of actions and reactive statements work with fine-grained `$state` ([#10543](https://github.com/sveltejs/svelte/pull/10543))\n\n- fix: don't execute scripts inside `@html` when instantiated on the client ([#10556](https://github.com/sveltejs/svelte/pull/10556))\n\n- fix: only escape characters in SSR template ([#10555](https://github.com/sveltejs/svelte/pull/10555))\n\n- fix: wire up `events` in `mount` correctly and fix its types ([#10553](https://github.com/sveltejs/svelte/pull/10553))\n\n- fix: better handling of derived signals that have no dependencies ([#10558](https://github.com/sveltejs/svelte/pull/10558))\n\n- fix: improve state store mutation compiler output ([#10561](https://github.com/sveltejs/svelte/pull/10561))\n\n## 5.0.0-next.60\n\n### Patch Changes\n\n- fix: improve effect over-fire on store subscription init ([#10535](https://github.com/sveltejs/svelte/pull/10535))\n\n- fix: use init properties when exporting non-state values in prod ([#10521](https://github.com/sveltejs/svelte/pull/10521))\n\n## 5.0.0-next.59\n\n### Patch Changes\n\n- chore: improve code generation for `bind:this` in SSR mode ([#10524](https://github.com/sveltejs/svelte/pull/10524))\n\n- fix: visit expression node in directives ([#10527](https://github.com/sveltejs/svelte/pull/10527))\n\n## 5.0.0-next.58\n\n### Patch Changes\n\n- breaking: remove `createRoot`, adjust `mount`/`hydrate` APIs, introduce `unmount` ([#10516](https://github.com/sveltejs/svelte/pull/10516))\n\n## 5.0.0-next.57\n\n### Patch Changes\n\n- fix: correctly scope CSS selectors with descendant combinators ([#10490](https://github.com/sveltejs/svelte/pull/10490))\n\n- feat: implement support for `:is(...)` and `:where(...)` ([#10490](https://github.com/sveltejs/svelte/pull/10490))\n\n- chore: treeshake unused store subscriptions in SSR mode ([#10506](https://github.com/sveltejs/svelte/pull/10506))\n\n- fix: warn against accidental global event referenced ([#10442](https://github.com/sveltejs/svelte/pull/10442))\n\n- fix: improve bind:this support for each blocks ([#10510](https://github.com/sveltejs/svelte/pull/10510))\n\n- feat: implement nested CSS support ([#10490](https://github.com/sveltejs/svelte/pull/10490))\n\n- breaking: encapsulate/remove selectors inside `:is(...)` and `:where(...)` ([#10490](https://github.com/sveltejs/svelte/pull/10490))\n\n## 5.0.0-next.56\n\n### Patch Changes\n\n- feat: add hydrate method, make hydration treeshakeable ([#10497](https://github.com/sveltejs/svelte/pull/10497))\n\n- fix: makes keyed each blocks consistent between dev and prod ([#10500](https://github.com/sveltejs/svelte/pull/10500))\n\n- fix: subscribe to stores in `transition`,`animation`,`use` directives ([#10481](https://github.com/sveltejs/svelte/pull/10481))\n\n## 5.0.0-next.55\n\n### Patch Changes\n\n- feat: derive destructured derived objects values ([#10488](https://github.com/sveltejs/svelte/pull/10488))\n\n- fix: prevent infinite loop when writing to store using shorthand ([#10477](https://github.com/sveltejs/svelte/pull/10477))\n\n- fix: add proper source map support ([#10459](https://github.com/sveltejs/svelte/pull/10459))\n\n## 5.0.0-next.54\n\n### Patch Changes\n\n- breaking: replace `$derived.call` with `$derived.by` ([#10445](https://github.com/sveltejs/svelte/pull/10445))\n\n- fix: improve global transition outro handling ([#10474](https://github.com/sveltejs/svelte/pull/10474))\n\n## 5.0.0-next.53\n\n### Patch Changes\n\n- fix: only throw bind error when not passing a value ([#10090](https://github.com/sveltejs/svelte/pull/10090))\n\n- fix: improve global transition handling of effect cleardown ([#10469](https://github.com/sveltejs/svelte/pull/10469))\n\n- fix: improve handling of object property deletions ([#10456](https://github.com/sveltejs/svelte/pull/10456))\n\n- fix: ensure inspect fires on prop changes ([#10468](https://github.com/sveltejs/svelte/pull/10468))\n\n## 5.0.0-next.52\n\n### Patch Changes\n\n- fix: use hybrid scoping strategy for consistent specificity increase ([#10443](https://github.com/sveltejs/svelte/pull/10443))\n\n- fix: throw validation error when binding to each argument in runes mode ([#10441](https://github.com/sveltejs/svelte/pull/10441))\n\n- fix: make CSS animation declaration transformation more robust ([#10432](https://github.com/sveltejs/svelte/pull/10432))\n\n- fix: handle sole empty expression tags ([#10433](https://github.com/sveltejs/svelte/pull/10433))\n\n## 5.0.0-next.51\n\n### Patch Changes\n\n- fix: align `beforeUpdate`/`afterUpdate` behavior better with that in Svelte 4 ([#10408](https://github.com/sveltejs/svelte/pull/10408))\n\n- fix: disallow exporting props, derived and reassigned state from within components ([#10430](https://github.com/sveltejs/svelte/pull/10430))\n\n- fix: improve indexed each array reconcilation ([#10422](https://github.com/sveltejs/svelte/pull/10422))\n\n- fix: add compiler error for each block mutations in runes mode ([#10428](https://github.com/sveltejs/svelte/pull/10428))\n\n## 5.0.0-next.50\n\n### Patch Changes\n\n- fix: set `open` binding value in `<details>` ([#10413](https://github.com/sveltejs/svelte/pull/10413))\n\n## 5.0.0-next.49\n\n### Patch Changes\n\n- fix: properly analyze group expressions ([#10410](https://github.com/sveltejs/svelte/pull/10410))\n\n- fix: handle nested script tags ([#10416](https://github.com/sveltejs/svelte/pull/10416))\n\n- fix: only update lazy properties that have actually changed ([#10415](https://github.com/sveltejs/svelte/pull/10415))\n\n- fix: correctly determine binding scope of `let:` directives ([#10395](https://github.com/sveltejs/svelte/pull/10395))\n\n- fix: run `onDestroy` callbacks during SSR ([#10297](https://github.com/sveltejs/svelte/pull/10297))\n\n## 5.0.0-next.48\n\n### Patch Changes\n\n- chore: bump zimmerframe to fix bugs introduced in previous version ([#10405](https://github.com/sveltejs/svelte/pull/10405))\n\n## 5.0.0-next.47\n\n### Patch Changes\n\n- chore: bump zimmerframe to resolve AST-traversal-related bugs ([`b63ab91c7b92ecec6e7e939d6d509fc3008cf048`](https://github.com/sveltejs/svelte/commit/b63ab91c7b92ecec6e7e939d6d509fc3008cf048))\n\n## 5.0.0-next.46\n\n### Patch Changes\n\n- fix: allow `let:` directives on slot elements ([#10391](https://github.com/sveltejs/svelte/pull/10391))\n\n- fix: repair each block length mismatches during hydration ([#10398](https://github.com/sveltejs/svelte/pull/10398))\n\n## 5.0.0-next.45\n\n### Patch Changes\n\n- fix: correctly determine `bind:group` members ([#10368](https://github.com/sveltejs/svelte/pull/10368))\n\n- fix: make inline doc links valid ([#10365](https://github.com/sveltejs/svelte/pull/10365))\n\n## 5.0.0-next.44\n\n### Patch Changes\n\n- fix: bindings with typescript assertions ([#10329](https://github.com/sveltejs/svelte/pull/10329))\n\n- fix: only reuse state proxies that belong to the current value ([#10343](https://github.com/sveltejs/svelte/pull/10343))\n\n## 5.0.0-next.43\n\n### Patch Changes\n\n- fix: insert empty text nodes while hydrating, if necessary ([#9729](https://github.com/sveltejs/svelte/pull/9729))\n\n- fix: correctly update tweened store initialized with nullish value ([#10356](https://github.com/sveltejs/svelte/pull/10356))\n\n## 5.0.0-next.42\n\n### Patch Changes\n\n- breaking: snippets can now take multiple arguments, support default parameters. Because of this, the type signature has changed ([#9988](https://github.com/sveltejs/svelte/pull/9988))\n\n- Use generic `T` as the return type for `$derived.call()` ([#10349](https://github.com/sveltejs/svelte/pull/10349))\n\n- fix: replace TODO errors ([#10326](https://github.com/sveltejs/svelte/pull/10326))\n\n- fix: add proper typings for `$derived.call` ([`6145be5c695a063c70944272a42d9c63fdd71d64`](https://github.com/sveltejs/svelte/commit/6145be5c695a063c70944272a42d9c63fdd71d64))\n\n- fix: improve handling of unowned derived signals ([#10342](https://github.com/sveltejs/svelte/pull/10342))\n\n- fix: correctly reference destructured derived binding in event handler ([#10333](https://github.com/sveltejs/svelte/pull/10333))\n\n- fix: add `scrollend` event type ([#10337](https://github.com/sveltejs/svelte/pull/10337))\n\n- fix: improve unstate handling of non enumerable properties ([#10348](https://github.com/sveltejs/svelte/pull/10348))\n\n## 5.0.0-next.41\n\n### Patch Changes\n\n- fix: handle event delegation correctly when having sibling event listeners ([#10307](https://github.com/sveltejs/svelte/pull/10307))\n\n- chore: add $derived.call rune ([#10240](https://github.com/sveltejs/svelte/pull/10240))\n\n## 5.0.0-next.40\n\n### Patch Changes\n\n- chore: cleanup derived destruction ([#10303](https://github.com/sveltejs/svelte/pull/10303))\n\n- fix: correctly parse at-rules containing special characters in strings ([#10221](https://github.com/sveltejs/svelte/pull/10221))\n\n- fix: Add missing `miter-clip` and `arcs` values to `stroke-linejoin` attribute ([#10141](https://github.com/sveltejs/svelte/pull/10141))\n\n## 5.0.0-next.39\n\n### Patch Changes\n\n- fix: handle deep assignments to `$state()` class properties correctly ([#10289](https://github.com/sveltejs/svelte/pull/10289))\n\n- fix: prevent false positive store error in module script ([#10291](https://github.com/sveltejs/svelte/pull/10291))\n\n- fix: allow type selector in `:global()` when it's at a start of a compound selector ([#10287](https://github.com/sveltejs/svelte/pull/10287))\n\n## 5.0.0-next.38\n\n### Patch Changes\n\n- chore: improve should_proxy_or_freeze logic internally ([#10249](https://github.com/sveltejs/svelte/pull/10249))\n\n- fix: add back `derived` type overload ([`776ac3c1762da5f8147c457a997a417cfae67e4c`](https://github.com/sveltejs/svelte/commit/776ac3c1762da5f8147c457a997a417cfae67e4c))\n\n- fix: more robust url equality check at dev time ([`14d7b26897cbfa129847c446b0ecf9557d77ef7c`](https://github.com/sveltejs/svelte/commit/14d7b26897cbfa129847c446b0ecf9557d77ef7c))\n\n- fix: correct increment/decrement code generation ([`2861ad66e054d2b14f382aaada4512e3e5d56db8`](https://github.com/sveltejs/svelte/commit/2861ad66e054d2b14f382aaada4512e3e5d56db8))\n\n- fix: sanitize component event names ([#10235](https://github.com/sveltejs/svelte/pull/10235))\n\n- fix: don't hoist function when already referenced in module scope ([`1538264bd5ed431d3048d54efe9c83c4db7fb42a`](https://github.com/sveltejs/svelte/commit/1538264bd5ed431d3048d54efe9c83c4db7fb42a))\n\n- fix: try-catch deep read during `$inspect` ([#10270](https://github.com/sveltejs/svelte/pull/10270))\n\n- fix: allow ts casts in bindings ([#10181](https://github.com/sveltejs/svelte/pull/10181))\n\n- fix: allow `:global(..)` in compound selectors ([#10266](https://github.com/sveltejs/svelte/pull/10266))\n\n- fix: hydrate controlled each blocks correctly ([#10259](https://github.com/sveltejs/svelte/pull/10259))\n\n- chore: improve $state static reference warning heuristics ([#10275](https://github.com/sveltejs/svelte/pull/10275))\n\n- fix: correctly cleanup unowned derived dependency memory ([#10280](https://github.com/sveltejs/svelte/pull/10280))\n\n- fix: ensure proxy is updated before notifying listeners ([#10267](https://github.com/sveltejs/svelte/pull/10267))\n\n## 5.0.0-next.37\n\n### Patch Changes\n\n- fix: skip certain slot validations for custom elements ([#10207](https://github.com/sveltejs/svelte/pull/10207))\n\n- fix: add compiler error for invalid `<p>` contents ([#10201](https://github.com/sveltejs/svelte/pull/10201))\n\n- fix: correctly apply event.currentTarget ([#10216](https://github.com/sveltejs/svelte/pull/10216))\n\n- fix: ensure derived signals properly capture consumers ([#10213](https://github.com/sveltejs/svelte/pull/10213))\n\n## 5.0.0-next.36\n\n### Patch Changes\n\n- fix: transform textarea and contenteditable binding expressions ([#10187](https://github.com/sveltejs/svelte/pull/10187))\n\n- fix: improve transition outro easing ([#10190](https://github.com/sveltejs/svelte/pull/10190))\n\n- fix: ensure unstate() only deeply applies to plain objects and arrays ([#10191](https://github.com/sveltejs/svelte/pull/10191))\n\n- fix: improve invalid nested interactive element error ([#10199](https://github.com/sveltejs/svelte/pull/10199))\n\n- fix: react to mutated slot props in legacy mode ([#10197](https://github.com/sveltejs/svelte/pull/10197))\n\n## 5.0.0-next.35\n\n### Patch Changes\n\n- fix: improve nested effect heuristics ([#10171](https://github.com/sveltejs/svelte/pull/10171))\n\n- fix: simplify event delegation logic, only delegate event attributes ([#10169](https://github.com/sveltejs/svelte/pull/10169))\n\n- fix: prevent transition action overfiring ([#10163](https://github.com/sveltejs/svelte/pull/10163))\n\n- fix: improve event handling compatibility with delegation ([#10168](https://github.com/sveltejs/svelte/pull/10168))\n\n- fix: ensure topological order for render effects ([#10175](https://github.com/sveltejs/svelte/pull/10175))\n\n## 5.0.0-next.34\n\n### Patch Changes\n\n- fix: make `@types/estree` a dependency ([#10150](https://github.com/sveltejs/svelte/pull/10150))\n\n- fix: improve intro transitions on dynamic mount ([#10162](https://github.com/sveltejs/svelte/pull/10162))\n\n- fix: improve code generation ([#10156](https://github.com/sveltejs/svelte/pull/10156))\n\n- fix: adjust `$inspect.with` type ([`c7cb90c91`](https://github.com/sveltejs/svelte/commit/c7cb90c91cd3553ad59126267c9bfddecbb290b4))\n\n- fix: improve how transitions are handled on mount ([#10157](https://github.com/sveltejs/svelte/pull/10157))\n\n- fix: adjust `parse` return type ([`a271878ab`](https://github.com/sveltejs/svelte/commit/a271878abe7018923839401129b18082eb2c811a))\n\n## 5.0.0-next.33\n\n### Patch Changes\n\n- fix: improve ssr template code generation ([#10151](https://github.com/sveltejs/svelte/pull/10151))\n\n- fix: improve template literal expression output generation ([#10147](https://github.com/sveltejs/svelte/pull/10147))\n\n## 5.0.0-next.32\n\n### Patch Changes\n\n- fix: improve outro behavior with transitions ([#10139](https://github.com/sveltejs/svelte/pull/10139))\n\n- chore: remove internal functions from `svelte/transition` exports ([#10132](https://github.com/sveltejs/svelte/pull/10132))\n\n- fix: further animation transition improvements ([#10138](https://github.com/sveltejs/svelte/pull/10138))\n\n- fix: improve animation transition heuristics ([#10119](https://github.com/sveltejs/svelte/pull/10119))\n\n## 5.0.0-next.31\n\n### Patch Changes\n\n- fix: infer `svg` namespace correctly ([#10027](https://github.com/sveltejs/svelte/pull/10027))\n\n- fix: keep intermediate number value representations ([`d171a39b0`](https://github.com/sveltejs/svelte/commit/d171a39b0ad97e2a05de1f38bc76a3d345e2b3d5))\n\n- feat: allow modifiying derived props ([#10080](https://github.com/sveltejs/svelte/pull/10080))\n\n- fix: improve signal consumer tracking behavior ([#10121](https://github.com/sveltejs/svelte/pull/10121))\n\n- fix: support async/await in destructuring assignments ([#9962](https://github.com/sveltejs/svelte/pull/9962))\n\n- fix: take into account member expressions when determining legacy reactive dependencies ([#10128](https://github.com/sveltejs/svelte/pull/10128))\n\n- fix: make `ComponentType` generic optional ([`14dbc1be1`](https://github.com/sveltejs/svelte/commit/14dbc1be1720ff69e6f3c407e43c9c0765b0c140))\n\n- fix: silence false positive state warning ([`dda4ad510`](https://github.com/sveltejs/svelte/commit/dda4ad510f1907a114a16227c3412eb00bd21738))\n\n- fix: ensure nested blocks are inert during outro transitions ([#10126](https://github.com/sveltejs/svelte/pull/10126))\n\n- fix: improve ssr template literal generation ([#10127](https://github.com/sveltejs/svelte/pull/10127))\n\n## 5.0.0-next.30\n\n### Patch Changes\n\n- fix: allow transition undefined payload ([#10117](https://github.com/sveltejs/svelte/pull/10117))\n\n- fix: apply key animations on proxied arrays ([#10113](https://github.com/sveltejs/svelte/pull/10113))\n\n- fix: improve internal signal dependency checking logic ([#10111](https://github.com/sveltejs/svelte/pull/10111))\n\n- fix: correctly call exported state ([#10114](https://github.com/sveltejs/svelte/pull/10114))\n\n- fix: take into account setters when spreading and binding ([#10091](https://github.com/sveltejs/svelte/pull/10091))\n\n- fix: transform `{@render ...}` expression ([#10116](https://github.com/sveltejs/svelte/pull/10116))\n\n## 5.0.0-next.29\n\n### Patch Changes\n\n- fix: improve text node output ([#10081](https://github.com/sveltejs/svelte/pull/10081))\n\n- fix: improve style parser whitespace handling ([#10077](https://github.com/sveltejs/svelte/pull/10077))\n\n- fix: allow input elements within button elements ([#10083](https://github.com/sveltejs/svelte/pull/10083))\n\n- fix: support TypeScript's `satisfies` operator ([#10068](https://github.com/sveltejs/svelte/pull/10068))\n\n- fix: provide `unstate` in server environment ([`877ff1ee7`](https://github.com/sveltejs/svelte/commit/877ff1ee7d637e2248145d975748e1012a977396))\n\n- fix: improve key block reactivity detection ([#10092](https://github.com/sveltejs/svelte/pull/10092))\n\n- fix: always treat spread attributes as reactive and separate them if needed ([#10071](https://github.com/sveltejs/svelte/pull/10071))\n\n## 5.0.0-next.28\n\n### Patch Changes\n\n- fix: deeply unstate objects passed to inspect ([#10056](https://github.com/sveltejs/svelte/pull/10056))\n\n- fix: handle delegated events of elements moved outside the container ([#10060](https://github.com/sveltejs/svelte/pull/10060))\n\n- fix: improve script `lang` attribute detection ([#10046](https://github.com/sveltejs/svelte/pull/10046))\n\n- fix: improve pseudo class parsing ([#10055](https://github.com/sveltejs/svelte/pull/10055))\n\n- fix: add types for popover attributes and events ([#10041](https://github.com/sveltejs/svelte/pull/10041))\n\n- fix: skip generating $.proxy() calls for unary and binary expressions ([#9979](https://github.com/sveltejs/svelte/pull/9979))\n\n- fix: allow pseudo classes after `:global(..)` ([#10055](https://github.com/sveltejs/svelte/pull/10055))\n\n- fix: bail-out event handler referencing each index ([#10063](https://github.com/sveltejs/svelte/pull/10063))\n\n- fix: parse `:nth-of-type(xn+y)` correctly ([#9970](https://github.com/sveltejs/svelte/pull/9970))\n\n- fix: ensure if block is executed in correct order ([#10053](https://github.com/sveltejs/svelte/pull/10053))\n\n## 5.0.0-next.27\n\n### Patch Changes\n\n- fix: evaluate transition parameters when the transition runs ([#9836](https://github.com/sveltejs/svelte/pull/9836))\n\n- feat: add `$state.frozen` rune ([#9851](https://github.com/sveltejs/svelte/pull/9851))\n\n- fix: correctly transform prop fallback values that use other props ([#9985](https://github.com/sveltejs/svelte/pull/9985))\n\n- fix: escape template literal characters in text sequences ([#9973](https://github.com/sveltejs/svelte/pull/9973))\n\n- fix: inject comment in place of `<noscript>` in client output ([#9953](https://github.com/sveltejs/svelte/pull/9953))\n\n## 5.0.0-next.26\n\n### Patch Changes\n\n- fix: better handle array property deletion reactivity ([#9921](https://github.com/sveltejs/svelte/pull/9921))\n\n- fix: improve event delegation handler hoisting ([#9929](https://github.com/sveltejs/svelte/pull/9929))\n\n## 5.0.0-next.25\n\n### Patch Changes\n\n- fix: improve whitespace handling ([#9912](https://github.com/sveltejs/svelte/pull/9912))\n\n- fix: improve each block fallback handling ([#9914](https://github.com/sveltejs/svelte/pull/9914))\n\n- fix: cleanup each block animations on destroy ([#9917](https://github.com/sveltejs/svelte/pull/9917))\n\n## 5.0.0-next.24\n\n### Patch Changes\n\n- fix: improve props aliasing ([#9900](https://github.com/sveltejs/svelte/pull/9900))\n\n- feat: add support for `{@const}` inside snippet block ([#9904](https://github.com/sveltejs/svelte/pull/9904))\n\n- fix: improve attribute directive reactivity detection ([#9907](https://github.com/sveltejs/svelte/pull/9907))\n\n- fix: improve $inspect batching ([#9902](https://github.com/sveltejs/svelte/pull/9902))\n\n- chore: improve readonly prop messaging ([#9901](https://github.com/sveltejs/svelte/pull/9901))\n\n- fix: better support for top-level snippet declarations ([#9898](https://github.com/sveltejs/svelte/pull/9898))\n\n## 5.0.0-next.23\n\n### Patch Changes\n\n- feat: add `gamepadconnected` and `gamepaddisconnected` events ([#9861](https://github.com/sveltejs/svelte/pull/9861))\n\n- fix: improve unstate type definition ([#9895](https://github.com/sveltejs/svelte/pull/9895))\n\n- fix: correctly reflect readonly proxy marker ([#9893](https://github.com/sveltejs/svelte/pull/9893))\n\n- chore: improve each block fast-path heuristic ([#9855](https://github.com/sveltejs/svelte/pull/9855))\n\n- fix: improve html tag svg behaviour ([#9894](https://github.com/sveltejs/svelte/pull/9894))\n\n- fix: ensure class constructor values are proxied ([#9888](https://github.com/sveltejs/svelte/pull/9888))\n\n- fix: improve each block index handling ([#9889](https://github.com/sveltejs/svelte/pull/9889))\n\n## 5.0.0-next.22\n\n### Patch Changes\n\n- fix: handle event hoisting props referencing ([#9846](https://github.com/sveltejs/svelte/pull/9846))\n\n- fix: support dynamic transition functions ([#9844](https://github.com/sveltejs/svelte/pull/9844))\n\n- fix: ensure action function returns object ([#9848](https://github.com/sveltejs/svelte/pull/9848))\n\n## 5.0.0-next.21\n\n### Patch Changes\n\n- chore: refactor props handling ([#9826](https://github.com/sveltejs/svelte/pull/9826))\n\n- fix: improve each key animations ([#9842](https://github.com/sveltejs/svelte/pull/9842))\n\n- chore: avoid creating thunk for call expressions when appropriate ([#9841](https://github.com/sveltejs/svelte/pull/9841))\n\n- fix: improve signal consumer removal logic ([#9837](https://github.com/sveltejs/svelte/pull/9837))\n\n- fix: ensure computed props are wrapped in derived ([#9835](https://github.com/sveltejs/svelte/pull/9835))\n\n- fix: better handle unowned derived signals ([#9832](https://github.com/sveltejs/svelte/pull/9832))\n\n- fix: improve each block with animate ([#9839](https://github.com/sveltejs/svelte/pull/9839))\n\n- breaking: change `$inspect` API ([#9838](https://github.com/sveltejs/svelte/pull/9838))\n\n## 5.0.0-next.20\n\n### Patch Changes\n\n- fix: better readonly checks for proxies ([#9808](https://github.com/sveltejs/svelte/pull/9808))\n\n- fix: prevent infinite loops stemming from invalidation method ([#9811](https://github.com/sveltejs/svelte/pull/9811))\n\n- fix: improve non state referenced warning ([#9809](https://github.com/sveltejs/svelte/pull/9809))\n\n- fix: reuse existing proxy when object has multiple references ([#9821](https://github.com/sveltejs/svelte/pull/9821))\n\n- fix: improve consistency issues around binding invalidation ([#9810](https://github.com/sveltejs/svelte/pull/9810))\n\n- fix: tweak css nth regex ([#9806](https://github.com/sveltejs/svelte/pull/9806))\n\n- fix: adjust children snippet default type ([`dcdd64548`](https://github.com/sveltejs/svelte/commit/dcdd645480ab412eb563632e70801f4d61c1d787))\n\n- fix: correctly apply scope on component children ([#9824](https://github.com/sveltejs/svelte/pull/9824))\n\n## 5.0.0-next.19\n\n### Patch Changes\n\n- feat: add unstate utility function ([#9776](https://github.com/sveltejs/svelte/pull/9776))\n\n- fix: ensure proxied array length is updated ([#9782](https://github.com/sveltejs/svelte/pull/9782))\n\n- chore: fix compiler errors test suite ([#9754](https://github.com/sveltejs/svelte/pull/9754))\n\n- fix: ensure transitions properly cancel on completion ([#9778](https://github.com/sveltejs/svelte/pull/9778))\n\n- feat: make fallback prop values readonly ([#9789](https://github.com/sveltejs/svelte/pull/9789))\n\n- fix: tweak invalid dollar prefix rules around function args ([#9792](https://github.com/sveltejs/svelte/pull/9792))\n\n- fix: ensure generated code does not use keywords as variable names ([#9790](https://github.com/sveltejs/svelte/pull/9790))\n\n- feat: disallow fallback values with bindings in runes mode ([#9784](https://github.com/sveltejs/svelte/pull/9784))\n\n- fix: apply event attribute validation to elements only ([#9772](https://github.com/sveltejs/svelte/pull/9772))\n\n- fix: handle css nth-selector syntax ([#9754](https://github.com/sveltejs/svelte/pull/9754))\n\n- feat: throw descriptive error for using runes globals outside of Svelte-compiled files ([#9773](https://github.com/sveltejs/svelte/pull/9773))\n\n## 5.0.0-next.18\n\n### Patch Changes\n\n- feat: proxied state ([#9739](https://github.com/sveltejs/svelte/pull/9739))\n\n- chore: more validation errors ([#9723](https://github.com/sveltejs/svelte/pull/9723))\n\n- fix: allow duplicate snippet declaration names ([#9759](https://github.com/sveltejs/svelte/pull/9759))\n\n- fix: ensure computed props are cached with derived ([#9757](https://github.com/sveltejs/svelte/pull/9757))\n\n- fix: ensure event handlers containing arguments are not hoisted ([#9758](https://github.com/sveltejs/svelte/pull/9758))\n\n## 5.0.0-next.17\n\n### Patch Changes\n\n- fix: improve `$inspect` type definition ([#9731](https://github.com/sveltejs/svelte/pull/9731))\n\n- fix: correctly inspect derived values ([#9731](https://github.com/sveltejs/svelte/pull/9731))\n\n## 5.0.0-next.16\n\n### Patch Changes\n\n- fix: delegate events on elements with bind-this ([#9696](https://github.com/sveltejs/svelte/pull/9696))\n\n- fix: ensure implicit children snippet renders correctly ([#9706](https://github.com/sveltejs/svelte/pull/9706))\n\n- fix: ensure `$slots` exists in runes mode ([#9718](https://github.com/sveltejs/svelte/pull/9718))\n\n- fix: allow `bind:this` with dynamic type on inputs ([#9713](https://github.com/sveltejs/svelte/pull/9713))\n\n- fix: port over props that were set prior to initialisation ([#9704](https://github.com/sveltejs/svelte/pull/9704))\n\n- feat: $inspect rune ([#9705](https://github.com/sveltejs/svelte/pull/9705))\n\n- fix: keep fallback value after spread update not setting that prop ([#9717](https://github.com/sveltejs/svelte/pull/9717))\n\n- fix: tweak const tag parsing ([#9715](https://github.com/sveltejs/svelte/pull/9715))\n\n- chore: remove redundant hydration code ([#9698](https://github.com/sveltejs/svelte/pull/9698))\n\n- fix: improve template text node serialization ([#9722](https://github.com/sveltejs/svelte/pull/9722))\n\n- fix: improve infinite loop capturing ([#9721](https://github.com/sveltejs/svelte/pull/9721))\n\n## 5.0.0-next.15\n\n### Patch Changes\n\n- fix: add children to element typings ([#9679](https://github.com/sveltejs/svelte/pull/9679))\n\n- fix: handle ts expressions when dealing with runes ([#9681](https://github.com/sveltejs/svelte/pull/9681))\n\n## 5.0.0-next.14\n\n### Patch Changes\n\n- feat: warn on references to mutated non-state in template ([#9669](https://github.com/sveltejs/svelte/pull/9669))\n\n- fix: prevent reactive snippet from reinitializing unnecessarily ([#9665](https://github.com/sveltejs/svelte/pull/9665))\n\n- fix: take event attributes into account when checking a11y ([#9664](https://github.com/sveltejs/svelte/pull/9664))\n\n- feat: add $effect.root rune ([#9638](https://github.com/sveltejs/svelte/pull/9638))\n\n- feat: support type definition in {@const} ([#9609](https://github.com/sveltejs/svelte/pull/9609))\n\n- feat: ignore `src`, `srcset`, and `href` attributes when hydrating ([#9662](https://github.com/sveltejs/svelte/pull/9662))\n\n- chore: bump esrap ([#9649](https://github.com/sveltejs/svelte/pull/9649))\n\n- chore: improve `<svelte:element>` generated code ([#9648](https://github.com/sveltejs/svelte/pull/9648))\n\n- chore: prevent some unused variable creation ([#9571](https://github.com/sveltejs/svelte/pull/9571))\n\n## 5.0.0-next.13\n\n### Patch Changes\n\n- fix: apply keyed validation only for keyed each ([#9641](https://github.com/sveltejs/svelte/pull/9641))\n\n- fix: omit this bind this arg if we know it's not a signal ([#9635](https://github.com/sveltejs/svelte/pull/9635))\n\n- fix: improve each block index handling ([#9644](https://github.com/sveltejs/svelte/pull/9644))\n\n## 5.0.0-next.12\n\n### Patch Changes\n\n- fix: adjust mount and createRoot types ([`63e583184`](https://github.com/sveltejs/svelte/commit/63e58318460dbb3485df93d15beb2779a86d2c9a))\n\n- fix: remove constructor overload ([`cb4b1f0a1`](https://github.com/sveltejs/svelte/commit/cb4b1f0a189803bed04adcb90fbd4334782e8469))\n\n- fix: type-level back-compat for default slot and children prop ([`a3bc7d569`](https://github.com/sveltejs/svelte/commit/a3bc7d5698425ec9dde86eb302f2fd56d9da8f96))\n\n## 5.0.0-next.11\n\n### Patch Changes\n\n- feat: add type of `$effect.active` ([#9624](https://github.com/sveltejs/svelte/pull/9624))\n\n- fix: correct bind this multiple bindings ([#9617](https://github.com/sveltejs/svelte/pull/9617))\n\n- chore: reuse common templates ([#9601](https://github.com/sveltejs/svelte/pull/9601))\n\n- fix: handle undefined bubble events ([#9614](https://github.com/sveltejs/svelte/pull/9614))\n\n- fix: dont error on stores looking like runes when runes explicitly turned off ([#9615](https://github.com/sveltejs/svelte/pull/9615))\n\n- fix: improve member expression mutation logic ([#9625](https://github.com/sveltejs/svelte/pull/9625))\n\n- chore: untrack keyed validation logic ([#9618](https://github.com/sveltejs/svelte/pull/9618))\n\n- fix: ensure snippets have correct scope ([#9623](https://github.com/sveltejs/svelte/pull/9623))\n\n- fix: better attribute casing logic ([#9626](https://github.com/sveltejs/svelte/pull/9626))\n\n## 5.0.0-next.10\n\n### Patch Changes\n\n- chore: add inline new class warning ([#9583](https://github.com/sveltejs/svelte/pull/9583))\n\n- fix: prevent false positives when detecting runes mode ([#9599](https://github.com/sveltejs/svelte/pull/9599))\n\n- fix: deconflict generated names against globals ([#9570](https://github.com/sveltejs/svelte/pull/9570))\n\n- chore: bump esrap ([#9590](https://github.com/sveltejs/svelte/pull/9590))\n\n- feat: add $effect.active rune ([#9591](https://github.com/sveltejs/svelte/pull/9591))\n\n- feat: add Snippet type ([#9584](https://github.com/sveltejs/svelte/pull/9584))\n\n- fix: adjust event delegation heuristics ([#9581](https://github.com/sveltejs/svelte/pull/9581))\n\n- chore: remove unused code ([#9593](https://github.com/sveltejs/svelte/pull/9593))\n\n- fix: adjust regex ([#9572](https://github.com/sveltejs/svelte/pull/9572))\n\n## 5.0.0-next.9\n\n### Patch Changes\n\n- chore: more transition code-golfing ([#9536](https://github.com/sveltejs/svelte/pull/9536))\n\n- feat: native TypeScript support ([#9482](https://github.com/sveltejs/svelte/pull/9482))\n\n## 5.0.0-next.8\n\n### Patch Changes\n\n- chore: rename internal object properties ([#9532](https://github.com/sveltejs/svelte/pull/9532))\n\n## 5.0.0-next.7\n\n### Patch Changes\n\n- chore: more signal perf tuning ([#9531](https://github.com/sveltejs/svelte/pull/9531))\n\n- fix: address intro transition bugs ([#9528](https://github.com/sveltejs/svelte/pull/9528))\n\n- chore: tweak signals for better runtime perf ([#9529](https://github.com/sveltejs/svelte/pull/9529))\n\n## 5.0.0-next.6\n\n### Patch Changes\n\n- fix: do not propagate global intro transitions ([#9515](https://github.com/sveltejs/svelte/pull/9515))\n\n## 5.0.0-next.5\n\n### Patch Changes\n\n- fix: tweak script/style tag parsing/preprocessing logic ([#9502](https://github.com/sveltejs/svelte/pull/9502))\n\n- fix: emit useful error on invalid binding to derived state ([#9497](https://github.com/sveltejs/svelte/pull/9497))\n\n- fix: address unowned propagation signal issue ([#9510](https://github.com/sveltejs/svelte/pull/9510))\n\n- fix: add top level snippets to instance scope ([#9467](https://github.com/sveltejs/svelte/pull/9467))\n\n- fix: only treat instance context exports as accessors ([#9500](https://github.com/sveltejs/svelte/pull/9500))\n\n- fix: allow setting files binding for `<input type=\"file\" />` ([#9463](https://github.com/sveltejs/svelte/pull/9463))\n\n- fix: add missing visitor for assignments during compilation ([#9511](https://github.com/sveltejs/svelte/pull/9511))\n\n## 5.0.0-next.4\n\n### Patch Changes\n\n- revert: address bug in before/after update ([#9480](https://github.com/sveltejs/svelte/pull/9480))\n\n## 5.0.0-next.3\n\n### Patch Changes\n\n- chore: use internal `get_descriptors` helper ([#9389](https://github.com/sveltejs/svelte/pull/9389))\n\n- chore: improve bundle code size ([#9476](https://github.com/sveltejs/svelte/pull/9476))\n\n- fix: coerce attribute value to string before comparison ([#9475](https://github.com/sveltejs/svelte/pull/9475))\n\n- fix: handle private fields in `class` in `.svelte.js` files ([#9394](https://github.com/sveltejs/svelte/pull/9394))\n\n- chore: make operations lazy ([#9468](https://github.com/sveltejs/svelte/pull/9468))\n\n- fix: allow svelte:self in snippets ([#9439](https://github.com/sveltejs/svelte/pull/9439))\n\n- fix: check that snippet is not rendered as a component ([#9423](https://github.com/sveltejs/svelte/pull/9423))\n\n- patch: ensure keyed each block fallback to indexed each block ([#9441](https://github.com/sveltejs/svelte/pull/9441))\n\n- fix: allow member access on directives ([#9462](https://github.com/sveltejs/svelte/pull/9462))\n\n- fix: handle dynamic selects with falsy select values ([#9471](https://github.com/sveltejs/svelte/pull/9471))\n\n- fix: ensure dynamic attributes containing call expressions update ([#9443](https://github.com/sveltejs/svelte/pull/9443))\n\n- fix: corrects a beforeUpdate/afterUpdate bug ([#9448](https://github.com/sveltejs/svelte/pull/9448))\n\n- fix: add missing files binding ([#9415](https://github.com/sveltejs/svelte/pull/9415))\n\n- fix: only escape attribute values for elements, not components ([#9456](https://github.com/sveltejs/svelte/pull/9456))\n\n- fix: handle event attribute spreading with event delegation ([#9433](https://github.com/sveltejs/svelte/pull/9433))\n\n- fix: support class exports ([#9465](https://github.com/sveltejs/svelte/pull/9465))\n\n- fix: treat `slot` the same as other props ([#9457](https://github.com/sveltejs/svelte/pull/9457))\n\n## 5.0.0-next.2\n\n### Patch Changes\n\n- breaking: remove selector api ([#9426](https://github.com/sveltejs/svelte/pull/9426))\n\n- fix: correct update_block index type ([#9425](https://github.com/sveltejs/svelte/pull/9425))\n\n- fix: tighten up signals implementation ([#9417](https://github.com/sveltejs/svelte/pull/9417))\n\n- fix: exclude internal props from spread attributes ([#9384](https://github.com/sveltejs/svelte/pull/9384))\n\n- chore: improve keyblock treeshaking ([#9422](https://github.com/sveltejs/svelte/pull/9422))\n\n- breaking: remove Component type, keep using SvelteComponent instead ([#9413](https://github.com/sveltejs/svelte/pull/9413))\n\n- fix: add snippet marker symbol to children prop ([#9395](https://github.com/sveltejs/svelte/pull/9395))\n\n## 5.0.0-next.1\n\n### Patch Changes\n\n- breaking: svelte 5 alpha ([#9381](https://github.com/sveltejs/svelte/pull/9381))\n"
  },
  {
    "path": "packages/svelte/README.md",
    "content": "<a href=\"https://svelte.dev\">\n\t<picture>\n\t\t<source media=\"(prefers-color-scheme: dark)\" srcset=\"../../assets/banner_dark.png\">\n\t\t<img src=\"../../assets/banner.png\" alt=\"Svelte - web development for the rest of us\" />\n\t</picture>\n</a>\n\n[![npm version](https://img.shields.io/npm/v/svelte.svg)](https://www.npmjs.com/package/svelte) [![license](https://img.shields.io/npm/l/svelte.svg)](LICENSE.md) [![Chat](https://img.shields.io/discord/457912077277855764?label=chat&logo=discord)](https://svelte.dev/chat)\n\n## What is Svelte?\n\nSvelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM.\n\nLearn more at the [Svelte website](https://svelte.dev), or stop by the [Discord chatroom](https://svelte.dev/chat).\n\n## Getting started\n\nYou can play around with Svelte in the [tutorial](https://svelte.dev/tutorial), [examples](https://svelte.dev/examples), and [REPL](https://svelte.dev/repl).\n\nWhen you're ready to build a full-fledge application, we recommend using [SvelteKit](https://svelte.dev/docs/kit):\n\n```sh\nnpx sv create my-app\ncd my-app\nnpm install\nnpm run dev\n```\n\nSee [the SvelteKit documentation](https://svelte.dev/docs/kit) to learn more.\n\n## Changelog\n\n[The Changelog for this package is available on GitHub](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md).\n\n## Supporting Svelte\n\nSvelte is an MIT-licensed open source project with its ongoing development made possible entirely by fantastic volunteers. If you'd like to support their efforts, please consider:\n\n- [Becoming a backer on Open Collective](https://opencollective.com/svelte).\n\nFunds donated via Open Collective will be used for compensating expenses related to Svelte's development.\n"
  },
  {
    "path": "packages/svelte/compiler/package.json",
    "content": "{\n  \"type\": \"commonjs\"\n}\n"
  },
  {
    "path": "packages/svelte/elements.d.ts",
    "content": "// Type definitions for Svelte HTML, based on JSX React 18 typings\n// Original Project/Authors:\n// Type definitions for React 18.0\n// Project: http://facebook.github.io/react/\n// Definitions by: Asana <https://asana.com>\n//                 AssureSign <http://www.assuresign.com>\n//                 Microsoft <https://microsoft.com>\n//                 John Reilly <https://github.com/johnnyreilly>\n//                 Benoit Benezech <https://github.com/bbenezech>\n//                 Patricio Zavolinsky <https://github.com/pzavolinsky>\n//                 Eric Anderson <https://github.com/ericanderson>\n//                 Dovydas Navickas <https://github.com/DovydasNavickas>\n//                 Josh Rutherford <https://github.com/theruther4d>\n//                 Guilherme Hübner <https://github.com/guilhermehubner>\n//                 Ferdy Budhidharma <https://github.com/ferdaber>\n//                 Johann Rakotoharisoa <https://github.com/jrakotoharisoa>\n//                 Olivier Pascal <https://github.com/pascaloliv>\n//                 Martin Hochel <https://github.com/hotell>\n//                 Frank Li <https://github.com/franklixuefei>\n//                 Jessica Franco <https://github.com/Jessidhia>\n//                 Saransh Kataria <https://github.com/saranshkataria>\n//                 Kanitkorn Sujautra <https://github.com/lukyth>\n//                 Sebastian Silbermann <https://github.com/eps1lon>\n//                 Kyle Scully <https://github.com/zieka>\n//                 Cong Zhang <https://github.com/dancerphil>\n//                 Dimitri Mitropoulos <https://github.com/dimitropoulos>\n//                 JongChan Choi <https://github.com/disjukr>\n//                 Victor Magalhães <https://github.com/vhfmag>\n//                 Dale Tan <https://github.com/hellatan>\n//                 Priyanshu Rav <https://github.com/priyanshurav>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.8\n\nimport type { Attachment } from 'svelte/attachments';\n\n// Note: We also allow `null` as a valid value because Svelte treats this the same as `undefined`\n\ntype Booleanish = boolean | 'true' | 'false';\n\n//\n// Event Handler Types\n// ----------------------------------------------------------------------\n\ntype EventHandler<E extends Event = Event, T extends EventTarget = Element> = (\n\tevent: E & { currentTarget: EventTarget & T }\n) => any;\n\nexport type ClipboardEventHandler<T extends EventTarget> = EventHandler<ClipboardEvent, T>;\nexport type CompositionEventHandler<T extends EventTarget> = EventHandler<CompositionEvent, T>;\nexport type DragEventHandler<T extends EventTarget> = EventHandler<DragEvent, T>;\nexport type FocusEventHandler<T extends EventTarget> = EventHandler<FocusEvent, T>;\nexport type FormEventHandler<T extends EventTarget> = EventHandler<Event, T>;\nexport type ChangeEventHandler<T extends EventTarget> = EventHandler<Event, T>;\nexport type KeyboardEventHandler<T extends EventTarget> = EventHandler<KeyboardEvent, T>;\nexport type MouseEventHandler<T extends EventTarget> = EventHandler<MouseEvent, T>;\nexport type TouchEventHandler<T extends EventTarget> = EventHandler<TouchEvent, T>;\nexport type PointerEventHandler<T extends EventTarget> = EventHandler<PointerEvent, T>;\nexport type GamepadEventHandler<T extends EventTarget> = EventHandler<GamepadEvent, T>;\nexport type UIEventHandler<T extends EventTarget> = EventHandler<UIEvent, T>;\nexport type WheelEventHandler<T extends EventTarget> = EventHandler<WheelEvent, T>;\nexport type AnimationEventHandler<T extends EventTarget> = EventHandler<AnimationEvent, T>;\nexport type TransitionEventHandler<T extends EventTarget> = EventHandler<TransitionEvent, T>;\nexport type MessageEventHandler<T extends EventTarget> = EventHandler<MessageEvent, T>;\nexport type ToggleEventHandler<T extends EventTarget> = EventHandler<ToggleEvent, T>;\nexport type ContentVisibilityAutoStateChangeEventHandler<T extends EventTarget> = EventHandler<\n\tContentVisibilityAutoStateChangeEvent,\n\tT\n>;\n\nexport type FullAutoFill =\n\t| AutoFill\n\t| 'bday'\n\t| `${OptionalPrefixToken<AutoFillAddressKind>}${'cc-additional-name'}`\n\t| 'nickname'\n\t| 'language'\n\t| 'organization-title'\n\t| 'photo'\n\t| 'sex'\n\t| 'url';\n\n//\n// DOM Attributes\n// ----------------------------------------------------------------------\n\nexport interface DOMAttributes<T extends EventTarget> {\n\t// Implicit children prop every element has\n\t// Add this here so that libraries doing `let { ...props }: HTMLButtonAttributes = $props()` don't need a separate interface\n\tchildren?: import('svelte').Snippet;\n\n\t// Clipboard Events\n\t'on:copy'?: ClipboardEventHandler<T> | undefined | null;\n\toncopy?: ClipboardEventHandler<T> | undefined | null;\n\toncopycapture?: ClipboardEventHandler<T> | undefined | null;\n\t'on:cut'?: ClipboardEventHandler<T> | undefined | null;\n\toncut?: ClipboardEventHandler<T> | undefined | null;\n\toncutcapture?: ClipboardEventHandler<T> | undefined | null;\n\t'on:paste'?: ClipboardEventHandler<T> | undefined | null;\n\tonpaste?: ClipboardEventHandler<T> | undefined | null;\n\tonpastecapture?: ClipboardEventHandler<T> | undefined | null;\n\n\t// Composition Events\n\t'on:compositionend'?: CompositionEventHandler<T> | undefined | null;\n\toncompositionend?: CompositionEventHandler<T> | undefined | null;\n\toncompositionendcapture?: CompositionEventHandler<T> | undefined | null;\n\t'on:compositionstart'?: CompositionEventHandler<T> | undefined | null;\n\toncompositionstart?: CompositionEventHandler<T> | undefined | null;\n\toncompositionstartcapture?: CompositionEventHandler<T> | undefined | null;\n\t'on:compositionupdate'?: CompositionEventHandler<T> | undefined | null;\n\toncompositionupdate?: CompositionEventHandler<T> | undefined | null;\n\toncompositionupdatecapture?: CompositionEventHandler<T> | undefined | null;\n\n\t// Focus Events\n\t'on:focus'?: FocusEventHandler<T> | undefined | null;\n\tonfocus?: FocusEventHandler<T> | undefined | null;\n\tonfocuscapture?: FocusEventHandler<T> | undefined | null;\n\t'on:focusin'?: FocusEventHandler<T> | undefined | null;\n\tonfocusin?: FocusEventHandler<T> | undefined | null;\n\tonfocusincapture?: FocusEventHandler<T> | undefined | null;\n\t'on:focusout'?: FocusEventHandler<T> | undefined | null;\n\tonfocusout?: FocusEventHandler<T> | undefined | null;\n\tonfocusoutcapture?: FocusEventHandler<T> | undefined | null;\n\t'on:blur'?: FocusEventHandler<T> | undefined | null;\n\tonblur?: FocusEventHandler<T> | undefined | null;\n\tonblurcapture?: FocusEventHandler<T> | undefined | null;\n\n\t// Form Events\n\t'on:change'?: FormEventHandler<T> | undefined | null;\n\tonchange?: FormEventHandler<T> | undefined | null;\n\tonchangecapture?: FormEventHandler<T> | undefined | null;\n\t'on:beforeinput'?: EventHandler<InputEvent, T> | undefined | null;\n\tonbeforeinput?: EventHandler<InputEvent, T> | undefined | null;\n\tonbeforeinputcapture?: EventHandler<InputEvent, T> | undefined | null;\n\t// oninput can be either an InputEvent or an Event, depending on the target element (input, textarea etc).\n\t'on:input'?: FormEventHandler<T> | undefined | null;\n\toninput?: FormEventHandler<T> | undefined | null;\n\toninputcapture?: FormEventHandler<T> | undefined | null;\n\t'on:reset'?: FormEventHandler<T> | undefined | null;\n\tonreset?: FormEventHandler<T> | undefined | null;\n\tonresetcapture?: FormEventHandler<T> | undefined | null;\n\t'on:submit'?: EventHandler<SubmitEvent, T> | undefined | null;\n\tonsubmit?: EventHandler<SubmitEvent, T> | undefined | null;\n\tonsubmitcapture?: EventHandler<SubmitEvent, T> | undefined | null;\n\t'on:invalid'?: EventHandler<Event, T> | undefined | null;\n\toninvalid?: EventHandler<Event, T> | undefined | null;\n\toninvalidcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:formdata'?: EventHandler<FormDataEvent, T> | undefined | null;\n\tonformdata?: EventHandler<FormDataEvent, T> | undefined | null;\n\tonformdatacapture?: EventHandler<FormDataEvent, T> | undefined | null;\n\n\t// Image Events\n\t'on:load'?: EventHandler | undefined | null;\n\tonload?: EventHandler | undefined | null;\n\tonloadcapture?: EventHandler | undefined | null;\n\t'on:error'?: EventHandler | undefined | null; // also a Media Event\n\tonerror?: EventHandler | undefined | null; // also a Media Event\n\tonerrorcapture?: EventHandler | undefined | null; // also a Media Event\n\n\t// Popover Events\n\t'on:beforetoggle'?: ToggleEventHandler<T> | undefined | null;\n\tonbeforetoggle?: ToggleEventHandler<T> | undefined | null;\n\tonbeforetogglecapture?: ToggleEventHandler<T> | undefined | null;\n\t'on:toggle'?: ToggleEventHandler<T> | undefined | null;\n\tontoggle?: ToggleEventHandler<T> | undefined | null;\n\tontogglecapture?: ToggleEventHandler<T> | undefined | null;\n\n\t// Content visibility Events\n\t'on:contentvisibilityautostatechange'?:\n\t\t| ContentVisibilityAutoStateChangeEventHandler<T>\n\t\t| undefined\n\t\t| null;\n\toncontentvisibilityautostatechange?:\n\t\t| ContentVisibilityAutoStateChangeEventHandler<T>\n\t\t| undefined\n\t\t| null;\n\toncontentvisibilityautostatechangecapture?:\n\t\t| ContentVisibilityAutoStateChangeEventHandler<T>\n\t\t| undefined\n\t\t| null;\n\n\t// Keyboard Events\n\t'on:keydown'?: KeyboardEventHandler<T> | undefined | null;\n\tonkeydown?: KeyboardEventHandler<T> | undefined | null;\n\tonkeydowncapture?: KeyboardEventHandler<T> | undefined | null;\n\t'on:keypress'?: KeyboardEventHandler<T> | undefined | null;\n\tonkeypress?: KeyboardEventHandler<T> | undefined | null;\n\tonkeypresscapture?: KeyboardEventHandler<T> | undefined | null;\n\t'on:keyup'?: KeyboardEventHandler<T> | undefined | null;\n\tonkeyup?: KeyboardEventHandler<T> | undefined | null;\n\tonkeyupcapture?: KeyboardEventHandler<T> | undefined | null;\n\n\t// Media Events\n\t'on:abort'?: EventHandler<Event, T> | undefined | null;\n\tonabort?: EventHandler<Event, T> | undefined | null;\n\tonabortcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:canplay'?: EventHandler<Event, T> | undefined | null;\n\toncanplay?: EventHandler<Event, T> | undefined | null;\n\toncanplaycapture?: EventHandler<Event, T> | undefined | null;\n\t'on:canplaythrough'?: EventHandler<Event, T> | undefined | null;\n\toncanplaythrough?: EventHandler<Event, T> | undefined | null;\n\toncanplaythroughcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:cuechange'?: EventHandler<Event, T> | undefined | null;\n\toncuechange?: EventHandler<Event, T> | undefined | null;\n\toncuechangecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:durationchange'?: EventHandler<Event, T> | undefined | null;\n\tondurationchange?: EventHandler<Event, T> | undefined | null;\n\tondurationchangecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:emptied'?: EventHandler<Event, T> | undefined | null;\n\tonemptied?: EventHandler<Event, T> | undefined | null;\n\tonemptiedcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:encrypted'?: EventHandler<Event, T> | undefined | null;\n\tonencrypted?: EventHandler<Event, T> | undefined | null;\n\tonencryptedcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:ended'?: EventHandler<Event, T> | undefined | null;\n\tonended?: EventHandler<Event, T> | undefined | null;\n\tonendedcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:loadeddata'?: EventHandler<Event, T> | undefined | null;\n\tonloadeddata?: EventHandler<Event, T> | undefined | null;\n\tonloadeddatacapture?: EventHandler<Event, T> | undefined | null;\n\t'on:loadedmetadata'?: EventHandler<Event, T> | undefined | null;\n\tonloadedmetadata?: EventHandler<Event, T> | undefined | null;\n\tonloadedmetadatacapture?: EventHandler<Event, T> | undefined | null;\n\t'on:loadstart'?: EventHandler<Event, T> | undefined | null;\n\tonloadstart?: EventHandler<Event, T> | undefined | null;\n\tonloadstartcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:pause'?: EventHandler<Event, T> | undefined | null;\n\tonpause?: EventHandler<Event, T> | undefined | null;\n\tonpausecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:play'?: EventHandler<Event, T> | undefined | null;\n\tonplay?: EventHandler<Event, T> | undefined | null;\n\tonplaycapture?: EventHandler<Event, T> | undefined | null;\n\t'on:playing'?: EventHandler<Event, T> | undefined | null;\n\tonplaying?: EventHandler<Event, T> | undefined | null;\n\tonplayingcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:progress'?: EventHandler<Event, T> | undefined | null;\n\tonprogress?: EventHandler<Event, T> | undefined | null;\n\tonprogresscapture?: EventHandler<Event, T> | undefined | null;\n\t'on:ratechange'?: EventHandler<Event, T> | undefined | null;\n\tonratechange?: EventHandler<Event, T> | undefined | null;\n\tonratechangecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:seeked'?: EventHandler<Event, T> | undefined | null;\n\tonseeked?: EventHandler<Event, T> | undefined | null;\n\tonseekedcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:seeking'?: EventHandler<Event, T> | undefined | null;\n\tonseeking?: EventHandler<Event, T> | undefined | null;\n\tonseekingcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:stalled'?: EventHandler<Event, T> | undefined | null;\n\tonstalled?: EventHandler<Event, T> | undefined | null;\n\tonstalledcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:suspend'?: EventHandler<Event, T> | undefined | null;\n\tonsuspend?: EventHandler<Event, T> | undefined | null;\n\tonsuspendcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:timeupdate'?: EventHandler<Event, T> | undefined | null;\n\tontimeupdate?: EventHandler<Event, T> | undefined | null;\n\tontimeupdatecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:volumechange'?: EventHandler<Event, T> | undefined | null;\n\tonvolumechange?: EventHandler<Event, T> | undefined | null;\n\tonvolumechangecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:waiting'?: EventHandler<Event, T> | undefined | null;\n\tonwaiting?: EventHandler<Event, T> | undefined | null;\n\tonwaitingcapture?: EventHandler<Event, T> | undefined | null;\n\n\t// MouseEvents\n\t'on:auxclick'?: MouseEventHandler<T> | undefined | null;\n\tonauxclick?: MouseEventHandler<T> | undefined | null;\n\tonauxclickcapture?: MouseEventHandler<T> | undefined | null;\n\t'on:click'?: MouseEventHandler<T> | undefined | null;\n\tonclick?: MouseEventHandler<T> | undefined | null;\n\tonclickcapture?: MouseEventHandler<T> | undefined | null;\n\t'on:contextmenu'?: MouseEventHandler<T> | undefined | null;\n\toncontextmenu?: MouseEventHandler<T> | undefined | null;\n\toncontextmenucapture?: MouseEventHandler<T> | undefined | null;\n\t'on:dblclick'?: MouseEventHandler<T> | undefined | null;\n\tondblclick?: MouseEventHandler<T> | undefined | null;\n\tondblclickcapture?: MouseEventHandler<T> | undefined | null;\n\t'on:drag'?: DragEventHandler<T> | undefined | null;\n\tondrag?: DragEventHandler<T> | undefined | null;\n\tondragcapture?: DragEventHandler<T> | undefined | null;\n\t'on:dragend'?: DragEventHandler<T> | undefined | null;\n\tondragend?: DragEventHandler<T> | undefined | null;\n\tondragendcapture?: DragEventHandler<T> | undefined | null;\n\t'on:dragenter'?: DragEventHandler<T> | undefined | null;\n\tondragenter?: DragEventHandler<T> | undefined | null;\n\tondragentercapture?: DragEventHandler<T> | undefined | null;\n\t'on:dragexit'?: DragEventHandler<T> | undefined | null;\n\tondragexit?: DragEventHandler<T> | undefined | null;\n\tondragexitcapture?: DragEventHandler<T> | undefined | null;\n\t'on:dragleave'?: DragEventHandler<T> | undefined | null;\n\tondragleave?: DragEventHandler<T> | undefined | null;\n\tondragleavecapture?: DragEventHandler<T> | undefined | null;\n\t'on:dragover'?: DragEventHandler<T> | undefined | null;\n\tondragover?: DragEventHandler<T> | undefined | null;\n\tondragovercapture?: DragEventHandler<T> | undefined | null;\n\t'on:dragstart'?: DragEventHandler<T> | undefined | null;\n\tondragstart?: DragEventHandler<T> | undefined | null;\n\tondragstartcapture?: DragEventHandler<T> | undefined | null;\n\t'on:drop'?: DragEventHandler<T> | undefined | null;\n\tondrop?: DragEventHandler<T> | undefined | null;\n\tondropcapture?: DragEventHandler<T> | undefined | null;\n\t'on:mousedown'?: MouseEventHandler<T> | undefined | null;\n\tonmousedown?: MouseEventHandler<T> | undefined | null;\n\tonmousedowncapture?: MouseEventHandler<T> | undefined | null;\n\t'on:mouseenter'?: MouseEventHandler<T> | undefined | null;\n\tonmouseenter?: MouseEventHandler<T> | undefined | null;\n\t'on:mouseleave'?: MouseEventHandler<T> | undefined | null;\n\tonmouseleave?: MouseEventHandler<T> | undefined | null;\n\t'on:mousemove'?: MouseEventHandler<T> | undefined | null;\n\tonmousemove?: MouseEventHandler<T> | undefined | null;\n\tonmousemovecapture?: MouseEventHandler<T> | undefined | null;\n\t'on:mouseout'?: MouseEventHandler<T> | undefined | null;\n\tonmouseout?: MouseEventHandler<T> | undefined | null;\n\tonmouseoutcapture?: MouseEventHandler<T> | undefined | null;\n\t'on:mouseover'?: MouseEventHandler<T> | undefined | null;\n\tonmouseover?: MouseEventHandler<T> | undefined | null;\n\tonmouseovercapture?: MouseEventHandler<T> | undefined | null;\n\t'on:mouseup'?: MouseEventHandler<T> | undefined | null;\n\tonmouseup?: MouseEventHandler<T> | undefined | null;\n\tonmouseupcapture?: MouseEventHandler<T> | undefined | null;\n\n\t// Selection Events\n\t'on:select'?: EventHandler<Event, T> | undefined | null;\n\tonselect?: EventHandler<Event, T> | undefined | null;\n\tonselectcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:selectionchange'?: EventHandler<Event, T> | undefined | null;\n\tonselectionchange?: EventHandler<Event, T> | undefined | null;\n\tonselectionchangecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:selectstart'?: EventHandler<Event, T> | undefined | null;\n\tonselectstart?: EventHandler<Event, T> | undefined | null;\n\tonselectstartcapture?: EventHandler<Event, T> | undefined | null;\n\n\t// Touch Events\n\t'on:touchcancel'?: TouchEventHandler<T> | undefined | null;\n\tontouchcancel?: TouchEventHandler<T> | undefined | null;\n\tontouchcancelcapture?: TouchEventHandler<T> | undefined | null;\n\t'on:touchend'?: TouchEventHandler<T> | undefined | null;\n\tontouchend?: TouchEventHandler<T> | undefined | null;\n\tontouchendcapture?: TouchEventHandler<T> | undefined | null;\n\t'on:touchmove'?: TouchEventHandler<T> | undefined | null;\n\tontouchmove?: TouchEventHandler<T> | undefined | null;\n\tontouchmovecapture?: TouchEventHandler<T> | undefined | null;\n\t'on:touchstart'?: TouchEventHandler<T> | undefined | null;\n\tontouchstart?: TouchEventHandler<T> | undefined | null;\n\tontouchstartcapture?: TouchEventHandler<T> | undefined | null;\n\n\t// Pointer Events\n\t'on:gotpointercapture'?: PointerEventHandler<T> | undefined | null;\n\tongotpointercapture?: PointerEventHandler<T> | undefined | null;\n\tongotpointercapturecapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointercancel'?: PointerEventHandler<T> | undefined | null;\n\tonpointercancel?: PointerEventHandler<T> | undefined | null;\n\tonpointercancelcapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointerdown'?: PointerEventHandler<T> | undefined | null;\n\tonpointerdown?: PointerEventHandler<T> | undefined | null;\n\tonpointerdowncapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointerenter'?: PointerEventHandler<T> | undefined | null;\n\tonpointerenter?: PointerEventHandler<T> | undefined | null;\n\tonpointerentercapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointerleave'?: PointerEventHandler<T> | undefined | null;\n\tonpointerleave?: PointerEventHandler<T> | undefined | null;\n\tonpointerleavecapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointermove'?: PointerEventHandler<T> | undefined | null;\n\tonpointermove?: PointerEventHandler<T> | undefined | null;\n\tonpointermovecapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointerout'?: PointerEventHandler<T> | undefined | null;\n\tonpointerout?: PointerEventHandler<T> | undefined | null;\n\tonpointeroutcapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointerover'?: PointerEventHandler<T> | undefined | null;\n\tonpointerover?: PointerEventHandler<T> | undefined | null;\n\tonpointerovercapture?: PointerEventHandler<T> | undefined | null;\n\t'on:pointerup'?: PointerEventHandler<T> | undefined | null;\n\tonpointerup?: PointerEventHandler<T> | undefined | null;\n\tonpointerupcapture?: PointerEventHandler<T> | undefined | null;\n\t'on:lostpointercapture'?: PointerEventHandler<T> | undefined | null;\n\tonlostpointercapture?: PointerEventHandler<T> | undefined | null;\n\tonlostpointercapturecapture?: PointerEventHandler<T> | undefined | null;\n\n\t// Gamepad Events\n\t'on:gamepadconnected'?: GamepadEventHandler<T> | undefined | null;\n\tongamepadconnected?: GamepadEventHandler<T> | undefined | null;\n\t'on:gamepaddisconnected'?: GamepadEventHandler<T> | undefined | null;\n\tongamepaddisconnected?: GamepadEventHandler<T> | undefined | null;\n\n\t// UI Events\n\t'on:scroll'?: UIEventHandler<T> | undefined | null;\n\tonscroll?: UIEventHandler<T> | undefined | null;\n\tonscrollcapture?: UIEventHandler<T> | undefined | null;\n\t'on:scrollend'?: UIEventHandler<T> | undefined | null;\n\tonscrollend?: UIEventHandler<T> | undefined | null;\n\tonscrollendcapture?: UIEventHandler<T> | undefined | null;\n\t'on:resize'?: UIEventHandler<T> | undefined | null;\n\tonresize?: UIEventHandler<T> | undefined | null;\n\tonresizecapture?: UIEventHandler<T> | undefined | null;\n\n\t// Wheel Events\n\t'on:wheel'?: WheelEventHandler<T> | undefined | null;\n\tonwheel?: WheelEventHandler<T> | undefined | null;\n\tonwheelcapture?: WheelEventHandler<T> | undefined | null;\n\n\t// Animation Events\n\t'on:animationstart'?: AnimationEventHandler<T> | undefined | null;\n\tonanimationstart?: AnimationEventHandler<T> | undefined | null;\n\tonanimationstartcapture?: AnimationEventHandler<T> | undefined | null;\n\t'on:animationend'?: AnimationEventHandler<T> | undefined | null;\n\tonanimationend?: AnimationEventHandler<T> | undefined | null;\n\tonanimationendcapture?: AnimationEventHandler<T> | undefined | null;\n\t'on:animationiteration'?: AnimationEventHandler<T> | undefined | null;\n\tonanimationiteration?: AnimationEventHandler<T> | undefined | null;\n\tonanimationiterationcapture?: AnimationEventHandler<T> | undefined | null;\n\n\t// Transition Events\n\t'on:transitionstart'?: TransitionEventHandler<T> | undefined | null;\n\tontransitionstart?: TransitionEventHandler<T> | undefined | null;\n\tontransitionstartcapture?: TransitionEventHandler<T> | undefined | null;\n\t'on:transitionrun'?: TransitionEventHandler<T> | undefined | null;\n\tontransitionrun?: TransitionEventHandler<T> | undefined | null;\n\tontransitionruncapture?: TransitionEventHandler<T> | undefined | null;\n\t'on:transitionend'?: TransitionEventHandler<T> | undefined | null;\n\tontransitionend?: TransitionEventHandler<T> | undefined | null;\n\tontransitionendcapture?: TransitionEventHandler<T> | undefined | null;\n\t'on:transitioncancel'?: TransitionEventHandler<T> | undefined | null;\n\tontransitioncancel?: TransitionEventHandler<T> | undefined | null;\n\tontransitioncancelcapture?: TransitionEventHandler<T> | undefined | null;\n\n\t// Svelte Transition Events\n\t'on:outrostart'?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonoutrostart?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonoutrostartcapture?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\t'on:outroend'?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonoutroend?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonoutroendcapture?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\t'on:introstart'?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonintrostart?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonintrostartcapture?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\t'on:introend'?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonintroend?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\tonintroendcapture?: EventHandler<CustomEvent<null>, T> | undefined | null;\n\n\t// Message Events\n\t'on:message'?: MessageEventHandler<T> | undefined | null;\n\tonmessage?: MessageEventHandler<T> | undefined | null;\n\tonmessagecapture?: MessageEventHandler<T> | undefined | null;\n\t'on:messageerror'?: MessageEventHandler<T> | undefined | null;\n\tonmessageerror?: MessageEventHandler<T> | undefined | null;\n\tonmessageerrorcapture?: MessageEventHandler<T> | undefined | null;\n\n\t// Document Events\n\t'on:visibilitychange'?: EventHandler<Event, T> | undefined | null;\n\tonvisibilitychange?: EventHandler<Event, T> | undefined | null;\n\tonvisibilitychangecapture?: EventHandler<Event, T> | undefined | null;\n\n\t// Global Events\n\t'on:beforematch'?: EventHandler<Event, T> | undefined | null;\n\tonbeforematch?: EventHandler<Event, T> | undefined | null;\n\tonbeforematchcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:cancel'?: EventHandler<Event, T> | undefined | null;\n\toncancel?: EventHandler<Event, T> | undefined | null;\n\toncancelcapture?: EventHandler<Event, T> | undefined | null;\n\t'on:close'?: EventHandler<Event, T> | undefined | null;\n\tonclose?: EventHandler<Event, T> | undefined | null;\n\tonclosecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:fullscreenchange'?: EventHandler<Event, T> | undefined | null;\n\tonfullscreenchange?: EventHandler<Event, T> | undefined | null;\n\tonfullscreenchangecapture?: EventHandler<Event, T> | undefined | null;\n\t'on:fullscreenerror'?: EventHandler<Event, T> | undefined | null;\n\tonfullscreenerror?: EventHandler<Event, T> | undefined | null;\n\tonfullscreenerrorcapture?: EventHandler<Event, T> | undefined | null;\n\n\t// Dimensions\n\treadonly 'bind:contentRect'?: DOMRectReadOnly | undefined | null;\n\treadonly 'bind:contentBoxSize'?: Array<ResizeObserverSize> | undefined | null;\n\treadonly 'bind:borderBoxSize'?: Array<ResizeObserverSize> | undefined | null;\n\treadonly 'bind:devicePixelContentBoxSize'?: Array<ResizeObserverSize> | undefined | null;\n\treadonly 'bind:clientWidth'?: number | undefined | null;\n\treadonly 'bind:clientHeight'?: number | undefined | null;\n\n\txmlns?: string | undefined | null;\n}\n\n// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/\nexport interface AriaAttributes {\n\t/** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */\n\t'aria-activedescendant'?: string | undefined | null;\n\t/** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */\n\t'aria-atomic'?: Booleanish | undefined | null;\n\t/**\n\t * Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be\n\t * presented if they are made.\n\t */\n\t'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both' | undefined | null;\n\t/** Indicates an element is being modified and that assistive technologies MAY want to wait until the modifications are complete before exposing them to the user. */\n\t'aria-busy'?: Booleanish | undefined | null;\n\t/**\n\t * Indicates the current \"checked\" state of checkboxes, radio buttons, and other widgets.\n\t * @see aria-pressed @see aria-selected.\n\t */\n\t'aria-checked'?: boolean | 'false' | 'mixed' | 'true' | undefined | null;\n\t/**\n\t * Defines the total number of columns in a table, grid, or treegrid.\n\t * @see aria-colindex.\n\t */\n\t'aria-colcount'?: number | undefined | null;\n\t/**\n\t * Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid.\n\t * @see aria-colcount @see aria-colspan.\n\t */\n\t'aria-colindex'?: number | undefined | null;\n\t/**\n\t * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid.\n\t * @see aria-colindex @see aria-rowspan.\n\t */\n\t'aria-colspan'?: number | undefined | null;\n\t/**\n\t * Identifies the element (or elements) whose contents or presence are controlled by the current element.\n\t * @see aria-owns.\n\t */\n\t'aria-controls'?: string | undefined | null;\n\t/** Indicates the element that represents the current item within a container or set of related elements. */\n\t'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time' | undefined | null;\n\t/**\n\t * Identifies the element (or elements) that describes the object.\n\t * @see aria-labelledby\n\t */\n\t'aria-describedby'?: string | undefined | null;\n\t/**\n\t * Identifies the element that provides a detailed, extended description for the object.\n\t * @see aria-describedby.\n\t */\n\t'aria-details'?: string | undefined | null;\n\t/**\n\t * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.\n\t * @see aria-hidden @see aria-readonly.\n\t */\n\t'aria-disabled'?: Booleanish | undefined | null;\n\t/**\n\t * Indicates what functions can be performed when a dragged object is released on the drop target.\n\t * @deprecated in ARIA 1.1\n\t */\n\t'aria-dropeffect'?: 'none' | 'copy' | 'execute' | 'link' | 'move' | 'popup' | undefined | null;\n\t/**\n\t * Identifies the element that provides an error message for the object.\n\t * @see aria-invalid @see aria-describedby.\n\t */\n\t'aria-errormessage'?: string | undefined | null;\n\t/** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */\n\t'aria-expanded'?: Booleanish | undefined | null;\n\t/**\n\t * Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion,\n\t * allows assistive technology to override the general default of reading in document source order.\n\t */\n\t'aria-flowto'?: string | undefined | null;\n\t/**\n\t * Indicates an element's \"grabbed\" state in a drag-and-drop operation.\n\t * @deprecated in ARIA 1.1\n\t */\n\t'aria-grabbed'?: Booleanish | undefined | null;\n\t/** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */\n\t'aria-haspopup'?: Booleanish | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | undefined | null;\n\t/**\n\t * Indicates whether the element is exposed to an accessibility API.\n\t * @see aria-disabled.\n\t */\n\t'aria-hidden'?: Booleanish | undefined | null;\n\t/**\n\t * Indicates the entered value does not conform to the format expected by the application.\n\t * @see aria-errormessage.\n\t */\n\t'aria-invalid'?: Booleanish | 'grammar' | 'spelling' | undefined | null;\n\t/** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */\n\t'aria-keyshortcuts'?: string | undefined | null;\n\t/**\n\t * Defines a string value that labels the current element.\n\t * @see aria-labelledby.\n\t */\n\t'aria-label'?: string | undefined | null;\n\t/**\n\t * Identifies the element (or elements) that labels the current element.\n\t * @see aria-describedby.\n\t */\n\t'aria-labelledby'?: string | undefined | null;\n\t/** Defines the hierarchical level of an element within a structure. */\n\t'aria-level'?: number | undefined | null;\n\t/** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */\n\t'aria-live'?: 'off' | 'assertive' | 'polite' | undefined | null;\n\t/** Indicates whether an element is modal when displayed. */\n\t'aria-modal'?: Booleanish | undefined | null;\n\t/** Indicates whether a text box accepts multiple lines of input or only a single line. */\n\t'aria-multiline'?: Booleanish | undefined | null;\n\t/** Indicates that the user may select more than one item from the current selectable descendants. */\n\t'aria-multiselectable'?: Booleanish | undefined | null;\n\t/** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */\n\t'aria-orientation'?: 'horizontal' | 'vertical' | undefined | null;\n\t/**\n\t * Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship\n\t * between DOM elements where the DOM hierarchy cannot be used to represent the relationship.\n\t * @see aria-controls.\n\t */\n\t'aria-owns'?: string | undefined | null;\n\t/**\n\t * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value.\n\t * A hint could be a sample value or a brief description of the expected format.\n\t */\n\t'aria-placeholder'?: string | undefined | null;\n\t/**\n\t * Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.\n\t * @see aria-setsize.\n\t */\n\t'aria-posinset'?: number | undefined | null;\n\t/**\n\t * Indicates the current \"pressed\" state of toggle buttons.\n\t * @see aria-checked @see aria-selected.\n\t */\n\t'aria-pressed'?: boolean | 'false' | 'mixed' | 'true' | undefined | null;\n\t/**\n\t * Indicates that the element is not editable, but is otherwise operable.\n\t * @see aria-disabled.\n\t */\n\t'aria-readonly'?: Booleanish | undefined | null;\n\t/**\n\t * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified.\n\t * @see aria-atomic.\n\t */\n\t'aria-relevant'?:\n\t\t| 'additions'\n\t\t| 'additions removals'\n\t\t| 'additions text'\n\t\t| 'all'\n\t\t| 'removals'\n\t\t| 'removals additions'\n\t\t| 'removals text'\n\t\t| 'text'\n\t\t| 'text additions'\n\t\t| 'text removals'\n\t\t| undefined\n\t\t| null;\n\t/** Indicates that user input is required on the element before a form may be submitted. */\n\t'aria-required'?: Booleanish | undefined | null;\n\t/** Defines a human-readable, author-localized description for the role of an element. */\n\t'aria-roledescription'?: string | undefined | null;\n\t/**\n\t * Defines the total number of rows in a table, grid, or treegrid.\n\t * @see aria-rowindex.\n\t */\n\t'aria-rowcount'?: number | undefined | null;\n\t/**\n\t * Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid.\n\t * @see aria-rowcount @see aria-rowspan.\n\t */\n\t'aria-rowindex'?: number | undefined | null;\n\t/**\n\t * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid.\n\t * @see aria-rowindex @see aria-colspan.\n\t */\n\t'aria-rowspan'?: number | undefined | null;\n\t/**\n\t * Indicates the current \"selected\" state of various widgets.\n\t * @see aria-checked @see aria-pressed.\n\t */\n\t'aria-selected'?: Booleanish | undefined | null;\n\t/**\n\t * Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.\n\t * @see aria-posinset.\n\t */\n\t'aria-setsize'?: number | undefined | null;\n\t/** Indicates if items in a table or grid are sorted in ascending or descending order. */\n\t'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' | undefined | null;\n\t/** Defines the maximum allowed value for a range widget. */\n\t'aria-valuemax'?: number | undefined | null;\n\t/** Defines the minimum allowed value for a range widget. */\n\t'aria-valuemin'?: number | undefined | null;\n\t/**\n\t * Defines the current value for a range widget.\n\t * @see aria-valuetext.\n\t */\n\t'aria-valuenow'?: number | undefined | null;\n\t/** Defines the human readable text alternative of aria-valuenow for a range widget. */\n\t'aria-valuetext'?: string | undefined | null;\n}\n\n// All the WAI-ARIA 1.1 role attribute values from https://www.w3.org/TR/wai-aria-1.1/#role_definitions\nexport type AriaRole =\n\t| 'alert'\n\t| 'alertdialog'\n\t| 'application'\n\t| 'article'\n\t| 'banner'\n\t| 'button'\n\t| 'cell'\n\t| 'checkbox'\n\t| 'columnheader'\n\t| 'combobox'\n\t| 'complementary'\n\t| 'contentinfo'\n\t| 'definition'\n\t| 'dialog'\n\t| 'directory'\n\t| 'document'\n\t| 'feed'\n\t| 'figure'\n\t| 'form'\n\t| 'grid'\n\t| 'gridcell'\n\t| 'group'\n\t| 'heading'\n\t| 'img'\n\t| 'link'\n\t| 'list'\n\t| 'listbox'\n\t| 'listitem'\n\t| 'log'\n\t| 'main'\n\t| 'marquee'\n\t| 'math'\n\t| 'menu'\n\t| 'menubar'\n\t| 'menuitem'\n\t| 'menuitemcheckbox'\n\t| 'menuitemradio'\n\t| 'navigation'\n\t| 'none'\n\t| 'note'\n\t| 'option'\n\t| 'presentation'\n\t| 'progressbar'\n\t| 'radio'\n\t| 'radiogroup'\n\t| 'region'\n\t| 'row'\n\t| 'rowgroup'\n\t| 'rowheader'\n\t| 'scrollbar'\n\t| 'search'\n\t| 'searchbox'\n\t| 'separator'\n\t| 'slider'\n\t| 'spinbutton'\n\t| 'status'\n\t| 'switch'\n\t| 'tab'\n\t| 'table'\n\t| 'tablist'\n\t| 'tabpanel'\n\t| 'term'\n\t| 'textbox'\n\t| 'timer'\n\t| 'toolbar'\n\t| 'tooltip'\n\t| 'tree'\n\t| 'treegrid'\n\t| 'treeitem'\n\t| (string & {});\n\nexport interface HTMLAttributes<T extends EventTarget> extends AriaAttributes, DOMAttributes<T> {\n\t// Standard HTML Attributes\n\taccesskey?: string | undefined | null;\n\tautocapitalize?: 'characters' | 'off' | 'on' | 'none' | 'sentences' | 'words' | undefined | null;\n\tautofocus?: boolean | undefined | null;\n\tclass?: ClassValue | undefined | null;\n\tcontenteditable?: Booleanish | 'inherit' | 'plaintext-only' | undefined | null;\n\tcontextmenu?: string | undefined | null;\n\tdir?: 'ltr' | 'rtl' | 'auto' | undefined | null;\n\tdraggable?: Booleanish | undefined | null;\n\telementtiming?: string | undefined | null;\n\tenterkeyhint?:\n\t\t| 'enter'\n\t\t| 'done'\n\t\t| 'go'\n\t\t| 'next'\n\t\t| 'previous'\n\t\t| 'search'\n\t\t| 'send'\n\t\t| undefined\n\t\t| null;\n\thidden?: boolean | 'until-found' | '' | undefined | null;\n\tid?: string | undefined | null;\n\tlang?: string | undefined | null;\n\tpart?: string | undefined | null;\n\tplaceholder?: string | undefined | null;\n\tslot?: string | undefined | null;\n\tspellcheck?: Booleanish | undefined | null;\n\tstyle?: string | undefined | null;\n\ttabindex?: number | undefined | null;\n\ttitle?: string | undefined | null;\n\ttranslate?: 'yes' | 'no' | '' | undefined | null;\n\tinert?: boolean | undefined | null;\n\tpopover?: 'auto' | 'manual' | 'hint' | '' | undefined | null;\n\twritingsuggestions?: Booleanish | undefined | null;\n\n\t// Unknown\n\tradiogroup?: string | undefined | null; // <command>, <menuitem>\n\n\t// WAI-ARIA\n\trole?: AriaRole | undefined | null;\n\n\t// RDFa Attributes\n\tabout?: string | undefined | null;\n\tdatatype?: string | undefined | null;\n\tinlist?: any;\n\tprefix?: string | undefined | null;\n\tproperty?: string | undefined | null;\n\tresource?: string | undefined | null;\n\ttypeof?: string | undefined | null;\n\tvocab?: string | undefined | null;\n\n\t// Non-standard Attributes\n\tautosave?: string | undefined | null;\n\tcolor?: string | undefined | null;\n\titemprop?: string | undefined | null;\n\titemscope?: boolean | undefined | null;\n\titemtype?: string | undefined | null;\n\titemid?: string | undefined | null;\n\titemref?: string | undefined | null;\n\tresults?: number | undefined | null;\n\tsecurity?: string | undefined | null;\n\tunselectable?: 'on' | 'off' | undefined | null;\n\n\t// Living Standard\n\t/**\n\t * Hints at the type of data that might be entered by the user while editing the element or its contents\n\t * @see https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute\n\t */\n\tinputmode?:\n\t\t| 'none'\n\t\t| 'text'\n\t\t| 'tel'\n\t\t| 'url'\n\t\t| 'email'\n\t\t| 'numeric'\n\t\t| 'decimal'\n\t\t| 'search'\n\t\t| undefined\n\t\t| null;\n\t/**\n\t * Specify that a standard HTML element should behave like a defined custom built-in element\n\t * @see https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is\n\t */\n\tis?: string | undefined | null;\n\n\t/**\n\t * Elements with the contenteditable attribute support `innerHTML`, `textContent` and `innerText` bindings.\n\t */\n\t'bind:innerHTML'?: string | undefined | null;\n\t/**\n\t * Elements with the contenteditable attribute support `innerHTML`, `textContent` and `innerText` bindings.\n\t */\n\t'bind:textContent'?: string | undefined | null;\n\t/**\n\t * Elements with the contenteditable attribute support `innerHTML`, `textContent` and `innerText` bindings.\n\t */\n\t'bind:innerText'?: string | undefined | null;\n\n\treadonly 'bind:focused'?: boolean | undefined | null;\n\treadonly 'bind:offsetWidth'?: number | undefined | null;\n\treadonly 'bind:offsetHeight'?: number | undefined | null;\n\n\t// allow any data- attribute\n\t[key: `data-${string}`]: any;\n\n\t// allow any attachment and falsy values (by using false we prevent the usage of booleans values by themselves)\n\t[key: symbol]: Attachment<T> | false | undefined | null;\n}\n\nexport type HTMLAttributeAnchorTarget = '_self' | '_blank' | '_parent' | '_top' | (string & {});\n\nexport interface HTMLAnchorAttributes extends HTMLAttributes<HTMLAnchorElement> {\n\tdownload?: any;\n\thref?: string | undefined | null;\n\threflang?: string | undefined | null;\n\tmedia?: string | undefined | null;\n\tping?: string | undefined | null;\n\trel?: string | undefined | null;\n\ttarget?: HTMLAttributeAnchorTarget | undefined | null;\n\ttype?: string | undefined | null;\n\treferrerpolicy?: ReferrerPolicy | undefined | null;\n}\n\nexport interface HTMLAudioAttributes extends HTMLMediaAttributes<HTMLAudioElement> {}\n\nexport interface HTMLAreaAttributes extends HTMLAttributes<HTMLAreaElement> {\n\talt?: string | undefined | null;\n\tcoords?: string | undefined | null;\n\tdownload?: any;\n\thref?: string | undefined | null;\n\threflang?: string | undefined | null;\n\tmedia?: string | undefined | null;\n\treferrerpolicy?: ReferrerPolicy | undefined | null;\n\trel?: string | undefined | null;\n\tshape?: 'circle' | 'default' | 'poly' | 'rect' | undefined | null;\n\ttarget?: string | undefined | null;\n\tping?: string | undefined | null;\n}\n\nexport interface HTMLBaseAttributes extends HTMLAttributes<HTMLBaseElement> {\n\thref?: string | undefined | null;\n\ttarget?: string | undefined | null;\n}\n\nexport interface HTMLBlockquoteAttributes extends HTMLAttributes<HTMLQuoteElement> {\n\tcite?: string | undefined | null;\n}\n\nexport interface HTMLButtonAttributes extends HTMLAttributes<HTMLButtonElement> {\n\tdisabled?: boolean | undefined | null;\n\tform?: string | undefined | null;\n\tformaction?: string | undefined | null;\n\tformenctype?:\n\t\t| 'application/x-www-form-urlencoded'\n\t\t| 'multipart/form-data'\n\t\t| 'text/plain'\n\t\t| undefined\n\t\t| null;\n\tformmethod?: 'dialog' | 'get' | 'post' | 'DIALOG' | 'GET' | 'POST' | undefined | null;\n\tformnovalidate?: boolean | undefined | null;\n\tformtarget?: string | undefined | null;\n\tname?: string | undefined | null;\n\ttype?: 'submit' | 'reset' | 'button' | undefined | null;\n\tvalue?: string | string[] | number | undefined | null;\n\tpopovertarget?: string | undefined | null;\n\tpopovertargetaction?: 'toggle' | 'show' | 'hide' | undefined | null;\n\tcommand?:\n\t\t| 'show-modal'\n\t\t| 'close'\n\t\t| 'request-close'\n\t\t| 'show-popover'\n\t\t| 'hide-popover'\n\t\t| 'toggle-popover'\n\t\t| (string & {})\n\t\t| undefined\n\t\t| null;\n\tcommandfor?: string | undefined | null;\n}\n\nexport interface HTMLCanvasAttributes extends HTMLAttributes<HTMLCanvasElement> {\n\theight?: number | string | undefined | null;\n\twidth?: number | string | undefined | null;\n}\n\nexport interface HTMLColAttributes extends HTMLAttributes<HTMLTableColElement> {\n\tspan?: number | undefined | null;\n\twidth?: number | string | undefined | null;\n}\n\nexport interface HTMLColgroupAttributes extends HTMLAttributes<HTMLTableColElement> {\n\tspan?: number | undefined | null;\n}\n\nexport interface HTMLDataAttributes extends HTMLAttributes<HTMLDataElement> {\n\tvalue?: string | string[] | number | undefined | null;\n}\n\nexport interface HTMLDetailsAttributes extends HTMLAttributes<HTMLDetailsElement> {\n\topen?: boolean | undefined | null;\n\tname?: string | undefined | null;\n\n\t'bind:open'?: boolean | undefined | null;\n\n\t'on:toggle'?: EventHandler<Event, HTMLDetailsElement> | undefined | null;\n\tontoggle?: EventHandler<Event, HTMLDetailsElement> | undefined | null;\n\tontogglecapture?: EventHandler<Event, HTMLDetailsElement> | undefined | null;\n}\n\nexport interface HTMLDelAttributes extends HTMLAttributes<HTMLModElement> {\n\tcite?: string | undefined | null;\n\tdatetime?: string | undefined | null;\n}\n\nexport interface HTMLDialogAttributes extends HTMLAttributes<HTMLDialogElement> {\n\topen?: boolean | undefined | null;\n\tclosedby?: 'any' | 'closerequest' | 'none' | undefined | null;\n}\n\nexport interface HTMLEmbedAttributes extends HTMLAttributes<HTMLEmbedElement> {\n\theight?: number | string | undefined | null;\n\tsrc?: string | undefined | null;\n\ttype?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n}\n\nexport interface HTMLFieldsetAttributes extends HTMLAttributes<HTMLFieldSetElement> {\n\tdisabled?: boolean | undefined | null;\n\tform?: string | undefined | null;\n\tname?: string | undefined | null;\n}\n\nexport interface HTMLFormAttributes extends HTMLAttributes<HTMLFormElement> {\n\t'accept-charset'?: 'utf-8' | (string & {}) | undefined | null;\n\taction?: string | undefined | null;\n\tautocomplete?: AutoFillBase | undefined | null;\n\tenctype?:\n\t\t| 'application/x-www-form-urlencoded'\n\t\t| 'multipart/form-data'\n\t\t| 'text/plain'\n\t\t| undefined\n\t\t| null;\n\tmethod?: 'dialog' | 'get' | 'post' | 'DIALOG' | 'GET' | 'POST' | undefined | null;\n\tname?: string | undefined | null;\n\tnovalidate?: boolean | undefined | null;\n\ttarget?: string | undefined | null;\n\trel?: string | undefined | null;\n}\n\nexport interface HTMLHtmlAttributes extends HTMLAttributes<HTMLHtmlElement> {\n\tmanifest?: string | undefined | null;\n}\n\nexport interface HTMLIframeAttributes extends HTMLAttributes<HTMLIFrameElement> {\n\tallow?: string | undefined | null;\n\tallowfullscreen?: boolean | undefined | null;\n\tallowtransparency?: boolean | undefined | null;\n\t/** @deprecated */\n\tframeborder?: number | string | undefined | null;\n\theight?: number | string | undefined | null;\n\tloading?: 'eager' | 'lazy' | undefined | null;\n\t/** @deprecated */\n\tmarginheight?: number | undefined | null;\n\t/** @deprecated */\n\tmarginwidth?: number | undefined | null;\n\tname?: string | undefined | null;\n\treferrerpolicy?: ReferrerPolicy | undefined | null;\n\tsandbox?: string | undefined | null;\n\t/** @deprecated */\n\tscrolling?: string | undefined | null;\n\tseamless?: boolean | undefined | null;\n\tsrc?: string | undefined | null;\n\tsrcdoc?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n}\n\nexport interface HTMLImgAttributes extends HTMLAttributes<HTMLImageElement> {\n\talt?: string | undefined | null;\n\tcrossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null;\n\tdecoding?: 'async' | 'auto' | 'sync' | undefined | null;\n\tfetchpriority?: 'auto' | 'high' | 'low' | undefined | null;\n\theight?: number | string | undefined | null;\n\tismap?: boolean | undefined | null;\n\tloading?: 'eager' | 'lazy' | undefined | null;\n\treferrerpolicy?: ReferrerPolicy | undefined | null;\n\tsizes?: string | undefined | null;\n\tsrc?: string | undefined | null;\n\tsrcset?: string | undefined | null;\n\tusemap?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n\n\treadonly 'bind:naturalWidth'?: number | undefined | null;\n\treadonly 'bind:naturalHeight'?: number | undefined | null;\n}\n\nexport interface HTMLInsAttributes extends HTMLAttributes<HTMLModElement> {\n\tcite?: string | undefined | null;\n\tdatetime?: string | undefined | null;\n}\n\nexport type HTMLInputTypeAttribute =\n\t| 'button'\n\t| 'checkbox'\n\t| 'color'\n\t| 'date'\n\t| 'datetime-local'\n\t| 'email'\n\t| 'file'\n\t| 'hidden'\n\t| 'image'\n\t| 'month'\n\t| 'number'\n\t| 'password'\n\t| 'radio'\n\t| 'range'\n\t| 'reset'\n\t| 'search'\n\t| 'submit'\n\t| 'tel'\n\t| 'text'\n\t| 'time'\n\t| 'url'\n\t| 'week'\n\t| (string & {});\n\nexport interface HTMLInputAttributes extends HTMLAttributes<HTMLInputElement> {\n\taccept?: string | undefined | null;\n\talt?: string | undefined | null;\n\tautocomplete?: FullAutoFill | undefined | null;\n\t// Safari only https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#autocorrect\n\tautocorrect?: 'on' | 'off' | '' | undefined | null;\n\tcapture?: boolean | 'user' | 'environment' | undefined | null; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute\n\tchecked?: boolean | undefined | null;\n\tdirname?: string | undefined | null;\n\tdisabled?: boolean | undefined | null;\n\tfiles?: FileList | undefined | null;\n\tform?: string | undefined | null;\n\tformaction?: string | undefined | null;\n\tformenctype?:\n\t\t| 'application/x-www-form-urlencoded'\n\t\t| 'multipart/form-data'\n\t\t| 'text/plain'\n\t\t| undefined\n\t\t| null;\n\tformmethod?: 'dialog' | 'get' | 'post' | 'DIALOG' | 'GET' | 'POST' | undefined | null;\n\tformnovalidate?: boolean | undefined | null;\n\tformtarget?: string | undefined | null;\n\tgroup?: any | undefined | null;\n\theight?: number | string | undefined | null;\n\tindeterminate?: boolean | undefined | null;\n\tlist?: string | undefined | null;\n\tmax?: number | string | undefined | null;\n\tmaxlength?: number | undefined | null;\n\tmin?: number | string | undefined | null;\n\tminlength?: number | undefined | null;\n\tmultiple?: boolean | undefined | null;\n\tname?: string | undefined | null;\n\tpattern?: string | undefined | null;\n\tplaceholder?: string | undefined | null;\n\treadonly?: boolean | undefined | null;\n\trequired?: boolean | undefined | null;\n\tsize?: number | undefined | null;\n\tsrc?: string | undefined | null;\n\tstep?: number | string | undefined | null;\n\ttype?: HTMLInputTypeAttribute | undefined | null;\n\tvalue?: any;\n\t// needs both casing variants because language tools does lowercase names of non-shorthand attributes\n\tdefaultValue?: any;\n\tdefaultvalue?: any;\n\tdefaultChecked?: boolean | undefined | null;\n\tdefaultchecked?: boolean | undefined | null;\n\twidth?: number | string | undefined | null;\n\twebkitdirectory?: boolean | undefined | null;\n\n\t'on:change'?: ChangeEventHandler<HTMLInputElement> | undefined | null;\n\tonchange?: ChangeEventHandler<HTMLInputElement> | undefined | null;\n\n\t'bind:checked'?: boolean | undefined | null;\n\t'bind:value'?: any;\n\t'bind:group'?: any | undefined | null;\n\t'bind:files'?: FileList | undefined | null;\n\t'bind:indeterminate'?: boolean | undefined | null;\n}\n\nexport interface HTMLKeygenAttributes extends HTMLAttributes<HTMLElement> {\n\tchallenge?: string | undefined | null;\n\tdisabled?: boolean | undefined | null;\n\tform?: string | undefined | null;\n\tkeytype?: string | undefined | null;\n\tkeyparams?: string | undefined | null;\n\tname?: string | undefined | null;\n}\n\nexport interface HTMLLabelAttributes extends HTMLAttributes<HTMLLabelElement> {\n\tform?: string | undefined | null;\n\tfor?: string | undefined | null;\n}\n\nexport interface HTMLLiAttributes extends HTMLAttributes<HTMLLIElement> {\n\tvalue?: string | string[] | number | undefined | null;\n}\n\nexport interface HTMLLinkAttributes extends HTMLAttributes<HTMLLinkElement> {\n\tas?:\n\t\t| 'fetch'\n\t\t| 'audio'\n\t\t| 'audioworklet'\n\t\t| 'document'\n\t\t| 'embed'\n\t\t| 'font'\n\t\t| 'frame'\n\t\t| 'iframe'\n\t\t| 'image'\n\t\t| 'json'\n\t\t| 'manifest'\n\t\t| 'object'\n\t\t| 'paintworklet'\n\t\t| 'report'\n\t\t| 'script'\n\t\t| 'serviceworker'\n\t\t| 'sharedworker'\n\t\t| 'style'\n\t\t| 'track'\n\t\t| 'video'\n\t\t| 'webidentity'\n\t\t| 'worker'\n\t\t| 'xslt'\n\t\t| ''\n\t\t| undefined\n\t\t| null;\n\tcrossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null;\n\thref?: string | undefined | null;\n\threflang?: string | undefined | null;\n\tintegrity?: string | undefined | null;\n\tmedia?: string | undefined | null;\n\timagesrcset?: string | undefined | null;\n\timagesizes?: string | undefined | null;\n\treferrerpolicy?: ReferrerPolicy | undefined | null;\n\trel?: string | undefined | null;\n\tsizes?: string | undefined | null;\n\ttype?: string | undefined | null;\n\tcharset?: string | undefined | null;\n\tfetchpriority?: 'auto' | 'high' | 'low' | undefined | null;\n}\n\nexport interface HTMLMapAttributes extends HTMLAttributes<HTMLMapElement> {\n\tname?: string | undefined | null;\n}\n\nexport interface HTMLMenuAttributes extends HTMLAttributes<HTMLMenuElement> {\n\ttype?: string | undefined | null;\n}\n\nexport interface HTMLMediaAttributes<T extends HTMLMediaElement> extends HTMLAttributes<T> {\n\tautoplay?: boolean | undefined | null;\n\tcontrols?: boolean | undefined | null;\n\tcontrolslist?:\n\t\t| 'nodownload'\n\t\t| 'nofullscreen'\n\t\t| 'noplaybackrate'\n\t\t| 'noremoteplayback'\n\t\t| (string & {})\n\t\t| undefined\n\t\t| null;\n\tcrossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null;\n\tcurrenttime?: number | undefined | null;\n\tdefaultmuted?: boolean | undefined | null;\n\tdefaultplaybackrate?: number | undefined | null;\n\tloop?: boolean | undefined | null;\n\tmediagroup?: string | undefined | null;\n\tmuted?: boolean | undefined | null;\n\tplaysinline?: boolean | undefined | null;\n\tpreload?: 'auto' | 'none' | 'metadata' | '' | undefined | null;\n\tsrc?: string | undefined | null;\n\tsrcobject?: MediaStream | MediaSource | File | Blob;\n\t/**\n\t * a value between 0 and 1\n\t */\n\tvolume?: number | undefined | null;\n\n\treadonly 'bind:readyState'?: 0 | 1 | 2 | 3 | 4 | undefined | null;\n\treadonly 'bind:duration'?: number | undefined | null;\n\treadonly 'bind:buffered'?: SvelteMediaTimeRange[] | undefined | null;\n\treadonly 'bind:played'?: SvelteMediaTimeRange[] | undefined | null;\n\treadonly 'bind:seekable'?: SvelteMediaTimeRange[] | undefined | null;\n\treadonly 'bind:seeking'?: boolean | undefined | null;\n\treadonly 'bind:ended'?: boolean | undefined | null;\n\t'bind:muted'?: boolean | undefined | null;\n\t'bind:volume'?: number | undefined | null;\n\t/**\n\t * the current playback time in the video, in seconds\n\t */\n\t'bind:currentTime'?: number | undefined | null;\n\t/**\n\t * how fast or slow to play the video, where 1 is 'normal'\n\t */\n\t'bind:playbackRate'?: number | undefined | null;\n\t'bind:paused'?: boolean | undefined | null;\n}\n\nexport interface HTMLMetaAttributes extends HTMLAttributes<HTMLMetaElement> {\n\tcharset?: string | undefined | null;\n\tcontent?: string | undefined | null;\n\t'http-equiv'?:\n\t\t| 'accept-ch'\n\t\t| 'content-security-policy'\n\t\t| 'content-type'\n\t\t| 'default-style'\n\t\t| 'refresh'\n\t\t| 'x-ua-compatible'\n\t\t| undefined\n\t\t| null;\n\tname?: string | undefined | null;\n\tmedia?: string | undefined | null;\n}\n\nexport interface HTMLMeterAttributes extends HTMLAttributes<HTMLMeterElement> {\n\tform?: string | undefined | null;\n\thigh?: number | undefined | null;\n\tlow?: number | undefined | null;\n\tmax?: number | string | undefined | null;\n\tmin?: number | string | undefined | null;\n\toptimum?: number | undefined | null;\n\tvalue?: string | string[] | number | undefined | null;\n}\n\nexport interface HTMLQuoteAttributes extends HTMLAttributes<HTMLQuoteElement> {\n\tcite?: string | undefined | null;\n}\n\nexport interface HTMLObjectAttributes extends HTMLAttributes<HTMLObjectElement> {\n\tclassid?: string | undefined | null;\n\tdata?: string | undefined | null;\n\tform?: string | undefined | null;\n\theight?: number | string | undefined | null;\n\tname?: string | undefined | null;\n\ttype?: string | undefined | null;\n\tusemap?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n\twmode?: string | undefined | null;\n}\n\nexport interface HTMLOlAttributes extends HTMLAttributes<HTMLOListElement> {\n\treversed?: boolean | undefined | null;\n\tstart?: number | undefined | null;\n\ttype?: '1' | 'a' | 'A' | 'i' | 'I' | undefined | null;\n}\n\nexport interface HTMLOptgroupAttributes extends HTMLAttributes<HTMLOptGroupElement> {\n\tdisabled?: boolean | undefined | null;\n\tlabel?: string | undefined | null;\n}\n\nexport interface HTMLOptionAttributes extends HTMLAttributes<HTMLOptionElement> {\n\tdisabled?: boolean | undefined | null;\n\tlabel?: string | undefined | null;\n\tselected?: boolean | undefined | null;\n\tvalue?: any;\n}\n\nexport interface HTMLOutputAttributes extends HTMLAttributes<HTMLOutputElement> {\n\tform?: string | undefined | null;\n\tfor?: string | undefined | null;\n\tname?: string | undefined | null;\n}\n\nexport interface HTMLParamAttributes extends HTMLAttributes<HTMLParamElement> {\n\tname?: string | undefined | null;\n\tvalue?: string | string[] | number | undefined | null;\n}\n\nexport interface HTMLProgressAttributes extends HTMLAttributes<HTMLProgressElement> {\n\tmax?: number | string | undefined | null;\n\tvalue?: string | string[] | number | undefined | null;\n}\n\nexport interface HTMLSlotAttributes extends HTMLAttributes<HTMLSlotElement> {\n\tname?: string | undefined | null;\n}\n\nexport interface HTMLScriptAttributes extends HTMLAttributes<HTMLScriptElement> {\n\tasync?: boolean | undefined | null;\n\t/** @deprecated */\n\tcharset?: string | undefined | null;\n\tcrossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null;\n\tdefer?: boolean | undefined | null;\n\tfetchpriority?: 'auto' | 'high' | 'low' | undefined | null;\n\tintegrity?: string | undefined | null;\n\tnomodule?: boolean | undefined | null;\n\tnonce?: string | undefined | null;\n\treferrerpolicy?: ReferrerPolicy | undefined | null;\n\tsrc?: string | undefined | null;\n\ttype?: string | undefined | null;\n}\n\nexport interface HTMLSelectAttributes extends HTMLAttributes<HTMLSelectElement> {\n\tautocomplete?: FullAutoFill | undefined | null;\n\tdisabled?: boolean | undefined | null;\n\tform?: string | undefined | null;\n\tmultiple?: boolean | undefined | null;\n\tname?: string | undefined | null;\n\trequired?: boolean | undefined | null;\n\tsize?: number | undefined | null;\n\tvalue?: any;\n\n\t'on:change'?: ChangeEventHandler<HTMLSelectElement> | undefined | null;\n\tonchange?: ChangeEventHandler<HTMLSelectElement> | undefined | null;\n\n\t'bind:value'?: any;\n}\n\nexport interface HTMLSourceAttributes extends HTMLAttributes<HTMLSourceElement> {\n\theight?: number | string | undefined | null;\n\tmedia?: string | undefined | null;\n\tsizes?: string | undefined | null;\n\tsrc?: string | undefined | null;\n\tsrcset?: string | undefined | null;\n\ttype?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n}\n\nexport interface HTMLStyleAttributes extends HTMLAttributes<HTMLStyleElement> {\n\tmedia?: string | undefined | null;\n\tnonce?: string | undefined | null;\n\tscoped?: boolean | undefined | null;\n\ttype?: string | undefined | null;\n}\n\nexport interface HTMLTableAttributes extends HTMLAttributes<HTMLTableElement> {\n\talign?: 'left' | 'center' | 'right' | undefined | null;\n\tbgcolor?: string | undefined | null;\n\tborder?: number | undefined | null;\n\tcellpadding?: number | string | undefined | null;\n\tcellspacing?: number | string | undefined | null;\n\tframe?: boolean | undefined | null;\n\trules?: 'none' | 'groups' | 'rows' | 'columns' | 'all' | undefined | null;\n\tsummary?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n}\n\nexport interface HTMLTextareaAttributes extends HTMLAttributes<HTMLTextAreaElement> {\n\tautocomplete?: FullAutoFill | undefined | null;\n\tcols?: number | undefined | null;\n\tdirname?: string | undefined | null;\n\tdisabled?: boolean | undefined | null;\n\tform?: string | undefined | null;\n\tmaxlength?: number | undefined | null;\n\tminlength?: number | undefined | null;\n\tname?: string | undefined | null;\n\tplaceholder?: string | undefined | null;\n\treadonly?: boolean | undefined | null;\n\trequired?: boolean | undefined | null;\n\trows?: number | undefined | null;\n\tvalue?: string | string[] | number | undefined | null;\n\t// needs both casing variants because language tools does lowercase names of non-shorthand attributes\n\tdefaultValue?: string | string[] | number | undefined | null;\n\tdefaultvalue?: string | string[] | number | undefined | null;\n\twrap?: 'hard' | 'soft' | 'off' | undefined | null;\n\n\t'on:change'?: ChangeEventHandler<HTMLTextAreaElement> | undefined | null;\n\tonchange?: ChangeEventHandler<HTMLTextAreaElement> | undefined | null;\n\n\t'bind:value'?: any;\n}\n\nexport interface HTMLTdAttributes extends HTMLAttributes<HTMLTableCellElement> {\n\talign?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined | null;\n\tcolspan?: number | undefined | null;\n\theaders?: string | undefined | null;\n\trowspan?: number | undefined | null;\n\tscope?: 'col' | 'colgroup' | 'row' | 'rowgroup' | undefined | null;\n\tabbr?: string | undefined | null;\n\theight?: number | string | undefined | null;\n\twidth?: number | string | undefined | null;\n\tvalign?: 'top' | 'middle' | 'bottom' | 'baseline' | undefined | null;\n}\n\nexport interface HTMLThAttributes extends HTMLAttributes<HTMLTableCellElement> {\n\talign?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined | null;\n\tcolspan?: number | undefined | null;\n\theaders?: string | undefined | null;\n\trowspan?: number | undefined | null;\n\tscope?: 'col' | 'colgroup' | 'row' | 'rowgroup' | undefined | null;\n\tabbr?: string | undefined | null;\n}\n\nexport interface HTMLTimeAttributes extends HTMLAttributes<HTMLTimeElement> {\n\tdatetime?: string | undefined | null;\n}\n\nexport interface HTMLTrackAttributes extends HTMLAttributes<HTMLTrackElement> {\n\tdefault?: boolean | undefined | null;\n\tkind?: 'captions' | 'chapters' | 'descriptions' | 'metadata' | 'subtitles' | undefined | null;\n\tlabel?: string | undefined | null;\n\tsrc?: string | undefined | null;\n\tsrclang?: string | undefined | null;\n}\n\nexport interface HTMLVideoAttributes extends HTMLMediaAttributes<HTMLVideoElement> {\n\theight?: number | string | undefined | null;\n\tplaysinline?: boolean | undefined | null;\n\tposter?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n\tdisablepictureinpicture?: boolean | undefined | null;\n\tdisableremoteplayback?: boolean | undefined | null;\n\n\treadonly 'bind:videoWidth'?: number | undefined | null;\n\treadonly 'bind:videoHeight'?: number | undefined | null;\n}\n\nexport interface SvelteMediaTimeRange {\n\tstart: number;\n\tend: number;\n}\n\nexport interface SvelteDocumentAttributes extends HTMLAttributes<Document> {\n\treadonly 'bind:activeElement'?: Document['activeElement'] | undefined | null;\n\treadonly 'bind:fullscreenElement'?: Document['fullscreenElement'] | undefined | null;\n\treadonly 'bind:pointerLockElement'?: Document['pointerLockElement'] | undefined | null;\n\treadonly 'bind:visibilityState'?: Document['visibilityState'] | undefined | null;\n}\n\nexport interface SvelteWindowAttributes extends HTMLAttributes<Window> {\n\treadonly 'bind:innerWidth'?: Window['innerWidth'] | undefined | null;\n\treadonly 'bind:innerHeight'?: Window['innerHeight'] | undefined | null;\n\treadonly 'bind:outerWidth'?: Window['outerWidth'] | undefined | null;\n\treadonly 'bind:outerHeight'?: Window['outerHeight'] | undefined | null;\n\treadonly 'bind:devicePixelRatio'?: Window['devicePixelRatio'] | undefined | null;\n\t'bind:scrollX'?: Window['scrollX'] | undefined | null;\n\t'bind:scrollY'?: Window['scrollY'] | undefined | null;\n\treadonly 'bind:online'?: Window['navigator']['onLine'] | undefined | null;\n\n\t'on:devicelight'?: EventHandler<Event, Window> | undefined | null;\n\tondevicelight?: EventHandler<Event, Window> | undefined | null;\n\t'on:beforeinstallprompt'?: EventHandler<Event, Window> | undefined | null;\n\tonbeforeinstallprompt?: EventHandler<Event, Window> | undefined | null;\n\t'on:deviceproximity'?: EventHandler<Event, Window> | undefined | null;\n\tondeviceproximity?: EventHandler<Event, Window> | undefined | null;\n\t'on:paint'?: EventHandler<Event, Window> | undefined | null;\n\tonpaint?: EventHandler<Event, Window> | undefined | null;\n\t'on:userproximity'?: EventHandler<Event, Window> | undefined | null;\n\tonuserproximity?: EventHandler<Event, Window> | undefined | null;\n\t'on:beforeprint'?: EventHandler<Event, Window> | undefined | null;\n\tonbeforeprint?: EventHandler<Event, Window> | undefined | null;\n\t'on:afterprint'?: EventHandler<Event, Window> | undefined | null;\n\tonafterprint?: EventHandler<Event, Window> | undefined | null;\n\t'on:languagechange'?: EventHandler<Event, Window> | undefined | null;\n\tonlanguagechange?: EventHandler<Event, Window> | undefined | null;\n\t'on:orientationchange'?: EventHandler<Event, Window> | undefined | null;\n\tonorientationchange?: EventHandler<Event, Window> | undefined | null;\n\t'on:message'?: EventHandler<MessageEvent, Window> | undefined | null;\n\tonmessage?: EventHandler<MessageEvent, Window> | undefined | null;\n\t'on:messageerror'?: EventHandler<MessageEvent, Window> | undefined | null;\n\tonmessageerror?: EventHandler<MessageEvent, Window> | undefined | null;\n\t'on:offline'?: EventHandler<Event, Window> | undefined | null;\n\tonoffline?: EventHandler<Event, Window> | undefined | null;\n\t'on:online'?: EventHandler<Event, Window> | undefined | null;\n\tononline?: EventHandler<Event, Window> | undefined | null;\n\t'on:beforeunload'?: EventHandler<BeforeUnloadEvent, Window> | undefined | null;\n\tonbeforeunload?: EventHandler<BeforeUnloadEvent, Window> | undefined | null;\n\t'on:unload'?: EventHandler<Event, Window> | undefined | null;\n\tonunload?: EventHandler<Event, Window> | undefined | null;\n\t'on:storage'?: EventHandler<StorageEvent, Window> | undefined | null;\n\tonstorage?: EventHandler<StorageEvent, Window> | undefined | null;\n\t'on:hashchange'?: EventHandler<HashChangeEvent, Window> | undefined | null;\n\tonhashchange?: EventHandler<HashChangeEvent, Window> | undefined | null;\n\t'on:pagehide'?: EventHandler<PageTransitionEvent, Window> | undefined | null;\n\tonpagehide?: EventHandler<PageTransitionEvent, Window> | undefined | null;\n\t'on:pageshow'?: EventHandler<PageTransitionEvent, Window> | undefined | null;\n\tonpageshow?: EventHandler<PageTransitionEvent, Window> | undefined | null;\n\t'on:popstate'?: EventHandler<PopStateEvent, Window> | undefined | null;\n\tonpopstate?: EventHandler<PopStateEvent, Window> | undefined | null;\n\t'on:devicemotion'?: EventHandler<DeviceMotionEvent> | undefined | null;\n\tondevicemotion?: EventHandler<DeviceMotionEvent> | undefined | null;\n\t'on:deviceorientation'?: EventHandler<DeviceOrientationEvent, Window> | undefined | null;\n\tondeviceorientation?: EventHandler<DeviceOrientationEvent, Window> | undefined | null;\n\t'on:deviceorientationabsolute'?: EventHandler<DeviceOrientationEvent, Window> | undefined | null;\n\tondeviceorientationabsolute?: EventHandler<DeviceOrientationEvent, Window> | undefined | null;\n\t'on:unhandledrejection'?: EventHandler<PromiseRejectionEvent, Window> | undefined | null;\n\tonunhandledrejection?: EventHandler<PromiseRejectionEvent, Window> | undefined | null;\n\t'on:rejectionhandled'?: EventHandler<PromiseRejectionEvent, Window> | undefined | null;\n\tonrejectionhandled?: EventHandler<PromiseRejectionEvent, Window> | undefined | null;\n}\n\nexport interface SVGAttributes<T extends EventTarget> extends AriaAttributes, DOMAttributes<T> {\n\t// Attributes which also defined in HTMLAttributes\n\tclassName?: string | undefined | null;\n\tclass?: ClassValue | undefined | null;\n\tcolor?: string | undefined | null;\n\theight?: number | string | undefined | null;\n\tid?: string | undefined | null;\n\tlang?: string | undefined | null;\n\tpart?: string | undefined | null;\n\tmax?: number | string | undefined | null;\n\tmedia?: string | undefined | null;\n\t// On the `textPath` element\n\tmethod?: 'align' | 'stretch' | undefined | null;\n\tmin?: number | string | undefined | null;\n\tname?: string | undefined | null;\n\tstyle?: string | undefined | null;\n\ttarget?: string | undefined | null;\n\ttype?: string | undefined | null;\n\twidth?: number | string | undefined | null;\n\n\t// Other HTML properties supported by SVG elements in browsers\n\trole?: AriaRole | undefined | null;\n\ttabindex?: number | undefined | null;\n\tcrossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null;\n\n\t// SVG Specific attributes\n\t'accent-height'?: number | string | undefined | null;\n\taccumulate?: 'none' | 'sum' | undefined | null;\n\tadditive?: 'replace' | 'sum' | undefined | null;\n\t'alignment-baseline'?:\n\t\t| 'auto'\n\t\t| 'baseline'\n\t\t| 'before-edge'\n\t\t| 'text-before-edge'\n\t\t| 'middle'\n\t\t| 'central'\n\t\t| 'after-edge'\n\t\t| 'text-after-edge'\n\t\t| 'ideographic'\n\t\t| 'alphabetic'\n\t\t| 'hanging'\n\t\t| 'mathematical'\n\t\t| 'inherit'\n\t\t| undefined\n\t\t| null;\n\tallowReorder?: 'no' | 'yes' | undefined | null;\n\talphabetic?: number | string | undefined | null;\n\tamplitude?: number | string | undefined | null;\n\t'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated' | undefined | null;\n\tascent?: number | string | undefined | null;\n\tattributeName?: string | undefined | null;\n\tattributeType?: string | undefined | null;\n\tautoReverse?: number | string | undefined | null;\n\tazimuth?: number | string | undefined | null;\n\tbaseFrequency?: number | string | undefined | null;\n\t'baseline-shift'?: number | string | undefined | null;\n\tbaseProfile?: number | string | undefined | null;\n\tbbox?: number | string | undefined | null;\n\tbegin?: number | string | undefined | null;\n\tbias?: number | string | undefined | null;\n\tby?: number | string | undefined | null;\n\tcalcMode?: number | string | undefined | null;\n\t'cap-height'?: number | string | undefined | null;\n\tclip?: number | string | undefined | null;\n\t'clip-path'?: string | undefined | null;\n\tclipPathUnits?: number | string | undefined | null;\n\t'clip-rule'?: number | string | undefined | null;\n\t'color-interpolation'?: number | string | undefined | null;\n\t'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' | undefined | null;\n\t'color-profile'?: number | string | undefined | null;\n\t'color-rendering'?: number | string | undefined | null;\n\tcontentScriptType?: number | string | undefined | null;\n\tcontentStyleType?: number | string | undefined | null;\n\tcursor?: number | string | undefined | null;\n\tcx?: number | string | undefined | null;\n\tcy?: number | string | undefined | null;\n\td?: string | undefined | null;\n\tdecelerate?: number | string | undefined | null;\n\tdescent?: number | string | undefined | null;\n\tdiffuseConstant?: number | string | undefined | null;\n\tdirection?: number | string | undefined | null;\n\tdisplay?: number | string | undefined | null;\n\tdivisor?: number | string | undefined | null;\n\t'dominant-baseline'?: number | string | undefined | null;\n\tdur?: number | string | undefined | null;\n\tdx?: number | string | undefined | null;\n\tdy?: number | string | undefined | null;\n\tedgeMode?: number | string | undefined | null;\n\televation?: number | string | undefined | null;\n\t'enable-background'?: number | string | undefined | null;\n\tend?: number | string | undefined | null;\n\texponent?: number | string | undefined | null;\n\texternalResourcesRequired?: number | string | undefined | null;\n\tfill?: string | undefined | null;\n\t'fill-opacity'?: number | string | undefined | null;\n\t'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit' | undefined | null;\n\tfilter?: string | undefined | null;\n\tfilterRes?: number | string | undefined | null;\n\tfilterUnits?: number | string | undefined | null;\n\t'flood-color'?: number | string | undefined | null;\n\t'flood-opacity'?: number | string | undefined | null;\n\tfocusable?: number | string | undefined | null;\n\t'font-family'?: string | undefined | null;\n\t'font-size'?: number | string | undefined | null;\n\t'font-size-adjust'?: number | string | undefined | null;\n\t'font-stretch'?: number | string | undefined | null;\n\t'font-style'?: number | string | undefined | null;\n\t'font-variant'?: number | string | undefined | null;\n\t'font-weight'?: number | string | undefined | null;\n\tformat?: number | string | undefined | null;\n\tfr?: number | string | undefined | null;\n\tfrom?: number | string | undefined | null;\n\tfx?: number | string | undefined | null;\n\tfy?: number | string | undefined | null;\n\tg1?: number | string | undefined | null;\n\tg2?: number | string | undefined | null;\n\t'glyph-name'?: number | string | undefined | null;\n\t'glyph-orientation-horizontal'?: number | string | undefined | null;\n\t'glyph-orientation-vertical'?: number | string | undefined | null;\n\tglyphRef?: number | string | undefined | null;\n\tgradientTransform?: string | undefined | null;\n\tgradientUnits?: string | undefined | null;\n\thanging?: number | string | undefined | null;\n\thref?: string | undefined | null;\n\t'horiz-adv-x'?: number | string | undefined | null;\n\t'horiz-origin-x'?: number | string | undefined | null;\n\tideographic?: number | string | undefined | null;\n\t'image-rendering'?: number | string | undefined | null;\n\tin2?: number | string | undefined | null;\n\tin?: string | undefined | null;\n\tintercept?: number | string | undefined | null;\n\tk1?: number | string | undefined | null;\n\tk2?: number | string | undefined | null;\n\tk3?: number | string | undefined | null;\n\tk4?: number | string | undefined | null;\n\tk?: number | string | undefined | null;\n\tkernelMatrix?: number | string | undefined | null;\n\tkernelUnitLength?: number | string | undefined | null;\n\tkerning?: number | string | undefined | null;\n\tkeyPoints?: number | string | undefined | null;\n\tkeySplines?: number | string | undefined | null;\n\tkeyTimes?: number | string | undefined | null;\n\tlengthAdjust?: number | string | undefined | null;\n\t'letter-spacing'?: number | string | undefined | null;\n\t'lighting-color'?: number | string | undefined | null;\n\tlimitingConeAngle?: number | string | undefined | null;\n\tlocal?: number | string | undefined | null;\n\t'marker-end'?: string | undefined | null;\n\tmarkerHeight?: number | string | undefined | null;\n\t'marker-mid'?: string | undefined | null;\n\t'marker-start'?: string | undefined | null;\n\tmarkerUnits?: number | string | undefined | null;\n\tmarkerWidth?: number | string | undefined | null;\n\tmask?: string | undefined | null;\n\tmaskContentUnits?: number | string | undefined | null;\n\tmaskUnits?: number | string | undefined | null;\n\tmathematical?: number | string | undefined | null;\n\tmode?: number | string | undefined | null;\n\tnumOctaves?: number | string | undefined | null;\n\toffset?: number | string | undefined | null;\n\topacity?: number | string | undefined | null;\n\toperator?: number | string | undefined | null;\n\torder?: number | string | undefined | null;\n\torient?: number | string | undefined | null;\n\torientation?: number | string | undefined | null;\n\torigin?: number | string | undefined | null;\n\toverflow?: number | string | undefined | null;\n\t'overline-position'?: number | string | undefined | null;\n\t'overline-thickness'?: number | string | undefined | null;\n\t'paint-order'?: number | string | undefined | null;\n\t'panose-1'?: number | string | undefined | null;\n\tpath?: string | undefined | null;\n\tpathLength?: number | string | undefined | null;\n\tpatternContentUnits?: string | undefined | null;\n\tpatternTransform?: number | string | undefined | null;\n\tpatternUnits?: string | undefined | null;\n\t'pointer-events'?: number | string | undefined | null;\n\tpoints?: string | undefined | null;\n\tpointsAtX?: number | string | undefined | null;\n\tpointsAtY?: number | string | undefined | null;\n\tpointsAtZ?: number | string | undefined | null;\n\tpreserveAlpha?: number | string | undefined | null;\n\tpreserveAspectRatio?: string | undefined | null;\n\tprimitiveUnits?: number | string | undefined | null;\n\tr?: number | string | undefined | null;\n\tradius?: number | string | undefined | null;\n\trefX?: number | string | undefined | null;\n\trefY?: number | string | undefined | null;\n\t'rendering-intent'?: number | string | undefined | null;\n\trepeatCount?: number | string | undefined | null;\n\trepeatDur?: number | string | undefined | null;\n\trequiredExtensions?: number | string | undefined | null;\n\trequiredFeatures?: number | string | undefined | null;\n\trestart?: number | string | undefined | null;\n\tresult?: string | undefined | null;\n\trotate?: number | string | undefined | null;\n\trx?: number | string | undefined | null;\n\try?: number | string | undefined | null;\n\tscale?: number | string | undefined | null;\n\tseed?: number | string | undefined | null;\n\t'shape-rendering'?: number | string | undefined | null;\n\tslope?: number | string | undefined | null;\n\tspacing?: number | string | undefined | null;\n\tspecularConstant?: number | string | undefined | null;\n\tspecularExponent?: number | string | undefined | null;\n\tspeed?: number | string | undefined | null;\n\tspreadMethod?: string | undefined | null;\n\tstartOffset?: number | string | undefined | null;\n\tstdDeviation?: number | string | undefined | null;\n\tstemh?: number | string | undefined | null;\n\tstemv?: number | string | undefined | null;\n\tstitchTiles?: number | string | undefined | null;\n\t'stop-color'?: string | undefined | null;\n\t'stop-opacity'?: number | string | undefined | null;\n\t'strikethrough-position'?: number | string | undefined | null;\n\t'strikethrough-thickness'?: number | string | undefined | null;\n\tstring?: number | string | undefined | null;\n\tstroke?: string | undefined | null;\n\t'stroke-dasharray'?: string | number | undefined | null;\n\t'stroke-dashoffset'?: string | number | undefined | null;\n\t'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit' | undefined | null;\n\t'stroke-linejoin'?:\n\t\t| 'arcs'\n\t\t| 'miter-clip'\n\t\t| 'miter'\n\t\t| 'round'\n\t\t| 'bevel'\n\t\t| 'inherit'\n\t\t| undefined\n\t\t| null;\n\t'stroke-miterlimit'?: string | undefined | null;\n\t'stroke-opacity'?: number | string | undefined | null;\n\t'stroke-width'?: number | string | undefined | null;\n\tsurfaceScale?: number | string | undefined | null;\n\tsystemLanguage?: number | string | undefined | null;\n\ttableValues?: number | string | undefined | null;\n\ttargetX?: number | string | undefined | null;\n\ttargetY?: number | string | undefined | null;\n\t'text-anchor'?: string | undefined | null;\n\t'text-decoration'?: number | string | undefined | null;\n\ttextLength?: number | string | undefined | null;\n\t'text-rendering'?: number | string | undefined | null;\n\tto?: number | string | undefined | null;\n\ttransform?: string | undefined | null;\n\t'transform-origin'?: string | undefined | null;\n\tu1?: number | string | undefined | null;\n\tu2?: number | string | undefined | null;\n\t'underline-position'?: number | string | undefined | null;\n\t'underline-thickness'?: number | string | undefined | null;\n\tunicode?: number | string | undefined | null;\n\t'unicode-bidi'?: number | string | undefined | null;\n\t'unicode-range'?: number | string | undefined | null;\n\t'units-per-em'?: number | string | undefined | null;\n\t'v-alphabetic'?: number | string | undefined | null;\n\tvalues?: string | undefined | null;\n\t'vector-effect'?: number | string | undefined | null;\n\tversion?: string | undefined | null;\n\t'vert-adv-y'?: number | string | undefined | null;\n\t'vert-origin-x'?: number | string | undefined | null;\n\t'vert-origin-y'?: number | string | undefined | null;\n\t'v-hanging'?: number | string | undefined | null;\n\t'v-ideographic'?: number | string | undefined | null;\n\tviewBox?: string | undefined | null;\n\tviewTarget?: number | string | undefined | null;\n\tvisibility?: number | string | undefined | null;\n\t'v-mathematical'?: number | string | undefined | null;\n\twidths?: number | string | undefined | null;\n\t'word-spacing'?: number | string | undefined | null;\n\t'writing-mode'?: number | string | undefined | null;\n\tx1?: number | string | undefined | null;\n\tx2?: number | string | undefined | null;\n\tx?: number | string | undefined | null;\n\txChannelSelector?: string | undefined | null;\n\t'x-height'?: number | string | undefined | null;\n\t'xlink:actuate'?: string | undefined | null;\n\t'xlink:arcrole'?: string | undefined | null;\n\t'xlink:href'?: string | undefined | null;\n\t'xlink:role'?: string | undefined | null;\n\t'xlink:show'?: string | undefined | null;\n\t'xlink:title'?: string | undefined | null;\n\t'xlink:type'?: string | undefined | null;\n\t'xml:base'?: string | undefined | null;\n\t'xml:lang'?: string | undefined | null;\n\t'xmlns:xlink'?: string | undefined | null;\n\t'xml:space'?: string | undefined | null;\n\ty1?: number | string | undefined | null;\n\ty2?: number | string | undefined | null;\n\ty?: number | string | undefined | null;\n\tyChannelSelector?: string | undefined | null;\n\tz?: number | string | undefined | null;\n\tzoomAndPan?: string | undefined | null;\n\n\t// allow any data- attribute\n\t[key: `data-${string}`]: any;\n}\n\nexport interface HTMLTemplateAttributes extends HTMLAttributes<HTMLElement> {\n\tshadowrootmode?: 'open' | 'closed' | undefined | null;\n}\n\nexport interface HTMLWebViewAttributes extends HTMLAttributes<HTMLElement> {\n\tallowfullscreen?: boolean | undefined | null;\n\tallowpopups?: boolean | undefined | null;\n\tautosize?: boolean | undefined | null;\n\tblinkfeatures?: string | undefined | null;\n\tdisableblinkfeatures?: string | undefined | null;\n\tdisableguestresize?: boolean | undefined | null;\n\tdisablewebsecurity?: boolean | undefined | null;\n\tguestinstance?: string | undefined | null;\n\thttpreferrer?: string | undefined | null;\n\tnodeintegration?: boolean | undefined | null;\n\tpartition?: string | undefined | null;\n\tplugins?: boolean | undefined | null;\n\tpreload?: string | undefined | null; // in the DOM it's only 'auto' | 'none' | 'metadata' | '', but electron allows arbitrary values\n\tsrc?: string | undefined | null;\n\tuseragent?: string | undefined | null;\n\twebpreferences?: string | undefined | null;\n}\n\n//\n// DOM Elements\n// ----------------------------------------------------------------------\n\nexport interface SvelteHTMLElements {\n\ta: HTMLAnchorAttributes;\n\tabbr: HTMLAttributes<HTMLElement>;\n\taddress: HTMLAttributes<HTMLElement>;\n\tarea: HTMLAreaAttributes;\n\tarticle: HTMLAttributes<HTMLElement>;\n\taside: HTMLAttributes<HTMLElement>;\n\taudio: HTMLAudioAttributes;\n\tb: HTMLAttributes<HTMLElement>;\n\tbase: HTMLBaseAttributes;\n\tbdi: HTMLAttributes<HTMLElement>;\n\tbdo: HTMLAttributes<HTMLElement>;\n\tbig: HTMLAttributes<HTMLElement>;\n\tblockquote: HTMLBlockquoteAttributes;\n\tbody: HTMLAttributes<HTMLBodyElement>;\n\tbr: HTMLAttributes<HTMLBRElement>;\n\tbutton: HTMLButtonAttributes;\n\tcanvas: HTMLCanvasAttributes;\n\tcaption: HTMLAttributes<HTMLElement>;\n\tcite: HTMLAttributes<HTMLElement>;\n\tcode: HTMLAttributes<HTMLElement>;\n\tcol: HTMLColAttributes;\n\tcolgroup: HTMLColgroupAttributes;\n\tdata: HTMLDataAttributes;\n\tdatalist: HTMLAttributes<HTMLDataListElement>;\n\tdd: HTMLAttributes<HTMLElement>;\n\tdel: HTMLDelAttributes;\n\tdetails: HTMLDetailsAttributes;\n\tdfn: HTMLAttributes<HTMLElement>;\n\tdialog: HTMLDialogAttributes;\n\tdiv: HTMLAttributes<HTMLDivElement>;\n\tdl: HTMLAttributes<HTMLDListElement>;\n\tdt: HTMLAttributes<HTMLElement>;\n\tem: HTMLAttributes<HTMLElement>;\n\tembed: HTMLEmbedAttributes;\n\tfieldset: HTMLFieldsetAttributes;\n\tfigcaption: HTMLAttributes<HTMLElement>;\n\tfigure: HTMLAttributes<HTMLElement>;\n\tfooter: HTMLAttributes<HTMLElement>;\n\tform: HTMLFormAttributes;\n\th1: HTMLAttributes<HTMLHeadingElement>;\n\th2: HTMLAttributes<HTMLHeadingElement>;\n\th3: HTMLAttributes<HTMLHeadingElement>;\n\th4: HTMLAttributes<HTMLHeadingElement>;\n\th5: HTMLAttributes<HTMLHeadingElement>;\n\th6: HTMLAttributes<HTMLHeadingElement>;\n\thead: HTMLAttributes<HTMLElement>;\n\theader: HTMLAttributes<HTMLElement>;\n\thgroup: HTMLAttributes<HTMLElement>;\n\thr: HTMLAttributes<HTMLHRElement>;\n\thtml: HTMLHtmlAttributes;\n\ti: HTMLAttributes<HTMLElement>;\n\tiframe: HTMLIframeAttributes;\n\timg: HTMLImgAttributes;\n\tinput: HTMLInputAttributes;\n\tins: HTMLInsAttributes;\n\tkbd: HTMLAttributes<HTMLElement>;\n\tkeygen: HTMLKeygenAttributes;\n\tlabel: HTMLLabelAttributes;\n\tlegend: HTMLAttributes<HTMLLegendElement>;\n\tli: HTMLLiAttributes;\n\tlink: HTMLLinkAttributes;\n\tmain: HTMLAttributes<HTMLElement>;\n\tmap: HTMLMapAttributes;\n\tmark: HTMLAttributes<HTMLElement>;\n\tmenu: HTMLMenuAttributes;\n\tmenuitem: HTMLAttributes<HTMLElement>;\n\tmeta: HTMLMetaAttributes;\n\tmeter: HTMLMeterAttributes;\n\tnav: HTMLAttributes<HTMLElement>;\n\tnoscript: HTMLAttributes<HTMLElement>;\n\tobject: HTMLObjectAttributes;\n\tol: HTMLOlAttributes;\n\toptgroup: HTMLOptgroupAttributes;\n\toption: HTMLOptionAttributes;\n\toutput: HTMLOutputAttributes;\n\tp: HTMLAttributes<HTMLParagraphElement>;\n\tparam: HTMLParamAttributes;\n\tpicture: HTMLAttributes<HTMLElement>;\n\tpre: HTMLAttributes<HTMLPreElement>;\n\tprogress: HTMLProgressAttributes;\n\tq: HTMLQuoteAttributes;\n\trp: HTMLAttributes<HTMLElement>;\n\trt: HTMLAttributes<HTMLElement>;\n\truby: HTMLAttributes<HTMLElement>;\n\ts: HTMLAttributes<HTMLElement>;\n\tsamp: HTMLAttributes<HTMLElement>;\n\tslot: HTMLSlotAttributes;\n\tscript: HTMLScriptAttributes;\n\tsearch: HTMLAttributes<HTMLElement>;\n\tsection: HTMLAttributes<HTMLElement>;\n\tselect: HTMLSelectAttributes;\n\tsmall: HTMLAttributes<HTMLElement>;\n\tsource: HTMLSourceAttributes;\n\tspan: HTMLAttributes<HTMLSpanElement>;\n\tstrong: HTMLAttributes<HTMLElement>;\n\tstyle: HTMLStyleAttributes;\n\tsub: HTMLAttributes<HTMLElement>;\n\tsummary: HTMLAttributes<HTMLElement>;\n\tsup: HTMLAttributes<HTMLElement>;\n\ttable: HTMLTableAttributes;\n\ttemplate: HTMLTemplateAttributes;\n\ttbody: HTMLAttributes<HTMLTableSectionElement>;\n\ttd: HTMLTdAttributes;\n\ttextarea: HTMLTextareaAttributes;\n\ttfoot: HTMLAttributes<HTMLTableSectionElement>;\n\tth: HTMLThAttributes;\n\tthead: HTMLAttributes<HTMLTableSectionElement>;\n\ttime: HTMLTimeAttributes;\n\ttitle: HTMLAttributes<HTMLTitleElement>;\n\ttr: HTMLAttributes<HTMLTableRowElement>;\n\ttrack: HTMLTrackAttributes;\n\tu: HTMLAttributes<HTMLElement>;\n\tul: HTMLAttributes<HTMLUListElement>;\n\tvar: HTMLAttributes<HTMLElement>;\n\tvideo: HTMLVideoAttributes;\n\twbr: HTMLAttributes<HTMLElement>;\n\twebview: HTMLWebViewAttributes;\n\t// SVG\n\tsvg: SVGAttributes<SVGSVGElement>;\n\n\tanimate: SVGAttributes<SVGAnimateElement>;\n\tanimateMotion: SVGAttributes<SVGElement>;\n\tanimateTransform: SVGAttributes<SVGAnimateTransformElement>;\n\tcircle: SVGAttributes<SVGCircleElement>;\n\tclipPath: SVGAttributes<SVGClipPathElement>;\n\tdefs: SVGAttributes<SVGDefsElement>;\n\tdesc: SVGAttributes<SVGDescElement>;\n\tellipse: SVGAttributes<SVGEllipseElement>;\n\tfeBlend: SVGAttributes<SVGFEBlendElement>;\n\tfeColorMatrix: SVGAttributes<SVGFEColorMatrixElement>;\n\tfeComponentTransfer: SVGAttributes<SVGFEComponentTransferElement>;\n\tfeComposite: SVGAttributes<SVGFECompositeElement>;\n\tfeConvolveMatrix: SVGAttributes<SVGFEConvolveMatrixElement>;\n\tfeDiffuseLighting: SVGAttributes<SVGFEDiffuseLightingElement>;\n\tfeDisplacementMap: SVGAttributes<SVGFEDisplacementMapElement>;\n\tfeDistantLight: SVGAttributes<SVGFEDistantLightElement>;\n\tfeDropShadow: SVGAttributes<SVGFEDropShadowElement>;\n\tfeFlood: SVGAttributes<SVGFEFloodElement>;\n\tfeFuncA: SVGAttributes<SVGFEFuncAElement>;\n\tfeFuncB: SVGAttributes<SVGFEFuncBElement>;\n\tfeFuncG: SVGAttributes<SVGFEFuncGElement>;\n\tfeFuncR: SVGAttributes<SVGFEFuncRElement>;\n\tfeGaussianBlur: SVGAttributes<SVGFEGaussianBlurElement>;\n\tfeImage: SVGAttributes<SVGFEImageElement>;\n\tfeMerge: SVGAttributes<SVGFEMergeElement>;\n\tfeMergeNode: SVGAttributes<SVGFEMergeNodeElement>;\n\tfeMorphology: SVGAttributes<SVGFEMorphologyElement>;\n\tfeOffset: SVGAttributes<SVGFEOffsetElement>;\n\tfePointLight: SVGAttributes<SVGFEPointLightElement>;\n\tfeSpecularLighting: SVGAttributes<SVGFESpecularLightingElement>;\n\tfeSpotLight: SVGAttributes<SVGFESpotLightElement>;\n\tfeTile: SVGAttributes<SVGFETileElement>;\n\tfeTurbulence: SVGAttributes<SVGFETurbulenceElement>;\n\tfilter: SVGAttributes<SVGFilterElement>;\n\tforeignObject: SVGAttributes<SVGForeignObjectElement>;\n\tg: SVGAttributes<SVGGElement>;\n\timage: SVGAttributes<SVGImageElement>;\n\tline: SVGAttributes<SVGLineElement>;\n\tlinearGradient: SVGAttributes<SVGLinearGradientElement>;\n\tmarker: SVGAttributes<SVGMarkerElement>;\n\tmask: SVGAttributes<SVGMaskElement>;\n\tmetadata: SVGAttributes<SVGMetadataElement>;\n\tmpath: SVGAttributes<SVGElement>;\n\tpath: SVGAttributes<SVGPathElement>;\n\tpattern: SVGAttributes<SVGPatternElement>;\n\tpolygon: SVGAttributes<SVGPolygonElement>;\n\tpolyline: SVGAttributes<SVGPolylineElement>;\n\tradialGradient: SVGAttributes<SVGRadialGradientElement>;\n\trect: SVGAttributes<SVGRectElement>;\n\tstop: SVGAttributes<SVGStopElement>;\n\tswitch: SVGAttributes<SVGSwitchElement>;\n\tsymbol: SVGAttributes<SVGSymbolElement>;\n\ttext: SVGAttributes<SVGTextElement>;\n\ttextPath: SVGAttributes<SVGTextPathElement>;\n\ttspan: SVGAttributes<SVGTSpanElement>;\n\tuse: SVGAttributes<SVGUseElement>;\n\tview: SVGAttributes<SVGViewElement>;\n\n\t// Svelte specific\n\t'svelte:window': SvelteWindowAttributes;\n\t'svelte:document': SvelteDocumentAttributes;\n\t'svelte:body': HTMLAttributes<HTMLElement>;\n\t'svelte:fragment': { slot?: string };\n\t'svelte:options': {\n\t\tcustomElement?:\n\t\t\t| string\n\t\t\t| undefined\n\t\t\t| {\n\t\t\t\t\ttag?: string;\n\t\t\t\t\tshadow?: 'open' | 'none' | ShadowRootInit | undefined;\n\t\t\t\t\tprops?:\n\t\t\t\t\t\t| Record<\n\t\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tattribute?: string;\n\t\t\t\t\t\t\t\t\treflect?: boolean;\n\t\t\t\t\t\t\t\t\ttype?: 'String' | 'Boolean' | 'Number' | 'Array' | 'Object';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t  >\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\textend?: (\n\t\t\t\t\t\tsvelteCustomElementClass: new () => HTMLElement\n\t\t\t\t\t) => new () => HTMLElement | undefined;\n\t\t\t  };\n\t\timmutable?: boolean | undefined;\n\t\taccessors?: boolean | undefined;\n\t\tnamespace?: string | undefined;\n\t\t[name: string]: any;\n\t};\n\t'svelte:head': { [name: string]: any };\n\t'svelte:boundary': {\n\t\tonerror?: (error: unknown, reset: () => void) => void;\n\t\tfailed?: import('svelte').Snippet<[error: unknown, reset: () => void]>;\n\t\tpending?: import('svelte').Snippet;\n\t};\n\n\t[name: string]: { [name: string]: any };\n}\n\nexport type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary;\n"
  },
  {
    "path": "packages/svelte/knip.json",
    "content": "{\n\t\"$schema\": \"https://unpkg.com/knip@5/schema.json\",\n\t\"entry\": [\n\t\t\"tests/**/*.js\",\n\t\t\"tests/**/*.ts\",\n\t\t\"!tests/**/*.svelte\",\n\t\t\"!tests/**/*.svelte.js\",\n\t\t\"!tests/**/_output\",\n\t\t\"!tests/runtime-browser/driver.js\",\n\t\t\"!tests/runtime-browser/driver-ssr.js\",\n\t\t\"!tests/types/component.ts\"\n\t],\n\t\"project\": [\"src/**\"]\n}\n"
  },
  {
    "path": "packages/svelte/messages/client-errors/errors.md",
    "content": "## async_derived_orphan\n\n> Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n\nIn Svelte there are two types of reaction — [`$derived`](/docs/svelte/$derived) and [`$effect`](/docs/svelte/$effect). Deriveds can be created anywhere, because they run _lazily_ and can be [garbage collected](https://developer.mozilla.org/en-US/docs/Glossary/Garbage_collection) if nothing references them. Effects, by contrast, keep running eagerly whenever their dependencies change, until they are destroyed.\n\nBecause of this, effects can only be created inside other effects (or [effect roots](/docs/svelte/$effect#$effect.root), such as the one that is created when you first mount a component) so that Svelte knows when to destroy them.\n\nSome sleight of hand occurs when a derived contains an `await` expression: Since waiting until we read `{await getPromise()}` to call `getPromise` would be too late, we use an effect to instead call it proactively, notifying Svelte when the value is available. But since we're using an effect, we can only create asynchronous deriveds inside another effect.\n\n## bind_invalid_checkbox_value\n\n> Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n\n## bind_invalid_export\n\n> Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n\n## bind_not_bindable\n\n> A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n\n## component_api_changed\n\n> Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n\nSee the [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.\n\n## component_api_invalid_new\n\n> Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n\nSee the [migration guide](/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.\n\n## derived_references_self\n\n> A derived value cannot reference itself recursively\n\n## each_key_duplicate\n\n> Keyed each block has duplicate key at indexes %a% and %b%\n\n> Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n\n## each_key_volatile\n\n> Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n\nThe key expression in a keyed each block must return the same value when called multiple times for the same item. Using expressions like `[item.a, item.b]` creates a new array each time, which will never be equal to itself. Instead, use a primitive value or create a stable key like `item.a + '-' + item.b`.\n\n## effect_in_teardown\n\n> `%rune%` cannot be used inside an effect cleanup function\n\n## effect_in_unowned_derived\n\n> Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n\n## effect_orphan\n\n> `%rune%` can only be used inside an effect (e.g. during component initialisation)\n\n## effect_pending_outside_reaction\n\n> `$effect.pending()` can only be called inside an effect or derived\n\n## effect_update_depth_exceeded\n\n> Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n\nIf an effect updates some state that it also depends on, it will re-run, potentially in a loop:\n\n```js\nlet count = $state(0);\n\n$effect(() => {\n\t// this both reads and writes `count`,\n\t// so will run in an infinite loop\n\tcount += 1;\n});\n```\n\n(Svelte intervenes before this can crash your browser tab.)\n\nThe same applies to array mutations, since these both read and write to the array:\n\n```js\nlet array = $state(['hello']);\n\n$effect(() => {\n\tarray.push('goodbye');\n});\n```\n\nNote that it's fine for an effect to re-run itself as long as it 'settles':\n\n```js\nlet array = ['a', 'b', 'c'];\n// ---cut---\n$effect(() => {\n\t// this is okay, because sorting an already-sorted array\n\t// won't result in a mutation\n\tarray.sort();\n});\n```\n\nOften when encountering this issue, the value in question shouldn't be state (for example, if you are pushing to a `logs` array in an effect, make `logs` a normal array rather than `$state([])`). In the rare cases where you really _do_ need to write to state in an effect — [which you should avoid]($effect#When-not-to-use-$effect) — you can read the state with [untrack](svelte#untrack) to avoid adding it as a dependency.\n\n## flush_sync_in_effect\n\n> Cannot use `flushSync` inside an effect\n\nThe `flushSync()` function can be used to flush any pending effects synchronously. It cannot be used if effects are currently being flushed — in other words, you can call it after a state change but _not_ inside an effect.\n\nThis restriction only applies when using the `experimental.async` option, which will be active by default in Svelte 6.\n\n## fork_discarded\n\n> Cannot commit a fork that was already discarded\n\n## fork_timing\n\n> Cannot create a fork inside an effect or when state changes are pending\n\n## get_abort_signal_outside_reaction\n\n> `getAbortSignal()` can only be called inside an effect or derived\n\n## hydratable_missing_but_required\n\n> Expected to find a hydratable with key `%key%` during hydration, but did not.\n\nThis can happen if you render a hydratable on the client that was not rendered on the server, and means that it was forced to fall back to running its function blockingly during hydration. This is bad for performance, as it blocks hydration until the asynchronous work completes.\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\n\tif (BROWSER) {\n\t\t// bad! nothing can become interactive until this asynchronous work is done\n\t\tawait hydratable('foo', get_slow_random_number);\n\t}\n</script>\n```\n\n## hydration_failed\n\n> Failed to hydrate the application\n\n## invalid_snippet\n\n> Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n\n## lifecycle_legacy_only\n\n> `%name%(...)` cannot be used in runes mode\n\n## props_invalid_value\n\n> Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n\n## props_rest_readonly\n\n> Rest element properties of `$props()` such as `%property%` are readonly\n\n## rune_outside_svelte\n\n> The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n\n## set_context_after_init\n\n> `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n\nThis restriction only applies when using the `experimental.async` option, which will be active by default in Svelte 6.\n\n## state_descriptors_fixed\n\n> Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n\n## state_prototype_fixed\n\n> Cannot set prototype of `$state` object\n\n## state_unsafe_mutation\n\n> Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n\nThis error occurs when state is updated while evaluating a `$derived`. You might encounter it while trying to 'derive' two pieces of state in one go:\n\n```svelte\n<script>\n\tlet count = $state(0);\n\n\tlet even = $state(true);\n\n\tlet odd = $derived.by(() => {\n\t\teven = count % 2 === 0;\n\t\treturn !even;\n\t});\n</script>\n\n<button onclick={() => count++}>{count}</button>\n\n<p>{count} is even: {even}</p>\n<p>{count} is odd: {odd}</p>\n```\n\nThis is forbidden because it introduces instability: if `<p>{count} is even: {even}</p>` is updated before `odd` is recalculated, `even` will be stale. In most cases the solution is to make everything derived:\n\n```js\nlet count = 0;\n// ---cut---\nlet even = $derived(count % 2 === 0);\nlet odd = $derived(!even);\n```\n\nIf side-effects are unavoidable, use [`$effect`]($effect) instead.\n\n## svelte_boundary_reset_onerror\n\n> A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n\nIf a [`<svelte:boundary>`](https://svelte.dev/docs/svelte/svelte-boundary) has an `onerror` function, it must not call the provided `reset` function synchronously since the boundary is still in a broken state. Typically, `reset()` is called later, once the error has been resolved.\n\nIf it's possible to resolve the error inside the `onerror` callback, you must at least wait for the boundary to settle before calling `reset()`, for example using [`tick`](https://svelte.dev/docs/svelte/lifecycle-hooks#tick):\n\n```svelte\n<svelte:boundary onerror={async (error, reset) => {\n\tfixTheError();\n\t+++await tick();+++\n\treset();\n}}>\n\n</svelte:boundary>\n```\n"
  },
  {
    "path": "packages/svelte/messages/client-warnings/warnings.md",
    "content": "## assignment_value_stale\n\n> Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n\nGiven a case like this...\n\n```svelte\n<script>\n\tlet object = $state({ array: null });\n\n\tfunction add() {\n\t\t(object.array ??= []).push(object.array.length);\n\t}\n</script>\n\n<button onclick={add}>add</button>\n<p>items: {JSON.stringify(object.items)}</p>\n```\n\n...the array being pushed to when the button is first clicked is the `[]` on the right-hand side of the assignment, but the resulting value of `object.array` is an empty state proxy. As a result, the pushed value will be discarded.\n\nYou can fix this by separating it into two statements:\n\n```js\nlet object = { array: [0] };\n// ---cut---\nfunction add() {\n\tobject.array ??= [];\n\tobject.array.push(object.array.length);\n}\n```\n\n## await_reactivity_loss\n\n> Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n\nSvelte's signal-based reactivity works by tracking which bits of state are read when a template or `$derived(...)` expression executes. If an expression contains an `await`, Svelte transforms it such that any state _after_ the `await` is also tracked — in other words, in a case like this...\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\nlet total = $derived(await a + b);\n```\n\n...both `a` and `b` are tracked, even though `b` is only read once `a` has resolved, after the initial execution.\n\nThis does _not_ apply to an `await` that is not 'visible' inside the expression. In a case like this...\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\nasync function sum() {\n\treturn await a + b;\n}\n\nlet total = $derived(await sum());\n```\n\n...`total` will depend on `a` (which is read immediately) but not `b` (which is not). The solution is to pass the values into the function:\n\n```js\nlet a = Promise.resolve(1);\nlet b = 2;\n// ---cut---\n/**\n * @param {Promise<number>} a\n * @param {number} b\n */\nasync function sum(a, b) {\n\treturn await a + b;\n}\n\nlet total = $derived(await sum(a, b));\n```\n\n## await_waterfall\n\n> An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n\nIn a case like this...\n\n```js\nasync function one() { return 1 }\nasync function two() { return 2 }\n// ---cut---\nlet a = $derived(await one());\nlet b = $derived(await two());\n```\n\n...the second `$derived` will not be created until the first one has resolved. Since `await two()` does not depend on the value of `a`, this delay, often described as a 'waterfall', is unnecessary.\n\n(Note that if the values of `await one()` and `await two()` subsequently change, they can do so concurrently — the waterfall only occurs when the deriveds are first created.)\n\nYou can solve this by creating the promises first and _then_ awaiting them:\n\n```js\nasync function one() { return 1 }\nasync function two() { return 2 }\n// ---cut---\nlet aPromise = $derived(one());\nlet bPromise = $derived(two());\n\nlet a = $derived(await aPromise);\nlet b = $derived(await bPromise);\n```\n\n## binding_property_non_reactive\n\n> `%binding%` is binding to a non-reactive property\n\n> `%binding%` (%location%) is binding to a non-reactive property\n\n## console_log_state\n\n> Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n\nWhen logging a [proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy), browser devtools will log the proxy itself rather than the value it represents. In the case of Svelte, the 'target' of a `$state` proxy might not resemble its current value, which can be confusing.\n\nThe easiest way to log a value as it changes over time is to use the [`$inspect`](/docs/svelte/$inspect) rune. Alternatively, to log things on a one-off basis (for example, inside an event handler) you can use [`$state.snapshot`](/docs/svelte/$state#$state.snapshot) to take a snapshot of the current value.\n\n## event_handler_invalid\n\n> %handler% should be a function. Did you mean to %suggestion%?\n\n## hydratable_missing_but_expected\n\n> Expected to find a hydratable with key `%key%` during hydration, but did not.\n\nThis can happen if you render a hydratable on the client that was not rendered on the server, and means that it was forced to fall back to running its function blockingly during hydration. This is bad for performance, as it blocks hydration until the asynchronous work completes.\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\n\tif (BROWSER) {\n\t\t// bad! nothing can become interactive until this asynchronous work is done\n\t\tawait hydratable('foo', get_slow_random_number);\n\t}\n</script>\n```\n\n## hydration_attribute_changed\n\n> The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n\nCertain attributes like `src` on an `<img>` element will not be repaired during hydration, i.e. the server value will be kept. That's because updating these attributes can cause the image to be refetched (or in the case of an `<iframe>`, for the frame to be reloaded), even if they resolve to the same resource.\n\nTo fix this, either silence the warning with a [`svelte-ignore`](basic-markup#Comments) comment, or ensure that the value stays the same between server and client. If you really need the value to change on hydration, you can force an update like this:\n\n```svelte\n<script>\n\tlet { src } = $props();\n\n\tif (typeof window !== 'undefined') {\n\t\t// stash the value...\n\t\tconst initial = src;\n\n\t\t// unset it...\n\t\tsrc = undefined;\n\n\t\t$effect(() => {\n\t\t\t// ...and reset after we've mounted\n\t\t\tsrc = initial;\n\t\t});\n\t}\n</script>\n\n<img {src} />\n```\n\n## hydration_html_changed\n\n> The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value\n\n> The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n\nIf the `{@html ...}` value changes between the server and the client, it will not be repaired during hydration, i.e. the server value will be kept. That's because change detection during hydration is expensive and usually unnecessary.\n\nTo fix this, either silence the warning with a [`svelte-ignore`](basic-markup#Comments) comment, or ensure that the value stays the same between server and client. If you really need the value to change on hydration, you can force an update like this:\n\n```svelte\n<script>\n\tlet { markup } = $props();\n\n\tif (typeof window !== 'undefined') {\n\t\t// stash the value...\n\t\tconst initial = markup;\n\n\t\t// unset it...\n\t\tmarkup = undefined;\n\n\t\t$effect(() => {\n\t\t\t// ...and reset after we've mounted\n\t\t\tmarkup = initial;\n\t\t});\n\t}\n</script>\n\n{@html markup}\n```\n\n## hydration_mismatch\n\n> Hydration failed because the initial UI does not match what was rendered on the server\n\n> Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n\nThis warning is thrown when Svelte encounters an error while hydrating the HTML from the server. During hydration, Svelte walks the DOM, expecting a certain structure. If that structure is different (for example because the HTML was repaired by the DOM because of invalid HTML), then Svelte will run into issues, resulting in this warning.\n\nDuring development, this error is often preceded by a `console.error` detailing the offending HTML, which needs fixing.\n\n## invalid_raw_snippet_render\n\n> The `render` function passed to `createRawSnippet` should return HTML for a single element\n\n## legacy_recursive_reactive_block\n\n> Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n\n## lifecycle_double_unmount\n\n> Tried to unmount a component that was not mounted\n\n## ownership_invalid_binding\n\n> %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n\nConsider three components `GrandParent`, `Parent` and `Child`. If you do `<GrandParent bind:value>`, inside `GrandParent` pass on the variable via `<Parent {value} />` (note the missing `bind:`) and then do `<Child bind:value>` inside `Parent`, this warning is thrown.\n\nTo fix it, `bind:` to the value instead of just passing a property (i.e. in this example do `<Parent bind:value />`).\n\n## ownership_invalid_mutation\n\n> Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n\nConsider the following code:\n\n```svelte\n<!--- file: App.svelte --->\n<script>\n\timport Child from './Child.svelte';\n\tlet person = $state({ name: 'Florida', surname: 'Man' });\n</script>\n\n<Child {person} />\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\tlet { person } = $props();\n</script>\n\n<input bind:value={person.name}>\n<input bind:value={person.surname}>\n```\n\n`Child` is mutating `person` which is owned by `App` without being explicitly \"allowed\" to do so. This is strongly discouraged since it can create code that is hard to reason about at scale (\"who mutated this value?\"), hence the warning.\n\nTo fix it, either create callback props to communicate changes, or mark `person` as [`$bindable`]($bindable).\n\n## select_multiple_invalid_value\n\n> The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n\nWhen using `<select multiple value={...}>`, Svelte will mark all selected `<option>` elements as selected by iterating over the array passed to `value`. If `value` is not an array, Svelte will emit this warning and keep the selected options as they are.\n\nTo silence the warning, ensure that `value`:\n\n- is an array for an explicit selection\n- is `null` or `undefined` to keep the selection as is\n\n## state_proxy_equality_mismatch\n\n> Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n\n`$state(...)` creates a [proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) of the value it is passed. The proxy and the value have different identities, meaning equality checks will always return `false`:\n\n```svelte\n<script>\n\tlet value = { foo: 'bar' };\n\tlet proxy = $state(value);\n\n\tvalue === proxy; // always false\n</script>\n```\n\nTo resolve this, ensure you're comparing values where both values were created with `$state(...)`, or neither were. Note that `$state.raw(...)` will _not_ create a state proxy.\n\n## state_proxy_unmount\n\n> Tried to unmount a state proxy, rather than a component\n\n`unmount` was called with a state proxy:\n\n```js\nimport { mount, unmount } from 'svelte';\nimport Component from './Component.svelte';\nlet target = document.body;\n// ---cut---\nlet component = $state(mount(Component, { target }));\n\n// later...\nunmount(component);\n```\n\nAvoid using `$state` here. If `component` _does_ need to be reactive for some reason, use `$state.raw` instead.\n\n## svelte_boundary_reset_noop\n\n> A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n\nWhen an error occurs while rendering the contents of a [`<svelte:boundary>`](https://svelte.dev/docs/svelte/svelte-boundary), the `onerror` handler is called with the error plus a `reset` function that attempts to re-render the contents.\n\nThis `reset` function should only be called once. After that, it has no effect — in a case like this, where a reference to `reset` is stored outside the boundary, clicking the button while `<Contents />` is rendered will _not_ cause the contents to be rendered again.\n\n```svelte\n<script>\n\tlet reset;\n</script>\n\n<button onclick={reset}>reset</button>\n\n<svelte:boundary onerror={(e, r) => (reset = r)}>\n\t<!-- contents -->\n\n\t{#snippet failed(e)}\n\t\t<p>oops! {e.message}</p>\n\t{/snippet}\n</svelte:boundary>\n```\n\n## transition_slide_display\n\n> The `slide` transition does not work correctly for elements with `display: %value%`\n\nThe [slide](/docs/svelte/svelte-transition#slide) transition works by animating the `height` of the element, which requires a `display` style like `block`, `flex` or `grid`. It does not work for:\n\n- `display: inline` (which is the default for elements like `<span>`), and its variants like `inline-block`, `inline-flex` and `inline-grid`\n- `display: table` and `table-[name]`, which are the defaults for elements like `<table>` and `<tr>`\n- `display: contents`\n"
  },
  {
    "path": "packages/svelte/messages/compile-errors/options.md",
    "content": "## options_invalid_value\n\n> Invalid compiler option: %details%\n\n## options_removed\n\n> Invalid compiler option: %details%\n\n## options_unrecognised\n\n> Unrecognised compiler option %keypath%\n"
  },
  {
    "path": "packages/svelte/messages/compile-errors/script.md",
    "content": "## bindable_invalid_location\n\n> `$bindable()` can only be used inside a `$props()` declaration\n\n## constant_assignment\n\n> Cannot assign to %thing%\n\n## constant_binding\n\n> Cannot bind to %thing%\n\n## declaration_duplicate\n\n> `%name%` has already been declared\n\n## declaration_duplicate_module_import\n\n> Cannot declare a variable with the same name as an import from `<script module>`\n\n## derived_invalid_export\n\n> Cannot export derived state from a module. To expose the current derived value, export a function returning its value\n\n## dollar_binding_invalid\n\n> The $ name is reserved, and cannot be used for variables and imports\n\n## dollar_prefix_invalid\n\n> The $ prefix is reserved, and cannot be used for variables and imports\n\n## duplicate_class_field\n\n> `%name%` has already been declared\n\n## each_item_invalid_assignment\n\n> Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. `array[i] = value` instead of `entry = value`, or `bind:value={array[i]}` instead of `bind:value={entry}`)\n\nIn legacy mode, it was possible to reassign or bind to the each block argument itself:\n\n```svelte\n<script>\n\tlet array = [1, 2, 3];\n</script>\n\n{#each array as entry}\n\t<!-- reassignment -->\n\t<button on:click={() => entry = 4}>change</button>\n\n\t<!-- binding -->\n\t<input bind:value={entry}>\n{/each}\n```\n\nThis turned out to be buggy and unpredictable, particularly when working with derived values (such as `array.map(...)`), and as such is forbidden in runes mode. You can achieve the same outcome by using the index instead:\n\n```svelte\n<script>\n\tlet array = $state([1, 2, 3]);\n</script>\n\n{#each array as entry, i}\n\t<!-- reassignment -->\n\t<button onclick={() => array[i] = 4}>change</button>\n\n\t<!-- binding -->\n\t<input bind:value={array[i]}>\n{/each}\n```\n\n## effect_invalid_placement\n\n> `$effect()` can only be used as an expression statement\n\n## experimental_async\n\n> Cannot use `await` in deriveds and template expressions, or at the top level of a component, unless the `experimental.async` compiler option is `true`\n\n## export_undefined\n\n> `%name%` is not defined\n\n## global_reference_invalid\n\n> `%name%` is an illegal variable name. To reference a global variable called `%name%`, use `globalThis.%name%`\n\n## host_invalid_placement\n\n> `$host()` can only be used inside custom element component instances\n\n## import_svelte_internal_forbidden\n\n> Imports of `svelte/internal/*` are forbidden. It contains private runtime code which is subject to change without notice. If you're importing from `svelte/internal/*` to work around a limitation of Svelte, please open an issue at https://github.com/sveltejs/svelte and explain your use case\n\n## inspect_trace_generator\n\n> `$inspect.trace(...)` cannot be used inside a generator function\n\n## inspect_trace_invalid_placement\n\n> `$inspect.trace(...)` must be the first statement of a function body\n\n## invalid_arguments_usage\n\n> The arguments keyword cannot be used within the template or at the top level of a component\n\n## legacy_await_invalid\n\n> Cannot use `await` in deriveds and template expressions, or at the top level of a component, unless in runes mode\n\n## legacy_export_invalid\n\n> Cannot use `export let` in runes mode — use `$props()` instead\n\n## legacy_props_invalid\n\n> Cannot use `$$props` in runes mode\n\n## legacy_reactive_statement_invalid\n\n> `$:` is not allowed in runes mode, use `$derived` or `$effect` instead\n\n## legacy_rest_props_invalid\n\n> Cannot use `$$restProps` in runes mode\n\n## module_illegal_default_export\n\n> A component cannot have a default export\n\n## props_duplicate\n\n> Cannot use `%rune%()` more than once\n\n## props_id_invalid_placement\n\n> `$props.id()` can only be used at the top level of components as a variable declaration initializer\n\n## props_illegal_name\n\n> Declaring or accessing a prop starting with `$$` is illegal (they are reserved for Svelte internals)\n\n## props_invalid_identifier\n\n> `$props()` can only be used with an object destructuring pattern\n\n## props_invalid_pattern\n\n> `$props()` assignment must not contain nested properties or computed keys\n\n## props_invalid_placement\n\n> `$props()` can only be used at the top level of components as a variable declaration initializer\n\n## reactive_declaration_cycle\n\n> Cyclical dependency detected: %cycle%\n\n## rune_invalid_arguments\n\n> `%rune%` cannot be called with arguments\n\n## rune_invalid_arguments_length\n\n> `%rune%` must be called with %args%\n\n## rune_invalid_computed_property\n\n> Cannot access a computed property of a rune\n\n## rune_invalid_name\n\n> `%name%` is not a valid rune\n\n## rune_invalid_spread\n\n> `%rune%` cannot be called with a spread argument\n\n## rune_invalid_usage\n\n> Cannot use `%rune%` rune in non-runes mode\n\n## rune_missing_parentheses\n\n> Cannot use rune without parentheses\n\n## rune_removed\n\n> The `%name%` rune has been removed\n\n## rune_renamed\n\n> `%name%` is now `%replacement%`\n\n## runes_mode_invalid_import\n\n> %name% cannot be used in runes mode\n\n## snippet_invalid_export\n\n> An exported snippet can only reference things declared in a `<script module>`, or other exportable snippets\n\nIt's possible to export a snippet from a `<script module>` block, but only if it doesn't reference anything defined inside a non-module-level `<script>`. For example you can't do this...\n\n```svelte\n<script module>\n\texport { greeting };\n</script>\n\n<script>\n\tlet message = 'hello';\n</script>\n\n{#snippet greeting(name)}\n\t<p>{message} {name}!</p>\n{/snippet}\n```\n\n...because `greeting` references `message`, which is defined in the second `<script>`.\n\n## snippet_parameter_assignment\n\n> Cannot reassign or bind to snippet parameter\n\n## state_field_duplicate\n\n> `%name%` has already been declared on this class\n\nAn assignment to a class field that uses a `$state` or `$derived` rune is considered a _state field declaration_. The declaration can happen in the class body...\n\n```js\nclass Counter {\n\tcount = $state(0);\n}\n```\n\n...or inside the constructor...\n\n```js\nclass Counter {\n\tconstructor() {\n\t\tthis.count = $state(0);\n\t}\n}\n```\n\n...but it can only happen once.\n\n## state_field_invalid_assignment\n\n> Cannot assign to a state field before its declaration\n\n## state_invalid_export\n\n> Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\n\n## state_invalid_placement\n\n> `%rune%(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\n\n## store_invalid_scoped_subscription\n\n> Cannot subscribe to stores that are not declared at the top level of the component\n\n## store_invalid_subscription\n\n> Cannot reference store value inside `<script module>`\n\n## store_invalid_subscription_module\n\n> Cannot reference store value outside a `.svelte` file\n\nUsing a `$` prefix to refer to the value of a store is only possible inside `.svelte` files, where Svelte can automatically create subscriptions when a component is mounted and unsubscribe when the component is unmounted. Consider migrating to runes instead.\n\n## typescript_invalid_feature\n\n> TypeScript language features like %feature% are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\n"
  },
  {
    "path": "packages/svelte/messages/compile-errors/style.md",
    "content": "## css_empty_declaration\n\n> Declaration cannot be empty\n\n## css_expected_identifier\n\n> Expected a valid CSS identifier\n\n## css_global_block_invalid_combinator\n\n> A `:global` selector cannot follow a `%name%` combinator\n\n## css_global_block_invalid_declaration\n\n> A top-level `:global {...}` block can only contain rules, not declarations\n\n## css_global_block_invalid_list\n\n> A `:global` selector cannot be part of a selector list with entries that don't contain `:global`\n\nThe following CSS is invalid:\n\n```css\n:global, x {\n    y {\n        color: red;\n    }\n}\n```\n\nThis is mixing a `:global` block, which means \"everything in here is unscoped\", with a scoped selector (`x` in this case). As a result it's not possible to transform the inner selector (`y` in this case) into something that satisfies both requirements. You therefore have to split this up into two selectors:\n\n```css\n:global {\n    y {\n        color: red;\n    }\n}\n\nx y {\n    color: red;\n}\n```\n\n## css_global_block_invalid_modifier\n\n> A `:global` selector cannot modify an existing selector\n\n## css_global_block_invalid_modifier_start\n\n> A `:global` selector can only be modified if it is a descendant of other selectors\n\n## css_global_block_invalid_placement\n\n> A `:global` selector cannot be inside a pseudoclass\n\n## css_global_invalid_placement\n\n> `:global(...)` can be at the start or end of a selector sequence, but not in the middle\n\n## css_global_invalid_selector\n\n> `:global(...)` must contain exactly one selector\n\n## css_global_invalid_selector_list\n\n> `:global(...)` must not contain type or universal selectors when used in a compound selector\n\n## css_nesting_selector_invalid_placement\n\n> Nesting selectors can only be used inside a rule or as the first selector inside a lone `:global(...)`\n\n## css_selector_invalid\n\n> Invalid selector\n\n## css_type_selector_invalid_placement\n\n> `:global(...)` must not be followed by a type selector\n"
  },
  {
    "path": "packages/svelte/messages/compile-errors/template.md",
    "content": "## animation_duplicate\n\n> An element can only have one 'animate' directive\n\n## animation_invalid_placement\n\n> An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block\n\n## animation_missing_key\n\n> An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block. Did you forget to add a key to your each block?\n\n## attribute_contenteditable_dynamic\n\n> 'contenteditable' attribute cannot be dynamic if element uses two-way binding\n\n## attribute_contenteditable_missing\n\n> 'contenteditable' attribute is required for textContent, innerHTML and innerText two-way bindings\n\n## attribute_duplicate\n\n> Attributes need to be unique\n\n## attribute_empty_shorthand\n\n> Attribute shorthand cannot be empty\n\n## attribute_invalid_event_handler\n\n> Event attribute must be a JavaScript expression, not a string\n\n## attribute_invalid_multiple\n\n> 'multiple' attribute must be static if select uses two-way binding\n\n## attribute_invalid_name\n\n> '%name%' is not a valid attribute name\n\n## attribute_invalid_sequence_expression\n\n> Comma-separated expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses\n\nAn attribute value cannot be a comma-separated sequence of expressions — in other words this is disallowed:\n\n```svelte\n<div class={size, color}>...</div>\n```\n\nInstead, make sure that the attribute value contains a single expression. In the example above it's likely that this was intended (see the [class documentation](class) for more details):\n\n```svelte\n<div class={[size, color]}>...</div>\n```\n\nIf you _do_ need to use the comma operator for some reason, wrap the sequence in parentheses:\n\n```svelte\n<div class={(size, color)}>...</div>\n```\n\nNote that this will evaluate to `color`, ignoring `size`.\n\n## attribute_invalid_type\n\n> 'type' attribute must be a static text value if input uses two-way binding\n\n## attribute_unquoted_sequence\n\n> Attribute values containing `{...}` must be enclosed in quote marks, unless the value only contains the expression\n\n## bind_group_invalid_expression\n\n> `bind:group` can only bind to an Identifier or MemberExpression\n\n## bind_group_invalid_snippet_parameter\n\n> Cannot `bind:group` to a snippet parameter\n\n## bind_invalid_expression\n\n> Can only bind to an Identifier or MemberExpression or a `{get, set}` pair\n\n## bind_invalid_name\n\n> `bind:%name%` is not a valid binding\n\n> `bind:%name%` is not a valid binding. %explanation%\n\n## bind_invalid_parens\n\n> `bind:%name%={get, set}` must not have surrounding parentheses\n\n## bind_invalid_target\n\n> `bind:%name%` can only be used with %elements%\n\n## bind_invalid_value\n\n> Can only bind to state or props\n\n## block_duplicate_clause\n\n> %name% cannot appear more than once within a block\n\n## block_invalid_continuation_placement\n\n> {:...} block is invalid at this position (did you forget to close the preceding element or block?)\n\n## block_invalid_elseif\n\n> 'elseif' should be 'else if'\n\n## block_invalid_placement\n\n> {#%name% ...} block cannot be %location%\n\n## block_unclosed\n\n> Block was left open\n\n## block_unexpected_character\n\n> Expected a `%character%` character immediately following the opening bracket\n\n## block_unexpected_close\n\n> Unexpected block closing tag\n\n## component_invalid_directive\n\n> This type of directive is not valid on components\n\n## const_tag_cycle\n\n> Cyclical dependency detected: %cycle%\n\n## const_tag_invalid_expression\n\n> {@const ...} must consist of a single variable declaration\n\n## const_tag_invalid_placement\n\n> `{@const}` must be the immediate child of `{#snippet}`, `{#if}`, `{:else if}`, `{:else}`, `{#each}`, `{:then}`, `{:catch}`, `<svelte:fragment>`, `<svelte:boundary>` or `<Component>`\n\n## const_tag_invalid_reference\n\n> The `{@const %name% = ...}` declaration is not available in this snippet\n\nThe following is an error:\n\n```svelte\n<svelte:boundary>\n    {@const foo = 'bar'}\n\n    {#snippet failed()}\n        {foo}\n    {/snippet}\n</svelte:boundary>\n```\n\nHere, `foo` is not available inside `failed`. The top level code inside `<svelte:boundary>` becomes part of the implicit `children` snippet, in other words the above code is equivalent to this:\n\n```svelte\n<svelte:boundary>\n    {#snippet children()}\n        {@const foo = 'bar'}\n    {/snippet}\n\n    {#snippet failed()}\n        {foo}\n    {/snippet}\n</svelte:boundary>\n```\n\nThe same applies to components:\n\n```svelte\n<Component>\n    {@const foo = 'bar'}\n\n    {#snippet someProp()}\n        <!-- error -->\n        {foo}\n    {/snippet}\n</Component>\n```\n\n## debug_tag_invalid_arguments\n\n> {@debug ...} arguments must be identifiers, not arbitrary expressions\n\n## directive_invalid_value\n\n> Directive value must be a JavaScript expression enclosed in curly braces\n\n## directive_missing_name\n\n> `%type%` name cannot be empty\n\n## each_key_without_as\n\n> An `{#each ...}` block without an `as` clause cannot have a key\n\n## element_invalid_closing_tag\n\n> `</%name%>` attempted to close an element that was not open\n\n## element_invalid_closing_tag_autoclosed\n\n> `</%name%>` attempted to close element that was already automatically closed by `<%reason%>` (cannot nest `<%reason%>` inside `<%name%>`)\n\n## element_unclosed\n\n> `<%name%>` was left open\n\n## event_handler_invalid_component_modifier\n\n> Event modifiers other than 'once' can only be used on DOM elements\n\n## event_handler_invalid_modifier\n\n> Valid event modifiers are %list%\n\n## event_handler_invalid_modifier_combination\n\n> The '%modifier1%' and '%modifier2%' modifiers cannot be used together\n\n## expected_attribute_value\n\n> Expected attribute value\n\n## expected_block_type\n\n> Expected 'if', 'each', 'await', 'key' or 'snippet'\n\n## expected_identifier\n\n> Expected an identifier\n\n## expected_pattern\n\n> Expected identifier or destructure pattern\n\n## expected_tag\n\n> Expected 'html', 'render', 'attach', 'const', or 'debug'\n\n## expected_token\n\n> Expected token %token%\n\n## expected_whitespace\n\n> Expected whitespace\n\n## illegal_await_expression\n\n> `use:`, `transition:` and `animate:` directives, attachments and bindings do not support await expressions\n\n## illegal_element_attribute\n\n> `<%name%>` does not support non-event attributes or spread attributes\n\n## js_parse_error\n\n> %message%\n\n## let_directive_invalid_placement\n\n> `let:` directive at invalid position\n\n## mixed_event_handler_syntaxes\n\n> Mixing old (on:%name%) and new syntaxes for event handling is not allowed. Use only the on%name% syntax\n\n## node_invalid_placement\n\n> %message%. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\n\nHTML restricts where certain elements can appear. In case of a violation the browser will 'repair' the HTML in a way that breaks Svelte's assumptions about the structure of your components. Some examples:\n\n- `<p>hello <div>world</div></p>` will result in `<p>hello </p><div>world</div><p></p>` (the `<div>` autoclosed the `<p>` because `<p>` cannot contain block-level elements)\n- `<option><div>option a</div></option>` will result in `<option>option a</option>` (the `<div>` is removed)\n- `<table><tr><td>cell</td></tr></table>` will result in `<table><tbody><tr><td>cell</td></tr></tbody></table>` (a `<tbody>` is auto-inserted)\n\n## render_tag_invalid_call_expression\n\n> Calling a snippet function using apply, bind or call is not allowed\n\n## render_tag_invalid_expression\n\n> `{@render ...}` tags can only contain call expressions\n\n## render_tag_invalid_spread_argument\n\n> cannot use spread arguments in `{@render ...}` tags\n\n## script_duplicate\n\n> A component can have a single top-level `<script>` element and/or a single top-level `<script module>` element\n\n## script_invalid_attribute_value\n\n> If the `%name%` attribute is supplied, it must be a boolean attribute\n\n## script_invalid_context\n\n> If the context attribute is supplied, its value must be \"module\"\n\n## script_reserved_attribute\n\n> The `%name%` attribute is reserved and cannot be used\n\n## slot_attribute_duplicate\n\n> Duplicate slot name '%name%' in <%component%>\n\n## slot_attribute_invalid\n\n> slot attribute must be a static value\n\n## slot_attribute_invalid_placement\n\n> Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\n\n## slot_default_duplicate\n\n> Found default slot content alongside an explicit slot=\"default\"\n\n## slot_element_invalid_attribute\n\n> `<slot>` can only receive attributes and (optionally) let directives\n\n## slot_element_invalid_name\n\n> slot attribute must be a static value\n\n## slot_element_invalid_name_default\n\n> `default` is a reserved word — it cannot be used as a slot name\n\n## slot_snippet_conflict\n\n> Cannot use `<slot>` syntax and `{@render ...}` tags in the same component. Migrate towards `{@render ...}` tags completely\n\n## snippet_conflict\n\n> Cannot use explicit children snippet at the same time as implicit children content. Remove either the non-whitespace content or the children snippet block\n\n## snippet_invalid_rest_parameter\n\n> Snippets do not support rest parameters; use an array instead\n\n## snippet_shadowing_prop\n\n> This snippet is shadowing the prop `%prop%` with the same name\n\n## style_directive_invalid_modifier\n\n> `style:` directive can only use the `important` modifier\n\n## style_duplicate\n\n> A component can have a single top-level `<style>` element\n\n## svelte_body_illegal_attribute\n\n> `<svelte:body>` does not support non-event attributes or spread attributes\n\n## svelte_boundary_invalid_attribute\n\n> Valid attributes on `<svelte:boundary>` are `onerror` and `failed`\n\n## svelte_boundary_invalid_attribute_value\n\n> Attribute value must be a non-string expression\n\n## svelte_component_invalid_this\n\n> Invalid component definition — must be an `{expression}`\n\n## svelte_component_missing_this\n\n> `<svelte:component>` must have a 'this' attribute\n\n## svelte_element_missing_this\n\n> `<svelte:element>` must have a 'this' attribute with a value\n\n## svelte_fragment_invalid_attribute\n\n> `<svelte:fragment>` can only have a slot attribute and (optionally) a let: directive\n\n## svelte_fragment_invalid_placement\n\n> `<svelte:fragment>` must be the direct child of a component\n\n## svelte_head_illegal_attribute\n\n> `<svelte:head>` cannot have attributes nor directives\n\n## svelte_meta_duplicate\n\n> A component can only have one `<%name%>` element\n\n## svelte_meta_invalid_content\n\n> <%name%> cannot have children\n\n## svelte_meta_invalid_placement\n\n> `<%name%>` tags cannot be inside elements or blocks\n\n## svelte_meta_invalid_tag\n\n> Valid `<svelte:...>` tag names are %list%\n\n## svelte_options_deprecated_tag\n\n> \"tag\" option is deprecated — use \"customElement\" instead\n\n## svelte_options_invalid_attribute\n\n> `<svelte:options>` can only receive static attributes\n\n## svelte_options_invalid_attribute_value\n\n> Value must be %list%, if specified\n\n## svelte_options_invalid_customelement\n\n> \"customElement\" must be a string literal defining a valid custom element name or an object of the form { tag?: string; shadow?: \"open\" | \"none\" | `ShadowRootInit`; props?: { [key: string]: { attribute?: string; reflect?: boolean; type: .. } } }\n\n## svelte_options_invalid_customelement_props\n\n> \"props\" must be a statically analyzable object literal of the form \"{ [key: string]: { attribute?: string; reflect?: boolean; type?: \"String\" | \"Boolean\" | \"Number\" | \"Array\" | \"Object\" }\"\n\n## svelte_options_invalid_customelement_shadow\n\n> \"shadow\" must be either \"open\", \"none\" or `ShadowRootInit` object.\n\nSee https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow#options for more information on valid shadow root constructor options\n\n## svelte_options_invalid_tagname\n\n> Tag name must be lowercase and hyphenated\n\nSee https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name for more information on valid tag names\n\n## svelte_options_reserved_tagname\n\n> Tag name is reserved\n\nSee https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name for more information on valid tag names\n\n## svelte_options_unknown_attribute\n\n> `<svelte:options>` unknown attribute '%name%'\n\n## svelte_self_invalid_placement\n\n> `<svelte:self>` components can only exist inside `{#if}` blocks, `{#each}` blocks, `{#snippet}` blocks or slots passed to components\n\n## tag_invalid_name\n\n> Expected a valid element or component name. Components must have a valid variable name or dot notation expression\n\n## tag_invalid_placement\n\n> {@%name% ...} tag cannot be %location%\n\n## textarea_invalid_content\n\n> A `<textarea>` can have either a value attribute or (equivalently) child content, but not both\n\n## title_illegal_attribute\n\n> `<title>` cannot have attributes nor directives\n\n## title_invalid_content\n\n> `<title>` can only contain text and {tags}\n\n## transition_conflict\n\n> Cannot use `%type%:` alongside existing `%existing%:` directive\n\n## transition_duplicate\n\n> Cannot use multiple `%type%:` directives on a single element\n\n## unexpected_eof\n\n> Unexpected end of input\n\n## unexpected_reserved_word\n\n> '%word%' is a reserved word in JavaScript and cannot be used here\n\n## unterminated_string_constant\n\n> Unterminated string constant\n\n## void_element_invalid_content\n\n> Void elements cannot have children or closing tags\n"
  },
  {
    "path": "packages/svelte/messages/compile-warnings/a11y.md",
    "content": "## a11y_accesskey\n\n> Avoid using accesskey\n\nEnforce no `accesskey` on element. Access keys are HTML attributes that allow web developers to assign keyboard shortcuts to elements. Inconsistencies between keyboard shortcuts and keyboard commands used by screen reader and keyboard-only users create accessibility complications. To avoid complications, access keys should not be used.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: Avoid using accesskey -->\n<div accesskey=\"z\"></div>\n```\n\n## a11y_aria_activedescendant_has_tabindex\n\n> An element with an aria-activedescendant attribute should have a tabindex value\n\nAn element with `aria-activedescendant` must be tabbable, so it must either have an inherent `tabindex` or declare `tabindex` as an attribute.\n\n```svelte\n<!-- A11y: Elements with attribute aria-activedescendant should have tabindex value -->\n<div aria-activedescendant=\"some-id\"></div>\n```\n\n## a11y_aria_attributes\n\n> `<%name%>` should not have aria-* attributes\n\nCertain reserved DOM elements do not support ARIA roles, states and properties. This is often because they are not visible, for example `meta`, `html`, `script`, `style`. This rule enforces that these DOM elements do not contain the `aria-*` props.\n\n```svelte\n<!-- A11y: <meta> should not have aria-* attributes -->\n<meta aria-hidden=\"false\" />\n```\n\n## a11y_autocomplete_valid\n\n> '%value%' is an invalid value for 'autocomplete' on `<input type=\"%type%\">`\n\n## a11y_autofocus\n\n> Avoid using autofocus\n\nEnforce that `autofocus` is not used on elements. Autofocusing elements can cause usability issues for sighted and non-sighted users alike.\n\n```svelte\n<!-- A11y: Avoid using autofocus -->\n<input autofocus />\n```\n\n## a11y_click_events_have_key_events\n\n> Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\"button\">` or `<a>` might be more appropriate\n\nEnforce that visible, non-interactive elements with an `onclick` event are accompanied by a keyboard event handler.\n\nUsers should first consider whether an interactive element might be more appropriate such as a `<button type=\"button\">` element for actions or `<a>` element for navigations. These elements are more semantically meaningful and will have built-in key handling. E.g. `Space` and `Enter` will trigger a `<button>` and `Enter` will trigger an `<a>` element.\n\nIf a non-interactive element is required then `onclick` should be accompanied by an `onkeyup` or `onkeydown` handler that enables the user to perform equivalent actions via the keyboard. In order for the user to be able to trigger a key press, the element will also need to be focusable by adding a [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex). While an `onkeypress` handler will also silence this warning, it should be noted that the `keypress` event is deprecated.\n\n```svelte\n<!-- A11y: visible, non-interactive elements with an onclick event must be accompanied by a keyboard event handler. -->\n<div onclick={() => {}}></div>\n```\n\nCoding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users.\n\n## a11y_consider_explicit_label\n\n> Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\n\n## a11y_distracting_elements\n\n> Avoid `<%name%>` elements\n\nEnforces that no distracting elements are used. Elements that can be visually distracting can cause accessibility issues with visually impaired users. Such elements are most likely deprecated, and should be avoided.\n\nThe following elements are visually distracting: `<marquee>` and `<blink>`.\n\n```svelte\n<!-- A11y: Avoid <marquee> elements -->\n<marquee></marquee>\n```\n\n## a11y_figcaption_index\n\n> `<figcaption>` must be first or last child of `<figure>`\n\n## a11y_figcaption_parent\n\n> `<figcaption>` must be an immediate child of `<figure>`\n\nEnforce that certain DOM elements have the correct structure.\n\n```svelte\n<!-- A11y: <figcaption> must be an immediate child of <figure> -->\n<div>\n\t<figcaption>Image caption</figcaption>\n</div>\n```\n\n## a11y_hidden\n\n> `<%name%>` element should not be hidden\n\nCertain DOM elements are useful for screen reader navigation and should not be hidden.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: <h2> element should not be hidden -->\n<h2 aria-hidden=\"true\">invisible header</h2>\n```\n\n## a11y_img_redundant_alt\n\n> Screenreaders already announce `<img>` elements as an image\n\nEnforce img alt attribute does not contain the word image, picture, or photo. Screen readers already announce `img` elements as an image. There is no need to use words such as _image_, _photo_, and/or _picture_.\n\n```svelte\n<img src=\"foo\" alt=\"Foo eating a sandwich.\" />\n\n<!-- aria-hidden, won't be announced by screen reader -->\n<img src=\"bar\" aria-hidden=\"true\" alt=\"Picture of me taking a photo of an image\" />\n\n<!-- A11y: Screen readers already announce <img> elements as an image. -->\n<img src=\"foo\" alt=\"Photo of foo being weird.\" />\n\n<!-- A11y: Screen readers already announce <img> elements as an image. -->\n<img src=\"bar\" alt=\"Image of me at a bar!\" />\n\n<!-- A11y: Screen readers already announce <img> elements as an image. -->\n<img src=\"foo\" alt=\"Picture of baz fixing a bug.\" />\n```\n\n## a11y_incorrect_aria_attribute_type\n\n> The value of '%attribute%' must be a %type%\n\nEnforce that only the correct type of value is used for aria attributes. For example, `aria-hidden`\nshould only receive a boolean.\n\n```svelte\n<!-- A11y: The value of 'aria-hidden' must be exactly one of true or false -->\n<div aria-hidden=\"yes\"></div>\n```\n\n## a11y_incorrect_aria_attribute_type_boolean\n\n> The value of '%attribute%' must be either 'true' or 'false'. It cannot be empty\n\n## a11y_incorrect_aria_attribute_type_id\n\n> The value of '%attribute%' must be a string that represents a DOM element ID\n\n## a11y_incorrect_aria_attribute_type_idlist\n\n> The value of '%attribute%' must be a space-separated list of strings that represent DOM element IDs\n\n## a11y_incorrect_aria_attribute_type_integer\n\n> The value of '%attribute%' must be an integer\n\n## a11y_incorrect_aria_attribute_type_token\n\n> The value of '%attribute%' must be exactly one of %values%\n\n## a11y_incorrect_aria_attribute_type_tokenlist\n\n> The value of '%attribute%' must be a space-separated list of one or more of %values%\n\n## a11y_incorrect_aria_attribute_type_tristate\n\n> The value of '%attribute%' must be exactly one of true, false, or mixed\n\n## a11y_interactive_supports_focus\n\n> Elements with the '%role%' interactive role must have a tabindex value\n\nEnforce that elements with an interactive role and interactive handlers (mouse or key press) must be focusable or tabbable.\n\n```svelte\n<!-- A11y: Elements with the 'button' interactive role must have a tabindex value. -->\n<div role=\"button\" onkeypress={() => {}} />\n```\n\n## a11y_invalid_attribute\n\n> '%href_value%' is not a valid %href_attribute% attribute\n\nEnforce that attributes important for accessibility have a valid value. For example, `href` should not be empty, `'#'`, or `javascript:`.\n\n```svelte\n<!-- A11y: '' is not a valid href attribute -->\n<a href=\"\">invalid</a>\n```\n\n## a11y_label_has_associated_control\n\n> A form label must be associated with a control\n\nEnforce that a label tag has a text label and an associated control.\n\nThere are two supported ways to associate a label with a control:\n\n- Wrapping a control in a label tag.\n- Adding `for` to a label and assigning it the ID of an input on the page.\n\n```svelte\n<label for=\"id\">B</label>\n\n<label>C <input type=\"text\" /></label>\n\n<!-- A11y: A form label must be associated with a control. -->\n<label>A</label>\n```\n\n## a11y_media_has_caption\n\n> `<video>` elements must have a `<track kind=\"captions\">`\n\nProviding captions for media is essential for deaf users to follow along. Captions should be a transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information. Not only is this important for accessibility, but can also be useful for all users in the case that the media is unavailable (similar to `alt` text on an image when an image is unable to load).\n\nThe captions should contain all important and relevant information to understand the corresponding media. This may mean that the captions are not a 1:1 mapping of the dialogue in the media content. However, captions are not necessary for video components with the `muted` attribute.\n\n```svelte\n<video><track kind=\"captions\" /></video>\n\n<audio muted></audio>\n\n<!-- A11y: Media elements must have a <track kind=\\\"captions\\\"> -->\n<video></video>\n\n<!-- A11y: Media elements must have a <track kind=\\\"captions\\\"> -->\n<video><track /></video>\n```\n\n## a11y_misplaced_role\n\n> `<%name%>` should not have role attribute\n\nCertain reserved DOM elements do not support ARIA roles, states and properties. This is often because they are not visible, for example `meta`, `html`, `script`, `style`. This rule enforces that these DOM elements do not contain the `role` props.\n\n```svelte\n<!-- A11y: <meta> should not have role attribute -->\n<meta role=\"tooltip\" />\n```\n\n## a11y_misplaced_scope\n\n> The scope attribute should only be used with `<th>` elements\n\nThe scope attribute should only be used on `<th>` elements.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: The scope attribute should only be used with <th> elements -->\n<div scope=\"row\" />\n```\n\n## a11y_missing_attribute\n\n> `<%name%>` element should have %article% %sequence% attribute\n\nEnforce that attributes required for accessibility are present on an element. This includes the following checks:\n\n- `<a>` should have an href (unless it's a [fragment-defining tag](https://github.com/sveltejs/svelte/issues/4697))\n- `<area>` should have alt, aria-label, or aria-labelledby\n- `<html>` should have lang\n- `<iframe>` should have title\n- `<img>` should have alt\n- `<object>` should have title, aria-label, or aria-labelledby\n- `<input type=\"image\">` should have alt, aria-label, or aria-labelledby\n\n```svelte\n<!-- A11y: <input type=\\\"image\\\"> element should have an alt, aria-label or aria-labelledby attribute -->\n<input type=\"image\" />\n\n<!-- A11y: <html> element should have a lang attribute -->\n<html></html>\n\n<!-- A11y: <a> element should have an href attribute -->\n<a>text</a>\n```\n\n## a11y_missing_content\n\n> `<%name%>` element should contain text\n\nEnforce that heading elements (`h1`, `h2`, etc.) and anchors have content and that the content is accessible to screen readers\n\n```svelte\n<!-- A11y: <a> element should have child content -->\n<a href=\"/foo\"></a>\n\n<!-- A11y: <h1> element should have child content -->\n<h1></h1>\n```\n\n## a11y_mouse_events_have_key_events\n\n> '%event%' event must be accompanied by '%accompanied_by%' event\n\nEnforce that `onmouseover` and `onmouseout` are accompanied by `onfocus` and `onblur`, respectively. This helps to ensure that any functionality triggered by these mouse events is also accessible to keyboard users.\n\n```svelte\n<!-- A11y: onmouseover must be accompanied by onfocus -->\n<div onmouseover={handleMouseover} />\n\n<!-- A11y: onmouseout must be accompanied by onblur -->\n<div onmouseout={handleMouseout} />\n```\n\n## a11y_no_abstract_role\n\n> Abstract role '%role%' is forbidden\n\n## a11y_no_interactive_element_to_noninteractive_role\n\n> `<%element%>` cannot have role '%role%'\n\n[WAI-ARIA](https://www.w3.org/TR/wai-aria-1.1/#usage_intro) roles should not be used to convert an interactive element to a non-interactive element. Non-interactive ARIA roles include `article`, `banner`, `complementary`, `img`, `listitem`, `main`, `region` and `tooltip`.\n\n```svelte\n<!-- A11y: <textarea> cannot have role 'listitem' -->\n<textarea role=\"listitem\"></textarea>\n```\n\n## a11y_no_noninteractive_element_interactions\n\n> Non-interactive element `<%element%>` should not be assigned mouse or keyboard event listeners\n\nA non-interactive element does not support event handlers (mouse and key handlers). Non-interactive elements include `<main>`, `<area>`, `<h1>` (,`<h2>`, etc), `<p>`, `<img>`, `<li>`, `<ul>` and `<ol>`. Non-interactive [WAI-ARIA roles](https://www.w3.org/TR/wai-aria-1.1/#usage_intro) include `article`, `banner`, `complementary`, `img`, `listitem`, `main`, `region` and `tooltip`.\n\n```sv\n<!-- `A11y: Non-interactive element <li> should not be assigned mouse or keyboard event listeners.` -->\n<li onclick={() => {}}></li>\n\n<!-- `A11y: Non-interactive element <div> should not be assigned mouse or keyboard event listeners.` -->\n<div role=\"listitem\" onclick={() => {}}></div>\n```\n\n## a11y_no_noninteractive_element_to_interactive_role\n\n> Non-interactive element `<%element%>` cannot have interactive role '%role%'\n\n[WAI-ARIA](https://www.w3.org/TR/wai-aria-1.1/#usage_intro) roles should not be used to convert a non-interactive element to an interactive element. Interactive ARIA roles include `button`, `link`, `checkbox`, `menuitem`, `menuitemcheckbox`, `menuitemradio`, `option`, `radio`, `searchbox`, `switch` and `textbox`.\n\n```svelte\n<!-- A11y: Non-interactive element <h3> cannot have interactive role 'searchbox' -->\n<h3 role=\"searchbox\">Button</h3>\n```\n\n## a11y_no_noninteractive_tabindex\n\n> noninteractive element cannot have nonnegative tabIndex value\n\nTab key navigation should be limited to elements on the page that can be interacted with.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: noninteractive element cannot have nonnegative tabIndex value -->\n<div tabindex=\"0\"></div>\n```\n\n## a11y_no_redundant_roles\n\n> Redundant role '%role%'\n\nSome HTML elements have default ARIA roles. Giving these elements an ARIA role that is already set by the browser [has no effect](https://www.w3.org/TR/using-aria/#aria-does-nothing) and is redundant.\n\n```svelte\n<!-- A11y: Redundant role 'button' -->\n<button role=\"button\">...</button>\n\n<!-- A11y: Redundant role 'img' -->\n<img role=\"img\" src=\"foo.jpg\" />\n```\n\n## a11y_no_static_element_interactions\n\n> `<%element%>` with a %handler% handler must have an ARIA role\n\nElements like `<div>` with interactive handlers like `click` must have an ARIA role.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: <div> with click handler must have an ARIA role -->\n<div onclick={() => ''}></div>\n```\n\n## a11y_positive_tabindex\n\n> Avoid tabindex values above zero\n\nAvoid positive `tabindex` property values. This will move elements out of the expected tab order, creating a confusing experience for keyboard users.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: avoid tabindex values above zero -->\n<div tabindex=\"1\"></div>\n```\n\n## a11y_role_has_required_aria_props\n\n> Elements with the ARIA role \"%role%\" must have the following attributes defined: %props%\n\nElements with ARIA roles must have all required attributes for that role.\n\n```svelte\n<!-- A11y: A11y: Elements with the ARIA role \"checkbox\" must have the following attributes defined: \"aria-checked\" -->\n<span role=\"checkbox\" aria-labelledby=\"foo\" tabindex=\"0\"></span>\n```\n\n## a11y_role_supports_aria_props\n\n> The attribute '%attribute%' is not supported by the role '%role%'\n\nElements with explicit or implicit roles defined contain only `aria-*` properties supported by that role.\n\n```svelte\n<!-- A11y: The attribute 'aria-multiline' is not supported by the role 'link'. -->\n<div role=\"link\" aria-multiline></div>\n\n<!-- A11y: The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element <li>. -->\n<li aria-required></li>\n```\n\n## a11y_role_supports_aria_props_implicit\n\n> The attribute '%attribute%' is not supported by the role '%role%'. This role is implicit on the element `<%name%>`\n\nElements with explicit or implicit roles defined contain only `aria-*` properties supported by that role.\n\n```svelte\n<!-- A11y: The attribute 'aria-multiline' is not supported by the role 'link'. -->\n<div role=\"link\" aria-multiline></div>\n\n<!-- A11y: The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element <li>. -->\n<li aria-required></li>\n```\n\n## a11y_unknown_aria_attribute\n\n> Unknown aria attribute 'aria-%attribute%'\n\n> Unknown aria attribute 'aria-%attribute%'. Did you mean '%suggestion%'?\n\nEnforce that only known ARIA attributes are used. This is based on the [WAI-ARIA States and Properties spec](https://www.w3.org/WAI/PF/aria-1.1/states_and_properties).\n\n```svelte\n<!-- A11y: Unknown aria attribute 'aria-labeledby' (did you mean 'labelledby'?) -->\n<input type=\"image\" aria-labeledby=\"foo\" />\n```\n\n## a11y_unknown_role\n\n> Unknown role '%role%'\n\n> Unknown role '%role%'. Did you mean '%suggestion%'?\n\nElements with ARIA roles must use a valid, non-abstract ARIA role. A reference to role definitions can be found at [WAI-ARIA](https://www.w3.org/TR/wai-aria/#role_definitions) site.\n\n<!-- prettier-ignore -->\n```svelte\n<!-- A11y: Unknown role 'toooltip' (did you mean 'tooltip'?) -->\n<div role=\"toooltip\"></div>\n```\n"
  },
  {
    "path": "packages/svelte/messages/compile-warnings/misc.md",
    "content": "## bidirectional_control_characters\n\n> A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\n\nBidirectional control characters can alter the direction in which text appears to be in. For example, via control characters, you can make `defabc` look like `abcdef`. As a result, if you were to unknowingly copy and paste some code that has these control characters, they may alter the behavior of your code in ways you did not intend. See [trojansource.codes](https://trojansource.codes/) for more information.\n\n## legacy_code\n\n> `%code%` is no longer valid — please use `%suggestion%` instead\n\n## unknown_code\n\n> `%code%` is not a recognised code\n\n> `%code%` is not a recognised code (did you mean `%suggestion%`?)\n"
  },
  {
    "path": "packages/svelte/messages/compile-warnings/options.md",
    "content": "## options_deprecated_accessors\n\n> The `accessors` option has been deprecated. It will have no effect in runes mode\n\n## options_deprecated_immutable\n\n> The `immutable` option has been deprecated. It will have no effect in runes mode\n\n## options_missing_custom_element\n\n> The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\n\n## options_removed_enable_sourcemap\n\n> The `enableSourcemap` option has been removed. Source maps are always generated now, and tooling can choose to ignore them\n\n## options_removed_hydratable\n\n> The `hydratable` option has been removed. Svelte components are always hydratable now\n\n## options_removed_loop_guard_timeout\n\n> The `loopGuardTimeout` option has been removed\n\n## options_renamed_ssr_dom\n\n> `generate: \"dom\"` and `generate: \"ssr\"` options have been renamed to \"client\" and \"server\" respectively\n"
  },
  {
    "path": "packages/svelte/messages/compile-warnings/script.md",
    "content": "## custom_element_props_identifier\n\n> Using a rest element or a non-destructured declaration with `$props()` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the `customElement.props` option.\n\n## export_let_unused\n\n> Component has unused export property '%name%'. If it is for external reference only, please consider using `export const %name%`\n\n## legacy_component_creation\n\n> Svelte 5 components are no longer classes. Instantiate them using `mount` or `hydrate` (imported from 'svelte') instead.\n\nSee the [migration guide](v5-migration-guide#Components-are-no-longer-classes) for more info.\n\n## non_reactive_update\n\n> `%name%` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates\n\nThis warning is thrown when the compiler detects the following:\n- a variable was declared without `$state` or `$state.raw`\n- the variable is reassigned\n- the variable is read in a reactive context\n\nIn this case, changing the value will not correctly trigger updates. Example:\n\n```svelte\n<script>\n\tlet reactive = $state('reactive');\n\tlet stale = 'stale';\n</script>\n\n<p>This value updates: {reactive}</p>\n<p>This value does not update: {stale}</p>\n\n<button onclick={() => {\n\tstale = 'updated';\n\treactive = 'updated';\n}}>update</button>\n```\n\nTo fix this, wrap your variable declaration with `$state`.\n\n## perf_avoid_inline_class\n\n> Avoid 'new class' — instead, declare the class at the top level scope\n\n## perf_avoid_nested_class\n\n> Avoid declaring classes below the top level scope\n\n## reactive_declaration_invalid_placement\n\n> Reactive declarations only exist at the top level of the instance script\n\n## reactive_declaration_module_script_dependency\n\n> Reassignments of module-level declarations will not cause reactive statements to update\n\n## state_referenced_locally\n\n> This reference only captures the initial value of `%name%`. Did you mean to reference it inside a %type% instead?\n\nThis warning is thrown when the compiler detects the following:\n\n- A reactive variable is declared\n- ...and later reassigned...\n- ...and referenced in the same scope\n\nThis 'breaks the link' to the original state declaration. For example, if you pass the state to a function, the function loses access to the state once it is reassigned:\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport { setContext } from 'svelte';\n\n\tlet count = $state(0);\n\n\t// warning: state_referenced_locally\n\tsetContext('count', count);\n</script>\n\n<button onclick={() => count++}>\n\tincrement\n</button>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getContext } from 'svelte';\n\n\tconst count = getContext('count');\n</script>\n\n<!-- This will never update -->\n<p>The count is {count}</p>\n```\n\nTo fix this, reference the variable such that it is lazily evaluated. For the above example, this can be achieved by wrapping `count` in a function:\n\n```svelte\n<!--- file: Parent.svelte --->\n<script>\n\timport { setContext } from 'svelte';\n\n\tlet count = $state(0);\n\tsetContext('count', +++() => count+++);\n</script>\n\n<button onclick={() => count++}>\n\tincrement\n</button>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n\timport { getContext } from 'svelte';\n\n\tconst count = getContext('count');\n</script>\n\n<!-- This will update -->\n<p>The count is {+++count()+++}</p>\n```\n\nFor more info, see [Passing state into functions]($state#Passing-state-into-functions).\n\n## store_rune_conflict\n\n> It looks like you're using the `$%name%` rune, but there is a local binding called `%name%`. Referencing a local variable with a `$` prefix will create a store subscription. Please rename `%name%` to avoid the ambiguity\n"
  },
  {
    "path": "packages/svelte/messages/compile-warnings/style.md",
    "content": "## css_unused_selector\n\n> Unused CSS selector \"%name%\"\n\nSvelte traverses both the template and the `<style>` tag to find out which of the CSS selectors are not used within the template, so it can remove them.\n\nIn some situations a selector may target an element that is not 'visible' to the compiler, for example because it is part of an `{@html ...}` tag or you're overriding styles in a child component. In these cases, use [`:global`](/docs/svelte/global-styles) to preserve the selector as-is:\n\n```svelte\n<div class=\"post\">{@html content}</div>\n\n<style>\n  .post :global {\n    p {...}\n  }\n</style>\n```\n"
  },
  {
    "path": "packages/svelte/messages/compile-warnings/template.md",
    "content": "## attribute_avoid_is\n\n> The \"is\" attribute is not supported cross-browser and should be avoided\n\n## attribute_global_event_reference\n\n> You are referencing `globalThis.%name%`. Did you forget to declare a variable with that name?\n\n## attribute_illegal_colon\n\n> Attributes should not contain ':' characters to prevent ambiguity with Svelte directives\n\n## attribute_invalid_property_name\n\n> '%wrong%' is not a valid HTML attribute. Did you mean '%right%'?\n\n## attribute_quoted\n\n> Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\n\n## bind_invalid_each_rest\n\n> The rest operator (...) will create a new object and binding '%name%' with the original object will not work\n\n## block_empty\n\n> Empty block\n\n## component_name_lowercase\n\n> `<%name%>` will be treated as an HTML element unless it begins with a capital letter\n\n## element_implicitly_closed\n\n> This element is implicitly closed by the following `%tag%`, which can cause an unexpected DOM structure. Add an explicit `%closing%` to avoid surprises.\n\nIn HTML, some elements are implicitly closed by another element. For example, you cannot nest a `<p>` inside another `<p>`:\n\n```html\n<!-- this HTML... -->\n<p><p>hello</p>\n\n<!-- results in this DOM structure -->\n<p></p>\n<p>hello</p>\n```\n\nSimilarly, a parent element's closing tag will implicitly close all child elements, even if the `</` was a typo and you meant to create a _new_ element. To avoid ambiguity, it's always a good idea to have an explicit closing tag.\n\n## element_invalid_self_closing_tag\n\n> Self-closing HTML tags for non-void elements are ambiguous — use `<%name% ...></%name%>` rather than `<%name% ... />`\n\nIn HTML, there's [no such thing as a self-closing tag](https://jakearchibald.com/2023/against-self-closing-tags-in-html/). While this _looks_ like a self-contained element with some text next to it...\n\n```html\n<div>\n\t<span class=\"icon\" /> some text!\n</div>\n```\n\n...a spec-compliant HTML parser (such as a browser) will in fact parse it like this, with the text _inside_ the icon:\n\n```html\n<div>\n\t<span class=\"icon\"> some text! </span>\n</div>\n```\n\nSome templating languages (including Svelte) will 'fix' HTML by turning `<span />` into `<span></span>`. Others adhere to the spec. Both result in ambiguity and confusion when copy-pasting code between different contexts, so Svelte prompts you to resolve the ambiguity directly by having an explicit closing tag.\n\nTo automate this, run the dedicated migration:\n\n```sh\nnpx sv migrate self-closing-tags\n```\n\nIn a future version of Svelte, self-closing tags may be upgraded from a warning to an error.\n\n## event_directive_deprecated\n\n> Using `on:%name%` to listen to the %name% event is deprecated. Use the event attribute `on%name%` instead\n\nSee [the migration guide](v5-migration-guide#Event-changes) for more info.\n\n## node_invalid_placement_ssr\n\n> %message%. When rendering this component on the server, the resulting HTML will be modified by the browser (by moving, removing, or inserting elements), likely resulting in a `hydration_mismatch` warning\n\nHTML restricts where certain elements can appear. In case of a violation the browser will 'repair' the HTML in a way that breaks Svelte's assumptions about the structure of your components. Some examples:\n\n- `<p>hello <div>world</div></p>` will result in `<p>hello </p><div>world</div><p></p>` (the `<div>` autoclosed the `<p>` because `<p>` cannot contain block-level elements)\n- `<option><div>option a</div></option>` will result in `<option>option a</option>` (the `<div>` is removed)\n- `<table><tr><td>cell</td></tr></table>` will result in `<table><tbody><tr><td>cell</td></tr></tbody></table>` (a `<tbody>` is auto-inserted)\n\nThis code will work when the component is rendered on the client (which is why this is a warning rather than an error), but if you use server rendering it will cause hydration to fail.\n\n## script_context_deprecated\n\n> `context=\"module\"` is deprecated, use the `module` attribute instead\n\n```svelte\n<script ---context=\"module\"--- +++module+++>\n\tlet foo = 'bar';\n</script>\n```\n\n## script_unknown_attribute\n\n> Unrecognized attribute — should be one of `generics`, `lang` or `module`. If this exists for a preprocessor, ensure that the preprocessor removes it\n\n## slot_element_deprecated\n\n> Using `<slot>` to render parent content is deprecated. Use `{@render ...}` tags instead\n\nSee [the migration guide](v5-migration-guide#Snippets-instead-of-slots) for more info.\n\n## svelte_component_deprecated\n\n> `<svelte:component>` is deprecated in runes mode — components are dynamic by default\n\nIn previous versions of Svelte, the component constructor was fixed when the component was rendered. In other words, if you wanted `<X>` to re-render when `X` changed, you would either have to use `<svelte:component this={X}>` or put the component inside a `{#key X}...{/key}` block.\n\nIn Svelte 5 this is no longer true — if `X` changes, `<X>` re-renders.\n\nIn some cases `<object.property>` syntax can be used as a replacement; a lowercased variable with property access is recognized as a component in Svelte 5.\n\nFor complex component resolution logic, an intermediary, capitalized variable may be necessary. E.g. in places where `@const` can be used:\n\n<!-- prettier-ignore -->\n```svelte\n{#each items as item}\n\t---<svelte:component this={item.condition ? Y : Z} />---\n\t+++{@const Component = item.condition ? Y : Z}+++\n\t+++<Component />+++\n{/each}\n```\n\nA derived value may be used in other contexts:\n\n<!-- prettier-ignore -->\n```svelte\n<script>\n\t// ...\n\tlet condition = $state(false);\n\t+++const Component = $derived(condition ? Y : Z);+++\n</script>\n\n---<svelte:component this={condition ? Y : Z} />---\n+++<Component />+++\n```\n\n## svelte_element_invalid_this\n\n> `this` should be an `{expression}`. Using a string attribute value will cause an error in future versions of Svelte\n\n## svelte_self_deprecated\n\n> `<svelte:self>` is deprecated — use self-imports (e.g. `import %name% from './%basename%'`) instead\n\nSee [the note in the docs](legacy-svelte-self) for more info.\n"
  },
  {
    "path": "packages/svelte/messages/server-errors/errors.md",
    "content": "## async_local_storage_unavailable\n\n> The node API `AsyncLocalStorage` is not available, but is required to use async server rendering.\n\nSome platforms require configuration flags to enable this API. Consult your platform's documentation.\n\n## await_invalid\n\n> Encountered asynchronous work while rendering synchronously.\n\nYou (or the framework you're using) called [`render(...)`](svelte-server#render) with a component containing an `await` expression. Either `await` the result of `render` or wrap the `await` (or the component containing it) in a [`<svelte:boundary>`](svelte-boundary) with a `pending` snippet.\n\n## dynamic_element_invalid_tag\n\n> `<svelte:element this=\"%tag%\">` is not a valid element name — the element will not be rendered\n\nThe value passed to the `this` prop of `<svelte:element>` must be a valid HTML element, SVG element, MathML element, or custom element name. A value containing invalid characters (such as whitespace or special characters) was provided, which could be a security risk. Ensure only valid tag names are passed.\n\n## html_deprecated\n\n> The `html` property of server render results has been deprecated. Use `body` instead.\n\n## hydratable_clobbering\n\n> Attempted to set `hydratable` with key `%key%` twice with different values.\n>\n> %stack%\n\nThis error occurs when using `hydratable` multiple times with the same key. To avoid this, you can:\n- Ensure all invocations with the same key result in the same value\n- Update the keys to make both instances unique\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\n  // which one should \"win\" and be serialized in the rendered response?\n  const one = hydratable('not-unique', () => 1);\n  const two = hydratable('not-unique', () => 2);\n</script>\n```\n\n## hydratable_serialization_failed\n\n> Failed to serialize `hydratable` data for key `%key%`.\n>\n> `hydratable` can serialize anything [`uneval` from `devalue`](https://npmjs.com/package/uneval) can, plus Promises.\n>\n> Cause:\n> %stack%\n\n## invalid_csp\n\n> `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously.\n\n## invalid_id_prefix\n\n> The `idPrefix` option cannot include `--`.\n\n## lifecycle_function_unavailable\n\n> `%name%(...)` is not available on the server\n\nCertain methods such as `mount` cannot be invoked while running in a server context. Avoid calling them eagerly, i.e. not during render.\n\n## server_context_required\n\n> Could not resolve `render` context.\n\nCertain functions such as `hydratable` cannot be invoked outside of a `render(...)` call, such as at the top level of a module.\n"
  },
  {
    "path": "packages/svelte/messages/server-warnings/warnings.md",
    "content": "## unresolved_hydratable\n\n> A `hydratable` value with key `%key%` was created, but at least part of it was not used during the render.\n>\n> The `hydratable` was initialized in:\n> %stack%\n\nThe most likely cause of this is creating a `hydratable` in the `script` block of your component and then `await`ing\nthe result inside a `svelte:boundary` with a `pending` snippet:\n\n```svelte\n<script>\n  import { hydratable } from 'svelte';\n\timport { getUser } from '$lib/get-user.js';\n\n\tconst user = hydratable('user', getUser);\n</script>\n\n<svelte:boundary>\n\t<h1>{(await user).name}</h1>\n\n\t{#snippet pending()}\n\t\t<div>Loading...</div>\n\t{/snippet}\n</svelte:boundary>\n```\n\nConsider inlining the `hydratable` call inside the boundary so that it's not called on the server.\n\nNote that this can also happen when a `hydratable` contains multiple promises and some but not all of them have been used.\n"
  },
  {
    "path": "packages/svelte/messages/shared-errors/errors.md",
    "content": "## experimental_async_required\n\n> Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n\n## invalid_default_snippet\n\n> Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n\nThis error would be thrown in a setup like this:\n\n```svelte\n<!--- file: Parent.svelte --->\n<List {items} let:entry>\n    <span>{entry}</span>\n</List>\n```\n\n```svelte\n<!--- file: List.svelte --->\n<script>\n    let { items, children } = $props();\n</script>\n\n<ul>\n    {#each items as item}\n        <li>{@render children(item)}</li>\n    {/each}\n</ul>\n```\n\nHere, `List.svelte` is using `{@render children(item)` which means it expects `Parent.svelte` to use snippets. Instead, `Parent.svelte` uses the deprecated `let:` directive. This combination of APIs is incompatible, hence the error.\n\n## invalid_snippet_arguments\n\n> A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n\n## invariant_violation\n\n> An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n\n## lifecycle_outside_component\n\n> `%name%(...)` can only be used during component initialisation\n\nCertain lifecycle methods can only be used during component initialisation. To fix this, make sure you're invoking the method inside the _top level of the instance script_ of your component.\n\n```svelte\n<script>\n    import { onMount } from 'svelte';\n\n    function handleClick() {\n        // This is wrong\n        onMount(() => {})\n    }\n\n    // This is correct\n    onMount(() => {})\n</script>\n\n<button onclick={handleClick}>click me</button>\n```\n\n## missing_context\n\n> Context was not set in a parent component\n\nThe [`createContext()`](svelte#createContext) utility returns a `[get, set]` pair of functions. `get` will throw an error if `set` was not used to set the context in a parent component.\n\n## snippet_without_render_tag\n\n> Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n\nA component throwing this error will look something like this (`children` is not being rendered):\n\n```svelte\n<script>\n    let { children } = $props();\n</script>\n\n{children}\n```\n\n...or like this (a parent component is passing a snippet where a non-snippet value is expected):\n\n```svelte\n<!--- file: Parent.svelte --->\n<ChildComponent>\n  {#snippet label()}\n    <span>Hi!</span>\n  {/snippet}\n</ChildComponent>\n```\n\n```svelte\n<!--- file: Child.svelte --->\n<script>\n  let { label } = $props();\n</script>\n\n<!-- This component doesn't expect a snippet, but the parent provided one -->\n<p>{label}</p>\n```\n\n## store_invalid_shape\n\n> `%name%` is not a store with a `subscribe` method\n\n## svelte_element_invalid_this_value\n\n> The `this` prop on `<svelte:element>` must be a string, if defined\n"
  },
  {
    "path": "packages/svelte/messages/shared-warnings/warnings.md",
    "content": "## dynamic_void_element_content\n\n> `<svelte:element this=\"%tag%\">` is a void element — it cannot have content\n\nElements such as `<input>` cannot have content, any children passed to these elements will be ignored.\n\n## state_snapshot_uncloneable\n\n> Value cannot be cloned with `$state.snapshot` — the original value was returned\n\n> The following properties cannot be cloned with `$state.snapshot` — the return value contains the originals:\n>\n> %properties%\n\n`$state.snapshot` tries to clone the given value in order to return a reference that no longer changes. Certain objects may not be cloneable, in which case the original value is returned. In the following example, `property` is cloned, but `window` is not, because DOM elements are uncloneable:\n\n```js\nconst object = $state({ property: 'this is cloneable', window })\nconst snapshot = $state.snapshot(object);\n```\n"
  },
  {
    "path": "packages/svelte/package.json",
    "content": "{\n  \"name\": \"svelte\",\n  \"description\": \"Cybernetically enhanced web apps\",\n  \"license\": \"MIT\",\n  \"version\": \"5.55.1\",\n  \"type\": \"module\",\n  \"types\": \"./types/index.d.ts\",\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"files\": [\n    \"*.d.ts\",\n    \"src\",\n    \"!src/**/*.test.*\",\n    \"!src/**/*.d.ts\",\n    \"types\",\n    \"compiler\",\n    \"README.md\"\n  ],\n  \"module\": \"src/index-client.js\",\n  \"main\": \"src/index-client.js\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types/index.d.ts\",\n      \"worker\": \"./src/index-server.js\",\n      \"browser\": \"./src/index-client.js\",\n      \"default\": \"./src/index-server.js\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./action\": {\n      \"types\": \"./types/index.d.ts\"\n    },\n    \"./animate\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/animate/index.js\"\n    },\n    \"./attachments\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/attachments/index.js\"\n    },\n    \"./compiler\": {\n      \"types\": \"./types/index.d.ts\",\n      \"require\": \"./compiler/index.js\",\n      \"default\": \"./src/compiler/index.js\"\n    },\n    \"./easing\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/easing/index.js\"\n    },\n    \"./elements\": {\n      \"types\": \"./elements.d.ts\"\n    },\n    \"./internal\": {\n      \"default\": \"./src/internal/index.js\"\n    },\n    \"./internal/client\": {\n      \"default\": \"./src/internal/client/index.js\"\n    },\n    \"./internal/disclose-version\": {\n      \"default\": \"./src/internal/disclose-version.js\"\n    },\n    \"./internal/flags/async\": {\n      \"default\": \"./src/internal/flags/async.js\"\n    },\n    \"./internal/flags/legacy\": {\n      \"default\": \"./src/internal/flags/legacy.js\"\n    },\n    \"./internal/flags/tracing\": {\n      \"default\": \"./src/internal/flags/tracing.js\"\n    },\n    \"./internal/server\": {\n      \"default\": \"./src/internal/server/index.js\"\n    },\n    \"./legacy\": {\n      \"types\": \"./types/index.d.ts\",\n      \"worker\": \"./src/legacy/legacy-server.js\",\n      \"browser\": \"./src/legacy/legacy-client.js\",\n      \"default\": \"./src/legacy/legacy-server.js\"\n    },\n    \"./motion\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/motion/index.js\"\n    },\n    \"./reactivity\": {\n      \"types\": \"./types/index.d.ts\",\n      \"worker\": \"./src/reactivity/index-server.js\",\n      \"browser\": \"./src/reactivity/index-client.js\",\n      \"default\": \"./src/reactivity/index-server.js\"\n    },\n    \"./reactivity/window\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/reactivity/window/index.js\"\n    },\n    \"./server\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/server/index.js\"\n    },\n    \"./store\": {\n      \"types\": \"./types/index.d.ts\",\n      \"worker\": \"./src/store/index-server.js\",\n      \"browser\": \"./src/store/index-client.js\",\n      \"default\": \"./src/store/index-server.js\"\n    },\n    \"./transition\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/transition/index.js\"\n    },\n    \"./events\": {\n      \"types\": \"./types/index.d.ts\",\n      \"default\": \"./src/events/index.js\"\n    }\n  },\n  \"imports\": {\n    \"#client\": \"./src/internal/client/types.d.ts\",\n    \"#client/constants\": \"./src/internal/client/constants.js\",\n    \"#compiler\": {\n      \"types\": \"./src/compiler/private.d.ts\",\n      \"default\": \"./src/compiler/index.js\"\n    },\n    \"#compiler/builders\": \"./src/compiler/utils/builders.js\",\n    \"#server\": \"./src/internal/server/types.d.ts\",\n    \"#shared\": \"./src/internal/shared/types.d.ts\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/sveltejs/svelte.git\",\n    \"directory\": \"packages/svelte\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/sveltejs/svelte/issues\"\n  },\n  \"homepage\": \"https://svelte.dev\",\n  \"keywords\": [\n    \"svelte\",\n    \"UI\",\n    \"framework\",\n    \"templates\",\n    \"templating\"\n  ],\n  \"scripts\": {\n    \"build\": \"rollup -c && pnpm generate\",\n    \"dev\": \"node scripts/process-messages -w & rollup -cw\",\n    \"check\": \"tsc --project tsconfig.runtime.json && tsc && cd ./tests/types && tsc\",\n    \"check:tsgo\": \"tsgo --project tsconfig.runtime.json --skipLibCheck && tsgo --skipLibCheck\",\n    \"check:watch\": \"tsc --watch\",\n    \"generate\": \"node scripts/process-messages && node ./scripts/generate-types.js\",\n    \"generate:version\": \"node ./scripts/generate-version.js\",\n    \"generate:types\": \"node ./scripts/generate-types.js && tsc -p tsconfig.generated.json\",\n    \"prepublishOnly\": \"pnpm build && node scripts/check-treeshakeability.js\",\n    \"knip\": \"pnpm dlx knip\"\n  },\n  \"devDependencies\": {\n    \"@jridgewell/trace-mapping\": \"^0.3.25\",\n    \"@playwright/test\": \"^1.58.0\",\n    \"@rollup/plugin-commonjs\": \"^28.0.1\",\n    \"@rollup/plugin-node-resolve\": \"^15.3.0\",\n    \"@rollup/plugin-terser\": \"^0.4.4\",\n    \"@rollup/plugin-virtual\": \"^3.0.2\",\n    \"@types/aria-query\": \"^5.0.4\",\n    \"@types/node\": \"^20.11.5\",\n    \"dts-buddy\": \"^0.5.5\",\n    \"esbuild\": \"^0.25.10\",\n    \"rollup\": \"^4.59.0\",\n    \"source-map\": \"^0.7.4\",\n    \"tinyglobby\": \"^0.2.12\",\n    \"typescript\": \"^5.5.4\",\n    \"vitest\": \"^2.1.9\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/remapping\": \"^2.3.4\",\n    \"@jridgewell/sourcemap-codec\": \"^1.5.0\",\n    \"@sveltejs/acorn-typescript\": \"^1.0.5\",\n    \"@types/estree\": \"^1.0.5\",\n    \"@types/trusted-types\": \"^2.0.7\",\n    \"acorn\": \"^8.12.1\",\n    \"aria-query\": \"5.3.1\",\n    \"axobject-query\": \"^4.1.0\",\n    \"clsx\": \"^2.1.1\",\n    \"devalue\": \"^5.6.4\",\n    \"esm-env\": \"^1.2.1\",\n    \"esrap\": \"^2.2.4\",\n    \"is-reference\": \"^3.0.3\",\n    \"locate-character\": \"^3.0.0\",\n    \"magic-string\": \"^0.30.11\",\n    \"zimmerframe\": \"^1.1.2\"\n  }\n}\n"
  },
  {
    "path": "packages/svelte/rollup.config.js",
    "content": "import commonjs from '@rollup/plugin-commonjs';\nimport resolve from '@rollup/plugin-node-resolve';\nimport terser from '@rollup/plugin-terser';\nimport { defineConfig } from 'rollup';\n\n// runs the version generation as a side-effect of importing\nimport './scripts/generate-version.js';\n\nexport default defineConfig({\n\tinput: 'src/compiler/index.js',\n\toutput: {\n\t\tfile: 'compiler/index.js',\n\t\tformat: 'umd',\n\t\tname: 'svelte'\n\t},\n\tplugins: [resolve(), commonjs(), terser()]\n});\n"
  },
  {
    "path": "packages/svelte/scripts/check-treeshakeability.js",
    "content": "import fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { rollup } from 'rollup';\nimport virtual from '@rollup/plugin-virtual';\nimport { nodeResolve } from '@rollup/plugin-node-resolve';\nimport { compile } from 'svelte/compiler';\n\n/**\n * @param {string} entry\n */\nasync function bundle_code(entry) {\n\tconst bundle = await rollup({\n\t\tinput: '__entry__',\n\t\tplugins: [\n\t\t\tvirtual({\n\t\t\t\t__entry__: entry\n\t\t\t}),\n\t\t\t{\n\t\t\t\tname: 'resolve-svelte',\n\t\t\t\tresolveId(importee) {\n\t\t\t\t\tif (importee.startsWith('svelte')) {\n\t\t\t\t\t\tconst entry = pkg.exports[importee.replace('svelte', '.')];\n\t\t\t\t\t\treturn path.resolve(entry.browser ?? entry.default);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tnodeResolve({\n\t\t\t\texportConditions: ['production', 'import', 'browser', 'default']\n\t\t\t})\n\t\t],\n\t\tonwarn: (warning, handle) => {\n\t\t\tif (warning.code !== 'EMPTY_BUNDLE' && warning.code !== 'CIRCULAR_DEPENDENCY') {\n\t\t\t\thandle(warning);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst { output } = await bundle.generate({});\n\n\tif (output.length > 1) {\n\t\tthrow new Error('errr what');\n\t}\n\n\treturn output[0].code.trim();\n}\n\nconst pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));\n\nlet failed = false;\n\n// eslint-disable-next-line no-console\nconsole.group('checking treeshakeability');\n\nfor (const key in pkg.exports) {\n\t// special cases\n\tif (key === './compiler') continue;\n\tif (key === './internal') continue;\n\tif (key === './internal/disclose-version') continue;\n\tif (key === './internal/flags/legacy') continue;\n\tif (key === './internal/flags/tracing') continue;\n\n\tfor (const type of ['browser', 'default']) {\n\t\tif (!pkg.exports[key][type]) continue;\n\n\t\tconst subpackage = path.join(pkg.name, key);\n\t\tconst resolved = path.resolve(pkg.exports[key][type]);\n\t\tconst code = await bundle_code(`import ${JSON.stringify(resolved)}`);\n\n\t\tif (code === '') {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(`✅ ${subpackage} (${type})`);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(code);\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(`❌ ${subpackage} (${type})`);\n\t\t\tfailed = true;\n\t\t}\n\t}\n}\n\nconst client_main = path.resolve(pkg.exports['.'].browser);\nconst bundle = await bundle_code(\n\t// Use all features which contain hydration code to ensure it's treeshakeable\n\tcompile(\n\t\t`\n<svelte:options runes />\n<script>\n\timport { mount } from ${JSON.stringify(client_main)}; mount();\n\tlet foo;\n</script>\n\n<svelte:head><title>hi</title></svelte:head>\n<input bind:value={foo} />\n\n<a href={foo} class={foo}>a</a>\n<a {...foo}>a</a>\n<svelte:component this={foo} />\n<svelte:element this={foo} />\n<C {foo} />\n\n{#if foo}\n{/if}\n{#each foo as bar}\n{/each}\n{#await foo}\n{/await}\n{#key foo}\n{/key}\n{#snippet x()}\n{/snippet}\n\n{@render x()}\n{@html foo}\n\t`,\n\t\t{ filename: 'App.svelte' }\n\t).js.code\n);\n\n/**\n * @param {string} case_name\n * @param {string[]} strings\n */\nfunction check_bundle(case_name, ...strings) {\n\tfor (const string of strings) {\n\t\tconst index = bundle.indexOf(string);\n\t\tif (index >= 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(`❌ ${case_name} not treeshakeable`);\n\t\t\tfailed = true;\n\n\t\t\tlet lines = bundle.slice(index - 500, index + 500).split('\\n');\n\t\t\tconst target_line = lines.findIndex((line) => line.includes(string));\n\t\t\t// mark the failed line\n\t\t\tlines = lines\n\t\t\t\t.map((line, i) => (i === target_line ? `> ${line}` : `| ${line}`))\n\t\t\t\t.slice(target_line - 5, target_line + 6);\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error('The first failed line:\\n' + lines.join('\\n'));\n\t\t\treturn;\n\t\t}\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.error(`✅ ${case_name} treeshakeable`);\n}\n\ncheck_bundle('Hydration code', 'hydrate_node', 'hydrate_next');\ncheck_bundle('Legacy code', 'component_context.l');\ncheck_bundle('$inspect.trace', `'CreatedAt'`);\n\nif (failed) {\n\t// eslint-disable-next-line no-console\n\tconsole.error('Full bundle at', path.resolve('scripts/_bundle.js'));\n\tfs.writeFileSync('scripts/_bundle.js', bundle);\n}\n\n// eslint-disable-next-line no-console\nconsole.groupEnd();\n\nif (failed) {\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "packages/svelte/scripts/generate-types.js",
    "content": "import fs from 'node:fs';\nimport process from 'node:process';\nimport { fileURLToPath } from 'node:url';\nimport { createBundle } from 'dts-buddy';\n\nconst dir = fileURLToPath(new URL('..', import.meta.url));\nconst pkg = JSON.parse(fs.readFileSync(`${dir}/package.json`, 'utf-8'));\n\n// For people not using moduleResolution: 'bundler', we need to generate these files. Think about removing this in Svelte 6 or 7\n// It may look weird, but the imports MUST be ending with index.js to be properly resolved in all TS modes\nfor (const name of ['action', 'animate', 'easing', 'motion', 'store', 'transition', 'legacy']) {\n\tfs.writeFileSync(`${dir}/${name}.d.ts`, \"import './types/index.js';\\n\");\n}\n\nfs.writeFileSync(`${dir}/index.d.ts`, \"import './types/index.js';\\n\");\nfs.writeFileSync(`${dir}/compiler.d.ts`, \"import './types/index.js';\\n\");\n\n// TODO: Remove these in Svelte 6. They are here so that tooling (which historically made use of these) can support Svelte 4-6 in one minor version\nfs.mkdirSync(`${dir}/types/compiler`, { recursive: true });\nfs.writeFileSync(`${dir}/types/compiler/preprocess.d.ts`, \"import '../index.js';\\n\");\nfs.writeFileSync(`${dir}/types/compiler/interfaces.d.ts`, \"import '../index.js';\\n\");\n\nawait createBundle({\n\toutput: `${dir}/types/index.d.ts`,\n\tcompilerOptions: {\n\t\t// so that types/properties with `@internal` (and its dependencies) are removed from the output\n\t\tstripInternal: true,\n\t\tpaths: Object.fromEntries(\n\t\t\tObject.entries(pkg.imports).map(\n\t\t\t\t/** @param {[string,any]} import */ ([key, value]) => {\n\t\t\t\t\treturn [key, [value.types ?? value.default ?? value]];\n\t\t\t\t}\n\t\t\t)\n\t\t)\n\t},\n\tmodules: {\n\t\t[pkg.name]: `${dir}/src/index.d.ts`,\n\t\t[`${pkg.name}/action`]: `${dir}/src/action/public.d.ts`,\n\t\t[`${pkg.name}/animate`]: `${dir}/src/animate/public.d.ts`,\n\t\t[`${pkg.name}/attachments`]: `${dir}/src/attachments/public.d.ts`,\n\t\t[`${pkg.name}/compiler`]: `${dir}/src/compiler/public.d.ts`,\n\t\t[`${pkg.name}/easing`]: `${dir}/src/easing/index.js`,\n\t\t[`${pkg.name}/legacy`]: `${dir}/src/legacy/legacy-client.js`,\n\t\t[`${pkg.name}/motion`]: `${dir}/src/motion/public.d.ts`,\n\t\t[`${pkg.name}/reactivity`]: `${dir}/src/reactivity/index-client.js`,\n\t\t[`${pkg.name}/reactivity/window`]: `${dir}/src/reactivity/window/index.js`,\n\t\t[`${pkg.name}/server`]: `${dir}/src/server/index.d.ts`,\n\t\t[`${pkg.name}/store`]: `${dir}/src/store/public.d.ts`,\n\t\t[`${pkg.name}/transition`]: `${dir}/src/transition/public.d.ts`,\n\t\t[`${pkg.name}/events`]: `${dir}/src/events/public.d.ts`,\n\t\t// TODO remove in Svelte 6\n\t\t[`${pkg.name}/types/compiler/preprocess`]: `${dir}/src/compiler/preprocess/legacy-public.d.ts`,\n\t\t[`${pkg.name}/types/compiler/interfaces`]: `${dir}/src/compiler/types/legacy-interfaces.d.ts`\n\t}\n});\n\nfs.appendFileSync(`${dir}/types/index.d.ts`, '\\n');\n\nconst types = fs.readFileSync(`${dir}/types/index.d.ts`, 'utf-8');\n\nconst bad_links = [...types.matchAll(/\\]\\((\\/[^)]+)\\)/g)];\nif (bad_links.length > 0) {\n\t// eslint-disable-next-line no-console\n\tconsole.error(\n\t\t`The following links in JSDoc annotations should be prefixed with https://svelte.dev:`\n\t);\n\n\tfor (const [, link] of bad_links) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(`- ${link}`);\n\t}\n\n\tprocess.exit(1);\n}\n\nif (types.includes('\\texport { ')) {\n\t// eslint-disable-next-line no-console\n\tconsole.error(\n\t\t`The generated types file should not contain 'export { ... }' statements. ` +\n\t\t\t`TypeScript is bad at following these: when creating d.ts files through @sveltejs/package, and one of these types is used, ` +\n\t\t\t`TypeScript will likely fail at generating a d.ts file. ` +\n\t\t\t`To prevent this, do 'export interface Foo {}' instead of 'interface Foo {}' and then 'export { Foo }'`\n\t);\n\tprocess.exit(1);\n}\n"
  },
  {
    "path": "packages/svelte/scripts/generate-version.js",
    "content": "import fs from 'node:fs';\n\nconst pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'));\n\nfs.writeFileSync(\n\t'./src/version.js',\n\t`// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '${pkg.version}';\nexport const PUBLIC_VERSION = '${pkg.version.split('.')[0]}';\n`\n);\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/index.js",
    "content": "/** @import { Node } from 'esrap/languages/ts' */\n/** @import * as ESTree from 'estree' */\n/** @import { AST } from 'svelte/compiler' */\n\n// @ts-check\nimport process from 'node:process';\nimport fs from 'node:fs';\nimport * as acorn from 'acorn';\nimport { walk } from 'zimmerframe';\nimport * as esrap from 'esrap';\nimport ts from 'esrap/languages/ts';\n\nconst DIR = '../../documentation/docs/98-reference/.generated';\n\nconst watch = process.argv.includes('-w');\n\nfunction run() {\n\t/** @type {Record<string, Record<string, { messages: string[], details: string | null }>>} */\n\tconst messages = {};\n\tconst seen = new Set();\n\n\tfs.rmSync(DIR, { force: true, recursive: true });\n\tfs.mkdirSync(DIR);\n\n\tfor (const category of fs.readdirSync('messages')) {\n\t\tif (category.startsWith('.')) continue;\n\n\t\tmessages[category] = {};\n\n\t\tfor (const file of fs.readdirSync(`messages/${category}`)) {\n\t\t\tif (!file.endsWith('.md')) continue;\n\n\t\t\tconst markdown = fs\n\t\t\t\t.readFileSync(`messages/${category}/${file}`, 'utf-8')\n\t\t\t\t.replace(/\\r\\n/g, '\\n');\n\n\t\t\tconst sorted = [];\n\n\t\t\tfor (const match of markdown.matchAll(/## ([\\w]+)\\n\\n([^]+?)(?=$|\\n\\n## )/g)) {\n\t\t\t\tconst [_, code, text] = match;\n\n\t\t\t\tif (seen.has(code)) {\n\t\t\t\t\tthrow new Error(`Duplicate message code ${category}/${code}`);\n\t\t\t\t}\n\n\t\t\t\tsorted.push({ code, _ });\n\n\t\t\t\tconst sections = text.trim().split('\\n\\n');\n\t\t\t\tconst details = [];\n\n\t\t\t\twhile (!sections[sections.length - 1].startsWith('> ')) {\n\t\t\t\t\tdetails.unshift(/** @type {string} */ (sections.pop()));\n\t\t\t\t}\n\n\t\t\t\tif (sections.length === 0) {\n\t\t\t\t\tthrow new Error('No message text');\n\t\t\t\t}\n\n\t\t\t\tseen.add(code);\n\t\t\t\tmessages[category][code] = {\n\t\t\t\t\tmessages: sections.map((section) => section.replace(/^> /gm, '').replace(/^>\\n/gm, '\\n')),\n\t\t\t\t\tdetails: details.join('\\n\\n')\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tsorted.sort((a, b) => (a.code < b.code ? -1 : 1));\n\n\t\t\tfs.writeFileSync(\n\t\t\t\t`messages/${category}/${file}`,\n\t\t\t\tsorted.map((x) => x._.trim()).join('\\n\\n') + '\\n'\n\t\t\t);\n\t\t}\n\n\t\tfs.writeFileSync(\n\t\t\t`${DIR}/${category}.md`,\n\t\t\t'<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\\n\\n' +\n\t\t\t\tObject.entries(messages[category])\n\t\t\t\t\t.map(([code, { messages, details }]) => {\n\t\t\t\t\t\tconst chunks = [\n\t\t\t\t\t\t\t`### ${code}`,\n\t\t\t\t\t\t\t...messages.map((message) => '```\\n' + message + '\\n```')\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\tif (details) {\n\t\t\t\t\t\t\tchunks.push(details);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn chunks.join('\\n\\n');\n\t\t\t\t\t})\n\t\t\t\t\t.sort()\n\t\t\t\t\t.join('\\n\\n') +\n\t\t\t\t'\\n'\n\t\t);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} dest\n\t */\n\tfunction transform(name, dest) {\n\t\tconst source = fs\n\t\t\t.readFileSync(new URL(`./templates/${name}.js`, import.meta.url), 'utf-8')\n\t\t\t.replace(/\\r\\n/g, '\\n');\n\n\t\t/** @type {AST.JSComment[]} */\n\t\tconst comments = [];\n\n\t\tlet ast = /** @type {ESTree.Node} */ (\n\t\t\t/** @type {unknown} */ (\n\t\t\t\tacorn.parse(source, {\n\t\t\t\t\tecmaVersion: 'latest',\n\t\t\t\t\tsourceType: 'module',\n\t\t\t\t\tlocations: true,\n\t\t\t\t\tonComment: comments\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tcomments.forEach((comment) => {\n\t\t\tif (comment.type === 'Block') {\n\t\t\t\tcomment.value = comment.value.replace(/^\\t+/gm, '');\n\t\t\t}\n\t\t});\n\n\t\tast = walk(ast, null, {\n\t\t\tIdentifier(node, context) {\n\t\t\t\tif (node.name === 'CODES') {\n\t\t\t\t\t/** @type {ESTree.ArrayExpression} */\n\t\t\t\t\tconst array = {\n\t\t\t\t\t\ttype: 'ArrayExpression',\n\t\t\t\t\t\telements: Object.keys(messages[name]).map((code) => ({\n\t\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\t\tvalue: code\n\t\t\t\t\t\t}))\n\t\t\t\t\t};\n\n\t\t\t\t\treturn array;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst body = /** @type {ESTree.Program} */ (ast).body;\n\n\t\tconst category = messages[name];\n\n\t\t// find the `export function CODE` node\n\t\tconst index = body.findIndex((node) => {\n\t\t\tif (\n\t\t\t\tnode.type === 'ExportNamedDeclaration' &&\n\t\t\t\tnode.declaration &&\n\t\t\t\tnode.declaration.type === 'FunctionDeclaration'\n\t\t\t) {\n\t\t\t\treturn node.declaration.id.name === 'CODE';\n\t\t\t}\n\t\t});\n\n\t\tif (index === -1) throw new Error(`missing export function CODE in ${name}.js`);\n\n\t\tconst template_node = body[index];\n\t\tbody.splice(index, 1);\n\n\t\tconst jsdoc = /** @type {AST.JSComment} */ (\n\t\t\tcomments.findLast((comment) => comment.start < /** @type {number} */ (template_node.start))\n\t\t);\n\n\t\tconst printed = esrap.print(\n\t\t\t/** @type {Node} */ (ast),\n\t\t\tts({\n\t\t\t\tcomments: comments.filter((comment) => comment !== jsdoc)\n\t\t\t})\n\t\t);\n\n\t\tfor (const code in category) {\n\t\t\tconst { messages } = category[code];\n\t\t\t/** @type {string[]} */\n\t\t\tconst vars = [];\n\n\t\t\tconst group = messages.map((text, i) => {\n\t\t\t\tfor (const match of text.matchAll(/%(\\w+)%/g)) {\n\t\t\t\t\tconst name = match[1];\n\t\t\t\t\tif (!vars.includes(name)) {\n\t\t\t\t\t\tvars.push(match[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttext,\n\t\t\t\t\tvars: vars.slice()\n\t\t\t\t};\n\t\t\t});\n\n\t\t\t/** @type {ESTree.Expression} */\n\t\t\tlet message = { type: 'Literal', value: '' };\n\t\t\tlet prev_vars;\n\n\t\t\tfor (let i = 0; i < group.length; i += 1) {\n\t\t\t\tconst { text, vars } = group[i];\n\n\t\t\t\tif (vars.length === 0) {\n\t\t\t\t\tmessage = {\n\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\tvalue: text\n\t\t\t\t\t};\n\t\t\t\t\tprev_vars = vars;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst parts = text.split(/(%\\w+%)/);\n\n\t\t\t\t/** @type {ESTree.Expression[]} */\n\t\t\t\tconst expressions = [];\n\n\t\t\t\t/** @type {ESTree.TemplateElement[]} */\n\t\t\t\tconst quasis = [];\n\n\t\t\t\tfor (let i = 0; i < parts.length; i += 1) {\n\t\t\t\t\tconst part = parts[i];\n\t\t\t\t\tif (i % 2 === 0) {\n\t\t\t\t\t\tconst str = part.replace(/(`|\\${)/g, '\\\\$1');\n\t\t\t\t\t\tquasis.push({\n\t\t\t\t\t\t\ttype: 'TemplateElement',\n\t\t\t\t\t\t\tvalue: { raw: str, cooked: str },\n\t\t\t\t\t\t\ttail: i === parts.length - 1\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpressions.push({\n\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\tname: part.slice(1, -1)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/** @type {ESTree.Expression} */\n\t\t\t\tconst expression = {\n\t\t\t\t\ttype: 'TemplateLiteral',\n\t\t\t\t\texpressions,\n\t\t\t\t\tquasis\n\t\t\t\t};\n\n\t\t\t\tif (prev_vars) {\n\t\t\t\t\tif (vars.length === prev_vars.length) {\n\t\t\t\t\t\tthrow new Error('Message overloads must have new parameters');\n\t\t\t\t\t}\n\n\t\t\t\t\tmessage = {\n\t\t\t\t\t\ttype: 'ConditionalExpression',\n\t\t\t\t\t\ttest: {\n\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\tname: vars[prev_vars.length]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tconsequent: expression,\n\t\t\t\t\t\talternate: message\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tmessage = expression;\n\t\t\t\t}\n\n\t\t\t\tprev_vars = vars;\n\t\t\t}\n\n\t\t\tconst clone = /** @type {ESTree.Statement} */ (\n\t\t\t\twalk(/** @type {ESTree.Node} */ (template_node), null, {\n\t\t\t\t\tFunctionDeclaration(node, context) {\n\t\t\t\t\t\tif (node.id.name !== 'CODE') return;\n\n\t\t\t\t\t\tconst params = [];\n\n\t\t\t\t\t\tfor (const param of node.params) {\n\t\t\t\t\t\t\tif (param.type === 'Identifier' && param.name === 'PARAMETER') {\n\t\t\t\t\t\t\t\tparams.push(...vars.map((name) => ({ type: 'Identifier', name })));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tparams.push(param);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {ESTree.FunctionDeclaration} */ ({\n\t\t\t\t\t\t\t.../** @type {ESTree.FunctionDeclaration} */ (context.next()),\n\t\t\t\t\t\t\tparams,\n\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\t...node.id,\n\t\t\t\t\t\t\t\tname: code\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tTemplateLiteral(node, context) {\n\t\t\t\t\t\t/** @type {ESTree.TemplateElement} */\n\t\t\t\t\t\tlet quasi = {\n\t\t\t\t\t\t\ttype: 'TemplateElement',\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t...node.quasis[0].value\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttail: node.quasis[0].tail\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t/** @type {ESTree.TemplateLiteral} */\n\t\t\t\t\t\tlet out = {\n\t\t\t\t\t\t\ttype: 'TemplateLiteral',\n\t\t\t\t\t\t\tquasis: [quasi],\n\t\t\t\t\t\t\texpressions: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfor (let i = 0; i < node.expressions.length; i += 1) {\n\t\t\t\t\t\t\tconst q = structuredClone(node.quasis[i + 1]);\n\t\t\t\t\t\t\tconst e = node.expressions[i];\n\n\t\t\t\t\t\t\tif (e.type === 'Literal' && e.value === 'CODE') {\n\t\t\t\t\t\t\t\tquasi.value.raw += code + q.value.raw;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (e.type === 'Identifier' && e.name === 'MESSAGE') {\n\t\t\t\t\t\t\t\tif (message.type === 'Literal') {\n\t\t\t\t\t\t\t\t\tconst str = /** @type {string} */ (message.value).replace(/(`|\\${)/g, '\\\\$1');\n\t\t\t\t\t\t\t\t\tquasi.value.raw += str + q.value.raw;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (message.type === 'TemplateLiteral') {\n\t\t\t\t\t\t\t\t\tconst m = structuredClone(message);\n\t\t\t\t\t\t\t\t\tquasi.value.raw += m.quasis[0].value.raw;\n\t\t\t\t\t\t\t\t\tout.quasis.push(...m.quasis.slice(1));\n\t\t\t\t\t\t\t\t\tout.expressions.push(...m.expressions);\n\t\t\t\t\t\t\t\t\tquasi = m.quasis[m.quasis.length - 1];\n\t\t\t\t\t\t\t\t\tquasi.value.raw += q.value.raw;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tout.quasis.push((quasi = q));\n\t\t\t\t\t\t\tout.expressions.push(/** @type {ESTree.Expression} */ (context.visit(e)));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn out;\n\t\t\t\t\t},\n\t\t\t\t\tLiteral(node) {\n\t\t\t\t\t\tif (node.value === 'CODE') {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\t\t\tvalue: code\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tIdentifier(node) {\n\t\t\t\t\t\tif (node.name !== 'MESSAGE') return;\n\t\t\t\t\t\treturn message;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tconst jsdoc_clone = {\n\t\t\t\t...jsdoc,\n\t\t\t\tvalue: /** @type {string} */ (jsdoc.value)\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => {\n\t\t\t\t\t\tif (line === ' * MESSAGE') {\n\t\t\t\t\t\t\treturn messages[messages.length - 1]\n\t\t\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t\t\t.map((line) => ` * ${line}`)\n\t\t\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (line.includes('PARAMETER')) {\n\t\t\t\t\t\t\treturn vars\n\t\t\t\t\t\t\t\t.map((name, i) => {\n\t\t\t\t\t\t\t\t\tconst optional = i >= group[0].vars.length;\n\n\t\t\t\t\t\t\t\t\treturn optional\n\t\t\t\t\t\t\t\t\t\t? ` * @param {string | undefined | null} [${name}]`\n\t\t\t\t\t\t\t\t\t\t: ` * @param {string} ${name}`;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn line;\n\t\t\t\t\t})\n\t\t\t\t\t.filter((x) => x !== '')\n\t\t\t\t\t.join('\\n')\n\t\t\t};\n\n\t\t\tconst block = esrap.print(\n\t\t\t\t// @ts-expect-error some bullshit\n\t\t\t\t/** @type {ESTree.Program} */ ({ ...ast, body: [clone] }),\n\t\t\t\tts({ comments: [jsdoc_clone] })\n\t\t\t).code;\n\n\t\t\tprinted.code += `\\n\\n${block}`;\n\n\t\t\tbody.push(clone);\n\t\t}\n\n\t\tfs.writeFileSync(\n\t\t\tdest,\n\t\t\t`/* This file is generated by scripts/process-messages/index.js. Do not edit! */\\n\\n` +\n\t\t\t\tprinted.code,\n\t\t\t'utf-8'\n\t\t);\n\t}\n\n\ttransform('compile-errors', 'src/compiler/errors.js');\n\ttransform('compile-warnings', 'src/compiler/warnings.js');\n\n\ttransform('client-warnings', 'src/internal/client/warnings.js');\n\ttransform('client-errors', 'src/internal/client/errors.js');\n\ttransform('server-warnings', 'src/internal/server/warnings.js');\n\ttransform('server-errors', 'src/internal/server/errors.js');\n\ttransform('shared-errors', 'src/internal/shared/errors.js');\n\ttransform('shared-warnings', 'src/internal/shared/warnings.js');\n}\n\nif (watch) {\n\tlet running = false;\n\tlet timeout;\n\n\tfs.watch('messages', { recursive: true }, (type, file) => {\n\t\tif (running) {\n\t\t\ttimeout ??= setTimeout(() => {\n\t\t\t\trunning = false;\n\t\t\t\ttimeout = null;\n\t\t\t});\n\t\t} else {\n\t\t\trunning = true;\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('Regenerating messages...');\n\t\t\trun();\n\t\t}\n\t});\n}\n\nrun();\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/client-errors.js",
    "content": "import { DEV } from 'esm-env';\n\nexport * from '../shared/errors.js';\n\n/**\n * MESSAGE\n * @param {string} PARAMETER\n * @returns {never}\n */\nexport function CODE(PARAMETER) {\n\tif (DEV) {\n\t\tconst error = new Error(`${'CODE'}\\n${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`);\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/${'CODE'}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/client-warnings.js",
    "content": "import { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * MESSAGE\n * @param {string} PARAMETER\n */\nexport function CODE(PARAMETER) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] ${'CODE'}\\n%c${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/${'CODE'}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/compile-errors.js",
    "content": "import { CompileDiagnostic } from './utils/compile_diagnostic.js';\n\n/** @typedef {{ start?: number, end?: number }} NodeLike */\n\nclass InternalCompileError extends Error {\n\tmessage = ''; // ensure this property is enumerable\n\t#diagnostic;\n\n\t/**\n\t * @param {string} code\n\t * @param {string} message\n\t * @param {[number, number] | undefined} position\n\t */\n\tconstructor(code, message, position) {\n\t\tsuper(message);\n\t\tthis.stack = ''; // avoid unnecessary noise; don't set it as a class property or it becomes enumerable\n\n\t\t// We want to extend from Error so that various bundler plugins properly handle it.\n\t\t// But we also want to share the same object shape with that of warnings, therefore\n\t\t// we create an instance of the shared class an copy over its properties.\n\t\tthis.#diagnostic = new CompileDiagnostic(code, message, position);\n\t\tObject.assign(this, this.#diagnostic);\n\t\tthis.name = 'CompileError';\n\t}\n\n\ttoString() {\n\t\treturn this.#diagnostic.toString();\n\t}\n\n\ttoJSON() {\n\t\treturn this.#diagnostic.toJSON();\n\t}\n}\n\n/**\n * @param {null | number | NodeLike} node\n * @param {string} code\n * @param {string} message\n * @returns {never}\n */\nfunction e(node, code, message) {\n\tconst start = typeof node === 'number' ? node : node?.start;\n\tconst end = typeof node === 'number' ? node : node?.end;\n\n\tthrow new InternalCompileError(\n\t\tcode,\n\t\tmessage,\n\t\tstart !== undefined ? [start, end ?? start] : undefined\n\t);\n}\n\n/**\n * MESSAGE\n * @param {null | number | NodeLike} node\n * @param {string} PARAMETER\n * @returns {never}\n */\nexport function CODE(node, PARAMETER) {\n\te(node, 'CODE', `${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`);\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/compile-warnings.js",
    "content": "import { warnings, ignore_stack, ignore_map, warning_filter } from './state.js';\nimport { CompileDiagnostic } from './utils/compile_diagnostic.js';\n\n/** @typedef {{ start?: number, end?: number }} NodeLike */\n\nclass InternalCompileWarning extends CompileDiagnostic {\n\tname = 'CompileWarning';\n\n\t/**\n\t * @param {string} code\n\t * @param {string} message\n\t * @param {[number, number] | undefined} position\n\t */\n\tconstructor(code, message, position) {\n\t\tsuper(code, message, position);\n\t}\n}\n\n/**\n * @param {null | NodeLike} node\n * @param {string} code\n * @param {string} message\n */\nfunction w(node, code, message) {\n\tlet stack = ignore_stack;\n\tif (node) {\n\t\tstack = ignore_map.get(node) ?? ignore_stack;\n\t}\n\tif (stack && stack.at(-1)?.has(code)) return;\n\n\tconst warning = new InternalCompileWarning(\n\t\tcode,\n\t\tmessage,\n\t\tnode && node.start !== undefined ? [node.start, node.end ?? node.start] : undefined\n\t);\n\n\tif (!warning_filter(warning)) return;\n\n\twarnings.push(warning);\n}\n\nexport const codes = CODES;\n\n/**\n * MESSAGE\n * @param {null | NodeLike} node\n * @param {string} PARAMETER\n */\nexport function CODE(node, PARAMETER) {\n\tw(node, 'CODE', `${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`);\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/server-errors.js",
    "content": "export * from '../shared/errors.js';\n\n/**\n * MESSAGE\n * @param {string} PARAMETER\n * @returns {never}\n */\nexport function CODE(PARAMETER) {\n\tconst error = new Error(`${'CODE'}\\n${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`);\n\terror.name = 'Svelte error';\n\tthrow error;\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/server-warnings.js",
    "content": "import { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * MESSAGE\n * @param {string} PARAMETER\n */\nexport function CODE(PARAMETER) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] ${'CODE'}\\n%c${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/${'CODE'}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/shared-errors.js",
    "content": "import { DEV } from 'esm-env';\n\n/**\n * MESSAGE\n * @param {string} PARAMETER\n * @returns {never}\n */\nexport function CODE(PARAMETER) {\n\tif (DEV) {\n\t\tconst error = new Error(`${'CODE'}\\n${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`);\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/${'CODE'}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/scripts/process-messages/templates/shared-warnings.js",
    "content": "import { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * MESSAGE\n * @param {string} PARAMETER\n */\nexport function CODE(PARAMETER) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] ${'CODE'}\\n%c${MESSAGE}\\nhttps://svelte.dev/e/${'CODE'}`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/${'CODE'}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/action/public.d.ts",
    "content": "/**\n * Actions can return an object containing the two properties defined in this interface. Both are optional.\n * - update: An action can have a parameter. This method will be called whenever that parameter changes,\n *   immediately after Svelte has applied updates to the markup. `ActionReturn` and `ActionReturn<undefined>` both\n *   mean that the action accepts no parameters.\n * - destroy: Method that is called after the element is unmounted\n *\n * Additionally, you can specify which additional attributes and events the action enables on the applied element.\n * This applies to TypeScript typings only and has no effect at runtime.\n *\n * Example usage:\n * ```ts\n * interface Attributes {\n * \tnewprop?: string;\n * \t'on:event': (e: CustomEvent<boolean>) => void;\n * }\n *\n * export function myAction(node: HTMLElement, parameter: Parameter): ActionReturn<Parameter, Attributes> {\n * \t// ...\n * \treturn {\n * \t\tupdate: (updatedParameter) => {...},\n * \t\tdestroy: () => {...}\n * \t};\n * }\n * ```\n */\nexport interface ActionReturn<\n\tParameter = undefined,\n\tAttributes extends Record<string, any> = Record<never, any>\n> {\n\tupdate?: (parameter: Parameter) => void;\n\tdestroy?: () => void;\n\t/**\n\t * ### DO NOT USE THIS\n\t * This exists solely for type-checking and has no effect at runtime.\n\t * Set this through the `Attributes` generic instead.\n\t */\n\t$$_attributes?: Attributes;\n}\n\n/**\n * Actions are functions that are called when an element is created.\n * You can use this interface to type such actions.\n * The following example defines an action that only works on `<div>` elements\n * and optionally accepts a parameter which it has a default value for:\n * ```ts\n * export const myAction: Action<HTMLDivElement, { someProperty: boolean } | undefined> = (node, param = { someProperty: true }) => {\n *   // ...\n * }\n * ```\n * `Action<HTMLDivElement>` and `Action<HTMLDivElement, undefined>` both signal that the action accepts no parameters.\n *\n * You can return an object with methods `update` and `destroy` from the function and type which additional attributes and events it has.\n * See interface `ActionReturn` for more details.\n */\nexport interface Action<\n\tElement = HTMLElement,\n\tParameter = undefined,\n\tAttributes extends Record<string, any> = Record<never, any>\n> {\n\t<Node extends Element>(\n\t\t...args: undefined extends Parameter\n\t\t\t? [node: Node, parameter?: Parameter]\n\t\t\t: [node: Node, parameter: Parameter]\n\t): void | ActionReturn<Parameter, Attributes>;\n}\n\n// Implementation notes:\n// - undefined extends X instead of X extends undefined makes this work better with both strict and nonstrict mode\n"
  },
  {
    "path": "packages/svelte/src/ambient.d.ts",
    "content": "declare module '*.svelte' {\n\t// use prettier-ignore for a while because of https://github.com/sveltejs/language-tools/commit/026111228b5814a9109cc4d779d37fb02955fb8b\n\t// prettier-ignore\n\timport { SvelteComponent } from 'svelte'\n\timport { LegacyComponentType } from 'svelte/legacy';\n\tconst Comp: LegacyComponentType;\n\ttype Comp = SvelteComponent;\n\texport default Comp;\n}\n\n/**\n * Declares reactive state.\n *\n * Example:\n * ```ts\n * let count = $state(0);\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$state Documentation}\n *\n * @param initial The initial value\n */\ndeclare function $state<T>(initial: T): T;\ndeclare function $state<T>(): T | undefined;\n\ndeclare namespace $state {\n\ttype Primitive = string | number | boolean | null | undefined;\n\n\ttype TypedArray =\n\t\t| Int8Array\n\t\t| Uint8Array\n\t\t| Uint8ClampedArray\n\t\t| Int16Array\n\t\t| Uint16Array\n\t\t| Int32Array\n\t\t| Uint32Array\n\t\t| Float32Array\n\t\t| Float64Array\n\t\t| BigInt64Array\n\t\t| BigUint64Array;\n\n\t/** The things that `structuredClone` can handle — https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm */\n\texport type Cloneable =\n\t\t| ArrayBuffer\n\t\t| DataView\n\t\t| Date\n\t\t| Error\n\t\t| Map<any, any>\n\t\t| RegExp\n\t\t| Set<any>\n\t\t| TypedArray\n\t\t// web APIs\n\t\t| Blob\n\t\t| CryptoKey\n\t\t| DOMException\n\t\t| DOMMatrix\n\t\t| DOMMatrixReadOnly\n\t\t| DOMPoint\n\t\t| DOMPointReadOnly\n\t\t| DOMQuad\n\t\t| DOMRect\n\t\t| DOMRectReadOnly\n\t\t| File\n\t\t| FileList\n\t\t| FileSystemDirectoryHandle\n\t\t| FileSystemFileHandle\n\t\t| FileSystemHandle\n\t\t| ImageBitmap\n\t\t| ImageData\n\t\t| RTCCertificate\n\t\t| VideoFrame;\n\n\t/** Turn `SvelteDate`, `SvelteMap` and `SvelteSet` into their non-reactive counterparts. (`URL` is uncloneable.) */\n\ttype NonReactive<T> = T extends Date\n\t\t? Date\n\t\t: T extends Map<infer K, infer V>\n\t\t\t? Map<K, V>\n\t\t\t: T extends Set<infer K>\n\t\t\t\t? Set<K>\n\t\t\t\t: T;\n\n\ttype Snapshot<T> = T extends Primitive\n\t\t? T\n\t\t: T extends Cloneable\n\t\t\t? NonReactive<T>\n\t\t\t: T extends { toJSON(): infer R }\n\t\t\t\t? R\n\t\t\t\t: T extends readonly unknown[]\n\t\t\t\t\t? { [K in keyof T]: Snapshot<T[K]> }\n\t\t\t\t\t: T extends Array<infer U>\n\t\t\t\t\t\t? Array<Snapshot<U>>\n\t\t\t\t\t\t: T extends object\n\t\t\t\t\t\t\t? T extends { [key: string]: any }\n\t\t\t\t\t\t\t\t? { [K in keyof T]: Snapshot<T[K]> }\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never;\n\n\t/**\n\t * Returns the latest `value`, even if the rest of the UI is suspending\n\t * while async work (such as data loading) completes.\n\t *\n\t * ```svelte\n\t * <nav>\n\t *   <a href=\"/\" aria-current={$state.eager(pathname) === '/' ? 'page' : null}>home</a>\n\t *   <a href=\"/about\" aria-current={$state.eager(pathname) === '/about' ? 'page' : null}>about</a>\n\t * </nav>\n\t * ```\n\t */\n\texport function eager<T>(value: T): T;\n\t/**\n\t * Declares state that is _not_ made deeply reactive — instead of mutating it,\n\t * you must reassign it.\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   let items = $state.raw([0]);\n\t *\n\t *   const addItem = () => {\n\t *     items = [...items, items.length];\n\t *   };\n\t * </script>\n\t *\n\t * <button onclick={addItem}>\n\t *   {items.join(', ')}\n\t * </button>\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$state#$state.raw Documentation}\n\t *\n\t * @param initial The initial value\n\t */\n\texport function raw<T>(initial: T): T;\n\texport function raw<T>(): T | undefined;\n\t/**\n\t * To take a static snapshot of a deeply reactive `$state` proxy, use `$state.snapshot`:\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   let counter = $state({ count: 0 });\n\t *\n\t *   function onclick() {\n\t *     // Will log `{ count: ... }` rather than `Proxy { ... }`\n\t *     console.log($state.snapshot(counter));\n\t *   };\n\t * </script>\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$state#$state.snapshot Documentation}\n\t *\n\t * @param state The value to snapshot\n\t */\n\texport function snapshot<T>(state: T): Snapshot<T>;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Declares derived state, i.e. one that depends on other state variables.\n * The expression inside `$derived(...)` should be free of side-effects.\n *\n * Example:\n * ```ts\n * let double = $derived(count * 2);\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$derived Documentation}\n *\n * @param expression The derived state expression\n */\ndeclare function $derived<T>(expression: T): T;\n\ndeclare namespace $derived {\n\t/**\n\t * Sometimes you need to create complex derivations that don't fit inside a short expression.\n\t * In these cases, you can use `$derived.by` which accepts a function as its argument.\n\t *\n\t * Example:\n\t * ```ts\n\t * let total = $derived.by(() => {\n\t *   let result = 0;\n\t *\t for (const n of numbers) {\n\t *\t   result += n;\n\t *   }\n\t *   return result;\n\t * });\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$derived#$derived.by Documentation}\n\t */\n\texport function by<T>(fn: () => T): T;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Runs code when a component is mounted to the DOM, and then whenever its dependencies change, i.e. `$state` or `$derived` values.\n * The timing of the execution is after the DOM has been updated.\n *\n * Example:\n * ```ts\n * $effect(() => console.log('The count is now ' + count));\n * ```\n *\n * If you return a function from the effect, it will be called right before the effect is run again, or when the component is unmounted.\n *\n * Does not run during server-side rendering.\n *\n * @see {@link https://svelte.dev/docs/svelte/$effect Documentation}\n * @param fn The function to execute\n */\ndeclare function $effect(fn: () => void | (() => void)): void;\n\ndeclare namespace $effect {\n\t/**\n\t * Runs code right before a component is mounted to the DOM, and then whenever its dependencies change, i.e. `$state` or `$derived` values.\n\t * The timing of the execution is right before the DOM is updated.\n\t *\n\t * Example:\n\t * ```ts\n\t * $effect.pre(() => console.log('The count is now ' + count));\n\t * ```\n\t *\n\t * If you return a function from the effect, it will be called right before the effect is run again, or when the component is unmounted.\n\t *\n\t * Does not run during server-side rendering.\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.pre Documentation}\n\t * @param fn The function to execute\n\t */\n\texport function pre(fn: () => void | (() => void)): void;\n\n\t/**\n\t * Returns the number of promises that are pending in the current boundary, not including child boundaries.\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.pending Documentation}\n\t */\n\texport function pending(): number;\n\n\t/**\n\t * The `$effect.tracking` rune is an advanced feature that tells you whether or not the code is running inside a tracking context, such as an effect or inside your template.\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   console.log('in component setup:', $effect.tracking()); // false\n\t *\n\t *   $effect(() => {\n\t *     console.log('in effect:', $effect.tracking()); // true\n\t *   });\n\t * </script>\n\t *\n\t * <p>in template: {$effect.tracking()}</p> <!-- true -->\n\t * ```\n\t *\n\t * This allows you to (for example) add things like subscriptions without causing memory leaks, by putting them in child effects.\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.tracking Documentation}\n\t */\n\texport function tracking(): boolean;\n\n\t/**\n\t * The `$effect.root` rune is an advanced feature that creates a non-tracked scope that doesn't auto-cleanup. This is useful for\n\t * nested effects that you want to manually control. This rune also allows for creation of effects outside of the component\n\t * initialisation phase.\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   let count = $state(0);\n\t *\n\t *   const cleanup = $effect.root(() => {\n\t *     $effect(() => {\n\t *       console.log(count);\n\t *     })\n\t *\n\t *     return () => {\n\t *       console.log('effect root cleanup');\n\t *     }\n\t *   });\n\t * </script>\n\t *\n\t * <button onclick={() => cleanup()}>cleanup</button>\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.root Documentation}\n\t */\n\texport function root(fn: () => void | (() => void)): () => void;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Declares the props that a component accepts. Example:\n *\n * ```ts\n * let { optionalProp = 42, requiredProp, bindableProp = $bindable() }: { optionalProp?: number; requiredProps: string; bindableProp: boolean } = $props();\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$props Documentation}\n */\ndeclare function $props(): any;\n\ndeclare namespace $props {\n\t/**\n\t * Generates an ID that is unique to the current component instance. When hydrating a server-rendered component,\n\t * the value will be consistent between server and client.\n\t *\n\t * This is useful for linking elements via attributes like `for` and `aria-labelledby`.\n\t * @since 5.20.0\n\t */\n\texport function id(): string;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Declares a prop as bindable, meaning the parent component can use `bind:propName={value}` to bind to it.\n *\n * ```ts\n * let { propName = $bindable() }: { propName: boolean } = $props();\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$bindable Documentation}\n */\ndeclare function $bindable<T>(fallback?: T): T;\n\ndeclare namespace $bindable {\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Inspects one or more values whenever they, or the properties they contain, change. Example:\n *\n * ```ts\n * $inspect(someValue, someOtherValue)\n * ```\n *\n * `$inspect` returns a `with` function, which you can invoke with a callback function that\n * will be called with the value and the event type (`'init'` or `'update'`) on every change.\n * By default, the values will be logged to the console.\n *\n * ```ts\n * $inspect(x).with(console.trace);\n * $inspect(x, y).with(() => { debugger; });\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$inspect Documentation}\n */\ndeclare function $inspect<T extends any[]>(\n\t...values: T\n): { with: (fn: (type: 'init' | 'update', ...values: T) => void) => void };\n\ndeclare namespace $inspect {\n\t/**\n\t * Tracks which reactive state changes caused an effect to re-run. Must be the first\n\t * statement of a function body. Example:\n\t *\n\t * ```svelte\n\t * <script>\n\t *   let count = $state(0);\n\t *\n\t *   $effect(() => {\n\t *     $inspect.trace('my effect');\n\t *\n\t *     count;\n\t *   });\n\t * </script>\n\t */\n\texport function trace(name?: string): void;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Retrieves the `this` reference of the custom element that contains this component. Example:\n *\n * ```svelte\n * <svelte:options customElement=\"my-element\" />\n *\n * <script>\n * \tfunction greet(greeting) {\n * \t\t$host().dispatchEvent(new CustomEvent('greeting', { detail: greeting }))\n * \t}\n * </script>\n *\n * <button onclick={() => greet('hello')}>say hello</button>\n * ```\n *\n * Only available inside custom element components, and only on the client-side.\n *\n * @see {@link https://svelte.dev/docs/svelte/$host Documentation}\n */\ndeclare function $host<El extends HTMLElement = HTMLElement>(): El;\n\ndeclare namespace $host {\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n"
  },
  {
    "path": "packages/svelte/src/animate/index.js",
    "content": "/** @import { FlipParams, AnimationConfig } from './public.js' */\nimport { cubicOut } from '../easing/index.js';\n\n/**\n * The flip function calculates the start and end position of an element and animates between them, translating the x and y values.\n * `flip` stands for [First, Last, Invert, Play](https://aerotwist.com/blog/flip-your-animations/).\n *\n * @param {Element} node\n * @param {{ from: DOMRect; to: DOMRect }} fromTo\n * @param {FlipParams} params\n * @returns {AnimationConfig}\n */\nexport function flip(node, { from, to }, params = {}) {\n\tvar { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;\n\n\tvar style = getComputedStyle(node);\n\n\t// find the transform origin, expressed as a pair of values between 0 and 1\n\tvar transform = style.transform === 'none' ? '' : style.transform;\n\tvar [ox, oy] = style.transformOrigin.split(' ').map(parseFloat);\n\tox /= node.clientWidth;\n\toy /= node.clientHeight;\n\n\t// calculate effect of parent transforms and zoom\n\tvar zoom = get_zoom(node); // https://drafts.csswg.org/css-viewport/#effective-zoom\n\tvar sx = node.clientWidth / to.width / zoom;\n\tvar sy = node.clientHeight / to.height / zoom;\n\n\t// find the starting position of the transform origin\n\tvar fx = from.left + from.width * ox;\n\tvar fy = from.top + from.height * oy;\n\n\t// find the ending position of the transform origin\n\tvar tx = to.left + to.width * ox;\n\tvar ty = to.top + to.height * oy;\n\n\t// find the translation at the start of the transform\n\tvar dx = (fx - tx) * sx;\n\tvar dy = (fy - ty) * sy;\n\n\t// find the relative scale at the start of the transform\n\tvar dsx = from.width / to.width;\n\tvar dsy = from.height / to.height;\n\n\treturn {\n\t\tdelay,\n\t\tduration: typeof duration === 'function' ? duration(Math.sqrt(dx * dx + dy * dy)) : duration,\n\t\teasing,\n\t\tcss: (t, u) => {\n\t\t\tvar x = u * dx;\n\t\t\tvar y = u * dy;\n\t\t\tvar sx = t + u * dsx;\n\t\t\tvar sy = t + u * dsy;\n\n\t\t\treturn `transform: ${transform} translate(${x}px, ${y}px) scale(${sx}, ${sy});`;\n\t\t}\n\t};\n}\n\n/**\n * @param {Element} element\n */\nfunction get_zoom(element) {\n\tif ('currentCSSZoom' in element) {\n\t\treturn /** @type {number} */ (element.currentCSSZoom);\n\t}\n\n\t/** @type {Element | null} */\n\tvar current = element;\n\tvar zoom = 1;\n\n\twhile (current !== null) {\n\t\tzoom *= +getComputedStyle(current).zoom;\n\t\tcurrent = /** @type {Element | null} */ (current.parentElement);\n\t}\n\n\treturn zoom;\n}\n"
  },
  {
    "path": "packages/svelte/src/animate/public.d.ts",
    "content": "// todo: same as Transition, should it be shared?\nexport interface AnimationConfig {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: (t: number) => number;\n\tcss?: (t: number, u: number) => string;\n\ttick?: (t: number, u: number) => void;\n}\n\nexport interface FlipParams {\n\tdelay?: number;\n\tduration?: number | ((len: number) => number);\n\teasing?: (t: number) => number;\n}\n\nexport * from './index.js';\n"
  },
  {
    "path": "packages/svelte/src/attachments/index.js",
    "content": "/** @import { Action, ActionReturn } from '../action/public' */\n/** @import { Attachment } from './public' */\nimport { noop, render_effect } from 'svelte/internal/client';\nimport { ATTACHMENT_KEY } from '../constants.js';\nimport { untrack } from '../index-client.js';\nimport { teardown } from '../internal/client/reactivity/effects.js';\n\n/**\n * Creates an object key that will be recognised as an attachment when the object is spread onto an element,\n * as a programmatic alternative to using `{@attach ...}`. This can be useful for library authors, though\n * is generally not needed when building an app.\n *\n * ```svelte\n * <script>\n * \timport { createAttachmentKey } from 'svelte/attachments';\n *\n * \tconst props = {\n * \t\tclass: 'cool',\n * \t\tonclick: () => alert('clicked'),\n * \t\t[createAttachmentKey()]: (node) => {\n * \t\t\tnode.textContent = 'attached!';\n * \t\t}\n * \t};\n * </script>\n *\n * <button {...props}>click me</button>\n * ```\n * @since 5.29\n */\nexport function createAttachmentKey() {\n\treturn Symbol(ATTACHMENT_KEY);\n}\n\n/**\n * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n * It's useful if you want to start using attachments on components but you have actions provided by a library.\n *\n * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n * action function, not the argument itself.\n *\n * ```svelte\n * <!-- with an action -->\n * <div use:foo={bar}>...</div>\n *\n * <!-- with an attachment -->\n * <div {@attach fromAction(foo, () => bar)}>...</div>\n * ```\n * @template {EventTarget} E\n * @template {unknown} T\n * @overload\n * @param {Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>)} action The action function\n * @param {() => T} fn A function that returns the argument for the action\n * @returns {Attachment<E>}\n */\n/**\n * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n * It's useful if you want to start using attachments on components but you have actions provided by a library.\n *\n * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n * action function, not the argument itself.\n *\n * ```svelte\n * <!-- with an action -->\n * <div use:foo={bar}>...</div>\n *\n * <!-- with an attachment -->\n * <div {@attach fromAction(foo, () => bar)}>...</div>\n * ```\n * @template {EventTarget} E\n * @overload\n * @param {Action<E, void> | ((element: E) => void | ActionReturn<void>)} action The action function\n * @returns {Attachment<E>}\n */\n/**\n * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n * It's useful if you want to start using attachments on components but you have actions provided by a library.\n *\n * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n * action function, not the argument itself.\n *\n * ```svelte\n * <!-- with an action -->\n * <div use:foo={bar}>...</div>\n *\n * <!-- with an attachment -->\n * <div {@attach fromAction(foo, () => bar)}>...</div>\n * ```\n *\n * @template {EventTarget} E\n * @template {unknown} T\n * @param {Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>)} action The action function\n * @param {() => T} fn A function that returns the argument for the action\n * @returns {Attachment<E>}\n * @since 5.32\n */\nexport function fromAction(action, fn = /** @type {() => T} */ (noop)) {\n\treturn (element) => {\n\t\tconst { update, destroy } = untrack(() => action(element, fn()) ?? {});\n\n\t\tif (update) {\n\t\t\tvar ran = false;\n\t\t\trender_effect(() => {\n\t\t\t\tconst arg = fn();\n\t\t\t\tif (ran) update(arg);\n\t\t\t});\n\t\t\tran = true;\n\t\t}\n\n\t\tif (destroy) {\n\t\t\tteardown(destroy);\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/attachments/public.d.ts",
    "content": "/**\n * An [attachment](https://svelte.dev/docs/svelte/@attach) is a function that runs when an element is mounted\n * to the DOM, and optionally returns a function that is called when the element is later removed.\n *\n * It can be attached to an element with an `{@attach ...}` tag, or by spreading an object containing\n * a property created with [`createAttachmentKey`](https://svelte.dev/docs/svelte/svelte-attachments#createAttachmentKey).\n */\nexport interface Attachment<T extends EventTarget = Element> {\n\t(element: T): void | (() => void);\n}\n\nexport * from './index.js';\n"
  },
  {
    "path": "packages/svelte/src/compiler/errors.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { CompileDiagnostic } from './utils/compile_diagnostic.js';\n\n/** @typedef {{ start?: number, end?: number }} NodeLike */\nclass InternalCompileError extends Error {\n\tmessage = ''; // ensure this property is enumerable\n\t#diagnostic;\n\n\t/**\n\t * @param {string} code\n\t * @param {string} message\n\t * @param {[number, number] | undefined} position\n\t */\n\tconstructor(code, message, position) {\n\t\tsuper(message);\n\t\tthis.stack = ''; // avoid unnecessary noise; don't set it as a class property or it becomes enumerable\n\n\t\t// We want to extend from Error so that various bundler plugins properly handle it.\n\t\t// But we also want to share the same object shape with that of warnings, therefore\n\t\t// we create an instance of the shared class an copy over its properties.\n\t\tthis.#diagnostic = new CompileDiagnostic(code, message, position);\n\n\t\tObject.assign(this, this.#diagnostic);\n\t\tthis.name = 'CompileError';\n\t}\n\n\ttoString() {\n\t\treturn this.#diagnostic.toString();\n\t}\n\n\ttoJSON() {\n\t\treturn this.#diagnostic.toJSON();\n\t}\n}\n\n/**\n * @param {null | number | NodeLike} node\n * @param {string} code\n * @param {string} message\n * @returns {never}\n */\nfunction e(node, code, message) {\n\tconst start = typeof node === 'number' ? node : node?.start;\n\tconst end = typeof node === 'number' ? node : node?.end;\n\n\tthrow new InternalCompileError(code, message, start !== undefined ? [start, end ?? start] : undefined);\n}\n\n/**\n * Invalid compiler option: %details%\n * @param {null | number | NodeLike} node\n * @param {string} details\n * @returns {never}\n */\nexport function options_invalid_value(node, details) {\n\te(node, 'options_invalid_value', `Invalid compiler option: ${details}\\nhttps://svelte.dev/e/options_invalid_value`);\n}\n\n/**\n * Invalid compiler option: %details%\n * @param {null | number | NodeLike} node\n * @param {string} details\n * @returns {never}\n */\nexport function options_removed(node, details) {\n\te(node, 'options_removed', `Invalid compiler option: ${details}\\nhttps://svelte.dev/e/options_removed`);\n}\n\n/**\n * Unrecognised compiler option %keypath%\n * @param {null | number | NodeLike} node\n * @param {string} keypath\n * @returns {never}\n */\nexport function options_unrecognised(node, keypath) {\n\te(node, 'options_unrecognised', `Unrecognised compiler option ${keypath}\\nhttps://svelte.dev/e/options_unrecognised`);\n}\n\n/**\n * `$bindable()` can only be used inside a `$props()` declaration\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function bindable_invalid_location(node) {\n\te(node, 'bindable_invalid_location', `\\`$bindable()\\` can only be used inside a \\`$props()\\` declaration\\nhttps://svelte.dev/e/bindable_invalid_location`);\n}\n\n/**\n * Cannot assign to %thing%\n * @param {null | number | NodeLike} node\n * @param {string} thing\n * @returns {never}\n */\nexport function constant_assignment(node, thing) {\n\te(node, 'constant_assignment', `Cannot assign to ${thing}\\nhttps://svelte.dev/e/constant_assignment`);\n}\n\n/**\n * Cannot bind to %thing%\n * @param {null | number | NodeLike} node\n * @param {string} thing\n * @returns {never}\n */\nexport function constant_binding(node, thing) {\n\te(node, 'constant_binding', `Cannot bind to ${thing}\\nhttps://svelte.dev/e/constant_binding`);\n}\n\n/**\n * `%name%` has already been declared\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function declaration_duplicate(node, name) {\n\te(node, 'declaration_duplicate', `\\`${name}\\` has already been declared\\nhttps://svelte.dev/e/declaration_duplicate`);\n}\n\n/**\n * Cannot declare a variable with the same name as an import from `<script module>`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function declaration_duplicate_module_import(node) {\n\te(node, 'declaration_duplicate_module_import', `Cannot declare a variable with the same name as an import from \\`<script module>\\`\\nhttps://svelte.dev/e/declaration_duplicate_module_import`);\n}\n\n/**\n * Cannot export derived state from a module. To expose the current derived value, export a function returning its value\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function derived_invalid_export(node) {\n\te(node, 'derived_invalid_export', `Cannot export derived state from a module. To expose the current derived value, export a function returning its value\\nhttps://svelte.dev/e/derived_invalid_export`);\n}\n\n/**\n * The $ name is reserved, and cannot be used for variables and imports\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function dollar_binding_invalid(node) {\n\te(node, 'dollar_binding_invalid', `The $ name is reserved, and cannot be used for variables and imports\\nhttps://svelte.dev/e/dollar_binding_invalid`);\n}\n\n/**\n * The $ prefix is reserved, and cannot be used for variables and imports\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function dollar_prefix_invalid(node) {\n\te(node, 'dollar_prefix_invalid', `The $ prefix is reserved, and cannot be used for variables and imports\\nhttps://svelte.dev/e/dollar_prefix_invalid`);\n}\n\n/**\n * `%name%` has already been declared\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function duplicate_class_field(node, name) {\n\te(node, 'duplicate_class_field', `\\`${name}\\` has already been declared\\nhttps://svelte.dev/e/duplicate_class_field`);\n}\n\n/**\n * Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. `array[i] = value` instead of `entry = value`, or `bind:value={array[i]}` instead of `bind:value={entry}`)\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function each_item_invalid_assignment(node) {\n\te(node, 'each_item_invalid_assignment', `Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. \\`array[i] = value\\` instead of \\`entry = value\\`, or \\`bind:value={array[i]}\\` instead of \\`bind:value={entry}\\`)\\nhttps://svelte.dev/e/each_item_invalid_assignment`);\n}\n\n/**\n * `$effect()` can only be used as an expression statement\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function effect_invalid_placement(node) {\n\te(node, 'effect_invalid_placement', `\\`$effect()\\` can only be used as an expression statement\\nhttps://svelte.dev/e/effect_invalid_placement`);\n}\n\n/**\n * Cannot use `await` in deriveds and template expressions, or at the top level of a component, unless the `experimental.async` compiler option is `true`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function experimental_async(node) {\n\te(node, 'experimental_async', `Cannot use \\`await\\` in deriveds and template expressions, or at the top level of a component, unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async`);\n}\n\n/**\n * `%name%` is not defined\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function export_undefined(node, name) {\n\te(node, 'export_undefined', `\\`${name}\\` is not defined\\nhttps://svelte.dev/e/export_undefined`);\n}\n\n/**\n * `%name%` is an illegal variable name. To reference a global variable called `%name%`, use `globalThis.%name%`\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function global_reference_invalid(node, name) {\n\te(node, 'global_reference_invalid', `\\`${name}\\` is an illegal variable name. To reference a global variable called \\`${name}\\`, use \\`globalThis.${name}\\`\\nhttps://svelte.dev/e/global_reference_invalid`);\n}\n\n/**\n * `$host()` can only be used inside custom element component instances\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function host_invalid_placement(node) {\n\te(node, 'host_invalid_placement', `\\`$host()\\` can only be used inside custom element component instances\\nhttps://svelte.dev/e/host_invalid_placement`);\n}\n\n/**\n * Imports of `svelte/internal/*` are forbidden. It contains private runtime code which is subject to change without notice. If you're importing from `svelte/internal/*` to work around a limitation of Svelte, please open an issue at https://github.com/sveltejs/svelte and explain your use case\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function import_svelte_internal_forbidden(node) {\n\te(node, 'import_svelte_internal_forbidden', `Imports of \\`svelte/internal/*\\` are forbidden. It contains private runtime code which is subject to change without notice. If you're importing from \\`svelte/internal/*\\` to work around a limitation of Svelte, please open an issue at https://github.com/sveltejs/svelte and explain your use case\\nhttps://svelte.dev/e/import_svelte_internal_forbidden`);\n}\n\n/**\n * `$inspect.trace(...)` cannot be used inside a generator function\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function inspect_trace_generator(node) {\n\te(node, 'inspect_trace_generator', `\\`$inspect.trace(...)\\` cannot be used inside a generator function\\nhttps://svelte.dev/e/inspect_trace_generator`);\n}\n\n/**\n * `$inspect.trace(...)` must be the first statement of a function body\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function inspect_trace_invalid_placement(node) {\n\te(node, 'inspect_trace_invalid_placement', `\\`$inspect.trace(...)\\` must be the first statement of a function body\\nhttps://svelte.dev/e/inspect_trace_invalid_placement`);\n}\n\n/**\n * The arguments keyword cannot be used within the template or at the top level of a component\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function invalid_arguments_usage(node) {\n\te(node, 'invalid_arguments_usage', `The arguments keyword cannot be used within the template or at the top level of a component\\nhttps://svelte.dev/e/invalid_arguments_usage`);\n}\n\n/**\n * Cannot use `await` in deriveds and template expressions, or at the top level of a component, unless in runes mode\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function legacy_await_invalid(node) {\n\te(node, 'legacy_await_invalid', `Cannot use \\`await\\` in deriveds and template expressions, or at the top level of a component, unless in runes mode\\nhttps://svelte.dev/e/legacy_await_invalid`);\n}\n\n/**\n * Cannot use `export let` in runes mode — use `$props()` instead\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function legacy_export_invalid(node) {\n\te(node, 'legacy_export_invalid', `Cannot use \\`export let\\` in runes mode — use \\`$props()\\` instead\\nhttps://svelte.dev/e/legacy_export_invalid`);\n}\n\n/**\n * Cannot use `$$props` in runes mode\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function legacy_props_invalid(node) {\n\te(node, 'legacy_props_invalid', `Cannot use \\`$$props\\` in runes mode\\nhttps://svelte.dev/e/legacy_props_invalid`);\n}\n\n/**\n * `$:` is not allowed in runes mode, use `$derived` or `$effect` instead\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function legacy_reactive_statement_invalid(node) {\n\te(node, 'legacy_reactive_statement_invalid', `\\`$:\\` is not allowed in runes mode, use \\`$derived\\` or \\`$effect\\` instead\\nhttps://svelte.dev/e/legacy_reactive_statement_invalid`);\n}\n\n/**\n * Cannot use `$$restProps` in runes mode\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function legacy_rest_props_invalid(node) {\n\te(node, 'legacy_rest_props_invalid', `Cannot use \\`$$restProps\\` in runes mode\\nhttps://svelte.dev/e/legacy_rest_props_invalid`);\n}\n\n/**\n * A component cannot have a default export\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function module_illegal_default_export(node) {\n\te(node, 'module_illegal_default_export', `A component cannot have a default export\\nhttps://svelte.dev/e/module_illegal_default_export`);\n}\n\n/**\n * Cannot use `%rune%()` more than once\n * @param {null | number | NodeLike} node\n * @param {string} rune\n * @returns {never}\n */\nexport function props_duplicate(node, rune) {\n\te(node, 'props_duplicate', `Cannot use \\`${rune}()\\` more than once\\nhttps://svelte.dev/e/props_duplicate`);\n}\n\n/**\n * `$props.id()` can only be used at the top level of components as a variable declaration initializer\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function props_id_invalid_placement(node) {\n\te(node, 'props_id_invalid_placement', `\\`$props.id()\\` can only be used at the top level of components as a variable declaration initializer\\nhttps://svelte.dev/e/props_id_invalid_placement`);\n}\n\n/**\n * Declaring or accessing a prop starting with `$$` is illegal (they are reserved for Svelte internals)\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function props_illegal_name(node) {\n\te(node, 'props_illegal_name', `Declaring or accessing a prop starting with \\`$$\\` is illegal (they are reserved for Svelte internals)\\nhttps://svelte.dev/e/props_illegal_name`);\n}\n\n/**\n * `$props()` can only be used with an object destructuring pattern\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function props_invalid_identifier(node) {\n\te(node, 'props_invalid_identifier', `\\`$props()\\` can only be used with an object destructuring pattern\\nhttps://svelte.dev/e/props_invalid_identifier`);\n}\n\n/**\n * `$props()` assignment must not contain nested properties or computed keys\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function props_invalid_pattern(node) {\n\te(node, 'props_invalid_pattern', `\\`$props()\\` assignment must not contain nested properties or computed keys\\nhttps://svelte.dev/e/props_invalid_pattern`);\n}\n\n/**\n * `$props()` can only be used at the top level of components as a variable declaration initializer\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function props_invalid_placement(node) {\n\te(node, 'props_invalid_placement', `\\`$props()\\` can only be used at the top level of components as a variable declaration initializer\\nhttps://svelte.dev/e/props_invalid_placement`);\n}\n\n/**\n * Cyclical dependency detected: %cycle%\n * @param {null | number | NodeLike} node\n * @param {string} cycle\n * @returns {never}\n */\nexport function reactive_declaration_cycle(node, cycle) {\n\te(node, 'reactive_declaration_cycle', `Cyclical dependency detected: ${cycle}\\nhttps://svelte.dev/e/reactive_declaration_cycle`);\n}\n\n/**\n * `%rune%` cannot be called with arguments\n * @param {null | number | NodeLike} node\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_invalid_arguments(node, rune) {\n\te(node, 'rune_invalid_arguments', `\\`${rune}\\` cannot be called with arguments\\nhttps://svelte.dev/e/rune_invalid_arguments`);\n}\n\n/**\n * `%rune%` must be called with %args%\n * @param {null | number | NodeLike} node\n * @param {string} rune\n * @param {string} args\n * @returns {never}\n */\nexport function rune_invalid_arguments_length(node, rune, args) {\n\te(node, 'rune_invalid_arguments_length', `\\`${rune}\\` must be called with ${args}\\nhttps://svelte.dev/e/rune_invalid_arguments_length`);\n}\n\n/**\n * Cannot access a computed property of a rune\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function rune_invalid_computed_property(node) {\n\te(node, 'rune_invalid_computed_property', `Cannot access a computed property of a rune\\nhttps://svelte.dev/e/rune_invalid_computed_property`);\n}\n\n/**\n * `%name%` is not a valid rune\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function rune_invalid_name(node, name) {\n\te(node, 'rune_invalid_name', `\\`${name}\\` is not a valid rune\\nhttps://svelte.dev/e/rune_invalid_name`);\n}\n\n/**\n * `%rune%` cannot be called with a spread argument\n * @param {null | number | NodeLike} node\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_invalid_spread(node, rune) {\n\te(node, 'rune_invalid_spread', `\\`${rune}\\` cannot be called with a spread argument\\nhttps://svelte.dev/e/rune_invalid_spread`);\n}\n\n/**\n * Cannot use `%rune%` rune in non-runes mode\n * @param {null | number | NodeLike} node\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_invalid_usage(node, rune) {\n\te(node, 'rune_invalid_usage', `Cannot use \\`${rune}\\` rune in non-runes mode\\nhttps://svelte.dev/e/rune_invalid_usage`);\n}\n\n/**\n * Cannot use rune without parentheses\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function rune_missing_parentheses(node) {\n\te(node, 'rune_missing_parentheses', `Cannot use rune without parentheses\\nhttps://svelte.dev/e/rune_missing_parentheses`);\n}\n\n/**\n * The `%name%` rune has been removed\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function rune_removed(node, name) {\n\te(node, 'rune_removed', `The \\`${name}\\` rune has been removed\\nhttps://svelte.dev/e/rune_removed`);\n}\n\n/**\n * `%name%` is now `%replacement%`\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string} replacement\n * @returns {never}\n */\nexport function rune_renamed(node, name, replacement) {\n\te(node, 'rune_renamed', `\\`${name}\\` is now \\`${replacement}\\`\\nhttps://svelte.dev/e/rune_renamed`);\n}\n\n/**\n * %name% cannot be used in runes mode\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function runes_mode_invalid_import(node, name) {\n\te(node, 'runes_mode_invalid_import', `${name} cannot be used in runes mode\\nhttps://svelte.dev/e/runes_mode_invalid_import`);\n}\n\n/**\n * An exported snippet can only reference things declared in a `<script module>`, or other exportable snippets\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function snippet_invalid_export(node) {\n\te(node, 'snippet_invalid_export', `An exported snippet can only reference things declared in a \\`<script module>\\`, or other exportable snippets\\nhttps://svelte.dev/e/snippet_invalid_export`);\n}\n\n/**\n * Cannot reassign or bind to snippet parameter\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function snippet_parameter_assignment(node) {\n\te(node, 'snippet_parameter_assignment', `Cannot reassign or bind to snippet parameter\\nhttps://svelte.dev/e/snippet_parameter_assignment`);\n}\n\n/**\n * `%name%` has already been declared on this class\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function state_field_duplicate(node, name) {\n\te(node, 'state_field_duplicate', `\\`${name}\\` has already been declared on this class\\nhttps://svelte.dev/e/state_field_duplicate`);\n}\n\n/**\n * Cannot assign to a state field before its declaration\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function state_field_invalid_assignment(node) {\n\te(node, 'state_field_invalid_assignment', `Cannot assign to a state field before its declaration\\nhttps://svelte.dev/e/state_field_invalid_assignment`);\n}\n\n/**\n * Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function state_invalid_export(node) {\n\te(node, 'state_invalid_export', `Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\\nhttps://svelte.dev/e/state_invalid_export`);\n}\n\n/**\n * `%rune%(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\n * @param {null | number | NodeLike} node\n * @param {string} rune\n * @returns {never}\n */\nexport function state_invalid_placement(node, rune) {\n\te(node, 'state_invalid_placement', `\\`${rune}(...)\\` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\\nhttps://svelte.dev/e/state_invalid_placement`);\n}\n\n/**\n * Cannot subscribe to stores that are not declared at the top level of the component\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function store_invalid_scoped_subscription(node) {\n\te(node, 'store_invalid_scoped_subscription', `Cannot subscribe to stores that are not declared at the top level of the component\\nhttps://svelte.dev/e/store_invalid_scoped_subscription`);\n}\n\n/**\n * Cannot reference store value inside `<script module>`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function store_invalid_subscription(node) {\n\te(node, 'store_invalid_subscription', `Cannot reference store value inside \\`<script module>\\`\\nhttps://svelte.dev/e/store_invalid_subscription`);\n}\n\n/**\n * Cannot reference store value outside a `.svelte` file\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function store_invalid_subscription_module(node) {\n\te(node, 'store_invalid_subscription_module', `Cannot reference store value outside a \\`.svelte\\` file\\nhttps://svelte.dev/e/store_invalid_subscription_module`);\n}\n\n/**\n * TypeScript language features like %feature% are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\n * @param {null | number | NodeLike} node\n * @param {string} feature\n * @returns {never}\n */\nexport function typescript_invalid_feature(node, feature) {\n\te(node, 'typescript_invalid_feature', `TypeScript language features like ${feature} are not natively supported, and their use is generally discouraged. Outside of \\`<script>\\` tags, these features are not supported. For use within \\`<script>\\` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using \\`vitePreprocess\\`, make sure to specifically enable preprocessing script tags (\\`vitePreprocess({ script: true })\\`)\\nhttps://svelte.dev/e/typescript_invalid_feature`);\n}\n\n/**\n * Declaration cannot be empty\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_empty_declaration(node) {\n\te(node, 'css_empty_declaration', `Declaration cannot be empty\\nhttps://svelte.dev/e/css_empty_declaration`);\n}\n\n/**\n * Expected a valid CSS identifier\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_expected_identifier(node) {\n\te(node, 'css_expected_identifier', `Expected a valid CSS identifier\\nhttps://svelte.dev/e/css_expected_identifier`);\n}\n\n/**\n * A `:global` selector cannot follow a `%name%` combinator\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function css_global_block_invalid_combinator(node, name) {\n\te(node, 'css_global_block_invalid_combinator', `A \\`:global\\` selector cannot follow a \\`${name}\\` combinator\\nhttps://svelte.dev/e/css_global_block_invalid_combinator`);\n}\n\n/**\n * A top-level `:global {...}` block can only contain rules, not declarations\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_block_invalid_declaration(node) {\n\te(node, 'css_global_block_invalid_declaration', `A top-level \\`:global {...}\\` block can only contain rules, not declarations\\nhttps://svelte.dev/e/css_global_block_invalid_declaration`);\n}\n\n/**\n * A `:global` selector cannot be part of a selector list with entries that don't contain `:global`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_block_invalid_list(node) {\n\te(node, 'css_global_block_invalid_list', `A \\`:global\\` selector cannot be part of a selector list with entries that don't contain \\`:global\\`\\nhttps://svelte.dev/e/css_global_block_invalid_list`);\n}\n\n/**\n * A `:global` selector cannot modify an existing selector\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_block_invalid_modifier(node) {\n\te(node, 'css_global_block_invalid_modifier', `A \\`:global\\` selector cannot modify an existing selector\\nhttps://svelte.dev/e/css_global_block_invalid_modifier`);\n}\n\n/**\n * A `:global` selector can only be modified if it is a descendant of other selectors\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_block_invalid_modifier_start(node) {\n\te(node, 'css_global_block_invalid_modifier_start', `A \\`:global\\` selector can only be modified if it is a descendant of other selectors\\nhttps://svelte.dev/e/css_global_block_invalid_modifier_start`);\n}\n\n/**\n * A `:global` selector cannot be inside a pseudoclass\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_block_invalid_placement(node) {\n\te(node, 'css_global_block_invalid_placement', `A \\`:global\\` selector cannot be inside a pseudoclass\\nhttps://svelte.dev/e/css_global_block_invalid_placement`);\n}\n\n/**\n * `:global(...)` can be at the start or end of a selector sequence, but not in the middle\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_invalid_placement(node) {\n\te(node, 'css_global_invalid_placement', `\\`:global(...)\\` can be at the start or end of a selector sequence, but not in the middle\\nhttps://svelte.dev/e/css_global_invalid_placement`);\n}\n\n/**\n * `:global(...)` must contain exactly one selector\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_invalid_selector(node) {\n\te(node, 'css_global_invalid_selector', `\\`:global(...)\\` must contain exactly one selector\\nhttps://svelte.dev/e/css_global_invalid_selector`);\n}\n\n/**\n * `:global(...)` must not contain type or universal selectors when used in a compound selector\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_global_invalid_selector_list(node) {\n\te(node, 'css_global_invalid_selector_list', `\\`:global(...)\\` must not contain type or universal selectors when used in a compound selector\\nhttps://svelte.dev/e/css_global_invalid_selector_list`);\n}\n\n/**\n * Nesting selectors can only be used inside a rule or as the first selector inside a lone `:global(...)`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_nesting_selector_invalid_placement(node) {\n\te(node, 'css_nesting_selector_invalid_placement', `Nesting selectors can only be used inside a rule or as the first selector inside a lone \\`:global(...)\\`\\nhttps://svelte.dev/e/css_nesting_selector_invalid_placement`);\n}\n\n/**\n * Invalid selector\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_selector_invalid(node) {\n\te(node, 'css_selector_invalid', `Invalid selector\\nhttps://svelte.dev/e/css_selector_invalid`);\n}\n\n/**\n * `:global(...)` must not be followed by a type selector\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function css_type_selector_invalid_placement(node) {\n\te(node, 'css_type_selector_invalid_placement', `\\`:global(...)\\` must not be followed by a type selector\\nhttps://svelte.dev/e/css_type_selector_invalid_placement`);\n}\n\n/**\n * An element can only have one 'animate' directive\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function animation_duplicate(node) {\n\te(node, 'animation_duplicate', `An element can only have one 'animate' directive\\nhttps://svelte.dev/e/animation_duplicate`);\n}\n\n/**\n * An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function animation_invalid_placement(node) {\n\te(node, 'animation_invalid_placement', `An element that uses the \\`animate:\\` directive must be the only child of a keyed \\`{#each ...}\\` block\\nhttps://svelte.dev/e/animation_invalid_placement`);\n}\n\n/**\n * An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block. Did you forget to add a key to your each block?\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function animation_missing_key(node) {\n\te(node, 'animation_missing_key', `An element that uses the \\`animate:\\` directive must be the only child of a keyed \\`{#each ...}\\` block. Did you forget to add a key to your each block?\\nhttps://svelte.dev/e/animation_missing_key`);\n}\n\n/**\n * 'contenteditable' attribute cannot be dynamic if element uses two-way binding\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_contenteditable_dynamic(node) {\n\te(node, 'attribute_contenteditable_dynamic', `'contenteditable' attribute cannot be dynamic if element uses two-way binding\\nhttps://svelte.dev/e/attribute_contenteditable_dynamic`);\n}\n\n/**\n * 'contenteditable' attribute is required for textContent, innerHTML and innerText two-way bindings\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_contenteditable_missing(node) {\n\te(node, 'attribute_contenteditable_missing', `'contenteditable' attribute is required for textContent, innerHTML and innerText two-way bindings\\nhttps://svelte.dev/e/attribute_contenteditable_missing`);\n}\n\n/**\n * Attributes need to be unique\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_duplicate(node) {\n\te(node, 'attribute_duplicate', `Attributes need to be unique\\nhttps://svelte.dev/e/attribute_duplicate`);\n}\n\n/**\n * Attribute shorthand cannot be empty\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_empty_shorthand(node) {\n\te(node, 'attribute_empty_shorthand', `Attribute shorthand cannot be empty\\nhttps://svelte.dev/e/attribute_empty_shorthand`);\n}\n\n/**\n * Event attribute must be a JavaScript expression, not a string\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_invalid_event_handler(node) {\n\te(node, 'attribute_invalid_event_handler', `Event attribute must be a JavaScript expression, not a string\\nhttps://svelte.dev/e/attribute_invalid_event_handler`);\n}\n\n/**\n * 'multiple' attribute must be static if select uses two-way binding\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_invalid_multiple(node) {\n\te(node, 'attribute_invalid_multiple', `'multiple' attribute must be static if select uses two-way binding\\nhttps://svelte.dev/e/attribute_invalid_multiple`);\n}\n\n/**\n * '%name%' is not a valid attribute name\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function attribute_invalid_name(node, name) {\n\te(node, 'attribute_invalid_name', `'${name}' is not a valid attribute name\\nhttps://svelte.dev/e/attribute_invalid_name`);\n}\n\n/**\n * Comma-separated expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_invalid_sequence_expression(node) {\n\te(node, 'attribute_invalid_sequence_expression', `Comma-separated expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses\\nhttps://svelte.dev/e/attribute_invalid_sequence_expression`);\n}\n\n/**\n * 'type' attribute must be a static text value if input uses two-way binding\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_invalid_type(node) {\n\te(node, 'attribute_invalid_type', `'type' attribute must be a static text value if input uses two-way binding\\nhttps://svelte.dev/e/attribute_invalid_type`);\n}\n\n/**\n * Attribute values containing `{...}` must be enclosed in quote marks, unless the value only contains the expression\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function attribute_unquoted_sequence(node) {\n\te(node, 'attribute_unquoted_sequence', `Attribute values containing \\`{...}\\` must be enclosed in quote marks, unless the value only contains the expression\\nhttps://svelte.dev/e/attribute_unquoted_sequence`);\n}\n\n/**\n * `bind:group` can only bind to an Identifier or MemberExpression\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function bind_group_invalid_expression(node) {\n\te(node, 'bind_group_invalid_expression', `\\`bind:group\\` can only bind to an Identifier or MemberExpression\\nhttps://svelte.dev/e/bind_group_invalid_expression`);\n}\n\n/**\n * Cannot `bind:group` to a snippet parameter\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function bind_group_invalid_snippet_parameter(node) {\n\te(node, 'bind_group_invalid_snippet_parameter', `Cannot \\`bind:group\\` to a snippet parameter\\nhttps://svelte.dev/e/bind_group_invalid_snippet_parameter`);\n}\n\n/**\n * Can only bind to an Identifier or MemberExpression or a `{get, set}` pair\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function bind_invalid_expression(node) {\n\te(node, 'bind_invalid_expression', `Can only bind to an Identifier or MemberExpression or a \\`{get, set}\\` pair\\nhttps://svelte.dev/e/bind_invalid_expression`);\n}\n\n/**\n * `bind:%name%` is not a valid binding. %explanation%\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string | undefined | null} [explanation]\n * @returns {never}\n */\nexport function bind_invalid_name(node, name, explanation) {\n\te(node, 'bind_invalid_name', `${explanation\n\t\t? `\\`bind:${name}\\` is not a valid binding. ${explanation}`\n\t\t: `\\`bind:${name}\\` is not a valid binding`}\\nhttps://svelte.dev/e/bind_invalid_name`);\n}\n\n/**\n * `bind:%name%={get, set}` must not have surrounding parentheses\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_parens(node, name) {\n\te(node, 'bind_invalid_parens', `\\`bind:${name}={get, set}\\` must not have surrounding parentheses\\nhttps://svelte.dev/e/bind_invalid_parens`);\n}\n\n/**\n * `bind:%name%` can only be used with %elements%\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string} elements\n * @returns {never}\n */\nexport function bind_invalid_target(node, name, elements) {\n\te(node, 'bind_invalid_target', `\\`bind:${name}\\` can only be used with ${elements}\\nhttps://svelte.dev/e/bind_invalid_target`);\n}\n\n/**\n * Can only bind to state or props\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function bind_invalid_value(node) {\n\te(node, 'bind_invalid_value', `Can only bind to state or props\\nhttps://svelte.dev/e/bind_invalid_value`);\n}\n\n/**\n * %name% cannot appear more than once within a block\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function block_duplicate_clause(node, name) {\n\te(node, 'block_duplicate_clause', `${name} cannot appear more than once within a block\\nhttps://svelte.dev/e/block_duplicate_clause`);\n}\n\n/**\n * {:...} block is invalid at this position (did you forget to close the preceding element or block?)\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function block_invalid_continuation_placement(node) {\n\te(node, 'block_invalid_continuation_placement', `{:...} block is invalid at this position (did you forget to close the preceding element or block?)\\nhttps://svelte.dev/e/block_invalid_continuation_placement`);\n}\n\n/**\n * 'elseif' should be 'else if'\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function block_invalid_elseif(node) {\n\te(node, 'block_invalid_elseif', `'elseif' should be 'else if'\\nhttps://svelte.dev/e/block_invalid_elseif`);\n}\n\n/**\n * {#%name% ...} block cannot be %location%\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string} location\n * @returns {never}\n */\nexport function block_invalid_placement(node, name, location) {\n\te(node, 'block_invalid_placement', `{#${name} ...} block cannot be ${location}\\nhttps://svelte.dev/e/block_invalid_placement`);\n}\n\n/**\n * Block was left open\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function block_unclosed(node) {\n\te(node, 'block_unclosed', `Block was left open\\nhttps://svelte.dev/e/block_unclosed`);\n}\n\n/**\n * Expected a `%character%` character immediately following the opening bracket\n * @param {null | number | NodeLike} node\n * @param {string} character\n * @returns {never}\n */\nexport function block_unexpected_character(node, character) {\n\te(node, 'block_unexpected_character', `Expected a \\`${character}\\` character immediately following the opening bracket\\nhttps://svelte.dev/e/block_unexpected_character`);\n}\n\n/**\n * Unexpected block closing tag\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function block_unexpected_close(node) {\n\te(node, 'block_unexpected_close', `Unexpected block closing tag\\nhttps://svelte.dev/e/block_unexpected_close`);\n}\n\n/**\n * This type of directive is not valid on components\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function component_invalid_directive(node) {\n\te(node, 'component_invalid_directive', `This type of directive is not valid on components\\nhttps://svelte.dev/e/component_invalid_directive`);\n}\n\n/**\n * Cyclical dependency detected: %cycle%\n * @param {null | number | NodeLike} node\n * @param {string} cycle\n * @returns {never}\n */\nexport function const_tag_cycle(node, cycle) {\n\te(node, 'const_tag_cycle', `Cyclical dependency detected: ${cycle}\\nhttps://svelte.dev/e/const_tag_cycle`);\n}\n\n/**\n * {@const ...} must consist of a single variable declaration\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function const_tag_invalid_expression(node) {\n\te(node, 'const_tag_invalid_expression', `{@const ...} must consist of a single variable declaration\\nhttps://svelte.dev/e/const_tag_invalid_expression`);\n}\n\n/**\n * `{@const}` must be the immediate child of `{#snippet}`, `{#if}`, `{:else if}`, `{:else}`, `{#each}`, `{:then}`, `{:catch}`, `<svelte:fragment>`, `<svelte:boundary>` or `<Component>`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function const_tag_invalid_placement(node) {\n\te(node, 'const_tag_invalid_placement', `\\`{@const}\\` must be the immediate child of \\`{#snippet}\\`, \\`{#if}\\`, \\`{:else if}\\`, \\`{:else}\\`, \\`{#each}\\`, \\`{:then}\\`, \\`{:catch}\\`, \\`<svelte:fragment>\\`, \\`<svelte:boundary>\\` or \\`<Component>\\`\\nhttps://svelte.dev/e/const_tag_invalid_placement`);\n}\n\n/**\n * The `{@const %name% = ...}` declaration is not available in this snippet\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function const_tag_invalid_reference(node, name) {\n\te(node, 'const_tag_invalid_reference', `The \\`{@const ${name} = ...}\\` declaration is not available in this snippet\\nhttps://svelte.dev/e/const_tag_invalid_reference`);\n}\n\n/**\n * {@debug ...} arguments must be identifiers, not arbitrary expressions\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function debug_tag_invalid_arguments(node) {\n\te(node, 'debug_tag_invalid_arguments', `{@debug ...} arguments must be identifiers, not arbitrary expressions\\nhttps://svelte.dev/e/debug_tag_invalid_arguments`);\n}\n\n/**\n * Directive value must be a JavaScript expression enclosed in curly braces\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function directive_invalid_value(node) {\n\te(node, 'directive_invalid_value', `Directive value must be a JavaScript expression enclosed in curly braces\\nhttps://svelte.dev/e/directive_invalid_value`);\n}\n\n/**\n * `%type%` name cannot be empty\n * @param {null | number | NodeLike} node\n * @param {string} type\n * @returns {never}\n */\nexport function directive_missing_name(node, type) {\n\te(node, 'directive_missing_name', `\\`${type}\\` name cannot be empty\\nhttps://svelte.dev/e/directive_missing_name`);\n}\n\n/**\n * An `{#each ...}` block without an `as` clause cannot have a key\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function each_key_without_as(node) {\n\te(node, 'each_key_without_as', `An \\`{#each ...}\\` block without an \\`as\\` clause cannot have a key\\nhttps://svelte.dev/e/each_key_without_as`);\n}\n\n/**\n * `</%name%>` attempted to close an element that was not open\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function element_invalid_closing_tag(node, name) {\n\te(node, 'element_invalid_closing_tag', `\\`</${name}>\\` attempted to close an element that was not open\\nhttps://svelte.dev/e/element_invalid_closing_tag`);\n}\n\n/**\n * `</%name%>` attempted to close element that was already automatically closed by `<%reason%>` (cannot nest `<%reason%>` inside `<%name%>`)\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string} reason\n * @returns {never}\n */\nexport function element_invalid_closing_tag_autoclosed(node, name, reason) {\n\te(node, 'element_invalid_closing_tag_autoclosed', `\\`</${name}>\\` attempted to close element that was already automatically closed by \\`<${reason}>\\` (cannot nest \\`<${reason}>\\` inside \\`<${name}>\\`)\\nhttps://svelte.dev/e/element_invalid_closing_tag_autoclosed`);\n}\n\n/**\n * `<%name%>` was left open\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function element_unclosed(node, name) {\n\te(node, 'element_unclosed', `\\`<${name}>\\` was left open\\nhttps://svelte.dev/e/element_unclosed`);\n}\n\n/**\n * Event modifiers other than 'once' can only be used on DOM elements\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function event_handler_invalid_component_modifier(node) {\n\te(node, 'event_handler_invalid_component_modifier', `Event modifiers other than 'once' can only be used on DOM elements\\nhttps://svelte.dev/e/event_handler_invalid_component_modifier`);\n}\n\n/**\n * Valid event modifiers are %list%\n * @param {null | number | NodeLike} node\n * @param {string} list\n * @returns {never}\n */\nexport function event_handler_invalid_modifier(node, list) {\n\te(node, 'event_handler_invalid_modifier', `Valid event modifiers are ${list}\\nhttps://svelte.dev/e/event_handler_invalid_modifier`);\n}\n\n/**\n * The '%modifier1%' and '%modifier2%' modifiers cannot be used together\n * @param {null | number | NodeLike} node\n * @param {string} modifier1\n * @param {string} modifier2\n * @returns {never}\n */\nexport function event_handler_invalid_modifier_combination(node, modifier1, modifier2) {\n\te(node, 'event_handler_invalid_modifier_combination', `The '${modifier1}' and '${modifier2}' modifiers cannot be used together\\nhttps://svelte.dev/e/event_handler_invalid_modifier_combination`);\n}\n\n/**\n * Expected attribute value\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function expected_attribute_value(node) {\n\te(node, 'expected_attribute_value', `Expected attribute value\\nhttps://svelte.dev/e/expected_attribute_value`);\n}\n\n/**\n * Expected 'if', 'each', 'await', 'key' or 'snippet'\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function expected_block_type(node) {\n\te(node, 'expected_block_type', `Expected 'if', 'each', 'await', 'key' or 'snippet'\\nhttps://svelte.dev/e/expected_block_type`);\n}\n\n/**\n * Expected an identifier\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function expected_identifier(node) {\n\te(node, 'expected_identifier', `Expected an identifier\\nhttps://svelte.dev/e/expected_identifier`);\n}\n\n/**\n * Expected identifier or destructure pattern\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function expected_pattern(node) {\n\te(node, 'expected_pattern', `Expected identifier or destructure pattern\\nhttps://svelte.dev/e/expected_pattern`);\n}\n\n/**\n * Expected 'html', 'render', 'attach', 'const', or 'debug'\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function expected_tag(node) {\n\te(node, 'expected_tag', `Expected 'html', 'render', 'attach', 'const', or 'debug'\\nhttps://svelte.dev/e/expected_tag`);\n}\n\n/**\n * Expected token %token%\n * @param {null | number | NodeLike} node\n * @param {string} token\n * @returns {never}\n */\nexport function expected_token(node, token) {\n\te(node, 'expected_token', `Expected token ${token}\\nhttps://svelte.dev/e/expected_token`);\n}\n\n/**\n * Expected whitespace\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function expected_whitespace(node) {\n\te(node, 'expected_whitespace', `Expected whitespace\\nhttps://svelte.dev/e/expected_whitespace`);\n}\n\n/**\n * `use:`, `transition:` and `animate:` directives, attachments and bindings do not support await expressions\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function illegal_await_expression(node) {\n\te(node, 'illegal_await_expression', `\\`use:\\`, \\`transition:\\` and \\`animate:\\` directives, attachments and bindings do not support await expressions\\nhttps://svelte.dev/e/illegal_await_expression`);\n}\n\n/**\n * `<%name%>` does not support non-event attributes or spread attributes\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function illegal_element_attribute(node, name) {\n\te(node, 'illegal_element_attribute', `\\`<${name}>\\` does not support non-event attributes or spread attributes\\nhttps://svelte.dev/e/illegal_element_attribute`);\n}\n\n/**\n * %message%\n * @param {null | number | NodeLike} node\n * @param {string} message\n * @returns {never}\n */\nexport function js_parse_error(node, message) {\n\te(node, 'js_parse_error', `${message}\\nhttps://svelte.dev/e/js_parse_error`);\n}\n\n/**\n * `let:` directive at invalid position\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function let_directive_invalid_placement(node) {\n\te(node, 'let_directive_invalid_placement', `\\`let:\\` directive at invalid position\\nhttps://svelte.dev/e/let_directive_invalid_placement`);\n}\n\n/**\n * Mixing old (on:%name%) and new syntaxes for event handling is not allowed. Use only the on%name% syntax\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function mixed_event_handler_syntaxes(node, name) {\n\te(node, 'mixed_event_handler_syntaxes', `Mixing old (on:${name}) and new syntaxes for event handling is not allowed. Use only the on${name} syntax\\nhttps://svelte.dev/e/mixed_event_handler_syntaxes`);\n}\n\n/**\n * %message%. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\n * @param {null | number | NodeLike} node\n * @param {string} message\n * @returns {never}\n */\nexport function node_invalid_placement(node, message) {\n\te(node, 'node_invalid_placement', `${message}. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\\nhttps://svelte.dev/e/node_invalid_placement`);\n}\n\n/**\n * Calling a snippet function using apply, bind or call is not allowed\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function render_tag_invalid_call_expression(node) {\n\te(node, 'render_tag_invalid_call_expression', `Calling a snippet function using apply, bind or call is not allowed\\nhttps://svelte.dev/e/render_tag_invalid_call_expression`);\n}\n\n/**\n * `{@render ...}` tags can only contain call expressions\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function render_tag_invalid_expression(node) {\n\te(node, 'render_tag_invalid_expression', `\\`{@render ...}\\` tags can only contain call expressions\\nhttps://svelte.dev/e/render_tag_invalid_expression`);\n}\n\n/**\n * cannot use spread arguments in `{@render ...}` tags\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function render_tag_invalid_spread_argument(node) {\n\te(node, 'render_tag_invalid_spread_argument', `cannot use spread arguments in \\`{@render ...}\\` tags\\nhttps://svelte.dev/e/render_tag_invalid_spread_argument`);\n}\n\n/**\n * A component can have a single top-level `<script>` element and/or a single top-level `<script module>` element\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function script_duplicate(node) {\n\te(node, 'script_duplicate', `A component can have a single top-level \\`<script>\\` element and/or a single top-level \\`<script module>\\` element\\nhttps://svelte.dev/e/script_duplicate`);\n}\n\n/**\n * If the `%name%` attribute is supplied, it must be a boolean attribute\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function script_invalid_attribute_value(node, name) {\n\te(node, 'script_invalid_attribute_value', `If the \\`${name}\\` attribute is supplied, it must be a boolean attribute\\nhttps://svelte.dev/e/script_invalid_attribute_value`);\n}\n\n/**\n * If the context attribute is supplied, its value must be \"module\"\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function script_invalid_context(node) {\n\te(node, 'script_invalid_context', `If the context attribute is supplied, its value must be \"module\"\\nhttps://svelte.dev/e/script_invalid_context`);\n}\n\n/**\n * The `%name%` attribute is reserved and cannot be used\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function script_reserved_attribute(node, name) {\n\te(node, 'script_reserved_attribute', `The \\`${name}\\` attribute is reserved and cannot be used\\nhttps://svelte.dev/e/script_reserved_attribute`);\n}\n\n/**\n * Duplicate slot name '%name%' in <%component%>\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string} component\n * @returns {never}\n */\nexport function slot_attribute_duplicate(node, name, component) {\n\te(node, 'slot_attribute_duplicate', `Duplicate slot name '${name}' in <${component}>\\nhttps://svelte.dev/e/slot_attribute_duplicate`);\n}\n\n/**\n * slot attribute must be a static value\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_attribute_invalid(node) {\n\te(node, 'slot_attribute_invalid', `slot attribute must be a static value\\nhttps://svelte.dev/e/slot_attribute_invalid`);\n}\n\n/**\n * Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_attribute_invalid_placement(node) {\n\te(node, 'slot_attribute_invalid_placement', `Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\\nhttps://svelte.dev/e/slot_attribute_invalid_placement`);\n}\n\n/**\n * Found default slot content alongside an explicit slot=\"default\"\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_default_duplicate(node) {\n\te(node, 'slot_default_duplicate', `Found default slot content alongside an explicit slot=\"default\"\\nhttps://svelte.dev/e/slot_default_duplicate`);\n}\n\n/**\n * `<slot>` can only receive attributes and (optionally) let directives\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_element_invalid_attribute(node) {\n\te(node, 'slot_element_invalid_attribute', `\\`<slot>\\` can only receive attributes and (optionally) let directives\\nhttps://svelte.dev/e/slot_element_invalid_attribute`);\n}\n\n/**\n * slot attribute must be a static value\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_element_invalid_name(node) {\n\te(node, 'slot_element_invalid_name', `slot attribute must be a static value\\nhttps://svelte.dev/e/slot_element_invalid_name`);\n}\n\n/**\n * `default` is a reserved word — it cannot be used as a slot name\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_element_invalid_name_default(node) {\n\te(node, 'slot_element_invalid_name_default', `\\`default\\` is a reserved word — it cannot be used as a slot name\\nhttps://svelte.dev/e/slot_element_invalid_name_default`);\n}\n\n/**\n * Cannot use `<slot>` syntax and `{@render ...}` tags in the same component. Migrate towards `{@render ...}` tags completely\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function slot_snippet_conflict(node) {\n\te(node, 'slot_snippet_conflict', `Cannot use \\`<slot>\\` syntax and \\`{@render ...}\\` tags in the same component. Migrate towards \\`{@render ...}\\` tags completely\\nhttps://svelte.dev/e/slot_snippet_conflict`);\n}\n\n/**\n * Cannot use explicit children snippet at the same time as implicit children content. Remove either the non-whitespace content or the children snippet block\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function snippet_conflict(node) {\n\te(node, 'snippet_conflict', `Cannot use explicit children snippet at the same time as implicit children content. Remove either the non-whitespace content or the children snippet block\\nhttps://svelte.dev/e/snippet_conflict`);\n}\n\n/**\n * Snippets do not support rest parameters; use an array instead\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function snippet_invalid_rest_parameter(node) {\n\te(node, 'snippet_invalid_rest_parameter', `Snippets do not support rest parameters; use an array instead\\nhttps://svelte.dev/e/snippet_invalid_rest_parameter`);\n}\n\n/**\n * This snippet is shadowing the prop `%prop%` with the same name\n * @param {null | number | NodeLike} node\n * @param {string} prop\n * @returns {never}\n */\nexport function snippet_shadowing_prop(node, prop) {\n\te(node, 'snippet_shadowing_prop', `This snippet is shadowing the prop \\`${prop}\\` with the same name\\nhttps://svelte.dev/e/snippet_shadowing_prop`);\n}\n\n/**\n * `style:` directive can only use the `important` modifier\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function style_directive_invalid_modifier(node) {\n\te(node, 'style_directive_invalid_modifier', `\\`style:\\` directive can only use the \\`important\\` modifier\\nhttps://svelte.dev/e/style_directive_invalid_modifier`);\n}\n\n/**\n * A component can have a single top-level `<style>` element\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function style_duplicate(node) {\n\te(node, 'style_duplicate', `A component can have a single top-level \\`<style>\\` element\\nhttps://svelte.dev/e/style_duplicate`);\n}\n\n/**\n * `<svelte:body>` does not support non-event attributes or spread attributes\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_body_illegal_attribute(node) {\n\te(node, 'svelte_body_illegal_attribute', `\\`<svelte:body>\\` does not support non-event attributes or spread attributes\\nhttps://svelte.dev/e/svelte_body_illegal_attribute`);\n}\n\n/**\n * Valid attributes on `<svelte:boundary>` are `onerror` and `failed`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_boundary_invalid_attribute(node) {\n\te(node, 'svelte_boundary_invalid_attribute', `Valid attributes on \\`<svelte:boundary>\\` are \\`onerror\\` and \\`failed\\`\\nhttps://svelte.dev/e/svelte_boundary_invalid_attribute`);\n}\n\n/**\n * Attribute value must be a non-string expression\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_boundary_invalid_attribute_value(node) {\n\te(node, 'svelte_boundary_invalid_attribute_value', `Attribute value must be a non-string expression\\nhttps://svelte.dev/e/svelte_boundary_invalid_attribute_value`);\n}\n\n/**\n * Invalid component definition — must be an `{expression}`\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_component_invalid_this(node) {\n\te(node, 'svelte_component_invalid_this', `Invalid component definition — must be an \\`{expression}\\`\\nhttps://svelte.dev/e/svelte_component_invalid_this`);\n}\n\n/**\n * `<svelte:component>` must have a 'this' attribute\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_component_missing_this(node) {\n\te(node, 'svelte_component_missing_this', `\\`<svelte:component>\\` must have a 'this' attribute\\nhttps://svelte.dev/e/svelte_component_missing_this`);\n}\n\n/**\n * `<svelte:element>` must have a 'this' attribute with a value\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_element_missing_this(node) {\n\te(node, 'svelte_element_missing_this', `\\`<svelte:element>\\` must have a 'this' attribute with a value\\nhttps://svelte.dev/e/svelte_element_missing_this`);\n}\n\n/**\n * `<svelte:fragment>` can only have a slot attribute and (optionally) a let: directive\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_fragment_invalid_attribute(node) {\n\te(node, 'svelte_fragment_invalid_attribute', `\\`<svelte:fragment>\\` can only have a slot attribute and (optionally) a let: directive\\nhttps://svelte.dev/e/svelte_fragment_invalid_attribute`);\n}\n\n/**\n * `<svelte:fragment>` must be the direct child of a component\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_fragment_invalid_placement(node) {\n\te(node, 'svelte_fragment_invalid_placement', `\\`<svelte:fragment>\\` must be the direct child of a component\\nhttps://svelte.dev/e/svelte_fragment_invalid_placement`);\n}\n\n/**\n * `<svelte:head>` cannot have attributes nor directives\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_head_illegal_attribute(node) {\n\te(node, 'svelte_head_illegal_attribute', `\\`<svelte:head>\\` cannot have attributes nor directives\\nhttps://svelte.dev/e/svelte_head_illegal_attribute`);\n}\n\n/**\n * A component can only have one `<%name%>` element\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function svelte_meta_duplicate(node, name) {\n\te(node, 'svelte_meta_duplicate', `A component can only have one \\`<${name}>\\` element\\nhttps://svelte.dev/e/svelte_meta_duplicate`);\n}\n\n/**\n * <%name%> cannot have children\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function svelte_meta_invalid_content(node, name) {\n\te(node, 'svelte_meta_invalid_content', `<${name}> cannot have children\\nhttps://svelte.dev/e/svelte_meta_invalid_content`);\n}\n\n/**\n * `<%name%>` tags cannot be inside elements or blocks\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function svelte_meta_invalid_placement(node, name) {\n\te(node, 'svelte_meta_invalid_placement', `\\`<${name}>\\` tags cannot be inside elements or blocks\\nhttps://svelte.dev/e/svelte_meta_invalid_placement`);\n}\n\n/**\n * Valid `<svelte:...>` tag names are %list%\n * @param {null | number | NodeLike} node\n * @param {string} list\n * @returns {never}\n */\nexport function svelte_meta_invalid_tag(node, list) {\n\te(node, 'svelte_meta_invalid_tag', `Valid \\`<svelte:...>\\` tag names are ${list}\\nhttps://svelte.dev/e/svelte_meta_invalid_tag`);\n}\n\n/**\n * \"tag\" option is deprecated — use \"customElement\" instead\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_deprecated_tag(node) {\n\te(node, 'svelte_options_deprecated_tag', `\"tag\" option is deprecated — use \"customElement\" instead\\nhttps://svelte.dev/e/svelte_options_deprecated_tag`);\n}\n\n/**\n * `<svelte:options>` can only receive static attributes\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_invalid_attribute(node) {\n\te(node, 'svelte_options_invalid_attribute', `\\`<svelte:options>\\` can only receive static attributes\\nhttps://svelte.dev/e/svelte_options_invalid_attribute`);\n}\n\n/**\n * Value must be %list%, if specified\n * @param {null | number | NodeLike} node\n * @param {string} list\n * @returns {never}\n */\nexport function svelte_options_invalid_attribute_value(node, list) {\n\te(node, 'svelte_options_invalid_attribute_value', `Value must be ${list}, if specified\\nhttps://svelte.dev/e/svelte_options_invalid_attribute_value`);\n}\n\n/**\n * \"customElement\" must be a string literal defining a valid custom element name or an object of the form { tag?: string; shadow?: \"open\" | \"none\" | `ShadowRootInit`; props?: { [key: string]: { attribute?: string; reflect?: boolean; type: .. } } }\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_invalid_customelement(node) {\n\te(node, 'svelte_options_invalid_customelement', `\"customElement\" must be a string literal defining a valid custom element name or an object of the form { tag?: string; shadow?: \"open\" | \"none\" | \\`ShadowRootInit\\`; props?: { [key: string]: { attribute?: string; reflect?: boolean; type: .. } } }\\nhttps://svelte.dev/e/svelte_options_invalid_customelement`);\n}\n\n/**\n * \"props\" must be a statically analyzable object literal of the form \"{ [key: string]: { attribute?: string; reflect?: boolean; type?: \"String\" | \"Boolean\" | \"Number\" | \"Array\" | \"Object\" }\"\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_invalid_customelement_props(node) {\n\te(node, 'svelte_options_invalid_customelement_props', `\"props\" must be a statically analyzable object literal of the form \"{ [key: string]: { attribute?: string; reflect?: boolean; type?: \"String\" | \"Boolean\" | \"Number\" | \"Array\" | \"Object\" }\"\\nhttps://svelte.dev/e/svelte_options_invalid_customelement_props`);\n}\n\n/**\n * \"shadow\" must be either \"open\", \"none\" or `ShadowRootInit` object.\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_invalid_customelement_shadow(node) {\n\te(node, 'svelte_options_invalid_customelement_shadow', `\"shadow\" must be either \"open\", \"none\" or \\`ShadowRootInit\\` object.\\nhttps://svelte.dev/e/svelte_options_invalid_customelement_shadow`);\n}\n\n/**\n * Tag name must be lowercase and hyphenated\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_invalid_tagname(node) {\n\te(node, 'svelte_options_invalid_tagname', `Tag name must be lowercase and hyphenated\\nhttps://svelte.dev/e/svelte_options_invalid_tagname`);\n}\n\n/**\n * Tag name is reserved\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_options_reserved_tagname(node) {\n\te(node, 'svelte_options_reserved_tagname', `Tag name is reserved\\nhttps://svelte.dev/e/svelte_options_reserved_tagname`);\n}\n\n/**\n * `<svelte:options>` unknown attribute '%name%'\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @returns {never}\n */\nexport function svelte_options_unknown_attribute(node, name) {\n\te(node, 'svelte_options_unknown_attribute', `\\`<svelte:options>\\` unknown attribute '${name}'\\nhttps://svelte.dev/e/svelte_options_unknown_attribute`);\n}\n\n/**\n * `<svelte:self>` components can only exist inside `{#if}` blocks, `{#each}` blocks, `{#snippet}` blocks or slots passed to components\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function svelte_self_invalid_placement(node) {\n\te(node, 'svelte_self_invalid_placement', `\\`<svelte:self>\\` components can only exist inside \\`{#if}\\` blocks, \\`{#each}\\` blocks, \\`{#snippet}\\` blocks or slots passed to components\\nhttps://svelte.dev/e/svelte_self_invalid_placement`);\n}\n\n/**\n * Expected a valid element or component name. Components must have a valid variable name or dot notation expression\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function tag_invalid_name(node) {\n\te(node, 'tag_invalid_name', `Expected a valid element or component name. Components must have a valid variable name or dot notation expression\\nhttps://svelte.dev/e/tag_invalid_name`);\n}\n\n/**\n * {@%name% ...} tag cannot be %location%\n * @param {null | number | NodeLike} node\n * @param {string} name\n * @param {string} location\n * @returns {never}\n */\nexport function tag_invalid_placement(node, name, location) {\n\te(node, 'tag_invalid_placement', `{@${name} ...} tag cannot be ${location}\\nhttps://svelte.dev/e/tag_invalid_placement`);\n}\n\n/**\n * A `<textarea>` can have either a value attribute or (equivalently) child content, but not both\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function textarea_invalid_content(node) {\n\te(node, 'textarea_invalid_content', `A \\`<textarea>\\` can have either a value attribute or (equivalently) child content, but not both\\nhttps://svelte.dev/e/textarea_invalid_content`);\n}\n\n/**\n * `<title>` cannot have attributes nor directives\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function title_illegal_attribute(node) {\n\te(node, 'title_illegal_attribute', `\\`<title>\\` cannot have attributes nor directives\\nhttps://svelte.dev/e/title_illegal_attribute`);\n}\n\n/**\n * `<title>` can only contain text and {tags}\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function title_invalid_content(node) {\n\te(node, 'title_invalid_content', `\\`<title>\\` can only contain text and {tags}\\nhttps://svelte.dev/e/title_invalid_content`);\n}\n\n/**\n * Cannot use `%type%:` alongside existing `%existing%:` directive\n * @param {null | number | NodeLike} node\n * @param {string} type\n * @param {string} existing\n * @returns {never}\n */\nexport function transition_conflict(node, type, existing) {\n\te(node, 'transition_conflict', `Cannot use \\`${type}:\\` alongside existing \\`${existing}:\\` directive\\nhttps://svelte.dev/e/transition_conflict`);\n}\n\n/**\n * Cannot use multiple `%type%:` directives on a single element\n * @param {null | number | NodeLike} node\n * @param {string} type\n * @returns {never}\n */\nexport function transition_duplicate(node, type) {\n\te(node, 'transition_duplicate', `Cannot use multiple \\`${type}:\\` directives on a single element\\nhttps://svelte.dev/e/transition_duplicate`);\n}\n\n/**\n * Unexpected end of input\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function unexpected_eof(node) {\n\te(node, 'unexpected_eof', `Unexpected end of input\\nhttps://svelte.dev/e/unexpected_eof`);\n}\n\n/**\n * '%word%' is a reserved word in JavaScript and cannot be used here\n * @param {null | number | NodeLike} node\n * @param {string} word\n * @returns {never}\n */\nexport function unexpected_reserved_word(node, word) {\n\te(node, 'unexpected_reserved_word', `'${word}' is a reserved word in JavaScript and cannot be used here\\nhttps://svelte.dev/e/unexpected_reserved_word`);\n}\n\n/**\n * Unterminated string constant\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function unterminated_string_constant(node) {\n\te(node, 'unterminated_string_constant', `Unterminated string constant\\nhttps://svelte.dev/e/unterminated_string_constant`);\n}\n\n/**\n * Void elements cannot have children or closing tags\n * @param {null | number | NodeLike} node\n * @returns {never}\n */\nexport function void_element_invalid_content(node) {\n\te(node, 'void_element_invalid_content', `Void elements cannot have children or closing tags\\nhttps://svelte.dev/e/void_element_invalid_content`);\n}"
  },
  {
    "path": "packages/svelte/src/compiler/index.js",
    "content": "/** @import { LegacyRoot } from './types/legacy-nodes.js' */\n/** @import { CompileOptions, CompileResult, ValidatedCompileOptions, ModuleCompileOptions } from '#compiler' */\n/** @import { AST } from './public.js' */\nimport { walk as zimmerframe_walk } from 'zimmerframe';\nimport { convert } from './legacy.js';\nimport { parse as _parse, Parser } from './phases/1-parse/index.js';\nimport { remove_typescript_nodes } from './phases/1-parse/remove_typescript_nodes.js';\nimport { parse_stylesheet } from './phases/1-parse/read/style.js';\nimport { analyze_component, analyze_module } from './phases/2-analyze/index.js';\nimport { transform_component, transform_module } from './phases/3-transform/index.js';\nimport { validate_component_options, validate_module_options } from './validate-options.js';\nimport * as state from './state.js';\nexport { default as preprocess } from './preprocess/index.js';\nexport { print } from './print/index.js';\n\n/**\n * `compile` converts your `.svelte` source code into a JavaScript module that exports a component\n *\n * @param {string} source The component source code\n * @param {CompileOptions} options The compiler options\n * @returns {CompileResult}\n */\nexport function compile(source, options) {\n\tsource = remove_bom(source);\n\tstate.reset({ warning: options.warningFilter, filename: options.filename });\n\n\tconst validated = validate_component_options(options, '');\n\n\tlet parsed = _parse(source);\n\n\tconst { customElement: customElementOptions, ...parsed_options } = parsed.options || {};\n\n\t/** @type {ValidatedCompileOptions} */\n\tconst combined_options = {\n\t\t...validated,\n\t\t...parsed_options,\n\t\tcustomElementOptions,\n\t\tcss: 'css' in parsed_options ? () => parsed_options.css ?? 'external' : validated.css,\n\t\trunes: 'runes' in parsed_options ? () => parsed_options.runes : validated.runes\n\t};\n\n\tif (parsed.metadata.ts) {\n\t\tparsed = {\n\t\t\t...parsed,\n\t\t\tfragment: parsed.fragment && remove_typescript_nodes(parsed.fragment),\n\t\t\tinstance: parsed.instance && remove_typescript_nodes(parsed.instance),\n\t\t\tmodule: parsed.module && remove_typescript_nodes(parsed.module)\n\t\t};\n\t\tif (combined_options.customElementOptions?.extend) {\n\t\t\tcombined_options.customElementOptions.extend = remove_typescript_nodes(\n\t\t\t\tcombined_options.customElementOptions?.extend\n\t\t\t);\n\t\t}\n\t}\n\n\tconst analysis = analyze_component(parsed, source, combined_options);\n\tconst result = transform_component(analysis, source, combined_options);\n\tresult.ast = to_public_ast(source, parsed, options.modernAst);\n\treturn result;\n}\n\n/**\n * `compileModule` takes your JavaScript source code containing runes, and turns it into a JavaScript module.\n *\n * @param {string} source The component source code\n * @param {ModuleCompileOptions} options\n * @returns {CompileResult}\n */\nexport function compileModule(source, options) {\n\tsource = remove_bom(source);\n\tstate.reset({ warning: options.warningFilter, filename: options.filename });\n\tconst validated = validate_module_options(options, '');\n\n\tconst analysis = analyze_module(source, validated);\n\treturn transform_module(analysis, source, validated);\n}\n\n/**\n * The parse function parses a component, returning only its abstract syntax tree.\n *\n * The `modern` option (`false` by default in Svelte 5) makes the parser return a modern AST instead of the legacy AST.\n * `modern` will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n *\n * @overload\n * @param {string} source\n * @param {{ filename?: string; modern: true; loose?: boolean }} options\n * @returns {AST.Root}\n */\n\n/**\n * The parse function parses a component, returning only its abstract syntax tree.\n *\n * The `modern` option (`false` by default in Svelte 5) makes the parser return a modern AST instead of the legacy AST.\n * `modern` will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n *\n * @overload\n * @param {string} source\n * @param {{ filename?: string; modern?: false; loose?: boolean }} [options]\n * @returns {Record<string, any>}\n */\n\n// TODO 6.0 remove unused `filename`\n/**\n * The parse function parses a component, returning only its abstract syntax tree.\n *\n * The `modern` option (`false` by default in Svelte 5) makes the parser return a modern AST instead of the legacy AST.\n * `modern` will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n *\n * The `loose` option, available since 5.13.0, tries to always return an AST even if the input will not successfully compile.\n *\n * The `filename` option is unused and will be removed in Svelte 6.0.\n *\n * @param {string} source\n * @param {{ filename?: string; rootDir?: string; modern?: boolean; loose?: boolean }} [options]\n * @returns {AST.Root | LegacyRoot}\n */\nexport function parse(source, { modern, loose } = {}) {\n\tsource = remove_bom(source);\n\tstate.reset({ warning: () => false, filename: undefined });\n\n\tconst ast = _parse(source, loose);\n\treturn to_public_ast(source, ast, modern);\n}\n\n/**\n * The parseCss function parses a CSS stylesheet, returning its abstract syntax tree.\n *\n * @param {string} source The CSS source code\n * @returns {AST.CSS.StyleSheetFile}\n */\nexport function parseCss(source) {\n\tsource = remove_bom(source);\n\tstate.reset({ warning: () => false, filename: undefined });\n\n\tstate.set_source(source);\n\n\tconst parser = Parser.forCss(source);\n\tconst children = parse_stylesheet(parser);\n\n\treturn {\n\t\ttype: 'StyleSheetFile',\n\t\tstart: 0,\n\t\tend: source.length,\n\t\tchildren\n\t};\n}\n\n/**\n * @param {string} source\n * @param {AST.Root} ast\n * @param {boolean | undefined} modern\n */\nfunction to_public_ast(source, ast, modern) {\n\tif (modern) {\n\t\tconst clean = (/** @type {any} */ node) => {\n\t\t\tdelete node.metadata;\n\t\t};\n\n\t\tast.options?.attributes.forEach((attribute) => {\n\t\t\tclean(attribute);\n\t\t\tclean(attribute.value);\n\t\t\tif (Array.isArray(attribute.value)) {\n\t\t\t\tattribute.value.forEach(clean);\n\t\t\t}\n\t\t});\n\n\t\t// remove things that we don't want to treat as public API\n\t\treturn zimmerframe_walk(ast, null, {\n\t\t\t_(node, { next }) {\n\t\t\t\tclean(node);\n\t\t\t\tnext();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn convert(source, ast);\n}\n\n/**\n * Remove the byte order mark from a string if it's present since it would mess with our template generation logic\n * @param {string} source\n */\nfunction remove_bom(source) {\n\tif (source.charCodeAt(0) === 0xfeff) {\n\t\treturn source.slice(1);\n\t}\n\treturn source;\n}\n\n/**\n * @deprecated Replace this with `import { walk } from 'estree-walker'`\n * @returns {never}\n */\nexport function walk() {\n\tthrow new Error(\n\t\t`'svelte/compiler' no longer exports a \\`walk\\` utility — please import it directly from 'estree-walker' instead`\n\t);\n}\n\nexport { VERSION } from '../version.js';\nexport { migrate } from './migrate/index.js';\n"
  },
  {
    "path": "packages/svelte/src/compiler/legacy.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import * as Legacy from './types/legacy-nodes.js' */\nimport { walk } from 'zimmerframe';\nimport {\n\tregex_ends_with_whitespaces,\n\tregex_not_whitespace,\n\tregex_starts_with_whitespaces\n} from './phases/patterns.js';\nimport { extract_svelte_ignore } from './utils/extract_svelte_ignore.js';\n\n/**\n * Some of the legacy Svelte AST nodes remove whitespace from the start and end of their children.\n * @param {AST.TemplateNode[]} nodes\n */\nfunction remove_surrounding_whitespace_nodes(nodes) {\n\tconst first = nodes.at(0);\n\tconst last = nodes.at(-1);\n\n\tif (first?.type === 'Text') {\n\t\tif (!regex_not_whitespace.test(first.data)) {\n\t\t\tnodes.shift();\n\t\t} else {\n\t\t\tfirst.data = first.data.replace(regex_starts_with_whitespaces, '');\n\t\t}\n\t}\n\tif (last?.type === 'Text') {\n\t\tif (!regex_not_whitespace.test(last.data)) {\n\t\t\tnodes.pop();\n\t\t} else {\n\t\t\tlast.data = last.data.replace(regex_ends_with_whitespaces, '');\n\t\t}\n\t}\n}\n\n/**\n * Transform our nice modern AST into the monstrosity emitted by Svelte 4\n * @param {string} source\n * @param {AST.Root} ast\n * @returns {Legacy.LegacyRoot}\n */\nexport function convert(source, ast) {\n\tconst root = /** @type {AST.SvelteNode | Legacy.LegacySvelteNode} */ (ast);\n\n\treturn /** @type {Legacy.LegacyRoot} */ (\n\t\twalk(root, null, {\n\t\t\t_(node, { next }) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tdelete node.metadata;\n\t\t\t\tnext();\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tRoot(node, { visit }) {\n\t\t\t\tconst { instance, module, options } = node;\n\n\t\t\t\t// Insert svelte:options back into the root nodes\n\t\t\t\tif (/** @type {any} */ (options)?.__raw__) {\n\t\t\t\t\tlet idx = node.fragment.nodes.findIndex(\n\t\t\t\t\t\t(node) => /** @type {any} */ (options).end <= node.start\n\t\t\t\t\t);\n\t\t\t\t\tif (idx === -1) {\n\t\t\t\t\t\tidx = node.fragment.nodes.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.fragment.nodes.splice(idx, 0, /** @type {any} */ (options).__raw__);\n\t\t\t\t}\n\n\t\t\t\t/** @type {number | null} */\n\t\t\t\tlet start = null;\n\n\t\t\t\t/** @type {number | null} */\n\t\t\t\tlet end = null;\n\n\t\t\t\tif (node.fragment.nodes.length > 0) {\n\t\t\t\t\tconst first = /** @type {AST.BaseNode} */ (node.fragment.nodes.at(0));\n\t\t\t\t\tconst last = /** @type {AST.BaseNode} */ (node.fragment.nodes.at(-1));\n\n\t\t\t\t\tstart = first.start;\n\t\t\t\t\tend = last.end;\n\n\t\t\t\t\twhile (/\\s/.test(source[start])) start += 1;\n\t\t\t\t\twhile (/\\s/.test(source[end - 1])) end -= 1;\n\t\t\t\t}\n\n\t\t\t\tif (instance) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdelete instance.attributes;\n\t\t\t\t}\n\n\t\t\t\tif (module) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdelete module.attributes;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\thtml: {\n\t\t\t\t\t\ttype: 'Fragment',\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tchildren: node.fragment.nodes.map((child) => visit(child))\n\t\t\t\t\t},\n\t\t\t\t\tinstance,\n\t\t\t\t\tmodule,\n\t\t\t\t\tcss: ast.css ? visit(ast.css) : undefined,\n\t\t\t\t\t// put it on _comments not comments because the latter is checked by prettier and then fails\n\t\t\t\t\t// if we don't adjust stuff accordingly in our prettier plugin, and so it would be kind of an\n\t\t\t\t\t// indirect breaking change for people updating their Svelte version but not their prettier plugin version.\n\t\t\t\t\t// We can keep it as comments for the modern AST because the modern AST is not used in the plugin yet.\n\t\t\t\t\t_comments: ast.comments?.length > 0 ? ast.comments : undefined\n\t\t\t\t};\n\t\t\t},\n\t\t\tAnimateDirective(node) {\n\t\t\t\treturn { ...node, type: 'Animation' };\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tAwaitBlock(node, { visit }) {\n\t\t\t\tlet pendingblock = {\n\t\t\t\t\ttype: 'PendingBlock',\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tstart: null,\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tend: null,\n\t\t\t\t\tchildren: node.pending?.nodes.map((child) => visit(child)) ?? [],\n\t\t\t\t\tskip: true\n\t\t\t\t};\n\n\t\t\t\tlet thenblock = {\n\t\t\t\t\ttype: 'ThenBlock',\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tstart: null,\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tend: null,\n\t\t\t\t\tchildren: node.then?.nodes.map((child) => visit(child)) ?? [],\n\t\t\t\t\tskip: true\n\t\t\t\t};\n\n\t\t\t\tlet catchblock = {\n\t\t\t\t\ttype: 'CatchBlock',\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tstart: null,\n\t\t\t\t\t/** @type {number | null} */\n\t\t\t\t\tend: null,\n\t\t\t\t\tchildren: node.catch?.nodes.map((child) => visit(child)) ?? [],\n\t\t\t\t\tskip: true\n\t\t\t\t};\n\n\t\t\t\tif (node.pending) {\n\t\t\t\t\tconst first = node.pending.nodes.at(0);\n\t\t\t\t\tconst last = node.pending.nodes.at(-1);\n\n\t\t\t\t\tpendingblock.start = first?.start ?? source.indexOf('}', node.expression.end) + 1;\n\t\t\t\t\tpendingblock.end = last?.end ?? pendingblock.start;\n\t\t\t\t\tpendingblock.skip = false;\n\t\t\t\t}\n\n\t\t\t\tif (node.then) {\n\t\t\t\t\tconst first = node.then.nodes.at(0);\n\t\t\t\t\tconst last = node.then.nodes.at(-1);\n\n\t\t\t\t\tthenblock.start =\n\t\t\t\t\t\tpendingblock.end ?? first?.start ?? source.indexOf('}', node.expression.end) + 1;\n\t\t\t\t\tthenblock.end =\n\t\t\t\t\t\tlast?.end ?? source.lastIndexOf('}', pendingblock.end ?? node.expression.end) + 1;\n\t\t\t\t\tthenblock.skip = false;\n\t\t\t\t}\n\n\t\t\t\tif (node.catch) {\n\t\t\t\t\tconst first = node.catch.nodes.at(0);\n\t\t\t\t\tconst last = node.catch.nodes.at(-1);\n\n\t\t\t\t\tcatchblock.start =\n\t\t\t\t\t\tthenblock.end ??\n\t\t\t\t\t\tpendingblock.end ??\n\t\t\t\t\t\tfirst?.start ??\n\t\t\t\t\t\tsource.indexOf('}', node.expression.end) + 1;\n\t\t\t\t\tcatchblock.end =\n\t\t\t\t\t\tlast?.end ??\n\t\t\t\t\t\tsource.lastIndexOf('}', thenblock.end ?? pendingblock.end ?? node.expression.end) + 1;\n\t\t\t\t\tcatchblock.skip = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'AwaitBlock',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: node.expression,\n\t\t\t\t\tvalue: node.value,\n\t\t\t\t\terror: node.error,\n\t\t\t\t\tpending: pendingblock,\n\t\t\t\t\tthen: thenblock,\n\t\t\t\t\tcatch: catchblock\n\t\t\t\t};\n\t\t\t},\n\t\t\tBindDirective(node) {\n\t\t\t\treturn { ...node, type: 'Binding' };\n\t\t\t},\n\t\t\tClassDirective(node) {\n\t\t\t\treturn { ...node, type: 'Class' };\n\t\t\t},\n\t\t\tComment(node) {\n\t\t\t\treturn {\n\t\t\t\t\t...node,\n\t\t\t\t\tignores: extract_svelte_ignore(node.start, node.data, false)\n\t\t\t\t};\n\t\t\t},\n\t\t\tComplexSelector(node, { next }) {\n\t\t\t\tnext(); // delete inner metadata/parent properties\n\n\t\t\t\tconst children = [];\n\n\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\tif (child.combinator) {\n\t\t\t\t\t\tchildren.push(child.combinator);\n\t\t\t\t\t}\n\n\t\t\t\t\tchildren.push(...child.selectors);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Selector',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tchildren\n\t\t\t\t};\n\t\t\t},\n\t\t\tComponent(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'InlineComponent',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tConstTag(node) {\n\t\t\t\tif (/** @type {Legacy.LegacyConstTag} */ (node).expression !== undefined) {\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\n\t\t\t\tconst modern_node = /** @type {AST.ConstTag} */ (node);\n\t\t\t\tconst { id: left } = { ...modern_node.declaration.declarations[0] };\n\t\t\t\t// @ts-ignore\n\t\t\t\tdelete left.typeAnnotation;\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'ConstTag',\n\t\t\t\t\tstart: modern_node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: {\n\t\t\t\t\t\ttype: 'AssignmentExpression',\n\t\t\t\t\t\tstart: (modern_node.declaration.start ?? 0) + 'const '.length,\n\t\t\t\t\t\tend: modern_node.declaration.end ?? 0,\n\t\t\t\t\t\toperator: '=',\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright: modern_node.declaration.declarations[0].init\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tKeyBlock(node, { visit }) {\n\t\t\t\tremove_surrounding_whitespace_nodes(node.fragment.nodes);\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'KeyBlock',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: node.expression,\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tEachBlock(node, { visit }) {\n\t\t\t\tlet elseblock = undefined;\n\n\t\t\t\tif (node.fallback) {\n\t\t\t\t\tconst first = node.fallback.nodes.at(0);\n\t\t\t\t\tconst end = source.lastIndexOf('{', /** @type {number} */ (node.end) - 1);\n\t\t\t\t\tconst start = first?.start ?? end;\n\n\t\t\t\t\tremove_surrounding_whitespace_nodes(node.fallback.nodes);\n\n\t\t\t\t\telseblock = {\n\t\t\t\t\t\ttype: 'ElseBlock',\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tchildren: node.fallback.nodes.map((child) => visit(child))\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tremove_surrounding_whitespace_nodes(node.body.nodes);\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'EachBlock',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tchildren: node.body.nodes.map((child) => visit(child)),\n\t\t\t\t\tcontext: node.context,\n\t\t\t\t\texpression: node.expression,\n\t\t\t\t\tindex: node.index,\n\t\t\t\t\tkey: node.key,\n\t\t\t\t\telse: elseblock\n\t\t\t\t};\n\t\t\t},\n\t\t\tExpressionTag(node, { path }) {\n\t\t\t\tconst parent = path.at(-1);\n\t\t\t\tif (parent?.type === 'Attribute') {\n\t\t\t\t\tif (source[parent.start] === '{') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'AttributeShorthand',\n\t\t\t\t\t\t\tstart: node.start,\n\t\t\t\t\t\t\tend: node.end,\n\t\t\t\t\t\t\texpression: node.expression\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'MustacheTag',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: node.expression\n\t\t\t\t};\n\t\t\t},\n\t\t\tHtmlTag(node) {\n\t\t\t\treturn { ...node, type: 'RawMustacheTag' };\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tIfBlock(node, { visit }) {\n\t\t\t\tlet elseblock = undefined;\n\t\t\t\tif (node.alternate) {\n\t\t\t\t\tlet nodes = node.alternate.nodes;\n\t\t\t\t\tif (nodes.length === 1 && nodes[0].type === 'IfBlock' && nodes[0].elseif) {\n\t\t\t\t\t\tnodes = nodes[0].consequent.nodes;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst end = source.lastIndexOf('{', /** @type {number} */ (node.end) - 1);\n\t\t\t\t\tconst start = nodes.at(0)?.start ?? end;\n\n\t\t\t\t\tremove_surrounding_whitespace_nodes(node.alternate.nodes);\n\n\t\t\t\t\telseblock = {\n\t\t\t\t\t\ttype: 'ElseBlock',\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend: end,\n\t\t\t\t\t\tchildren: node.alternate.nodes.map(\n\t\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t\t)\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst start = node.elseif\n\t\t\t\t\t? node.consequent.nodes[0]?.start ??\n\t\t\t\t\t\tsource.lastIndexOf('{', /** @type {number} */ (node.end) - 1)\n\t\t\t\t\t: node.start;\n\n\t\t\t\tremove_surrounding_whitespace_nodes(node.consequent.nodes);\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'IfBlock',\n\t\t\t\t\tstart,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: node.test,\n\t\t\t\t\tchildren: node.consequent.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\telse: elseblock,\n\t\t\t\t\telseif: node.elseif ? true : undefined\n\t\t\t\t};\n\t\t\t},\n\t\t\tOnDirective(node) {\n\t\t\t\treturn { ...node, type: 'EventHandler' };\n\t\t\t},\n\t\t\t// @ts-expect-error\n\t\t\tSnippetBlock(node, { visit }) {\n\t\t\t\tremove_surrounding_whitespace_nodes(node.body.nodes);\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'SnippetBlock',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: node.expression,\n\t\t\t\t\tparameters: node.parameters,\n\t\t\t\t\tchildren: node.body.nodes.map((child) => visit(child)),\n\t\t\t\t\ttypeParams: node.typeParams\n\t\t\t\t};\n\t\t\t},\n\t\t\t// @ts-expect-error\n\t\t\tSvelteBoundary(node, { visit }) {\n\t\t\t\tremove_surrounding_whitespace_nodes(node.fragment.nodes);\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'SvelteBoundary',\n\t\t\t\t\tname: 'svelte:boundary',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map((child) => visit(child))\n\t\t\t\t};\n\t\t\t},\n\t\t\tRegularElement(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Element',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tattributes: node.attributes.map((child) => visit(child)),\n\t\t\t\t\tchildren: node.fragment.nodes.map((child) => visit(child))\n\t\t\t\t};\n\t\t\t},\n\t\t\tSlotElement(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Slot',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tAttribute(node, { visit, next, path }) {\n\t\t\t\tif (node.value !== true && !Array.isArray(node.value)) {\n\t\t\t\t\tpath.push(node);\n\t\t\t\t\tconst value = /** @type {Legacy.LegacyAttribute['value']} */ ([visit(node.value)]);\n\t\t\t\t\tpath.pop();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...node,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn next();\n\t\t\t\t}\n\t\t\t},\n\t\t\tStyleDirective(node, { visit, next, path }) {\n\t\t\t\tif (node.value !== true && !Array.isArray(node.value)) {\n\t\t\t\t\tpath.push(node);\n\t\t\t\t\tconst value = /** @type {Legacy.LegacyStyleDirective['value']} */ ([visit(node.value)]);\n\t\t\t\t\tpath.pop();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...node,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn next();\n\t\t\t\t}\n\t\t\t},\n\t\t\tSpreadAttribute(node) {\n\t\t\t\treturn { ...node, type: 'Spread' };\n\t\t\t},\n\t\t\t// @ts-ignore\n\t\t\tStyleSheet(node, context) {\n\t\t\t\treturn {\n\t\t\t\t\t...node,\n\t\t\t\t\t...context.next(),\n\t\t\t\t\ttype: 'Style'\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteBody(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Body',\n\t\t\t\t\tname: 'svelte:body',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteComponent(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'InlineComponent',\n\t\t\t\t\tname: 'svelte:component',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\texpression: node.expression,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteDocument(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Document',\n\t\t\t\t\tname: 'svelte:document',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteElement(node, { visit }) {\n\t\t\t\t/** @type {Expression | string} */\n\t\t\t\tlet tag = node.tag;\n\t\t\t\tif (\n\t\t\t\t\ttag.type === 'Literal' &&\n\t\t\t\t\ttypeof tag.value === 'string' &&\n\t\t\t\t\tsource[/** @type {number} */ (node.tag.start) - 1] !== '{'\n\t\t\t\t) {\n\t\t\t\t\ttag = tag.value;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Element',\n\t\t\t\t\tname: 'svelte:element',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\ttag,\n\t\t\t\t\tattributes: node.attributes.map((child) => visit(child)),\n\t\t\t\t\tchildren: node.fragment.nodes.map((child) => visit(child))\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteFragment(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'SlotTemplate',\n\t\t\t\t\tname: 'svelte:fragment',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(a) => /** @type {Legacy.LegacyAttributeLike} */ (visit(a))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteHead(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Head',\n\t\t\t\t\tname: 'svelte:head',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteOptions(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Options',\n\t\t\t\t\tname: 'svelte:options',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteSelf(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'InlineComponent',\n\t\t\t\t\tname: 'svelte:self',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tSvelteWindow(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Window',\n\t\t\t\t\tname: 'svelte:window',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tText(node, { path }) {\n\t\t\t\tconst parent = path.at(-1);\n\t\t\t\tif (parent?.type === 'RegularElement' && parent.name === 'style') {\n\t\t\t\t\t// these text nodes are missing `raw` for some dumb reason\n\t\t\t\t\treturn /** @type {AST.Text} */ ({\n\t\t\t\t\t\ttype: 'Text',\n\t\t\t\t\t\tstart: node.start,\n\t\t\t\t\t\tend: node.end,\n\t\t\t\t\t\tdata: node.data\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tTitleElement(node, { visit }) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'Title',\n\t\t\t\t\tname: 'title',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end,\n\t\t\t\t\tattributes: node.attributes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyAttributeLike} */ (visit(child))\n\t\t\t\t\t),\n\t\t\t\t\tchildren: node.fragment.nodes.map(\n\t\t\t\t\t\t(child) => /** @type {Legacy.LegacyElementLike} */ (visit(child))\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t},\n\t\t\tTransitionDirective(node) {\n\t\t\t\treturn { ...node, type: 'Transition' };\n\t\t\t},\n\t\t\tUseDirective(node) {\n\t\t\t\treturn { ...node, type: 'Action' };\n\t\t\t},\n\t\t\tLetDirective(node) {\n\t\t\t\treturn { ...node, type: 'Let' };\n\t\t\t}\n\t\t})\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/migrate/index.js",
    "content": "/** @import { VariableDeclarator, Node, Identifier, AssignmentExpression, LabeledStatement, ExpressionStatement } from 'estree' */\n/** @import { Visitors } from 'zimmerframe' */\n/** @import { ComponentAnalysis } from '../phases/types.js' */\n/** @import { Scope } from '../phases/scope.js' */\n/** @import { AST, Binding, ValidatedCompileOptions } from '#compiler' */\nimport MagicString from 'magic-string';\nimport { walk } from 'zimmerframe';\nimport { parse } from '../phases/1-parse/index.js';\nimport { regex_valid_component_name } from '../phases/1-parse/state/element.js';\nimport { analyze_component } from '../phases/2-analyze/index.js';\nimport { get_rune } from '../phases/scope.js';\nimport { reset, UNKNOWN_FILENAME } from '../state.js';\nimport {\n\textract_identifiers,\n\textract_all_identifiers_from_expression,\n\tis_text_attribute\n} from '../utils/ast.js';\nimport { migrate_svelte_ignore } from '../utils/extract_svelte_ignore.js';\nimport { validate_component_options } from '../validate-options.js';\nimport { is_reserved, is_svg, is_void } from '../../utils.js';\nimport { regex_is_valid_identifier } from '../phases/patterns.js';\n\nconst regex_style_tags = /(<style[^>]+>)([\\S\\s]*?)(<\\/style>)/g;\nconst style_placeholder = '/*$$__STYLE_CONTENT__$$*/';\n\nlet has_migration_task = false;\n\nclass MigrationError extends Error {\n\t/**\n\t * @param {string} msg\n\t */\n\tconstructor(msg) {\n\t\tsuper(msg);\n\t}\n}\n\n/**\n *\n * @param {State} state\n */\nfunction migrate_css(state) {\n\tif (!state.analysis.css.ast?.start) return;\n\tconst css_contents = state.str\n\t\t.snip(state.analysis.css.ast.start, /** @type {number} */ (state.analysis.css.ast?.end))\n\t\t.toString();\n\tlet code = css_contents;\n\tlet starting = 0;\n\n\t// since we already blank css we can't work directly on `state.str` so we will create a copy that we can update\n\tconst str = new MagicString(code);\n\twhile (code) {\n\t\tif (\n\t\t\tcode.startsWith(':has') ||\n\t\t\tcode.startsWith(':is') ||\n\t\t\tcode.startsWith(':where') ||\n\t\t\tcode.startsWith(':not')\n\t\t) {\n\t\t\tlet start = code.indexOf('(') + 1;\n\t\t\tlet is_global = false;\n\n\t\t\tconst global_str = ':global';\n\t\t\tconst next_global = code.indexOf(global_str);\n\t\t\tconst str_between = code.substring(start, next_global);\n\t\t\tif (!str_between.trim()) {\n\t\t\t\tis_global = true;\n\t\t\t\tstart += global_str.length;\n\t\t\t} else {\n\t\t\t\tconst prev_global = css_contents.lastIndexOf(global_str, starting);\n\t\t\t\tif (prev_global > -1) {\n\t\t\t\t\tconst end =\n\t\t\t\t\t\tfind_closing_parenthesis(css_contents.indexOf('(', prev_global) + 1, css_contents) -\n\t\t\t\t\t\tstarting;\n\t\t\t\t\tif (end > start) {\n\t\t\t\t\t\tstarting += end;\n\t\t\t\t\t\tcode = code.substring(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst end = find_closing_parenthesis(start, code);\n\t\t\tif (start && end) {\n\t\t\t\tif (!is_global && !code.startsWith(':not')) {\n\t\t\t\t\tstr.prependLeft(starting + start, ':global(');\n\t\t\t\t\tstr.appendRight(starting + end - 1, ')');\n\t\t\t\t}\n\t\t\t\tstarting += end - 1;\n\t\t\t\tcode = code.substring(end - 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tstarting++;\n\t\tcode = code.substring(1);\n\t}\n\tstate.str.update(state.analysis.css.ast?.start, state.analysis.css.ast?.end, str.toString());\n}\n\n/**\n * @param {number} start\n * @param {string} code\n */\nfunction find_closing_parenthesis(start, code) {\n\tlet parenthesis = 1;\n\tlet end = start;\n\tlet char = code[end];\n\t// find the closing parenthesis\n\twhile (parenthesis !== 0 && char) {\n\t\tif (char === '(') parenthesis++;\n\t\tif (char === ')') parenthesis--;\n\t\tend++;\n\t\tchar = code[end];\n\t}\n\treturn end;\n}\n\n/**\n * Does a best-effort migration of Svelte code towards using runes, event attributes and render tags.\n * May throw an error if the code is too complex to migrate automatically.\n *\n * @param {string} source\n * @param {{ filename?: string, use_ts?: boolean }} [options]\n * @returns {{ code: string; }}\n */\nexport function migrate(source, { filename, use_ts } = {}) {\n\tlet og_source = source;\n\ttry {\n\t\thas_migration_task = false;\n\t\t// Blank CSS, could contain SCSS or similar that needs a preprocessor.\n\t\t// Since we don't care about CSS in this migration, we'll just ignore it.\n\t\t/** @type {Array<[number, string]>} */\n\t\tconst style_contents = [];\n\t\tsource = source.replace(regex_style_tags, (_, start, content, end, idx) => {\n\t\t\tstyle_contents.push([idx + start.length, content]);\n\t\t\treturn start + style_placeholder + end;\n\t\t});\n\n\t\treset({ warning: () => false, filename });\n\n\t\tlet parsed = parse(source);\n\n\t\tconst { customElement: customElementOptions, ...parsed_options } = parsed.options || {};\n\n\t\t/** @type {ValidatedCompileOptions} */\n\t\tconst combined_options = {\n\t\t\t...validate_component_options({}, ''),\n\t\t\t...parsed_options,\n\t\t\tcustomElementOptions,\n\t\t\tfilename: filename ?? UNKNOWN_FILENAME,\n\t\t\tcss: 'css' in parsed_options ? () => parsed_options.css ?? 'external' : () => 'external',\n\t\t\trunes: 'runes' in parsed_options ? () => parsed_options.runes : () => undefined,\n\t\t\texperimental: {\n\t\t\t\tasync: true\n\t\t\t}\n\t\t};\n\n\t\tconst str = new MagicString(source);\n\t\tconst analysis = analyze_component(parsed, source, combined_options);\n\t\tconst indent = guess_indent(source);\n\n\t\tstr.replaceAll(/(<svelte:options\\s.*?\\s?)accessors\\s?/g, (_, $1) => $1);\n\n\t\tfor (const content of style_contents) {\n\t\t\tstr.overwrite(content[0], content[0] + style_placeholder.length, content[1]);\n\t\t}\n\n\t\t/** @type {State} */\n\t\tlet state = {\n\t\t\tscope: analysis.instance.scope,\n\t\t\tanalysis,\n\t\t\tfilename,\n\t\t\tstr,\n\t\t\tindent,\n\t\t\tprops: [],\n\t\t\tprops_insertion_point: parsed.instance?.content.start ?? 0,\n\t\t\thas_props_rune: false,\n\t\t\thas_type_or_fallback: false,\n\t\t\tend: source.length,\n\t\t\tnames: {\n\t\t\t\tprops: analysis.root.unique('props').name,\n\t\t\t\trest: analysis.root.unique('rest').name,\n\n\t\t\t\t// event stuff\n\t\t\t\trun: analysis.root.unique('run').name,\n\t\t\t\thandlers: analysis.root.unique('handlers').name,\n\t\t\t\tstopImmediatePropagation: analysis.root.unique('stopImmediatePropagation').name,\n\t\t\t\tpreventDefault: analysis.root.unique('preventDefault').name,\n\t\t\t\tstopPropagation: analysis.root.unique('stopPropagation').name,\n\t\t\t\tonce: analysis.root.unique('once').name,\n\t\t\t\tself: analysis.root.unique('self').name,\n\t\t\t\ttrusted: analysis.root.unique('trusted').name,\n\t\t\t\tcreateBubbler: analysis.root.unique('createBubbler').name,\n\t\t\t\tbubble: analysis.root.unique('bubble').name,\n\t\t\t\tpassive: analysis.root.unique('passive').name,\n\t\t\t\tnonpassive: analysis.root.unique('nonpassive').name\n\t\t\t},\n\t\t\tlegacy_imports: new Set(),\n\t\t\tscript_insertions: new Set(),\n\t\t\tderived_components: new Map(),\n\t\t\tderived_conflicting_slots: new Map(),\n\t\t\tderived_labeled_statements: new Set(),\n\t\t\thas_svelte_self: false,\n\t\t\tuses_ts:\n\t\t\t\t// Some people could use jsdoc but have a tsconfig.json, so double-check file for jsdoc indicators\n\t\t\t\t(use_ts && !source.includes('@type {')) ||\n\t\t\t\t!!parsed.instance?.attributes.some(\n\t\t\t\t\t(attr) => attr.name === 'lang' && /** @type {any} */ (attr).value[0].data === 'ts'\n\t\t\t\t)\n\t\t};\n\n\t\tif (parsed.module) {\n\t\t\tconst context = parsed.module.attributes.find((attr) => attr.name === 'context');\n\t\t\tif (context) {\n\t\t\t\tstate.str.update(context.start, context.end, 'module');\n\t\t\t}\n\t\t}\n\n\t\tif (parsed.instance) {\n\t\t\twalk(parsed.instance.content, state, instance_script);\n\t\t}\n\n\t\tstate = { ...state, scope: analysis.template.scope };\n\t\twalk(parsed.fragment, state, template);\n\n\t\tlet insertion_point = parsed.instance\n\t\t\t? /** @type {number} */ (parsed.instance.content.start)\n\t\t\t: 0;\n\n\t\tconst need_script =\n\t\t\tstate.legacy_imports.size > 0 ||\n\t\t\tstate.derived_components.size > 0 ||\n\t\t\tstate.derived_conflicting_slots.size > 0 ||\n\t\t\tstate.script_insertions.size > 0 ||\n\t\t\tstate.props.length > 0 ||\n\t\t\tanalysis.uses_rest_props ||\n\t\t\tanalysis.uses_props ||\n\t\t\tstate.has_svelte_self;\n\n\t\tconst need_ts_tag =\n\t\t\tstate.uses_ts &&\n\t\t\t(!parsed.instance || !parsed.instance.attributes.some((attr) => attr.name === 'lang'));\n\n\t\tif (!parsed.instance && need_script) {\n\t\t\tstr.appendRight(0, need_ts_tag ? '<script lang=\"ts\">' : '<script>');\n\t\t}\n\n\t\tif (state.has_svelte_self && filename) {\n\t\t\tconst file = filename.split('/').pop();\n\t\t\tstr.appendRight(\n\t\t\t\tinsertion_point,\n\t\t\t\t`\\n${indent}import ${state.analysis.name} from './${file}';`\n\t\t\t);\n\t\t}\n\n\t\tconst specifiers = [...state.legacy_imports].map((imported) => {\n\t\t\tconst local = state.names[imported];\n\t\t\treturn imported === local ? imported : `${imported} as ${local}`;\n\t\t});\n\n\t\tconst legacy_import = `import { ${specifiers.join(', ')} } from 'svelte/legacy';\\n`;\n\n\t\tif (state.legacy_imports.size > 0) {\n\t\t\tstr.appendRight(insertion_point, `\\n${indent}${legacy_import}`);\n\t\t}\n\n\t\tif (state.script_insertions.size > 0) {\n\t\t\tstr.appendRight(\n\t\t\t\tinsertion_point,\n\t\t\t\t`\\n${indent}${[...state.script_insertions].join(`\\n${indent}`)}`\n\t\t\t);\n\t\t}\n\n\t\tinsertion_point = state.props_insertion_point;\n\n\t\t/**\n\t\t * @param {\"derived\"|\"props\"|\"bindable\"} rune\n\t\t */\n\t\tfunction check_rune_binding(rune) {\n\t\t\tconst has_rune_binding = !!state.scope.get(rune);\n\t\t\tif (has_rune_binding) {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t`migrating this component would require adding a \\`$${rune}\\` rune but there's already a variable named ${rune}.\\n     Rename the variable and try again or migrate by hand.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (state.props.length > 0 || analysis.uses_rest_props || analysis.uses_props) {\n\t\t\tconst has_many_props = state.props.length > 3;\n\t\t\tconst newline_separator = `\\n${indent}${indent}`;\n\t\t\tconst props_separator = has_many_props ? newline_separator : ' ';\n\t\t\tlet props = '';\n\t\t\tif (analysis.uses_props) {\n\t\t\t\tprops = `...${state.names.props}`;\n\t\t\t} else {\n\t\t\t\tprops = state.props\n\t\t\t\t\t.filter((prop) => !prop.type_only)\n\t\t\t\t\t.map((prop) => {\n\t\t\t\t\t\tlet prop_str =\n\t\t\t\t\t\t\tprop.local === prop.exported ? prop.local : `${prop.exported}: ${prop.local}`;\n\t\t\t\t\t\tif (prop.bindable) {\n\t\t\t\t\t\t\tcheck_rune_binding('bindable');\n\t\t\t\t\t\t\tprop_str += ` = $bindable(${prop.init})`;\n\t\t\t\t\t\t} else if (prop.init) {\n\t\t\t\t\t\t\tprop_str += ` = ${prop.init}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn prop_str;\n\t\t\t\t\t})\n\t\t\t\t\t.join(`,${props_separator}`);\n\n\t\t\t\tif (analysis.uses_rest_props) {\n\t\t\t\t\tprops += `${state.props.length > 0 ? `,${props_separator}` : ''}...${state.names.rest}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (state.has_props_rune) {\n\t\t\t\t// some render tags or forwarded event attributes to add\n\t\t\t\tstr.appendRight(insertion_point, ` ${props},`);\n\t\t\t} else {\n\t\t\t\tconst type_name = state.scope.root.unique('Props').name;\n\t\t\t\tlet type = '';\n\n\t\t\t\t// Try to infer when we don't want to add types (e.g. user doesn't use types, or this is a zero-types +page.svelte)\n\t\t\t\tif (state.has_type_or_fallback || state.props.every((prop) => prop.slot_name)) {\n\t\t\t\t\tif (state.uses_ts) {\n\t\t\t\t\t\ttype = `interface ${type_name} {${newline_separator}${state.props\n\t\t\t\t\t\t\t.map((prop) => {\n\t\t\t\t\t\t\t\tconst comment = prop.comment ? `${prop.comment}${newline_separator}` : '';\n\t\t\t\t\t\t\t\treturn `${comment}${prop.exported}${prop.optional ? '?' : ''}: ${prop.type};${prop.trailing_comment ? ' ' + prop.trailing_comment : ''}`;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.join(newline_separator)}`;\n\t\t\t\t\t\tif (analysis.uses_props || analysis.uses_rest_props) {\n\t\t\t\t\t\t\ttype += `${state.props.length > 0 ? newline_separator : ''}[key: string]: any`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttype += `\\n${indent}}`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = `/**\\n${indent} * @typedef {Object} ${type_name}${state.props\n\t\t\t\t\t\t\t.map((prop) => {\n\t\t\t\t\t\t\t\treturn `\\n${indent} * @property {${prop.type}} ${prop.optional ? `[${prop.exported}]` : prop.exported}${prop.comment ? ` - ${prop.comment}` : ''}${prop.trailing_comment ? ` - ${prop.trailing_comment.trim()}` : ''}`;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.join(``)}\\n${indent} */`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet props_declaration = `let {${props_separator}${props}${has_many_props ? `\\n${indent}` : ' '}}`;\n\t\t\t\tif (state.uses_ts) {\n\t\t\t\t\tif (type) {\n\t\t\t\t\t\tprops_declaration = `${type}\\n\\n${indent}${props_declaration}`;\n\t\t\t\t\t}\n\t\t\t\t\tcheck_rune_binding('props');\n\t\t\t\t\tprops_declaration = `${props_declaration}${type ? `: ${type_name}` : ''} = $props();`;\n\t\t\t\t} else {\n\t\t\t\t\tif (type) {\n\t\t\t\t\t\tprops_declaration = `${state.props.length > 0 ? `${type}\\n\\n${indent}` : ''}/** @type {${state.props.length > 0 ? type_name : ''}${analysis.uses_props || analysis.uses_rest_props ? `${state.props.length > 0 ? ' & ' : ''}{ [key: string]: any }` : ''}} */\\n${indent}${props_declaration}`;\n\t\t\t\t\t}\n\t\t\t\t\tcheck_rune_binding('props');\n\t\t\t\t\tprops_declaration = `${props_declaration} = $props();`;\n\t\t\t\t}\n\n\t\t\t\tprops_declaration = `\\n${indent}${props_declaration}`;\n\t\t\t\tstr.appendRight(insertion_point, props_declaration);\n\t\t\t}\n\n\t\t\tif (parsed.instance && need_ts_tag) {\n\t\t\t\tstr.appendRight(parsed.instance.start + '<script'.length, ' lang=\"ts\"');\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * If true, then we need to move all reactive statements to the end of the script block,\n\t\t * in their correct order. Svelte 4 reordered reactive statements, $derived/$effect.pre\n\t\t * don't have this behavior.\n\t\t */\n\t\tlet needs_reordering = false;\n\n\t\tfor (const [node, { dependencies }] of state.analysis.reactive_statements) {\n\t\t\t/** @type {Binding[]} */\n\t\t\tlet ids = [];\n\t\t\tif (\n\t\t\t\tnode.body.type === 'ExpressionStatement' &&\n\t\t\t\tnode.body.expression.type === 'AssignmentExpression'\n\t\t\t) {\n\t\t\t\tids = extract_identifiers(node.body.expression.left)\n\t\t\t\t\t.map((id) => state.scope.get(id.name))\n\t\t\t\t\t.filter((id) => !!id);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdependencies.some(\n\t\t\t\t\t(dep) =>\n\t\t\t\t\t\t!ids.includes(dep) &&\n\t\t\t\t\t\t(dep.kind === 'prop' || dep.kind === 'bindable_prop'\n\t\t\t\t\t\t\t? state.props_insertion_point\n\t\t\t\t\t\t\t: /** @type {number} */ (dep.node.start)) > /** @type {number} */ (node.start)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tneeds_reordering = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (needs_reordering) {\n\t\t\tconst nodes = Array.from(state.analysis.reactive_statements.keys());\n\t\t\tfor (const node of nodes) {\n\t\t\t\tconst { start, end } = get_node_range(source, node);\n\t\t\t\tstr.appendLeft(end, '\\n');\n\t\t\t\tstr.move(start, end, /** @type {number} */ (parsed.instance?.content.end));\n\t\t\t\tstr.update(start - (source[start - 2] === '\\r' ? 2 : 1), start, '');\n\t\t\t}\n\t\t}\n\n\t\tinsertion_point = parsed.instance\n\t\t\t? /** @type {number} */ (parsed.instance.content.end)\n\t\t\t: insertion_point;\n\n\t\tif (state.derived_components.size > 0) {\n\t\t\tcheck_rune_binding('derived');\n\t\t\tstr.appendRight(\n\t\t\t\tinsertion_point,\n\t\t\t\t`\\n${indent}${[...state.derived_components.entries()].map(([init, name]) => `const ${name} = $derived(${init});`).join(`\\n${indent}`)}\\n`\n\t\t\t);\n\t\t}\n\n\t\tif (state.derived_conflicting_slots.size > 0) {\n\t\t\tcheck_rune_binding('derived');\n\t\t\tstr.appendRight(\n\t\t\t\tinsertion_point,\n\t\t\t\t`\\n${indent}${[...state.derived_conflicting_slots.entries()].map(([name, init]) => `const ${name} = $derived(${init});`).join(`\\n${indent}`)}\\n`\n\t\t\t);\n\t\t}\n\n\t\tif (state.props.length > 0 && state.analysis.accessors) {\n\t\t\tstr.appendRight(\n\t\t\t\tinsertion_point,\n\t\t\t\t`\\n${indent}export {${state.props.reduce((acc, prop) => (prop.slot_name || prop.type_only ? acc : `${acc}\\n${indent}\\t${prop.local},`), '')}\\n${indent}}\\n`\n\t\t\t);\n\t\t}\n\n\t\tif (!parsed.instance && need_script) {\n\t\t\tstr.appendRight(insertion_point, '\\n</script>\\n\\n');\n\t\t}\n\t\tmigrate_css(state);\n\t\treturn {\n\t\t\tcode: str.toString()\n\t\t};\n\t} catch (e) {\n\t\tif (!(e instanceof MigrationError)) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error('Error while migrating Svelte code', e);\n\t\t}\n\t\thas_migration_task = true;\n\t\treturn {\n\t\t\tcode: `<!-- @migration-task Error while migrating Svelte code: ${/** @type {any} */ (e).message} -->\\n${og_source}`\n\t\t};\n\t} finally {\n\t\tif (has_migration_task) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(\n\t\t\t\t`One or more \\`@migration-task\\` comments were added to ${filename ? `\\`${filename}\\`` : \"a file (unfortunately we don't know the name)\"}, please check them and complete the migration manually.`\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * @typedef {{\n *  scope: Scope;\n *  str: MagicString;\n *  analysis: ComponentAnalysis;\n *  filename?: string;\n *  indent: string;\n *  props: Array<{ local: string; exported: string; init: string; bindable: boolean; slot_name?: string; optional: boolean; type: string; comment?: string; trailing_comment?: string; type_only?: boolean; needs_refine_type?: boolean; }>;\n *  props_insertion_point: number;\n *  has_props_rune: boolean;\n *  has_type_or_fallback: boolean;\n *  end: number;\n * \tnames: Record<string, string>;\n * \tlegacy_imports: Set<string>;\n * \tscript_insertions: Set<string>;\n *  derived_components: Map<string, string>;\n *  derived_conflicting_slots: Map<string, string>;\n * \tderived_labeled_statements: Set<LabeledStatement>;\n *  has_svelte_self: boolean;\n *  uses_ts: boolean;\n * }} State\n */\n\n/** @type {Visitors<AST.SvelteNode, State>} */\nconst instance_script = {\n\t_(node, { state, next }) {\n\t\t// @ts-expect-error\n\t\tconst comments = node.leadingComments;\n\t\tif (comments) {\n\t\t\tfor (const comment of comments) {\n\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\tconst migrated = migrate_svelte_ignore(comment.value);\n\t\t\t\t\tif (migrated !== comment.value) {\n\t\t\t\t\t\tstate.str.overwrite(comment.start + '//'.length, comment.end, migrated);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnext();\n\t},\n\tIdentifier(node, { state, path }) {\n\t\thandle_identifier(node, state, path);\n\t},\n\tImportDeclaration(node, { state }) {\n\t\tstate.props_insertion_point = node.end ?? state.props_insertion_point;\n\t\tif (node.source.value === 'svelte') {\n\t\t\tlet illegal_specifiers = [];\n\t\t\tlet removed_specifiers = 0;\n\t\t\tfor (let specifier of node.specifiers) {\n\t\t\t\tif (\n\t\t\t\t\tspecifier.type === 'ImportSpecifier' &&\n\t\t\t\t\tspecifier.imported.type === 'Identifier' &&\n\t\t\t\t\t['beforeUpdate', 'afterUpdate'].includes(specifier.imported.name)\n\t\t\t\t) {\n\t\t\t\t\tconst references = state.scope.references.get(specifier.local.name);\n\t\t\t\t\tif (!references) {\n\t\t\t\t\t\tlet end = /** @type {number} */ (\n\t\t\t\t\t\t\tstate.str.original.indexOf(',', specifier.end) !== -1 &&\n\t\t\t\t\t\t\tstate.str.original.indexOf(',', specifier.end) <\n\t\t\t\t\t\t\t\tstate.str.original.indexOf('}', specifier.end)\n\t\t\t\t\t\t\t\t? state.str.original.indexOf(',', specifier.end) + 1\n\t\t\t\t\t\t\t\t: specifier.end\n\t\t\t\t\t\t);\n\t\t\t\t\t\twhile (state.str.original[end].trim() === '') end++;\n\t\t\t\t\t\tstate.str.remove(/** @type {number} */ (specifier.start), end);\n\t\t\t\t\t\tremoved_specifiers++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tillegal_specifiers.push(specifier.imported.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (removed_specifiers === node.specifiers.length) {\n\t\t\t\tstate.str.remove(/** @type {number} */ (node.start), /** @type {number} */ (node.end));\n\t\t\t}\n\t\t\tif (illegal_specifiers.length > 0) {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t`Can't migrate code with ${illegal_specifiers.join(' and ')}. Please migrate by hand.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\tExportNamedDeclaration(node, { state, next }) {\n\t\tif (node.declaration) {\n\t\t\tnext();\n\t\t\treturn;\n\t\t}\n\n\t\tlet count_removed = 0;\n\t\tfor (const specifier of node.specifiers) {\n\t\t\tif (specifier.local.type !== 'Identifier') continue;\n\n\t\t\tconst binding = state.scope.get(specifier.local.name);\n\t\t\tif (binding?.kind === 'bindable_prop') {\n\t\t\t\tstate.str.remove(\n\t\t\t\t\t/** @type {number} */ (specifier.start),\n\t\t\t\t\t/** @type {number} */ (specifier.end)\n\t\t\t\t);\n\t\t\t\tcount_removed++;\n\t\t\t}\n\t\t}\n\t\tif (count_removed === node.specifiers.length) {\n\t\t\tstate.str.remove(/** @type {number} */ (node.start), /** @type {number} */ (node.end));\n\t\t}\n\t},\n\tVariableDeclaration(node, { state, path, visit, next }) {\n\t\tif (state.scope !== state.analysis.instance.scope) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet nr_of_props = 0;\n\n\t\tfor (let i = 0; i < node.declarations.length; i++) {\n\t\t\tconst declarator = node.declarations[i];\n\t\t\tif (state.analysis.runes) {\n\t\t\t\tif (get_rune(declarator.init, state.scope) === '$props') {\n\t\t\t\t\tstate.props_insertion_point = /** @type {number} */ (declarator.id.start) + 1;\n\t\t\t\t\tstate.has_props_rune = true;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet bindings;\n\t\t\ttry {\n\t\t\t\tbindings = state.scope.get_bindings(declarator);\n\t\t\t} catch (e) {\n\t\t\t\t// no bindings, so we can skip this\n\t\t\t\tnext();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst has_state = bindings.some((binding) => binding.kind === 'state');\n\t\t\tconst has_props = bindings.some((binding) => binding.kind === 'bindable_prop');\n\n\t\t\tif (!has_state && !has_props) {\n\t\t\t\tnext();\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (has_props) {\n\t\t\t\tnr_of_props++;\n\n\t\t\t\tif (declarator.id.type !== 'Identifier') {\n\t\t\t\t\t// TODO invest time in this?\n\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t'Encountered an export declaration pattern that is not supported for automigration.'\n\t\t\t\t\t);\n\t\t\t\t\t// Turn export let into props. It's really really weird because export let { x: foo, z: [bar]} = ..\n\t\t\t\t\t// means that foo and bar are the props (i.e. the leaves are the prop names), not x and z.\n\t\t\t\t\t// const tmp = b.id(state.scope.generate('tmp'));\n\t\t\t\t\t// const paths = extract_paths(declarator.id, tmp);\n\t\t\t\t\t// state.props_pre.push(\n\t\t\t\t\t// \tb.declaration('const', tmp, visit(declarator.init!) as Expression)\n\t\t\t\t\t// );\n\t\t\t\t\t// for (const path of paths) {\n\t\t\t\t\t// \tconst name = (path.node as Identifier).name;\n\t\t\t\t\t// \tconst binding = state.scope.get(name)!;\n\t\t\t\t\t// \tconst value = path.expression;\n\t\t\t\t\t// \tif (binding.kind === 'bindable_prop' || binding.kind === 'rest_prop') {\n\t\t\t\t\t// \t\tstate.props.push({\n\t\t\t\t\t// \t\t\tlocal: name,\n\t\t\t\t\t// \t\t\texported: binding.prop_alias ? binding.prop_alias : name,\n\t\t\t\t\t// \t\t\tinit: value\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t\tstate.props_insertion_point = /** @type {number} */(declarator.end);\n\t\t\t\t\t// \t} else {\n\t\t\t\t\t// \t\tdeclarations.push(b.declarator(path.node, value));\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t}\n\n\t\t\t\tconst name = declarator.id.name;\n\t\t\t\tconst binding = /** @type {Binding} */ (state.scope.get(name));\n\n\t\t\t\tif (state.analysis.uses_props && (declarator.init || binding.updated)) {\n\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t'$$props is used together with named props in a way that cannot be automatically migrated.'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst prop = state.props.find((prop) => prop.exported === (binding.prop_alias || name));\n\t\t\t\tif (prop) {\n\t\t\t\t\tnext();\n\t\t\t\t\t// $$Props type was used\n\t\t\t\t\tprop.init = declarator.init\n\t\t\t\t\t\t? state.str\n\t\t\t\t\t\t\t\t.snip(\n\t\t\t\t\t\t\t\t\t/** @type {number} */ (declarator.init.start),\n\t\t\t\t\t\t\t\t\t/** @type {number} */ (declarator.init.end)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t: '';\n\t\t\t\t\tprop.bindable = binding.updated;\n\t\t\t\t\tprop.exported = binding.prop_alias || name;\n\t\t\t\t\tprop.type_only = false;\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t\tstate.props.push({\n\t\t\t\t\t\tlocal: name,\n\t\t\t\t\t\texported: binding.prop_alias ? binding.prop_alias : name,\n\t\t\t\t\t\tinit: declarator.init\n\t\t\t\t\t\t\t? state.str\n\t\t\t\t\t\t\t\t\t.snip(\n\t\t\t\t\t\t\t\t\t\t/** @type {number} */ (declarator.init.start),\n\t\t\t\t\t\t\t\t\t\t/** @type {number} */ (declarator.init.end)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\toptional: !!declarator.init,\n\t\t\t\t\t\tbindable: binding.updated,\n\t\t\t\t\t\t...extract_type_and_comment(declarator, state, path)\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlet start = /** @type {number} */ (declarator.start);\n\t\t\t\tlet end = /** @type {number} */ (declarator.end);\n\n\t\t\t\t// handle cases like let a,b,c; where only some are exported\n\t\t\t\tif (node.declarations.length > 1) {\n\t\t\t\t\t// move the insertion point after the node itself;\n\t\t\t\t\tstate.props_insertion_point = /** @type {number} */ (node.end);\n\t\t\t\t\t// if it's not the first declaration remove from the , of the previous declaration\n\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\tstart = state.str.original.indexOf(\n\t\t\t\t\t\t\t',',\n\t\t\t\t\t\t\t/** @type {number} */ (node.declarations[i - 1].end)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// if it's not the last declaration remove either from up until the\n\t\t\t\t\t// start of the next declaration (if it's the first declaration) or\n\t\t\t\t\t// up until the last index of , from the next declaration\n\t\t\t\t\tif (i !== node.declarations.length - 1) {\n\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\tend = /** @type {number} */ (node.declarations[i + 1].start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tend = state.str.original.lastIndexOf(\n\t\t\t\t\t\t\t\t',',\n\t\t\t\t\t\t\t\t/** @type {number} */ (node.declarations[i + 1].start)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstate.props_insertion_point = /** @type {number} */ (declarator.end);\n\t\t\t\t}\n\n\t\t\t\tstate.str.update(start, end, '');\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @param {\"state\"|\"derived\"} rune\n\t\t\t */\n\t\t\tfunction check_rune_binding(rune) {\n\t\t\t\tconst has_rune_binding = !!state.scope.get(rune);\n\t\t\t\tif (has_rune_binding) {\n\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t`can't migrate \\`${state.str.original.substring(/** @type {number} */ (node.start), node.end)}\\` to \\`$${rune}\\` because there's a variable named ${rune}.\\n     Rename the variable and try again or migrate by hand.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// state\n\t\t\tif (declarator.init) {\n\t\t\t\tlet { start, end } = /** @type {{ start: number, end: number }} */ (declarator.init);\n\n\t\t\t\tif (declarator.init.type === 'SequenceExpression') {\n\t\t\t\t\twhile (state.str.original[start] !== '(') start -= 1;\n\t\t\t\t\twhile (state.str.original[end - 1] !== ')') end += 1;\n\t\t\t\t}\n\n\t\t\t\tcheck_rune_binding('state');\n\n\t\t\t\tstate.str.prependLeft(start, '$state(');\n\t\t\t\tstate.str.appendRight(end, ')');\n\t\t\t} else {\n\t\t\t\t/**\n\t\t\t\t * @type {AssignmentExpression | undefined}\n\t\t\t\t */\n\t\t\t\tlet assignment_in_labeled;\n\t\t\t\t/**\n\t\t\t\t * @type {LabeledStatement | undefined}\n\t\t\t\t */\n\t\t\t\tlet labeled_statement;\n\n\t\t\t\t// Analyze declaration bindings to see if they're exclusively updated within a single reactive statement\n\t\t\t\tconst possible_derived = bindings.every((binding) =>\n\t\t\t\t\tbinding.references.every((reference) => {\n\t\t\t\t\t\tconst declaration = reference.path.find((el) => el.type === 'VariableDeclaration');\n\t\t\t\t\t\tconst assignment = reference.path.find((el) => el.type === 'AssignmentExpression');\n\t\t\t\t\t\tconst update = reference.path.find((el) => el.type === 'UpdateExpression');\n\t\t\t\t\t\tconst labeled = /** @type {LabeledStatement | undefined} */ (\n\t\t\t\t\t\t\treference.path.find((el) => el.type === 'LabeledStatement' && el.label.name === '$')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tassignment &&\n\t\t\t\t\t\t\tlabeled &&\n\t\t\t\t\t\t\t// ensure that $: foo = bar * 2 is not counted as a reassignment of bar\n\t\t\t\t\t\t\t(labeled.body.type !== 'ExpressionStatement' ||\n\t\t\t\t\t\t\t\tlabeled.body.expression !== assignment ||\n\t\t\t\t\t\t\t\t(assignment.left.type === 'Identifier' &&\n\t\t\t\t\t\t\t\t\tassignment.left.name === binding.node.name))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (assignment_in_labeled) return false;\n\t\t\t\t\t\t\tassignment_in_labeled = /** @type {AssignmentExpression} */ (assignment);\n\t\t\t\t\t\t\tlabeled_statement = labeled;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t!update &&\n\t\t\t\t\t\t\t((declaration && binding.initial) ||\n\t\t\t\t\t\t\t\t(labeled && assignment) ||\n\t\t\t\t\t\t\t\t(!labeled && !assignment))\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst labeled_has_single_assignment =\n\t\t\t\t\tlabeled_statement?.body.type === 'BlockStatement' &&\n\t\t\t\t\tlabeled_statement.body.body.length === 1 &&\n\t\t\t\t\tlabeled_statement.body.body[0].type === 'ExpressionStatement';\n\n\t\t\t\tconst is_expression_assignment =\n\t\t\t\t\tlabeled_statement?.body.type === 'ExpressionStatement' &&\n\t\t\t\t\tlabeled_statement.body.expression.type === 'AssignmentExpression';\n\n\t\t\t\tlet should_be_state = false;\n\n\t\t\t\tif (is_expression_assignment) {\n\t\t\t\t\tconst body = /**@type {ExpressionStatement}*/ (labeled_statement?.body);\n\t\t\t\t\tconst expression = /**@type {AssignmentExpression}*/ (body.expression);\n\t\t\t\t\tconst [, ids] = extract_all_identifiers_from_expression(expression.right);\n\t\t\t\t\tif (ids.length === 0) {\n\t\t\t\t\t\tshould_be_state = true;\n\t\t\t\t\t\tstate.derived_labeled_statements.add(\n\t\t\t\t\t\t\t/** @type {LabeledStatement} */ (labeled_statement)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!should_be_state &&\n\t\t\t\t\tpossible_derived &&\n\t\t\t\t\tassignment_in_labeled &&\n\t\t\t\t\tlabeled_statement &&\n\t\t\t\t\t(labeled_has_single_assignment || is_expression_assignment)\n\t\t\t\t) {\n\t\t\t\t\tconst indent = state.str.original.substring(\n\t\t\t\t\t\tstate.str.original.lastIndexOf('\\n', /** @type {number} */ (node.start)) + 1,\n\t\t\t\t\t\t/** @type {number} */ (node.start)\n\t\t\t\t\t);\n\t\t\t\t\t// transfer all the leading comments\n\t\t\t\t\tif (\n\t\t\t\t\t\tlabeled_statement.body.type === 'BlockStatement' &&\n\t\t\t\t\t\tlabeled_statement.body.body[0].leadingComments\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (let comment of labeled_statement.body.body[0].leadingComments) {\n\t\t\t\t\t\t\tstate.str.prependLeft(\n\t\t\t\t\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\t\t\t\t\tcomment.type === 'Block'\n\t\t\t\t\t\t\t\t\t? `/*${comment.value}*/\\n${indent}`\n\t\t\t\t\t\t\t\t\t: `// ${comment.value}\\n${indent}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcheck_rune_binding('derived');\n\n\t\t\t\t\t// Someone wrote a `$: { ... }` statement which we can turn into a `$derived`\n\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\t' = $derived('\n\t\t\t\t\t);\n\t\t\t\t\tvisit(assignment_in_labeled.right);\n\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\tstate.str\n\t\t\t\t\t\t\t.snip(\n\t\t\t\t\t\t\t\t/** @type {number} */ (assignment_in_labeled.right.start),\n\t\t\t\t\t\t\t\t/** @type {number} */ (assignment_in_labeled.right.end)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t);\n\t\t\t\t\tstate.str.remove(\n\t\t\t\t\t\t/** @type {number} */ (labeled_statement.start),\n\t\t\t\t\t\t/** @type {number} */ (labeled_statement.end)\n\t\t\t\t\t);\n\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\t')'\n\t\t\t\t\t);\n\t\t\t\t\tstate.derived_labeled_statements.add(labeled_statement);\n\n\t\t\t\t\t// transfer all the trailing comments\n\t\t\t\t\tif (\n\t\t\t\t\t\tlabeled_statement.body.type === 'BlockStatement' &&\n\t\t\t\t\t\tlabeled_statement.body.body[0].trailingComments\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (let comment of labeled_statement.body.body[0].trailingComments) {\n\t\t\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\t\t\tcomment.type === 'Block'\n\t\t\t\t\t\t\t\t\t? `\\n${indent}/*${comment.value}*/`\n\t\t\t\t\t\t\t\t\t: `\\n${indent}// ${comment.value}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcheck_rune_binding('state');\n\n\t\t\t\t\tstate.str.prependLeft(\n\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\t' = $state('\n\t\t\t\t\t);\n\t\t\t\t\tif (should_be_state) {\n\t\t\t\t\t\t// someone wrote a `$: foo = ...` statement which we can turn into `let foo = $state(...)`\n\t\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\t\tstate.str\n\t\t\t\t\t\t\t\t.snip(\n\t\t\t\t\t\t\t\t\t/** @type {number} */ (\n\t\t\t\t\t\t\t\t\t\t/** @type {AssignmentExpression} */ (assignment_in_labeled).right.start\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t/** @type {number} */ (\n\t\t\t\t\t\t\t\t\t\t/** @type {AssignmentExpression} */ (assignment_in_labeled).right.end\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstate.str.remove(\n\t\t\t\t\t\t\t/** @type {number} */ (/** @type {LabeledStatement} */ (labeled_statement).start),\n\t\t\t\t\t\t\t/** @type {number} */ (/** @type {LabeledStatement} */ (labeled_statement).end)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\t/** @type {number} */ (declarator.id.typeAnnotation?.end ?? declarator.id.end),\n\t\t\t\t\t\t')'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (nr_of_props === node.declarations.length) {\n\t\t\tlet start = /** @type {number} */ (node.start);\n\t\t\tlet end = /** @type {number} */ (node.end);\n\n\t\t\tconst parent = path.at(-1);\n\t\t\tif (parent?.type === 'ExportNamedDeclaration') {\n\t\t\t\tstart = /** @type {number} */ (parent.start);\n\t\t\t\tend = /** @type {number} */ (parent.end);\n\t\t\t}\n\t\t\twhile (state.str.original[start] !== '\\n') start--;\n\t\t\twhile (state.str.original[end] !== '\\n') end++;\n\t\t\tstate.str.update(start, end, '');\n\t\t}\n\t},\n\tBreakStatement(node, { state, path }) {\n\t\tif (path[1].type !== 'LabeledStatement') return;\n\t\tif (node.label?.name !== '$') return;\n\t\tstate.str.update(\n\t\t\t/** @type {number} */ (node.start),\n\t\t\t/** @type {number} */ (node.end),\n\t\t\t'return;'\n\t\t);\n\t},\n\tLabeledStatement(node, { path, state, next }) {\n\t\tif (state.analysis.runes) return;\n\t\tif (path.length > 1) return;\n\t\tif (node.label.name !== '$') return;\n\t\tif (state.derived_labeled_statements.has(node)) return;\n\n\t\tnext();\n\n\t\t/**\n\t\t * @param {\"state\"|\"derived\"} rune\n\t\t */\n\t\tfunction check_rune_binding(rune) {\n\t\t\tconst has_rune_binding = state.scope.get(rune);\n\t\t\tif (has_rune_binding) {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t`can't migrate \\`$: ${state.str.original.substring(/** @type {number} */ (node.body.start), node.body.end)}\\` to \\`$${rune}\\` because there's a variable named ${rune}.\\n     Rename the variable and try again or migrate by hand.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tnode.body.type === 'ExpressionStatement' &&\n\t\t\tnode.body.expression.type === 'AssignmentExpression'\n\t\t) {\n\t\t\tconst { left, right } = node.body.expression;\n\n\t\t\tconst ids = extract_identifiers(left);\n\t\t\tconst [, expression_ids] = extract_all_identifiers_from_expression(right);\n\t\t\tconst bindings = ids.map((id) => /** @type {Binding} */ (state.scope.get(id.name)));\n\n\t\t\tif (bindings.every((b) => b.kind === 'legacy_reactive')) {\n\t\t\t\tif (\n\t\t\t\t\tright.type !== 'Literal' &&\n\t\t\t\t\tbindings.every((b) => b.kind !== 'store_sub') &&\n\t\t\t\t\tleft.type !== 'MemberExpression'\n\t\t\t\t) {\n\t\t\t\t\tlet { start, end } = /** @type {{ start: number, end: number }} */ (right);\n\n\t\t\t\t\tcheck_rune_binding('derived');\n\n\t\t\t\t\t// $derived\n\t\t\t\t\tstate.str.update(\n\t\t\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\t\t\t/** @type {number} */ (node.body.expression.start),\n\t\t\t\t\t\t'let '\n\t\t\t\t\t);\n\n\t\t\t\t\tif (right.type === 'SequenceExpression') {\n\t\t\t\t\t\twhile (state.str.original[start] !== '(') start -= 1;\n\t\t\t\t\t\twhile (state.str.original[end - 1] !== ')') end += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.str.prependRight(start, `$derived(`);\n\n\t\t\t\t\t// in a case like `$: ({ a } = b())`, there's already a trailing parenthesis.\n\t\t\t\t\t// otherwise, we need to add one\n\t\t\t\t\tif (state.str.original[/** @type {number} */ (node.body.start)] !== '(') {\n\t\t\t\t\t\tstate.str.appendLeft(end, `)`);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const binding of bindings) {\n\t\t\t\t\tif (binding.reassigned && (ids.includes(binding.node) || expression_ids.length === 0)) {\n\t\t\t\t\t\tcheck_rune_binding('state');\n\t\t\t\t\t\tconst init =\n\t\t\t\t\t\t\tbinding.kind === 'state'\n\t\t\t\t\t\t\t\t? ' = $state()'\n\t\t\t\t\t\t\t\t: expression_ids.length === 0\n\t\t\t\t\t\t\t\t\t? ` = $state(${state.str.original.substring(/** @type {number} */ (right.start), right.end)})`\n\t\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\t// implicitly-declared variable which we need to make explicit\n\t\t\t\t\t\tstate.str.prependLeft(\n\t\t\t\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\t\t\t\t`let ${binding.node.name}${init};\\n${state.indent}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (expression_ids.length === 0 && bindings.every((b) => b.kind !== 'store_sub')) {\n\t\t\t\t\tstate.str.remove(/** @type {number} */ (node.start), /** @type {number} */ (node.end));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstate.legacy_imports.add('run');\n\t\tconst is_block_stmt = node.body.type === 'BlockStatement';\n\t\tconst start_end = /** @type {number} */ (node.body.start);\n\t\t// TODO try to find out if we can use $derived.by instead?\n\t\tif (is_block_stmt) {\n\t\t\tstate.str.update(\n\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\tstart_end + 1,\n\t\t\t\t`${state.names.run}(() => {`\n\t\t\t);\n\t\t\tconst end = /** @type {number} */ (node.body.end);\n\t\t\tstate.str.update(end - 1, end, '});');\n\t\t} else {\n\t\t\tstate.str.update(\n\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\tstart_end,\n\t\t\t\t`${state.names.run}(() => {\\n${state.indent}`\n\t\t\t);\n\t\t\tstate.str.indent(state.indent, {\n\t\t\t\texclude: [\n\t\t\t\t\t[0, /** @type {number} */ (node.body.start)],\n\t\t\t\t\t[/** @type {number} */ (node.body.end), state.end]\n\t\t\t\t]\n\t\t\t});\n\t\t\tstate.str.appendLeft(/** @type {number} */ (node.end), `\\n${state.indent}});`);\n\t\t}\n\t}\n};\n\n/**\n *\n * @param {State} state\n * @param {number} start\n * @param {number} end\n */\nfunction trim_block(state, start, end) {\n\tconst original = state.str.snip(start, end).toString();\n\tconst without_parens = original.substring(1, original.length - 1);\n\tif (without_parens.trim().length !== without_parens.length) {\n\t\tstate.str.update(start + 1, end - 1, without_parens.trim());\n\t}\n}\n\n/** @type {Visitors<AST.SvelteNode, State>} */\nconst template = {\n\tIdentifier(node, { state, path }) {\n\t\thandle_identifier(node, state, path);\n\t},\n\tRegularElement(node, { state, path, next }) {\n\t\t// Strip off any namespace from the beginning of the node name.\n\t\tconst node_name = node.name.replace(/[a-zA-Z-]*:/g, '');\n\n\t\tif (state.analysis.source[node.end - 2] === '/' && !is_void(node_name) && !is_svg(node_name)) {\n\t\t\tlet trimmed_position = node.end - 2;\n\t\t\twhile (state.str.original.charAt(trimmed_position - 1) === ' ') trimmed_position--;\n\t\t\tstate.str.remove(trimmed_position, node.end - 1);\n\t\t\tstate.str.appendLeft(node.end, `</${node.name}>`);\n\t\t}\n\n\t\tmigrate_slot_usage(node, path, state);\n\t\thandle_events(node, state);\n\n\t\tnext();\n\t},\n\tSvelteSelf(node, { state, next }) {\n\t\tconst source = state.str.original.substring(node.start, node.end);\n\t\tif (!state.filename) {\n\t\t\tconst indent = guess_indent(source);\n\t\t\thas_migration_task = true;\n\t\t\tstate.str.prependRight(\n\t\t\t\tnode.start,\n\t\t\t\t`<!-- @migration-task: svelte:self is deprecated, import this Svelte file into itself instead -->\\n${indent}`\n\t\t\t);\n\t\t\tnext();\n\t\t\treturn;\n\t\t}\n\t\t// overwrite the open tag\n\t\tstate.str.overwrite(\n\t\t\tnode.start + 1,\n\t\t\tnode.start + 1 + 'svelte:self'.length,\n\t\t\t`${state.analysis.name}`\n\t\t);\n\t\t// if it has a fragment we need to overwrite the closing tag too\n\t\tif (node.fragment.nodes.length > 0) {\n\t\t\tstate.str.overwrite(\n\t\t\t\tstate.str.original.lastIndexOf('<', node.end) + 2,\n\t\t\t\tnode.end - 1,\n\t\t\t\t`${state.analysis.name}`\n\t\t\t);\n\t\t} else if (!source.endsWith('/>')) {\n\t\t\t// special case for case `<svelte:self></svelte:self>` it has no fragment but\n\t\t\t// we still need to overwrite the end tag\n\t\t\tstate.str.overwrite(\n\t\t\t\tnode.start + source.lastIndexOf('</', node.end) + 2,\n\t\t\t\tnode.end - 1,\n\t\t\t\t`${state.analysis.name}`\n\t\t\t);\n\t\t}\n\t\tstate.has_svelte_self = true;\n\t\tnext();\n\t},\n\tSvelteElement(node, { state, path, next }) {\n\t\tmigrate_slot_usage(node, path, state);\n\t\tif (node.tag.type === 'Literal') {\n\t\t\tlet is_static = true;\n\n\t\t\tlet a = /** @type {number} */ (node.tag.start);\n\t\t\tlet b = /** @type {number} */ (node.tag.end);\n\t\t\tlet quote_mark = state.str.original[a - 1];\n\n\t\t\twhile (state.str.original[--a] !== '=') {\n\t\t\t\tif (state.str.original[a] === '{') {\n\t\t\t\t\tis_static = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (is_static && state.str.original[b] === quote_mark) {\n\t\t\t\tstate.str.prependLeft(a + 1, '{');\n\t\t\t\tstate.str.appendRight(/** @type {number} */ (node.tag.end) + 1, '}');\n\t\t\t}\n\t\t}\n\n\t\thandle_events(node, state);\n\t\tnext();\n\t},\n\tComponent(node, { state, path, next }) {\n\t\tnext();\n\t\tmigrate_slot_usage(node, path, state);\n\t},\n\tSvelteComponent(node, { state, next, path }) {\n\t\tnext();\n\n\t\tmigrate_slot_usage(node, path, state);\n\n\t\tlet expression = state.str\n\t\t\t.snip(\n\t\t\t\t/** @type {number} */ (node.expression.start),\n\t\t\t\t/** @type {number} */ (node.expression.end)\n\t\t\t)\n\t\t\t.toString();\n\n\t\tif (\n\t\t\t(node.expression.type !== 'Identifier' && node.expression.type !== 'MemberExpression') ||\n\t\t\t!regex_valid_component_name.test(expression)\n\t\t) {\n\t\t\tlet current_expression = expression;\n\t\t\texpression = state.scope.generate('SvelteComponent');\n\t\t\tlet needs_derived = true;\n\t\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\t\tconst part = path[i];\n\t\t\t\tif (\n\t\t\t\t\tpart.type === 'EachBlock' ||\n\t\t\t\t\tpart.type === 'AwaitBlock' ||\n\t\t\t\t\tpart.type === 'IfBlock' ||\n\t\t\t\t\tpart.type === 'SnippetBlock' ||\n\t\t\t\t\tpart.type === 'Component' ||\n\t\t\t\t\tpart.type === 'SvelteComponent'\n\t\t\t\t) {\n\t\t\t\t\tlet position = node.start;\n\t\t\t\t\tif (i !== path.length - 1) {\n\t\t\t\t\t\tfor (let modifier = 1; modifier < path.length - i; modifier++) {\n\t\t\t\t\t\t\tconst path_part = path[i + modifier];\n\t\t\t\t\t\t\tif ('start' in path_part) {\n\t\t\t\t\t\t\t\tposition = /** @type {number} */ (path_part.start);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst indent = state.str.original.substring(\n\t\t\t\t\t\tstate.str.original.lastIndexOf('\\n', position) + 1,\n\t\t\t\t\t\tposition\n\t\t\t\t\t);\n\t\t\t\t\tstate.str.appendRight(\n\t\t\t\t\t\tposition,\n\t\t\t\t\t\t`{@const ${expression} = ${current_expression}}\\n${indent}`\n\t\t\t\t\t);\n\t\t\t\t\tneeds_derived = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (needs_derived) {\n\t\t\t\tif (state.derived_components.has(current_expression)) {\n\t\t\t\t\texpression = /** @type {string} */ (state.derived_components.get(current_expression));\n\t\t\t\t} else {\n\t\t\t\t\tstate.derived_components.set(current_expression, expression);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstate.str.overwrite(node.start + 1, node.start + node.name.length + 1, expression);\n\n\t\tif (state.str.original.substring(node.end - node.name.length - 1, node.end - 1) === node.name) {\n\t\t\tstate.str.overwrite(node.end - node.name.length - 1, node.end - 1, expression);\n\t\t}\n\t\tlet this_pos = state.str.original.lastIndexOf('this', node.expression.start);\n\t\twhile (!state.str.original.charAt(this_pos - 1).trim()) this_pos--;\n\t\tconst end_pos = state.str.original.indexOf('}', node.expression.end) + 1;\n\t\tstate.str.remove(this_pos, end_pos);\n\t},\n\tSvelteFragment(node, { state, path, next }) {\n\t\tmigrate_slot_usage(node, path, state);\n\t\tnext();\n\t},\n\tSvelteWindow(node, { state, next }) {\n\t\thandle_events(node, state);\n\t\tnext();\n\t},\n\tSvelteBody(node, { state, next }) {\n\t\thandle_events(node, state);\n\t\tnext();\n\t},\n\tSvelteDocument(node, { state, next }) {\n\t\thandle_events(node, state);\n\t\tnext();\n\t},\n\tSlotElement(node, { state, path, next, visit }) {\n\t\tmigrate_slot_usage(node, path, state);\n\n\t\tif (state.analysis.custom_element) return;\n\t\tlet name = 'children';\n\t\tlet slot_name = 'default';\n\t\tlet slot_props = '{ ';\n\t\tlet aliased_slot_name;\n\n\t\tfor (const attr of node.attributes) {\n\t\t\tif (attr.type === 'SpreadAttribute') {\n\t\t\t\tslot_props += `...${state.str.original.substring(/** @type {number} */ (attr.expression.start), attr.expression.end)}, `;\n\t\t\t} else if (attr.type === 'Attribute') {\n\t\t\t\tif (attr.name === 'slot') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (attr.name === 'name') {\n\t\t\t\t\tslot_name = /** @type {any} */ (attr.value)[0].data;\n\t\t\t\t\t// if some of the parents or this node itself har a slot\n\t\t\t\t\t// attribute with the sane name of this slot\n\t\t\t\t\t// we want to create a derived or the migrated snippet\n\t\t\t\t\t// will shadow the slot prop\n\t\t\t\t\tif (\n\t\t\t\t\t\tpath.some(\n\t\t\t\t\t\t\t(parent) =>\n\t\t\t\t\t\t\t\t(parent.type === 'RegularElement' ||\n\t\t\t\t\t\t\t\t\tparent.type === 'SvelteElement' ||\n\t\t\t\t\t\t\t\t\tparent.type === 'Component' ||\n\t\t\t\t\t\t\t\t\tparent.type === 'SvelteComponent' ||\n\t\t\t\t\t\t\t\t\tparent.type === 'SvelteFragment') &&\n\t\t\t\t\t\t\t\tparent.attributes.some(\n\t\t\t\t\t\t\t\t\t(attribute) =>\n\t\t\t\t\t\t\t\t\t\tattribute.type === 'Attribute' &&\n\t\t\t\t\t\t\t\t\t\tattribute.name === 'slot' &&\n\t\t\t\t\t\t\t\t\t\tis_text_attribute(attribute) &&\n\t\t\t\t\t\t\t\t\t\tattribute.value[0].data === slot_name\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) ||\n\t\t\t\t\t\tnode.attributes.some(\n\t\t\t\t\t\t\t(attribute) =>\n\t\t\t\t\t\t\t\tattribute.type === 'Attribute' &&\n\t\t\t\t\t\t\t\tattribute.name === 'slot' &&\n\t\t\t\t\t\t\t\tis_text_attribute(attribute) &&\n\t\t\t\t\t\t\t\tattribute.value[0].data === slot_name\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\taliased_slot_name = `${slot_name}_render`;\n\t\t\t\t\t\tstate.derived_conflicting_slots.set(aliased_slot_name, slot_name);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst attr_value =\n\t\t\t\t\t\tattr.value === true || Array.isArray(attr.value) ? attr.value : [attr.value];\n\t\t\t\t\tlet value = 'true';\n\t\t\t\t\tif (attr_value !== true) {\n\t\t\t\t\t\tconst first = attr_value[0];\n\t\t\t\t\t\tconst last = attr_value[attr_value.length - 1];\n\t\t\t\t\t\tfor (const attr of attr_value) {\n\t\t\t\t\t\t\tvisit(attr);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue = state.str\n\t\t\t\t\t\t\t.snip(\n\t\t\t\t\t\t\t\tfirst.type === 'Text'\n\t\t\t\t\t\t\t\t\t? first.start - 1\n\t\t\t\t\t\t\t\t\t: /** @type {number} */ (first.expression.start),\n\t\t\t\t\t\t\t\tlast.type === 'Text' ? last.end + 1 : /** @type {number} */ (last.expression.end)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.toString();\n\t\t\t\t\t}\n\t\t\t\t\tslot_props += value === attr.name ? `${value}, ` : `${attr.name}: ${value}, `;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tslot_props += '}';\n\t\tif (slot_props === '{ }') {\n\t\t\tslot_props = '';\n\t\t}\n\n\t\tconst existing_prop = state.props.find((prop) => prop.slot_name === slot_name);\n\t\tif (existing_prop) {\n\t\t\tname = existing_prop.local;\n\t\t} else if (slot_name !== 'default') {\n\t\t\tname = state.scope.generate(slot_name);\n\t\t\tif (name !== slot_name) {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t`This migration would change the name of a slot (${slot_name} to ${name}) making the component unusable`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!existing_prop) {\n\t\t\tstate.props.push({\n\t\t\t\tlocal: name,\n\t\t\t\texported: name,\n\t\t\t\tinit: '',\n\t\t\t\tbindable: false,\n\t\t\t\toptional: true,\n\t\t\t\tslot_name,\n\t\t\t\ttype: `import('svelte').${slot_props ? 'Snippet<[any]>' : 'Snippet'}`\n\t\t\t});\n\t\t} else if (existing_prop.needs_refine_type) {\n\t\t\texisting_prop.type = `import('svelte').${slot_props ? 'Snippet<[any]>' : 'Snippet'}`;\n\t\t\texisting_prop.needs_refine_type = false;\n\t\t}\n\n\t\tif (\n\t\t\tslot_name === 'default' &&\n\t\t\tpath.some(\n\t\t\t\t(parent) =>\n\t\t\t\t\t(parent.type === 'SvelteComponent' ||\n\t\t\t\t\t\tparent.type === 'Component' ||\n\t\t\t\t\t\tparent.type === 'RegularElement' ||\n\t\t\t\t\t\tparent.type === 'SvelteElement' ||\n\t\t\t\t\t\tparent.type === 'SvelteFragment') &&\n\t\t\t\t\tparent.attributes.some((attr) => attr.type === 'LetDirective')\n\t\t\t)\n\t\t) {\n\t\t\taliased_slot_name = `${name}_render`;\n\t\t\tstate.derived_conflicting_slots.set(aliased_slot_name, name);\n\t\t}\n\t\tname = aliased_slot_name ?? name;\n\n\t\tif (node.fragment.nodes.length > 0) {\n\t\t\tnext();\n\t\t\tstate.str.update(\n\t\t\t\tnode.start,\n\t\t\t\tnode.fragment.nodes[0].start,\n\t\t\t\t`{#if ${name}}{@render ${state.analysis.uses_props ? `${state.names.props}.` : ''}${name}(${slot_props})}{:else}`\n\t\t\t);\n\t\t\tstate.str.update(node.fragment.nodes[node.fragment.nodes.length - 1].end, node.end, '{/if}');\n\t\t} else {\n\t\t\tstate.str.update(\n\t\t\t\tnode.start,\n\t\t\t\tnode.end,\n\t\t\t\t`{@render ${state.analysis.uses_props ? `${state.names.props}.` : ''}${name}?.(${slot_props})}`\n\t\t\t);\n\t\t}\n\t},\n\tComment(node, { state }) {\n\t\tconst migrated = migrate_svelte_ignore(node.data);\n\t\tif (migrated !== node.data) {\n\t\t\tstate.str.overwrite(node.start + '<!--'.length, node.end - '-->'.length, migrated);\n\t\t}\n\t},\n\tHtmlTag(node, { state, next }) {\n\t\ttrim_block(state, node.start, node.end);\n\t\tnext();\n\t},\n\tConstTag(node, { state, next }) {\n\t\ttrim_block(state, node.start, node.end);\n\t\tnext();\n\t},\n\tIfBlock(node, { state, next }) {\n\t\tconst start = node.start;\n\t\tconst end = state.str.original.indexOf('}', node.test.end) + 1;\n\t\ttrim_block(state, start, end);\n\t\tnext();\n\t},\n\tAwaitBlock(node, { state, next }) {\n\t\tconst start = node.start;\n\t\tconst end =\n\t\t\tstate.str.original.indexOf(\n\t\t\t\t'}',\n\t\t\t\tnode.pending !== null ? node.expression.end : node.value?.end\n\t\t\t) + 1;\n\t\ttrim_block(state, start, end);\n\t\tif (node.pending !== null) {\n\t\t\tconst start = state.str.original.lastIndexOf('{', node.value?.start);\n\t\t\tconst end = state.str.original.indexOf('}', node.value?.end) + 1;\n\t\t\ttrim_block(state, start, end);\n\t\t}\n\t\tif (node.catch !== null) {\n\t\t\tconst start = state.str.original.lastIndexOf('{', node.error?.start);\n\t\t\tconst end = state.str.original.indexOf('}', node.error?.end) + 1;\n\t\t\ttrim_block(state, start, end);\n\t\t}\n\t\tnext();\n\t},\n\tKeyBlock(node, { state, next }) {\n\t\tconst start = node.start;\n\t\tconst end = state.str.original.indexOf('}', node.expression.end) + 1;\n\t\ttrim_block(state, start, end);\n\t\tnext();\n\t}\n};\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement | AST.SvelteComponent | AST.Component | AST.SlotElement | AST.SvelteFragment} node\n * @param {AST.SvelteNode[]} path\n * @param {State} state\n */\nfunction migrate_slot_usage(node, path, state) {\n\tconst parent = path.at(-2);\n\t// Bail on custom element slot usage\n\tif (\n\t\tparent?.type !== 'Component' &&\n\t\tparent?.type !== 'SvelteComponent' &&\n\t\tnode.type !== 'Component' &&\n\t\tnode.type !== 'SvelteComponent'\n\t) {\n\t\treturn;\n\t}\n\n\tlet snippet_name = 'children';\n\tlet snippet_props = [];\n\n\t// if we stop the transform because the name is not correct we don't want to\n\t// remove the let directive and they could come before the name\n\tlet removal_queue = [];\n\n\tfor (let attribute of node.attributes) {\n\t\tif (\n\t\t\tattribute.type === 'Attribute' &&\n\t\t\tattribute.name === 'slot' &&\n\t\t\tis_text_attribute(attribute)\n\t\t) {\n\t\t\tsnippet_name = attribute.value[0].data;\n\t\t\t// the default slot in svelte 4 if what the children slot is for svelte 5\n\t\t\tif (snippet_name === 'default') {\n\t\t\t\tsnippet_name = 'children';\n\t\t\t}\n\t\t\tif (!regex_is_valid_identifier.test(snippet_name) || is_reserved(snippet_name)) {\n\t\t\t\thas_migration_task = true;\n\t\t\t\tstate.str.appendLeft(\n\t\t\t\t\tnode.start,\n\t\t\t\t\t`<!-- @migration-task: migrate this slot by hand, \\`${snippet_name}\\` is an invalid identifier -->\\n${state.indent}`\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parent?.type === 'Component' || parent?.type === 'SvelteComponent') {\n\t\t\t\tfor (let attribute of parent.attributes) {\n\t\t\t\t\tif (attribute.type === 'Attribute' || attribute.type === 'BindDirective') {\n\t\t\t\t\t\tif (attribute.name === snippet_name) {\n\t\t\t\t\t\t\tstate.str.appendLeft(\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\t`<!-- @migration-task: migrate this slot by hand, \\`${snippet_name}\\` would shadow a prop on the parent component -->\\n${state.indent}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// flush the queue after we found the name\n\t\t\tfor (let remove_let of removal_queue) {\n\t\t\t\tremove_let();\n\t\t\t}\n\t\t\tstate.str.remove(attribute.start, attribute.end);\n\t\t}\n\t\tif (attribute.type === 'LetDirective') {\n\t\t\tsnippet_props.push(\n\t\t\t\tattribute.name +\n\t\t\t\t\t(attribute.expression\n\t\t\t\t\t\t? `: ${state.str.original.substring(/** @type {number} */ (attribute.expression.start), /** @type {number} */ (attribute.expression.end))}`\n\t\t\t\t\t\t: '')\n\t\t\t);\n\t\t\t// we just add to the queue to remove them after we found if we need to migrate or we bail\n\t\t\tremoval_queue.push(() => state.str.remove(attribute.start, attribute.end));\n\t\t}\n\t}\n\n\tif (removal_queue.length > 0) {\n\t\tfor (let remove_let of removal_queue) {\n\t\t\tremove_let();\n\t\t}\n\t}\n\n\tif (node.type === 'SvelteFragment' && node.fragment.nodes.length > 0) {\n\t\t// remove node itself, keep content\n\t\tstate.str.remove(node.start, node.fragment.nodes[0].start);\n\t\tstate.str.remove(node.fragment.nodes[node.fragment.nodes.length - 1].end, node.end);\n\t}\n\n\tconst props = snippet_props.length > 0 ? `{ ${snippet_props.join(', ')} }` : '';\n\n\tif (snippet_name === 'children' && node.type !== 'SvelteFragment') {\n\t\tif (snippet_props.length === 0) return; // nothing to do\n\n\t\tlet inner_start = 0;\n\t\tlet inner_end = 0;\n\t\tfor (let i = 0; i < node.fragment.nodes.length; i++) {\n\t\t\tconst inner = node.fragment.nodes[i];\n\t\t\tconst is_empty_text = inner.type === 'Text' && !inner.data.trim();\n\n\t\t\tif (\n\t\t\t\t(inner.type === 'RegularElement' ||\n\t\t\t\t\tinner.type === 'SvelteElement' ||\n\t\t\t\t\tinner.type === 'Component' ||\n\t\t\t\t\tinner.type === 'SvelteComponent' ||\n\t\t\t\t\tinner.type === 'SlotElement' ||\n\t\t\t\t\tinner.type === 'SvelteFragment') &&\n\t\t\t\tinner.attributes.some((attr) => attr.type === 'Attribute' && attr.name === 'slot')\n\t\t\t) {\n\t\t\t\tif (inner_start && !inner_end) {\n\t\t\t\t\t// End of default slot content\n\t\t\t\t\tinner_end = inner.start;\n\t\t\t\t}\n\t\t\t} else if (!inner_start && !is_empty_text) {\n\t\t\t\t// Start of default slot content\n\t\t\t\tinner_start = inner.start;\n\t\t\t} else if (inner_end && !is_empty_text) {\n\t\t\t\t// There was default slot content before, then some named slot content, now some default slot content again.\n\t\t\t\t// We're moving the last character back by one to avoid the closing {/snippet} tag inserted afterwards\n\t\t\t\t// to come before the opening {#snippet} tag of the named slot.\n\t\t\t\tstate.str.update(inner_end - 1, inner_end, '');\n\t\t\t\tstate.str.prependLeft(inner_end - 1, state.str.original[inner_end - 1]);\n\t\t\t\tstate.str.move(inner.start, inner.end, inner_end - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!inner_end) {\n\t\t\tinner_end = node.fragment.nodes[node.fragment.nodes.length - 1].end;\n\t\t}\n\n\t\tstate.str.appendLeft(\n\t\t\tinner_start,\n\t\t\t`{#snippet ${snippet_name}(${props})}\\n${state.indent.repeat(path.length)}`\n\t\t);\n\t\tstate.str.indent(state.indent, {\n\t\t\texclude: [\n\t\t\t\t[0, inner_start],\n\t\t\t\t[inner_end, state.str.original.length]\n\t\t\t]\n\t\t});\n\t\tif (inner_end < node.fragment.nodes[node.fragment.nodes.length - 1].end) {\n\t\t\t// Named slots coming afterwards\n\t\t\tstate.str.prependLeft(inner_end, `{/snippet}\\n${state.indent.repeat(path.length)}`);\n\t\t} else {\n\t\t\t// No named slots coming afterwards\n\t\t\tstate.str.prependLeft(\n\t\t\t\tinner_end,\n\t\t\t\t`${state.indent.repeat(path.length)}{/snippet}\\n${state.indent.repeat(path.length - 1)}`\n\t\t\t);\n\t\t}\n\t} else {\n\t\t// Named slot or `svelte:fragment`: wrap element itself in a snippet\n\t\tstate.str.prependLeft(\n\t\t\tnode.start,\n\t\t\t`{#snippet ${snippet_name}(${props})}\\n${state.indent.repeat(path.length - 2)}`\n\t\t);\n\t\tstate.str.indent(state.indent, {\n\t\t\texclude: [\n\t\t\t\t[0, node.start],\n\t\t\t\t[node.end, state.str.original.length]\n\t\t\t]\n\t\t});\n\t\tconst str = `\\n${state.indent.repeat(path.length - 2)}{/snippet}`;\n\n\t\tif (node.type === 'SlotElement') {\n\t\t\tstate.str.appendRight(node.end, str);\n\t\t} else {\n\t\t\tstate.str.appendLeft(node.end, str);\n\t\t}\n\t}\n}\n\n/**\n * @param {VariableDeclarator} declarator\n * @param {State} state\n * @param {AST.SvelteNode[]} path\n */\nfunction extract_type_and_comment(declarator, state, path) {\n\tconst str = state.str;\n\tconst parent = path.at(-1);\n\n\t// Try to find jsdoc above the declaration\n\tlet comment_node = /** @type {Node} */ (parent)?.leadingComments?.at(-1);\n\n\tconst comment_start = /** @type {any} */ (comment_node)?.start;\n\tconst comment_end = /** @type {any} */ (comment_node)?.end;\n\tlet comment = comment_node && str.original.substring(comment_start, comment_end);\n\tif (comment_node) {\n\t\tstr.update(comment_start, comment_end, '');\n\t}\n\n\t// Find trailing comments\n\tconst trailing_comment_node = /** @type {Node} */ (parent)?.trailingComments?.at(0);\n\tconst trailing_comment_start = /** @type {any} */ (trailing_comment_node)?.start;\n\tconst trailing_comment_end = /** @type {any} */ (trailing_comment_node)?.end;\n\tlet trailing_comment =\n\t\ttrailing_comment_node && str.original.substring(trailing_comment_start, trailing_comment_end);\n\n\tif (trailing_comment_node) {\n\t\tstr.update(trailing_comment_start, trailing_comment_end, '');\n\t}\n\n\tif (declarator.id.typeAnnotation) {\n\t\tstate.has_type_or_fallback = true;\n\t\tlet start = declarator.id.typeAnnotation.start + 1; // skip the colon\n\t\twhile (str.original[start] === ' ') {\n\t\t\tstart++;\n\t\t}\n\t\treturn {\n\t\t\ttype: str.original.substring(start, declarator.id.typeAnnotation.end),\n\t\t\tcomment,\n\t\t\ttrailing_comment\n\t\t};\n\t}\n\n\tlet cleaned_comment_arr = comment\n\t\t?.split('\\n')\n\t\t.map((line) =>\n\t\t\tline\n\t\t\t\t.trim()\n\t\t\t\t// replace `// ` for one liners\n\t\t\t\t.replace(/^\\/\\/\\s*/g, '')\n\t\t\t\t// replace `\\**` for the initial JSDoc\n\t\t\t\t.replace(/^\\/\\*\\*?\\s*/g, '')\n\t\t\t\t// migrate `*/` for the end of JSDoc\n\t\t\t\t.replace(/\\s*\\*\\/$/g, '')\n\t\t\t\t// remove any initial `* ` to clean the comment\n\t\t\t\t.replace(/^\\*\\s*/g, '')\n\t\t)\n\t\t.filter(Boolean);\n\tconst first_at_comment = cleaned_comment_arr?.findIndex((line) => line.startsWith('@'));\n\tlet cleaned_comment = cleaned_comment_arr\n\t\t?.slice(0, first_at_comment !== -1 ? first_at_comment : cleaned_comment_arr.length)\n\t\t.join('\\n');\n\n\tlet cleaned_comment_arr_trailing = trailing_comment\n\t\t?.split('\\n')\n\t\t.map((line) =>\n\t\t\tline\n\t\t\t\t.trim()\n\t\t\t\t// replace `// ` for one liners\n\t\t\t\t.replace(/^\\/\\/\\s*/g, '')\n\t\t\t\t// replace `\\**` for the initial JSDoc\n\t\t\t\t.replace(/^\\/\\*\\*?\\s*/g, '')\n\t\t\t\t// migrate `*/` for the end of JSDoc\n\t\t\t\t.replace(/\\s*\\*\\/$/g, '')\n\t\t\t\t// remove any initial `* ` to clean the comment\n\t\t\t\t.replace(/^\\*\\s*/g, '')\n\t\t)\n\t\t.filter(Boolean);\n\tconst first_at_comment_trailing = cleaned_comment_arr_trailing?.findIndex((line) =>\n\t\tline.startsWith('@')\n\t);\n\tlet cleaned_comment_trailing = cleaned_comment_arr_trailing\n\t\t?.slice(\n\t\t\t0,\n\t\t\tfirst_at_comment_trailing !== -1\n\t\t\t\t? first_at_comment_trailing\n\t\t\t\t: cleaned_comment_arr_trailing.length\n\t\t)\n\t\t.join('\\n');\n\n\t// try to find a comment with a type annotation, hinting at jsdoc\n\tif (parent?.type === 'ExportNamedDeclaration' && comment_node) {\n\t\tstate.has_type_or_fallback = true;\n\t\tconst match = /@type {(.+)}/.exec(comment_node.value);\n\t\tif (match) {\n\t\t\t// try to find JSDoc comments after a hyphen `-`\n\t\t\tconst jsdoc_comment = /@type {.+} (?:\\w+|\\[.*?\\]) - (.+)/.exec(comment_node.value);\n\t\t\tif (jsdoc_comment) {\n\t\t\t\tcleaned_comment += jsdoc_comment[1]?.trim();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: match[1],\n\t\t\t\tcomment: cleaned_comment,\n\t\t\t\ttrailing_comment: cleaned_comment_trailing\n\t\t\t};\n\t\t}\n\t}\n\n\t// try to infer it from the init\n\tif (declarator.init?.type === 'Literal') {\n\t\tstate.has_type_or_fallback = true; // only assume type if it's trivial to infer - else someone would've added a type annotation\n\t\tconst type = typeof declarator.init.value;\n\t\tif (type === 'string' || type === 'number' || type === 'boolean') {\n\t\t\treturn {\n\t\t\t\ttype,\n\t\t\t\tcomment: state.uses_ts ? comment : cleaned_comment,\n\t\t\t\ttrailing_comment: state.uses_ts ? trailing_comment : cleaned_comment_trailing\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\ttype: 'any',\n\t\tcomment: state.uses_ts ? comment : cleaned_comment,\n\t\ttrailing_comment: state.uses_ts ? trailing_comment : cleaned_comment_trailing\n\t};\n}\n\n// Ensure modifiers are applied in the same order as Svelte 4\nconst modifier_order = /** @type {const} */ ([\n\t'preventDefault',\n\t'stopPropagation',\n\t'stopImmediatePropagation',\n\t'self',\n\t'trusted',\n\t'once'\n]);\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement | AST.SvelteWindow | AST.SvelteDocument | AST.SvelteBody} element\n * @param {State} state\n */\nfunction handle_events(element, state) {\n\t/** @type {Map<string, AST.OnDirective[]>} */\n\tconst handlers = new Map();\n\tfor (const attribute of element.attributes) {\n\t\tif (attribute.type !== 'OnDirective') continue;\n\n\t\tlet name = `on${attribute.name}`;\n\t\tif (attribute.modifiers.includes('capture')) {\n\t\t\tname += 'capture';\n\t\t}\n\n\t\tconst nodes = handlers.get(name) || [];\n\t\tnodes.push(attribute);\n\t\thandlers.set(name, nodes);\n\t}\n\n\tfor (const [name, nodes] of handlers) {\n\t\tconst handlers = [];\n\n\t\tlet first = null;\n\n\t\tfor (const node of nodes) {\n\t\t\t/** @type {string} */\n\t\t\tlet body;\n\n\t\t\tif (node.expression) {\n\t\t\t\tbody = state.str.original.substring(\n\t\t\t\t\t/** @type {number} */ (node.expression.start),\n\t\t\t\t\t/** @type {number} */ (node.expression.end)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tbody = `${state.names.bubble}('${node.name}')`;\n\t\t\t\tstate.legacy_imports.add('createBubbler');\n\t\t\t\tstate.script_insertions.add(\n\t\t\t\t\t`const ${state.names.bubble} = ${state.names.createBubbler}();`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst has_passive = node.modifiers.includes('passive');\n\t\t\tconst has_nonpassive = node.modifiers.includes('nonpassive');\n\n\t\t\tconst modifiers = modifier_order.filter((modifier) => node.modifiers.includes(modifier));\n\n\t\t\tfor (const modifier of modifiers) {\n\t\t\t\tstate.legacy_imports.add(modifier);\n\t\t\t\tbody = `${state.names[modifier]}(${body})`;\n\t\t\t}\n\n\t\t\tif (has_passive || has_nonpassive) {\n\t\t\t\tconst action = has_passive ? 'passive' : 'nonpassive';\n\t\t\t\tstate.legacy_imports.add(action);\n\n\t\t\t\tstate.str.overwrite(\n\t\t\t\t\tnode.start,\n\t\t\t\t\tnode.end,\n\t\t\t\t\t`use:${state.names[action]}={['${node.name}', () => ${body}]}`\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tif (first) {\n\t\t\t\t\tlet start = node.start;\n\t\t\t\t\tlet end = node.end;\n\n\t\t\t\t\twhile (/[\\s\\n]/.test(state.str.original[start - 1])) start -= 1;\n\t\t\t\t\tstate.str.remove(start, end);\n\t\t\t\t} else {\n\t\t\t\t\tfirst = node;\n\t\t\t\t}\n\n\t\t\t\thandlers.push(body);\n\t\t\t}\n\t\t}\n\n\t\tif (first) {\n\t\t\t/** @type {string} */\n\t\t\tlet replacement;\n\n\t\t\tif (handlers.length > 1) {\n\t\t\t\tstate.legacy_imports.add('handlers');\n\t\t\t\treplacement = `${name}={${state.names.handlers}(${handlers.join(', ')})}`;\n\t\t\t} else {\n\t\t\t\tconst handler = handlers[0];\n\t\t\t\treplacement = handler === name ? `{${handler}}` : `${name}={${handler}}`;\n\t\t\t}\n\n\t\t\tstate.str.overwrite(first.start, first.end, replacement);\n\t\t}\n\t}\n}\n\n/**\n * Returns start and end of the node. If the start is preceded with white-space-only before a line break,\n * the start will be the start of the line.\n * @param {string} source\n * @param {LabeledStatement} node\n */\nfunction get_node_range(source, node) {\n\tconst first_leading_comment = node.leadingComments?.[0];\n\tconst last_trailing_comment = node.trailingComments?.[node.trailingComments.length - 1];\n\n\t// @ts-expect-error the type of `Comment` seems to be wrong...the node actually contains\n\t// start and end but the type seems to only contain a `range` (which doesn't actually exists)\n\tlet start = /** @type {number} */ (first_leading_comment?.start ?? node.start);\n\t// @ts-expect-error the type of `Comment` seems to be wrong...the node actually contains\n\t// start and end but the type seems to only contain a `range` (which doesn't actually exists)\n\tlet end = /** @type {number} */ (last_trailing_comment?.end ?? node.end);\n\n\tlet idx = start;\n\twhile (source[idx - 1] !== '\\n' && source[idx - 1] !== '\\r') {\n\t\tidx--;\n\t\tif (source[idx] !== ' ' && source[idx] !== '\\t') {\n\t\t\tidx = start;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tstart = idx;\n\n\treturn { start, end };\n}\n\n/**\n * @param {Identifier} node\n * @param {State} state\n * @param {any[]} path\n */\nfunction handle_identifier(node, state, path) {\n\tconst parent = path.at(-1);\n\tif (parent?.type === 'MemberExpression' && parent.property === node) return;\n\n\tif (state.analysis.uses_props && node.name !== '$$slots') {\n\t\tif (node.name === '$$props' || node.name === '$$restProps') {\n\t\t\t// not 100% correct for $$restProps but it'll do\n\t\t\tstate.str.update(\n\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\t/** @type {number} */ (node.end),\n\t\t\t\tstate.names.props\n\t\t\t);\n\t\t} else {\n\t\t\tconst binding = state.scope.get(node.name);\n\t\t\tif (binding?.kind === 'bindable_prop' && binding.node !== node) {\n\t\t\t\tstate.str.prependLeft(/** @type {number} */ (node.start), `${state.names.props}.`);\n\t\t\t}\n\t\t}\n\t} else if (node.name === '$$restProps' && state.analysis.uses_rest_props) {\n\t\tstate.str.update(\n\t\t\t/** @type {number} */ (node.start),\n\t\t\t/** @type {number} */ (node.end),\n\t\t\tstate.names.rest\n\t\t);\n\t} else if (node.name === '$$slots' && state.analysis.uses_slots) {\n\t\tif (parent?.type === 'MemberExpression') {\n\t\t\tif (state.analysis.custom_element) return;\n\n\t\t\tlet name = parent.property.type === 'Literal' ? parent.property.value : parent.property.name;\n\t\t\tlet slot_name = name;\n\t\t\tconst existing_prop = state.props.find((prop) => prop.slot_name === name);\n\t\t\tif (existing_prop) {\n\t\t\t\tname = existing_prop.local;\n\t\t\t} else if (name !== 'default') {\n\t\t\t\tlet new_name = state.scope.generate(name);\n\t\t\t\tif (new_name !== name) {\n\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t`This migration would change the name of a slot (${name} to ${new_name}) making the component unusable`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tname = name === 'default' ? 'children' : name;\n\n\t\t\tif (!existing_prop) {\n\t\t\t\tstate.props.push({\n\t\t\t\t\tlocal: name,\n\t\t\t\t\texported: name,\n\t\t\t\t\tinit: '',\n\t\t\t\t\tbindable: false,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tslot_name,\n\t\t\t\t\t// if it's the first time we encounter this slot\n\t\t\t\t\t// we start with any and delegate to when the slot\n\t\t\t\t\t// is actually rendered (it might not happen in that case)\n\t\t\t\t\t// any is still a safe bet\n\t\t\t\t\ttype: `import('svelte').Snippet<[any]>`,\n\t\t\t\t\tneeds_refine_type: true\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tstate.str.update(\n\t\t\t\t/** @type {number} */ (node.start),\n\t\t\t\tparent.property.start,\n\t\t\t\tstate.analysis.uses_props ? `${state.names.props}.` : ''\n\t\t\t);\n\t\t\tstate.str.update(parent.property.start, parent.end, name);\n\t\t}\n\t\t// else passed as identifier, we don't know what to do here, so let it error\n\t} else if (\n\t\tparent?.type === 'TSInterfaceDeclaration' ||\n\t\tparent?.type === 'TSTypeAliasDeclaration'\n\t) {\n\t\tconst members =\n\t\t\tparent.type === 'TSInterfaceDeclaration' ? parent.body.body : parent.typeAnnotation?.members;\n\t\tif (Array.isArray(members)) {\n\t\t\tif (node.name === '$$Props') {\n\t\t\t\tstate.has_type_or_fallback = true;\n\n\t\t\t\tfor (const member of members) {\n\t\t\t\t\tconst prop = state.props.find((prop) => prop.exported === member.key.name);\n\n\t\t\t\t\tconst type = state.str.original.substring(\n\t\t\t\t\t\tmember.typeAnnotation.typeAnnotation.start,\n\t\t\t\t\t\tmember.typeAnnotation.typeAnnotation.end\n\t\t\t\t\t);\n\n\t\t\t\t\tlet comment;\n\t\t\t\t\tconst comment_node = member.leadingComments?.at(-1);\n\t\t\t\t\tif (comment_node?.type === 'Block') {\n\t\t\t\t\t\tcomment = state.str.original.substring(comment_node.start, comment_node.end);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst trailing_comment = member.trailingComments?.at(0)?.value;\n\n\t\t\t\t\tif (prop) {\n\t\t\t\t\t\tprop.type = type;\n\t\t\t\t\t\tprop.optional = member.optional;\n\t\t\t\t\t\tprop.comment = comment ?? prop.comment;\n\t\t\t\t\t\tprop.trailing_comment = trailing_comment ?? prop.trailing_comment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.props.push({\n\t\t\t\t\t\t\tlocal: member.key.name,\n\t\t\t\t\t\t\texported: member.key.name,\n\t\t\t\t\t\t\tinit: '',\n\t\t\t\t\t\t\tbindable: false,\n\t\t\t\t\t\t\toptional: member.optional,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tcomment,\n\t\t\t\t\t\t\ttrailing_comment,\n\t\t\t\t\t\t\ttype_only: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstate.str.remove(parent.start, parent.end);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** @param {string} content */\nfunction guess_indent(content) {\n\tconst lines = content.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn '\\t';\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst count = /^ +/.exec(current)?.[0].length ?? 0;\n\t\treturn Math.min(count, previous);\n\t}, Infinity);\n\n\treturn ' '.repeat(min);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/acorn.js",
    "content": "/** @import { Comment, Program } from 'estree' */\n/** @import { AST } from '#compiler' */\nimport * as acorn from 'acorn';\nimport { walk } from 'zimmerframe';\nimport { tsPlugin } from '@sveltejs/acorn-typescript';\n\nconst ParserWithTS = acorn.Parser.extend(tsPlugin());\n\n/**\n * @typedef {Comment & {\n *   start: number;\n *   end: number;\n * }} CommentWithLocation\n */\n\n/**\n * @param {string} source\n * @param {AST.JSComment[]} comments\n * @param {boolean} typescript\n * @param {boolean} [is_script]\n */\nexport function parse(source, comments, typescript, is_script) {\n\tconst parser = typescript ? ParserWithTS : acorn.Parser;\n\n\tconst { onComment, add_comments } = get_comment_handlers(\n\t\tsource,\n\t\t/** @type {CommentWithLocation[]} */ (comments)\n\t);\n\n\t// @ts-ignore\n\tconst parse_statement = parser.prototype.parseStatement;\n\n\t// If we're dealing with a <script> then it might contain an export\n\t// for something that doesn't exist directly inside but is inside the\n\t// component instead, so we need to ensure that Acorn doesn't throw\n\t// an error in these cases\n\tif (is_script) {\n\t\t// @ts-ignore\n\t\tparser.prototype.parseStatement = function (...args) {\n\t\t\tconst v = parse_statement.call(this, ...args);\n\t\t\t// @ts-ignore\n\t\t\tthis.undefinedExports = {};\n\t\t\treturn v;\n\t\t};\n\t}\n\n\tlet ast;\n\n\ttry {\n\t\tast = parser.parse(source, {\n\t\t\tonComment,\n\t\t\tsourceType: 'module',\n\t\t\tecmaVersion: 16,\n\t\t\tlocations: true\n\t\t});\n\t} finally {\n\t\tif (is_script) {\n\t\t\t// @ts-ignore\n\t\t\tparser.prototype.parseStatement = parse_statement;\n\t\t}\n\t}\n\n\tadd_comments(ast);\n\n\treturn /** @type {Program} */ (ast);\n}\n\n/**\n * @param {string} source\n * @param {Comment[]} comments\n * @param {boolean} typescript\n * @param {number} index\n * @returns {acorn.Expression & { leadingComments?: CommentWithLocation[]; trailingComments?: CommentWithLocation[]; }}\n */\nexport function parse_expression_at(source, comments, typescript, index) {\n\tconst parser = typescript ? ParserWithTS : acorn.Parser;\n\n\tconst { onComment, add_comments } = get_comment_handlers(\n\t\tsource,\n\t\t/** @type {CommentWithLocation[]} */ (comments),\n\t\tindex\n\t);\n\n\tconst ast = parser.parseExpressionAt(source, index, {\n\t\tonComment,\n\t\tsourceType: 'module',\n\t\tecmaVersion: 16,\n\t\tlocations: true\n\t});\n\n\tadd_comments(ast);\n\n\treturn ast;\n}\n\n/**\n * Acorn doesn't add comments to the AST by itself. This factory returns the capabilities\n * to add them after the fact. They are needed in order to support `svelte-ignore` comments\n * in JS code and so that `prettier-plugin-svelte` doesn't remove all comments when formatting.\n * @param {string} source\n * @param {CommentWithLocation[]} comments\n * @param {number} index\n */\nfunction get_comment_handlers(source, comments, index = 0) {\n\treturn {\n\t\t/**\n\t\t * @param {boolean} block\n\t\t * @param {string} value\n\t\t * @param {number} start\n\t\t * @param {number} end\n\t\t * @param {import('acorn').Position} [start_loc]\n\t\t * @param {import('acorn').Position} [end_loc]\n\t\t */\n\t\tonComment: (block, value, start, end, start_loc, end_loc) => {\n\t\t\tif (block && /\\n/.test(value)) {\n\t\t\t\tlet a = start;\n\t\t\t\twhile (a > 0 && source[a - 1] !== '\\n') a -= 1;\n\n\t\t\t\tlet b = a;\n\t\t\t\twhile (/[ \\t]/.test(source[b])) b += 1;\n\n\t\t\t\tconst indentation = source.slice(a, b);\n\t\t\t\tvalue = value.replace(new RegExp(`^${indentation}`, 'gm'), '');\n\t\t\t}\n\n\t\t\tcomments.push({\n\t\t\t\ttype: block ? 'Block' : 'Line',\n\t\t\t\tvalue,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tloc: {\n\t\t\t\t\tstart: /** @type {import('acorn').Position} */ (start_loc),\n\t\t\t\t\tend: /** @type {import('acorn').Position} */ (end_loc)\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/** @param {acorn.Node & { leadingComments?: CommentWithLocation[]; trailingComments?: CommentWithLocation[]; }} ast */\n\t\tadd_comments(ast) {\n\t\t\tif (comments.length === 0) return;\n\n\t\t\tcomments = comments\n\t\t\t\t.filter((comment) => comment.start >= index)\n\t\t\t\t.map(({ type, value, start, end }) => ({ type, value, start, end }));\n\n\t\t\twalk(ast, null, {\n\t\t\t\t_(node, { next, path }) {\n\t\t\t\t\tlet comment;\n\n\t\t\t\t\twhile (comments[0] && comments[0].start < node.start) {\n\t\t\t\t\t\tcomment = /** @type {CommentWithLocation} */ (comments.shift());\n\t\t\t\t\t\t(node.leadingComments ||= []).push(comment);\n\t\t\t\t\t}\n\n\t\t\t\t\tnext();\n\n\t\t\t\t\tif (comments[0]) {\n\t\t\t\t\t\tconst parent = /** @type {any} */ (path.at(-1));\n\n\t\t\t\t\t\tif (parent === undefined || node.end !== parent.end) {\n\t\t\t\t\t\t\tconst slice = source.slice(node.end, comments[0].start);\n\t\t\t\t\t\t\tconst is_last_in_body =\n\t\t\t\t\t\t\t\t((parent?.type === 'BlockStatement' || parent?.type === 'Program') &&\n\t\t\t\t\t\t\t\t\tparent.body.indexOf(node) === parent.body.length - 1) ||\n\t\t\t\t\t\t\t\t(parent?.type === 'ArrayExpression' &&\n\t\t\t\t\t\t\t\t\tparent.elements.indexOf(node) === parent.elements.length - 1) ||\n\t\t\t\t\t\t\t\t(parent?.type === 'ObjectExpression' &&\n\t\t\t\t\t\t\t\t\tparent.properties.indexOf(node) === parent.properties.length - 1);\n\n\t\t\t\t\t\t\tif (is_last_in_body) {\n\t\t\t\t\t\t\t\t// Special case: There can be multiple trailing comments after the last node in a block,\n\t\t\t\t\t\t\t\t// and they can be separated by newlines\n\t\t\t\t\t\t\t\tlet end = node.end;\n\n\t\t\t\t\t\t\t\twhile (comments.length) {\n\t\t\t\t\t\t\t\t\tconst comment = comments[0];\n\t\t\t\t\t\t\t\t\tif (parent && comment.start >= parent.end) break;\n\n\t\t\t\t\t\t\t\t\t(node.trailingComments ||= []).push(comment);\n\t\t\t\t\t\t\t\t\tcomments.shift();\n\t\t\t\t\t\t\t\t\tend = comment.end;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (node.end <= comments[0].start && /^[,) \\t]*$/.test(slice)) {\n\t\t\t\t\t\t\t\tnode.trailingComments = [/** @type {CommentWithLocation} */ (comments.shift())];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Special case: Trailing comments after the root node (which can only happen for expression tags or for Program nodes).\n\t\t\t// Adding them ensures that we can later detect the end of the expression tag correctly.\n\t\t\tif (comments.length > 0 && (comments[0].start >= ast.end || ast.type === 'Program')) {\n\t\t\t\t(ast.trailingComments ||= []).push(...comments.splice(0));\n\t\t\t}\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/index.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Location } from 'locate-character' */\n/** @import * as ESTree from 'estree' */\n// @ts-expect-error acorn type definitions are borked in the release we use\nimport { isIdentifierStart, isIdentifierChar } from 'acorn';\nimport fragment from './state/fragment.js';\nimport * as e from '../../errors.js';\nimport { create_fragment } from './utils/create.js';\nimport read_options from './read/options.js';\nimport { is_reserved } from '../../../utils.js';\nimport { disallow_children } from '../2-analyze/visitors/shared/special-element.js';\nimport * as state from '../../state.js';\n\nconst regex_position_indicator = / \\(\\d+:\\d+\\)$/;\n\n/** @param {number} cc */\nfunction is_whitespace(cc) {\n\t// fast path for common whitespace\n\tif (cc === 32 || (cc <= 13 && cc >= 9)) return true;\n\t// rare whitespace — \\u00a0, \\u1680, \\u2000-\\u200a, \\u2028, \\u2029, \\u202f, \\u205f, \\u3000, \\ufeff\n\tif (cc < 160) return false;\n\treturn (\n\t\tcc === 160 ||\n\t\tcc === 5760 ||\n\t\t(cc >= 8192 && cc <= 8202) ||\n\t\tcc === 8232 ||\n\t\tcc === 8233 ||\n\t\tcc === 8239 ||\n\t\tcc === 8287 ||\n\t\tcc === 12288 ||\n\t\tcc === 65279\n\t);\n}\n\nconst regex_lang_attribute =\n\t/<!--[^]*?-->|<script\\s+(?:[^>]*|(?:[^=>'\"/]+=(?:\"[^\"]*\"|'[^']*'|[^>\\s]+)\\s+)*)lang=([\"'])?([^\"' >]+)\\1[^>]*>/g;\n\nexport class Parser {\n\t/**\n\t * @readonly\n\t * @type {string}\n\t */\n\ttemplate;\n\n\t/**\n\t * Whether or not we're in loose parsing mode, in which\n\t * case we try to continue parsing as much as possible\n\t * @type {boolean}\n\t */\n\tloose;\n\n\t/** */\n\tindex = 0;\n\n\t/**\n\t * Creates a minimal parser instance for CSS-only parsing.\n\t * Skips Svelte component parsing setup.\n\t * @param {string} source\n\t * @returns {Parser}\n\t */\n\tstatic forCss(source) {\n\t\tconst parser = Object.create(Parser.prototype);\n\t\tparser.template = source;\n\t\tparser.index = 0;\n\t\tparser.loose = false;\n\t\treturn parser;\n\t}\n\n\t/** Whether we're parsing in TypeScript mode */\n\tts = false;\n\n\t/** @type {AST.TemplateNode[]} */\n\tstack = [];\n\n\t/** @type {AST.Fragment[]} */\n\tfragments = [];\n\n\t/** @type {AST.Root} */\n\troot;\n\n\t/** @type {Record<string, boolean>} */\n\tmeta_tags = {};\n\n\t/** @type {LastAutoClosedTag | undefined} */\n\tlast_auto_closed_tag;\n\n\t/**\n\t * @param {string} template\n\t * @param {boolean} loose\n\t */\n\tconstructor(template, loose) {\n\t\tif (typeof template !== 'string') {\n\t\t\tthrow new TypeError('Template must be a string');\n\t\t}\n\n\t\tthis.loose = loose;\n\t\tthis.template = template.trimEnd();\n\n\t\tlet match_lang;\n\n\t\tdo match_lang = regex_lang_attribute.exec(template);\n\t\twhile (match_lang && match_lang[0][1] !== 's'); // ensure it starts with '<s' to match script tags\n\n\t\tregex_lang_attribute.lastIndex = 0; // reset matched index to pass tests - otherwise declare the regex inside the constructor\n\n\t\tthis.ts = match_lang?.[2] === 'ts';\n\n\t\tthis.root = {\n\t\t\tcss: null,\n\t\t\tjs: [],\n\t\t\t// @ts-ignore\n\t\t\tstart: null,\n\t\t\t// @ts-ignore\n\t\t\tend: null,\n\t\t\ttype: 'Root',\n\t\t\tfragment: create_fragment(),\n\t\t\toptions: null,\n\t\t\tcomments: [],\n\t\t\tmetadata: {\n\t\t\t\tts: this.ts\n\t\t\t}\n\t\t};\n\n\t\tthis.stack.push(this.root);\n\t\tthis.fragments.push(this.root.fragment);\n\n\t\t/** @type {ParserState} */\n\t\tlet state = fragment;\n\n\t\twhile (this.index < this.template.length) {\n\t\t\tstate = state(this) || fragment;\n\t\t}\n\n\t\tif (this.stack.length > 1) {\n\t\t\tconst current = this.current();\n\n\t\t\tif (this.loose) {\n\t\t\t\tcurrent.end = this.template.length;\n\t\t\t} else if (current.type === 'RegularElement') {\n\t\t\t\tcurrent.end = current.start + 1;\n\t\t\t\te.element_unclosed(current, current.name);\n\t\t\t} else {\n\t\t\t\tcurrent.end = current.start + 1;\n\t\t\t\te.block_unclosed(current);\n\t\t\t}\n\t\t}\n\n\t\tif (state !== fragment) {\n\t\t\te.unexpected_eof(this.index);\n\t\t}\n\n\t\tthis.root.start = 0;\n\t\tthis.root.end = template.length;\n\n\t\tconst options_index = this.root.fragment.nodes.findIndex(\n\t\t\t/** @param {any} thing */\n\t\t\t(thing) => thing.type === 'SvelteOptions'\n\t\t);\n\t\tif (options_index !== -1) {\n\t\t\tconst options = /** @type {AST.SvelteOptionsRaw} */ (this.root.fragment.nodes[options_index]);\n\t\t\tthis.root.fragment.nodes.splice(options_index, 1);\n\t\t\tthis.root.options = read_options(options);\n\n\t\t\tdisallow_children(options);\n\n\t\t\t// We need this for the old AST format\n\t\t\tObject.defineProperty(this.root.options, '__raw__', {\n\t\t\t\tvalue: options,\n\t\t\t\tenumerable: false\n\t\t\t});\n\t\t}\n\t}\n\n\tcurrent() {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\n\t/**\n\t * @param {any} err\n\t * @returns {never}\n\t */\n\tacorn_error(err) {\n\t\te.js_parse_error(err.pos, err.message.replace(regex_position_indicator, ''));\n\t}\n\n\t/**\n\t * @param {string} str\n\t * @param {boolean} required\n\t * @param {boolean} required_in_loose\n\t */\n\teat(str, required = false, required_in_loose = true) {\n\t\tif (this.match(str)) {\n\t\t\tthis.index += str.length;\n\t\t\treturn true;\n\t\t}\n\n\t\tif (required && (!this.loose || required_in_loose)) {\n\t\t\te.expected_token(this.index, str);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @param {string} str */\n\tmatch(str) {\n\t\tconst length = str.length;\n\t\tif (length === 1) {\n\t\t\t// more performant than slicing\n\t\t\treturn this.template[this.index] === str;\n\t\t}\n\n\t\treturn this.template.startsWith(str, this.index);\n\t}\n\n\t/**\n\t * Match a regex at the current index\n\t * @param {RegExp} pattern  Should have the sticky (`y`) flag so that it only matches at the current index\n\t */\n\tmatch_regex(pattern) {\n\t\tpattern.lastIndex = this.index;\n\t\tconst match = pattern.exec(this.template);\n\t\tif (!match || match.index !== this.index) return null;\n\n\t\treturn match[0];\n\t}\n\n\tallow_whitespace() {\n\t\twhile (\n\t\t\tthis.index < this.template.length &&\n\t\t\tis_whitespace(this.template.charCodeAt(this.index))\n\t\t) {\n\t\t\tthis.index++;\n\t\t}\n\t}\n\n\t/**\n\t * Search for a regex starting at the current index and return the result if it matches\n\t * @param {RegExp} pattern  Should have a ^ anchor at the start so the regex doesn't search past the beginning, resulting in worse performance\n\t */\n\tread(pattern) {\n\t\tconst result = this.match_regex(pattern);\n\t\tif (result) this.index += result.length;\n\t\treturn result;\n\t}\n\n\t/**\n\t * @returns {ESTree.Identifier & { start: number, end: number, loc: { start: Location, end: Location } }}\n\t */\n\tread_identifier() {\n\t\tconst start = this.index;\n\t\tlet end = start;\n\t\tlet name = '';\n\n\t\tconst code = /** @type {number} */ (this.template.codePointAt(this.index));\n\n\t\tif (isIdentifierStart(code, true)) {\n\t\t\tlet i = this.index;\n\t\t\tend += code <= 0xffff ? 1 : 2;\n\n\t\t\twhile (end < this.template.length) {\n\t\t\t\tconst code = /** @type {number} */ (this.template.codePointAt(end));\n\n\t\t\t\tif (!isIdentifierChar(code, true)) break;\n\t\t\t\tend += code <= 0xffff ? 1 : 2;\n\t\t\t}\n\n\t\t\tname = this.template.slice(start, end);\n\t\t\tthis.index = end;\n\n\t\t\tif (is_reserved(name)) {\n\t\t\t\te.unexpected_reserved_word(start, name);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'Identifier',\n\t\t\tname,\n\t\t\tstart,\n\t\t\tend,\n\t\t\tloc: {\n\t\t\t\tstart: state.locator(start),\n\t\t\t\tend: state.locator(end)\n\t\t\t}\n\t\t};\n\t}\n\n\t/** @param {RegExp} pattern */\n\tread_until(pattern) {\n\t\tif (this.index >= this.template.length) {\n\t\t\tif (this.loose) return '';\n\t\t\te.unexpected_eof(this.template.length);\n\t\t}\n\n\t\tconst start = this.index;\n\t\tconst match = pattern.exec(this.template.slice(start));\n\n\t\tif (match) {\n\t\t\tthis.index = start + match.index;\n\t\t\treturn this.template.slice(start, this.index);\n\t\t}\n\n\t\tthis.index = this.template.length;\n\t\treturn this.template.slice(start);\n\t}\n\n\trequire_whitespace() {\n\t\tif (!is_whitespace(this.template.charCodeAt(this.index))) {\n\t\t\te.expected_whitespace(this.index);\n\t\t}\n\n\t\tthis.allow_whitespace();\n\t}\n\n\tpop() {\n\t\tthis.fragments.pop();\n\t\treturn this.stack.pop();\n\t}\n\n\t/**\n\t * @template {AST.Fragment['nodes'][number]} T\n\t * @param {T} node\n\t * @returns {T}\n\t */\n\tappend(node) {\n\t\tthis.fragments.at(-1)?.nodes.push(node);\n\t\treturn node;\n\t}\n}\n\n/**\n * @param {string} template\n * @param {boolean} [loose]\n * @returns {AST.Root}\n */\nexport function parse(template, loose = false) {\n\tstate.set_source(template);\n\n\tconst parser = new Parser(template, loose);\n\treturn parser.root;\n}\n\n/** @typedef {(parser: Parser) => ParserState | void} ParserState */\n\n/** @typedef {Object} LastAutoClosedTag\n * @property {string} tag\n * @property {string} reason\n * @property {number} depth\n */\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/read/context.js",
    "content": "/** @import { Pattern } from 'estree' */\n/** @import { Parser } from '../index.js' */\nimport { match_bracket } from '../utils/bracket.js';\nimport { parse_expression_at } from '../acorn.js';\nimport { regex_not_newline_characters } from '../../patterns.js';\nimport * as e from '../../../errors.js';\n\n/**\n * @param {Parser} parser\n * @returns {Pattern}\n */\nexport default function read_pattern(parser) {\n\tconst start = parser.index;\n\tlet i = parser.index;\n\n\tconst id = parser.read_identifier();\n\n\tif (id.name !== '') {\n\t\tconst annotation = read_type_annotation(parser);\n\n\t\treturn {\n\t\t\t...id,\n\t\t\ttypeAnnotation: annotation\n\t\t};\n\t}\n\n\tconst char = parser.template[i];\n\n\tif (char !== '{' && char !== '[') {\n\t\te.expected_pattern(i);\n\t}\n\n\ti = match_bracket(parser, start);\n\tparser.index = i;\n\n\tconst pattern_string = parser.template.slice(start, i);\n\n\ttry {\n\t\t// the length of the `space_with_newline` has to be start - 1\n\t\t// because we added a `(` in front of the pattern_string,\n\t\t// which shifted the entire string to right by 1\n\t\t// so we offset it by removing 1 character in the `space_with_newline`\n\t\t// to achieve that, we remove the 1st space encountered,\n\t\t// so it will not affect the `column` of the node\n\t\tlet space_with_newline = parser.template\n\t\t\t.slice(0, start)\n\t\t\t.replace(regex_not_newline_characters, ' ');\n\t\tconst first_space = space_with_newline.indexOf(' ');\n\t\tspace_with_newline =\n\t\t\tspace_with_newline.slice(0, first_space) + space_with_newline.slice(first_space + 1);\n\n\t\tconst expression = /** @type {any} */ (\n\t\t\tparse_expression_at(\n\t\t\t\t`${space_with_newline}(${pattern_string} = 1)`,\n\t\t\t\tparser.root.comments,\n\t\t\t\tparser.ts,\n\t\t\t\tstart - 1\n\t\t\t)\n\t\t).left;\n\n\t\texpression.typeAnnotation = read_type_annotation(parser);\n\t\tif (expression.typeAnnotation) {\n\t\t\texpression.end = expression.typeAnnotation.end;\n\t\t}\n\n\t\treturn expression;\n\t} catch (error) {\n\t\tparser.acorn_error(error);\n\t}\n}\n\n/**\n * @param {Parser} parser\n * @returns {any}\n */\nfunction read_type_annotation(parser) {\n\tconst start = parser.index;\n\tparser.allow_whitespace();\n\n\tif (!parser.eat(':')) {\n\t\tparser.index = start;\n\t\treturn undefined;\n\t}\n\n\t// we need to trick Acorn into parsing the type annotation\n\tconst insert = '_ as ';\n\tlet a = parser.index - insert.length;\n\tconst template =\n\t\tparser.template.slice(0, a).replace(/[^\\n]/g, ' ') +\n\t\tinsert +\n\t\t// If this is a type annotation for a function parameter, Acorn-TS will treat subsequent\n\t\t// parameters as part of a sequence expression instead, and will then error on optional\n\t\t// parameters (`?:`). Therefore replace that sequence with something that will not error.\n\t\tparser.template.slice(parser.index).replace(/\\?\\s*:/g, ':');\n\tlet expression = parse_expression_at(template, parser.root.comments, parser.ts, a);\n\n\t// `foo: bar = baz` gets mangled — fix it\n\tif (expression.type === 'AssignmentExpression') {\n\t\tlet b = expression.right.start;\n\t\twhile (template[b] !== '=') b -= 1;\n\t\texpression = parse_expression_at(template.slice(0, b), parser.root.comments, parser.ts, a);\n\t}\n\n\t// `array as item: string, index` becomes `string, index`, which is mistaken as a sequence expression - fix that\n\tif (expression.type === 'SequenceExpression') {\n\t\texpression = expression.expressions[0];\n\t}\n\n\tparser.index = /** @type {number} */ (expression.end);\n\treturn {\n\t\ttype: 'TSTypeAnnotation',\n\t\tstart,\n\t\tend: parser.index,\n\t\ttypeAnnotation: /** @type {any} */ (expression).typeAnnotation\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/read/expression.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { Parser } from '../index.js' */\nimport { parse_expression_at } from '../acorn.js';\nimport { regex_whitespace } from '../../patterns.js';\nimport * as e from '../../../errors.js';\nimport { find_matching_bracket } from '../utils/bracket.js';\n\n/**\n * @param {Parser} parser\n * @param {string} [opening_token]\n * @returns {Expression | undefined}\n */\nexport function get_loose_identifier(parser, opening_token) {\n\t// Find the next } and treat it as the end of the expression\n\tconst end = find_matching_bracket(parser.template, parser.index, opening_token ?? '{');\n\tif (end) {\n\t\tconst start = parser.index;\n\t\tparser.index = end;\n\t\t// We don't know what the expression is and signal this by returning an empty identifier\n\t\treturn {\n\t\t\ttype: 'Identifier',\n\t\t\tstart,\n\t\t\tend,\n\t\t\tname: ''\n\t\t};\n\t}\n}\n\n/**\n * @param {Parser} parser\n * @param {string} [opening_token]\n * @param {boolean} [disallow_loose]\n * @returns {Expression}\n */\nexport default function read_expression(parser, opening_token, disallow_loose) {\n\ttry {\n\t\tlet comment_index = parser.root.comments.length;\n\n\t\tconst node = parse_expression_at(\n\t\t\tparser.template,\n\t\t\tparser.root.comments,\n\t\t\tparser.ts,\n\t\t\tparser.index\n\t\t);\n\n\t\tlet num_parens = 0;\n\n\t\tlet i = parser.root.comments.length;\n\t\twhile (i-- > comment_index) {\n\t\t\tconst comment = parser.root.comments[i];\n\t\t\tif (comment.end < node.start) {\n\t\t\t\tparser.index = comment.end;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = parser.index; i < /** @type {number} */ (node.start); i += 1) {\n\t\t\tif (parser.template[i] === '(') num_parens += 1;\n\t\t}\n\n\t\tlet index = /** @type {number} */ (node.end);\n\n\t\tconst last_comment = parser.root.comments.at(-1);\n\t\tif (last_comment && last_comment.end > index) index = last_comment.end;\n\n\t\twhile (num_parens > 0) {\n\t\t\tconst char = parser.template[index];\n\n\t\t\tif (char === ')') {\n\t\t\t\tnum_parens -= 1;\n\t\t\t} else if (!regex_whitespace.test(char)) {\n\t\t\t\te.expected_token(index, ')');\n\t\t\t}\n\n\t\t\tindex += 1;\n\t\t}\n\n\t\tparser.index = index;\n\n\t\treturn /** @type {Expression} */ (node);\n\t} catch (err) {\n\t\t// If we are in an each loop we need the error to be thrown in cases like\n\t\t// `as { y = z }` so we still throw and handle the error there\n\t\tif (parser.loose && !disallow_loose) {\n\t\t\tconst expression = get_loose_identifier(parser, opening_token);\n\t\t\tif (expression) {\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t}\n\n\t\tparser.acorn_error(err);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/read/options.js",
    "content": "/** @import { ObjectExpression } from 'estree' */\n/** @import { AST } from '#compiler' */\nimport { NAMESPACE_MATHML, NAMESPACE_SVG } from '../../../../constants.js';\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.SvelteOptionsRaw} node\n * @returns {AST.Root['options']}\n */\nexport default function read_options(node) {\n\t/** @type {AST.SvelteOptions} */\n\tconst component_options = {\n\t\tstart: node.start,\n\t\tend: node.end,\n\t\t// @ts-ignore\n\t\tattributes: node.attributes\n\t};\n\n\tif (!node) {\n\t\treturn component_options;\n\t}\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type !== 'Attribute') {\n\t\t\te.svelte_options_invalid_attribute(attribute);\n\t\t}\n\n\t\tconst { name } = attribute;\n\n\t\tswitch (name) {\n\t\t\tcase 'runes': {\n\t\t\t\tcomponent_options.runes = get_boolean_value(attribute);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'tag': {\n\t\t\t\te.svelte_options_deprecated_tag(attribute);\n\t\t\t\tbreak; // eslint doesn't know this is unnecessary\n\t\t\t}\n\t\t\tcase 'customElement': {\n\t\t\t\t/** @type {AST.SvelteOptions['customElement']} */\n\t\t\t\tconst ce = {};\n\t\t\t\tconst { value: v } = attribute;\n\t\t\t\tconst value = v === true || Array.isArray(v) ? v : [v];\n\n\t\t\t\tif (value === true) {\n\t\t\t\t\te.svelte_options_invalid_customelement(attribute);\n\t\t\t\t} else if (value[0].type === 'Text') {\n\t\t\t\t\tconst tag = get_static_value(attribute);\n\t\t\t\t\tvalidate_tag(attribute, tag);\n\t\t\t\t\tce.tag = tag;\n\t\t\t\t\tcomponent_options.customElement = ce;\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (value[0].expression.type !== 'ObjectExpression') {\n\t\t\t\t\t// Before Svelte 4 it was necessary to explicitly set customElement to null or else you'd get a warning.\n\t\t\t\t\t// This is no longer necessary, but for backwards compat just skip in this case now.\n\t\t\t\t\tif (value[0].expression.type === 'Literal' && value[0].expression.value === null) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\te.svelte_options_invalid_customelement(attribute);\n\t\t\t\t}\n\n\t\t\t\t/** @type {Array<[string, any]>} */\n\t\t\t\tconst properties = [];\n\t\t\t\tfor (const property of value[0].expression.properties) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tproperty.type !== 'Property' ||\n\t\t\t\t\t\tproperty.computed ||\n\t\t\t\t\t\tproperty.key.type !== 'Identifier'\n\t\t\t\t\t) {\n\t\t\t\t\t\te.svelte_options_invalid_customelement(attribute);\n\t\t\t\t\t}\n\t\t\t\t\tproperties.push([property.key.name, property.value]);\n\t\t\t\t}\n\n\t\t\t\tconst tag = properties.find(([name]) => name === 'tag');\n\t\t\t\tif (tag) {\n\t\t\t\t\tconst tag_value = tag[1]?.value;\n\t\t\t\t\tvalidate_tag(tag, tag_value);\n\t\t\t\t\tce.tag = tag_value;\n\t\t\t\t}\n\n\t\t\t\tconst props = properties.find(([name]) => name === 'props')?.[1];\n\t\t\t\tif (props) {\n\t\t\t\t\tif (props.type !== 'ObjectExpression') {\n\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t}\n\t\t\t\t\tce.props = {};\n\t\t\t\t\tfor (const property of /** @type {ObjectExpression} */ (props).properties) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tproperty.type !== 'Property' ||\n\t\t\t\t\t\t\tproperty.computed ||\n\t\t\t\t\t\t\tproperty.key.type !== 'Identifier' ||\n\t\t\t\t\t\t\tproperty.value.type !== 'ObjectExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tce.props[property.key.name] = {};\n\t\t\t\t\t\tfor (const prop of property.value.properties) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tprop.type !== 'Property' ||\n\t\t\t\t\t\t\t\tprop.computed ||\n\t\t\t\t\t\t\t\tprop.key.type !== 'Identifier' ||\n\t\t\t\t\t\t\t\tprop.value.type !== 'Literal'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (prop.key.name === 'type') {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t['String', 'Number', 'Boolean', 'Array', 'Object'].indexOf(\n\t\t\t\t\t\t\t\t\t\t/** @type {string} */ (prop.value.value)\n\t\t\t\t\t\t\t\t\t) === -1\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tce.props[property.key.name].type = /** @type {any} */ (prop.value.value);\n\t\t\t\t\t\t\t} else if (prop.key.name === 'reflect') {\n\t\t\t\t\t\t\t\tif (typeof prop.value.value !== 'boolean') {\n\t\t\t\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tce.props[property.key.name].reflect = prop.value.value;\n\t\t\t\t\t\t\t} else if (prop.key.name === 'attribute') {\n\t\t\t\t\t\t\t\tif (typeof prop.value.value !== 'string') {\n\t\t\t\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tce.props[property.key.name].attribute = prop.value.value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\te.svelte_options_invalid_customelement_props(attribute);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst shadow = properties.find(([name]) => name === 'shadow')?.[1];\n\t\t\t\tif (shadow) {\n\t\t\t\t\tif (shadow.type === 'Literal' && (shadow.value === 'open' || shadow.value === 'none')) {\n\t\t\t\t\t\tce.shadow = shadow.value;\n\t\t\t\t\t} else if (shadow.type === 'ObjectExpression') {\n\t\t\t\t\t\tce.shadow = shadow;\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.svelte_options_invalid_customelement_shadow(attribute);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst extend = properties.find(([name]) => name === 'extend')?.[1];\n\t\t\t\tif (extend) {\n\t\t\t\t\tce.extend = extend;\n\t\t\t\t}\n\n\t\t\t\tcomponent_options.customElement = ce;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'namespace': {\n\t\t\t\tconst value = get_static_value(attribute);\n\n\t\t\t\tif (value === NAMESPACE_SVG) {\n\t\t\t\t\tcomponent_options.namespace = 'svg';\n\t\t\t\t} else if (value === NAMESPACE_MATHML) {\n\t\t\t\t\tcomponent_options.namespace = 'mathml';\n\t\t\t\t} else if (value === 'html' || value === 'mathml' || value === 'svg') {\n\t\t\t\t\tcomponent_options.namespace = value;\n\t\t\t\t} else {\n\t\t\t\t\te.svelte_options_invalid_attribute_value(attribute, `\"html\", \"mathml\" or \"svg\"`);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'css': {\n\t\t\t\tconst value = get_static_value(attribute);\n\n\t\t\t\tif (value === 'injected') {\n\t\t\t\t\tcomponent_options.css = value;\n\t\t\t\t} else {\n\t\t\t\t\te.svelte_options_invalid_attribute_value(attribute, `\"injected\"`);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'immutable': {\n\t\t\t\tcomponent_options.immutable = get_boolean_value(attribute);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'preserveWhitespace': {\n\t\t\t\tcomponent_options.preserveWhitespace = get_boolean_value(attribute);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'accessors': {\n\t\t\t\tcomponent_options.accessors = get_boolean_value(attribute);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\te.svelte_options_unknown_attribute(attribute, name);\n\t\t}\n\t}\n\n\treturn component_options;\n}\n\n/**\n * @param {any} attribute\n */\nfunction get_static_value(attribute) {\n\tconst { value } = attribute;\n\n\tif (value === true) return true;\n\n\tconst chunk = Array.isArray(value) ? value[0] : value;\n\n\tif (!chunk) return true;\n\tif (value.length > 1) {\n\t\treturn null;\n\t}\n\tif (chunk.type === 'Text') return chunk.data;\n\tif (chunk.expression.type !== 'Literal') {\n\t\treturn null;\n\t}\n\n\treturn chunk.expression.value;\n}\n\n/**\n * @param {any} attribute\n */\nfunction get_boolean_value(attribute) {\n\tconst value = get_static_value(attribute);\n\tif (typeof value !== 'boolean') {\n\t\te.svelte_options_invalid_attribute_value(attribute, 'true or false');\n\t}\n\treturn value;\n}\n\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\nconst tag_name_char =\n\t'[a-z0-9_.\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u{10000}-\\u{EFFFF}-]';\nconst regex_valid_tag_name = new RegExp(`^[a-z]${tag_name_char}*-${tag_name_char}*$`, 'u');\nconst reserved_tag_names = [\n\t'annotation-xml',\n\t'color-profile',\n\t'font-face',\n\t'font-face-src',\n\t'font-face-uri',\n\t'font-face-format',\n\t'font-face-name',\n\t'missing-glyph'\n];\n\n/**\n * @param {any} attribute\n * @param {string | null} tag\n * @returns {asserts tag is string}\n */\nfunction validate_tag(attribute, tag) {\n\tif (typeof tag !== 'string') {\n\t\te.svelte_options_invalid_tagname(attribute);\n\t}\n\tif (tag) {\n\t\tif (!regex_valid_tag_name.test(tag)) {\n\t\t\te.svelte_options_invalid_tagname(attribute);\n\t\t} else if (reserved_tag_names.includes(tag)) {\n\t\t\te.svelte_options_reserved_tagname(attribute);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/read/script.js",
    "content": "/** @import { Program } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { Parser } from '../index.js' */\nimport * as acorn from '../acorn.js';\nimport { regex_not_newline_characters } from '../../patterns.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { is_text_attribute } from '../../../utils/ast.js';\nimport { locator } from '../../../state.js';\n\nconst regex_closing_script_tag = /<\\/script\\s*>/;\nconst regex_starts_with_closing_script_tag = /<\\/script\\s*>/y;\n\nconst RESERVED_ATTRIBUTES = ['server', 'client', 'worker', 'test', 'default'];\nconst ALLOWED_ATTRIBUTES = ['context', 'generics', 'lang', 'module'];\n\n/**\n * @param {Parser} parser\n * @param {number} start\n * @param {Array<AST.Attribute | AST.SpreadAttribute | AST.Directive | AST.AttachTag>} attributes\n * @returns {AST.Script}\n */\nexport function read_script(parser, start, attributes) {\n\tconst script_start = parser.index;\n\tconst data = parser.read_until(regex_closing_script_tag);\n\tif (parser.index >= parser.template.length) {\n\t\te.element_unclosed(parser.template.length, 'script');\n\t}\n\n\tconst source =\n\t\tparser.template.slice(0, script_start).replace(regex_not_newline_characters, ' ') + data;\n\tparser.read(regex_starts_with_closing_script_tag);\n\n\t/** @type {Program} */\n\tlet ast;\n\n\ttry {\n\t\tast = acorn.parse(source, parser.root.comments, parser.ts, true);\n\t} catch (err) {\n\t\tparser.acorn_error(err);\n\t}\n\n\tast.start = script_start;\n\n\tif (ast.loc) {\n\t\t// Acorn always uses `0` as the start of a `Program`, but for sourcemap purposes\n\t\t// we need it to be the start of the `<script>` contents\n\t\t({ line: ast.loc.start.line, column: ast.loc.start.column } = locator(start));\n\t\t({ line: ast.loc.end.line, column: ast.loc.end.column } = locator(parser.index));\n\t}\n\n\t/** @type {'default' | 'module'} */\n\tlet context = 'default';\n\n\tfor (const attribute of /** @type {AST.Attribute[]} */ (attributes)) {\n\t\tif (RESERVED_ATTRIBUTES.includes(attribute.name)) {\n\t\t\te.script_reserved_attribute(attribute, attribute.name);\n\t\t}\n\n\t\tif (!ALLOWED_ATTRIBUTES.includes(attribute.name)) {\n\t\t\tw.script_unknown_attribute(attribute);\n\t\t}\n\n\t\tif (attribute.name === 'module') {\n\t\t\tif (attribute.value !== true) {\n\t\t\t\t// Deliberately a generic code to future-proof for potential other attributes\n\t\t\t\te.script_invalid_attribute_value(attribute, attribute.name);\n\t\t\t}\n\n\t\t\tcontext = 'module';\n\t\t}\n\n\t\tif (attribute.name === 'context') {\n\t\t\tif (attribute.value === true || !is_text_attribute(attribute)) {\n\t\t\t\te.script_invalid_context(attribute);\n\t\t\t}\n\n\t\t\tconst value = attribute.value[0].data;\n\n\t\t\tif (value !== 'module') {\n\t\t\t\te.script_invalid_context(attribute);\n\t\t\t}\n\n\t\t\tcontext = 'module';\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: 'Script',\n\t\tstart,\n\t\tend: parser.index,\n\t\tcontext,\n\t\tcontent: ast,\n\t\t// @ts-ignore\n\t\tattributes\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/read/style.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Parser } from '../index.js' */\nimport * as e from '../../../errors.js';\n\nconst REGEX_MATCHER = /[~^$*|]?=/y;\nconst REGEX_CLOSING_BRACKET = /[\\s\\]]/;\nconst REGEX_ATTRIBUTE_FLAGS = /[a-zA-Z]+/y; // only `i` and `s` are valid today, but make it future-proof\nconst REGEX_COMBINATOR = /(\\+|~|>|\\|\\|)/y;\nconst REGEX_PERCENTAGE = /\\d+(\\.\\d+)?%/y;\nconst REGEX_NTH_OF =\n\t/(even|odd|\\+?(\\d+|\\d*n(\\s*[+-]\\s*\\d+)?)|-\\d*n(\\s*\\+\\s*\\d+))((?=\\s*[,)])|\\s+of\\s+)/y;\nconst REGEX_WHITESPACE_OR_COLON = /[\\s:]/;\nconst REGEX_LEADING_HYPHEN_OR_DIGIT = /-?\\d/y;\nconst REGEX_VALID_IDENTIFIER_CHAR = /[a-zA-Z0-9_-]/;\nconst REGEX_UNICODE_SEQUENCE = /\\\\[0-9a-fA-F]{1,6}(\\r\\n|\\s)?/y;\nconst REGEX_COMMENT_CLOSE = /\\*\\//;\nconst REGEX_HTML_COMMENT_CLOSE = /-->/;\n\n/**\n * @param {Parser} parser\n * @param {number} start\n * @param {Array<AST.Attribute | AST.SpreadAttribute | AST.Directive | AST.AttachTag>} attributes\n * @returns {AST.CSS.StyleSheet}\n */\nexport default function read_style(parser, start, attributes) {\n\tconst content_start = parser.index;\n\tconst children = read_body(parser, (p) => p.match('</style') || p.index >= p.template.length);\n\tconst content_end = parser.index;\n\n\tparser.eat('</style', true);\n\tparser.read(/\\s*>/y);\n\n\treturn {\n\t\ttype: 'StyleSheet',\n\t\tstart,\n\t\tend: parser.index,\n\t\tattributes,\n\t\tchildren,\n\t\tcontent: {\n\t\t\tstart: content_start,\n\t\t\tend: content_end,\n\t\t\tstyles: parser.template.slice(content_start, content_end),\n\t\t\tcomment: null\n\t\t}\n\t};\n}\n\n/**\n * @param {Parser} parser\n * @param {(parser: Parser) => boolean} finished\n * @returns {Array<AST.CSS.Rule | AST.CSS.Atrule>}\n */\nfunction read_body(parser, finished) {\n\t/** @type {Array<AST.CSS.Rule | AST.CSS.Atrule>} */\n\tconst children = [];\n\n\twhile ((allow_comment_or_whitespace(parser), !finished(parser))) {\n\t\tif (parser.match('@')) {\n\t\t\tchildren.push(read_at_rule(parser));\n\t\t} else {\n\t\t\tchildren.push(read_rule(parser));\n\t\t}\n\t}\n\n\treturn children;\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.CSS.Atrule}\n */\nfunction read_at_rule(parser) {\n\tconst start = parser.index;\n\tparser.eat('@', true);\n\n\tconst name = read_identifier(parser);\n\n\tconst prelude = read_value(parser);\n\n\t/** @type {AST.CSS.Block | null} */\n\tlet block = null;\n\n\tif (parser.match('{')) {\n\t\t// e.g. `@media (...) {...}`\n\t\tblock = read_block(parser);\n\t} else {\n\t\t// e.g. `@import '...'`\n\t\tparser.eat(';', true);\n\t}\n\n\treturn {\n\t\ttype: 'Atrule',\n\t\tstart,\n\t\tend: parser.index,\n\t\tname,\n\t\tprelude,\n\t\tblock\n\t};\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.CSS.Rule}\n */\nfunction read_rule(parser) {\n\tconst start = parser.index;\n\n\treturn {\n\t\ttype: 'Rule',\n\t\tprelude: read_selector_list(parser),\n\t\tblock: read_block(parser),\n\t\tstart,\n\t\tend: parser.index,\n\t\tmetadata: {\n\t\t\tparent_rule: null,\n\t\t\thas_local_selectors: false,\n\t\t\thas_global_selectors: false,\n\t\t\tis_global_block: false\n\t\t}\n\t};\n}\n\n/**\n * @param {Parser} parser\n * @param {boolean} [inside_pseudo_class]\n * @returns {AST.CSS.SelectorList}\n */\nfunction read_selector_list(parser, inside_pseudo_class = false) {\n\t/** @type {AST.CSS.ComplexSelector[]} */\n\tconst children = [];\n\n\tallow_comment_or_whitespace(parser);\n\n\tconst start = parser.index;\n\n\twhile (parser.index < parser.template.length) {\n\t\tchildren.push(read_selector(parser, inside_pseudo_class));\n\n\t\tconst end = parser.index;\n\n\t\tallow_comment_or_whitespace(parser);\n\n\t\tif (inside_pseudo_class ? parser.match(')') : parser.match('{')) {\n\t\t\treturn {\n\t\t\t\ttype: 'SelectorList',\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tchildren\n\t\t\t};\n\t\t} else {\n\t\t\tparser.eat(',', true);\n\t\t\tallow_comment_or_whitespace(parser);\n\t\t}\n\t}\n\n\te.unexpected_eof(parser.template.length);\n}\n\n/**\n * @param {Parser} parser\n * @param {boolean} [inside_pseudo_class]\n * @returns {AST.CSS.ComplexSelector}\n */\nfunction read_selector(parser, inside_pseudo_class = false) {\n\tconst list_start = parser.index;\n\n\t/** @type {AST.CSS.RelativeSelector[]} */\n\tconst children = [];\n\n\t/**\n\t * @param {AST.CSS.Combinator | null} combinator\n\t * @param {number} start\n\t * @returns {AST.CSS.RelativeSelector}\n\t */\n\tfunction create_selector(combinator, start) {\n\t\treturn {\n\t\t\ttype: 'RelativeSelector',\n\t\t\tcombinator,\n\t\t\tselectors: [],\n\t\t\tstart,\n\t\t\tend: -1,\n\t\t\tmetadata: {\n\t\t\t\tis_global: false,\n\t\t\t\tis_global_like: false,\n\t\t\t\tscoped: false\n\t\t\t}\n\t\t};\n\t}\n\n\t/** @type {AST.CSS.RelativeSelector} */\n\tlet relative_selector = create_selector(null, parser.index);\n\n\twhile (parser.index < parser.template.length) {\n\t\tlet start = parser.index;\n\n\t\tif (parser.eat('&')) {\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'NestingSelector',\n\t\t\t\tname: '&',\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (parser.eat('*')) {\n\t\t\tlet name = '*';\n\n\t\t\tif (parser.eat('|')) {\n\t\t\t\t// * is the namespace (which we ignore)\n\t\t\t\tname = read_identifier(parser);\n\t\t\t}\n\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'TypeSelector',\n\t\t\t\tname,\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (parser.eat('#')) {\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'IdSelector',\n\t\t\t\tname: read_identifier(parser),\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (parser.eat('.')) {\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'ClassSelector',\n\t\t\t\tname: read_identifier(parser),\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (parser.eat('::')) {\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'PseudoElementSelector',\n\t\t\t\tname: read_identifier(parser),\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t\t// We read the inner selectors of a pseudo element to ensure it parses correctly,\n\t\t\t// but we don't do anything with the result.\n\t\t\tif (parser.eat('(')) {\n\t\t\t\tread_selector_list(parser, true);\n\t\t\t\tparser.eat(')', true);\n\t\t\t}\n\t\t} else if (parser.eat(':')) {\n\t\t\tconst name = read_identifier(parser);\n\n\t\t\t/** @type {null | AST.CSS.SelectorList} */\n\t\t\tlet args = null;\n\n\t\t\tif (parser.eat('(')) {\n\t\t\t\targs = read_selector_list(parser, true);\n\t\t\t\tparser.eat(')', true);\n\t\t\t}\n\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'PseudoClassSelector',\n\t\t\t\tname,\n\t\t\t\targs,\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (parser.eat('[')) {\n\t\t\tparser.allow_whitespace();\n\t\t\tconst name = read_identifier(parser);\n\t\t\tparser.allow_whitespace();\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet value = null;\n\n\t\t\tconst matcher = parser.read(REGEX_MATCHER);\n\n\t\t\tif (matcher) {\n\t\t\t\tparser.allow_whitespace();\n\t\t\t\tvalue = read_attribute_value(parser);\n\t\t\t}\n\n\t\t\tparser.allow_whitespace();\n\n\t\t\tconst flags = parser.read(REGEX_ATTRIBUTE_FLAGS);\n\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat(']', true);\n\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'AttributeSelector',\n\t\t\t\tstart,\n\t\t\t\tend: parser.index,\n\t\t\t\tname,\n\t\t\t\tmatcher,\n\t\t\t\tvalue,\n\t\t\t\tflags\n\t\t\t});\n\t\t} else if (inside_pseudo_class && parser.match_regex(REGEX_NTH_OF)) {\n\t\t\t// nth of matcher must come before combinator matcher to prevent collision else the '+' in '+2n-1' would be parsed as a combinator\n\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'Nth',\n\t\t\t\tvalue: /**@type {string} */ (parser.read(REGEX_NTH_OF)),\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (parser.match_regex(REGEX_PERCENTAGE)) {\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'Percentage',\n\t\t\t\tvalue: /** @type {string} */ (parser.read(REGEX_PERCENTAGE)),\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t} else if (!parser.match_regex(REGEX_COMBINATOR)) {\n\t\t\tlet name = read_identifier(parser);\n\n\t\t\tif (parser.eat('|')) {\n\t\t\t\t// we ignore the namespace when trying to find matching element classes\n\t\t\t\tname = read_identifier(parser);\n\t\t\t}\n\n\t\t\trelative_selector.selectors.push({\n\t\t\t\ttype: 'TypeSelector',\n\t\t\t\tname,\n\t\t\t\tstart,\n\t\t\t\tend: parser.index\n\t\t\t});\n\t\t}\n\n\t\tconst index = parser.index;\n\t\tallow_comment_or_whitespace(parser);\n\n\t\tif (parser.match(',') || (inside_pseudo_class ? parser.match(')') : parser.match('{'))) {\n\t\t\t// rewind, so we know whether to continue building the selector list\n\t\t\tparser.index = index;\n\n\t\t\trelative_selector.end = index;\n\t\t\tchildren.push(relative_selector);\n\n\t\t\treturn {\n\t\t\t\ttype: 'ComplexSelector',\n\t\t\t\tstart: list_start,\n\t\t\t\tend: index,\n\t\t\t\tchildren,\n\t\t\t\tmetadata: {\n\t\t\t\t\trule: null,\n\t\t\t\t\tis_global: false,\n\t\t\t\t\tused: false\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tparser.index = index;\n\t\tconst combinator = read_combinator(parser);\n\n\t\tif (combinator) {\n\t\t\tif (relative_selector.selectors.length > 0) {\n\t\t\t\trelative_selector.end = index;\n\t\t\t\tchildren.push(relative_selector);\n\t\t\t}\n\n\t\t\t// ...and start a new one\n\t\t\trelative_selector = create_selector(combinator, combinator.start);\n\n\t\t\tparser.allow_whitespace();\n\n\t\t\tif (parser.match(',') || (inside_pseudo_class ? parser.match(')') : parser.match('{'))) {\n\t\t\t\te.css_selector_invalid(parser.index);\n\t\t\t}\n\t\t}\n\t}\n\n\te.unexpected_eof(parser.template.length);\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.CSS.Combinator | null}\n */\nfunction read_combinator(parser) {\n\tconst start = parser.index;\n\tparser.allow_whitespace();\n\n\tconst index = parser.index;\n\tconst name = parser.read(REGEX_COMBINATOR);\n\n\tif (name) {\n\t\tconst end = parser.index;\n\t\tparser.allow_whitespace();\n\n\t\treturn {\n\t\t\ttype: 'Combinator',\n\t\t\tname,\n\t\t\tstart: index,\n\t\t\tend\n\t\t};\n\t}\n\n\tif (parser.index !== start) {\n\t\treturn {\n\t\t\ttype: 'Combinator',\n\t\t\tname: ' ',\n\t\t\tstart,\n\t\t\tend: parser.index\n\t\t};\n\t}\n\n\treturn null;\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.CSS.Block}\n */\nfunction read_block(parser) {\n\tconst start = parser.index;\n\n\tparser.eat('{', true);\n\n\t/** @type {Array<AST.CSS.Declaration | AST.CSS.Rule | AST.CSS.Atrule>} */\n\tconst children = [];\n\n\twhile (parser.index < parser.template.length) {\n\t\tallow_comment_or_whitespace(parser);\n\n\t\tif (parser.match('}')) {\n\t\t\tbreak;\n\t\t} else {\n\t\t\tchildren.push(read_block_item(parser));\n\t\t}\n\t}\n\n\tparser.eat('}', true);\n\n\treturn {\n\t\ttype: 'Block',\n\t\tstart,\n\t\tend: parser.index,\n\t\tchildren\n\t};\n}\n\n/**\n * Reads a declaration, rule or at-rule\n *\n * @param {Parser} parser\n * @returns {AST.CSS.Declaration | AST.CSS.Rule | AST.CSS.Atrule}\n */\nfunction read_block_item(parser) {\n\tif (parser.match('@')) {\n\t\treturn read_at_rule(parser);\n\t}\n\n\t// read ahead to understand whether we're dealing with a declaration or a nested rule.\n\t// this involves some duplicated work, but avoids a try-catch that would disguise errors\n\tconst start = parser.index;\n\tread_value(parser);\n\tconst char = parser.template[parser.index];\n\tparser.index = start;\n\n\treturn char === '{' ? read_rule(parser) : read_declaration(parser);\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.CSS.Declaration}\n */\nfunction read_declaration(parser) {\n\tconst start = parser.index;\n\n\tconst property = parser.read_until(REGEX_WHITESPACE_OR_COLON);\n\tparser.allow_whitespace();\n\tparser.eat(':');\n\tlet index = parser.index;\n\tparser.allow_whitespace();\n\n\tconst value = read_value(parser);\n\n\tif (!value && !property.startsWith('--')) {\n\t\te.css_empty_declaration({ start, end: index });\n\t}\n\n\tconst end = parser.index;\n\n\tif (!parser.match('}')) {\n\t\tparser.eat(';', true);\n\t}\n\n\treturn {\n\t\ttype: 'Declaration',\n\t\tstart,\n\t\tend,\n\t\tproperty,\n\t\tvalue\n\t};\n}\n\n/**\n * @param {Parser} parser\n * @returns {string}\n */\nfunction read_value(parser) {\n\tlet value = '';\n\tlet escaped = false;\n\tlet in_url = false;\n\n\t/** @type {null | '\"' | \"'\"} */\n\tlet quote_mark = null;\n\n\twhile (parser.index < parser.template.length) {\n\t\tconst char = parser.template[parser.index];\n\n\t\tif (escaped) {\n\t\t\tvalue += '\\\\' + char;\n\t\t\tescaped = false;\n\t\t\tparser.index++;\n\t\t\tcontinue;\n\t\t} else if (char === '\\\\') {\n\t\t\tescaped = true;\n\t\t\tparser.index++;\n\t\t\tcontinue;\n\t\t} else if (char === quote_mark) {\n\t\t\tquote_mark = null;\n\t\t} else if (char === ')') {\n\t\t\tin_url = false;\n\t\t} else if (quote_mark === null && (char === '\"' || char === \"'\")) {\n\t\t\tquote_mark = char;\n\t\t} else if (char === '(' && value.slice(-3) === 'url') {\n\t\t\tin_url = true;\n\t\t} else if ((char === ';' || char === '{' || char === '}') && !in_url && !quote_mark) {\n\t\t\treturn value.trim();\n\t\t}\n\n\t\tvalue += char;\n\n\t\tparser.index++;\n\t}\n\n\te.unexpected_eof(parser.template.length);\n}\n\n/**\n * Read a property that may or may not be quoted, e.g.\n * `foo` or `'foo bar'` or `\"foo bar\"`\n * @param {Parser} parser\n */\nfunction read_attribute_value(parser) {\n\tlet value = '';\n\tlet escaped = false;\n\tconst quote_mark = parser.eat('\"') ? '\"' : parser.eat(\"'\") ? \"'\" : null;\n\n\twhile (parser.index < parser.template.length) {\n\t\tconst char = parser.template[parser.index];\n\t\tif (escaped) {\n\t\t\tvalue += '\\\\' + char;\n\t\t\tescaped = false;\n\t\t} else if (char === '\\\\') {\n\t\t\tescaped = true;\n\t\t} else if (quote_mark ? char === quote_mark : REGEX_CLOSING_BRACKET.test(char)) {\n\t\t\tif (quote_mark) {\n\t\t\t\tparser.eat(quote_mark, true);\n\t\t\t}\n\n\t\t\treturn value.trim();\n\t\t} else {\n\t\t\tvalue += char;\n\t\t}\n\n\t\tparser.index++;\n\t}\n\n\te.unexpected_eof(parser.template.length);\n}\n\n/**\n * @see {@link https://www.w3.org/TR/css-syntax-3/#ident-token-diagram CSS Syntax Module Level 3}\n * @param {Parser} parser\n */\nfunction read_identifier(parser) {\n\tconst start = parser.index;\n\n\tlet identifier = '';\n\n\tif (parser.match_regex(REGEX_LEADING_HYPHEN_OR_DIGIT)) {\n\t\te.css_expected_identifier(start);\n\t}\n\n\twhile (parser.index < parser.template.length) {\n\t\tconst char = parser.template[parser.index];\n\t\tif (char === '\\\\') {\n\t\t\tconst sequence = parser.match_regex(REGEX_UNICODE_SEQUENCE);\n\t\t\tif (sequence) {\n\t\t\t\tidentifier += String.fromCodePoint(parseInt(sequence.slice(1), 16));\n\t\t\t\tparser.index += sequence.length;\n\t\t\t} else {\n\t\t\t\tidentifier += '\\\\' + parser.template[parser.index + 1];\n\t\t\t\tparser.index += 2;\n\t\t\t}\n\t\t} else if (\n\t\t\t/** @type {number} */ (char.codePointAt(0)) >= 160 ||\n\t\t\tREGEX_VALID_IDENTIFIER_CHAR.test(char)\n\t\t) {\n\t\t\tidentifier += char;\n\t\t\tparser.index++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (identifier === '') {\n\t\te.css_expected_identifier(start);\n\t}\n\n\treturn identifier;\n}\n\n/** @param {Parser} parser */\nfunction allow_comment_or_whitespace(parser) {\n\tparser.allow_whitespace();\n\twhile (parser.match('/*') || parser.match('<!--')) {\n\t\tif (parser.eat('/*')) {\n\t\t\tparser.read_until(REGEX_COMMENT_CLOSE);\n\t\t\tparser.eat('*/', true);\n\t\t}\n\n\t\tif (parser.eat('<!--')) {\n\t\t\tparser.read_until(REGEX_HTML_COMMENT_CLOSE);\n\t\t\tparser.eat('-->', true);\n\t\t}\n\n\t\tparser.allow_whitespace();\n\t}\n}\n\n/**\n * Parse standalone CSS content (not wrapped in `<style>`).\n * @param {Parser} parser\n * @returns {Array<AST.CSS.Rule | AST.CSS.Atrule>}\n */\nexport function parse_stylesheet(parser) {\n\treturn read_body(parser, (p) => p.index >= p.template.length);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/remove_typescript_nodes.js",
    "content": "/** @import { Context, Visitors } from 'zimmerframe' */\n/** @import { FunctionExpression, FunctionDeclaration } from 'estree' */\nimport { walk } from 'zimmerframe';\nimport * as b from '#compiler/builders';\nimport * as e from '../../errors.js';\n\n/**\n * @param {FunctionExpression | FunctionDeclaration} node\n * @param {Context<any, any>} context\n */\nfunction remove_this_param(node, context) {\n\tif (node.params[0]?.type === 'Identifier' && node.params[0].name === 'this') {\n\t\tnode.params.shift();\n\t}\n\treturn context.next();\n}\n\n/** @type {Visitors<any, null>} */\nconst visitors = {\n\t_(node, context) {\n\t\tconst n = context.next() ?? node;\n\n\t\t// TODO there may come a time when we decide to preserve type annotations.\n\t\t// until that day comes, we just delete them so they don't confuse esrap\n\t\tdelete n.typeAnnotation;\n\t\tdelete n.typeParameters;\n\t\tdelete n.typeArguments;\n\t\tdelete n.returnType;\n\t\tdelete n.accessibility;\n\t\tdelete n.readonly;\n\t\tdelete n.definite;\n\t\tdelete n.override;\n\t},\n\tDecorator(node) {\n\t\te.typescript_invalid_feature(node, 'decorators (related TSC proposal is not stage 4 yet)');\n\t},\n\tImportDeclaration(node) {\n\t\tif (node.importKind === 'type') return b.empty;\n\n\t\tif (node.specifiers?.length > 0) {\n\t\t\tconst specifiers = node.specifiers.filter((/** @type {any} */ s) => s.importKind !== 'type');\n\t\t\tif (specifiers.length === 0) return b.empty;\n\n\t\t\treturn { ...node, specifiers };\n\t\t}\n\n\t\treturn node;\n\t},\n\tExportNamedDeclaration(node, context) {\n\t\tif (node.exportKind === 'type') return b.empty;\n\n\t\tif (node.declaration) {\n\t\t\tconst result = context.next();\n\t\t\tif (result?.declaration?.type === 'EmptyStatement') {\n\t\t\t\treturn b.empty;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tif (node.specifiers) {\n\t\t\tconst specifiers = node.specifiers.filter((/** @type {any} */ s) => s.exportKind !== 'type');\n\t\t\tif (specifiers.length === 0) return b.empty;\n\n\t\t\treturn { ...node, specifiers };\n\t\t}\n\n\t\treturn node;\n\t},\n\tExportDefaultDeclaration(node) {\n\t\tif (node.exportKind === 'type') return b.empty;\n\t\treturn node;\n\t},\n\tExportAllDeclaration(node) {\n\t\tif (node.exportKind === 'type') return b.empty;\n\t\treturn node;\n\t},\n\tPropertyDefinition(node, { next }) {\n\t\tif (node.accessor) {\n\t\t\te.typescript_invalid_feature(\n\t\t\t\tnode,\n\t\t\t\t'accessor fields (related TSC proposal is not stage 4 yet)'\n\t\t\t);\n\t\t}\n\t\treturn next();\n\t},\n\tTSAsExpression(node, context) {\n\t\treturn context.visit(node.expression);\n\t},\n\tTSSatisfiesExpression(node, context) {\n\t\treturn context.visit(node.expression);\n\t},\n\tTSNonNullExpression(node, context) {\n\t\treturn context.visit(node.expression);\n\t},\n\tTSInterfaceDeclaration() {\n\t\treturn b.empty;\n\t},\n\tTSTypeAliasDeclaration() {\n\t\treturn b.empty;\n\t},\n\tTSTypeAssertion(node, context) {\n\t\treturn context.visit(node.expression);\n\t},\n\tTSEnumDeclaration(node) {\n\t\te.typescript_invalid_feature(node, 'enums');\n\t},\n\tTSParameterProperty(node, context) {\n\t\tif ((node.readonly || node.accessibility) && context.path.at(-2)?.kind === 'constructor') {\n\t\t\te.typescript_invalid_feature(node, 'accessibility modifiers on constructor parameters');\n\t\t}\n\t\treturn context.visit(node.parameter);\n\t},\n\tTSInstantiationExpression(node, context) {\n\t\treturn context.visit(node.expression);\n\t},\n\tFunctionExpression: remove_this_param,\n\tFunctionDeclaration: remove_this_param,\n\tTSDeclareFunction() {\n\t\treturn b.empty;\n\t},\n\tClassBody(node, context) {\n\t\tconst body = [];\n\t\tfor (const _child of node.body) {\n\t\t\tconst child = context.visit(_child);\n\t\t\tif (child.type !== 'PropertyDefinition' || !child.declare) {\n\t\t\t\tbody.push(child);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...node,\n\t\t\tbody\n\t\t};\n\t},\n\tClassDeclaration(node, context) {\n\t\tif (node.declare) {\n\t\t\treturn b.empty;\n\t\t}\n\t\tdelete node.abstract;\n\t\tdelete node.implements;\n\t\tdelete node.superTypeArguments;\n\t\tdelete node.superTypeParameters;\n\t\treturn context.next();\n\t},\n\tClassExpression(node, context) {\n\t\tdelete node.implements;\n\t\tdelete node.superTypeArguments;\n\t\tdelete node.superTypeParameters;\n\t\treturn context.next();\n\t},\n\tMethodDefinition(node, context) {\n\t\tif (node.abstract) {\n\t\t\treturn b.empty;\n\t\t}\n\t\treturn context.next();\n\t},\n\tVariableDeclaration(node, context) {\n\t\tif (node.declare) {\n\t\t\treturn b.empty;\n\t\t}\n\t\treturn context.next();\n\t},\n\tTSModuleDeclaration(node, context) {\n\t\tif (!node.body) return b.empty;\n\n\t\t// namespaces can contain non-type nodes\n\t\tconst cleaned = /** @type {any[]} */ (node.body.body).map((entry) => context.visit(entry));\n\t\tif (cleaned.some((entry) => entry !== b.empty)) {\n\t\t\te.typescript_invalid_feature(node, 'namespaces with non-type nodes');\n\t\t}\n\n\t\treturn b.empty;\n\t}\n};\n\n/**\n * @template T\n * @param {T} ast\n * @returns {T}\n */\nexport function remove_typescript_nodes(ast) {\n\treturn walk(ast, null, visitors);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/state/element.js",
    "content": "/** @import { Expression, Identifier, SourceLocation } from 'estree' */\n/** @import { Location } from 'locate-character' */\n/** @import { AST } from '#compiler' */\n/** @import { Parser } from '../index.js' */\nimport { is_void, REGEX_VALID_TAG_NAME } from '../../../../utils.js';\nimport read_expression from '../read/expression.js';\nimport { read_script } from '../read/script.js';\nimport read_style from '../read/style.js';\nimport { decode_character_references } from '../utils/html.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { create_fragment } from '../utils/create.js';\nimport { create_attribute, ExpressionMetadata, is_element_node } from '../../nodes.js';\nimport { get_attribute_expression, is_expression_attribute } from '../../../utils/ast.js';\nimport { closing_tag_omitted } from '../../../../html-tree-validation.js';\nimport { list } from '../../../utils/string.js';\nimport { locator } from '../../../state.js';\nimport * as b from '#compiler/builders';\n\nconst regex_invalid_unquoted_attribute_value = /(\\/>|[\\s\"'=<>`])/y;\nconst regex_closing_textarea_tag = /<\\/textarea(\\s[^>]*)?>/iy;\nconst regex_closing_comment = /-->/;\nconst regex_whitespace_or_slash_or_closing_tag = /(\\s|\\/|>)/;\nconst regex_token_ending_character = /[\\s=/>\"']/;\nconst regex_starts_with_quote_characters = /[\"']/y;\nconst regex_attribute_value = /(?:\"([^\"]*)\"|'([^'])*'|([^>\\s]+))/y;\nconst regex_doctype_name = /^![a-zA-Z]+$/;\nconst regex_namespaced_name = /^[a-zA-Z][a-zA-Z0-9]*:[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9]$/;\n\n/** @param {string} name */\nfunction is_valid_element_name(name) {\n\t// DOCTYPE (e.g. !DOCTYPE)\n\tif (regex_doctype_name.test(name)) return true;\n\t// svelte:* meta tags (e.g. svelte:element, svelte:head)\n\tif (regex_namespaced_name.test(name)) return true;\n\t// standard HTML/SVG/MathML elements and custom elements\n\treturn REGEX_VALID_TAG_NAME.test(name);\n}\nexport const regex_valid_component_name =\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers adjusted for our needs\n\t// (must start with uppercase letter if no dots, can contain dots)\n\t/^(?:\\p{Lu}[$\\u200c\\u200d\\p{ID_Continue}.]*|\\p{ID_Start}[$\\u200c\\u200d\\p{ID_Continue}]*(?:\\.[$\\u200c\\u200d\\p{ID_Continue}]+)+)$/u;\n\n/** @type {Map<string, AST.ElementLike['type']>} */\nconst root_only_meta_tags = new Map([\n\t['svelte:head', 'SvelteHead'],\n\t['svelte:options', 'SvelteOptions'],\n\t['svelte:window', 'SvelteWindow'],\n\t['svelte:document', 'SvelteDocument'],\n\t['svelte:body', 'SvelteBody']\n]);\n\n/** @type {Map<string, AST.ElementLike['type']>} */\nconst meta_tags = new Map([\n\t...root_only_meta_tags,\n\t['svelte:element', 'SvelteElement'],\n\t['svelte:component', 'SvelteComponent'],\n\t['svelte:self', 'SvelteSelf'],\n\t['svelte:fragment', 'SvelteFragment'],\n\t['svelte:boundary', 'SvelteBoundary']\n]);\n\n/** @param {Parser} parser */\nexport default function element(parser) {\n\tconst start = parser.index++;\n\n\tlet parent = parser.current();\n\n\tif (parser.eat('!--')) {\n\t\tconst data = parser.read_until(regex_closing_comment);\n\t\tparser.eat('-->', true);\n\n\t\tparser.append({\n\t\t\ttype: 'Comment',\n\t\t\tstart,\n\t\t\tend: parser.index,\n\t\t\tdata\n\t\t});\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('/')) {\n\t\tconst name = parser.read_until(regex_whitespace_or_slash_or_closing_tag);\n\n\t\tparser.allow_whitespace();\n\t\tparser.eat('>', true);\n\n\t\tif (is_void(name)) {\n\t\t\te.void_element_invalid_content(start);\n\t\t}\n\n\t\t// close any elements that don't have their own closing tags, e.g. <div><p></div>\n\t\twhile (/** @type {AST.RegularElement} */ (parent).name !== name) {\n\t\t\tif (parser.loose) {\n\t\t\t\t// If the previous element did interpret the next opening tag as an attribute, backtrack\n\t\t\t\tif (is_element_node(parent)) {\n\t\t\t\t\tconst last = parent.attributes.at(-1);\n\t\t\t\t\tif (last?.type === 'Attribute' && last.name === `<${name}`) {\n\t\t\t\t\t\tparser.index = last.start;\n\t\t\t\t\t\tparent.attributes.pop();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (parent.type === 'RegularElement') {\n\t\t\t\tif (!parser.last_auto_closed_tag || parser.last_auto_closed_tag.tag !== name) {\n\t\t\t\t\tconst end = parent.fragment.nodes[0]?.start ?? start;\n\t\t\t\t\tw.element_implicitly_closed(\n\t\t\t\t\t\t{ start: parent.start, end },\n\t\t\t\t\t\t`</${name}>`,\n\t\t\t\t\t\t`</${parent.name}>`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (!parser.loose) {\n\t\t\t\tif (parser.last_auto_closed_tag && parser.last_auto_closed_tag.tag === name) {\n\t\t\t\t\te.element_invalid_closing_tag_autoclosed(start, name, parser.last_auto_closed_tag.reason);\n\t\t\t\t} else {\n\t\t\t\t\te.element_invalid_closing_tag(start, name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparent.end = start;\n\t\t\tparser.pop();\n\n\t\t\tparent = parser.current();\n\t\t}\n\n\t\tparent.end = parser.index;\n\t\tparser.pop();\n\n\t\tif (parser.last_auto_closed_tag && parser.stack.length < parser.last_auto_closed_tag.depth) {\n\t\t\tparser.last_auto_closed_tag = undefined;\n\t\t}\n\n\t\treturn;\n\t}\n\n\tconst tag = read_tag(parser, regex_whitespace_or_slash_or_closing_tag);\n\n\tif (tag.name.startsWith('svelte:') && !meta_tags.has(tag.name)) {\n\t\tconst bounds = { start: start + 1, end: start + 1 + tag.name.length };\n\t\te.svelte_meta_invalid_tag(bounds, list(Array.from(meta_tags.keys())));\n\t}\n\n\tif (!is_valid_element_name(tag.name) && !regex_valid_component_name.test(tag.name)) {\n\t\t// <div. -> in the middle of typing -> allow in loose mode\n\t\tif (!parser.loose || !tag.name.endsWith('.')) {\n\t\t\tconst bounds = { start: start + 1, end: start + 1 + tag.name.length };\n\t\t\te.tag_invalid_name(bounds);\n\t\t}\n\t}\n\n\tif (root_only_meta_tags.has(tag.name)) {\n\t\tif (tag.name in parser.meta_tags) {\n\t\t\te.svelte_meta_duplicate(start, tag.name);\n\t\t}\n\n\t\tif (parent.type !== 'Root') {\n\t\t\te.svelte_meta_invalid_placement(start, tag.name);\n\t\t}\n\n\t\tparser.meta_tags[tag.name] = true;\n\t}\n\n\tconst type = meta_tags.has(tag.name)\n\t\t? meta_tags.get(tag.name)\n\t\t: regex_valid_component_name.test(tag.name) || (parser.loose && tag.name.endsWith('.'))\n\t\t\t? 'Component'\n\t\t\t: tag.name === 'title' && parent_is_head(parser.stack)\n\t\t\t\t? 'TitleElement'\n\t\t\t\t: // TODO Svelte 6/7: once slots are removed in favor of snippets, always keep slot as a regular element\n\t\t\t\t\ttag.name === 'slot' && !parent_is_shadowroot_template(parser.stack)\n\t\t\t\t\t? 'SlotElement'\n\t\t\t\t\t: 'RegularElement';\n\n\t/** @type {AST.ElementLike} */\n\tconst element =\n\t\ttype === 'RegularElement'\n\t\t\t? {\n\t\t\t\t\ttype,\n\t\t\t\t\tstart,\n\t\t\t\t\tend: -1,\n\t\t\t\t\tname: tag.name,\n\t\t\t\t\tname_loc: tag.loc,\n\t\t\t\t\tattributes: [],\n\t\t\t\t\tfragment: create_fragment(true),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tsvg: false,\n\t\t\t\t\t\tmathml: false,\n\t\t\t\t\t\tscoped: false,\n\t\t\t\t\t\thas_spread: false,\n\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\tsynthetic_value_node: null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: /** @type {AST.ElementLike} */ ({\n\t\t\t\t\ttype,\n\t\t\t\t\tstart,\n\t\t\t\t\tend: -1,\n\t\t\t\t\tname: tag.name,\n\t\t\t\t\tname_loc: tag.loc,\n\t\t\t\t\tattributes: [],\n\t\t\t\t\tfragment: create_fragment(true),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t// unpopulated at first, differs between types\n\t\t\t\t\t}\n\t\t\t\t});\n\n\tparser.allow_whitespace();\n\n\tif (parent.type === 'RegularElement' && closing_tag_omitted(parent.name, tag.name)) {\n\t\tconst end = parent.fragment.nodes[0]?.start ?? start;\n\t\tw.element_implicitly_closed({ start: parent.start, end }, `<${tag.name}>`, `</${parent.name}>`);\n\t\tparent.end = start;\n\t\tparser.pop();\n\t\tparser.last_auto_closed_tag = {\n\t\t\ttag: parent.name,\n\t\t\treason: tag.name,\n\t\t\tdepth: parser.stack.length\n\t\t};\n\t}\n\n\t/** @type {string[]} */\n\tconst unique_names = [];\n\n\tconst current = parser.current();\n\tconst is_top_level_script_or_style =\n\t\t(tag.name === 'script' || tag.name === 'style') && current.type === 'Root';\n\n\tconst read = is_top_level_script_or_style ? read_static_attribute : read_attribute;\n\n\tlet attribute;\n\twhile ((attribute = read(parser))) {\n\t\t// animate and transition can only be specified once per element so no need\n\t\t// to check here, use can be used multiple times, same for the on directive\n\t\t// finally let already has error handling in case of duplicate variable names\n\t\tif (\n\t\t\tattribute.type === 'Attribute' ||\n\t\t\tattribute.type === 'BindDirective' ||\n\t\t\tattribute.type === 'StyleDirective' ||\n\t\t\tattribute.type === 'ClassDirective'\n\t\t) {\n\t\t\t// `bind:attribute` and `attribute` are just the same but `class:attribute`,\n\t\t\t// `style:attribute` and `attribute` are different and should be allowed together\n\t\t\t// so we concatenate the type while normalizing the type for BindDirective\n\t\t\tconst type = attribute.type === 'BindDirective' ? 'Attribute' : attribute.type;\n\t\t\tif (unique_names.includes(type + attribute.name)) {\n\t\t\t\te.attribute_duplicate(attribute);\n\t\t\t\t// <svelte:element bind:this this=..> is allowed\n\t\t\t} else if (attribute.name !== 'this') {\n\t\t\t\tunique_names.push(type + attribute.name);\n\t\t\t}\n\t\t}\n\n\t\telement.attributes.push(attribute);\n\t\tparser.allow_whitespace();\n\t}\n\n\tif (element.type === 'Component') {\n\t\telement.metadata.expression = new ExpressionMetadata();\n\t}\n\n\tif (element.type === 'SvelteComponent') {\n\t\tconst index = element.attributes.findIndex(\n\t\t\t/** @param {any} attr */\n\t\t\t(attr) => attr.type === 'Attribute' && attr.name === 'this'\n\t\t);\n\t\tif (index === -1) {\n\t\t\te.svelte_component_missing_this(start);\n\t\t}\n\n\t\tconst definition = /** @type {AST.Attribute} */ (element.attributes.splice(index, 1)[0]);\n\t\tif (!is_expression_attribute(definition)) {\n\t\t\te.svelte_component_invalid_this(definition.start);\n\t\t}\n\n\t\telement.expression = get_attribute_expression(definition);\n\t\telement.metadata.expression = new ExpressionMetadata();\n\t}\n\n\tif (element.type === 'SvelteElement') {\n\t\tconst index = element.attributes.findIndex(\n\t\t\t/** @param {any} attr */\n\t\t\t(attr) => attr.type === 'Attribute' && attr.name === 'this'\n\t\t);\n\t\tif (index === -1) {\n\t\t\te.svelte_element_missing_this(start);\n\t\t}\n\n\t\tconst definition = /** @type {AST.Attribute} */ (element.attributes.splice(index, 1)[0]);\n\n\t\tif (definition.value === true) {\n\t\t\te.svelte_element_missing_this(definition);\n\t\t}\n\n\t\tif (!is_expression_attribute(definition)) {\n\t\t\tw.svelte_element_invalid_this(definition);\n\n\t\t\t// note that this is wrong, in the case of e.g. `this=\"h{n}\"` — it will result in `<h>`.\n\t\t\t// it would be much better to just error here, but we are preserving the existing buggy\n\t\t\t// Svelte 4 behaviour out of an overabundance of caution regarding breaking changes.\n\t\t\t// TODO in 6.0, error\n\t\t\tconst chunk = /** @type {Array<AST.ExpressionTag | AST.Text>} */ (definition.value)[0];\n\t\t\telement.tag =\n\t\t\t\tchunk.type === 'Text'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\t\tvalue: chunk.data,\n\t\t\t\t\t\t\traw: `'${chunk.raw}'`,\n\t\t\t\t\t\t\tstart: chunk.start,\n\t\t\t\t\t\t\tend: chunk.end\n\t\t\t\t\t\t}\n\t\t\t\t\t: chunk.expression;\n\t\t} else {\n\t\t\telement.tag = get_attribute_expression(definition);\n\t\t}\n\n\t\telement.metadata.expression = new ExpressionMetadata();\n\t}\n\n\tif (is_top_level_script_or_style) {\n\t\tparser.eat('>', true);\n\n\t\t/** @type {AST.Comment | null} */\n\t\tlet prev_comment = null;\n\t\tfor (let i = current.fragment.nodes.length - 1; i >= 0; i--) {\n\t\t\tconst node = current.fragment.nodes[i];\n\n\t\t\tif (i === current.fragment.nodes.length - 1 && node.end !== start) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (node.type === 'Comment') {\n\t\t\t\tprev_comment = node;\n\t\t\t\tbreak;\n\t\t\t} else if (node.type !== 'Text' || node.data.trim()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (tag.name === 'script') {\n\t\t\tconst content = read_script(parser, start, element.attributes);\n\t\t\tif (prev_comment) {\n\t\t\t\t// We take advantage of the fact that the root will never have leadingComments set,\n\t\t\t\t// and set the previous comment to it so that the warning mechanism can later\n\t\t\t\t// inspect the root and see if there was a html comment before it silencing specific warnings.\n\t\t\t\tcontent.content.leadingComments = [{ type: 'Line', value: prev_comment.data }];\n\t\t\t}\n\n\t\t\tif (content.context === 'module') {\n\t\t\t\tif (current.module) e.script_duplicate(start);\n\t\t\t\tcurrent.module = content;\n\t\t\t} else {\n\t\t\t\tif (current.instance) e.script_duplicate(start);\n\t\t\t\tcurrent.instance = content;\n\t\t\t}\n\t\t} else {\n\t\t\tconst content = read_style(parser, start, element.attributes);\n\t\t\tcontent.content.comment = prev_comment;\n\n\t\t\tif (current.css) e.style_duplicate(start);\n\t\t\tcurrent.css = content;\n\t\t}\n\t\treturn;\n\t}\n\n\tparser.append(element);\n\n\tconst self_closing = parser.eat('/') || is_void(tag.name);\n\tconst closed = parser.eat('>', true, false);\n\n\t// Loose parsing mode\n\tif (!closed) {\n\t\t// We may have eaten an opening `<` of the next element and treated it as an attribute...\n\t\tconst last = element.attributes.at(-1);\n\t\tif (last?.type === 'Attribute' && last.name === '<') {\n\t\t\tparser.index = last.start;\n\t\t\telement.attributes.pop();\n\t\t} else {\n\t\t\t// ... or we may have eaten part of a following block ...\n\t\t\tconst prev_1 = parser.template[parser.index - 1];\n\t\t\tconst prev_2 = parser.template[parser.index - 2];\n\t\t\tconst current = parser.template[parser.index];\n\t\t\tif (prev_2 === '{' && prev_1 === '/') {\n\t\t\t\tparser.index -= 2;\n\t\t\t} else if (prev_1 === '{' && (current === '#' || current === '@' || current === ':')) {\n\t\t\t\tparser.index -= 1;\n\t\t\t} else {\n\t\t\t\t// ... or we're followed by whitespace, for example near the end of the template,\n\t\t\t\t// which we want to take in so that language tools has more room to work with\n\t\t\t\tparser.allow_whitespace();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (self_closing || !closed) {\n\t\t// don't push self-closing elements onto the stack\n\t\telement.end = parser.index;\n\t} else if (tag.name === 'textarea') {\n\t\t// special case\n\t\telement.fragment.nodes = read_sequence(\n\t\t\tparser,\n\t\t\t() => {\n\t\t\t\tregex_closing_textarea_tag.lastIndex = parser.index;\n\t\t\t\treturn regex_closing_textarea_tag.test(parser.template);\n\t\t\t},\n\t\t\t'inside <textarea>'\n\t\t);\n\t\tparser.read(regex_closing_textarea_tag);\n\t\telement.end = parser.index;\n\t} else if (tag.name === 'script' || tag.name === 'style') {\n\t\t// special case\n\t\tconst start = parser.index;\n\t\tconst close_tag = `</${tag.name}>`;\n\t\tconst close_index = parser.template.indexOf(close_tag, parser.index);\n\t\tconst data = parser.template.slice(\n\t\t\tparser.index,\n\t\t\tclose_index === -1 ? parser.template.length : close_index\n\t\t);\n\t\tparser.index = close_index === -1 ? parser.template.length : close_index;\n\t\tconst end = parser.index;\n\n\t\t/** @type {AST.Text} */\n\t\tconst node = {\n\t\t\tstart,\n\t\t\tend,\n\t\t\ttype: 'Text',\n\t\t\tdata,\n\t\t\traw: data\n\t\t};\n\n\t\telement.fragment.nodes.push(node);\n\t\tparser.eat(`</${tag.name}>`, true);\n\t\telement.end = parser.index;\n\t} else {\n\t\tparser.stack.push(element);\n\t\tparser.fragments.push(element.fragment);\n\t}\n}\n\n/** @param {AST.TemplateNode[]} stack */\nfunction parent_is_head(stack) {\n\tlet i = stack.length;\n\twhile (i--) {\n\t\tconst { type } = stack[i];\n\t\tif (type === 'SvelteHead') return true;\n\t\tif (type === 'RegularElement' || type === 'Component') return false;\n\t}\n\treturn false;\n}\n\n/** @param {AST.TemplateNode[]} stack */\nfunction parent_is_shadowroot_template(stack) {\n\t// https://developer.chrome.com/docs/css-ui/declarative-shadow-dom#building_a_declarative_shadow_root\n\tlet i = stack.length;\n\twhile (i--) {\n\t\tif (\n\t\t\tstack[i].type === 'RegularElement' &&\n\t\t\t/** @type {AST.RegularElement} */ (stack[i]).attributes.some(\n\t\t\t\t(a) => a.type === 'Attribute' && a.name === 'shadowrootmode'\n\t\t\t)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.Attribute | null}\n */\nfunction read_static_attribute(parser) {\n\tconst start = parser.index;\n\n\tconst tag = read_tag(parser, regex_token_ending_character);\n\tif (!tag.name) return null;\n\n\t/** @type {true | Array<AST.Text | AST.ExpressionTag>} */\n\tlet value = true;\n\n\tif (parser.eat('=')) {\n\t\tparser.allow_whitespace();\n\t\tlet raw = parser.match_regex(regex_attribute_value);\n\t\tif (!raw) {\n\t\t\te.expected_attribute_value(parser.index);\n\t\t}\n\n\t\tparser.index += raw.length;\n\n\t\tconst quoted = raw[0] === '\"' || raw[0] === \"'\";\n\t\tif (quoted) {\n\t\t\traw = raw.slice(1, -1);\n\t\t}\n\n\t\tvalue = [\n\t\t\t{\n\t\t\t\tstart: parser.index - raw.length - (quoted ? 1 : 0),\n\t\t\t\tend: quoted ? parser.index - 1 : parser.index,\n\t\t\t\ttype: 'Text',\n\t\t\t\traw: raw,\n\t\t\t\tdata: decode_character_references(raw, true)\n\t\t\t}\n\t\t];\n\t}\n\n\tif (parser.match_regex(regex_starts_with_quote_characters)) {\n\t\te.expected_token(parser.index, '=');\n\t}\n\n\treturn create_attribute(tag.name, tag.loc, start, parser.index, value);\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.Attribute | AST.SpreadAttribute | AST.Directive | AST.AttachTag | null}\n */\nfunction read_attribute(parser) {\n\t/** @type {AST.JSComment | null} */\n\t// eslint-disable-next-line no-useless-assignment -- it is, in fact, eslint that is useless\n\tlet comment = null;\n\n\twhile ((comment = read_comment(parser))) {\n\t\tparser.root.comments.push(comment);\n\t\tparser.allow_whitespace();\n\t}\n\n\tconst start = parser.index;\n\n\tif (parser.eat('{')) {\n\t\tparser.allow_whitespace();\n\n\t\tif (parser.eat('@attach')) {\n\t\t\tparser.require_whitespace();\n\n\t\t\tconst expression = read_expression(parser);\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\n\t\t\t/** @type {AST.AttachTag} */\n\t\t\tconst attachment = {\n\t\t\t\ttype: 'AttachTag',\n\t\t\t\tstart,\n\t\t\t\tend: parser.index,\n\t\t\t\texpression,\n\t\t\t\tmetadata: {\n\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn attachment;\n\t\t}\n\n\t\tif (parser.eat('...')) {\n\t\t\tconst expression = read_expression(parser);\n\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\n\t\t\t/** @type {AST.SpreadAttribute} */\n\t\t\tconst spread = {\n\t\t\t\ttype: 'SpreadAttribute',\n\t\t\t\tstart,\n\t\t\t\tend: parser.index,\n\t\t\t\texpression,\n\t\t\t\tmetadata: {\n\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn spread;\n\t\t} else {\n\t\t\tconst id = parser.read_identifier();\n\n\t\t\tif (id.name === '') {\n\t\t\t\tif (\n\t\t\t\t\tparser.loose &&\n\t\t\t\t\t(parser.match('#') || parser.match('/') || parser.match('@') || parser.match(':'))\n\t\t\t\t) {\n\t\t\t\t\t// We're likely in an unclosed opening tag and did read part of a block.\n\t\t\t\t\t// Return null to not crash the parser so it can continue with closing the tag.\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (parser.loose && parser.match('}')) {\n\t\t\t\t\t// Likely in the middle of typing, just created the shorthand\n\t\t\t\t} else {\n\t\t\t\t\te.attribute_empty_shorthand(start);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\n\t\t\t/** @type {AST.ExpressionTag} */\n\t\t\tconst expression = {\n\t\t\t\ttype: 'ExpressionTag',\n\t\t\t\tstart: id.start,\n\t\t\t\tend: id.end,\n\t\t\t\texpression: id,\n\t\t\t\tmetadata: {\n\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn create_attribute(id.name, id.loc, start, parser.index, expression);\n\t\t}\n\t}\n\n\tconst tag = read_tag(parser, regex_token_ending_character);\n\n\tif (!tag.name) return null;\n\n\tlet end = parser.index;\n\n\tparser.allow_whitespace();\n\n\tconst colon_index = tag.name.indexOf(':');\n\tconst type = colon_index !== -1 && get_directive_type(tag.name.slice(0, colon_index));\n\n\t/** @type {true | AST.ExpressionTag | Array<AST.Text | AST.ExpressionTag>} */\n\tlet value = true;\n\tif (parser.eat('=')) {\n\t\tparser.allow_whitespace();\n\n\t\tif (parser.template[parser.index] === '/' && parser.template[parser.index + 1] === '>') {\n\t\t\tconst char_start = parser.index;\n\t\t\tparser.index++; // consume '/'\n\t\t\tvalue = [\n\t\t\t\t{\n\t\t\t\t\tstart: char_start,\n\t\t\t\t\tend: char_start + 1,\n\t\t\t\t\ttype: 'Text',\n\t\t\t\t\traw: '/',\n\t\t\t\t\tdata: '/'\n\t\t\t\t}\n\t\t\t];\n\t\t\tend = parser.index;\n\t\t} else {\n\t\t\tvalue = read_attribute_value(parser);\n\t\t\tend = parser.index;\n\t\t}\n\t} else if (parser.match_regex(regex_starts_with_quote_characters)) {\n\t\te.expected_token(parser.index, '=');\n\t}\n\n\tif (type) {\n\t\tconst [directive_name, ...modifiers] = tag.name.slice(colon_index + 1).split('|');\n\n\t\tif (directive_name === '') {\n\t\t\te.directive_missing_name({ start, end: start + colon_index + 1 }, tag.name);\n\t\t}\n\n\t\tif (type === 'StyleDirective') {\n\t\t\treturn {\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\ttype,\n\t\t\t\tname: directive_name,\n\t\t\t\tname_loc: tag.loc,\n\t\t\t\tmodifiers: /** @type {Array<'important'>} */ (modifiers),\n\t\t\t\tvalue,\n\t\t\t\tmetadata: {\n\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tconst first_value = value === true ? undefined : Array.isArray(value) ? value[0] : value;\n\n\t\t/** @type {Expression | null} */\n\t\tlet expression = null;\n\n\t\tif (first_value) {\n\t\t\tconst attribute_contains_text =\n\t\t\t\t/** @type {any[]} */ (value).length > 1 || first_value.type === 'Text';\n\t\t\tif (attribute_contains_text) {\n\t\t\t\te.directive_invalid_value(/** @type {number} */ (first_value.start));\n\t\t\t} else {\n\t\t\t\t// TODO throw a parser error in a future version here if this `[ExpressionTag]` instead of `ExpressionTag`,\n\t\t\t\t// which means stringified value, which isn't allowed for some directives?\n\t\t\t\texpression = first_value.expression;\n\t\t\t}\n\t\t}\n\n\t\tconst directive = /** @type {AST.Directive} */ ({\n\t\t\tstart,\n\t\t\tend,\n\t\t\ttype,\n\t\t\tname: directive_name,\n\t\t\tname_loc: tag.loc,\n\t\t\texpression,\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t}\n\t\t});\n\n\t\t// @ts-expect-error we do this separately from the declaration to avoid upsetting typescript\n\t\tdirective.modifiers = modifiers;\n\n\t\tif (directive.type === 'TransitionDirective') {\n\t\t\tconst direction = tag.name.slice(0, colon_index);\n\t\t\tdirective.intro = direction === 'in' || direction === 'transition';\n\t\t\tdirective.outro = direction === 'out' || direction === 'transition';\n\t\t}\n\n\t\t// Directive name is expression, e.g. <p class:isRed />\n\t\tif (\n\t\t\t(directive.type === 'BindDirective' || directive.type === 'ClassDirective') &&\n\t\t\t!directive.expression\n\t\t) {\n\t\t\tdirective.expression = /** @type {any} */ ({\n\t\t\t\tstart: start + colon_index + 1,\n\t\t\t\tend,\n\t\t\t\ttype: 'Identifier',\n\t\t\t\tname: directive.name\n\t\t\t});\n\t\t}\n\n\t\treturn directive;\n\t}\n\n\treturn create_attribute(tag.name, tag.loc, start, end, value);\n}\n\n/**\n * @param {Parser} parser\n * @returns {AST.JSComment | null}\n */\nfunction read_comment(parser) {\n\tconst start = parser.index;\n\n\tif (parser.eat('//')) {\n\t\tconst value = parser.read_until(/\\n/);\n\t\tconst end = parser.index;\n\n\t\treturn {\n\t\t\ttype: 'Line',\n\t\t\tstart,\n\t\t\tend,\n\t\t\tvalue,\n\t\t\tloc: {\n\t\t\t\tstart: locator(start),\n\t\t\t\tend: locator(end)\n\t\t\t}\n\t\t};\n\t}\n\n\tif (parser.eat('/*')) {\n\t\tconst value = parser.read_until(/\\*\\//);\n\n\t\tparser.eat('*/');\n\t\tconst end = parser.index;\n\n\t\treturn {\n\t\t\ttype: 'Block',\n\t\t\tstart,\n\t\t\tend,\n\t\t\tvalue,\n\t\t\tloc: {\n\t\t\t\tstart: locator(start),\n\t\t\t\tend: locator(end)\n\t\t\t}\n\t\t};\n\t}\n\n\treturn null;\n}\n\n/**\n * @param {string} name\n * @returns {any}\n */\nfunction get_directive_type(name) {\n\tif (name === 'use') return 'UseDirective';\n\tif (name === 'animate') return 'AnimateDirective';\n\tif (name === 'bind') return 'BindDirective';\n\tif (name === 'class') return 'ClassDirective';\n\tif (name === 'style') return 'StyleDirective';\n\tif (name === 'on') return 'OnDirective';\n\tif (name === 'let') return 'LetDirective';\n\tif (name === 'in' || name === 'out' || name === 'transition') return 'TransitionDirective';\n\treturn false;\n}\n\n/**\n * @param {Parser} parser\n * @return {AST.ExpressionTag | Array<AST.ExpressionTag | AST.Text>}\n */\nfunction read_attribute_value(parser) {\n\tconst quote_mark = parser.eat(\"'\") ? \"'\" : parser.eat('\"') ? '\"' : null;\n\tif (quote_mark && parser.eat(quote_mark)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tstart: parser.index - 1,\n\t\t\t\tend: parser.index - 1,\n\t\t\t\ttype: 'Text',\n\t\t\t\traw: '',\n\t\t\t\tdata: ''\n\t\t\t}\n\t\t];\n\t}\n\n\t/** @type {Array<AST.ExpressionTag | AST.Text>} */\n\tlet value;\n\ttry {\n\t\tvalue = read_sequence(\n\t\t\tparser,\n\t\t\t() => {\n\t\t\t\t// handle common case of quote marks existing outside of regex for performance reasons\n\t\t\t\tif (quote_mark) return parser.match(quote_mark);\n\t\t\t\treturn !!parser.match_regex(regex_invalid_unquoted_attribute_value);\n\t\t\t},\n\t\t\t'in attribute value'\n\t\t);\n\t} catch (/** @type {any} */ error) {\n\t\tif (error.code === 'js_parse_error') {\n\t\t\t// if the attribute value didn't close + self-closing tag\n\t\t\t// eg: `<Component test={{a:1} />`\n\t\t\t// acorn may throw a `Unterminated regular expression` because of `/>`\n\t\t\tconst pos = error.position?.[0];\n\t\t\tif (pos !== undefined && parser.template.slice(pos - 1, pos + 1) === '/>') {\n\t\t\t\tparser.index = pos;\n\t\t\t\te.expected_token(pos, quote_mark || '}');\n\t\t\t}\n\t\t}\n\t\tthrow error;\n\t}\n\n\tif (value.length === 0 && !quote_mark) {\n\t\te.expected_attribute_value(parser.index);\n\t}\n\n\tif (quote_mark) parser.index += 1;\n\n\tif (quote_mark || value.length > 1 || value[0].type === 'Text') {\n\t\treturn value;\n\t} else {\n\t\treturn value[0];\n\t}\n}\n\n/**\n * @param {Parser} parser\n * @param {() => boolean} done\n * @param {string} location\n * @returns {any[]}\n */\nfunction read_sequence(parser, done, location) {\n\t/** @type {AST.Text} */\n\tlet current_chunk = {\n\t\tstart: parser.index,\n\t\tend: -1,\n\t\ttype: 'Text',\n\t\traw: '',\n\t\tdata: ''\n\t};\n\n\t/** @type {Array<AST.Text | AST.ExpressionTag>} */\n\tconst chunks = [];\n\n\t/** @param {number} end */\n\tfunction flush(end) {\n\t\tif (end > current_chunk.start) {\n\t\t\tcurrent_chunk.raw = parser.template.slice(current_chunk.start, end);\n\t\t\tcurrent_chunk.data = decode_character_references(current_chunk.raw, true);\n\t\t\tcurrent_chunk.end = end;\n\t\t\tchunks.push(current_chunk);\n\t\t}\n\t}\n\n\twhile (parser.index < parser.template.length) {\n\t\tconst index = parser.index;\n\n\t\tif (done()) {\n\t\t\tflush(parser.index);\n\t\t\treturn chunks;\n\t\t} else if (parser.eat('{')) {\n\t\t\tif (parser.match('#')) {\n\t\t\t\tconst index = parser.index - 1;\n\t\t\t\tparser.eat('#');\n\t\t\t\tconst name = parser.read_until(/[^a-z]/);\n\t\t\t\te.block_invalid_placement(index, name, location);\n\t\t\t} else if (parser.match('@')) {\n\t\t\t\tconst index = parser.index - 1;\n\t\t\t\tparser.eat('@');\n\t\t\t\tconst name = parser.read_until(/[^a-z]/);\n\t\t\t\te.tag_invalid_placement(index, name, location);\n\t\t\t}\n\n\t\t\tflush(parser.index - 1);\n\n\t\t\tparser.allow_whitespace();\n\t\t\tconst expression = read_expression(parser);\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\n\t\t\t/** @type {AST.ExpressionTag} */\n\t\t\tconst chunk = {\n\t\t\t\ttype: 'ExpressionTag',\n\t\t\t\tstart: index,\n\t\t\t\tend: parser.index,\n\t\t\t\texpression,\n\t\t\t\tmetadata: {\n\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tchunks.push(chunk);\n\n\t\t\tcurrent_chunk = {\n\t\t\t\tstart: parser.index,\n\t\t\t\tend: -1,\n\t\t\t\ttype: 'Text',\n\t\t\t\traw: '',\n\t\t\t\tdata: ''\n\t\t\t};\n\t\t} else {\n\t\t\tparser.index++;\n\t\t}\n\t}\n\n\tif (parser.loose) {\n\t\treturn chunks;\n\t} else {\n\t\te.unexpected_eof(parser.template.length);\n\t}\n}\n\n/**\n * @param {Parser} parser\n * @param {RegExp} regex\n * @returns {Identifier & { start: number, end: number, loc: SourceLocation }}\n */\nfunction read_tag(parser, regex) {\n\tconst start = parser.index;\n\tconst name = parser.read_until(regex);\n\tconst end = parser.index;\n\n\treturn {\n\t\ttype: 'Identifier',\n\t\tname,\n\t\tstart,\n\t\tend,\n\t\tloc: {\n\t\t\tstart: locator(start),\n\t\t\tend: locator(end)\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/state/fragment.js",
    "content": "/** @import { Parser } from '../index.js' */\nimport element from './element.js';\nimport tag from './tag.js';\nimport text from './text.js';\n\n/** @param {Parser} parser */\nexport default function fragment(parser) {\n\tif (parser.match('<')) {\n\t\treturn element;\n\t}\n\n\tif (parser.match('{')) {\n\t\treturn tag;\n\t}\n\n\treturn text;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/state/tag.js",
    "content": "/** @import { ArrowFunctionExpression, Expression, Identifier, Pattern } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { Parser } from '../index.js' */\nimport { walk } from 'zimmerframe';\nimport * as e from '../../../errors.js';\nimport { ExpressionMetadata } from '../../nodes.js';\nimport { parse_expression_at } from '../acorn.js';\nimport read_pattern from '../read/context.js';\nimport read_expression, { get_loose_identifier } from '../read/expression.js';\nimport { create_fragment } from '../utils/create.js';\nimport { match_bracket } from '../utils/bracket.js';\n\nconst regex_whitespace_with_closing_curly_brace = /\\s*}/y;\n\nconst pointy_bois = { '<': '>' };\n\n/** @param {Parser} parser */\nexport default function tag(parser) {\n\tconst start = parser.index;\n\tparser.index += 1;\n\n\tparser.allow_whitespace();\n\n\tif (parser.eat('#')) return open(parser);\n\tif (parser.eat(':')) return next(parser);\n\tif (parser.eat('@')) return special(parser);\n\tif (parser.match('/')) {\n\t\tif (!parser.match('/*') && !parser.match('//')) {\n\t\t\tparser.eat('/');\n\t\t\treturn close(parser);\n\t\t}\n\t}\n\n\tconst expression = read_expression(parser);\n\n\tparser.allow_whitespace();\n\tparser.eat('}', true);\n\n\tparser.append({\n\t\ttype: 'ExpressionTag',\n\t\tstart,\n\t\tend: parser.index,\n\t\texpression,\n\t\tmetadata: {\n\t\t\texpression: new ExpressionMetadata()\n\t\t}\n\t});\n}\n\n/** @param {Parser} parser */\nfunction open(parser) {\n\tlet start = parser.index - 2;\n\twhile (parser.template[start] !== '{') start -= 1;\n\n\tif (parser.eat('if')) {\n\t\tparser.require_whitespace();\n\n\t\t/** @type {AST.IfBlock} */\n\t\tconst block = parser.append({\n\t\t\ttype: 'IfBlock',\n\t\t\telseif: false,\n\t\t\tstart,\n\t\t\tend: -1,\n\t\t\ttest: read_expression(parser),\n\t\t\tconsequent: create_fragment(),\n\t\t\talternate: null,\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t}\n\t\t});\n\n\t\tparser.allow_whitespace();\n\t\tparser.eat('}', true);\n\n\t\tparser.stack.push(block);\n\t\tparser.fragments.push(block.consequent);\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('each')) {\n\t\tparser.require_whitespace();\n\n\t\tconst template = parser.template;\n\t\tlet end = parser.template.length;\n\n\t\t/** @type {Expression | undefined} */\n\t\tlet expression;\n\n\t\t// we have to do this loop because `{#each x as { y = z }}` fails to parse —\n\t\t// the `as { y = z }` is treated as an Expression but it's actually a Pattern.\n\t\t// the 'fix' is to backtrack and hide everything from the `as` onwards, until\n\t\t// we get a valid expression\n\t\twhile (!expression) {\n\t\t\ttry {\n\t\t\t\texpression = read_expression(parser, undefined, true);\n\t\t\t} catch (err) {\n\t\t\t\tend = /** @type {any} */ (err).position[0] - 2;\n\n\t\t\t\twhile (end > start && parser.template.slice(end, end + 2) !== 'as') {\n\t\t\t\t\tend -= 1;\n\t\t\t\t}\n\n\t\t\t\tif (end <= start) {\n\t\t\t\t\tif (parser.loose) {\n\t\t\t\t\t\texpression = get_loose_identifier(parser);\n\t\t\t\t\t\tif (expression) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\n\t\t\t\t// @ts-expect-error parser.template is meant to be readonly, this is a special case\n\t\t\t\tparser.template = template.slice(0, end);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\tparser.template = template;\n\n\t\tparser.allow_whitespace();\n\n\t\t// {#each} blocks must declare a context – {#each list as item}\n\t\tif (!parser.match('as')) {\n\t\t\t// this could be a TypeScript assertion that was erroneously eaten.\n\n\t\t\tif (expression.type === 'SequenceExpression') {\n\t\t\t\texpression = expression.expressions[0];\n\t\t\t}\n\n\t\t\tlet assertion = null;\n\t\t\tlet end = expression.end;\n\n\t\t\texpression = walk(expression, null, {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tTSAsExpression(node, context) {\n\t\t\t\t\tif (node.end === /** @type {Expression} */ (expression).end) {\n\t\t\t\t\t\tassertion = node;\n\t\t\t\t\t\tend = node.expression.end;\n\t\t\t\t\t\treturn node.expression;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.next();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\texpression.end = end;\n\n\t\t\tif (assertion) {\n\t\t\t\t// we can't reset `parser.index` to `expression.expression.end` because\n\t\t\t\t// it will ignore any parentheses — we need to jump through this hoop\n\t\t\t\tlet end = /** @type {any} */ (/** @type {any} */ (assertion).typeAnnotation).start - 2;\n\t\t\t\twhile (parser.template.slice(end, end + 2) !== 'as') end -= 1;\n\n\t\t\t\tparser.index = end;\n\t\t\t}\n\t\t}\n\n\t\t/** @type {Pattern | null} */\n\t\tlet context = null;\n\t\tlet index;\n\t\tlet key;\n\n\t\tif (parser.eat('as')) {\n\t\t\tparser.require_whitespace();\n\n\t\t\tcontext = read_pattern(parser);\n\t\t} else {\n\t\t\t// {#each Array.from({ length: 10 }), i} is read as a sequence expression,\n\t\t\t// which is set back above - we now gotta reset the index as a consequence\n\t\t\t// to properly read the , i part\n\t\t\tparser.index = /** @type {number} */ (expression.end);\n\t\t}\n\n\t\tparser.allow_whitespace();\n\n\t\tif (parser.eat(',')) {\n\t\t\tparser.allow_whitespace();\n\t\t\tindex = parser.read_identifier().name;\n\t\t\tif (!index) {\n\t\t\t\te.expected_identifier(parser.index);\n\t\t\t}\n\n\t\t\tparser.allow_whitespace();\n\t\t}\n\n\t\tif (parser.eat('(')) {\n\t\t\tparser.allow_whitespace();\n\n\t\t\tkey = read_expression(parser, '(');\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat(')', true);\n\t\t\tparser.allow_whitespace();\n\t\t}\n\n\t\tconst matches = parser.eat('}', true, false);\n\n\t\tif (!matches) {\n\t\t\t// Parser may have read the `as` as part of the expression (e.g. in `{#each foo. as x}`)\n\t\t\tif (parser.template.slice(parser.index - 4, parser.index) === ' as ') {\n\t\t\t\tconst prev_index = parser.index;\n\t\t\t\tcontext = read_pattern(parser);\n\t\t\t\tparser.eat('}', true);\n\t\t\t\texpression = {\n\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\tname: '',\n\t\t\t\t\tstart: expression.start,\n\t\t\t\t\tend: prev_index - 4\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tparser.eat('}', true); // rerun to produce the parser error\n\t\t\t}\n\t\t}\n\n\t\t/** @type {AST.EachBlock} */\n\t\tconst block = parser.append({\n\t\t\ttype: 'EachBlock',\n\t\t\tstart,\n\t\t\tend: -1,\n\t\t\texpression,\n\t\t\tbody: create_fragment(),\n\t\t\tcontext,\n\t\t\tindex,\n\t\t\tkey,\n\t\t\tmetadata: /** @type {any} */ (null) // filled in later\n\t\t});\n\n\t\tparser.stack.push(block);\n\t\tparser.fragments.push(block.body);\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('await')) {\n\t\tparser.require_whitespace();\n\t\tconst expression = read_expression(parser);\n\t\tparser.allow_whitespace();\n\n\t\t/** @type {AST.AwaitBlock} */\n\t\tconst block = parser.append({\n\t\t\ttype: 'AwaitBlock',\n\t\t\tstart,\n\t\t\tend: -1,\n\t\t\texpression,\n\t\t\tvalue: null,\n\t\t\terror: null,\n\t\t\tpending: null,\n\t\t\tthen: null,\n\t\t\tcatch: null,\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t}\n\t\t});\n\n\t\tif (parser.eat('then')) {\n\t\t\tif (parser.match_regex(regex_whitespace_with_closing_curly_brace)) {\n\t\t\t\tparser.allow_whitespace();\n\t\t\t} else {\n\t\t\t\tparser.require_whitespace();\n\t\t\t\tblock.value = read_pattern(parser);\n\t\t\t\tparser.allow_whitespace();\n\t\t\t}\n\n\t\t\tblock.then = create_fragment();\n\t\t\tparser.fragments.push(block.then);\n\t\t} else if (parser.eat('catch')) {\n\t\t\tif (parser.match_regex(regex_whitespace_with_closing_curly_brace)) {\n\t\t\t\tparser.allow_whitespace();\n\t\t\t} else {\n\t\t\t\tparser.require_whitespace();\n\t\t\t\tblock.error = read_pattern(parser);\n\t\t\t\tparser.allow_whitespace();\n\t\t\t}\n\n\t\t\tblock.catch = create_fragment();\n\t\t\tparser.fragments.push(block.catch);\n\t\t} else {\n\t\t\tblock.pending = create_fragment();\n\t\t\tparser.fragments.push(block.pending);\n\t\t}\n\n\t\tconst matches = parser.eat('}', true, false);\n\n\t\t// Parser may have read the `then/catch` as part of the expression (e.g. in `{#await foo. then x}`)\n\t\tif (!matches) {\n\t\t\tif (parser.template.slice(parser.index - 6, parser.index) === ' then ') {\n\t\t\t\tconst prev_index = parser.index;\n\t\t\t\tblock.value = read_pattern(parser);\n\t\t\t\tparser.eat('}', true);\n\t\t\t\tblock.expression = {\n\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\tname: '',\n\t\t\t\t\tstart: expression.start,\n\t\t\t\t\tend: prev_index - 6\n\t\t\t\t};\n\t\t\t\tblock.then = block.pending;\n\t\t\t\tblock.pending = null;\n\t\t\t} else if (parser.template.slice(parser.index - 7, parser.index) === ' catch ') {\n\t\t\t\tconst prev_index = parser.index;\n\t\t\t\tblock.error = read_pattern(parser);\n\t\t\t\tparser.eat('}', true);\n\t\t\t\tblock.expression = {\n\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\tname: '',\n\t\t\t\t\tstart: expression.start,\n\t\t\t\t\tend: prev_index - 7\n\t\t\t\t};\n\t\t\t\tblock.catch = block.pending;\n\t\t\t\tblock.pending = null;\n\t\t\t} else {\n\t\t\t\tparser.eat('}', true); // rerun to produce the parser error\n\t\t\t}\n\t\t}\n\n\t\tparser.stack.push(block);\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('key')) {\n\t\tparser.require_whitespace();\n\n\t\tconst expression = read_expression(parser);\n\t\tparser.allow_whitespace();\n\n\t\tparser.eat('}', true);\n\n\t\t/** @type {AST.KeyBlock} */\n\t\tconst block = parser.append({\n\t\t\ttype: 'KeyBlock',\n\t\t\tstart,\n\t\t\tend: -1,\n\t\t\texpression,\n\t\t\tfragment: create_fragment(),\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t}\n\t\t});\n\n\t\tparser.stack.push(block);\n\t\tparser.fragments.push(block.fragment);\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('snippet')) {\n\t\tparser.require_whitespace();\n\n\t\tconst id = parser.read_identifier();\n\n\t\tif (id.name === '' && !parser.loose) {\n\t\t\te.expected_identifier(parser.index);\n\t\t}\n\n\t\tparser.allow_whitespace();\n\n\t\tconst params_start = parser.index;\n\n\t\t// snippets could have a generic signature, e.g. `#snippet foo<T>(...)`\n\t\t/** @type {string | undefined} */\n\t\tlet type_params;\n\n\t\t// if we match a generic opening\n\t\tif (parser.ts && parser.match('<')) {\n\t\t\tconst start = parser.index;\n\t\t\tconst end = match_bracket(parser, start, pointy_bois);\n\n\t\t\ttype_params = parser.template.slice(start + 1, end - 1);\n\n\t\t\tparser.index = end;\n\t\t}\n\n\t\tparser.allow_whitespace();\n\n\t\tconst matched = parser.eat('(', true, false);\n\n\t\tif (matched) {\n\t\t\tlet parentheses = 1;\n\n\t\t\twhile (parser.index < parser.template.length && (!parser.match(')') || parentheses !== 1)) {\n\t\t\t\tif (parser.match('(')) parentheses++;\n\t\t\t\tif (parser.match(')')) parentheses--;\n\t\t\t\tparser.index += 1;\n\t\t\t}\n\n\t\t\tparser.eat(')', true);\n\t\t}\n\n\t\tconst prelude = parser.template.slice(0, params_start).replace(/\\S/g, ' ');\n\t\tconst params = parser.template.slice(params_start, parser.index);\n\n\t\tlet function_expression = matched\n\t\t\t? /** @type {ArrowFunctionExpression} */ (\n\t\t\t\t\tparse_expression_at(\n\t\t\t\t\t\tprelude + `${params} => {}`,\n\t\t\t\t\t\tparser.root.comments,\n\t\t\t\t\t\tparser.ts,\n\t\t\t\t\t\tparams_start\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t: { params: [] };\n\n\t\tparser.allow_whitespace();\n\t\tparser.eat('}', true);\n\n\t\t/** @type {AST.SnippetBlock} */\n\t\tconst block = parser.append({\n\t\t\ttype: 'SnippetBlock',\n\t\t\tstart,\n\t\t\tend: -1,\n\t\t\texpression: id,\n\t\t\ttypeParams: type_params,\n\t\t\tparameters: function_expression.params,\n\t\t\tbody: create_fragment(),\n\t\t\tmetadata: {\n\t\t\t\tcan_hoist: false,\n\t\t\t\tsites: new Set()\n\t\t\t}\n\t\t});\n\t\tparser.stack.push(block);\n\t\tparser.fragments.push(block.body);\n\n\t\treturn;\n\t}\n\n\te.expected_block_type(parser.index);\n}\n\n/** @param {Parser} parser */\nfunction next(parser) {\n\tconst start = parser.index - 1;\n\n\tconst block = parser.current(); // TODO type should not be TemplateNode, that's much too broad\n\n\tif (block.type === 'IfBlock') {\n\t\tif (!parser.eat('else')) e.expected_token(start, '{:else} or {:else if}');\n\t\tif (parser.eat('if')) e.block_invalid_elseif(start);\n\n\t\tparser.allow_whitespace();\n\n\t\tparser.fragments.pop();\n\n\t\tblock.alternate = create_fragment();\n\t\tparser.fragments.push(block.alternate);\n\n\t\t// :else if\n\t\tif (parser.eat('if')) {\n\t\t\tparser.require_whitespace();\n\n\t\t\tconst expression = read_expression(parser);\n\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\n\t\t\tlet elseif_start = start - 1;\n\t\t\twhile (parser.template[elseif_start] !== '{') elseif_start -= 1;\n\n\t\t\t/** @type {AST.IfBlock} */\n\t\t\tconst child = parser.append({\n\t\t\t\tstart: elseif_start,\n\t\t\t\tend: -1,\n\t\t\t\ttype: 'IfBlock',\n\t\t\t\telseif: true,\n\t\t\t\ttest: expression,\n\t\t\t\tconsequent: create_fragment(),\n\t\t\t\talternate: null,\n\t\t\t\tmetadata: {\n\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tparser.stack.push(child);\n\t\t\tparser.fragments.pop();\n\t\t\tparser.fragments.push(child.consequent);\n\t\t} else {\n\t\t\t// :else\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tif (block.type === 'EachBlock') {\n\t\tif (!parser.eat('else')) e.expected_token(start, '{:else}');\n\n\t\tparser.allow_whitespace();\n\t\tparser.eat('}', true);\n\n\t\tblock.fallback = create_fragment();\n\n\t\tparser.fragments.pop();\n\t\tparser.fragments.push(block.fallback);\n\n\t\treturn;\n\t}\n\n\tif (block.type === 'AwaitBlock') {\n\t\tif (parser.eat('then')) {\n\t\t\tif (block.then) {\n\t\t\t\te.block_duplicate_clause(start, '{:then}');\n\t\t\t}\n\n\t\t\tif (!parser.eat('}')) {\n\t\t\t\tparser.require_whitespace();\n\t\t\t\tblock.value = read_pattern(parser);\n\t\t\t\tparser.allow_whitespace();\n\t\t\t\tparser.eat('}', true);\n\t\t\t}\n\n\t\t\tblock.then = create_fragment();\n\t\t\tparser.fragments.pop();\n\t\t\tparser.fragments.push(block.then);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (parser.eat('catch')) {\n\t\t\tif (block.catch) {\n\t\t\t\te.block_duplicate_clause(start, '{:catch}');\n\t\t\t}\n\n\t\t\tif (!parser.eat('}')) {\n\t\t\t\tparser.require_whitespace();\n\t\t\t\tblock.error = read_pattern(parser);\n\t\t\t\tparser.allow_whitespace();\n\t\t\t\tparser.eat('}', true);\n\t\t\t}\n\n\t\t\tblock.catch = create_fragment();\n\t\t\tparser.fragments.pop();\n\t\t\tparser.fragments.push(block.catch);\n\n\t\t\treturn;\n\t\t}\n\n\t\te.expected_token(start, '{:then ...} or {:catch ...}');\n\t}\n\n\te.block_invalid_continuation_placement(start);\n}\n\n/** @param {Parser} parser */\nfunction close(parser) {\n\tconst start = parser.index - 1;\n\n\tlet block = parser.current();\n\t/** Only relevant/reached for loose parsing mode */\n\tlet matched;\n\n\tswitch (block.type) {\n\t\tcase 'IfBlock':\n\t\t\tmatched = parser.eat('if', true, false);\n\n\t\t\tif (!matched) {\n\t\t\t\tblock.end = start - 1;\n\t\t\t\tparser.pop();\n\t\t\t\tclose(parser);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\n\t\t\twhile (block.elseif) {\n\t\t\t\tblock.end = parser.index;\n\t\t\t\tparser.stack.pop();\n\t\t\t\tblock = /** @type {AST.IfBlock} */ (parser.current());\n\t\t\t}\n\n\t\t\tblock.end = parser.index;\n\t\t\tparser.pop();\n\t\t\treturn;\n\n\t\tcase 'EachBlock':\n\t\t\tmatched = parser.eat('each', true, false);\n\t\t\tbreak;\n\t\tcase 'KeyBlock':\n\t\t\tmatched = parser.eat('key', true, false);\n\t\t\tbreak;\n\t\tcase 'AwaitBlock':\n\t\t\tmatched = parser.eat('await', true, false);\n\t\t\tbreak;\n\t\tcase 'SnippetBlock':\n\t\t\tmatched = parser.eat('snippet', true, false);\n\t\t\tbreak;\n\n\t\tcase 'RegularElement':\n\t\t\tif (parser.loose) {\n\t\t\t\tmatched = false;\n\t\t\t} else {\n\t\t\t\t// TODO handle implicitly closed elements\n\t\t\t\te.block_unexpected_close(start);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\te.block_unexpected_close(start);\n\t}\n\n\tif (!matched) {\n\t\tblock.end = start - 1;\n\t\tparser.pop();\n\t\tclose(parser);\n\t\treturn;\n\t}\n\n\tparser.allow_whitespace();\n\tparser.eat('}', true);\n\tblock.end = parser.index;\n\tparser.pop();\n}\n\n/** @param {Parser} parser */\nfunction special(parser) {\n\tlet start = parser.index;\n\twhile (parser.template[start] !== '{') start -= 1;\n\n\tif (parser.eat('html')) {\n\t\t// {@html content} tag\n\t\tparser.require_whitespace();\n\n\t\tconst expression = read_expression(parser);\n\n\t\tparser.allow_whitespace();\n\t\tparser.eat('}', true);\n\n\t\tparser.append({\n\t\t\ttype: 'HtmlTag',\n\t\t\tstart,\n\t\t\tend: parser.index,\n\t\t\texpression,\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t}\n\t\t});\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('debug')) {\n\t\t/** @type {Identifier[]} */\n\t\tlet identifiers;\n\n\t\t// Implies {@debug} which indicates \"debug all\"\n\t\tif (parser.read(regex_whitespace_with_closing_curly_brace)) {\n\t\t\tidentifiers = [];\n\t\t} else {\n\t\t\tconst expression = read_expression(parser);\n\n\t\t\tidentifiers =\n\t\t\t\texpression.type === 'SequenceExpression'\n\t\t\t\t\t? /** @type {Identifier[]} */ (expression.expressions)\n\t\t\t\t\t: [/** @type {Identifier} */ (expression)];\n\n\t\t\tidentifiers.forEach(\n\t\t\t\t/** @param {any} node */ (node) => {\n\t\t\t\t\tif (node.type !== 'Identifier') {\n\t\t\t\t\t\te.debug_tag_invalid_arguments(/** @type {number} */ (node.start));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tparser.allow_whitespace();\n\t\t\tparser.eat('}', true);\n\t\t}\n\n\t\tparser.append({\n\t\t\ttype: 'DebugTag',\n\t\t\tstart,\n\t\t\tend: parser.index,\n\t\t\tidentifiers\n\t\t});\n\n\t\treturn;\n\t}\n\n\tif (parser.eat('const')) {\n\t\tparser.require_whitespace();\n\n\t\tconst id = read_pattern(parser);\n\t\tparser.allow_whitespace();\n\n\t\tparser.eat('=', true);\n\t\tparser.allow_whitespace();\n\n\t\tconst expression_start = parser.index;\n\t\tconst init = read_expression(parser);\n\t\tif (\n\t\t\tinit.type === 'SequenceExpression' &&\n\t\t\t!parser.template.substring(expression_start, init.start).includes('(')\n\t\t) {\n\t\t\t// const a = (b, c) is allowed but a = b, c = d is not;\n\t\t\te.const_tag_invalid_expression(init);\n\t\t}\n\t\tparser.allow_whitespace();\n\n\t\tparser.eat('}', true);\n\n\t\tparser.append({\n\t\t\ttype: 'ConstTag',\n\t\t\tstart,\n\t\t\tend: parser.index,\n\t\t\tdeclaration: {\n\t\t\t\ttype: 'VariableDeclaration',\n\t\t\t\tkind: 'const',\n\t\t\t\tdeclarations: [{ type: 'VariableDeclarator', id, init, start: id.start, end: init.end }],\n\t\t\t\tstart: start + 2, // start at const, not at @const\n\t\t\t\tend: parser.index - 1\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t}\n\t\t});\n\t\treturn;\n\t}\n\n\tif (parser.eat('render')) {\n\t\t// {@render foo(...)}\n\t\tparser.require_whitespace();\n\n\t\tconst expression = read_expression(parser);\n\n\t\tif (\n\t\t\texpression.type !== 'CallExpression' &&\n\t\t\t(expression.type !== 'ChainExpression' || expression.expression.type !== 'CallExpression')\n\t\t) {\n\t\t\te.render_tag_invalid_expression(expression);\n\t\t}\n\n\t\tparser.allow_whitespace();\n\t\tparser.eat('}', true);\n\n\t\tparser.append({\n\t\t\ttype: 'RenderTag',\n\t\t\tstart,\n\t\t\tend: parser.index,\n\t\t\texpression: /** @type {AST.RenderTag['expression']} */ (expression),\n\t\t\tmetadata: {\n\t\t\t\texpression: new ExpressionMetadata(),\n\t\t\t\tdynamic: false,\n\t\t\t\targuments: [],\n\t\t\t\tpath: [],\n\t\t\t\tsnippets: new Set()\n\t\t\t}\n\t\t});\n\t\treturn;\n\t}\n\te.expected_tag(parser.index);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/state/text.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Parser } from '../index.js' */\nimport { decode_character_references } from '../utils/html.js';\n\n/** @param {Parser} parser */\nexport default function text(parser) {\n\tconst start = parser.index;\n\n\twhile (parser.index < parser.template.length && !parser.match('<') && !parser.match('{')) {\n\t\tparser.index++;\n\t}\n\n\tconst data = parser.template.slice(start, parser.index);\n\n\t/** @type {AST.Text} */\n\tparser.append({\n\t\ttype: 'Text',\n\t\tstart,\n\t\tend: parser.index,\n\t\traw: data,\n\t\tdata: decode_character_references(data, false)\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/utils/bracket.js",
    "content": "/** @import { Parser } from '../index.js' */\nimport * as e from '../../../errors.js';\n\n/**\n * @param {number} num\n * @returns {number} Infinity if {@link num} is negative, else {@link num}.\n */\nfunction infinity_if_negative(num) {\n\tif (num < 0) {\n\t\treturn Infinity;\n\t}\n\treturn num;\n}\n\n/**\n * @param {string} string The string to search.\n * @param {number} search_start_index The index to start searching at.\n * @param {\"'\" | '\"' | '`'} string_start_char The character that started this string.\n * @returns {number} The index of the end of this string expression, or `Infinity` if not found.\n */\nfunction find_string_end(string, search_start_index, string_start_char) {\n\tlet string_to_search;\n\tif (string_start_char === '`') {\n\t\tstring_to_search = string;\n\t} else {\n\t\t// we could slice at the search start index, but this way the index remains valid\n\t\tstring_to_search = string.slice(\n\t\t\t0,\n\t\t\tinfinity_if_negative(string.indexOf('\\n', search_start_index))\n\t\t);\n\t}\n\n\treturn find_unescaped_char(string_to_search, search_start_index, string_start_char);\n}\n\n/**\n * @param {string} string The string to search.\n * @param {number} search_start_index The index to start searching at.\n * @returns {number} The index of the end of this regex expression, or `Infinity` if not found.\n */\nfunction find_regex_end(string, search_start_index) {\n\treturn find_unescaped_char(string, search_start_index, '/');\n}\n\n/**\n *\n * @param {string} string The string to search.\n * @param {number} search_start_index The index to begin the search at.\n * @param {string} char The character to search for.\n * @returns {number} The index of the first unescaped instance of {@link char}, or `Infinity` if not found.\n */\nfunction find_unescaped_char(string, search_start_index, char) {\n\tlet i = search_start_index;\n\twhile (true) {\n\t\tconst found_index = string.indexOf(char, i);\n\t\tif (found_index === -1) {\n\t\t\treturn Infinity;\n\t\t}\n\t\tif (count_leading_backslashes(string, found_index - 1) % 2 === 0) {\n\t\t\treturn found_index;\n\t\t}\n\t\ti = found_index + 1;\n\t}\n}\n\n/**\n * Count consecutive leading backslashes before {@link search_start_index}.\n *\n * @example\n * ```js\n * count_leading_backslashes('\\\\\\\\\\\\foo', 2); // 3 (the backslashes have to be escaped in the string literal, there are three in reality)\n * ```\n *\n * @param {string} string The string to search.\n * @param {number} search_start_index The index to begin the search at.\n */\nfunction count_leading_backslashes(string, search_start_index) {\n\tlet i = search_start_index;\n\tlet count = 0;\n\twhile (string[i] === '\\\\') {\n\t\tcount++;\n\t\ti--;\n\t}\n\treturn count;\n}\n\n/**\n * Finds the corresponding closing bracket, ignoring brackets found inside comments, strings, or regex expressions.\n * @param {string} template The string to search.\n * @param {number} index The index to begin the search at.\n * @param {string} open The opening bracket (ex: `'{'` will search for `'}'`).\n * @returns {number | undefined} The index of the closing bracket, or undefined if not found.\n */\nexport function find_matching_bracket(template, index, open) {\n\tconst close = default_brackets[open];\n\tlet brackets = 1;\n\tlet i = index;\n\twhile (brackets > 0 && i < template.length) {\n\t\tconst char = template[i];\n\t\tswitch (char) {\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\tcase '`':\n\t\t\t\ti = find_string_end(template, i + 1, char) + 1;\n\t\t\t\tcontinue;\n\t\t\tcase '/': {\n\t\t\t\tconst next_char = template[i + 1];\n\t\t\t\tif (!next_char) continue;\n\t\t\t\tif (next_char === '/') {\n\t\t\t\t\ti = infinity_if_negative(template.indexOf('\\n', i + 1)) + '\\n'.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (next_char === '*') {\n\t\t\t\t\ti = infinity_if_negative(template.indexOf('*/', i + 1)) + '*/'.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ti = find_regex_end(template, i + 1) + '/'.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst char = template[i];\n\t\t\t\tif (char === open) {\n\t\t\t\t\tbrackets++;\n\t\t\t\t} else if (char === close) {\n\t\t\t\t\tbrackets--;\n\t\t\t\t}\n\t\t\t\tif (brackets === 0) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/** @type {Record<string, string>} */\nconst default_brackets = {\n\t'{': '}',\n\t'(': ')',\n\t'[': ']'\n};\n\nconst default_close = new Set(Object.values(default_brackets));\n\n/**\n * @param {Parser} parser\n * @param {number} start\n * @param {Record<string, string>} brackets\n */\nexport function match_bracket(parser, start, brackets = default_brackets) {\n\tconst close = brackets === default_brackets ? default_close : new Set(Object.values(brackets));\n\tconst bracket_stack = [];\n\n\tlet i = start;\n\n\twhile (i < parser.template.length) {\n\t\tlet char = parser.template[i++];\n\n\t\tif (char === \"'\" || char === '\"' || char === '`') {\n\t\t\ti = match_quote(parser, i, char);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char in brackets) {\n\t\t\tbracket_stack.push(char);\n\t\t} else if (close.has(char)) {\n\t\t\tconst popped = /** @type {string} */ (bracket_stack.pop());\n\t\t\tconst expected = /** @type {string} */ (brackets[popped]);\n\n\t\t\tif (char !== expected) {\n\t\t\t\te.expected_token(i - 1, expected);\n\t\t\t}\n\n\t\t\tif (bracket_stack.length === 0) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t}\n\n\te.unexpected_eof(parser.template.length);\n}\n\n/**\n * @param {Parser} parser\n * @param {number} start\n * @param {string} quote\n */\nfunction match_quote(parser, start, quote) {\n\tlet is_escaped = false;\n\tlet i = start;\n\n\twhile (i < parser.template.length) {\n\t\tconst char = parser.template[i++];\n\n\t\tif (is_escaped) {\n\t\t\tis_escaped = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === quote) {\n\t\t\treturn i;\n\t\t}\n\n\t\tif (char === '\\\\') {\n\t\t\tis_escaped = true;\n\t\t}\n\n\t\tif (quote === '`' && char === '$' && parser.template[i] === '{') {\n\t\t\ti = match_bracket(parser, i);\n\t\t}\n\t}\n\n\te.unterminated_string_constant(start);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/utils/create.js",
    "content": "/** @import { AST } from '#compiler' */\n\n/**\n * @param {any} transparent\n * @returns {AST.Fragment}\n */\nexport function create_fragment(transparent = false) {\n\treturn {\n\t\ttype: 'Fragment',\n\t\tnodes: [],\n\t\tmetadata: {\n\t\t\ttransparent,\n\t\t\tdynamic: false\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/utils/entities.js",
    "content": "// https://html.spec.whatwg.org/entities.json from https://dev.w3.org/html5/html-author/charref\nexport default {\n\t'CounterClockwiseContourIntegral;': 8755,\n\t'ClockwiseContourIntegral;': 8754,\n\t'DoubleLongLeftRightArrow;': 10234,\n\t'NotNestedGreaterGreater;': 10914,\n\t'DiacriticalDoubleAcute;': 733,\n\t'NotSquareSupersetEqual;': 8931,\n\t'CloseCurlyDoubleQuote;': 8221,\n\t'DoubleContourIntegral;': 8751,\n\t'FilledVerySmallSquare;': 9642,\n\t'NegativeVeryThinSpace;': 8203,\n\t'NotPrecedesSlantEqual;': 8928,\n\t'NotRightTriangleEqual;': 8941,\n\t'NotSucceedsSlantEqual;': 8929,\n\t'CapitalDifferentialD;': 8517,\n\t'DoubleLeftRightArrow;': 8660,\n\t'DoubleLongRightArrow;': 10233,\n\t'EmptyVerySmallSquare;': 9643,\n\t'NestedGreaterGreater;': 8811,\n\t'NotDoubleVerticalBar;': 8742,\n\t'NotGreaterSlantEqual;': 10878,\n\t'NotLeftTriangleEqual;': 8940,\n\t'NotSquareSubsetEqual;': 8930,\n\t'OpenCurlyDoubleQuote;': 8220,\n\t'ReverseUpEquilibrium;': 10607,\n\t'DoubleLongLeftArrow;': 10232,\n\t'DownLeftRightVector;': 10576,\n\t'LeftArrowRightArrow;': 8646,\n\t'NegativeMediumSpace;': 8203,\n\t'NotGreaterFullEqual;': 8807,\n\t'NotRightTriangleBar;': 10704,\n\t'RightArrowLeftArrow;': 8644,\n\t'SquareSupersetEqual;': 8850,\n\t'leftrightsquigarrow;': 8621,\n\t'DownRightTeeVector;': 10591,\n\t'DownRightVectorBar;': 10583,\n\t'LongLeftRightArrow;': 10231,\n\t'Longleftrightarrow;': 10234,\n\t'NegativeThickSpace;': 8203,\n\t'NotLeftTriangleBar;': 10703,\n\t'PrecedesSlantEqual;': 8828,\n\t'ReverseEquilibrium;': 8651,\n\t'RightDoubleBracket;': 10215,\n\t'RightDownTeeVector;': 10589,\n\t'RightDownVectorBar;': 10581,\n\t'RightTriangleEqual;': 8885,\n\t'SquareIntersection;': 8851,\n\t'SucceedsSlantEqual;': 8829,\n\t'blacktriangleright;': 9656,\n\t'longleftrightarrow;': 10231,\n\t'DoubleUpDownArrow;': 8661,\n\t'DoubleVerticalBar;': 8741,\n\t'DownLeftTeeVector;': 10590,\n\t'DownLeftVectorBar;': 10582,\n\t'FilledSmallSquare;': 9724,\n\t'GreaterSlantEqual;': 10878,\n\t'LeftDoubleBracket;': 10214,\n\t'LeftDownTeeVector;': 10593,\n\t'LeftDownVectorBar;': 10585,\n\t'LeftTriangleEqual;': 8884,\n\t'NegativeThinSpace;': 8203,\n\t'NotGreaterGreater;': 8811,\n\t'NotLessSlantEqual;': 10877,\n\t'NotNestedLessLess;': 10913,\n\t'NotReverseElement;': 8716,\n\t'NotSquareSuperset;': 8848,\n\t'NotTildeFullEqual;': 8775,\n\t'RightAngleBracket;': 10217,\n\t'RightUpDownVector;': 10575,\n\t'SquareSubsetEqual;': 8849,\n\t'VerticalSeparator;': 10072,\n\t'blacktriangledown;': 9662,\n\t'blacktriangleleft;': 9666,\n\t'leftrightharpoons;': 8651,\n\t'rightleftharpoons;': 8652,\n\t'twoheadrightarrow;': 8608,\n\t'DiacriticalAcute;': 180,\n\t'DiacriticalGrave;': 96,\n\t'DiacriticalTilde;': 732,\n\t'DoubleRightArrow;': 8658,\n\t'DownArrowUpArrow;': 8693,\n\t'EmptySmallSquare;': 9723,\n\t'GreaterEqualLess;': 8923,\n\t'GreaterFullEqual;': 8807,\n\t'LeftAngleBracket;': 10216,\n\t'LeftUpDownVector;': 10577,\n\t'LessEqualGreater;': 8922,\n\t'NonBreakingSpace;': 160,\n\t'NotPrecedesEqual;': 10927,\n\t'NotRightTriangle;': 8939,\n\t'NotSucceedsEqual;': 10928,\n\t'NotSucceedsTilde;': 8831,\n\t'NotSupersetEqual;': 8841,\n\t'RightTriangleBar;': 10704,\n\t'RightUpTeeVector;': 10588,\n\t'RightUpVectorBar;': 10580,\n\t'UnderParenthesis;': 9181,\n\t'UpArrowDownArrow;': 8645,\n\t'circlearrowright;': 8635,\n\t'downharpoonright;': 8642,\n\t'ntrianglerighteq;': 8941,\n\t'rightharpoondown;': 8641,\n\t'rightrightarrows;': 8649,\n\t'twoheadleftarrow;': 8606,\n\t'vartriangleright;': 8883,\n\t'CloseCurlyQuote;': 8217,\n\t'ContourIntegral;': 8750,\n\t'DoubleDownArrow;': 8659,\n\t'DoubleLeftArrow;': 8656,\n\t'DownRightVector;': 8641,\n\t'LeftRightVector;': 10574,\n\t'LeftTriangleBar;': 10703,\n\t'LeftUpTeeVector;': 10592,\n\t'LeftUpVectorBar;': 10584,\n\t'LowerRightArrow;': 8600,\n\t'NotGreaterEqual;': 8817,\n\t'NotGreaterTilde;': 8821,\n\t'NotHumpDownHump;': 8782,\n\t'NotLeftTriangle;': 8938,\n\t'NotSquareSubset;': 8847,\n\t'OverParenthesis;': 9180,\n\t'RightDownVector;': 8642,\n\t'ShortRightArrow;': 8594,\n\t'UpperRightArrow;': 8599,\n\t'bigtriangledown;': 9661,\n\t'circlearrowleft;': 8634,\n\t'curvearrowright;': 8631,\n\t'downharpoonleft;': 8643,\n\t'leftharpoondown;': 8637,\n\t'leftrightarrows;': 8646,\n\t'nLeftrightarrow;': 8654,\n\t'nleftrightarrow;': 8622,\n\t'ntrianglelefteq;': 8940,\n\t'rightleftarrows;': 8644,\n\t'rightsquigarrow;': 8605,\n\t'rightthreetimes;': 8908,\n\t'straightepsilon;': 1013,\n\t'trianglerighteq;': 8885,\n\t'vartriangleleft;': 8882,\n\t'DiacriticalDot;': 729,\n\t'DoubleRightTee;': 8872,\n\t'DownLeftVector;': 8637,\n\t'GreaterGreater;': 10914,\n\t'HorizontalLine;': 9472,\n\t'InvisibleComma;': 8291,\n\t'InvisibleTimes;': 8290,\n\t'LeftDownVector;': 8643,\n\t'LeftRightArrow;': 8596,\n\t'Leftrightarrow;': 8660,\n\t'LessSlantEqual;': 10877,\n\t'LongRightArrow;': 10230,\n\t'Longrightarrow;': 10233,\n\t'LowerLeftArrow;': 8601,\n\t'NestedLessLess;': 8810,\n\t'NotGreaterLess;': 8825,\n\t'NotLessGreater;': 8824,\n\t'NotSubsetEqual;': 8840,\n\t'NotVerticalBar;': 8740,\n\t'OpenCurlyQuote;': 8216,\n\t'ReverseElement;': 8715,\n\t'RightTeeVector;': 10587,\n\t'RightVectorBar;': 10579,\n\t'ShortDownArrow;': 8595,\n\t'ShortLeftArrow;': 8592,\n\t'SquareSuperset;': 8848,\n\t'TildeFullEqual;': 8773,\n\t'UpperLeftArrow;': 8598,\n\t'ZeroWidthSpace;': 8203,\n\t'curvearrowleft;': 8630,\n\t'doublebarwedge;': 8966,\n\t'downdownarrows;': 8650,\n\t'hookrightarrow;': 8618,\n\t'leftleftarrows;': 8647,\n\t'leftrightarrow;': 8596,\n\t'leftthreetimes;': 8907,\n\t'longrightarrow;': 10230,\n\t'looparrowright;': 8620,\n\t'nshortparallel;': 8742,\n\t'ntriangleright;': 8939,\n\t'rightarrowtail;': 8611,\n\t'rightharpoonup;': 8640,\n\t'trianglelefteq;': 8884,\n\t'upharpoonright;': 8638,\n\t'ApplyFunction;': 8289,\n\t'DifferentialD;': 8518,\n\t'DoubleLeftTee;': 10980,\n\t'DoubleUpArrow;': 8657,\n\t'LeftTeeVector;': 10586,\n\t'LeftVectorBar;': 10578,\n\t'LessFullEqual;': 8806,\n\t'LongLeftArrow;': 10229,\n\t'Longleftarrow;': 10232,\n\t'NotEqualTilde;': 8770,\n\t'NotTildeEqual;': 8772,\n\t'NotTildeTilde;': 8777,\n\t'Poincareplane;': 8460,\n\t'PrecedesEqual;': 10927,\n\t'PrecedesTilde;': 8830,\n\t'RightArrowBar;': 8677,\n\t'RightTeeArrow;': 8614,\n\t'RightTriangle;': 8883,\n\t'RightUpVector;': 8638,\n\t'SucceedsEqual;': 10928,\n\t'SucceedsTilde;': 8831,\n\t'SupersetEqual;': 8839,\n\t'UpEquilibrium;': 10606,\n\t'VerticalTilde;': 8768,\n\t'VeryThinSpace;': 8202,\n\t'bigtriangleup;': 9651,\n\t'blacktriangle;': 9652,\n\t'divideontimes;': 8903,\n\t'fallingdotseq;': 8786,\n\t'hookleftarrow;': 8617,\n\t'leftarrowtail;': 8610,\n\t'leftharpoonup;': 8636,\n\t'longleftarrow;': 10229,\n\t'looparrowleft;': 8619,\n\t'measuredangle;': 8737,\n\t'ntriangleleft;': 8938,\n\t'shortparallel;': 8741,\n\t'smallsetminus;': 8726,\n\t'triangleright;': 9657,\n\t'upharpoonleft;': 8639,\n\t'varsubsetneqq;': 10955,\n\t'varsupsetneqq;': 10956,\n\t'DownArrowBar;': 10515,\n\t'DownTeeArrow;': 8615,\n\t'ExponentialE;': 8519,\n\t'GreaterEqual;': 8805,\n\t'GreaterTilde;': 8819,\n\t'HilbertSpace;': 8459,\n\t'HumpDownHump;': 8782,\n\t'Intersection;': 8898,\n\t'LeftArrowBar;': 8676,\n\t'LeftTeeArrow;': 8612,\n\t'LeftTriangle;': 8882,\n\t'LeftUpVector;': 8639,\n\t'NotCongruent;': 8802,\n\t'NotHumpEqual;': 8783,\n\t'NotLessEqual;': 8816,\n\t'NotLessTilde;': 8820,\n\t'Proportional;': 8733,\n\t'RightCeiling;': 8969,\n\t'RoundImplies;': 10608,\n\t'ShortUpArrow;': 8593,\n\t'SquareSubset;': 8847,\n\t'UnderBracket;': 9141,\n\t'VerticalLine;': 124,\n\t'blacklozenge;': 10731,\n\t'exponentiale;': 8519,\n\t'risingdotseq;': 8787,\n\t'triangledown;': 9663,\n\t'triangleleft;': 9667,\n\t'varsubsetneq;': 8842,\n\t'varsupsetneq;': 8843,\n\t'CircleMinus;': 8854,\n\t'CircleTimes;': 8855,\n\t'Equilibrium;': 8652,\n\t'GreaterLess;': 8823,\n\t'LeftCeiling;': 8968,\n\t'LessGreater;': 8822,\n\t'MediumSpace;': 8287,\n\t'NotLessLess;': 8810,\n\t'NotPrecedes;': 8832,\n\t'NotSucceeds;': 8833,\n\t'NotSuperset;': 8835,\n\t'OverBracket;': 9140,\n\t'RightVector;': 8640,\n\t'Rrightarrow;': 8667,\n\t'RuleDelayed;': 10740,\n\t'SmallCircle;': 8728,\n\t'SquareUnion;': 8852,\n\t'SubsetEqual;': 8838,\n\t'UpDownArrow;': 8597,\n\t'Updownarrow;': 8661,\n\t'VerticalBar;': 8739,\n\t'backepsilon;': 1014,\n\t'blacksquare;': 9642,\n\t'circledcirc;': 8858,\n\t'circleddash;': 8861,\n\t'curlyeqprec;': 8926,\n\t'curlyeqsucc;': 8927,\n\t'diamondsuit;': 9830,\n\t'eqslantless;': 10901,\n\t'expectation;': 8496,\n\t'nRightarrow;': 8655,\n\t'nrightarrow;': 8603,\n\t'preccurlyeq;': 8828,\n\t'precnapprox;': 10937,\n\t'quaternions;': 8461,\n\t'straightphi;': 981,\n\t'succcurlyeq;': 8829,\n\t'succnapprox;': 10938,\n\t'thickapprox;': 8776,\n\t'updownarrow;': 8597,\n\t'Bernoullis;': 8492,\n\t'CirclePlus;': 8853,\n\t'EqualTilde;': 8770,\n\t'Fouriertrf;': 8497,\n\t'ImaginaryI;': 8520,\n\t'Laplacetrf;': 8466,\n\t'LeftVector;': 8636,\n\t'Lleftarrow;': 8666,\n\t'NotElement;': 8713,\n\t'NotGreater;': 8815,\n\t'Proportion;': 8759,\n\t'RightArrow;': 8594,\n\t'RightFloor;': 8971,\n\t'Rightarrow;': 8658,\n\t'ThickSpace;': 8287,\n\t'TildeEqual;': 8771,\n\t'TildeTilde;': 8776,\n\t'UnderBrace;': 9183,\n\t'UpArrowBar;': 10514,\n\t'UpTeeArrow;': 8613,\n\t'circledast;': 8859,\n\t'complement;': 8705,\n\t'curlywedge;': 8911,\n\t'eqslantgtr;': 10902,\n\t'gtreqqless;': 10892,\n\t'lessapprox;': 10885,\n\t'lesseqqgtr;': 10891,\n\t'lmoustache;': 9136,\n\t'longmapsto;': 10236,\n\t'mapstodown;': 8615,\n\t'mapstoleft;': 8612,\n\t'nLeftarrow;': 8653,\n\t'nleftarrow;': 8602,\n\t'nsubseteqq;': 10949,\n\t'nsupseteqq;': 10950,\n\t'precapprox;': 10935,\n\t'rightarrow;': 8594,\n\t'rmoustache;': 9137,\n\t'sqsubseteq;': 8849,\n\t'sqsupseteq;': 8850,\n\t'subsetneqq;': 10955,\n\t'succapprox;': 10936,\n\t'supsetneqq;': 10956,\n\t'upuparrows;': 8648,\n\t'varepsilon;': 1013,\n\t'varnothing;': 8709,\n\t'Backslash;': 8726,\n\t'CenterDot;': 183,\n\t'CircleDot;': 8857,\n\t'Congruent;': 8801,\n\t'Coproduct;': 8720,\n\t'DoubleDot;': 168,\n\t'DownArrow;': 8595,\n\t'DownBreve;': 785,\n\t'Downarrow;': 8659,\n\t'HumpEqual;': 8783,\n\t'LeftArrow;': 8592,\n\t'LeftFloor;': 8970,\n\t'Leftarrow;': 8656,\n\t'LessTilde;': 8818,\n\t'Mellintrf;': 8499,\n\t'MinusPlus;': 8723,\n\t'NotCupCap;': 8813,\n\t'NotExists;': 8708,\n\t'NotSubset;': 8834,\n\t'OverBrace;': 9182,\n\t'PlusMinus;': 177,\n\t'Therefore;': 8756,\n\t'ThinSpace;': 8201,\n\t'TripleDot;': 8411,\n\t'UnionPlus;': 8846,\n\t'backprime;': 8245,\n\t'backsimeq;': 8909,\n\t'bigotimes;': 10754,\n\t'centerdot;': 183,\n\t'checkmark;': 10003,\n\t'complexes;': 8450,\n\t'dotsquare;': 8865,\n\t'downarrow;': 8595,\n\t'gtrapprox;': 10886,\n\t'gtreqless;': 8923,\n\t'gvertneqq;': 8809,\n\t'heartsuit;': 9829,\n\t'leftarrow;': 8592,\n\t'lesseqgtr;': 8922,\n\t'lvertneqq;': 8808,\n\t'ngeqslant;': 10878,\n\t'nleqslant;': 10877,\n\t'nparallel;': 8742,\n\t'nshortmid;': 8740,\n\t'nsubseteq;': 8840,\n\t'nsupseteq;': 8841,\n\t'pitchfork;': 8916,\n\t'rationals;': 8474,\n\t'spadesuit;': 9824,\n\t'subseteqq;': 10949,\n\t'subsetneq;': 8842,\n\t'supseteqq;': 10950,\n\t'supsetneq;': 8843,\n\t'therefore;': 8756,\n\t'triangleq;': 8796,\n\t'varpropto;': 8733,\n\t'DDotrahd;': 10513,\n\t'DotEqual;': 8784,\n\t'Integral;': 8747,\n\t'LessLess;': 10913,\n\t'NotEqual;': 8800,\n\t'NotTilde;': 8769,\n\t'PartialD;': 8706,\n\t'Precedes;': 8826,\n\t'RightTee;': 8866,\n\t'Succeeds;': 8827,\n\t'SuchThat;': 8715,\n\t'Superset;': 8835,\n\t'Uarrocir;': 10569,\n\t'UnderBar;': 95,\n\t'andslope;': 10840,\n\t'angmsdaa;': 10664,\n\t'angmsdab;': 10665,\n\t'angmsdac;': 10666,\n\t'angmsdad;': 10667,\n\t'angmsdae;': 10668,\n\t'angmsdaf;': 10669,\n\t'angmsdag;': 10670,\n\t'angmsdah;': 10671,\n\t'angrtvbd;': 10653,\n\t'approxeq;': 8778,\n\t'awconint;': 8755,\n\t'backcong;': 8780,\n\t'barwedge;': 8965,\n\t'bbrktbrk;': 9142,\n\t'bigoplus;': 10753,\n\t'bigsqcup;': 10758,\n\t'biguplus;': 10756,\n\t'bigwedge;': 8896,\n\t'boxminus;': 8863,\n\t'boxtimes;': 8864,\n\t'bsolhsub;': 10184,\n\t'capbrcup;': 10825,\n\t'circledR;': 174,\n\t'circledS;': 9416,\n\t'cirfnint;': 10768,\n\t'clubsuit;': 9827,\n\t'cupbrcap;': 10824,\n\t'curlyvee;': 8910,\n\t'cwconint;': 8754,\n\t'doteqdot;': 8785,\n\t'dotminus;': 8760,\n\t'drbkarow;': 10512,\n\t'dzigrarr;': 10239,\n\t'elinters;': 9191,\n\t'emptyset;': 8709,\n\t'eqvparsl;': 10725,\n\t'fpartint;': 10765,\n\t'geqslant;': 10878,\n\t'gesdotol;': 10884,\n\t'gnapprox;': 10890,\n\t'hksearow;': 10533,\n\t'hkswarow;': 10534,\n\t'imagline;': 8464,\n\t'imagpart;': 8465,\n\t'infintie;': 10717,\n\t'integers;': 8484,\n\t'intercal;': 8890,\n\t'intlarhk;': 10775,\n\t'laemptyv;': 10676,\n\t'ldrushar;': 10571,\n\t'leqslant;': 10877,\n\t'lesdotor;': 10883,\n\t'llcorner;': 8990,\n\t'lnapprox;': 10889,\n\t'lrcorner;': 8991,\n\t'lurdshar;': 10570,\n\t'mapstoup;': 8613,\n\t'multimap;': 8888,\n\t'naturals;': 8469,\n\t'ncongdot;': 10861,\n\t'notindot;': 8949,\n\t'otimesas;': 10806,\n\t'parallel;': 8741,\n\t'plusacir;': 10787,\n\t'pointint;': 10773,\n\t'precneqq;': 10933,\n\t'precnsim;': 8936,\n\t'profalar;': 9006,\n\t'profline;': 8978,\n\t'profsurf;': 8979,\n\t'raemptyv;': 10675,\n\t'realpart;': 8476,\n\t'rppolint;': 10770,\n\t'rtriltri;': 10702,\n\t'scpolint;': 10771,\n\t'setminus;': 8726,\n\t'shortmid;': 8739,\n\t'smeparsl;': 10724,\n\t'sqsubset;': 8847,\n\t'sqsupset;': 8848,\n\t'subseteq;': 8838,\n\t'succneqq;': 10934,\n\t'succnsim;': 8937,\n\t'supseteq;': 8839,\n\t'thetasym;': 977,\n\t'thicksim;': 8764,\n\t'timesbar;': 10801,\n\t'triangle;': 9653,\n\t'triminus;': 10810,\n\t'trpezium;': 9186,\n\t'ulcorner;': 8988,\n\t'urcorner;': 8989,\n\t'varkappa;': 1008,\n\t'varsigma;': 962,\n\t'vartheta;': 977,\n\t'Because;': 8757,\n\t'Cayleys;': 8493,\n\t'Cconint;': 8752,\n\t'Cedilla;': 184,\n\t'Diamond;': 8900,\n\t'DownTee;': 8868,\n\t'Element;': 8712,\n\t'Epsilon;': 917,\n\t'Implies;': 8658,\n\t'LeftTee;': 8867,\n\t'NewLine;': 10,\n\t'NoBreak;': 8288,\n\t'NotLess;': 8814,\n\t'Omicron;': 927,\n\t'OverBar;': 8254,\n\t'Product;': 8719,\n\t'UpArrow;': 8593,\n\t'Uparrow;': 8657,\n\t'Upsilon;': 933,\n\t'alefsym;': 8501,\n\t'angrtvb;': 8894,\n\t'angzarr;': 9084,\n\t'asympeq;': 8781,\n\t'backsim;': 8765,\n\t'because;': 8757,\n\t'bemptyv;': 10672,\n\t'between;': 8812,\n\t'bigcirc;': 9711,\n\t'bigodot;': 10752,\n\t'bigstar;': 9733,\n\t'bnequiv;': 8801,\n\t'boxplus;': 8862,\n\t'ccupssm;': 10832,\n\t'cemptyv;': 10674,\n\t'cirscir;': 10690,\n\t'coloneq;': 8788,\n\t'congdot;': 10861,\n\t'cudarrl;': 10552,\n\t'cudarrr;': 10549,\n\t'cularrp;': 10557,\n\t'curarrm;': 10556,\n\t'dbkarow;': 10511,\n\t'ddagger;': 8225,\n\t'ddotseq;': 10871,\n\t'demptyv;': 10673,\n\t'diamond;': 8900,\n\t'digamma;': 989,\n\t'dotplus;': 8724,\n\t'dwangle;': 10662,\n\t'epsilon;': 949,\n\t'eqcolon;': 8789,\n\t'equivDD;': 10872,\n\t'gesdoto;': 10882,\n\t'gtquest;': 10876,\n\t'gtrless;': 8823,\n\t'harrcir;': 10568,\n\t'intprod;': 10812,\n\t'isindot;': 8949,\n\t'larrbfs;': 10527,\n\t'larrsim;': 10611,\n\t'lbrksld;': 10639,\n\t'lbrkslu;': 10637,\n\t'ldrdhar;': 10599,\n\t'lesdoto;': 10881,\n\t'lessdot;': 8918,\n\t'lessgtr;': 8822,\n\t'lesssim;': 8818,\n\t'lotimes;': 10804,\n\t'lozenge;': 9674,\n\t'ltquest;': 10875,\n\t'luruhar;': 10598,\n\t'maltese;': 10016,\n\t'minusdu;': 10794,\n\t'napprox;': 8777,\n\t'natural;': 9838,\n\t'nearrow;': 8599,\n\t'nexists;': 8708,\n\t'notinva;': 8713,\n\t'notinvb;': 8951,\n\t'notinvc;': 8950,\n\t'notniva;': 8716,\n\t'notnivb;': 8958,\n\t'notnivc;': 8957,\n\t'npolint;': 10772,\n\t'npreceq;': 10927,\n\t'nsqsube;': 8930,\n\t'nsqsupe;': 8931,\n\t'nsubset;': 8834,\n\t'nsucceq;': 10928,\n\t'nsupset;': 8835,\n\t'nvinfin;': 10718,\n\t'nvltrie;': 8884,\n\t'nvrtrie;': 8885,\n\t'nwarrow;': 8598,\n\t'olcross;': 10683,\n\t'omicron;': 959,\n\t'orderof;': 8500,\n\t'orslope;': 10839,\n\t'pertenk;': 8241,\n\t'planckh;': 8462,\n\t'pluscir;': 10786,\n\t'plussim;': 10790,\n\t'plustwo;': 10791,\n\t'precsim;': 8830,\n\t'quatint;': 10774,\n\t'questeq;': 8799,\n\t'rarrbfs;': 10528,\n\t'rarrsim;': 10612,\n\t'rbrksld;': 10638,\n\t'rbrkslu;': 10640,\n\t'rdldhar;': 10601,\n\t'realine;': 8475,\n\t'rotimes;': 10805,\n\t'ruluhar;': 10600,\n\t'searrow;': 8600,\n\t'simplus;': 10788,\n\t'simrarr;': 10610,\n\t'subedot;': 10947,\n\t'submult;': 10945,\n\t'subplus;': 10943,\n\t'subrarr;': 10617,\n\t'succsim;': 8831,\n\t'supdsub;': 10968,\n\t'supedot;': 10948,\n\t'suphsol;': 10185,\n\t'suphsub;': 10967,\n\t'suplarr;': 10619,\n\t'supmult;': 10946,\n\t'supplus;': 10944,\n\t'swarrow;': 8601,\n\t'topfork;': 10970,\n\t'triplus;': 10809,\n\t'tritime;': 10811,\n\t'uparrow;': 8593,\n\t'upsilon;': 965,\n\t'uwangle;': 10663,\n\t'vzigzag;': 10650,\n\t'zigrarr;': 8669,\n\t'Aacute;': 193,\n\t'Abreve;': 258,\n\t'Agrave;': 192,\n\t'Assign;': 8788,\n\t'Atilde;': 195,\n\t'Barwed;': 8966,\n\t'Bumpeq;': 8782,\n\t'Cacute;': 262,\n\t'Ccaron;': 268,\n\t'Ccedil;': 199,\n\t'Colone;': 10868,\n\t'Conint;': 8751,\n\t'CupCap;': 8781,\n\t'Dagger;': 8225,\n\t'Dcaron;': 270,\n\t'DotDot;': 8412,\n\t'Dstrok;': 272,\n\t'Eacute;': 201,\n\t'Ecaron;': 282,\n\t'Egrave;': 200,\n\t'Exists;': 8707,\n\t'ForAll;': 8704,\n\t'Gammad;': 988,\n\t'Gbreve;': 286,\n\t'Gcedil;': 290,\n\t'HARDcy;': 1066,\n\t'Hstrok;': 294,\n\t'Iacute;': 205,\n\t'Igrave;': 204,\n\t'Itilde;': 296,\n\t'Jsercy;': 1032,\n\t'Kcedil;': 310,\n\t'Lacute;': 313,\n\t'Lambda;': 923,\n\t'Lcaron;': 317,\n\t'Lcedil;': 315,\n\t'Lmidot;': 319,\n\t'Lstrok;': 321,\n\t'Nacute;': 323,\n\t'Ncaron;': 327,\n\t'Ncedil;': 325,\n\t'Ntilde;': 209,\n\t'Oacute;': 211,\n\t'Odblac;': 336,\n\t'Ograve;': 210,\n\t'Oslash;': 216,\n\t'Otilde;': 213,\n\t'Otimes;': 10807,\n\t'Racute;': 340,\n\t'Rarrtl;': 10518,\n\t'Rcaron;': 344,\n\t'Rcedil;': 342,\n\t'SHCHcy;': 1065,\n\t'SOFTcy;': 1068,\n\t'Sacute;': 346,\n\t'Scaron;': 352,\n\t'Scedil;': 350,\n\t'Square;': 9633,\n\t'Subset;': 8912,\n\t'Supset;': 8913,\n\t'Tcaron;': 356,\n\t'Tcedil;': 354,\n\t'Tstrok;': 358,\n\t'Uacute;': 218,\n\t'Ubreve;': 364,\n\t'Udblac;': 368,\n\t'Ugrave;': 217,\n\t'Utilde;': 360,\n\t'Vdashl;': 10982,\n\t'Verbar;': 8214,\n\t'Vvdash;': 8874,\n\t'Yacute;': 221,\n\t'Zacute;': 377,\n\t'Zcaron;': 381,\n\t'aacute;': 225,\n\t'abreve;': 259,\n\t'agrave;': 224,\n\t'andand;': 10837,\n\t'angmsd;': 8737,\n\t'angsph;': 8738,\n\t'apacir;': 10863,\n\t'approx;': 8776,\n\t'atilde;': 227,\n\t'barvee;': 8893,\n\t'barwed;': 8965,\n\t'becaus;': 8757,\n\t'bernou;': 8492,\n\t'bigcap;': 8898,\n\t'bigcup;': 8899,\n\t'bigvee;': 8897,\n\t'bkarow;': 10509,\n\t'bottom;': 8869,\n\t'bowtie;': 8904,\n\t'boxbox;': 10697,\n\t'bprime;': 8245,\n\t'brvbar;': 166,\n\t'bullet;': 8226,\n\t'bumpeq;': 8783,\n\t'cacute;': 263,\n\t'capand;': 10820,\n\t'capcap;': 10827,\n\t'capcup;': 10823,\n\t'capdot;': 10816,\n\t'ccaron;': 269,\n\t'ccedil;': 231,\n\t'circeq;': 8791,\n\t'cirmid;': 10991,\n\t'colone;': 8788,\n\t'commat;': 64,\n\t'compfn;': 8728,\n\t'conint;': 8750,\n\t'coprod;': 8720,\n\t'copysr;': 8471,\n\t'cularr;': 8630,\n\t'cupcap;': 10822,\n\t'cupcup;': 10826,\n\t'cupdot;': 8845,\n\t'curarr;': 8631,\n\t'curren;': 164,\n\t'cylcty;': 9005,\n\t'dagger;': 8224,\n\t'daleth;': 8504,\n\t'dcaron;': 271,\n\t'dfisht;': 10623,\n\t'divide;': 247,\n\t'divonx;': 8903,\n\t'dlcorn;': 8990,\n\t'dlcrop;': 8973,\n\t'dollar;': 36,\n\t'drcorn;': 8991,\n\t'drcrop;': 8972,\n\t'dstrok;': 273,\n\t'eacute;': 233,\n\t'easter;': 10862,\n\t'ecaron;': 283,\n\t'ecolon;': 8789,\n\t'egrave;': 232,\n\t'egsdot;': 10904,\n\t'elsdot;': 10903,\n\t'emptyv;': 8709,\n\t'emsp13;': 8196,\n\t'emsp14;': 8197,\n\t'eparsl;': 10723,\n\t'eqcirc;': 8790,\n\t'equals;': 61,\n\t'equest;': 8799,\n\t'female;': 9792,\n\t'ffilig;': 64259,\n\t'ffllig;': 64260,\n\t'forall;': 8704,\n\t'frac12;': 189,\n\t'frac13;': 8531,\n\t'frac14;': 188,\n\t'frac15;': 8533,\n\t'frac16;': 8537,\n\t'frac18;': 8539,\n\t'frac23;': 8532,\n\t'frac25;': 8534,\n\t'frac34;': 190,\n\t'frac35;': 8535,\n\t'frac38;': 8540,\n\t'frac45;': 8536,\n\t'frac56;': 8538,\n\t'frac58;': 8541,\n\t'frac78;': 8542,\n\t'gacute;': 501,\n\t'gammad;': 989,\n\t'gbreve;': 287,\n\t'gesdot;': 10880,\n\t'gesles;': 10900,\n\t'gtlPar;': 10645,\n\t'gtrarr;': 10616,\n\t'gtrdot;': 8919,\n\t'gtrsim;': 8819,\n\t'hairsp;': 8202,\n\t'hamilt;': 8459,\n\t'hardcy;': 1098,\n\t'hearts;': 9829,\n\t'hellip;': 8230,\n\t'hercon;': 8889,\n\t'homtht;': 8763,\n\t'horbar;': 8213,\n\t'hslash;': 8463,\n\t'hstrok;': 295,\n\t'hybull;': 8259,\n\t'hyphen;': 8208,\n\t'iacute;': 237,\n\t'igrave;': 236,\n\t'iiiint;': 10764,\n\t'iinfin;': 10716,\n\t'incare;': 8453,\n\t'inodot;': 305,\n\t'intcal;': 8890,\n\t'iquest;': 191,\n\t'isinsv;': 8947,\n\t'itilde;': 297,\n\t'jsercy;': 1112,\n\t'kappav;': 1008,\n\t'kcedil;': 311,\n\t'kgreen;': 312,\n\t'lAtail;': 10523,\n\t'lacute;': 314,\n\t'lagran;': 8466,\n\t'lambda;': 955,\n\t'langle;': 10216,\n\t'larrfs;': 10525,\n\t'larrhk;': 8617,\n\t'larrlp;': 8619,\n\t'larrpl;': 10553,\n\t'larrtl;': 8610,\n\t'latail;': 10521,\n\t'lbrace;': 123,\n\t'lbrack;': 91,\n\t'lcaron;': 318,\n\t'lcedil;': 316,\n\t'ldquor;': 8222,\n\t'lesdot;': 10879,\n\t'lesges;': 10899,\n\t'lfisht;': 10620,\n\t'lfloor;': 8970,\n\t'lharul;': 10602,\n\t'llhard;': 10603,\n\t'lmidot;': 320,\n\t'lmoust;': 9136,\n\t'loplus;': 10797,\n\t'lowast;': 8727,\n\t'lowbar;': 95,\n\t'lparlt;': 10643,\n\t'lrhard;': 10605,\n\t'lsaquo;': 8249,\n\t'lsquor;': 8218,\n\t'lstrok;': 322,\n\t'lthree;': 8907,\n\t'ltimes;': 8905,\n\t'ltlarr;': 10614,\n\t'ltrPar;': 10646,\n\t'mapsto;': 8614,\n\t'marker;': 9646,\n\t'mcomma;': 10793,\n\t'midast;': 42,\n\t'midcir;': 10992,\n\t'middot;': 183,\n\t'minusb;': 8863,\n\t'minusd;': 8760,\n\t'mnplus;': 8723,\n\t'models;': 8871,\n\t'mstpos;': 8766,\n\t'nVDash;': 8879,\n\t'nVdash;': 8878,\n\t'nacute;': 324,\n\t'nbumpe;': 8783,\n\t'ncaron;': 328,\n\t'ncedil;': 326,\n\t'nearhk;': 10532,\n\t'nequiv;': 8802,\n\t'nesear;': 10536,\n\t'nexist;': 8708,\n\t'nltrie;': 8940,\n\t'notinE;': 8953,\n\t'nparsl;': 11005,\n\t'nprcue;': 8928,\n\t'nrarrc;': 10547,\n\t'nrarrw;': 8605,\n\t'nrtrie;': 8941,\n\t'nsccue;': 8929,\n\t'nsimeq;': 8772,\n\t'ntilde;': 241,\n\t'numero;': 8470,\n\t'nvDash;': 8877,\n\t'nvHarr;': 10500,\n\t'nvdash;': 8876,\n\t'nvlArr;': 10498,\n\t'nvrArr;': 10499,\n\t'nwarhk;': 10531,\n\t'nwnear;': 10535,\n\t'oacute;': 243,\n\t'odblac;': 337,\n\t'odsold;': 10684,\n\t'ograve;': 242,\n\t'ominus;': 8854,\n\t'origof;': 8886,\n\t'oslash;': 248,\n\t'otilde;': 245,\n\t'otimes;': 8855,\n\t'parsim;': 10995,\n\t'percnt;': 37,\n\t'period;': 46,\n\t'permil;': 8240,\n\t'phmmat;': 8499,\n\t'planck;': 8463,\n\t'plankv;': 8463,\n\t'plusdo;': 8724,\n\t'plusdu;': 10789,\n\t'plusmn;': 177,\n\t'preceq;': 10927,\n\t'primes;': 8473,\n\t'prnsim;': 8936,\n\t'propto;': 8733,\n\t'prurel;': 8880,\n\t'puncsp;': 8200,\n\t'qprime;': 8279,\n\t'rAtail;': 10524,\n\t'racute;': 341,\n\t'rangle;': 10217,\n\t'rarrap;': 10613,\n\t'rarrfs;': 10526,\n\t'rarrhk;': 8618,\n\t'rarrlp;': 8620,\n\t'rarrpl;': 10565,\n\t'rarrtl;': 8611,\n\t'ratail;': 10522,\n\t'rbrace;': 125,\n\t'rbrack;': 93,\n\t'rcaron;': 345,\n\t'rcedil;': 343,\n\t'rdquor;': 8221,\n\t'rfisht;': 10621,\n\t'rfloor;': 8971,\n\t'rharul;': 10604,\n\t'rmoust;': 9137,\n\t'roplus;': 10798,\n\t'rpargt;': 10644,\n\t'rsaquo;': 8250,\n\t'rsquor;': 8217,\n\t'rthree;': 8908,\n\t'rtimes;': 8906,\n\t'sacute;': 347,\n\t'scaron;': 353,\n\t'scedil;': 351,\n\t'scnsim;': 8937,\n\t'searhk;': 10533,\n\t'seswar;': 10537,\n\t'sfrown;': 8994,\n\t'shchcy;': 1097,\n\t'sigmaf;': 962,\n\t'sigmav;': 962,\n\t'simdot;': 10858,\n\t'smashp;': 10803,\n\t'softcy;': 1100,\n\t'solbar;': 9023,\n\t'spades;': 9824,\n\t'sqcaps;': 8851,\n\t'sqcups;': 8852,\n\t'sqsube;': 8849,\n\t'sqsupe;': 8850,\n\t'square;': 9633,\n\t'squarf;': 9642,\n\t'ssetmn;': 8726,\n\t'ssmile;': 8995,\n\t'sstarf;': 8902,\n\t'subdot;': 10941,\n\t'subset;': 8834,\n\t'subsim;': 10951,\n\t'subsub;': 10965,\n\t'subsup;': 10963,\n\t'succeq;': 10928,\n\t'supdot;': 10942,\n\t'supset;': 8835,\n\t'supsim;': 10952,\n\t'supsub;': 10964,\n\t'supsup;': 10966,\n\t'swarhk;': 10534,\n\t'swnwar;': 10538,\n\t'target;': 8982,\n\t'tcaron;': 357,\n\t'tcedil;': 355,\n\t'telrec;': 8981,\n\t'there4;': 8756,\n\t'thetav;': 977,\n\t'thinsp;': 8201,\n\t'thksim;': 8764,\n\t'timesb;': 8864,\n\t'timesd;': 10800,\n\t'topbot;': 9014,\n\t'topcir;': 10993,\n\t'tprime;': 8244,\n\t'tridot;': 9708,\n\t'tstrok;': 359,\n\t'uacute;': 250,\n\t'ubreve;': 365,\n\t'udblac;': 369,\n\t'ufisht;': 10622,\n\t'ugrave;': 249,\n\t'ulcorn;': 8988,\n\t'ulcrop;': 8975,\n\t'urcorn;': 8989,\n\t'urcrop;': 8974,\n\t'utilde;': 361,\n\t'vangrt;': 10652,\n\t'varphi;': 981,\n\t'varrho;': 1009,\n\t'veebar;': 8891,\n\t'vellip;': 8942,\n\t'verbar;': 124,\n\t'vsubnE;': 10955,\n\t'vsubne;': 8842,\n\t'vsupnE;': 10956,\n\t'vsupne;': 8843,\n\t'wedbar;': 10847,\n\t'wedgeq;': 8793,\n\t'weierp;': 8472,\n\t'wreath;': 8768,\n\t'xoplus;': 10753,\n\t'xotime;': 10754,\n\t'xsqcup;': 10758,\n\t'xuplus;': 10756,\n\t'xwedge;': 8896,\n\t'yacute;': 253,\n\t'zacute;': 378,\n\t'zcaron;': 382,\n\t'zeetrf;': 8488,\n\t'AElig;': 198,\n\tAacute: 193,\n\t'Acirc;': 194,\n\tAgrave: 192,\n\t'Alpha;': 913,\n\t'Amacr;': 256,\n\t'Aogon;': 260,\n\t'Aring;': 197,\n\tAtilde: 195,\n\t'Breve;': 728,\n\tCcedil: 199,\n\t'Ccirc;': 264,\n\t'Colon;': 8759,\n\t'Cross;': 10799,\n\t'Dashv;': 10980,\n\t'Delta;': 916,\n\tEacute: 201,\n\t'Ecirc;': 202,\n\tEgrave: 200,\n\t'Emacr;': 274,\n\t'Eogon;': 280,\n\t'Equal;': 10869,\n\t'Gamma;': 915,\n\t'Gcirc;': 284,\n\t'Hacek;': 711,\n\t'Hcirc;': 292,\n\t'IJlig;': 306,\n\tIacute: 205,\n\t'Icirc;': 206,\n\tIgrave: 204,\n\t'Imacr;': 298,\n\t'Iogon;': 302,\n\t'Iukcy;': 1030,\n\t'Jcirc;': 308,\n\t'Jukcy;': 1028,\n\t'Kappa;': 922,\n\tNtilde: 209,\n\t'OElig;': 338,\n\tOacute: 211,\n\t'Ocirc;': 212,\n\tOgrave: 210,\n\t'Omacr;': 332,\n\t'Omega;': 937,\n\tOslash: 216,\n\tOtilde: 213,\n\t'Prime;': 8243,\n\t'RBarr;': 10512,\n\t'Scirc;': 348,\n\t'Sigma;': 931,\n\t'THORN;': 222,\n\t'TRADE;': 8482,\n\t'TSHcy;': 1035,\n\t'Theta;': 920,\n\t'Tilde;': 8764,\n\tUacute: 218,\n\t'Ubrcy;': 1038,\n\t'Ucirc;': 219,\n\tUgrave: 217,\n\t'Umacr;': 362,\n\t'Union;': 8899,\n\t'Uogon;': 370,\n\t'UpTee;': 8869,\n\t'Uring;': 366,\n\t'VDash;': 8875,\n\t'Vdash;': 8873,\n\t'Wcirc;': 372,\n\t'Wedge;': 8896,\n\tYacute: 221,\n\t'Ycirc;': 374,\n\taacute: 225,\n\t'acirc;': 226,\n\t'acute;': 180,\n\t'aelig;': 230,\n\tagrave: 224,\n\t'aleph;': 8501,\n\t'alpha;': 945,\n\t'amacr;': 257,\n\t'amalg;': 10815,\n\t'angle;': 8736,\n\t'angrt;': 8735,\n\t'angst;': 197,\n\t'aogon;': 261,\n\t'aring;': 229,\n\t'asymp;': 8776,\n\tatilde: 227,\n\t'awint;': 10769,\n\t'bcong;': 8780,\n\t'bdquo;': 8222,\n\t'bepsi;': 1014,\n\t'blank;': 9251,\n\t'blk12;': 9618,\n\t'blk14;': 9617,\n\t'blk34;': 9619,\n\t'block;': 9608,\n\t'boxDL;': 9559,\n\t'boxDR;': 9556,\n\t'boxDl;': 9558,\n\t'boxDr;': 9555,\n\t'boxHD;': 9574,\n\t'boxHU;': 9577,\n\t'boxHd;': 9572,\n\t'boxHu;': 9575,\n\t'boxUL;': 9565,\n\t'boxUR;': 9562,\n\t'boxUl;': 9564,\n\t'boxUr;': 9561,\n\t'boxVH;': 9580,\n\t'boxVL;': 9571,\n\t'boxVR;': 9568,\n\t'boxVh;': 9579,\n\t'boxVl;': 9570,\n\t'boxVr;': 9567,\n\t'boxdL;': 9557,\n\t'boxdR;': 9554,\n\t'boxdl;': 9488,\n\t'boxdr;': 9484,\n\t'boxhD;': 9573,\n\t'boxhU;': 9576,\n\t'boxhd;': 9516,\n\t'boxhu;': 9524,\n\t'boxuL;': 9563,\n\t'boxuR;': 9560,\n\t'boxul;': 9496,\n\t'boxur;': 9492,\n\t'boxvH;': 9578,\n\t'boxvL;': 9569,\n\t'boxvR;': 9566,\n\t'boxvh;': 9532,\n\t'boxvl;': 9508,\n\t'boxvr;': 9500,\n\t'breve;': 728,\n\tbrvbar: 166,\n\t'bsemi;': 8271,\n\t'bsime;': 8909,\n\t'bsolb;': 10693,\n\t'bumpE;': 10926,\n\t'bumpe;': 8783,\n\t'caret;': 8257,\n\t'caron;': 711,\n\t'ccaps;': 10829,\n\tccedil: 231,\n\t'ccirc;': 265,\n\t'ccups;': 10828,\n\t'cedil;': 184,\n\t'check;': 10003,\n\t'clubs;': 9827,\n\t'colon;': 58,\n\t'comma;': 44,\n\t'crarr;': 8629,\n\t'cross;': 10007,\n\t'csube;': 10961,\n\t'csupe;': 10962,\n\t'ctdot;': 8943,\n\t'cuepr;': 8926,\n\t'cuesc;': 8927,\n\t'cupor;': 10821,\n\tcurren: 164,\n\t'cuvee;': 8910,\n\t'cuwed;': 8911,\n\t'cwint;': 8753,\n\t'dashv;': 8867,\n\t'dblac;': 733,\n\t'ddarr;': 8650,\n\t'delta;': 948,\n\t'dharl;': 8643,\n\t'dharr;': 8642,\n\t'diams;': 9830,\n\t'disin;': 8946,\n\tdivide: 247,\n\t'doteq;': 8784,\n\t'dtdot;': 8945,\n\t'dtrif;': 9662,\n\t'duarr;': 8693,\n\t'duhar;': 10607,\n\t'eDDot;': 10871,\n\teacute: 233,\n\t'ecirc;': 234,\n\t'efDot;': 8786,\n\tegrave: 232,\n\t'emacr;': 275,\n\t'empty;': 8709,\n\t'eogon;': 281,\n\t'eplus;': 10865,\n\t'epsiv;': 1013,\n\t'eqsim;': 8770,\n\t'equiv;': 8801,\n\t'erDot;': 8787,\n\t'erarr;': 10609,\n\t'esdot;': 8784,\n\t'exist;': 8707,\n\t'fflig;': 64256,\n\t'filig;': 64257,\n\t'fjlig;': 102,\n\t'fllig;': 64258,\n\t'fltns;': 9649,\n\t'forkv;': 10969,\n\tfrac12: 189,\n\tfrac14: 188,\n\tfrac34: 190,\n\t'frasl;': 8260,\n\t'frown;': 8994,\n\t'gamma;': 947,\n\t'gcirc;': 285,\n\t'gescc;': 10921,\n\t'gimel;': 8503,\n\t'gneqq;': 8809,\n\t'gnsim;': 8935,\n\t'grave;': 96,\n\t'gsime;': 10894,\n\t'gsiml;': 10896,\n\t'gtcir;': 10874,\n\t'gtdot;': 8919,\n\t'harrw;': 8621,\n\t'hcirc;': 293,\n\t'hoarr;': 8703,\n\tiacute: 237,\n\t'icirc;': 238,\n\t'iexcl;': 161,\n\tigrave: 236,\n\t'iiint;': 8749,\n\t'iiota;': 8489,\n\t'ijlig;': 307,\n\t'imacr;': 299,\n\t'image;': 8465,\n\t'imath;': 305,\n\t'imped;': 437,\n\t'infin;': 8734,\n\t'iogon;': 303,\n\t'iprod;': 10812,\n\tiquest: 191,\n\t'isinE;': 8953,\n\t'isins;': 8948,\n\t'isinv;': 8712,\n\t'iukcy;': 1110,\n\t'jcirc;': 309,\n\t'jmath;': 567,\n\t'jukcy;': 1108,\n\t'kappa;': 954,\n\t'lAarr;': 8666,\n\t'lBarr;': 10510,\n\t'langd;': 10641,\n\t'laquo;': 171,\n\t'larrb;': 8676,\n\t'lates;': 10925,\n\t'lbarr;': 10508,\n\t'lbbrk;': 10098,\n\t'lbrke;': 10635,\n\t'lceil;': 8968,\n\t'ldquo;': 8220,\n\t'lescc;': 10920,\n\t'lhard;': 8637,\n\t'lharu;': 8636,\n\t'lhblk;': 9604,\n\t'llarr;': 8647,\n\t'lltri;': 9722,\n\t'lneqq;': 8808,\n\t'lnsim;': 8934,\n\t'loang;': 10220,\n\t'loarr;': 8701,\n\t'lobrk;': 10214,\n\t'lopar;': 10629,\n\t'lrarr;': 8646,\n\t'lrhar;': 8651,\n\t'lrtri;': 8895,\n\t'lsime;': 10893,\n\t'lsimg;': 10895,\n\t'lsquo;': 8216,\n\t'ltcir;': 10873,\n\t'ltdot;': 8918,\n\t'ltrie;': 8884,\n\t'ltrif;': 9666,\n\t'mDDot;': 8762,\n\t'mdash;': 8212,\n\t'micro;': 181,\n\tmiddot: 183,\n\t'minus;': 8722,\n\t'mumap;': 8888,\n\t'nabla;': 8711,\n\t'napid;': 8779,\n\t'napos;': 329,\n\t'natur;': 9838,\n\t'nbump;': 8782,\n\t'ncong;': 8775,\n\t'ndash;': 8211,\n\t'neArr;': 8663,\n\t'nearr;': 8599,\n\t'nedot;': 8784,\n\t'nesim;': 8770,\n\t'ngeqq;': 8807,\n\t'ngsim;': 8821,\n\t'nhArr;': 8654,\n\t'nharr;': 8622,\n\t'nhpar;': 10994,\n\t'nlArr;': 8653,\n\t'nlarr;': 8602,\n\t'nleqq;': 8806,\n\t'nless;': 8814,\n\t'nlsim;': 8820,\n\t'nltri;': 8938,\n\t'notin;': 8713,\n\t'notni;': 8716,\n\t'npart;': 8706,\n\t'nprec;': 8832,\n\t'nrArr;': 8655,\n\t'nrarr;': 8603,\n\t'nrtri;': 8939,\n\t'nsime;': 8772,\n\t'nsmid;': 8740,\n\t'nspar;': 8742,\n\t'nsubE;': 10949,\n\t'nsube;': 8840,\n\t'nsucc;': 8833,\n\t'nsupE;': 10950,\n\t'nsupe;': 8841,\n\tntilde: 241,\n\t'numsp;': 8199,\n\t'nvsim;': 8764,\n\t'nwArr;': 8662,\n\t'nwarr;': 8598,\n\toacute: 243,\n\t'ocirc;': 244,\n\t'odash;': 8861,\n\t'oelig;': 339,\n\t'ofcir;': 10687,\n\tograve: 242,\n\t'ohbar;': 10677,\n\t'olarr;': 8634,\n\t'olcir;': 10686,\n\t'oline;': 8254,\n\t'omacr;': 333,\n\t'omega;': 969,\n\t'operp;': 10681,\n\t'oplus;': 8853,\n\t'orarr;': 8635,\n\t'order;': 8500,\n\toslash: 248,\n\totilde: 245,\n\t'ovbar;': 9021,\n\t'parsl;': 11005,\n\t'phone;': 9742,\n\t'plusb;': 8862,\n\t'pluse;': 10866,\n\tplusmn: 177,\n\t'pound;': 163,\n\t'prcue;': 8828,\n\t'prime;': 8242,\n\t'prnap;': 10937,\n\t'prsim;': 8830,\n\t'quest;': 63,\n\t'rAarr;': 8667,\n\t'rBarr;': 10511,\n\t'radic;': 8730,\n\t'rangd;': 10642,\n\t'range;': 10661,\n\t'raquo;': 187,\n\t'rarrb;': 8677,\n\t'rarrc;': 10547,\n\t'rarrw;': 8605,\n\t'ratio;': 8758,\n\t'rbarr;': 10509,\n\t'rbbrk;': 10099,\n\t'rbrke;': 10636,\n\t'rceil;': 8969,\n\t'rdquo;': 8221,\n\t'reals;': 8477,\n\t'rhard;': 8641,\n\t'rharu;': 8640,\n\t'rlarr;': 8644,\n\t'rlhar;': 8652,\n\t'rnmid;': 10990,\n\t'roang;': 10221,\n\t'roarr;': 8702,\n\t'robrk;': 10215,\n\t'ropar;': 10630,\n\t'rrarr;': 8649,\n\t'rsquo;': 8217,\n\t'rtrie;': 8885,\n\t'rtrif;': 9656,\n\t'sbquo;': 8218,\n\t'sccue;': 8829,\n\t'scirc;': 349,\n\t'scnap;': 10938,\n\t'scsim;': 8831,\n\t'sdotb;': 8865,\n\t'sdote;': 10854,\n\t'seArr;': 8664,\n\t'searr;': 8600,\n\t'setmn;': 8726,\n\t'sharp;': 9839,\n\t'sigma;': 963,\n\t'simeq;': 8771,\n\t'simgE;': 10912,\n\t'simlE;': 10911,\n\t'simne;': 8774,\n\t'slarr;': 8592,\n\t'smile;': 8995,\n\t'smtes;': 10924,\n\t'sqcap;': 8851,\n\t'sqcup;': 8852,\n\t'sqsub;': 8847,\n\t'sqsup;': 8848,\n\t'srarr;': 8594,\n\t'starf;': 9733,\n\t'strns;': 175,\n\t'subnE;': 10955,\n\t'subne;': 8842,\n\t'supnE;': 10956,\n\t'supne;': 8843,\n\t'swArr;': 8665,\n\t'swarr;': 8601,\n\t'szlig;': 223,\n\t'theta;': 952,\n\t'thkap;': 8776,\n\t'thorn;': 254,\n\t'tilde;': 732,\n\t'times;': 215,\n\t'trade;': 8482,\n\t'trisb;': 10701,\n\t'tshcy;': 1115,\n\t'twixt;': 8812,\n\tuacute: 250,\n\t'ubrcy;': 1118,\n\t'ucirc;': 251,\n\t'udarr;': 8645,\n\t'udhar;': 10606,\n\tugrave: 249,\n\t'uharl;': 8639,\n\t'uharr;': 8638,\n\t'uhblk;': 9600,\n\t'ultri;': 9720,\n\t'umacr;': 363,\n\t'uogon;': 371,\n\t'uplus;': 8846,\n\t'upsih;': 978,\n\t'uring;': 367,\n\t'urtri;': 9721,\n\t'utdot;': 8944,\n\t'utrif;': 9652,\n\t'uuarr;': 8648,\n\t'vBarv;': 10985,\n\t'vDash;': 8872,\n\t'varpi;': 982,\n\t'vdash;': 8866,\n\t'veeeq;': 8794,\n\t'vltri;': 8882,\n\t'vnsub;': 8834,\n\t'vnsup;': 8835,\n\t'vprop;': 8733,\n\t'vrtri;': 8883,\n\t'wcirc;': 373,\n\t'wedge;': 8743,\n\t'xcirc;': 9711,\n\t'xdtri;': 9661,\n\t'xhArr;': 10234,\n\t'xharr;': 10231,\n\t'xlArr;': 10232,\n\t'xlarr;': 10229,\n\t'xodot;': 10752,\n\t'xrArr;': 10233,\n\t'xrarr;': 10230,\n\t'xutri;': 9651,\n\tyacute: 253,\n\t'ycirc;': 375,\n\tAElig: 198,\n\tAcirc: 194,\n\t'Aopf;': 120120,\n\tAring: 197,\n\t'Ascr;': 119964,\n\t'Auml;': 196,\n\t'Barv;': 10983,\n\t'Beta;': 914,\n\t'Bopf;': 120121,\n\t'Bscr;': 8492,\n\t'CHcy;': 1063,\n\t'COPY;': 169,\n\t'Cdot;': 266,\n\t'Copf;': 8450,\n\t'Cscr;': 119966,\n\t'DJcy;': 1026,\n\t'DScy;': 1029,\n\t'DZcy;': 1039,\n\t'Darr;': 8609,\n\t'Dopf;': 120123,\n\t'Dscr;': 119967,\n\tEcirc: 202,\n\t'Edot;': 278,\n\t'Eopf;': 120124,\n\t'Escr;': 8496,\n\t'Esim;': 10867,\n\t'Euml;': 203,\n\t'Fopf;': 120125,\n\t'Fscr;': 8497,\n\t'GJcy;': 1027,\n\t'Gdot;': 288,\n\t'Gopf;': 120126,\n\t'Gscr;': 119970,\n\t'Hopf;': 8461,\n\t'Hscr;': 8459,\n\t'IEcy;': 1045,\n\t'IOcy;': 1025,\n\tIcirc: 206,\n\t'Idot;': 304,\n\t'Iopf;': 120128,\n\t'Iota;': 921,\n\t'Iscr;': 8464,\n\t'Iuml;': 207,\n\t'Jopf;': 120129,\n\t'Jscr;': 119973,\n\t'KHcy;': 1061,\n\t'KJcy;': 1036,\n\t'Kopf;': 120130,\n\t'Kscr;': 119974,\n\t'LJcy;': 1033,\n\t'Lang;': 10218,\n\t'Larr;': 8606,\n\t'Lopf;': 120131,\n\t'Lscr;': 8466,\n\t'Mopf;': 120132,\n\t'Mscr;': 8499,\n\t'NJcy;': 1034,\n\t'Nopf;': 8469,\n\t'Nscr;': 119977,\n\tOcirc: 212,\n\t'Oopf;': 120134,\n\t'Oscr;': 119978,\n\t'Ouml;': 214,\n\t'Popf;': 8473,\n\t'Pscr;': 119979,\n\t'QUOT;': 34,\n\t'Qopf;': 8474,\n\t'Qscr;': 119980,\n\t'Rang;': 10219,\n\t'Rarr;': 8608,\n\t'Ropf;': 8477,\n\t'Rscr;': 8475,\n\t'SHcy;': 1064,\n\t'Sopf;': 120138,\n\t'Sqrt;': 8730,\n\t'Sscr;': 119982,\n\t'Star;': 8902,\n\tTHORN: 222,\n\t'TScy;': 1062,\n\t'Topf;': 120139,\n\t'Tscr;': 119983,\n\t'Uarr;': 8607,\n\tUcirc: 219,\n\t'Uopf;': 120140,\n\t'Upsi;': 978,\n\t'Uscr;': 119984,\n\t'Uuml;': 220,\n\t'Vbar;': 10987,\n\t'Vert;': 8214,\n\t'Vopf;': 120141,\n\t'Vscr;': 119985,\n\t'Wopf;': 120142,\n\t'Wscr;': 119986,\n\t'Xopf;': 120143,\n\t'Xscr;': 119987,\n\t'YAcy;': 1071,\n\t'YIcy;': 1031,\n\t'YUcy;': 1070,\n\t'Yopf;': 120144,\n\t'Yscr;': 119988,\n\t'Yuml;': 376,\n\t'ZHcy;': 1046,\n\t'Zdot;': 379,\n\t'Zeta;': 918,\n\t'Zopf;': 8484,\n\t'Zscr;': 119989,\n\tacirc: 226,\n\tacute: 180,\n\taelig: 230,\n\t'andd;': 10844,\n\t'andv;': 10842,\n\t'ange;': 10660,\n\t'aopf;': 120146,\n\t'apid;': 8779,\n\t'apos;': 39,\n\taring: 229,\n\t'ascr;': 119990,\n\t'auml;': 228,\n\t'bNot;': 10989,\n\t'bbrk;': 9141,\n\t'beta;': 946,\n\t'beth;': 8502,\n\t'bnot;': 8976,\n\t'bopf;': 120147,\n\t'boxH;': 9552,\n\t'boxV;': 9553,\n\t'boxh;': 9472,\n\t'boxv;': 9474,\n\t'bscr;': 119991,\n\t'bsim;': 8765,\n\t'bsol;': 92,\n\t'bull;': 8226,\n\t'bump;': 8782,\n\t'caps;': 8745,\n\t'cdot;': 267,\n\tcedil: 184,\n\t'cent;': 162,\n\t'chcy;': 1095,\n\t'cirE;': 10691,\n\t'circ;': 710,\n\t'cire;': 8791,\n\t'comp;': 8705,\n\t'cong;': 8773,\n\t'copf;': 120148,\n\t'copy;': 169,\n\t'cscr;': 119992,\n\t'csub;': 10959,\n\t'csup;': 10960,\n\t'cups;': 8746,\n\t'dArr;': 8659,\n\t'dHar;': 10597,\n\t'darr;': 8595,\n\t'dash;': 8208,\n\t'diam;': 8900,\n\t'djcy;': 1106,\n\t'dopf;': 120149,\n\t'dscr;': 119993,\n\t'dscy;': 1109,\n\t'dsol;': 10742,\n\t'dtri;': 9663,\n\t'dzcy;': 1119,\n\t'eDot;': 8785,\n\t'ecir;': 8790,\n\tecirc: 234,\n\t'edot;': 279,\n\t'emsp;': 8195,\n\t'ensp;': 8194,\n\t'eopf;': 120150,\n\t'epar;': 8917,\n\t'epsi;': 949,\n\t'escr;': 8495,\n\t'esim;': 8770,\n\t'euml;': 235,\n\t'euro;': 8364,\n\t'excl;': 33,\n\t'flat;': 9837,\n\t'fnof;': 402,\n\t'fopf;': 120151,\n\t'fork;': 8916,\n\t'fscr;': 119995,\n\t'gdot;': 289,\n\t'geqq;': 8807,\n\t'gesl;': 8923,\n\t'gjcy;': 1107,\n\t'gnap;': 10890,\n\t'gneq;': 10888,\n\t'gopf;': 120152,\n\t'gscr;': 8458,\n\t'gsim;': 8819,\n\t'gtcc;': 10919,\n\t'gvnE;': 8809,\n\t'hArr;': 8660,\n\t'half;': 189,\n\t'harr;': 8596,\n\t'hbar;': 8463,\n\t'hopf;': 120153,\n\t'hscr;': 119997,\n\ticirc: 238,\n\t'iecy;': 1077,\n\tiexcl: 161,\n\t'imof;': 8887,\n\t'iocy;': 1105,\n\t'iopf;': 120154,\n\t'iota;': 953,\n\t'iscr;': 119998,\n\t'isin;': 8712,\n\t'iuml;': 239,\n\t'jopf;': 120155,\n\t'jscr;': 119999,\n\t'khcy;': 1093,\n\t'kjcy;': 1116,\n\t'kopf;': 120156,\n\t'kscr;': 120000,\n\t'lArr;': 8656,\n\t'lHar;': 10594,\n\t'lang;': 10216,\n\tlaquo: 171,\n\t'larr;': 8592,\n\t'late;': 10925,\n\t'lcub;': 123,\n\t'ldca;': 10550,\n\t'ldsh;': 8626,\n\t'leqq;': 8806,\n\t'lesg;': 8922,\n\t'ljcy;': 1113,\n\t'lnap;': 10889,\n\t'lneq;': 10887,\n\t'lopf;': 120157,\n\t'lozf;': 10731,\n\t'lpar;': 40,\n\t'lscr;': 120001,\n\t'lsim;': 8818,\n\t'lsqb;': 91,\n\t'ltcc;': 10918,\n\t'ltri;': 9667,\n\t'lvnE;': 8808,\n\t'macr;': 175,\n\t'male;': 9794,\n\t'malt;': 10016,\n\tmicro: 181,\n\t'mlcp;': 10971,\n\t'mldr;': 8230,\n\t'mopf;': 120158,\n\t'mscr;': 120002,\n\t'nGtv;': 8811,\n\t'nLtv;': 8810,\n\t'nang;': 8736,\n\t'napE;': 10864,\n\t'nbsp;': 160,\n\t'ncap;': 10819,\n\t'ncup;': 10818,\n\t'ngeq;': 8817,\n\t'nges;': 10878,\n\t'ngtr;': 8815,\n\t'nisd;': 8954,\n\t'njcy;': 1114,\n\t'nldr;': 8229,\n\t'nleq;': 8816,\n\t'nles;': 10877,\n\t'nmid;': 8740,\n\t'nopf;': 120159,\n\t'npar;': 8742,\n\t'npre;': 10927,\n\t'nsce;': 10928,\n\t'nscr;': 120003,\n\t'nsim;': 8769,\n\t'nsub;': 8836,\n\t'nsup;': 8837,\n\t'ntgl;': 8825,\n\t'ntlg;': 8824,\n\t'nvap;': 8781,\n\t'nvge;': 8805,\n\t'nvgt;': 62,\n\t'nvle;': 8804,\n\t'nvlt;': 60,\n\t'oast;': 8859,\n\t'ocir;': 8858,\n\tocirc: 244,\n\t'odiv;': 10808,\n\t'odot;': 8857,\n\t'ogon;': 731,\n\t'oint;': 8750,\n\t'omid;': 10678,\n\t'oopf;': 120160,\n\t'opar;': 10679,\n\t'ordf;': 170,\n\t'ordm;': 186,\n\t'oror;': 10838,\n\t'oscr;': 8500,\n\t'osol;': 8856,\n\t'ouml;': 246,\n\t'para;': 182,\n\t'part;': 8706,\n\t'perp;': 8869,\n\t'phiv;': 981,\n\t'plus;': 43,\n\t'popf;': 120161,\n\tpound: 163,\n\t'prap;': 10935,\n\t'prec;': 8826,\n\t'prnE;': 10933,\n\t'prod;': 8719,\n\t'prop;': 8733,\n\t'pscr;': 120005,\n\t'qint;': 10764,\n\t'qopf;': 120162,\n\t'qscr;': 120006,\n\t'quot;': 34,\n\t'rArr;': 8658,\n\t'rHar;': 10596,\n\t'race;': 8765,\n\t'rang;': 10217,\n\traquo: 187,\n\t'rarr;': 8594,\n\t'rcub;': 125,\n\t'rdca;': 10551,\n\t'rdsh;': 8627,\n\t'real;': 8476,\n\t'rect;': 9645,\n\t'rhov;': 1009,\n\t'ring;': 730,\n\t'ropf;': 120163,\n\t'rpar;': 41,\n\t'rscr;': 120007,\n\t'rsqb;': 93,\n\t'rtri;': 9657,\n\t'scap;': 10936,\n\t'scnE;': 10934,\n\t'sdot;': 8901,\n\t'sect;': 167,\n\t'semi;': 59,\n\t'sext;': 10038,\n\t'shcy;': 1096,\n\t'sime;': 8771,\n\t'simg;': 10910,\n\t'siml;': 10909,\n\t'smid;': 8739,\n\t'smte;': 10924,\n\t'solb;': 10692,\n\t'sopf;': 120164,\n\t'spar;': 8741,\n\t'squf;': 9642,\n\t'sscr;': 120008,\n\t'star;': 9734,\n\t'subE;': 10949,\n\t'sube;': 8838,\n\t'succ;': 8827,\n\t'sung;': 9834,\n\t'sup1;': 185,\n\t'sup2;': 178,\n\t'sup3;': 179,\n\t'supE;': 10950,\n\t'supe;': 8839,\n\tszlig: 223,\n\t'tbrk;': 9140,\n\t'tdot;': 8411,\n\tthorn: 254,\n\ttimes: 215,\n\t'tint;': 8749,\n\t'toea;': 10536,\n\t'topf;': 120165,\n\t'tosa;': 10537,\n\t'trie;': 8796,\n\t'tscr;': 120009,\n\t'tscy;': 1094,\n\t'uArr;': 8657,\n\t'uHar;': 10595,\n\t'uarr;': 8593,\n\tucirc: 251,\n\t'uopf;': 120166,\n\t'upsi;': 965,\n\t'uscr;': 120010,\n\t'utri;': 9653,\n\t'uuml;': 252,\n\t'vArr;': 8661,\n\t'vBar;': 10984,\n\t'varr;': 8597,\n\t'vert;': 124,\n\t'vopf;': 120167,\n\t'vscr;': 120011,\n\t'wopf;': 120168,\n\t'wscr;': 120012,\n\t'xcap;': 8898,\n\t'xcup;': 8899,\n\t'xmap;': 10236,\n\t'xnis;': 8955,\n\t'xopf;': 120169,\n\t'xscr;': 120013,\n\t'xvee;': 8897,\n\t'yacy;': 1103,\n\t'yicy;': 1111,\n\t'yopf;': 120170,\n\t'yscr;': 120014,\n\t'yucy;': 1102,\n\t'yuml;': 255,\n\t'zdot;': 380,\n\t'zeta;': 950,\n\t'zhcy;': 1078,\n\t'zopf;': 120171,\n\t'zscr;': 120015,\n\t'zwnj;': 8204,\n\t'AMP;': 38,\n\t'Acy;': 1040,\n\t'Afr;': 120068,\n\t'And;': 10835,\n\tAuml: 196,\n\t'Bcy;': 1041,\n\t'Bfr;': 120069,\n\tCOPY: 169,\n\t'Cap;': 8914,\n\t'Cfr;': 8493,\n\t'Chi;': 935,\n\t'Cup;': 8915,\n\t'Dcy;': 1044,\n\t'Del;': 8711,\n\t'Dfr;': 120071,\n\t'Dot;': 168,\n\t'ENG;': 330,\n\t'ETH;': 208,\n\t'Ecy;': 1069,\n\t'Efr;': 120072,\n\t'Eta;': 919,\n\tEuml: 203,\n\t'Fcy;': 1060,\n\t'Ffr;': 120073,\n\t'Gcy;': 1043,\n\t'Gfr;': 120074,\n\t'Hat;': 94,\n\t'Hfr;': 8460,\n\t'Icy;': 1048,\n\t'Ifr;': 8465,\n\t'Int;': 8748,\n\tIuml: 207,\n\t'Jcy;': 1049,\n\t'Jfr;': 120077,\n\t'Kcy;': 1050,\n\t'Kfr;': 120078,\n\t'Lcy;': 1051,\n\t'Lfr;': 120079,\n\t'Lsh;': 8624,\n\t'Map;': 10501,\n\t'Mcy;': 1052,\n\t'Mfr;': 120080,\n\t'Ncy;': 1053,\n\t'Nfr;': 120081,\n\t'Not;': 10988,\n\t'Ocy;': 1054,\n\t'Ofr;': 120082,\n\tOuml: 214,\n\t'Pcy;': 1055,\n\t'Pfr;': 120083,\n\t'Phi;': 934,\n\t'Psi;': 936,\n\tQUOT: 34,\n\t'Qfr;': 120084,\n\t'REG;': 174,\n\t'Rcy;': 1056,\n\t'Rfr;': 8476,\n\t'Rho;': 929,\n\t'Rsh;': 8625,\n\t'Scy;': 1057,\n\t'Sfr;': 120086,\n\t'Sub;': 8912,\n\t'Sum;': 8721,\n\t'Sup;': 8913,\n\t'Tab;': 9,\n\t'Tau;': 932,\n\t'Tcy;': 1058,\n\t'Tfr;': 120087,\n\t'Ucy;': 1059,\n\t'Ufr;': 120088,\n\tUuml: 220,\n\t'Vcy;': 1042,\n\t'Vee;': 8897,\n\t'Vfr;': 120089,\n\t'Wfr;': 120090,\n\t'Xfr;': 120091,\n\t'Ycy;': 1067,\n\t'Yfr;': 120092,\n\t'Zcy;': 1047,\n\t'Zfr;': 8488,\n\t'acE;': 8766,\n\t'acd;': 8767,\n\t'acy;': 1072,\n\t'afr;': 120094,\n\t'amp;': 38,\n\t'and;': 8743,\n\t'ang;': 8736,\n\t'apE;': 10864,\n\t'ape;': 8778,\n\t'ast;': 42,\n\tauml: 228,\n\t'bcy;': 1073,\n\t'bfr;': 120095,\n\t'bne;': 61,\n\t'bot;': 8869,\n\t'cap;': 8745,\n\tcent: 162,\n\t'cfr;': 120096,\n\t'chi;': 967,\n\t'cir;': 9675,\n\tcopy: 169,\n\t'cup;': 8746,\n\t'dcy;': 1076,\n\t'deg;': 176,\n\t'dfr;': 120097,\n\t'die;': 168,\n\t'div;': 247,\n\t'dot;': 729,\n\t'ecy;': 1101,\n\t'efr;': 120098,\n\t'egs;': 10902,\n\t'ell;': 8467,\n\t'els;': 10901,\n\t'eng;': 331,\n\t'eta;': 951,\n\t'eth;': 240,\n\teuml: 235,\n\t'fcy;': 1092,\n\t'ffr;': 120099,\n\t'gEl;': 10892,\n\t'gap;': 10886,\n\t'gcy;': 1075,\n\t'gel;': 8923,\n\t'geq;': 8805,\n\t'ges;': 10878,\n\t'gfr;': 120100,\n\t'ggg;': 8921,\n\t'glE;': 10898,\n\t'gla;': 10917,\n\t'glj;': 10916,\n\t'gnE;': 8809,\n\t'gne;': 10888,\n\t'hfr;': 120101,\n\t'icy;': 1080,\n\t'iff;': 8660,\n\t'ifr;': 120102,\n\t'int;': 8747,\n\tiuml: 239,\n\t'jcy;': 1081,\n\t'jfr;': 120103,\n\t'kcy;': 1082,\n\t'kfr;': 120104,\n\t'lEg;': 10891,\n\t'lap;': 10885,\n\t'lat;': 10923,\n\t'lcy;': 1083,\n\t'leg;': 8922,\n\t'leq;': 8804,\n\t'les;': 10877,\n\t'lfr;': 120105,\n\t'lgE;': 10897,\n\t'lnE;': 8808,\n\t'lne;': 10887,\n\t'loz;': 9674,\n\t'lrm;': 8206,\n\t'lsh;': 8624,\n\tmacr: 175,\n\t'map;': 8614,\n\t'mcy;': 1084,\n\t'mfr;': 120106,\n\t'mho;': 8487,\n\t'mid;': 8739,\n\t'nGg;': 8921,\n\t'nGt;': 8811,\n\t'nLl;': 8920,\n\t'nLt;': 8810,\n\t'nap;': 8777,\n\tnbsp: 160,\n\t'ncy;': 1085,\n\t'nfr;': 120107,\n\t'ngE;': 8807,\n\t'nge;': 8817,\n\t'ngt;': 8815,\n\t'nis;': 8956,\n\t'niv;': 8715,\n\t'nlE;': 8806,\n\t'nle;': 8816,\n\t'nlt;': 8814,\n\t'not;': 172,\n\t'npr;': 8832,\n\t'nsc;': 8833,\n\t'num;': 35,\n\t'ocy;': 1086,\n\t'ofr;': 120108,\n\t'ogt;': 10689,\n\t'ohm;': 937,\n\t'olt;': 10688,\n\t'ord;': 10845,\n\tordf: 170,\n\tordm: 186,\n\t'orv;': 10843,\n\touml: 246,\n\t'par;': 8741,\n\tpara: 182,\n\t'pcy;': 1087,\n\t'pfr;': 120109,\n\t'phi;': 966,\n\t'piv;': 982,\n\t'prE;': 10931,\n\t'pre;': 10927,\n\t'psi;': 968,\n\t'qfr;': 120110,\n\tquot: 34,\n\t'rcy;': 1088,\n\t'reg;': 174,\n\t'rfr;': 120111,\n\t'rho;': 961,\n\t'rlm;': 8207,\n\t'rsh;': 8625,\n\t'scE;': 10932,\n\t'sce;': 10928,\n\t'scy;': 1089,\n\tsect: 167,\n\t'sfr;': 120112,\n\t'shy;': 173,\n\t'sim;': 8764,\n\t'smt;': 10922,\n\t'sol;': 47,\n\t'squ;': 9633,\n\t'sub;': 8834,\n\t'sum;': 8721,\n\tsup1: 185,\n\tsup2: 178,\n\tsup3: 179,\n\t'sup;': 8835,\n\t'tau;': 964,\n\t'tcy;': 1090,\n\t'tfr;': 120113,\n\t'top;': 8868,\n\t'ucy;': 1091,\n\t'ufr;': 120114,\n\t'uml;': 168,\n\tuuml: 252,\n\t'vcy;': 1074,\n\t'vee;': 8744,\n\t'vfr;': 120115,\n\t'wfr;': 120116,\n\t'xfr;': 120117,\n\t'ycy;': 1099,\n\t'yen;': 165,\n\t'yfr;': 120118,\n\tyuml: 255,\n\t'zcy;': 1079,\n\t'zfr;': 120119,\n\t'zwj;': 8205,\n\tAMP: 38,\n\t'DD;': 8517,\n\tETH: 208,\n\t'GT;': 62,\n\t'Gg;': 8921,\n\t'Gt;': 8811,\n\t'Im;': 8465,\n\t'LT;': 60,\n\t'Ll;': 8920,\n\t'Lt;': 8810,\n\t'Mu;': 924,\n\t'Nu;': 925,\n\t'Or;': 10836,\n\t'Pi;': 928,\n\t'Pr;': 10939,\n\tREG: 174,\n\t'Re;': 8476,\n\t'Sc;': 10940,\n\t'Xi;': 926,\n\t'ac;': 8766,\n\t'af;': 8289,\n\tamp: 38,\n\t'ap;': 8776,\n\t'dd;': 8518,\n\tdeg: 176,\n\t'ee;': 8519,\n\t'eg;': 10906,\n\t'el;': 10905,\n\teth: 240,\n\t'gE;': 8807,\n\t'ge;': 8805,\n\t'gg;': 8811,\n\t'gl;': 8823,\n\t'gt;': 62,\n\t'ic;': 8291,\n\t'ii;': 8520,\n\t'in;': 8712,\n\t'it;': 8290,\n\t'lE;': 8806,\n\t'le;': 8804,\n\t'lg;': 8822,\n\t'll;': 8810,\n\t'lt;': 60,\n\t'mp;': 8723,\n\t'mu;': 956,\n\t'ne;': 8800,\n\t'ni;': 8715,\n\tnot: 172,\n\t'nu;': 957,\n\t'oS;': 9416,\n\t'or;': 8744,\n\t'pi;': 960,\n\t'pm;': 177,\n\t'pr;': 8826,\n\treg: 174,\n\t'rx;': 8478,\n\t'sc;': 8827,\n\tshy: 173,\n\tuml: 168,\n\t'wp;': 8472,\n\t'wr;': 8768,\n\t'xi;': 958,\n\tyen: 165,\n\tGT: 62,\n\tLT: 60,\n\tgt: 62,\n\tlt: 60\n};\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/utils/fuzzymatch.js",
    "content": "/**\n * @param {string} name\n * @param {string[]} names\n * @returns {string | null}\n */\nexport default function fuzzymatch(name, names) {\n\tif (names.length === 0) return null;\n\n\tconst set = new FuzzySet(names);\n\tconst matches = set.get(name);\n\n\treturn matches && matches[0][0] > 0.7 ? matches[0][1] : null;\n}\n\n// adapted from https://github.com/Glench/fuzzyset.js/blob/master/lib/fuzzyset.js in 2016\n// BSD Licensed (see https://github.com/Glench/fuzzyset.js/issues/10)\n\nconst GRAM_SIZE_LOWER = 2;\nconst GRAM_SIZE_UPPER = 3;\n\n// return an edit distance from 0 to 1\n\n/**\n * @param {string} str1\n * @param {string} str2\n */\nfunction _distance(str1, str2) {\n\tif (str1 === null && str2 === null) {\n\t\tthrow 'Trying to compare two null values';\n\t}\n\tif (str1 === null || str2 === null) return 0;\n\tstr1 = String(str1);\n\tstr2 = String(str2);\n\n\tconst distance = levenshtein(str1, str2);\n\treturn 1 - distance / Math.max(str1.length, str2.length);\n}\n\n// helper functions\n\n/**\n * @param {string} str1\n * @param {string} str2\n */\nfunction levenshtein(str1, str2) {\n\t/** @type {number[]} */\n\tconst current = [];\n\tlet prev = 0;\n\n\tfor (let i = 0; i <= str2.length; i++) {\n\t\tfor (let j = 0; j <= str1.length; j++) {\n\t\t\tlet value;\n\n\t\t\tif (i && j) {\n\t\t\t\tif (str1.charAt(j - 1) === str2.charAt(i - 1)) {\n\t\t\t\t\tvalue = prev;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Math.min(current[j], current[j - 1], prev) + 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvalue = i + j;\n\t\t\t}\n\n\t\t\tprev = current[j];\n\t\t\tcurrent[j] = value;\n\t\t}\n\t}\n\n\treturn /** @type {number} */ (current.pop());\n}\n\nconst non_word_regex = /[^\\w, ]+/;\n\n/**\n * @param {string} value\n * @param {any} gram_size\n */\nfunction iterate_grams(value, gram_size = 2) {\n\tconst simplified = '-' + value.toLowerCase().replace(non_word_regex, '') + '-';\n\tconst len_diff = gram_size - simplified.length;\n\tconst results = [];\n\n\tif (len_diff > 0) {\n\t\tfor (let i = 0; i < len_diff; ++i) {\n\t\t\tvalue += '-';\n\t\t}\n\t}\n\tfor (let i = 0; i < simplified.length - gram_size + 1; ++i) {\n\t\tresults.push(simplified.slice(i, i + gram_size));\n\t}\n\treturn results;\n}\n\n/**\n * @param {string} value\n * @param {any} gram_size\n */\nfunction gram_counter(value, gram_size = 2) {\n\t// return an object where key=gram, value=number of occurrences\n\n\t/** @type {Record<string, number>} */\n\tconst result = {};\n\tconst grams = iterate_grams(value, gram_size);\n\tlet i = 0;\n\n\tfor (i; i < grams.length; ++i) {\n\t\tif (grams[i] in result) {\n\t\t\tresult[grams[i]] += 1;\n\t\t} else {\n\t\t\tresult[grams[i]] = 1;\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * @param {MatchTuple} a\n * @param {MatchTuple} b\n */\nfunction sort_descending(a, b) {\n\treturn b[0] - a[0];\n}\n\nclass FuzzySet {\n\t/** @type {Record<string, string>} */\n\texact_set = {};\n\n\t/** @type {Record<string, [number, number][]>} */\n\tmatch_dict = {};\n\n\t/** @type {Record<string, number[]>} */\n\titems = {};\n\n\t/** @param {string[]} arr */\n\tconstructor(arr) {\n\t\t// initialisation\n\t\tfor (let i = GRAM_SIZE_LOWER; i < GRAM_SIZE_UPPER + 1; ++i) {\n\t\t\tthis.items[i] = [];\n\t\t}\n\n\t\t// add all the items to the set\n\t\tfor (let i = 0; i < arr.length; ++i) {\n\t\t\tthis.add(arr[i]);\n\t\t}\n\t}\n\n\t/** @param {string} value */\n\tadd(value) {\n\t\tconst normalized_value = value.toLowerCase();\n\t\tif (normalized_value in this.exact_set) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet i = GRAM_SIZE_LOWER;\n\t\tfor (i; i < GRAM_SIZE_UPPER + 1; ++i) {\n\t\t\tthis._add(value, i);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} value\n\t * @param {number} gram_size\n\t */\n\t_add(value, gram_size) {\n\t\tconst normalized_value = value.toLowerCase();\n\t\tconst items = this.items[gram_size] || [];\n\t\tconst index = items.length;\n\n\t\titems.push(0);\n\t\tconst gram_counts = gram_counter(normalized_value, gram_size);\n\t\tlet sum_of_square_gram_counts = 0;\n\t\tlet gram;\n\t\tlet gram_count;\n\n\t\tfor (gram in gram_counts) {\n\t\t\tgram_count = gram_counts[gram];\n\t\t\tsum_of_square_gram_counts += Math.pow(gram_count, 2);\n\t\t\tif (gram in this.match_dict) {\n\t\t\t\tthis.match_dict[gram].push([index, gram_count]);\n\t\t\t} else {\n\t\t\t\tthis.match_dict[gram] = [[index, gram_count]];\n\t\t\t}\n\t\t}\n\t\tconst vector_normal = Math.sqrt(sum_of_square_gram_counts);\n\t\t// @ts-ignore no idea what this code is doing\n\t\titems[index] = [vector_normal, normalized_value];\n\t\tthis.items[gram_size] = items;\n\t\tthis.exact_set[normalized_value] = value;\n\t}\n\n\t/** @param {string} value */\n\tget(value) {\n\t\tconst normalized_value = value.toLowerCase();\n\t\tconst result = this.exact_set[normalized_value];\n\n\t\tif (result) {\n\t\t\treturn /** @type {MatchTuple[]} */ ([[1, result]]);\n\t\t}\n\n\t\t// start with high gram size and if there are no results, go to lower gram sizes\n\t\tfor (let gram_size = GRAM_SIZE_UPPER; gram_size >= GRAM_SIZE_LOWER; --gram_size) {\n\t\t\tconst results = this.__get(value, gram_size);\n\t\t\tif (results.length > 0) return results;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {string} value\n\t * @param {number} gram_size\n\t * @returns {MatchTuple[]}\n\t */\n\t__get(value, gram_size) {\n\t\tconst normalized_value = value.toLowerCase();\n\n\t\t/** @type {Record<string, number>} */\n\t\tconst matches = {};\n\t\tconst gram_counts = gram_counter(normalized_value, gram_size);\n\t\tconst items = this.items[gram_size];\n\t\tlet sum_of_square_gram_counts = 0;\n\t\tlet gram;\n\t\tlet gram_count;\n\t\tlet i;\n\t\tlet index;\n\t\tlet other_gram_count;\n\n\t\tfor (gram in gram_counts) {\n\t\t\tgram_count = gram_counts[gram];\n\t\t\tsum_of_square_gram_counts += Math.pow(gram_count, 2);\n\t\t\tif (gram in this.match_dict) {\n\t\t\t\tfor (i = 0; i < this.match_dict[gram].length; ++i) {\n\t\t\t\t\tindex = this.match_dict[gram][i][0];\n\t\t\t\t\tother_gram_count = this.match_dict[gram][i][1];\n\t\t\t\t\tif (index in matches) {\n\t\t\t\t\t\tmatches[index] += gram_count * other_gram_count;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatches[index] = gram_count * other_gram_count;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst vector_normal = Math.sqrt(sum_of_square_gram_counts);\n\n\t\t/** @type {MatchTuple[]} */\n\t\tlet results = [];\n\t\tlet match_score;\n\n\t\t// build a results list of [score, str]\n\t\tfor (const match_index in matches) {\n\t\t\tmatch_score = matches[match_index];\n\t\t\t// @ts-ignore no idea what this code is doing\n\t\t\tresults.push([match_score / (vector_normal * items[match_index][0]), items[match_index][1]]);\n\t\t}\n\n\t\tresults.sort(sort_descending);\n\n\t\t/** @type {MatchTuple[]} */\n\t\tlet new_results = [];\n\t\tconst end_index = Math.min(50, results.length);\n\t\t// truncate somewhat arbitrarily to 50\n\t\tfor (let i = 0; i < end_index; ++i) {\n\t\t\t// @ts-ignore no idea what this code is doing\n\t\t\tnew_results.push([_distance(results[i][1], normalized_value), results[i][1]]);\n\t\t}\n\t\tresults = new_results;\n\t\tresults.sort(sort_descending);\n\n\t\tnew_results = [];\n\t\tfor (let i = 0; i < results.length; ++i) {\n\t\t\tif (results[i][0] === results[0][0]) {\n\t\t\t\t// @ts-ignore no idea what this code is doing\n\t\t\t\tnew_results.push([results[i][0], this.exact_set[results[i][1]]]);\n\t\t\t}\n\t\t}\n\n\t\treturn new_results;\n\t}\n}\n\n/** @typedef {[score: number, match: string]} MatchTuple */\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/1-parse/utils/html.js",
    "content": "import entities from './entities.js';\n\nconst windows_1252 = [\n\t8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216,\n\t8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376\n];\n\n/**\n * @param {string} entity_name\n * @param {boolean} is_attribute_value\n */\nfunction reg_exp_entity(entity_name, is_attribute_value) {\n\t// https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n\t// doesn't decode the html entity which not ends with ; and next character is =, number or alphabet in attribute value.\n\tif (is_attribute_value && !entity_name.endsWith(';')) {\n\t\treturn `${entity_name}\\\\b(?!=)`;\n\t}\n\treturn entity_name;\n}\n\n/** @param {boolean} is_attribute_value */\nfunction get_entity_pattern(is_attribute_value) {\n\tconst reg_exp_num = '#(?:x[a-fA-F\\\\d]+|\\\\d+)(?:;)?';\n\tconst reg_exp_entities = Object.keys(entities).map(\n\t\t/** @param {any} entity_name */ (entity_name) => reg_exp_entity(entity_name, is_attribute_value)\n\t);\n\n\tconst entity_pattern = new RegExp(`&(${reg_exp_num}|${reg_exp_entities.join('|')})`, 'g');\n\n\treturn entity_pattern;\n}\n\nconst entity_pattern_content = get_entity_pattern(false);\nconst entity_pattern_attr_value = get_entity_pattern(true);\n\n/**\n * @param {string} html\n * @param {boolean} is_attribute_value\n */\nexport function decode_character_references(html, is_attribute_value) {\n\tconst entity_pattern = is_attribute_value ? entity_pattern_attr_value : entity_pattern_content;\n\treturn html.replace(\n\t\tentity_pattern,\n\t\t/**\n\t\t * @param {any} match\n\t\t * @param {keyof typeof entities} entity\n\t\t */ (match, entity) => {\n\t\t\tlet code;\n\n\t\t\t// Handle named entities\n\t\t\tif (entity[0] !== '#') {\n\t\t\t\tcode = entities[entity];\n\t\t\t} else if (entity[1] === 'x') {\n\t\t\t\tcode = parseInt(entity.substring(2), 16);\n\t\t\t} else {\n\t\t\t\tcode = parseInt(entity.substring(1), 10);\n\t\t\t}\n\n\t\t\tif (!code) {\n\t\t\t\treturn match;\n\t\t\t}\n\n\t\t\treturn String.fromCodePoint(validate_code(code));\n\t\t}\n\t);\n}\n\nconst NUL = 0;\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\n// Also see: https://en.wikipedia.org/wiki/Plane_(Unicode)\n// Also see: https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream\n\n/** @param {number} code */\nfunction validate_code(code) {\n\t// line feed becomes generic whitespace\n\tif (code === 10) {\n\t\treturn 32;\n\t}\n\n\t// ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n\tif (code < 128) {\n\t\treturn code;\n\t}\n\n\t// code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n\t// to correct the mistake or we'll end up with missing € signs and so on\n\tif (code <= 159) {\n\t\treturn windows_1252[code - 128];\n\t}\n\n\t// basic multilingual plane\n\tif (code < 55296) {\n\t\treturn code;\n\t}\n\n\t// UTF-16 surrogate halves\n\tif (code <= 57343) {\n\t\treturn NUL;\n\t}\n\n\t// rest of the basic multilingual plane\n\tif (code <= 65535) {\n\t\treturn code;\n\t}\n\n\t// supplementary multilingual plane 0x10000 - 0x1ffff\n\tif (code >= 65536 && code <= 131071) {\n\t\treturn code;\n\t}\n\n\t// supplementary ideographic plane 0x20000 - 0x2ffff\n\tif (code >= 131072 && code <= 196607) {\n\t\treturn code;\n\t}\n\n\t// supplementary special-purpose plane 0xe0000 - 0xe07f and 0xe0100 - 0xe01ef\n\tif ((code >= 917504 && code <= 917631) || (code >= 917760 && code <= 917999)) {\n\t\treturn code;\n\t}\n\n\treturn NUL;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/css/css-analyze.js",
    "content": "/** @import { ComponentAnalysis } from '../../types.js' */\n/** @import { AST } from '#compiler' */\n/** @import { Visitors } from 'zimmerframe' */\nimport { walk } from 'zimmerframe';\nimport * as e from '../../../errors.js';\nimport { is_keyframes_node } from '../../css.js';\nimport { is_global, is_unscoped_pseudo_class } from './utils.js';\n\n/**\n * @typedef {{\n *   keyframes: string[];\n *   rule: AST.CSS.Rule | null;\n *   analysis: ComponentAnalysis;\n * }} CssState\n */\n\n/**\n * @typedef {Visitors<AST.CSS.Node, CssState>} CssVisitors\n */\n\n/**\n * True if is `:global`\n * @param {AST.CSS.SimpleSelector} simple_selector\n */\nfunction is_global_block_selector(simple_selector) {\n\treturn (\n\t\tsimple_selector.type === 'PseudoClassSelector' &&\n\t\tsimple_selector.name === 'global' &&\n\t\tsimple_selector.args === null\n\t);\n}\n\n/**\n * @param {AST.SvelteNode[]} path\n */\nfunction is_unscoped(path) {\n\treturn path\n\t\t.filter((node) => node.type === 'Rule')\n\t\t.every((node) => node.metadata.has_global_selectors);\n}\n\n/**\n *\n * @param {Array<AST.CSS.Node>} path\n */\nfunction is_in_global_block(path) {\n\treturn path.some((node) => node.type === 'Rule' && node.metadata.is_global_block);\n}\n\n/** @type {CssVisitors} */\nconst css_visitors = {\n\tAtrule(node, context) {\n\t\tif (is_keyframes_node(node)) {\n\t\t\tif (!node.prelude.startsWith('-global-') && !is_in_global_block(context.path)) {\n\t\t\t\tcontext.state.keyframes.push(node.prelude);\n\t\t\t} else if (node.prelude.startsWith('-global-')) {\n\t\t\t\t// we don't check if the block.children.length because the keyframe is still added even if empty\n\t\t\t\tcontext.state.analysis.css.has_global ||= is_unscoped(context.path);\n\t\t\t}\n\t\t}\n\n\t\tcontext.next();\n\t},\n\tComplexSelector(node, context) {\n\t\tcontext.next(); // analyse relevant selectors first\n\n\t\t{\n\t\t\tconst global = node.children.find(is_global);\n\n\t\t\tif (global) {\n\t\t\t\tconst is_nested = context.path.at(-2)?.type === 'PseudoClassSelector';\n\t\t\t\tif (is_nested && !global.selectors[0].args) {\n\t\t\t\t\te.css_global_block_invalid_placement(global.selectors[0]);\n\t\t\t\t}\n\n\t\t\t\tconst idx = node.children.indexOf(global);\n\t\t\t\tif (global.selectors[0].args !== null && idx !== 0 && idx !== node.children.length - 1) {\n\t\t\t\t\t// ensure `:global(...)` is not used in the middle of a selector (but multiple `global(...)` in sequence are ok)\n\t\t\t\t\tfor (let i = idx + 1; i < node.children.length; i++) {\n\t\t\t\t\t\tif (!is_global(node.children[i])) {\n\t\t\t\t\t\t\te.css_global_invalid_placement(global.selectors[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// ensure `:global(...)` do not lead to invalid css after `:global()` is removed\n\t\tfor (const relative_selector of node.children) {\n\t\t\tfor (let i = 0; i < relative_selector.selectors.length; i++) {\n\t\t\t\tconst selector = relative_selector.selectors[i];\n\n\t\t\t\tif (selector.type === 'PseudoClassSelector' && selector.name === 'global') {\n\t\t\t\t\tconst child = selector.args?.children[0].children[0];\n\t\t\t\t\t// ensure `:global(element)` to be at the first position in a compound selector\n\t\t\t\t\tif (child?.selectors[0].type === 'TypeSelector' && i !== 0) {\n\t\t\t\t\t\te.css_global_invalid_selector_list(selector);\n\t\t\t\t\t}\n\n\t\t\t\t\t// ensure `:global(.class)` is not followed by a type selector, eg: `:global(.class)element`\n\t\t\t\t\tif (relative_selector.selectors[i + 1]?.type === 'TypeSelector') {\n\t\t\t\t\t\te.css_type_selector_invalid_placement(relative_selector.selectors[i + 1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// ensure `:global(...)`contains a single selector\n\t\t\t\t\t// (standalone :global() with multiple selectors is OK)\n\t\t\t\t\tif (\n\t\t\t\t\t\tselector.args !== null &&\n\t\t\t\t\t\tselector.args.children.length > 1 &&\n\t\t\t\t\t\t(node.children.length > 1 || relative_selector.selectors.length > 1)\n\t\t\t\t\t) {\n\t\t\t\t\t\te.css_global_invalid_selector(selector);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnode.metadata.rule = context.state.rule;\n\n\t\tnode.metadata.is_global = node.children.every(\n\t\t\t({ metadata }) => metadata.is_global || metadata.is_global_like\n\t\t);\n\n\t\tnode.metadata.used ||= node.metadata.is_global;\n\n\t\tif (\n\t\t\tnode.metadata.rule?.metadata.parent_rule &&\n\t\t\tnode.children[0]?.selectors[0]?.type === 'NestingSelector'\n\t\t) {\n\t\t\tconst first = node.children[0]?.selectors[1];\n\t\t\tconst no_nesting_scope =\n\t\t\t\tfirst?.type !== 'PseudoClassSelector' || is_unscoped_pseudo_class(first);\n\t\t\tconst parent_is_global = node.metadata.rule.metadata.parent_rule.prelude.children.some(\n\t\t\t\t(child) => child.children.length === 1 && child.children[0].metadata.is_global\n\t\t\t);\n\t\t\t// mark `&:hover` in `:global(.foo) { &:hover { color: green }}` as used\n\t\t\tif (no_nesting_scope && parent_is_global) {\n\t\t\t\tnode.metadata.used = true;\n\t\t\t}\n\t\t}\n\t},\n\tRelativeSelector(node, context) {\n\t\tconst parent = /** @type {AST.CSS.ComplexSelector} */ (context.path.at(-1));\n\n\t\tif (\n\t\t\tnode.combinator != null &&\n\t\t\t!context.state.rule?.metadata.parent_rule &&\n\t\t\tparent.children[0] === node &&\n\t\t\tcontext.path.at(-3)?.type !== 'PseudoClassSelector'\n\t\t) {\n\t\t\te.css_selector_invalid(node.combinator);\n\t\t}\n\n\t\tnode.metadata.is_global = node.selectors.length >= 1 && is_global(node);\n\n\t\tif (\n\t\t\tnode.selectors.length >= 1 &&\n\t\t\tnode.selectors.every(\n\t\t\t\t(selector) =>\n\t\t\t\t\tselector.type === 'PseudoClassSelector' || selector.type === 'PseudoElementSelector'\n\t\t\t)\n\t\t) {\n\t\t\tconst first = node.selectors[0];\n\t\t\tnode.metadata.is_global_like ||=\n\t\t\t\t(first.type === 'PseudoClassSelector' && first.name === 'host') ||\n\t\t\t\t(first.type === 'PseudoElementSelector' &&\n\t\t\t\t\t[\n\t\t\t\t\t\t'view-transition',\n\t\t\t\t\t\t'view-transition-group',\n\t\t\t\t\t\t'view-transition-old',\n\t\t\t\t\t\t'view-transition-new',\n\t\t\t\t\t\t'view-transition-image-pair'\n\t\t\t\t\t].includes(first.name));\n\t\t}\n\n\t\tnode.metadata.is_global_like ||=\n\t\t\tnode.selectors.some(\n\t\t\t\t(child) => child.type === 'PseudoClassSelector' && child.name === 'root'\n\t\t\t) &&\n\t\t\t// :root.y:has(.x) is not a global selector because while .y is unscoped, .x inside `:has(...)` should be scoped\n\t\t\t!node.selectors.some((child) => child.type === 'PseudoClassSelector' && child.name === 'has');\n\n\t\tif (node.metadata.is_global_like || node.metadata.is_global) {\n\t\t\t// So that nested selectors like `:root:not(.x)` are not marked as unused\n\t\t\tfor (const child of node.selectors) {\n\t\t\t\twalk(/** @type {AST.CSS.Node} */ (child), null, {\n\t\t\t\t\tComplexSelector(node, context) {\n\t\t\t\t\t\tnode.metadata.used = true;\n\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tcontext.next();\n\t},\n\tRule(node, context) {\n\t\tnode.metadata.parent_rule = context.state.rule;\n\n\t\t// We gotta allow :global x, :global y because CSS preprocessors might generate that from :global { x, y {...} }\n\t\tfor (const complex_selector of node.prelude.children) {\n\t\t\tlet is_global_block = false;\n\n\t\t\tfor (let selector_idx = 0; selector_idx < complex_selector.children.length; selector_idx++) {\n\t\t\t\tconst child = complex_selector.children[selector_idx];\n\t\t\t\tconst idx = child.selectors.findIndex(is_global_block_selector);\n\n\t\t\t\tif (is_global_block) {\n\t\t\t\t\t// All selectors after :global are unscoped\n\t\t\t\t\tchild.metadata.is_global_like = true;\n\t\t\t\t}\n\n\t\t\t\tif (idx === 0) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tchild.selectors.length > 1 &&\n\t\t\t\t\t\tselector_idx === 0 &&\n\t\t\t\t\t\tnode.metadata.parent_rule === null\n\t\t\t\t\t) {\n\t\t\t\t\t\te.css_global_block_invalid_modifier_start(child.selectors[1]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// `child` starts with `:global`\n\t\t\t\t\t\tnode.metadata.is_global_block = is_global_block = true;\n\n\t\t\t\t\t\tfor (let i = 1; i < child.selectors.length; i++) {\n\t\t\t\t\t\t\twalk(/** @type {AST.CSS.Node} */ (child.selectors[i]), null, {\n\t\t\t\t\t\t\t\tComplexSelector(node) {\n\t\t\t\t\t\t\t\t\tnode.metadata.used = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (child.combinator && child.combinator.name !== ' ') {\n\t\t\t\t\t\t\te.css_global_block_invalid_combinator(child, child.combinator.name);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst declaration = node.block.children.find((child) => child.type === 'Declaration');\n\t\t\t\t\t\tconst is_lone_global =\n\t\t\t\t\t\t\tcomplex_selector.children.length === 1 &&\n\t\t\t\t\t\t\tcomplex_selector.children[0].selectors.length === 1; // just `:global`, not e.g. `:global x`\n\n\t\t\t\t\t\tif (is_lone_global && node.prelude.children.length > 1) {\n\t\t\t\t\t\t\t// `:global, :global x { z { ... } }` would become `x { z { ... } }` which means `z` is always\n\t\t\t\t\t\t\t// constrained by `x`, which is not what the user intended\n\t\t\t\t\t\t\te.css_global_block_invalid_list(node.prelude);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdeclaration &&\n\t\t\t\t\t\t\t// :global { color: red; } is invalid, but foo :global { color: red; } is valid\n\t\t\t\t\t\t\tnode.prelude.children.length === 1 &&\n\t\t\t\t\t\t\tis_lone_global\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\te.css_global_block_invalid_declaration(declaration);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (idx !== -1) {\n\t\t\t\t\te.css_global_block_invalid_modifier(child.selectors[idx]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.metadata.is_global_block && !is_global_block) {\n\t\t\t\te.css_global_block_invalid_list(node.prelude);\n\t\t\t}\n\t\t}\n\n\t\tconst state = { ...context.state, rule: node };\n\n\t\t// visit selector list first, to populate child selector metadata\n\t\tcontext.visit(node.prelude, state);\n\n\t\tfor (const selector of node.prelude.children) {\n\t\t\tnode.metadata.has_global_selectors ||= selector.metadata.is_global;\n\t\t\tnode.metadata.has_local_selectors ||= !selector.metadata.is_global;\n\t\t}\n\n\t\t// if this rule has a ComplexSelector whose RelativeSelector children are all\n\t\t// `:global(...)`, and the rule contains declarations (rather than just\n\t\t// nested rules) then the component as a whole includes global CSS\n\t\tcontext.state.analysis.css.has_global ||=\n\t\t\tnode.metadata.has_global_selectors &&\n\t\t\tnode.block.children.filter((child) => child.type === 'Declaration').length > 0 &&\n\t\t\tis_unscoped(context.path);\n\n\t\t// visit block list, so parent rule metadata is populated\n\t\tcontext.visit(node.block, state);\n\t},\n\tNestingSelector(node, context) {\n\t\tconst rule = /** @type {AST.CSS.Rule} */ (context.state.rule);\n\t\tconst parent_rule = rule.metadata.parent_rule;\n\n\t\tif (!parent_rule) {\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/CSS/Nesting_selector#using_outside_nested_rule\n\t\t\tconst children = rule.prelude.children;\n\t\t\tconst selectors = children[0].children[0].selectors;\n\t\t\tif (\n\t\t\t\tchildren.length > 1 ||\n\t\t\t\tselectors.length > 1 ||\n\t\t\t\tselectors[0].type !== 'PseudoClassSelector' ||\n\t\t\t\tselectors[0].name !== 'global' ||\n\t\t\t\tselectors[0].args?.children[0]?.children[0].selectors[0] !== node\n\t\t\t) {\n\t\t\t\te.css_nesting_selector_invalid_placement(node);\n\t\t\t}\n\t\t} else if (\n\t\t\t// :global { &.foo { ... } } is invalid\n\t\t\tparent_rule.metadata.is_global_block &&\n\t\t\t!parent_rule.metadata.parent_rule &&\n\t\t\tparent_rule.prelude.children[0].children.length === 1 &&\n\t\t\tparent_rule.prelude.children[0].children[0].selectors.length === 1\n\t\t) {\n\t\t\te.css_global_block_invalid_modifier_start(node);\n\t\t}\n\n\t\tcontext.next();\n\t}\n};\n\n/**\n * @param {AST.CSS.StyleSheet} stylesheet\n * @param {ComponentAnalysis} analysis\n */\nexport function analyze_css(stylesheet, analysis) {\n\t/** @type {CssState} */\n\tconst css_state = {\n\t\tkeyframes: analysis.css.keyframes,\n\t\trule: null,\n\t\tanalysis\n\t};\n\n\twalk(stylesheet, css_state, css_visitors);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js",
    "content": "/** @import * as Compiler from '#compiler' */\nimport { walk } from 'zimmerframe';\nimport {\n\tget_parent_rules,\n\tget_possible_values,\n\tis_outer_global,\n\tis_unscoped_pseudo_class\n} from './utils.js';\nimport { regex_ends_with_whitespace, regex_starts_with_whitespace } from '../../patterns.js';\nimport { get_attribute_chunks, is_text_attribute } from '../../../utils/ast.js';\n\n/** @typedef {typeof NODE_PROBABLY_EXISTS | typeof NODE_DEFINITELY_EXISTS} NodeExistsValue */\n/** @typedef {typeof FORWARD | typeof BACKWARD} Direction */\n\nconst NODE_PROBABLY_EXISTS = 0;\nconst NODE_DEFINITELY_EXISTS = 1;\nconst FORWARD = 0;\nconst BACKWARD = 1;\n\nconst whitelist_attribute_selector = new Map([\n\t['details', ['open']],\n\t['dialog', ['open']]\n]);\n\n/**\n * HTML attributes whose enumerated values are case-insensitive per the HTML spec.\n * CSS attribute selectors match these values case-insensitively in HTML documents.\n * @see {@link https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors HTML spec}\n */\nconst case_insensitive_attributes = new Set([\n\t'accept-charset',\n\t'autocapitalize',\n\t'autocomplete',\n\t'behavior',\n\t'charset',\n\t'crossorigin',\n\t'decoding',\n\t'dir',\n\t'direction',\n\t'draggable',\n\t'enctype',\n\t'enterkeyhint',\n\t'fetchpriority',\n\t'formenctype',\n\t'formmethod',\n\t'formtarget',\n\t'hidden',\n\t'http-equiv',\n\t'inputmode',\n\t'kind',\n\t'loading',\n\t'method',\n\t'preload',\n\t'referrerpolicy',\n\t'rel',\n\t'rev',\n\t'role',\n\t'rules',\n\t'scope',\n\t'shape',\n\t'spellcheck',\n\t'target',\n\t'translate',\n\t'type',\n\t'valign',\n\t'wrap'\n]);\n\n/** @type {Compiler.AST.CSS.Combinator} */\nconst descendant_combinator = {\n\ttype: 'Combinator',\n\tname: ' ',\n\tstart: -1,\n\tend: -1\n};\n\n/** @type {Compiler.AST.CSS.RelativeSelector} */\nconst nesting_selector = {\n\ttype: 'RelativeSelector',\n\tstart: -1,\n\tend: -1,\n\tcombinator: null,\n\tselectors: [\n\t\t{\n\t\t\ttype: 'NestingSelector',\n\t\t\tname: '&',\n\t\t\tstart: -1,\n\t\t\tend: -1\n\t\t}\n\t],\n\tmetadata: {\n\t\tis_global: false,\n\t\tis_global_like: false,\n\t\tscoped: false\n\t}\n};\n\n/** @type {Compiler.AST.CSS.RelativeSelector} */\nconst any_selector = {\n\ttype: 'RelativeSelector',\n\tstart: -1,\n\tend: -1,\n\tcombinator: null,\n\tselectors: [\n\t\t{\n\t\t\ttype: 'TypeSelector',\n\t\t\tname: '*',\n\t\t\tstart: -1,\n\t\t\tend: -1\n\t\t}\n\t],\n\tmetadata: {\n\t\tis_global: false,\n\t\tis_global_like: false,\n\t\tscoped: false\n\t}\n};\n\n/**\n * Snippets encountered already (avoids infinite loops)\n * @type {Set<Compiler.AST.SnippetBlock>}\n */\nconst seen = new Set();\n\n/**\n *\n * @param {Compiler.AST.CSS.StyleSheet} stylesheet\n * @param {Iterable<Compiler.AST.RegularElement | Compiler.AST.SvelteElement>} elements\n */\nexport function prune(stylesheet, elements) {\n\twalk(/** @type {Compiler.AST.CSS.Node} */ (stylesheet), null, {\n\t\tRule(node, context) {\n\t\t\tif (node.metadata.is_global_block) {\n\t\t\t\tcontext.visit(node.prelude);\n\t\t\t} else {\n\t\t\t\tcontext.next();\n\t\t\t}\n\t\t},\n\t\tComplexSelector(node) {\n\t\t\tconst selectors = get_relative_selectors(node);\n\n\t\t\tfor (const element of elements) {\n\t\t\t\tseen.clear();\n\n\t\t\t\tif (\n\t\t\t\t\tapply_selector(\n\t\t\t\t\t\tselectors,\n\t\t\t\t\t\t/** @type {Compiler.AST.CSS.Rule} */ (node.metadata.rule),\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tBACKWARD\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tnode.metadata.used = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// note: we don't call context.next() here, we only recurse into\n\t\t\t// selectors that don't belong to rules (i.e. inside `:is(...)` etc)\n\t\t\t// when we encounter them below\n\t\t}\n\t});\n}\n\n/**\n * Retrieves the relative selectors (minus the trailing globals) from a complex selector.\n * Also searches them for any existing `&` selectors and adds one if none are found.\n * This ensures we traverse up to the parent rule when the inner selectors match and we're\n * trying to see if the parent rule also matches.\n * @param {Compiler.AST.CSS.ComplexSelector} node\n */\nfunction get_relative_selectors(node) {\n\tconst selectors = truncate(node);\n\n\tif (node.metadata.rule?.metadata.parent_rule && selectors.length > 0) {\n\t\tlet has_explicit_nesting_selector = false;\n\n\t\t// nesting could be inside pseudo classes like :is, :has or :where\n\t\tfor (let selector of selectors) {\n\t\t\twalk(selector, null, {\n\t\t\t\t// @ts-ignore\n\t\t\t\tNestingSelector() {\n\t\t\t\t\thas_explicit_nesting_selector = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// if we found one we can break from the others\n\t\t\tif (has_explicit_nesting_selector) break;\n\t\t}\n\n\t\tif (!has_explicit_nesting_selector) {\n\t\t\tif (selectors[0].combinator === null) {\n\t\t\t\tselectors[0] = {\n\t\t\t\t\t...selectors[0],\n\t\t\t\t\tcombinator: descendant_combinator\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tselectors.unshift(nesting_selector);\n\t\t}\n\t}\n\n\treturn selectors;\n}\n\n/**\n * Discard trailing `:global(...)` selectors, these are unused for scoping purposes\n * @param {Compiler.AST.CSS.ComplexSelector} node\n */\nfunction truncate(node) {\n\tconst i = node.children.findLastIndex(({ metadata, selectors }) => {\n\t\tconst first = selectors[0];\n\t\treturn (\n\t\t\t// not after a :global selector\n\t\t\t!metadata.is_global_like &&\n\t\t\t!(first.type === 'PseudoClassSelector' && first.name === 'global' && first.args === null) &&\n\t\t\t// not a :global(...) without a :has/is/where(...) modifier that is scoped\n\t\t\t!metadata.is_global\n\t\t);\n\t});\n\n\treturn node.children.slice(0, i + 1).map((child) => {\n\t\t// In case of `:root.y:has(...)`, `y` is unscoped, but everything in `:has(...)` should be scoped (if not global).\n\t\t// To properly accomplish that, we gotta filter out all selector types except `:has`.\n\t\tconst root = child.selectors.find((s) => s.type === 'PseudoClassSelector' && s.name === 'root');\n\t\tif (!root || child.metadata.is_global_like) return child;\n\n\t\treturn {\n\t\t\t...child,\n\t\t\tselectors: child.selectors.filter((s) => s.type === 'PseudoClassSelector' && s.name === 'has')\n\t\t};\n\t});\n}\n\n/**\n * @param {Compiler.AST.CSS.RelativeSelector[]} relative_selectors\n * @param {Compiler.AST.CSS.Rule} rule\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement} element\n * @param {Direction} direction\n * @param {number} [from]\n * @param {number} [to]\n * @returns {boolean}\n */\nfunction apply_selector(\n\trelative_selectors,\n\trule,\n\telement,\n\tdirection,\n\tfrom = 0,\n\tto = relative_selectors.length\n) {\n\tif (from >= to) return false;\n\n\tconst selector_index = direction === FORWARD ? from : to - 1;\n\tconst relative_selector = relative_selectors[selector_index];\n\tconst rest_from = direction === FORWARD ? from + 1 : from;\n\tconst rest_to = direction === FORWARD ? to : to - 1;\n\n\tconst matched =\n\t\trelative_selector_might_apply_to_node(relative_selector, rule, element, direction) &&\n\t\tapply_combinator(\n\t\t\trelative_selector,\n\t\t\trelative_selectors,\n\t\t\trest_from,\n\t\t\trest_to,\n\t\t\trule,\n\t\t\telement,\n\t\t\tdirection\n\t\t);\n\n\tif (matched) {\n\t\tif (!is_outer_global(relative_selector)) {\n\t\t\trelative_selector.metadata.scoped = true;\n\t\t}\n\n\t\telement.metadata.scoped = true;\n\t}\n\n\treturn matched;\n}\n\n/**\n * @param {Compiler.AST.CSS.RelativeSelector} relative_selector\n * @param {Compiler.AST.CSS.RelativeSelector[]} relative_selectors\n * @param {number} from\n * @param {number} to\n * @param {Compiler.AST.CSS.Rule} rule\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.RenderTag | Compiler.AST.Component | Compiler.AST.SvelteComponent | Compiler.AST.SvelteSelf} node\n * @param {Direction} direction\n * @returns {boolean}\n */\nfunction apply_combinator(relative_selector, relative_selectors, from, to, rule, node, direction) {\n\tconst combinator =\n\t\tdirection == FORWARD\n\t\t\t? from < to\n\t\t\t\t? relative_selectors[from].combinator\n\t\t\t\t: undefined\n\t\t\t: relative_selector.combinator;\n\tif (!combinator) return true;\n\n\tswitch (combinator.name) {\n\t\tcase ' ':\n\t\tcase '>': {\n\t\t\tconst is_adjacent = combinator.name === '>';\n\t\t\tconst parents =\n\t\t\t\tdirection === FORWARD\n\t\t\t\t\t? get_descendant_elements(node, is_adjacent)\n\t\t\t\t\t: get_ancestor_elements(node, is_adjacent);\n\t\t\tlet parent_matched = false;\n\n\t\t\tfor (const parent of parents) {\n\t\t\t\tif (apply_selector(relative_selectors, rule, parent, direction, from, to)) {\n\t\t\t\t\tparent_matched = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\tparent_matched ||\n\t\t\t\t(direction === BACKWARD &&\n\t\t\t\t\t(!is_adjacent || parents.length === 0) &&\n\t\t\t\t\tevery_is_global(relative_selectors, from, to, rule))\n\t\t\t);\n\t\t}\n\n\t\tcase '+':\n\t\tcase '~': {\n\t\t\tconst siblings = get_possible_element_siblings(node, direction, combinator.name === '+');\n\n\t\t\tlet sibling_matched = false;\n\n\t\t\tfor (const possible_sibling of siblings.keys()) {\n\t\t\t\tif (\n\t\t\t\t\tpossible_sibling.type === 'RenderTag' ||\n\t\t\t\t\tpossible_sibling.type === 'SlotElement' ||\n\t\t\t\t\tpossible_sibling.type === 'Component'\n\t\t\t\t) {\n\t\t\t\t\t// `{@render foo()}<p>foo</p>` with `:global(.x) + p` is a match\n\t\t\t\t\tif (to - from === 1 && relative_selectors[from].metadata.is_global) {\n\t\t\t\t\t\tsibling_matched = true;\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tapply_selector(relative_selectors, rule, possible_sibling, direction, from, to)\n\t\t\t\t) {\n\t\t\t\t\tsibling_matched = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\tsibling_matched ||\n\t\t\t\t(direction === BACKWARD &&\n\t\t\t\t\tget_element_parent(node) === null &&\n\t\t\t\t\tevery_is_global(relative_selectors, from, to, rule))\n\t\t\t);\n\t\t}\n\n\t\tdefault:\n\t\t\t// TODO other combinators\n\t\t\treturn true;\n\t}\n}\n\n/**\n * @param {Compiler.AST.CSS.RelativeSelector[]} relative_selectors\n * @param {number} from\n * @param {number} to\n * @param {Compiler.AST.CSS.Rule} rule\n * @returns {boolean}\n */\nfunction every_is_global(relative_selectors, from, to, rule) {\n\tfor (let i = from; i < to; i++) {\n\t\tif (!is_global(relative_selectors[i], rule)) return false;\n\t}\n\treturn true;\n}\n\n/**\n * Returns `true` if the relative selector is global, meaning\n * it's a `:global(...)` or unscopeable selector, or\n * is an `:is(...)` or `:where(...)` selector that contains\n * a global selector\n * @param {Compiler.AST.CSS.RelativeSelector} selector\n * @param {Compiler.AST.CSS.Rule} rule\n * @returns {boolean}\n */\nfunction is_global(selector, rule) {\n\tif (selector.metadata.is_global || selector.metadata.is_global_like) {\n\t\treturn true;\n\t}\n\n\tlet explicitly_global = false;\n\n\tfor (const s of selector.selectors) {\n\t\t/** @type {Compiler.AST.CSS.SelectorList | null} */\n\t\tlet selector_list = null;\n\t\tlet can_be_global = false;\n\t\tlet owner = rule;\n\n\t\tif (s.type === 'PseudoClassSelector') {\n\t\t\tif ((s.name === 'is' || s.name === 'where') && s.args) {\n\t\t\t\tselector_list = s.args;\n\t\t\t} else {\n\t\t\t\tcan_be_global = is_unscoped_pseudo_class(s);\n\t\t\t}\n\t\t}\n\n\t\tif (s.type === 'NestingSelector') {\n\t\t\towner = /** @type {Compiler.AST.CSS.Rule} */ (rule.metadata.parent_rule);\n\t\t\tselector_list = owner.prelude;\n\t\t}\n\n\t\tconst has_global_selectors = !!selector_list?.children.some((complex_selector) => {\n\t\t\treturn complex_selector.children.every((relative_selector) =>\n\t\t\t\tis_global(relative_selector, owner)\n\t\t\t);\n\t\t});\n\t\texplicitly_global ||= has_global_selectors;\n\n\t\tif (!has_global_selectors && !can_be_global) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn explicitly_global || selector.selectors.length === 0;\n}\n\nconst regex_backslash_and_following_character = /\\\\(.)/g;\n\n/**\n * Ensure that `element` satisfies each simple selector in `relative_selector`\n *\n * @param {Compiler.AST.CSS.RelativeSelector} relative_selector\n * @param {Compiler.AST.CSS.Rule} rule\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement} element\n * @param {Direction} direction\n * @returns {boolean}\n */\nfunction relative_selector_might_apply_to_node(relative_selector, rule, element, direction) {\n\t/** @type {boolean | undefined} */\n\tlet include_self;\n\n\tfor (const selector of relative_selector.selectors) {\n\t\t// Handle :has(...) selectors inline to avoid allocating temporary arrays\n\t\tif (selector.type === 'PseudoClassSelector' && selector.name === 'has' && selector.args) {\n\t\t\t// Lazy-compute include_self on first :has encounter\n\t\t\tif (include_self === undefined) {\n\t\t\t\t// If this is a :has inside a global selector, we gotta include the element itself, too,\n\t\t\t\t// because the global selector might be for an element that's outside the component,\n\t\t\t\t// e.g. :root:has(.scoped), :global(.foo):has(.scoped), or :root { &:has(.scoped) {} }\n\t\t\t\tconst rules = get_parent_rules(rule);\n\t\t\t\tinclude_self =\n\t\t\t\t\trules.some((r) =>\n\t\t\t\t\t\tr.prelude.children.some((c) => c.children.some((s) => is_global(s, r)))\n\t\t\t\t\t) ||\n\t\t\t\t\trules[rules.length - 1].prelude.children.some((c) =>\n\t\t\t\t\t\tc.children.some((r) =>\n\t\t\t\t\t\t\tr.selectors.some(\n\t\t\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t\t\ts.type === 'PseudoClassSelector' &&\n\t\t\t\t\t\t\t\t\t(s.name === 'root' || (s.name === 'global' && s.args))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\t// :has(...) is special in that it means \"look downwards in the CSS tree\". Since our matching algorithm goes\n\t\t\t// upwards and back-to-front, we need to first check the selectors inside :has(...), then check the rest of the\n\t\t\t// selector in a way that is similar to ancestor matching. In a sense, we're treating `.x:has(.y)` as `.x .y`.\n\t\t\tconst complex_selectors = /** @type {Compiler.AST.CSS.SelectorList} */ (selector.args)\n\t\t\t\t.children;\n\t\t\tlet matched = false;\n\n\t\t\tfor (const complex_selector of complex_selectors) {\n\t\t\t\tconst [first, ...rest] = truncate(complex_selector);\n\t\t\t\t// if it was just a :global(...)\n\t\t\t\tif (!first) {\n\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (include_self) {\n\t\t\t\t\tconst selector_including_self = [\n\t\t\t\t\t\tfirst.combinator ? { ...first, combinator: null } : first,\n\t\t\t\t\t\t...rest\n\t\t\t\t\t];\n\t\t\t\t\tif (apply_selector(selector_including_self, rule, element, FORWARD)) {\n\t\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\t\tmatched = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst selector_excluding_self = [\n\t\t\t\t\tany_selector,\n\t\t\t\t\tfirst.combinator ? first : { ...first, combinator: descendant_combinator },\n\t\t\t\t\t...rest\n\t\t\t\t];\n\t\t\t\tif (apply_selector(selector_excluding_self, rule, element, FORWARD)) {\n\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\tmatched = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!matched) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (selector.type === 'Percentage' || selector.type === 'Nth') continue;\n\n\t\tconst name = selector.name.includes('\\\\')\n\t\t\t? selector.name.replace(regex_backslash_and_following_character, '$1')\n\t\t\t: selector.name;\n\n\t\tswitch (selector.type) {\n\t\t\tcase 'PseudoClassSelector': {\n\t\t\t\tif (name === 'host' || name === 'root') return false;\n\n\t\t\t\tif (\n\t\t\t\t\tname === 'global' &&\n\t\t\t\t\tselector.args !== null &&\n\t\t\t\t\trelative_selector.selectors.length === 1\n\t\t\t\t) {\n\t\t\t\t\tconst args = selector.args;\n\t\t\t\t\tconst complex_selector = args.children[0];\n\t\t\t\t\treturn apply_selector(complex_selector.children, rule, element, BACKWARD);\n\t\t\t\t}\n\n\t\t\t\t// We came across a :global, everything beyond it is global and therefore a potential match\n\t\t\t\tif (name === 'global' && selector.args === null) return true;\n\n\t\t\t\t// :not(...) contents should stay unscoped. Scoping them would achieve the opposite of what we want,\n\t\t\t\t// because they are then _more_ likely to bleed out of the component. The exception is complex selectors\n\t\t\t\t// with descendants, in which case we scope them all.\n\t\t\t\tif (name === 'not' && selector.args) {\n\t\t\t\t\tfor (const complex_selector of selector.args.children) {\n\t\t\t\t\t\twalk(complex_selector, null, {\n\t\t\t\t\t\t\tComplexSelector(node, context) {\n\t\t\t\t\t\t\t\tnode.metadata.used = true;\n\t\t\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst relative = truncate(complex_selector);\n\n\t\t\t\t\t\tif (complex_selector.children.length > 1) {\n\t\t\t\t\t\t\t// foo:not(bar foo) means that bar is an ancestor of foo (side note: ending with foo is the only way the selector make sense).\n\t\t\t\t\t\t\t// We can't fully check if that actually matches with our current algorithm, so we just assume it does.\n\t\t\t\t\t\t\t// The result may not match a real element, so the only drawback is the missing prune.\n\t\t\t\t\t\t\tfor (const selector of relative) {\n\t\t\t\t\t\t\t\tselector.metadata.scoped = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t/** @type {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | null} */\n\t\t\t\t\t\t\tlet el = element;\n\t\t\t\t\t\t\twhile (el) {\n\t\t\t\t\t\t\t\tel.metadata.scoped = true;\n\t\t\t\t\t\t\t\tel = get_element_parent(el);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ((name === 'is' || name === 'where') && selector.args) {\n\t\t\t\t\tlet matched = false;\n\n\t\t\t\t\tfor (const complex_selector of selector.args.children) {\n\t\t\t\t\t\tconst relative = truncate(complex_selector);\n\t\t\t\t\t\tconst is_global = relative.length === 0;\n\n\t\t\t\t\t\tif (is_global) {\n\t\t\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\t\t\tmatched = true;\n\t\t\t\t\t\t} else if (apply_selector(relative, rule, element, BACKWARD)) {\n\t\t\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\t\t\tmatched = true;\n\t\t\t\t\t\t} else if (complex_selector.children.length > 1 && (name == 'is' || name == 'where')) {\n\t\t\t\t\t\t\t// foo :is(bar baz) can also mean that bar is an ancestor of foo, and baz a descendant.\n\t\t\t\t\t\t\t// We can't fully check if that actually matches with our current algorithm, so we just assume it does.\n\t\t\t\t\t\t\t// The result may not match a real element, so the only drawback is the missing prune.\n\t\t\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\t\t\tmatched = true;\n\t\t\t\t\t\t\tfor (const selector of relative) {\n\t\t\t\t\t\t\t\tselector.metadata.scoped = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!matched) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'PseudoElementSelector': {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'AttributeSelector': {\n\t\t\t\tconst whitelisted = whitelist_attribute_selector.get(element.name.toLowerCase());\n\t\t\t\tif (\n\t\t\t\t\t!whitelisted?.includes(selector.name.toLowerCase()) &&\n\t\t\t\t\t!attribute_matches(\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tselector.name,\n\t\t\t\t\t\tselector.value && unquote(selector.value),\n\t\t\t\t\t\tselector.matcher,\n\t\t\t\t\t\t(selector.flags?.includes('i') ?? false) ||\n\t\t\t\t\t\t\t(!selector.flags?.includes('s') &&\n\t\t\t\t\t\t\t\tcase_insensitive_attributes.has(selector.name.toLowerCase()))\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'ClassSelector': {\n\t\t\t\tif (!attribute_matches(element, 'class', name, '~=', false)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'IdSelector': {\n\t\t\t\tif (!attribute_matches(element, 'id', name, '=', false)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'TypeSelector': {\n\t\t\t\tif (\n\t\t\t\t\telement.name.toLowerCase() !== name.toLowerCase() &&\n\t\t\t\t\tname !== '*' &&\n\t\t\t\t\telement.type !== 'SvelteElement'\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'NestingSelector': {\n\t\t\t\tlet matched = false;\n\n\t\t\t\tconst parent = /** @type {Compiler.AST.CSS.Rule} */ (rule.metadata.parent_rule);\n\n\t\t\t\tfor (const complex_selector of parent.prelude.children) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tapply_selector(get_relative_selectors(complex_selector), parent, element, direction) ||\n\t\t\t\t\t\tcomplex_selector.children.every((s) => is_global(s, parent))\n\t\t\t\t\t) {\n\t\t\t\t\t\tcomplex_selector.metadata.used = true;\n\t\t\t\t\t\tmatched = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// possible match\n\treturn true;\n}\n\n/**\n * @param {any} operator\n * @param {any} expected_value\n * @param {any} case_insensitive\n * @param {any} value\n */\nfunction test_attribute(operator, expected_value, case_insensitive, value) {\n\tif (case_insensitive) {\n\t\texpected_value = expected_value.toLowerCase();\n\t\tvalue = value.toLowerCase();\n\t}\n\tswitch (operator) {\n\t\tcase '=':\n\t\t\treturn value === expected_value;\n\t\tcase '~=':\n\t\t\treturn value.split(/\\s/).includes(expected_value);\n\t\tcase '|=':\n\t\t\treturn `${value}-`.startsWith(`${expected_value}-`);\n\t\tcase '^=':\n\t\t\treturn value.startsWith(expected_value);\n\t\tcase '$=':\n\t\t\treturn value.endsWith(expected_value);\n\t\tcase '*=':\n\t\t\treturn value.includes(expected_value);\n\t\tdefault:\n\t\t\tthrow new Error(\"this shouldn't happen\");\n\t}\n}\n\n/**\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement} node\n * @param {string} name\n * @param {string | null} expected_value\n * @param {string | null} operator\n * @param {boolean} case_insensitive\n */\nfunction attribute_matches(node, name, expected_value, operator, case_insensitive) {\n\tconst name_lower = name.toLowerCase();\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'SpreadAttribute') return true;\n\t\tif (attribute.type === 'BindDirective' && attribute.name === name) return true;\n\t\t// match attributes against the corresponding directive but bail out on exact matching\n\t\tif (attribute.type === 'StyleDirective' && name_lower === 'style') return true;\n\t\tif (attribute.type === 'ClassDirective' && name_lower === 'class') {\n\t\t\tif (operator === '~=') {\n\t\t\t\tif (attribute.name === expected_value) return true;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (attribute.type !== 'Attribute') continue;\n\t\tif (attribute.name.toLowerCase() !== name_lower) continue;\n\n\t\tif (attribute.value === true) return operator === null;\n\t\tif (expected_value === null) return true;\n\n\t\tif (is_text_attribute(attribute)) {\n\t\t\tconst matches = test_attribute(\n\t\t\t\toperator,\n\t\t\t\texpected_value,\n\t\t\t\tcase_insensitive,\n\t\t\t\tattribute.value[0].data\n\t\t\t);\n\t\t\t// continue if we still may match against a class/style directive\n\t\t\tif (!matches && (name_lower === 'class' || name_lower === 'style')) continue;\n\t\t\treturn matches;\n\t\t}\n\n\t\tconst chunks = get_attribute_chunks(attribute.value);\n\t\tconst possible_values = new Set();\n\n\t\t/** @type {string[]} */\n\t\tlet prev_values = [];\n\t\tfor (const chunk of chunks) {\n\t\t\tconst current_possible_values = get_possible_values(chunk, name_lower === 'class');\n\n\t\t\t// impossible to find out all combinations\n\t\t\tif (!current_possible_values) return true;\n\n\t\t\tif (prev_values.length > 0) {\n\t\t\t\t/** @type {string[]} */\n\t\t\t\tconst start_with_space = [];\n\n\t\t\t\t/** @type {string[]} */\n\t\t\t\tconst remaining = [];\n\n\t\t\t\tcurrent_possible_values.forEach((current_possible_value) => {\n\t\t\t\t\tif (regex_starts_with_whitespace.test(current_possible_value)) {\n\t\t\t\t\t\tstart_with_space.push(current_possible_value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tremaining.push(current_possible_value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (remaining.length > 0) {\n\t\t\t\t\tif (start_with_space.length > 0) {\n\t\t\t\t\t\tprev_values.forEach((prev_value) => possible_values.add(prev_value));\n\t\t\t\t\t}\n\n\t\t\t\t\t/** @type {string[]} */\n\t\t\t\t\tconst combined = [];\n\n\t\t\t\t\tprev_values.forEach((prev_value) => {\n\t\t\t\t\t\tremaining.forEach((value) => {\n\t\t\t\t\t\t\tcombined.push(prev_value + value);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tprev_values = combined;\n\t\t\t\t\tstart_with_space.forEach((value) => {\n\t\t\t\t\t\tif (regex_ends_with_whitespace.test(value)) {\n\t\t\t\t\t\t\tpossible_values.add(value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprev_values.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tprev_values.forEach((prev_value) => possible_values.add(prev_value));\n\t\t\t\t\tprev_values = [];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrent_possible_values.forEach((current_possible_value) => {\n\t\t\t\tif (regex_ends_with_whitespace.test(current_possible_value)) {\n\t\t\t\t\tpossible_values.add(current_possible_value);\n\t\t\t\t} else {\n\t\t\t\t\tprev_values.push(current_possible_value);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (prev_values.length < current_possible_values.length) {\n\t\t\t\tprev_values.push(' ');\n\t\t\t}\n\t\t\tif (prev_values.length > 20) {\n\t\t\t\t// might grow exponentially, bail out\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tprev_values.forEach((prev_value) => possible_values.add(prev_value));\n\n\t\tfor (const value of possible_values) {\n\t\t\tif (test_attribute(operator, expected_value, case_insensitive, value)) return true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/** @param {string} str */\nfunction unquote(str) {\n\tif ((str[0] === str[str.length - 1] && str[0] === \"'\") || str[0] === '\"') {\n\t\treturn str.slice(1, str.length - 1);\n\t}\n\treturn str;\n}\n\n/**\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.RenderTag | Compiler.AST.Component | Compiler.AST.SvelteComponent | Compiler.AST.SvelteSelf} node\n * @param {boolean} adjacent_only\n * @param {Set<Compiler.AST.SnippetBlock>} seen\n */\nfunction get_ancestor_elements(node, adjacent_only, seen = new Set()) {\n\t/** @type {Array<Compiler.AST.RegularElement | Compiler.AST.SvelteElement>} */\n\tconst ancestors = [];\n\n\tconst path = node.metadata.path;\n\tlet i = path.length;\n\n\twhile (i--) {\n\t\tconst parent = path[i];\n\n\t\tif (parent.type === 'SnippetBlock') {\n\t\t\tif (!seen.has(parent)) {\n\t\t\t\tseen.add(parent);\n\n\t\t\t\tfor (const site of parent.metadata.sites) {\n\t\t\t\t\tancestors.push(...get_ancestor_elements(site, adjacent_only, seen));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tif (parent.type === 'RegularElement' || parent.type === 'SvelteElement') {\n\t\t\t// Special handling for <option> inside <select>: elements inside <option> should\n\t\t\t// also be considered descendants of <selectedcontent>, which clones the selected option's content\n\t\t\tif (parent.type === 'RegularElement' && parent.name === 'option') {\n\t\t\t\tconst is_direct_child = ancestors.length === 0;\n\n\t\t\t\tconst select_element = path.findLast(\n\t\t\t\t\t(element, j) => element.type === 'RegularElement' && element.name === 'select' && j < i\n\t\t\t\t);\n\n\t\t\t\tif (select_element && (!adjacent_only || is_direct_child)) {\n\t\t\t\t\t/** @type {Compiler.AST.RegularElement | null} */\n\t\t\t\t\tlet selectedcontent_element = null;\n\t\t\t\t\twalk(select_element, null, {\n\t\t\t\t\t\tRegularElement(child, context) {\n\t\t\t\t\t\t\tif (child.name === 'selectedcontent') {\n\t\t\t\t\t\t\t\tselectedcontent_element = child;\n\t\t\t\t\t\t\t\tcontext.stop();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (adjacent_only && is_direct_child && selectedcontent_element) {\n\t\t\t\t\t\treturn [selectedcontent_element, parent];\n\t\t\t\t\t} else if (selectedcontent_element) {\n\t\t\t\t\t\tancestors.push(selectedcontent_element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tancestors.push(parent);\n\n\t\t\tif (adjacent_only) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ancestors;\n}\n\n/**\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.RenderTag | Compiler.AST.Component | Compiler.AST.SvelteComponent | Compiler.AST.SvelteSelf} node\n * @param {boolean} adjacent_only\n * @param {Set<Compiler.AST.SnippetBlock>} seen\n */\nfunction get_descendant_elements(node, adjacent_only, seen = new Set()) {\n\t/** @type {Array<Compiler.AST.RegularElement | Compiler.AST.SvelteElement>} */\n\tconst descendants = [];\n\n\t/**\n\t * @param {Compiler.AST.SvelteNode} node\n\t */\n\tfunction walk_children(node) {\n\t\twalk(node, null, {\n\t\t\t_(node, context) {\n\t\t\t\tif (node.type === 'RegularElement' || node.type === 'SvelteElement') {\n\t\t\t\t\tdescendants.push(node);\n\n\t\t\t\t\tif (!adjacent_only) {\n\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t}\n\t\t\t\t} else if (node.type === 'RenderTag') {\n\t\t\t\t\tfor (const snippet of node.metadata.snippets) {\n\t\t\t\t\t\tif (seen.has(snippet)) continue;\n\n\t\t\t\t\t\tseen.add(snippet);\n\t\t\t\t\t\twalk_children(snippet.body);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontext.next();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\twalk_children(node.type === 'RenderTag' ? node : node.fragment);\n\n\t// Special handling for <selectedcontent>: it clones the content of the selected <option>,\n\t// so descendants of <option> elements in the same <select> should also be considered descendants\n\tif (node.type === 'RegularElement' && node.name === 'selectedcontent') {\n\t\tconst path = node.metadata.path;\n\t\tconst select_element = path.findLast(\n\t\t\t(/** @type {Compiler.AST.SvelteNode} */ element) =>\n\t\t\t\telement.type === 'RegularElement' && element.name === 'select'\n\t\t);\n\n\t\tif (select_element) {\n\t\t\twalk(\n\t\t\t\tselect_element,\n\t\t\t\t{ inside_option: false },\n\t\t\t\t{\n\t\t\t\t\t_(child, context) {\n\t\t\t\t\t\tif (child.type === 'RegularElement' && child.name === 'option') {\n\t\t\t\t\t\t\tcontext.next({ inside_option: true });\n\t\t\t\t\t\t} else if (context.state.inside_option) {\n\t\t\t\t\t\t\twalk_children(child);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\treturn descendants;\n}\n\n/**\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.RenderTag | Compiler.AST.Component | Compiler.AST.SvelteComponent | Compiler.AST.SvelteSelf} node\n * @returns {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | null}\n */\nfunction get_element_parent(node) {\n\tlet path = node.metadata.path;\n\tlet i = path.length;\n\n\twhile (i--) {\n\t\tconst parent = path[i];\n\n\t\tif (parent.type === 'RegularElement' || parent.type === 'SvelteElement') {\n\t\t\treturn parent;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.RenderTag | Compiler.AST.Component | Compiler.AST.SvelteComponent | Compiler.AST.SvelteSelf} node\n * @param {Direction} direction\n * @param {boolean} adjacent_only\n * @param {Set<Compiler.AST.SnippetBlock>} seen\n * @returns {Map<Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.SlotElement | Compiler.AST.RenderTag | Compiler.AST.Component, NodeExistsValue>}\n */\nfunction get_possible_element_siblings(node, direction, adjacent_only, seen = new Set()) {\n\t/** @type {Map<Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.SlotElement | Compiler.AST.RenderTag | Compiler.AST.Component, NodeExistsValue>} */\n\tconst result = new Map();\n\tconst path = node.metadata.path;\n\n\t/** @type {Compiler.AST.SvelteNode} */\n\tlet current = node;\n\n\tlet i = path.length;\n\n\twhile (i--) {\n\t\tconst fragment = /** @type {Compiler.AST.Fragment} */ (path[i--]);\n\t\tlet j = fragment.nodes.indexOf(current) + (direction === FORWARD ? 1 : -1);\n\n\t\twhile (j >= 0 && j < fragment.nodes.length) {\n\t\t\tconst node = fragment.nodes[j];\n\n\t\t\tif (node.type === 'RegularElement') {\n\t\t\t\tconst has_slot_attribute = node.attributes.some(\n\t\t\t\t\t(attr) => attr.type === 'Attribute' && attr.name.toLowerCase() === 'slot'\n\t\t\t\t);\n\n\t\t\t\tif (!has_slot_attribute) {\n\t\t\t\t\tresult.set(node, NODE_DEFINITELY_EXISTS);\n\n\t\t\t\t\tif (adjacent_only) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Special case: slots, render tags and svelte:element tags could resolve to no siblings,\n\t\t\t\t// so we want to continue until we find a definite sibling even with the adjacent-only combinator\n\t\t\t} else if (is_block(node) || node.type === 'Component') {\n\t\t\t\tif (node.type === 'SlotElement' || node.type === 'Component') {\n\t\t\t\t\tresult.set(node, NODE_PROBABLY_EXISTS);\n\t\t\t\t}\n\n\t\t\t\tconst possible_last_child = get_possible_nested_siblings(node, direction, adjacent_only);\n\t\t\t\tadd_to_map(possible_last_child, result);\n\t\t\t\tif (\n\t\t\t\t\tadjacent_only &&\n\t\t\t\t\tnode.type !== 'Component' &&\n\t\t\t\t\thas_definite_elements(possible_last_child)\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t} else if (node.type === 'SvelteElement') {\n\t\t\t\tresult.set(node, NODE_PROBABLY_EXISTS);\n\t\t\t} else if (node.type === 'RenderTag') {\n\t\t\t\tresult.set(node, NODE_PROBABLY_EXISTS);\n\t\t\t\tfor (const snippet of node.metadata.snippets) {\n\t\t\t\t\tadd_to_map(get_possible_nested_siblings(snippet, direction, adjacent_only), result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tj = direction === FORWARD ? j + 1 : j - 1;\n\t\t}\n\n\t\tcurrent = path[i];\n\n\t\tif (!current) break;\n\n\t\tif (\n\t\t\tcurrent.type === 'Component' ||\n\t\t\tcurrent.type === 'SvelteComponent' ||\n\t\t\tcurrent.type === 'SvelteSelf'\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (current.type === 'SnippetBlock') {\n\t\t\tif (seen.has(current)) break;\n\t\t\tseen.add(current);\n\n\t\t\tfor (const site of current.metadata.sites) {\n\t\t\t\tconst siblings = get_possible_element_siblings(site, direction, adjacent_only, seen);\n\t\t\t\tadd_to_map(siblings, result);\n\n\t\t\t\tif (adjacent_only && current.metadata.sites.size === 1 && has_definite_elements(siblings)) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!is_block(current)) break;\n\n\t\tif (current.type === 'EachBlock' && fragment === current.body) {\n\t\t\t// `{#each ...}<a /><b />{/each}` — `<b>` can be previous sibling of `<a />`\n\t\t\tadd_to_map(get_possible_nested_siblings(current, direction, adjacent_only), result);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * @param {Compiler.AST.EachBlock | Compiler.AST.IfBlock | Compiler.AST.AwaitBlock | Compiler.AST.KeyBlock | Compiler.AST.SlotElement | Compiler.AST.SnippetBlock | Compiler.AST.Component} node\n * @param {Direction} direction\n * @param {boolean} adjacent_only\n * @param {Set<Compiler.AST.SnippetBlock>} seen\n * @returns {Map<Compiler.AST.RegularElement | Compiler.AST.SvelteElement, NodeExistsValue>}\n */\nfunction get_possible_nested_siblings(node, direction, adjacent_only, seen = new Set()) {\n\t/** @type {Array<Compiler.AST.Fragment | undefined | null>} */\n\tlet fragments = [];\n\n\tswitch (node.type) {\n\t\tcase 'EachBlock':\n\t\t\tfragments.push(node.body, node.fallback);\n\t\t\tbreak;\n\n\t\tcase 'IfBlock':\n\t\t\tfragments.push(node.consequent, node.alternate);\n\t\t\tbreak;\n\n\t\tcase 'AwaitBlock':\n\t\t\tfragments.push(node.pending, node.then, node.catch);\n\t\t\tbreak;\n\n\t\tcase 'KeyBlock':\n\t\tcase 'SlotElement':\n\t\t\tfragments.push(node.fragment);\n\t\t\tbreak;\n\n\t\tcase 'SnippetBlock':\n\t\t\tif (seen.has(node)) {\n\t\t\t\treturn new Map();\n\t\t\t}\n\t\t\tseen.add(node);\n\t\t\tfragments.push(node.body);\n\t\t\tbreak;\n\n\t\tcase 'Component':\n\t\t\tfragments.push(node.fragment, ...[...node.metadata.snippets].map((s) => s.body));\n\t\t\tbreak;\n\t}\n\n\t/** @type {Map<Compiler.AST.RegularElement | Compiler.AST.SvelteElement, NodeExistsValue>} NodeMap */\n\tconst result = new Map();\n\n\tlet exhaustive = node.type !== 'SlotElement' && node.type !== 'SnippetBlock';\n\n\tfor (const fragment of fragments) {\n\t\tif (fragment == null) {\n\t\t\texhaustive = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst map = loop_child(fragment.nodes, direction, adjacent_only, seen);\n\t\texhaustive &&= has_definite_elements(map);\n\n\t\tadd_to_map(map, result);\n\t}\n\n\tif (!exhaustive) {\n\t\tfor (const key of result.keys()) {\n\t\t\tresult.set(key, NODE_PROBABLY_EXISTS);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * @param {Map<unknown, NodeExistsValue>} result\n * @returns {boolean}\n */\nfunction has_definite_elements(result) {\n\tif (result.size === 0) return false;\n\tfor (const exist of result.values()) {\n\t\tif (exist === NODE_DEFINITELY_EXISTS) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @template T2\n * @template {T2} T1\n * @param {Map<T1, NodeExistsValue>} from\n * @param {Map<T2, NodeExistsValue>} to\n * @returns {void}\n */\nfunction add_to_map(from, to) {\n\tfrom.forEach((exist, element) => {\n\t\tto.set(element, higher_existence(exist, to.get(element)));\n\t});\n}\n\n/**\n * @param {NodeExistsValue} exist1\n * @param {NodeExistsValue | undefined} exist2\n * @returns {NodeExistsValue}\n */\nfunction higher_existence(exist1, exist2) {\n\tif (exist2 === undefined) return exist1;\n\treturn exist1 > exist2 ? exist1 : exist2;\n}\n\n/**\n * @param {Compiler.AST.SvelteNode[]} children\n * @param {Direction} direction\n * @param {boolean} adjacent_only\n * @param {Set<Compiler.AST.SnippetBlock>} seen\n */\nfunction loop_child(children, direction, adjacent_only, seen) {\n\t/** @type {Map<Compiler.AST.RegularElement | Compiler.AST.SvelteElement, NodeExistsValue>} */\n\tconst result = new Map();\n\n\tlet i = direction === FORWARD ? 0 : children.length - 1;\n\n\twhile (i >= 0 && i < children.length) {\n\t\tconst child = children[i];\n\n\t\tif (child.type === 'RegularElement') {\n\t\t\tresult.set(child, NODE_DEFINITELY_EXISTS);\n\t\t\tif (adjacent_only) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else if (child.type === 'SvelteElement') {\n\t\t\tresult.set(child, NODE_PROBABLY_EXISTS);\n\t\t} else if (child.type === 'RenderTag') {\n\t\t\tfor (const snippet of child.metadata.snippets) {\n\t\t\t\tadd_to_map(get_possible_nested_siblings(snippet, direction, adjacent_only, seen), result);\n\t\t\t}\n\t\t} else if (is_block(child)) {\n\t\t\tconst child_result = get_possible_nested_siblings(child, direction, adjacent_only, seen);\n\t\t\tadd_to_map(child_result, result);\n\t\t\tif (adjacent_only && has_definite_elements(child_result)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\ti = direction === FORWARD ? i + 1 : i - 1;\n\t}\n\n\treturn result;\n}\n\n/**\n * @param {Compiler.AST.SvelteNode} node\n * @returns {node is Compiler.AST.IfBlock | Compiler.AST.EachBlock | Compiler.AST.AwaitBlock | Compiler.AST.KeyBlock | Compiler.AST.SlotElement}\n */\nfunction is_block(node) {\n\treturn (\n\t\tnode.type === 'IfBlock' ||\n\t\tnode.type === 'EachBlock' ||\n\t\tnode.type === 'AwaitBlock' ||\n\t\tnode.type === 'KeyBlock' ||\n\t\tnode.type === 'SlotElement'\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/css/css-warn.js",
    "content": "/** @import { Visitors } from 'zimmerframe' */\n/** @import { AST } from '#compiler' */\nimport { walk } from 'zimmerframe';\nimport * as w from '../../../warnings.js';\nimport { is_keyframes_node } from '../../css.js';\n\n/**\n * @param {AST.CSS.StyleSheet} stylesheet\n */\nexport function warn_unused(stylesheet) {\n\twalk(stylesheet, { stylesheet }, visitors);\n}\n\n/** @type {Visitors<AST.CSS.Node, { stylesheet: AST.CSS.StyleSheet }>} */\nconst visitors = {\n\tAtrule(node, context) {\n\t\tif (!is_keyframes_node(node)) {\n\t\t\tcontext.next();\n\t\t}\n\t},\n\tPseudoClassSelector(node, context) {\n\t\tif (node.name === 'is' || node.name === 'where') {\n\t\t\tcontext.next();\n\t\t}\n\t},\n\tComplexSelector(node, context) {\n\t\tif (\n\t\t\t!node.metadata.used &&\n\t\t\t// prevent double-marking of `.unused:is(.unused)`\n\t\t\t(context.path.at(-2)?.type !== 'PseudoClassSelector' ||\n\t\t\t\t/** @type {AST.CSS.ComplexSelector} */ (context.path.at(-4))?.metadata.used)\n\t\t) {\n\t\t\tconst content = context.state.stylesheet.content;\n\t\t\tconst text = content.styles.substring(node.start - content.start, node.end - content.start);\n\t\t\tw.css_unused_selector(node, text);\n\t\t}\n\n\t\tcontext.next();\n\t},\n\tRule(node, context) {\n\t\tif (node.metadata.is_global_block) {\n\t\t\tcontext.visit(node.prelude);\n\t\t} else {\n\t\t\tcontext.next();\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/css/utils.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Node } from 'estree' */\nconst UNKNOWN = {};\n\n/**\n * @param {Node} node\n * @param {boolean} is_class\n * @param {Set<any>} set\n * @param {boolean} is_nested\n */\nfunction gather_possible_values(node, is_class, set, is_nested = false) {\n\tif (set.has(UNKNOWN)) {\n\t\t// no point traversing any further\n\t\treturn;\n\t}\n\n\tif (node.type === 'Literal') {\n\t\tset.add(String(node.value));\n\t} else if (node.type === 'ConditionalExpression') {\n\t\tgather_possible_values(node.consequent, is_class, set, is_nested);\n\t\tgather_possible_values(node.alternate, is_class, set, is_nested);\n\t} else if (node.type === 'LogicalExpression') {\n\t\tif (node.operator === '&&') {\n\t\t\t// && is a special case, because the only way the left\n\t\t\t// hand value can be included is if it's falsy. this is\n\t\t\t// a bit of extra work but it's worth it because\n\t\t\t// `class={[condition && 'blah']}` is common,\n\t\t\t// and we don't want to deopt on `condition`\n\t\t\tconst left = new Set();\n\t\t\tgather_possible_values(node.left, is_class, left, is_nested);\n\n\t\t\tif (left.has(UNKNOWN)) {\n\t\t\t\t// add all non-nullish falsy values, unless this is a `class` attribute that\n\t\t\t\t// will be processed by cslx, in which case falsy values are removed, unless\n\t\t\t\t// they're not inside an array/object (TODO 6.0 remove that last part)\n\t\t\t\tif (!is_class || !is_nested) {\n\t\t\t\t\tset.add('');\n\t\t\t\t\tset.add(false);\n\t\t\t\t\tset.add(NaN);\n\t\t\t\t\tset.add(0); // -0 and 0n are also falsy, but stringify to '0'\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const value of left) {\n\t\t\t\t\tif (!value && value != undefined && (!is_class || !is_nested)) {\n\t\t\t\t\t\tset.add(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgather_possible_values(node.right, is_class, set, is_nested);\n\t\t} else {\n\t\t\tgather_possible_values(node.left, is_class, set, is_nested);\n\t\t\tgather_possible_values(node.right, is_class, set, is_nested);\n\t\t}\n\t} else if (is_class && node.type === 'ArrayExpression') {\n\t\tfor (const entry of node.elements) {\n\t\t\tif (entry) {\n\t\t\t\tgather_possible_values(entry, is_class, set, true);\n\t\t\t}\n\t\t}\n\t} else if (is_class && node.type === 'ObjectExpression') {\n\t\tfor (const property of node.properties) {\n\t\t\tif (\n\t\t\t\tproperty.type === 'Property' &&\n\t\t\t\t!property.computed &&\n\t\t\t\t(property.key.type === 'Identifier' || property.key.type === 'Literal')\n\t\t\t) {\n\t\t\t\tset.add(\n\t\t\t\t\tproperty.key.type === 'Identifier' ? property.key.name : String(property.key.value)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tset.add(UNKNOWN);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tset.add(UNKNOWN);\n\t}\n}\n\n/**\n * @param {AST.Text | AST.ExpressionTag} chunk\n * @param {boolean} is_class\n * @returns {string[] | null}\n */\nexport function get_possible_values(chunk, is_class) {\n\tconst values = new Set();\n\n\tif (chunk.type === 'Text') {\n\t\tvalues.add(chunk.data);\n\t} else {\n\t\tgather_possible_values(chunk.expression, is_class, values);\n\t}\n\n\tif (values.has(UNKNOWN)) return null;\n\treturn [...values].map((value) => String(value));\n}\n\n/**\n * Returns all parent rules; root is last\n * @param {AST.CSS.Rule | null} rule\n */\nexport function get_parent_rules(rule) {\n\tconst rules = [];\n\n\twhile (rule) {\n\t\trules.push(rule);\n\t\trule = rule.metadata.parent_rule;\n\t}\n\n\treturn rules;\n}\n\n/**\n * True if is `:global(...)` or `:global` and no pseudo class that is scoped.\n * @param {AST.CSS.RelativeSelector} relative_selector\n * @returns {relative_selector is AST.CSS.RelativeSelector & { selectors: [AST.CSS.PseudoClassSelector, ...Array<AST.CSS.PseudoClassSelector | AST.CSS.PseudoElementSelector>] }}\n */\nexport function is_global(relative_selector) {\n\tconst first = relative_selector.selectors[0];\n\n\treturn (\n\t\tfirst.type === 'PseudoClassSelector' &&\n\t\tfirst.name === 'global' &&\n\t\t(first.args === null ||\n\t\t\t// Only these two selector types keep the whole selector global, because e.g.\n\t\t\t// :global(button).x means that the selector is still scoped because of the .x\n\t\t\trelative_selector.selectors.every(\n\t\t\t\t(selector) =>\n\t\t\t\t\tis_unscoped_pseudo_class(selector) || selector.type === 'PseudoElementSelector'\n\t\t\t))\n\t);\n}\n\n/**\n * `true` if is a pseudo class that cannot be or is not scoped\n * @param {AST.CSS.SimpleSelector} selector\n */\nexport function is_unscoped_pseudo_class(selector) {\n\treturn (\n\t\tselector.type === 'PseudoClassSelector' &&\n\t\t// These make the selector scoped\n\t\t((selector.name !== 'has' &&\n\t\t\tselector.name !== 'is' &&\n\t\t\tselector.name !== 'where' &&\n\t\t\t// Not is special because we want to scope as specific as possible, but because :not\n\t\t\t// inverses the result, we want to leave the unscoped, too. The exception is more than\n\t\t\t// one selector in the :not (.e.g :not(.x .y)), then .x and .y should be scoped\n\t\t\t(selector.name !== 'not' ||\n\t\t\t\tselector.args === null ||\n\t\t\t\tselector.args.children.every((c) => c.children.length === 1))) ||\n\t\t\t// selectors with has/is/where/not can also be global if all their children are global\n\t\t\tselector.args === null ||\n\t\t\tselector.args.children.every((c) => c.children.every((r) => is_global(r))))\n\t);\n}\n\n/**\n * True if is `:global(...)` or `:global`, irrespective of whether or not there are any pseudo classes that are scoped.\n * Difference to `is_global`: `:global(x):has(y)` is `true` for `is_outer_global` but `false` for `is_global`.\n * @param {AST.CSS.RelativeSelector} relative_selector\n * @returns {relative_selector is AST.CSS.RelativeSelector & { selectors: [AST.CSS.PseudoClassSelector, ...Array<AST.CSS.PseudoClassSelector | AST.CSS.PseudoElementSelector>] }}\n */\nexport function is_outer_global(relative_selector) {\n\tconst first = relative_selector.selectors[0];\n\n\treturn (\n\t\tfirst.type === 'PseudoClassSelector' &&\n\t\tfirst.name === 'global' &&\n\t\t(first.args === null ||\n\t\t\t// Only these two selector types can keep the whole selector global, because e.g.\n\t\t\t// :global(button).x means that the selector is still scoped because of the .x\n\t\t\trelative_selector.selectors.every(\n\t\t\t\t(selector) =>\n\t\t\t\t\tselector.type === 'PseudoClassSelector' || selector.type === 'PseudoElementSelector'\n\t\t\t))\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/index.js",
    "content": "/** @import * as ESTree from 'estree' */\n/** @import { Binding, AST, ValidatedCompileOptions, ValidatedModuleCompileOptions } from '#compiler' */\n/** @import { AnalysisState, Visitors } from './types' */\n/** @import { Analysis, ComponentAnalysis, Js, ReactiveStatement, Template } from '../types' */\nimport { walk } from 'zimmerframe';\nimport { parse } from '../1-parse/acorn.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport {\n\textract_identifiers,\n\thas_await_expression,\n\tobject,\n\tunwrap_pattern\n} from '../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { Scope, ScopeRoot, create_scopes, get_rune, set_scope } from '../scope.js';\nimport check_graph_for_cycles from './utils/check_graph_for_cycles.js';\nimport { create_attribute, is_custom_element_node } from '../nodes.js';\nimport { analyze_css } from './css/css-analyze.js';\nimport { prune } from './css/css-prune.js';\nimport { hash, is_rune } from '../../../utils.js';\nimport { warn_unused } from './css/css-warn.js';\nimport { extract_svelte_ignore } from '../../utils/extract_svelte_ignore.js';\nimport { ignore_map, get_ignore_snapshot, pop_ignore, push_ignore } from '../../state.js';\nimport { ArrowFunctionExpression } from './visitors/ArrowFunctionExpression.js';\nimport { AssignmentExpression } from './visitors/AssignmentExpression.js';\nimport { AnimateDirective } from './visitors/AnimateDirective.js';\nimport { AttachTag } from './visitors/AttachTag.js';\nimport { Attribute } from './visitors/Attribute.js';\nimport { AwaitBlock } from './visitors/AwaitBlock.js';\nimport { AwaitExpression } from './visitors/AwaitExpression.js';\nimport { BindDirective } from './visitors/BindDirective.js';\nimport { CallExpression } from './visitors/CallExpression.js';\nimport { ClassBody } from './visitors/ClassBody.js';\nimport { ClassDeclaration } from './visitors/ClassDeclaration.js';\nimport { ClassDirective } from './visitors/ClassDirective.js';\nimport { Component } from './visitors/Component.js';\nimport { ConstTag } from './visitors/ConstTag.js';\nimport { DebugTag } from './visitors/DebugTag.js';\nimport { EachBlock } from './visitors/EachBlock.js';\nimport { ExportDefaultDeclaration } from './visitors/ExportDefaultDeclaration.js';\nimport { ExportNamedDeclaration } from './visitors/ExportNamedDeclaration.js';\nimport { ExportSpecifier } from './visitors/ExportSpecifier.js';\nimport { ExpressionStatement } from './visitors/ExpressionStatement.js';\nimport { ExpressionTag } from './visitors/ExpressionTag.js';\nimport { Fragment } from './visitors/Fragment.js';\nimport { FunctionDeclaration } from './visitors/FunctionDeclaration.js';\nimport { FunctionExpression } from './visitors/FunctionExpression.js';\nimport { HtmlTag } from './visitors/HtmlTag.js';\nimport { Identifier } from './visitors/Identifier.js';\nimport { IfBlock } from './visitors/IfBlock.js';\nimport { ImportDeclaration } from './visitors/ImportDeclaration.js';\nimport { KeyBlock } from './visitors/KeyBlock.js';\nimport { LabeledStatement } from './visitors/LabeledStatement.js';\nimport { LetDirective } from './visitors/LetDirective.js';\nimport { Literal } from './visitors/Literal.js';\nimport { MemberExpression } from './visitors/MemberExpression.js';\nimport { NewExpression } from './visitors/NewExpression.js';\nimport { OnDirective } from './visitors/OnDirective.js';\nimport { PropertyDefinition } from './visitors/PropertyDefinition.js';\nimport { RegularElement } from './visitors/RegularElement.js';\nimport { RenderTag } from './visitors/RenderTag.js';\nimport { SlotElement } from './visitors/SlotElement.js';\nimport { SnippetBlock } from './visitors/SnippetBlock.js';\nimport { SpreadAttribute } from './visitors/SpreadAttribute.js';\nimport { SpreadElement } from './visitors/SpreadElement.js';\nimport { StyleDirective } from './visitors/StyleDirective.js';\nimport { SvelteBody } from './visitors/SvelteBody.js';\nimport { SvelteComponent } from './visitors/SvelteComponent.js';\nimport { SvelteDocument } from './visitors/SvelteDocument.js';\nimport { SvelteElement } from './visitors/SvelteElement.js';\nimport { SvelteFragment } from './visitors/SvelteFragment.js';\nimport { SvelteHead } from './visitors/SvelteHead.js';\nimport { SvelteSelf } from './visitors/SvelteSelf.js';\nimport { SvelteWindow } from './visitors/SvelteWindow.js';\nimport { SvelteBoundary } from './visitors/SvelteBoundary.js';\nimport { TaggedTemplateExpression } from './visitors/TaggedTemplateExpression.js';\nimport { TemplateElement } from './visitors/TemplateElement.js';\nimport { Text } from './visitors/Text.js';\nimport { TitleElement } from './visitors/TitleElement.js';\nimport { TransitionDirective } from './visitors/TransitionDirective.js';\nimport { UpdateExpression } from './visitors/UpdateExpression.js';\nimport { UseDirective } from './visitors/UseDirective.js';\nimport { VariableDeclarator } from './visitors/VariableDeclarator.js';\nimport is_reference from 'is-reference';\nimport { mark_subtree_dynamic } from './visitors/shared/fragment.js';\nimport * as state from '../../state.js';\n\n/**\n * @type {Visitors}\n */\nconst visitors = {\n\t_(node, { state, next, path }) {\n\t\tconst parent = path.at(-1);\n\n\t\t/** @type {string[]} */\n\t\tconst ignores = [];\n\n\t\tif (parent?.type === 'Fragment' && node.type !== 'Comment' && node.type !== 'Text') {\n\t\t\tconst idx = parent.nodes.indexOf(/** @type {any} */ (node));\n\n\t\t\tfor (let i = idx - 1; i >= 0; i--) {\n\t\t\t\tconst prev = parent.nodes[i];\n\n\t\t\t\tif (prev.type === 'Comment') {\n\t\t\t\t\tignores.push(\n\t\t\t\t\t\t...extract_svelte_ignore(\n\t\t\t\t\t\t\tprev.start + 4 /* '<!--'.length */,\n\t\t\t\t\t\t\tprev.data,\n\t\t\t\t\t\t\tstate.analysis.runes\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t} else if (prev.type !== 'Text') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst comments = /** @type {any} */ (node).leadingComments;\n\n\t\t\tif (comments) {\n\t\t\t\tfor (const comment of comments) {\n\t\t\t\t\tignores.push(\n\t\t\t\t\t\t...extract_svelte_ignore(\n\t\t\t\t\t\t\tcomment.start + 2 /* '//'.length */,\n\t\t\t\t\t\t\tcomment.value,\n\t\t\t\t\t\t\tstate.analysis.runes\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (ignores.length > 0) {\n\t\t\tpush_ignore(ignores);\n\t\t}\n\n\t\tignore_map.set(node, get_ignore_snapshot());\n\n\t\tconst scope = state.scopes.get(node);\n\t\tnext(scope !== undefined && scope !== state.scope ? { ...state, scope } : state);\n\n\t\tif (ignores.length > 0) {\n\t\t\tpop_ignore();\n\t\t}\n\t},\n\tAnimateDirective,\n\tArrowFunctionExpression,\n\tAssignmentExpression,\n\tAttachTag,\n\tAttribute,\n\tAwaitBlock,\n\tAwaitExpression,\n\tBindDirective,\n\tCallExpression,\n\tClassBody,\n\tClassDeclaration,\n\tClassDirective,\n\tComponent,\n\tConstTag,\n\tDebugTag,\n\tEachBlock,\n\tExportDefaultDeclaration,\n\tExportNamedDeclaration,\n\tExportSpecifier,\n\tExpressionStatement,\n\tExpressionTag,\n\tFragment,\n\tFunctionDeclaration,\n\tFunctionExpression,\n\tHtmlTag,\n\tIdentifier,\n\tIfBlock,\n\tImportDeclaration,\n\tKeyBlock,\n\tLabeledStatement,\n\tLetDirective,\n\tLiteral,\n\tMemberExpression,\n\tNewExpression,\n\tOnDirective,\n\tPropertyDefinition,\n\tRegularElement,\n\tRenderTag,\n\tSlotElement,\n\tSnippetBlock,\n\tSpreadAttribute,\n\tSpreadElement,\n\tStyleDirective,\n\tSvelteBody,\n\tSvelteComponent,\n\tSvelteDocument,\n\tSvelteElement,\n\tSvelteFragment,\n\tSvelteHead,\n\tSvelteSelf,\n\tSvelteWindow,\n\tSvelteBoundary,\n\tTaggedTemplateExpression,\n\tTemplateElement,\n\tText,\n\tTransitionDirective,\n\tTitleElement,\n\tUpdateExpression,\n\tUseDirective,\n\tVariableDeclarator\n};\n\n/**\n * @param {AST.Script | null} script\n * @param {ScopeRoot} root\n * @param {boolean} allow_reactive_declarations\n * @param {Scope | null} parent\n * @returns {Js}\n */\nfunction js(script, root, allow_reactive_declarations, parent) {\n\t/** @type {ESTree.Program} */\n\tconst ast = script?.content ?? {\n\t\ttype: 'Program',\n\t\tsourceType: 'module',\n\t\tstart: -1,\n\t\tend: -1,\n\t\tbody: []\n\t};\n\n\tconst { scope, scopes, has_await } = create_scopes(\n\t\tast,\n\t\troot,\n\t\tallow_reactive_declarations,\n\t\tparent\n\t);\n\n\treturn { ast, scope, scopes, has_await };\n}\n\n/**\n * @param {string} filename\n */\nfunction get_component_name(filename) {\n\tconst parts = filename.split(/[/\\\\]/);\n\tconst basename = /** @type {string} */ (parts.pop());\n\tconst last_dir = /** @type {string} */ (parts.at(-1));\n\tlet name = basename.replace('.svelte', '');\n\tif (name === 'index' && last_dir && last_dir !== 'src') {\n\t\tname = last_dir;\n\t}\n\treturn name[0].toUpperCase() + name.slice(1);\n}\n\nconst RESERVED = ['$$props', '$$restProps', '$$slots'];\n\n/**\n * @param {string} source\n * @param {ValidatedModuleCompileOptions} options\n * @returns {Analysis}\n */\nexport function analyze_module(source, options) {\n\t/** @type {AST.JSComment[]} */\n\tconst comments = [];\n\n\tstate.set_source(source);\n\tconst ast = parse(source, comments, false, false);\n\n\tconst { scope, scopes, has_await } = create_scopes(ast, new ScopeRoot(), false, null);\n\n\tfor (const [name, references] of scope.references) {\n\t\tif (name[0] !== '$' || RESERVED.includes(name)) continue;\n\t\tif (name === '$' || name[1] === '$') {\n\t\t\te.global_reference_invalid(references[0].node, name);\n\t\t}\n\n\t\tconst binding = scope.get(name.slice(1));\n\n\t\tif (binding !== null && !is_rune(name)) {\n\t\t\te.store_invalid_subscription_module(references[0].node);\n\t\t}\n\t}\n\n\t/** @type {Analysis} */\n\tconst analysis = {\n\t\tmodule: { ast, scope, scopes, has_await },\n\t\tname: options.filename,\n\t\taccessors: false,\n\t\trunes: true,\n\t\timmutable: true,\n\t\ttracing: false,\n\t\tasync_deriveds: new Set(),\n\t\tcomments,\n\t\tclasses: new Map(),\n\t\tpickled_awaits: new Set()\n\t};\n\n\tstate.adjust({\n\t\tdev: options.dev,\n\t\trootDir: options.rootDir,\n\t\trunes: true\n\t});\n\n\twalk(\n\t\t/** @type {ESTree.Node} */ (ast),\n\t\t{\n\t\t\tscope,\n\t\t\tscopes,\n\t\t\tanalysis: /** @type {ComponentAnalysis} */ (analysis),\n\t\t\tstate_fields: new Map(),\n\t\t\t// TODO the following are not needed for modules, but we have to pass them in order to avoid type error,\n\t\t\t// and reducing the type would result in a lot of tedious type casts elsewhere - find a good solution one day\n\t\t\tast_type: /** @type {any} */ (null),\n\t\t\tcomponent_slots: /** @type {Set<string>} */ (new Set()),\n\t\t\texpression: null,\n\t\t\tfunction_depth: 0,\n\t\t\thas_props_rune: false,\n\t\t\toptions: /** @type {ValidatedCompileOptions} */ (options),\n\t\t\tfragment: null,\n\t\t\tparent_element: null,\n\t\t\treactive_statement: null,\n\t\t\tderived_function_depth: -1\n\t\t},\n\t\tvisitors\n\t);\n\n\treturn analysis;\n}\n\n/**\n * @param {AST.Root} root\n * @param {string} source\n * @param {ValidatedCompileOptions} options\n * @returns {ComponentAnalysis}\n */\nexport function analyze_component(root, source, options) {\n\tconst scope_root = new ScopeRoot();\n\n\tconst module = js(root.module, scope_root, false, null);\n\tconst instance = js(root.instance, scope_root, true, module.scope);\n\n\tconst { scope, scopes, has_await } = create_scopes(\n\t\troot.fragment,\n\t\tscope_root,\n\t\tfalse,\n\t\tinstance.scope\n\t);\n\n\t/** @type {Template} */\n\tconst template = { ast: root.fragment, scope, scopes };\n\n\tlet synthetic_stores_legacy_check = [];\n\n\tconst runes_option = options.runes?.({ filename: options.filename });\n\n\t// create synthetic bindings for store subscriptions\n\tfor (const [name, references] of module.scope.references) {\n\t\tif (name[0] !== '$' || RESERVED.includes(name)) continue;\n\t\tif (name === '$' || name[1] === '$') {\n\t\t\te.global_reference_invalid(references[0].node, name);\n\t\t}\n\n\t\tconst store_name = name.slice(1);\n\t\tconst declaration = instance.scope.get(store_name);\n\t\tconst init = /** @type {ESTree.Node | undefined} */ (declaration?.initial);\n\n\t\t// If we're not in legacy mode through the compiler option, assume the user\n\t\t// is referencing a rune and not a global store.\n\t\tif (\n\t\t\trunes_option === false ||\n\t\t\t!is_rune(name) ||\n\t\t\t(declaration !== null &&\n\t\t\t\t// const state = $state(0) is valid\n\t\t\t\t(get_rune(init, instance.scope) === null ||\n\t\t\t\t\t// rune-line names received as props are valid too (but we have to protect against $props as store)\n\t\t\t\t\t(store_name !== 'props' && get_rune(init, instance.scope) === '$props')) &&\n\t\t\t\t// allow `import { derived } from 'svelte/store'` in the same file as `const x = $derived(..)` because one is not a subscription to the other\n\t\t\t\t!(\n\t\t\t\t\tname === '$derived' &&\n\t\t\t\t\tdeclaration.initial?.type === 'ImportDeclaration' &&\n\t\t\t\t\tdeclaration.initial.source.value === 'svelte/store'\n\t\t\t\t))\n\t\t) {\n\t\t\tlet is_nested_store_subscription_node = undefined;\n\t\t\tsearch: for (const reference of references) {\n\t\t\t\tfor (let i = reference.path.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst scope =\n\t\t\t\t\t\tscopes.get(reference.path[i]) ||\n\t\t\t\t\t\tmodule.scopes.get(reference.path[i]) ||\n\t\t\t\t\t\tinstance.scopes.get(reference.path[i]);\n\t\t\t\t\tif (scope) {\n\t\t\t\t\t\tconst owner = scope?.owner(store_name);\n\t\t\t\t\t\tif (!!owner && owner !== module.scope && owner !== instance.scope) {\n\t\t\t\t\t\t\tis_nested_store_subscription_node = reference.node;\n\t\t\t\t\t\t\tbreak search;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (is_nested_store_subscription_node) {\n\t\t\t\te.store_invalid_scoped_subscription(is_nested_store_subscription_node);\n\t\t\t}\n\n\t\t\tif (runes_option !== false) {\n\t\t\t\tif (declaration === null && /[a-z]/.test(store_name[0])) {\n\t\t\t\t\te.global_reference_invalid(references[0].node, name);\n\t\t\t\t} else if (declaration !== null && is_rune(name)) {\n\t\t\t\t\tfor (const { node, path } of references) {\n\t\t\t\t\t\tif (path.at(-1)?.type === 'CallExpression') {\n\t\t\t\t\t\t\tw.store_rune_conflict(node, store_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (module.ast) {\n\t\t\t\tfor (const { node, path } of references) {\n\t\t\t\t\t// if the reference is inside module, error. this is a bit hacky but it works\n\t\t\t\t\tif (\n\t\t\t\t\t\t/** @type {number} */ (node.start) > /** @type {number} */ (module.ast.start) &&\n\t\t\t\t\t\t/** @type {number} */ (node.end) < /** @type {number} */ (module.ast.end) &&\n\t\t\t\t\t\t// const state = $state(0) is valid\n\t\t\t\t\t\tget_rune(/** @type {ESTree.Node} */ (path.at(-1)), module.scope) === null\n\t\t\t\t\t) {\n\t\t\t\t\t\te.store_invalid_subscription(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we push to the array because at this moment in time we can't be sure if we are in legacy\n\t\t\t// mode yet because we are still changing the module scope\n\t\t\tsynthetic_stores_legacy_check.push(() => {\n\t\t\t\t// if we are creating a synthetic binding for a let declaration we should also declare\n\t\t\t\t// the declaration as state in case it's reassigned and we are not in runes mode (the function will\n\t\t\t\t// not be called if we are not in runes mode, that's why there's no !runes check here)\n\t\t\t\tif (\n\t\t\t\t\tdeclaration !== null &&\n\t\t\t\t\tdeclaration.kind === 'normal' &&\n\t\t\t\t\tdeclaration.declaration_kind === 'let' &&\n\t\t\t\t\tdeclaration.reassigned\n\t\t\t\t) {\n\t\t\t\t\tdeclaration.kind = 'state';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst binding = instance.scope.declare(b.id(name), 'store_sub', 'synthetic');\n\t\t\tbinding.references = references;\n\t\t\tinstance.scope.references.set(name, references);\n\t\t\tmodule.scope.references.delete(name);\n\t\t}\n\t}\n\n\tconst component_name = get_component_name(options.filename);\n\n\tconst runes =\n\t\trunes_option ??\n\t\t(has_await || instance.has_await || Array.from(module.scope.references.keys()).some(is_rune));\n\n\tif (!runes) {\n\t\tfor (let check of synthetic_stores_legacy_check) {\n\t\t\tcheck();\n\t\t}\n\t}\n\n\tif (runes && root.module) {\n\t\tconst context = root.module.attributes.find((attribute) => attribute.name === 'context');\n\t\tif (context) {\n\t\t\tw.script_context_deprecated(context);\n\t\t}\n\t}\n\n\tconst custom_element_from_option = options.customElement({ filename: options.filename });\n\tconst css = options.css({ filename: options.filename });\n\tconst custom_element = options.customElementOptions ?? custom_element_from_option;\n\tconst is_custom_element = !!options.customElementOptions || custom_element_from_option;\n\n\tconst name = module.scope.generate(options.name ?? component_name);\n\n\tstate.adjust({\n\t\tcomponent_name: name,\n\t\tdev: options.dev,\n\t\trootDir: options.rootDir,\n\t\trunes\n\t});\n\n\t// TODO remove all the ?? stuff, we don't need it now that we're validating the config\n\t/** @type {ComponentAnalysis} */\n\tconst analysis = {\n\t\tname,\n\t\troot: scope_root,\n\t\tmodule,\n\t\tinstance,\n\t\ttemplate,\n\t\tcomments: root.comments,\n\t\telements: [],\n\t\trunes,\n\t\t// if we are not in runes mode but we have no reserved references ($$props, $$restProps)\n\t\t// and no `export let` we might be in a wannabe runes component that is using runes in an external\n\t\t// module...we need to fallback to the runic behavior\n\t\tmaybe_runes:\n\t\t\t!runes &&\n\t\t\t// if they explicitly disabled runes, use the legacy behavior\n\t\t\trunes_option !== false &&\n\t\t\t![...module.scope.references.keys()].some((name) =>\n\t\t\t\t['$$props', '$$restProps'].includes(name)\n\t\t\t) &&\n\t\t\t!instance.ast.body.some(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.type === 'LabeledStatement' ||\n\t\t\t\t\t(node.type === 'ExportNamedDeclaration' &&\n\t\t\t\t\t\t((node.declaration &&\n\t\t\t\t\t\t\tnode.declaration.type === 'VariableDeclaration' &&\n\t\t\t\t\t\t\tnode.declaration.kind === 'let') ||\n\t\t\t\t\t\t\tnode.specifiers.some(\n\t\t\t\t\t\t\t\t(specifier) =>\n\t\t\t\t\t\t\t\t\tspecifier.local.type === 'Identifier' &&\n\t\t\t\t\t\t\t\t\tinstance.scope.get(specifier.local.name)?.declaration_kind === 'let'\n\t\t\t\t\t\t\t)))\n\t\t\t),\n\t\ttracing: false,\n\t\tclasses: new Map(),\n\t\timmutable: runes || options.immutable,\n\t\texports: [],\n\t\tuses_props: false,\n\t\tprops_id: null,\n\t\tuses_rest_props: false,\n\t\tuses_slots: false,\n\t\tuses_component_bindings: false,\n\t\tuses_render_tags: false,\n\t\tneeds_context: false,\n\t\tneeds_mutation_validation: false,\n\t\tneeds_props: false,\n\t\tevent_directive_node: null,\n\t\tuses_event_attributes: false,\n\t\tcustom_element,\n\t\tinject_styles: css === 'injected' || is_custom_element,\n\t\taccessors:\n\t\t\tis_custom_element ||\n\t\t\t(runes ? false : !!options.accessors) ||\n\t\t\t// because $set method needs accessors\n\t\t\toptions.compatibility?.componentApi === 4,\n\t\treactive_statements: new Map(),\n\t\tbinding_groups: new Map(),\n\t\tslot_names: new Map(),\n\t\tcss: {\n\t\t\tast: root.css,\n\t\t\thash: root.css\n\t\t\t\t? options.cssHash({\n\t\t\t\t\t\tcss: root.css.content.styles,\n\t\t\t\t\t\tfilename: state.filename,\n\t\t\t\t\t\tname: component_name,\n\t\t\t\t\t\thash\n\t\t\t\t\t})\n\t\t\t\t: '',\n\t\t\tkeyframes: [],\n\t\t\thas_global: false\n\t\t},\n\t\tsource,\n\t\tsnippet_renderers: new Map(),\n\t\tsnippets: new Set(),\n\t\tasync_deriveds: new Set(),\n\t\tpickled_awaits: new Set(),\n\t\tinstance_body: {\n\t\t\tsync: [],\n\t\t\tasync: [],\n\t\t\tdeclarations: [],\n\t\t\thoisted: []\n\t\t}\n\t};\n\n\tif (!runes) {\n\t\t// every exported `let` or `var` declaration becomes a prop, everything else becomes an export\n\t\tfor (const node of instance.ast.body) {\n\t\t\tif (node.type !== 'ExportNamedDeclaration') continue;\n\n\t\t\tanalysis.needs_props = true;\n\n\t\t\tif (node.declaration) {\n\t\t\t\tif (\n\t\t\t\t\tnode.declaration.type === 'FunctionDeclaration' ||\n\t\t\t\t\tnode.declaration.type === 'ClassDeclaration'\n\t\t\t\t) {\n\t\t\t\t\tanalysis.exports.push({\n\t\t\t\t\t\tname: /** @type {import('estree').Identifier} */ (node.declaration.id).name,\n\t\t\t\t\t\talias: null\n\t\t\t\t\t});\n\t\t\t\t} else if (node.declaration.type === 'VariableDeclaration') {\n\t\t\t\t\tif (node.declaration.kind === 'const') {\n\t\t\t\t\t\tfor (const declarator of node.declaration.declarations) {\n\t\t\t\t\t\t\tfor (const node of extract_identifiers(declarator.id)) {\n\t\t\t\t\t\t\t\tanalysis.exports.push({ name: node.name, alias: null });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const declarator of node.declaration.declarations) {\n\t\t\t\t\t\t\tfor (const id of extract_identifiers(declarator.id)) {\n\t\t\t\t\t\t\t\tconst binding = /** @type {Binding} */ (instance.scope.get(id.name));\n\t\t\t\t\t\t\t\tbinding.kind = 'bindable_prop';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\t\tif (specifier.local.type !== 'Identifier' || specifier.exported.type !== 'Identifier') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst binding = instance.scope.get(specifier.local.name);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tbinding &&\n\t\t\t\t\t\t(binding.declaration_kind === 'var' || binding.declaration_kind === 'let')\n\t\t\t\t\t) {\n\t\t\t\t\t\tbinding.kind = 'bindable_prop';\n\n\t\t\t\t\t\tif (specifier.exported.name !== specifier.local.name) {\n\t\t\t\t\t\t\tbinding.prop_alias = specifier.exported.name;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tanalysis.exports.push({ name: specifier.local.name, alias: specifier.exported.name });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if reassigned/mutated bindings are referenced in `$:` blocks\n\t\t// or the template, turn them into state\n\t\tfor (const binding of instance.scope.declarations.values()) {\n\t\t\tif (binding.kind !== 'normal') continue;\n\n\t\t\tfor (const { node, path } of binding.references) {\n\t\t\t\tif (node === binding.node) continue;\n\n\t\t\t\tif (binding.updated) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tpath[path.length - 1].type === 'StyleDirective' ||\n\t\t\t\t\t\tpath.some((node) => node.type === 'Fragment') ||\n\t\t\t\t\t\t(path[1].type === 'LabeledStatement' && path[1].label.name === '$')\n\t\t\t\t\t) {\n\t\t\t\t\t\tbinding.kind = 'state';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// more legacy nonsense: if an `each` binding is reassigned/mutated,\n\t\t// treat the expression as being mutated as well\n\t\twalk(/** @type {AST.SvelteNode} */ (template.ast), null, {\n\t\t\tEachBlock(node) {\n\t\t\t\tconst scope = /** @type {Scope} */ (template.scopes.get(node));\n\n\t\t\t\tfor (const binding of scope.declarations.values()) {\n\t\t\t\t\tif (binding.updated) {\n\t\t\t\t\t\tconst state = { scope: /** @type {Scope} */ (scope.parent), scopes: template.scopes };\n\n\t\t\t\t\t\twalk(node.expression, state, {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t_: set_scope,\n\t\t\t\t\t\t\tIdentifier(node, context) {\n\t\t\t\t\t\t\t\tconst parent = /** @type {ESTree.Expression} */ (context.path.at(-1));\n\n\t\t\t\t\t\t\t\tif (is_reference(node, parent)) {\n\t\t\t\t\t\t\t\t\tconst binding = context.state.scope.get(node.name);\n\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tbinding &&\n\t\t\t\t\t\t\t\t\t\tbinding.kind === 'normal' &&\n\t\t\t\t\t\t\t\t\t\tbinding.declaration_kind !== 'import' &&\n\t\t\t\t\t\t\t\t\t\tbinding.declaration_kind !== 'function'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tbinding.kind = 'state';\n\t\t\t\t\t\t\t\t\t\tbinding.mutated = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (root.options) {\n\t\tfor (const attribute of root.options.attributes) {\n\t\t\tif (attribute.name === 'accessors' && analysis.runes) {\n\t\t\t\tw.options_deprecated_accessors(attribute);\n\t\t\t}\n\n\t\t\tif (attribute.name === 'customElement' && !custom_element_from_option) {\n\t\t\t\tw.options_missing_custom_element(attribute);\n\t\t\t}\n\n\t\t\tif (attribute.name === 'immutable' && analysis.runes) {\n\t\t\t\tw.options_deprecated_immutable(attribute);\n\t\t\t}\n\t\t}\n\t}\n\n\tcalculate_blockers(instance, analysis);\n\n\tif (analysis.runes) {\n\t\tconst props_refs = module.scope.references.get('$$props');\n\t\tif (props_refs) {\n\t\t\te.legacy_props_invalid(props_refs[0].node);\n\t\t}\n\n\t\tconst rest_props_refs = module.scope.references.get('$$restProps');\n\t\tif (rest_props_refs) {\n\t\t\te.legacy_rest_props_invalid(rest_props_refs[0].node);\n\t\t}\n\n\t\tfor (const { ast, scope, scopes } of [module, instance, template]) {\n\t\t\t/** @type {AnalysisState} */\n\t\t\tconst state = {\n\t\t\t\tscope,\n\t\t\t\tscopes,\n\t\t\t\tanalysis,\n\t\t\t\toptions,\n\t\t\t\tast_type: ast === instance.ast ? 'instance' : ast === template.ast ? 'template' : 'module',\n\t\t\t\tfragment: ast === template.ast ? ast : null,\n\t\t\t\tparent_element: null,\n\t\t\t\thas_props_rune: false,\n\t\t\t\tcomponent_slots: new Set(),\n\t\t\t\texpression: null,\n\t\t\t\tstate_fields: new Map(),\n\t\t\t\tfunction_depth: scope.function_depth,\n\t\t\t\treactive_statement: null,\n\t\t\t\tderived_function_depth: -1\n\t\t\t};\n\n\t\t\twalk(/** @type {AST.SvelteNode} */ (ast), state, visitors);\n\t\t}\n\n\t\t// warn on any nonstate declarations that are a) reassigned and b) referenced in the template\n\t\tfor (const scope of [module.scope, instance.scope]) {\n\t\t\touter: for (const [name, binding] of scope.declarations) {\n\t\t\t\tif (binding.kind === 'normal' && binding.reassigned) {\n\t\t\t\t\tinner: for (const { path } of binding.references) {\n\t\t\t\t\t\tif (path[0].type !== 'Fragment') continue;\n\t\t\t\t\t\tfor (let i = 1; i < path.length; i += 1) {\n\t\t\t\t\t\t\tconst type = path[i].type;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttype === 'FunctionDeclaration' ||\n\t\t\t\t\t\t\t\ttype === 'FunctionExpression' ||\n\t\t\t\t\t\t\t\ttype === 'ArrowFunctionExpression'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcontinue inner;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// bind:this doesn't need to be a state reference if it will never change\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttype === 'BindDirective' &&\n\t\t\t\t\t\t\t\t/** @type {AST.BindDirective} */ (path[i]).name === 'this'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfor (let j = i - 1; j >= 0; j -= 1) {\n\t\t\t\t\t\t\t\t\tconst type = path[j].type;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\ttype === 'IfBlock' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'EachBlock' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'AwaitBlock' ||\n\t\t\t\t\t\t\t\t\t\ttype === 'KeyBlock'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tw.non_reactive_update(binding.node, name);\n\t\t\t\t\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue inner;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tw.non_reactive_update(binding.node, name);\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tinstance.scope.declare(b.id('$$props'), 'rest_prop', 'synthetic');\n\t\tinstance.scope.declare(b.id('$$restProps'), 'rest_prop', 'synthetic');\n\n\t\tfor (const { ast, scope, scopes } of [module, instance, template]) {\n\t\t\t/** @type {AnalysisState} */\n\t\t\tconst state = {\n\t\t\t\tscope,\n\t\t\t\tscopes,\n\t\t\t\tanalysis,\n\t\t\t\toptions,\n\t\t\t\tfragment: ast === template.ast ? ast : null,\n\t\t\t\tparent_element: null,\n\t\t\t\thas_props_rune: false,\n\t\t\t\tast_type: ast === instance.ast ? 'instance' : ast === template.ast ? 'template' : 'module',\n\t\t\t\treactive_statement: null,\n\t\t\t\tcomponent_slots: new Set(),\n\t\t\t\texpression: null,\n\t\t\t\tstate_fields: new Map(),\n\t\t\t\tfunction_depth: scope.function_depth,\n\t\t\t\tderived_function_depth: -1\n\t\t\t};\n\n\t\t\twalk(/** @type {AST.SvelteNode} */ (ast), state, visitors);\n\t\t}\n\n\t\tfor (const [name, binding] of instance.scope.declarations) {\n\t\t\tif (\n\t\t\t\t(binding.kind === 'prop' || binding.kind === 'bindable_prop') &&\n\t\t\t\tbinding.node.name !== '$$props'\n\t\t\t) {\n\t\t\t\tconst references = binding.references.filter(\n\t\t\t\t\t(r) => r.node !== binding.node && r.path.at(-1)?.type !== 'ExportSpecifier'\n\t\t\t\t);\n\t\t\t\tif (!references.length && !instance.scope.declarations.has(`$${name}`)) {\n\t\t\t\t\tw.export_let_unused(binding.node, name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tanalysis.reactive_statements = order_reactive_statements(analysis.reactive_statements);\n\t}\n\n\tfor (const node of analysis.module.ast.body) {\n\t\tif (node.type === 'ExportNamedDeclaration' && node.specifiers !== null && node.source == null) {\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tif (specifier.local.type !== 'Identifier') continue;\n\t\t\t\tconst name = specifier.local.name;\n\t\t\t\tconst binding = analysis.module.scope.get(name);\n\t\t\t\tif (!binding) {\n\t\t\t\t\tif ([...analysis.snippets].find((snippet) => snippet.expression.name === name)) {\n\t\t\t\t\t\te.snippet_invalid_export(specifier);\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.export_undefined(specifier, name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (analysis.event_directive_node && analysis.uses_event_attributes) {\n\t\te.mixed_event_handler_syntaxes(\n\t\t\tanalysis.event_directive_node,\n\t\t\tanalysis.event_directive_node.name\n\t\t);\n\t}\n\n\tfor (const [node, resolved] of analysis.snippet_renderers) {\n\t\tif (!resolved) {\n\t\t\tnode.metadata.snippets = analysis.snippets;\n\t\t}\n\n\t\tfor (const snippet of node.metadata.snippets) {\n\t\t\tsnippet.metadata.sites.add(node);\n\t\t}\n\t}\n\n\tif (\n\t\tanalysis.uses_render_tags &&\n\t\t(analysis.uses_slots || (!analysis.custom_element && analysis.slot_names.size > 0))\n\t) {\n\t\tconst pos = analysis.slot_names.values().next().value ?? analysis.source.indexOf('$$slot');\n\t\te.slot_snippet_conflict(pos);\n\t}\n\n\tif (analysis.css.ast) {\n\t\tanalyze_css(analysis.css.ast, analysis);\n\n\t\t// mark nodes as scoped/unused/empty etc\n\t\tprune(analysis.css.ast, analysis.elements);\n\n\t\tconst { comment } = analysis.css.ast.content;\n\t\tconst should_ignore_unused =\n\t\t\tcomment &&\n\t\t\textract_svelte_ignore(comment.start, comment.data, analysis.runes).includes(\n\t\t\t\t'css_unused_selector'\n\t\t\t);\n\n\t\tif (!should_ignore_unused) {\n\t\t\twarn_unused(analysis.css.ast);\n\t\t}\n\t}\n\n\tfor (const node of analysis.elements) {\n\t\tif (node.metadata.scoped && is_custom_element_node(node)) {\n\t\t\tmark_subtree_dynamic(node.metadata.path);\n\t\t}\n\n\t\tlet has_class = false;\n\t\tlet has_style = false;\n\t\tlet has_spread = false;\n\t\tlet has_class_directive = false;\n\t\tlet has_style_directive = false;\n\n\t\tfor (const attribute of node.attributes) {\n\t\t\t// The spread method appends the hash to the end of the class attribute on its own\n\t\t\tif (attribute.type === 'SpreadAttribute') {\n\t\t\t\thas_spread = true;\n\t\t\t\tbreak;\n\t\t\t} else if (attribute.type === 'Attribute') {\n\t\t\t\thas_class ||= attribute.name.toLowerCase() === 'class';\n\t\t\t\thas_style ||= attribute.name.toLowerCase() === 'style';\n\t\t\t} else if (attribute.type === 'ClassDirective') {\n\t\t\t\thas_class_directive = true;\n\t\t\t} else if (attribute.type === 'StyleDirective') {\n\t\t\t\thas_style_directive = true;\n\t\t\t}\n\t\t}\n\n\t\t// We need an empty class to generate the set_class() or class=\"\" correctly\n\t\tif (!has_spread && !has_class && (node.metadata.scoped || has_class_directive)) {\n\t\t\tnode.attributes.push(\n\t\t\t\tcreate_attribute('class', null, -1, -1, [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'Text',\n\t\t\t\t\t\tdata: '',\n\t\t\t\t\t\traw: '',\n\t\t\t\t\t\tstart: -1,\n\t\t\t\t\t\tend: -1\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\n\t\t// We need an empty style to generate the set_style() correctly\n\t\tif (!has_spread && !has_style && has_style_directive) {\n\t\t\tnode.attributes.push(\n\t\t\t\tcreate_attribute('style', null, -1, -1, [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'Text',\n\t\t\t\t\t\tdata: '',\n\t\t\t\t\t\traw: '',\n\t\t\t\t\t\tstart: -1,\n\t\t\t\t\t\tend: -1\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO\n\t// analysis.stylesheet.warn_on_unused_selectors(analysis);\n\n\treturn analysis;\n}\n\n/**\n * Analyzes the instance's top level statements to calculate which bindings need to wait on which\n * top level statements. This includes indirect blockers such as functions referencing async top level statements.\n *\n * @param {Js} instance\n * @param {ComponentAnalysis} analysis\n * @returns {void}\n */\nfunction calculate_blockers(instance, analysis) {\n\t/**\n\t * @param {ESTree.Node} expression\n\t * @param {Scope} scope\n\t * @param {Set<Binding>} touched\n\t * @param {Set<ESTree.Node>} seen\n\t */\n\tconst touch = (expression, scope, touched, seen = new Set()) => {\n\t\tif (seen.has(expression)) return;\n\t\tseen.add(expression);\n\n\t\twalk(\n\t\t\texpression,\n\t\t\t{ scope },\n\t\t\t{\n\t\t\t\t_(node, context) {\n\t\t\t\t\tconst scope = instance.scopes.get(node);\n\t\t\t\t\tif (scope) {\n\t\t\t\t\t\tcontext.next({ scope });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tImportDeclaration(node) {},\n\t\t\t\tIdentifier(node, context) {\n\t\t\t\t\tconst parent = /** @type {ESTree.Node} */ (context.path.at(-1));\n\t\t\t\t\tif (is_reference(node, parent)) {\n\t\t\t\t\t\tconst binding = context.state.scope.get(node.name);\n\t\t\t\t\t\tif (binding) {\n\t\t\t\t\t\t\ttouched.add(binding);\n\n\t\t\t\t\t\t\tfor (const assignment of binding.assignments) {\n\t\t\t\t\t\t\t\ttouch(assignment.value, assignment.scope, touched, seen);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\n\t/**\n\t * @param {ESTree.Node} node\n\t * @param {Set<Binding>} reads\n\t * @param {Set<Binding>} writes\n\t * @param {Scope} scope\n\t */\n\tconst trace_references = (node, reads, writes, scope) => {\n\t\t/**\n\t\t * @param {ESTree.Pattern} node\n\t\t * @param {Scope} scope\n\t\t */\n\t\tfunction update(node, scope) {\n\t\t\tfor (const pattern of unwrap_pattern(node)) {\n\t\t\t\tconst node = object(pattern);\n\t\t\t\tif (!node) return;\n\n\t\t\t\tconst binding = scope.get(node.name);\n\t\t\t\tif (!binding) return;\n\n\t\t\t\twrites.add(binding);\n\t\t\t}\n\t\t}\n\n\t\twalk(\n\t\t\tnode,\n\t\t\t{ scope },\n\t\t\t{\n\t\t\t\t_(node, context) {\n\t\t\t\t\tconst scope = instance.scopes.get(node);\n\t\t\t\t\tif (scope) {\n\t\t\t\t\t\tcontext.next({ scope });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.next();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tAssignmentExpression(node, context) {\n\t\t\t\t\tupdate(node.left, context.state.scope);\n\t\t\t\t},\n\t\t\t\tUpdateExpression(node, context) {\n\t\t\t\t\tupdate(\n\t\t\t\t\t\t/** @type {ESTree.Identifier | ESTree.MemberExpression} */ (node.argument),\n\t\t\t\t\t\tcontext.state.scope\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tCallExpression(node, context) {\n\t\t\t\t\t// for now, assume everything touched by the callee ends up mutating the object\n\t\t\t\t\t// TODO optimise this better\n\n\t\t\t\t\t// special case — no need to peek inside effects as they only run once async work has completed\n\t\t\t\t\tconst rune = get_rune(node, context.state.scope);\n\t\t\t\t\tif (rune === '$effect') return;\n\n\t\t\t\t\t/** @type {Set<Binding>} */\n\t\t\t\t\tconst touched = new Set();\n\t\t\t\t\ttouch(node, context.state.scope, touched);\n\n\t\t\t\t\tfor (const b of touched) {\n\t\t\t\t\t\twrites.add(b);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tIdentifier(node, context) {\n\t\t\t\t\tconst parent = /** @type {ESTree.Node} */ (context.path.at(-1));\n\t\t\t\t\tif (is_reference(node, parent)) {\n\t\t\t\t\t\tconst binding = context.state.scope.get(node.name);\n\t\t\t\t\t\tif (binding) {\n\t\t\t\t\t\t\treads.add(binding);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tReturnStatement(node, context) {\n\t\t\t\t\t// We have to assume that anything returned from a function, even if it's a function itself,\n\t\t\t\t\t// might be called immediately, so we have to touch all references within it. Example:\n\t\t\t\t\t// function foo() { return () => blocker; } foo(); // blocker is touched\n\t\t\t\t\tif (node.argument) {\n\t\t\t\t\t\ttouch(node.argument, context.state.scope, reads);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// don't look inside functions until they are called\n\t\t\t\tArrowFunctionExpression(_, context) {},\n\t\t\t\tFunctionDeclaration(_, context) {},\n\t\t\t\tFunctionExpression(_, context) {}\n\t\t\t}\n\t\t);\n\t};\n\n\tlet awaited = false;\n\n\t/** @type {Array<ESTree.Statement | ESTree.VariableDeclarator>} */\n\tlet sync_group = [];\n\n\t// TODO this should probably be attached to the scope?\n\tconst promises = b.id('$$promises');\n\n\t/**\n\t * @param {ESTree.Identifier} id\n\t * @param {NonNullable<Binding['blocker']>} blocker\n\t */\n\tfunction push_declaration(id, blocker) {\n\t\tanalysis.instance_body.declarations.push(id);\n\n\t\tconst binding = /** @type {Binding} */ (instance.scope.get(id.name));\n\t\tbinding.blocker = blocker;\n\t}\n\n\tfunction flush_sync_group() {\n\t\tif (sync_group.length === 0) return;\n\n\t\tanalysis.instance_body.async.push({ nodes: sync_group, has_await: false });\n\t\tsync_group = [];\n\t}\n\n\t/**\n\t * Analysis of blockers for functions is deferred until we know which statements are async/blockers\n\t * @type {Array<ESTree.FunctionDeclaration | ESTree.VariableDeclarator>}\n\t */\n\tconst functions = [];\n\n\tfor (let node of instance.ast.body) {\n\t\tif (node.type === 'ImportDeclaration') {\n\t\t\tanalysis.instance_body.hoisted.push(node);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (node.type === 'ExportDefaultDeclaration' || node.type === 'ExportAllDeclaration') {\n\t\t\t// these can't exist inside `<script>` but TypeScript doesn't know that\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (node.type === 'ExportNamedDeclaration') {\n\t\t\tif (node.declaration) {\n\t\t\t\tnode = node.declaration;\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst has_await = has_await_expression(node);\n\t\tawaited ||= has_await;\n\n\t\tif (node.type === 'FunctionDeclaration') {\n\t\t\tanalysis.instance_body.sync.push(node);\n\t\t\tfunctions.push(node);\n\t\t} else if (node.type === 'VariableDeclaration') {\n\t\t\tfor (const declarator of node.declarations) {\n\t\t\t\tif (get_rune(declarator.init, instance.scope) === '$props.id') {\n\t\t\t\t\t// special case\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tdeclarator.init?.type === 'ArrowFunctionExpression' ||\n\t\t\t\t\tdeclarator.init?.type === 'FunctionExpression'\n\t\t\t\t) {\n\t\t\t\t\t// One declarator per declaration, makes things simpler. The ternary ensures more accurate source maps in the common case\n\t\t\t\t\tanalysis.instance_body.sync.push(\n\t\t\t\t\t\tnode.declarations.length === 1 ? node : b.declaration(node.kind, [declarator])\n\t\t\t\t\t);\n\t\t\t\t\tfunctions.push(declarator);\n\t\t\t\t} else if (!awaited) {\n\t\t\t\t\t// One declarator per declaration, makes things simpler. The ternary ensures more accurate source maps in the common case\n\t\t\t\t\tanalysis.instance_body.sync.push(\n\t\t\t\t\t\tnode.declarations.length === 1 ? node : b.declaration(node.kind, [declarator])\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t/** @type {Set<Binding>} */\n\t\t\t\t\tconst reads = new Set(); // TODO we're not actually using this yet\n\n\t\t\t\t\t/** @type {Set<Binding>} */\n\t\t\t\t\tconst writes = new Set();\n\n\t\t\t\t\ttrace_references(declarator, reads, writes, instance.scope);\n\n\t\t\t\t\t// Needs to happen before blocker computation\n\t\t\t\t\tif (has_await) flush_sync_group();\n\n\t\t\t\t\tconst blocker = /** @type {NonNullable<Binding['blocker']>} */ (\n\t\t\t\t\t\tb.member(promises, b.literal(analysis.instance_body.async.length), true)\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const binding of writes) {\n\t\t\t\t\t\tbinding.blocker = blocker;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const id of extract_identifiers(declarator.id)) {\n\t\t\t\t\t\tpush_declaration(id, blocker);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (has_await) {\n\t\t\t\t\t\t// one declarator per declaration, makes things simpler\n\t\t\t\t\t\tanalysis.instance_body.async.push({ nodes: [declarator], has_await: true });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsync_group.push(declarator);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (awaited) {\n\t\t\t/** @type {Set<Binding>} */\n\t\t\tconst reads = new Set(); // TODO we're not actually using this yet\n\n\t\t\t/** @type {Set<Binding>} */\n\t\t\tconst writes = new Set();\n\n\t\t\ttrace_references(node, reads, writes, instance.scope);\n\n\t\t\t// Needs to happen before blocker computation\n\t\t\tif (has_await) flush_sync_group();\n\n\t\t\tconst blocker = /** @type {NonNullable<Binding['blocker']>} */ (\n\t\t\t\tb.member(promises, b.literal(analysis.instance_body.async.length), true)\n\t\t\t);\n\n\t\t\tfor (const binding of writes) {\n\t\t\t\tbinding.blocker = blocker;\n\t\t\t}\n\n\t\t\tif (node.type === 'ClassDeclaration') {\n\t\t\t\tpush_declaration(node.id, blocker);\n\t\t\t}\n\n\t\t\tif (has_await) {\n\t\t\t\tanalysis.instance_body.async.push({ nodes: [node], has_await: true });\n\t\t\t} else {\n\t\t\t\tsync_group.push(node);\n\t\t\t}\n\t\t} else {\n\t\t\tanalysis.instance_body.sync.push(node);\n\t\t}\n\t}\n\n\tflush_sync_group();\n\n\tfor (const fn of functions) {\n\t\t/** @type {Set<Binding>} */\n\t\tconst reads_writes = new Set();\n\t\tconst init =\n\t\t\tfn.type === 'VariableDeclarator'\n\t\t\t\t? /** @type {ESTree.FunctionExpression | ESTree.ArrowFunctionExpression} */ (fn.init)\n\t\t\t\t: fn;\n\n\t\ttrace_references(\n\t\t\tinit.body,\n\t\t\treads_writes,\n\t\t\treads_writes,\n\t\t\t/** @type {Scope} */ (instance.scopes.get(init))\n\t\t);\n\n\t\tconst max = [...reads_writes].reduce((max, binding) => {\n\t\t\tif (binding.blocker) {\n\t\t\t\tlet property = /** @type {ESTree.SimpleLiteral & { value: number }} */ (\n\t\t\t\t\tbinding.blocker.property\n\t\t\t\t);\n\n\t\t\t\treturn Math.max(property.value, max);\n\t\t\t}\n\n\t\t\treturn max;\n\t\t}, -1);\n\n\t\tif (max === -1) continue;\n\n\t\tconst blocker = b.member(promises, b.literal(max), true);\n\t\tconst binding = /** @type {Binding} */ (\n\t\t\tfn.type === 'FunctionDeclaration'\n\t\t\t\t? instance.scope.get(fn.id.name)\n\t\t\t\t: instance.scope.get(/** @type {ESTree.Identifier} */ (fn.id).name)\n\t\t);\n\n\t\tbinding.blocker = /** @type {typeof binding['blocker']} */ (blocker);\n\t}\n}\n\n/**\n * @param {Map<import('estree').LabeledStatement, ReactiveStatement>} unsorted_reactive_declarations\n */\nfunction order_reactive_statements(unsorted_reactive_declarations) {\n\t/** @typedef {[import('estree').LabeledStatement, ReactiveStatement]} Tuple */\n\n\t/** @type {Map<string, Array<Tuple>>} */\n\tconst lookup = new Map();\n\n\tfor (const [node, declaration] of unsorted_reactive_declarations) {\n\t\tfor (const binding of declaration.assignments) {\n\t\t\tconst statements = lookup.get(binding.node.name) ?? [];\n\t\t\tstatements.push([node, declaration]);\n\t\t\tlookup.set(binding.node.name, statements);\n\t\t}\n\t}\n\n\t/** @type {Array<[string, string]>} */\n\tconst edges = [];\n\n\tfor (const [, { assignments, dependencies }] of unsorted_reactive_declarations) {\n\t\tfor (const assignment of assignments) {\n\t\t\tfor (const dependency of dependencies) {\n\t\t\t\tif (!assignments.has(dependency)) {\n\t\t\t\t\tedges.push([assignment.node.name, dependency.node.name]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst cycle = check_graph_for_cycles(edges);\n\tif (cycle?.length) {\n\t\tconst declaration = /** @type {Tuple[]} */ (lookup.get(cycle[0]))[0];\n\t\te.reactive_declaration_cycle(declaration[0], cycle.join(' → '));\n\t}\n\n\t// We use a map and take advantage of the fact that the spec says insertion order is preserved when iterating\n\t/** @type {Map<import('estree').LabeledStatement, ReactiveStatement>} */\n\tconst reactive_declarations = new Map();\n\n\t/**\n\t *\n\t * @param {import('estree').LabeledStatement} node\n\t * @param {ReactiveStatement} declaration\n\t * @returns\n\t */\n\tconst add_declaration = (node, declaration) => {\n\t\tif ([...reactive_declarations.values()].includes(declaration)) return;\n\n\t\tfor (const binding of declaration.dependencies) {\n\t\t\tif (declaration.assignments.has(binding)) continue;\n\t\t\tfor (const [node, earlier] of lookup.get(binding.node.name) ?? []) {\n\t\t\t\tadd_declaration(node, earlier);\n\t\t\t}\n\t\t}\n\n\t\treactive_declarations.set(node, declaration);\n\t};\n\n\tfor (const [node, declaration] of unsorted_reactive_declarations) {\n\t\tadd_declaration(node, declaration);\n\t}\n\n\treturn reactive_declarations;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/types.d.ts",
    "content": "import type { Scope } from '../scope.js';\nimport type { ComponentAnalysis, ReactiveStatement } from '../types.js';\nimport type { AST, StateField, ValidatedCompileOptions } from '#compiler';\nimport type { ExpressionMetadata } from '../nodes.js';\n\nexport interface AnalysisState {\n\tscope: Scope;\n\tscopes: Map<AST.SvelteNode, Scope>;\n\tanalysis: ComponentAnalysis;\n\toptions: ValidatedCompileOptions;\n\tast_type: 'instance' | 'template' | 'module';\n\tfragment: AST.Fragment | null;\n\t/**\n\t * Tag name of the parent element. `null` if the parent is `svelte:element`, `#snippet`, a component or the root.\n\t * Parent doesn't necessarily mean direct path predecessor because there could be `#each`, `#if` etc in-between.\n\t */\n\tparent_element: string | null;\n\thas_props_rune: boolean;\n\t/** Which slots the current parent component has */\n\tcomponent_slots: Set<string>;\n\t/** Information about the current expression/directive/block value */\n\texpression: ExpressionMetadata | null;\n\n\t/** Used to analyze class state */\n\tstate_fields: Map<string, StateField>;\n\n\tfunction_depth: number;\n\n\t// legacy stuff\n\treactive_statement: null | ReactiveStatement;\n\n\t/**\n\t * Set when we're inside a `$derived(...)` expression (but not `$derived.by(...)`) or `@const`\n\t */\n\tderived_function_depth: number;\n}\n\nexport type Context<State extends AnalysisState = AnalysisState> = import('zimmerframe').Context<\n\tAST.SvelteNode,\n\tState\n>;\n\nexport type Visitors<State extends AnalysisState = AnalysisState> = import('zimmerframe').Visitors<\n\tAST.SvelteNode,\n\tState\n>;\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/utils/check_graph_for_cycles.js",
    "content": "/**\n * @template T\n * @param {Array<[T, T]>} edges\n * @returns {Array<T>|undefined}\n */\nexport default function check_graph_for_cycles(edges) {\n\t/** @type {Map<T, T[]>} */\n\tconst graph = edges.reduce((g, edge) => {\n\t\tconst [u, v] = edge;\n\t\tif (!g.has(u)) g.set(u, []);\n\t\tif (!g.has(v)) g.set(v, []);\n\t\tg.get(u).push(v);\n\t\treturn g;\n\t}, new Map());\n\n\tconst visited = new Set();\n\t/** @type {Set<T>} */\n\tconst on_stack = new Set();\n\t/** @type {Array<Array<T>>} */\n\tconst cycles = [];\n\n\t/**\n\t * @param {T} v\n\t */\n\tfunction visit(v) {\n\t\tvisited.add(v);\n\t\ton_stack.add(v);\n\n\t\tgraph.get(v)?.forEach((w) => {\n\t\t\tif (!visited.has(w)) {\n\t\t\t\tvisit(w);\n\t\t\t} else if (on_stack.has(w)) {\n\t\t\t\tcycles.push([...on_stack, w]);\n\t\t\t}\n\t\t});\n\n\t\ton_stack.delete(v);\n\t}\n\n\tgraph.forEach((_, v) => {\n\t\tif (!visited.has(v)) {\n\t\t\tvisit(v);\n\t\t}\n\t});\n\n\treturn cycles[0];\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/AnimateDirective.js",
    "content": "/** @import { Context } from '../types' */\n/** @import { AST } from '#compiler'; */\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.AnimateDirective} node\n * @param {Context} context\n */\nexport function AnimateDirective(node, context) {\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n\n\tif (node.metadata.expression.has_await) {\n\t\te.illegal_await_expression(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ArrowFunctionExpression.js",
    "content": "/** @import { ArrowFunctionExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { visit_function } from './shared/function.js';\n\n/**\n * @param {ArrowFunctionExpression} node\n * @param {Context} context\n */\nexport function ArrowFunctionExpression(node, context) {\n\tvisit_function(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/AssignmentExpression.js",
    "content": "/** @import { AssignmentExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { extract_identifiers, object } from '../../../utils/ast.js';\nimport { validate_assignment } from './shared/utils.js';\n\n/**\n * @param {AssignmentExpression} node\n * @param {Context} context\n */\nexport function AssignmentExpression(node, context) {\n\tvalidate_assignment(node, node.left, context);\n\n\tif (context.state.reactive_statement) {\n\t\tconst id = node.left.type === 'MemberExpression' ? object(node.left) : node.left;\n\t\tif (id !== null) {\n\t\t\tfor (const id of extract_identifiers(node.left)) {\n\t\t\t\tconst binding = context.state.scope.get(id.name);\n\n\t\t\t\tif (binding) {\n\t\t\t\t\tcontext.state.reactive_statement.assignments.add(binding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (context.state.expression) {\n\t\tcontext.state.expression.has_assignment = true;\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/AttachTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.AttachTag} node\n * @param {Context} context\n */\nexport function AttachTag(node, context) {\n\tmark_subtree_dynamic(context.path);\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n\n\tif (node.metadata.expression.has_await) {\n\t\te.illegal_await_expression(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/Attribute.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { cannot_be_set_statically, can_delegate_event } from '../../../../utils.js';\nimport { get_attribute_chunks, is_event_attribute } from '../../../utils/ast.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.Attribute} node\n * @param {Context} context\n */\nexport function Attribute(node, context) {\n\tcontext.next();\n\n\tconst parent = /** @type {AST.SvelteNode} */ (context.path.at(-1));\n\n\tif (parent.type === 'RegularElement') {\n\t\t// special case <option value=\"\" />\n\t\tif (node.name === 'value' && parent.name === 'option') {\n\t\t\tmark_subtree_dynamic(context.path);\n\t\t}\n\t}\n\n\tif (is_event_attribute(node)) {\n\t\tmark_subtree_dynamic(context.path);\n\t}\n\n\tif (cannot_be_set_statically(node.name)) {\n\t\tmark_subtree_dynamic(context.path);\n\t}\n\n\t// class={[...]} or class={{...}} or `class={x}` need clsx to resolve the classes\n\tif (\n\t\tnode.name === 'class' &&\n\t\t!Array.isArray(node.value) &&\n\t\tnode.value !== true &&\n\t\tnode.value.expression.type !== 'Literal' &&\n\t\tnode.value.expression.type !== 'TemplateLiteral' &&\n\t\tnode.value.expression.type !== 'BinaryExpression'\n\t) {\n\t\tmark_subtree_dynamic(context.path);\n\t\tnode.metadata.needs_clsx = true;\n\t}\n\n\tif (node.value !== true) {\n\t\tfor (const chunk of get_attribute_chunks(node.value)) {\n\t\t\tif (chunk.type !== 'ExpressionTag') continue;\n\n\t\t\tif (\n\t\t\t\tchunk.expression.type === 'FunctionExpression' ||\n\t\t\t\tchunk.expression.type === 'ArrowFunctionExpression'\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (is_event_attribute(node)) {\n\t\t\tconst parent = context.path.at(-1);\n\t\t\tif (parent?.type === 'RegularElement' || parent?.type === 'SvelteElement') {\n\t\t\t\tcontext.state.analysis.uses_event_attributes = true;\n\t\t\t}\n\n\t\t\tnode.metadata.delegated =\n\t\t\t\tparent?.type === 'RegularElement' && can_delegate_event(node.name.slice(2));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitBlock.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { validate_block_not_empty, validate_opening_tag } from './shared/utils.js';\nimport * as e from '../../../errors.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.AwaitBlock} node\n * @param {Context} context\n */\nexport function AwaitBlock(node, context) {\n\tvalidate_block_not_empty(node.pending, context);\n\tvalidate_block_not_empty(node.then, context);\n\tvalidate_block_not_empty(node.catch, context);\n\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, '#');\n\n\t\tif (node.value) {\n\t\t\tconst start = /** @type {number} */ (node.value.start);\n\t\t\tconst match = context.state.analysis.source\n\t\t\t\t.substring(start - 10, start)\n\t\t\t\t.match(/{(\\s*):then\\s+$/);\n\n\t\t\tif (match && match[1] !== '') {\n\t\t\t\te.block_unexpected_character({ start: start - 10, end: start }, ':');\n\t\t\t}\n\t\t}\n\n\t\tif (node.error) {\n\t\t\tconst start = /** @type {number} */ (node.error.start);\n\t\t\tconst match = context.state.analysis.source\n\t\t\t\t.substring(start - 10, start)\n\t\t\t\t.match(/{(\\s*):catch\\s+$/);\n\n\t\t\tif (match && match[1] !== '') {\n\t\t\t\te.block_unexpected_character({ start: start - 10, end: start }, ':');\n\t\t\t}\n\t\t}\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.visit(node.expression, { ...context.state, expression: node.metadata.expression });\n\tif (node.pending) context.visit(node.pending);\n\tif (node.then) context.visit(node.then);\n\tif (node.catch) context.visit(node.catch);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js",
    "content": "/** @import { AwaitExpression, Expression, SpreadElement, Property } from 'estree' */\n/** @import { Context } from '../types' */\n/** @import { AST } from '#compiler' */\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AwaitExpression} node\n * @param {Context} context\n */\nexport function AwaitExpression(node, context) {\n\tconst tla = context.state.ast_type === 'instance' && context.state.function_depth === 1;\n\n\t// preserve context for awaits that precede other expressions in template or `$derived(...)`\n\tif (\n\t\tis_reactive_expression(\n\t\t\tcontext.path,\n\t\t\tcontext.state.derived_function_depth === context.state.function_depth\n\t\t) &&\n\t\t!is_last_evaluated_expression(context.path, node)\n\t) {\n\t\tcontext.state.analysis.pickled_awaits.add(node);\n\t}\n\n\tlet suspend = tla;\n\n\tif (context.state.expression) {\n\t\tcontext.state.expression.has_await = true;\n\n\t\tsuspend = true;\n\t}\n\n\t// disallow top-level `await` or `await` in template expressions\n\t// unless a) in runes mode and b) opted into `experimental.async`\n\tif (suspend) {\n\t\tif (!context.state.options.experimental.async) {\n\t\t\te.experimental_async(node);\n\t\t}\n\n\t\tif (!context.state.analysis.runes) {\n\t\t\te.legacy_await_invalid(node);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n\n/**\n * @param {AST.SvelteNode[]} path\n * @param {boolean} in_derived\n */\nexport function is_reactive_expression(path, in_derived) {\n\tif (in_derived) return true;\n\n\tlet i = path.length;\n\n\twhile (i--) {\n\t\tconst parent = path[i];\n\n\t\tif (\n\t\t\tparent.type === 'ArrowFunctionExpression' ||\n\t\t\tparent.type === 'FunctionExpression' ||\n\t\t\tparent.type === 'FunctionDeclaration'\n\t\t) {\n\t\t\t// No reactive expression found between function and await\n\t\t\treturn false;\n\t\t}\n\n\t\t// @ts-expect-error we could probably use a neater/more robust mechanism\n\t\tif (parent.metadata) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {AST.SvelteNode[]} path\n * @param {Expression | SpreadElement | Property} node\n */\nfunction is_last_evaluated_expression(path, node) {\n\tlet i = path.length;\n\n\twhile (i--) {\n\t\tconst parent = path[i];\n\n\t\tif (parent.type === 'ConstTag') {\n\t\t\t// {@const ...} tags are treated as deriveds and its contents should all get the preserve-reactivity treatment\n\t\t\treturn false;\n\t\t}\n\n\t\t// @ts-expect-error we could probably use a neater/more robust mechanism\n\t\tif (parent.metadata) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (parent.type) {\n\t\t\tcase 'ArrayExpression':\n\t\t\t\tif (node !== parent.elements.at(-1)) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'AssignmentExpression':\n\t\t\tcase 'BinaryExpression':\n\t\t\tcase 'LogicalExpression':\n\t\t\t\tif (node === parent.left) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'CallExpression':\n\t\t\tcase 'NewExpression':\n\t\t\t\tif (node !== parent.arguments.at(-1)) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ConditionalExpression':\n\t\t\t\tif (node === parent.test) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'MemberExpression':\n\t\t\t\tif (parent.computed && node === parent.object) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ObjectExpression':\n\t\t\t\tif (node !== parent.properties.at(-1)) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'Property':\n\t\t\t\tif (node === parent.key) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'SequenceExpression':\n\t\t\t\tif (node !== parent.expressions.at(-1)) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'TaggedTemplateExpression':\n\t\t\t\tif (node !== parent.quasi.expressions.at(-1)) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'TemplateLiteral':\n\t\t\t\tif (node !== parent.expressions.at(-1)) return false;\n\t\t\t\tbreak;\n\n\t\t\tcase 'VariableDeclarator':\n\t\t\t\treturn true;\n\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\n\t\tnode = parent;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/BindDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport {\n\textract_all_identifiers_from_expression,\n\tis_text_attribute,\n\tobject\n} from '../../../utils/ast.js';\nimport { validate_assignment } from './shared/utils.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { binding_properties } from '../../bindings.js';\nimport fuzzymatch from '../../1-parse/utils/fuzzymatch.js';\nimport { is_content_editable_binding, is_svg } from '../../../../utils.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.BindDirective} node\n * @param {Context} context\n */\nexport function BindDirective(node, context) {\n\tconst parent = context.path.at(-1);\n\n\tif (\n\t\tparent?.type === 'RegularElement' ||\n\t\tparent?.type === 'SvelteElement' ||\n\t\tparent?.type === 'SvelteWindow' ||\n\t\tparent?.type === 'SvelteDocument' ||\n\t\tparent?.type === 'SvelteBody'\n\t) {\n\t\tif (node.name in binding_properties) {\n\t\t\tconst property = binding_properties[node.name];\n\t\t\tif (property.valid_elements && !property.valid_elements.includes(parent.name)) {\n\t\t\t\te.bind_invalid_target(\n\t\t\t\t\tnode,\n\t\t\t\t\tnode.name,\n\t\t\t\t\tproperty.valid_elements.map((valid_element) => `\\`<${valid_element}>\\``).join(', ')\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (property.invalid_elements && property.invalid_elements.includes(parent.name)) {\n\t\t\t\tconst valid_bindings = Object.entries(binding_properties)\n\t\t\t\t\t.filter(([_, binding_property]) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tbinding_property.valid_elements?.includes(parent.name) ||\n\t\t\t\t\t\t\t(!binding_property.valid_elements &&\n\t\t\t\t\t\t\t\t!binding_property.invalid_elements?.includes(parent.name))\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t\t.map(([property_name]) => property_name)\n\t\t\t\t\t.sort();\n\n\t\t\t\te.bind_invalid_name(\n\t\t\t\t\tnode,\n\t\t\t\t\tnode.name,\n\t\t\t\t\t`Possible bindings for <${parent.name}> are ${valid_bindings.join(', ')}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (parent.name === 'input' && node.name !== 'this') {\n\t\t\t\tconst type = /** @type {AST.Attribute | undefined} */ (\n\t\t\t\t\tparent.attributes.find((a) => a.type === 'Attribute' && a.name === 'type')\n\t\t\t\t);\n\n\t\t\t\tif (type && !is_text_attribute(type)) {\n\t\t\t\t\tif (node.name !== 'value' || type.value === true) {\n\t\t\t\t\t\te.attribute_invalid_type(type);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (node.name === 'checked' && type?.value[0].data !== 'checkbox') {\n\t\t\t\t\t\te.bind_invalid_target(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tnode.name,\n\t\t\t\t\t\t\t`\\`<input type=\"checkbox\">\\`${type?.value[0].data === 'radio' ? ` — for \\`<input type=\"radio\">\\`, use \\`bind:group\\`` : ''}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.name === 'files' && type?.value[0].data !== 'file') {\n\t\t\t\t\t\te.bind_invalid_target(node, node.name, '`<input type=\"file\">`');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (parent.name === 'select' && node.name !== 'this') {\n\t\t\t\tconst multiple = parent.attributes.find(\n\t\t\t\t\t(a) =>\n\t\t\t\t\t\ta.type === 'Attribute' &&\n\t\t\t\t\t\ta.name === 'multiple' &&\n\t\t\t\t\t\t!is_text_attribute(a) &&\n\t\t\t\t\t\ta.value !== true\n\t\t\t\t);\n\n\t\t\t\tif (multiple) {\n\t\t\t\t\te.attribute_invalid_multiple(multiple);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.name === 'offsetWidth' && is_svg(parent.name)) {\n\t\t\t\te.bind_invalid_target(\n\t\t\t\t\tnode,\n\t\t\t\t\tnode.name,\n\t\t\t\t\t`non-\\`<svg>\\` elements. Use \\`bind:clientWidth\\` for \\`<svg>\\` instead`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (is_content_editable_binding(node.name)) {\n\t\t\t\tconst contenteditable = /** @type {AST.Attribute} */ (\n\t\t\t\t\tparent.attributes.find((a) => a.type === 'Attribute' && a.name === 'contenteditable')\n\t\t\t\t);\n\n\t\t\t\tif (!contenteditable) {\n\t\t\t\t\te.attribute_contenteditable_missing(node);\n\t\t\t\t} else if (!is_text_attribute(contenteditable) && contenteditable.value !== true) {\n\t\t\t\t\te.attribute_contenteditable_dynamic(contenteditable);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst match = fuzzymatch(node.name, Object.keys(binding_properties));\n\n\t\t\tif (match) {\n\t\t\t\tconst property = binding_properties[match];\n\t\t\t\tif (!property.valid_elements || property.valid_elements.includes(parent.name)) {\n\t\t\t\t\te.bind_invalid_name(node, node.name, `Did you mean '${match}'?`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\te.bind_invalid_name(node, node.name);\n\t\t}\n\t}\n\n\t// When dealing with bind getters/setters skip the specific binding validation\n\t// Group bindings aren't supported for getter/setters so we don't need to handle\n\t// the metadata\n\tif (node.expression.type === 'SequenceExpression') {\n\t\tif (node.name === 'group') {\n\t\t\te.bind_group_invalid_expression(node);\n\t\t}\n\n\t\tlet i = /** @type {number} */ (node.expression.start);\n\t\tlet leading_comments_start = /**@type {any}*/ (node.expression.leadingComments?.at(0))?.start;\n\t\tlet leading_comments_end = /**@type {any}*/ (node.expression.leadingComments?.at(-1))?.end;\n\t\twhile (context.state.analysis.source[--i] !== '{') {\n\t\t\tif (\n\t\t\t\tcontext.state.analysis.source[i] === '(' &&\n\t\t\t\t// if the parenthesis is in a leading comment we don't need to throw the error\n\t\t\t\t!(\n\t\t\t\t\tleading_comments_start &&\n\t\t\t\t\tleading_comments_end &&\n\t\t\t\t\ti <= leading_comments_end &&\n\t\t\t\t\ti >= leading_comments_start\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\te.bind_invalid_parens(node, node.name);\n\t\t\t}\n\t\t}\n\n\t\tif (node.expression.expressions.length !== 2) {\n\t\t\te.bind_invalid_expression(node);\n\t\t}\n\n\t\tmark_subtree_dynamic(context.path);\n\n\t\tconst [get, set] = node.expression.expressions;\n\t\t// We gotta jump across the getter/setter functions to avoid the expression metadata field being reset to null\n\t\t// as we want to collect the functions' blocker/async info\n\t\tcontext.visit(get.type === 'ArrowFunctionExpression' ? get.body : get, {\n\t\t\t...context.state,\n\t\t\texpression: node.metadata.expression\n\t\t});\n\t\tcontext.visit(set.type === 'ArrowFunctionExpression' ? set.body : set, {\n\t\t\t...context.state,\n\t\t\texpression: node.metadata.expression\n\t\t});\n\n\t\tif (node.metadata.expression.has_await) {\n\t\t\te.illegal_await_expression(node);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tvalidate_assignment(node, node.expression, context);\n\n\tconst assignee = node.expression;\n\tconst left = object(assignee);\n\n\tif (left === null) {\n\t\te.bind_invalid_expression(node);\n\t}\n\n\tconst binding = context.state.scope.get(left.name);\n\tnode.metadata.binding = binding;\n\n\tif (assignee.type === 'Identifier') {\n\t\t// reassignment\n\t\tif (\n\t\t\tnode.name !== 'this' && // bind:this also works for regular variables\n\t\t\t(!binding ||\n\t\t\t\t(binding.kind !== 'state' &&\n\t\t\t\t\tbinding.kind !== 'raw_state' &&\n\t\t\t\t\tbinding.kind !== 'prop' &&\n\t\t\t\t\tbinding.kind !== 'bindable_prop' &&\n\t\t\t\t\tbinding.kind !== 'each' &&\n\t\t\t\t\tbinding.kind !== 'store_sub' &&\n\t\t\t\t\t!binding.updated)) // TODO wut?\n\t\t) {\n\t\t\te.bind_invalid_value(node.expression);\n\t\t}\n\t}\n\n\tif (node.name === 'group') {\n\t\tif (!binding) {\n\t\t\tthrow new Error('Cannot find declaration for bind:group');\n\t\t}\n\n\t\tif (binding.kind === 'snippet') {\n\t\t\te.bind_group_invalid_snippet_parameter(node);\n\t\t}\n\n\t\t// Traverse the path upwards and find all EachBlocks who are (indirectly) contributing to bind:group,\n\t\t// i.e. one of their declarations is referenced in the binding. This allows group bindings to work\n\t\t// correctly when referencing a variable declared in an EachBlock by using the index of the each block\n\t\t// entries as keys.\n\t\tconst each_blocks = [];\n\t\tconst [keypath, expression_ids] = extract_all_identifiers_from_expression(node.expression);\n\t\tlet ids = expression_ids;\n\n\t\tlet i = context.path.length;\n\t\twhile (i--) {\n\t\t\tconst parent = context.path[i];\n\n\t\t\tif (parent.type === 'EachBlock') {\n\t\t\t\tconst references = ids.filter((id) => parent.metadata.declarations.has(id.name));\n\n\t\t\t\tif (references.length > 0) {\n\t\t\t\t\tparent.metadata.contains_group_binding = true;\n\n\t\t\t\t\teach_blocks.push(parent);\n\t\t\t\t\tids = ids.filter((id) => !references.includes(id));\n\t\t\t\t\tids.push(...extract_all_identifiers_from_expression(parent.expression)[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// The identifiers that make up the binding expression form they key for the binding group.\n\t\t// If the same identifiers in the same order are used in another bind:group, they will be in the same group.\n\t\t// (there's an edge case where `bind:group={a[i]}` will be in a different group than `bind:group={a[j]}` even when i == j,\n\t\t//  but this is a limitation of the current static analysis we do; it also never worked in Svelte 4)\n\t\tconst bindings = expression_ids.map((id) => context.state.scope.get(id.name));\n\t\tlet group_name;\n\n\t\touter: for (const [[key, b], group] of context.state.analysis.binding_groups) {\n\t\t\tif (b.length !== bindings.length || key !== keypath) continue;\n\t\t\tfor (let i = 0; i < bindings.length; i++) {\n\t\t\t\tif (bindings[i] !== b[i]) continue outer;\n\t\t\t}\n\t\t\tgroup_name = group;\n\t\t}\n\n\t\tif (!group_name) {\n\t\t\tgroup_name = context.state.scope.root.unique('binding_group');\n\t\t\tcontext.state.analysis.binding_groups.set([keypath, bindings], group_name);\n\t\t}\n\n\t\tnode.metadata = {\n\t\t\tbinding_group_name: group_name,\n\t\t\tparent_each_blocks: each_blocks,\n\t\t\texpression: node.metadata.expression\n\t\t};\n\t}\n\n\tif (binding?.kind === 'each' && binding.metadata?.inside_rest) {\n\t\tw.bind_invalid_each_rest(binding.node, binding.node.name);\n\t}\n\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n\n\tif (node.metadata.expression.has_await) {\n\t\te.illegal_await_expression(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js",
    "content": "/** @import { ArrowFunctionExpression, CallExpression, Expression, FunctionDeclaration, FunctionExpression, Identifier, VariableDeclarator } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { get_rune } from '../../scope.js';\nimport * as e from '../../../errors.js';\nimport { get_parent } from '../../../utils/ast.js';\nimport { is_pure, is_safe_identifier } from './shared/utils.js';\nimport { dev, locate_node, source } from '../../../state.js';\nimport * as b from '#compiler/builders';\nimport { ExpressionMetadata } from '../../nodes.js';\n\n/**\n * @param {CallExpression} node\n * @param {Context} context\n */\nexport function CallExpression(node, context) {\n\tconst parent = /** @type {AST.SvelteNode} */ (get_parent(context.path, -1));\n\n\tconst rune = get_rune(node, context.state.scope);\n\n\tif (rune && rune !== '$inspect') {\n\t\tfor (const arg of node.arguments) {\n\t\t\tif (arg.type === 'SpreadElement') {\n\t\t\t\te.rune_invalid_spread(node, rune);\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch (rune) {\n\t\tcase null:\n\t\t\tif (!is_safe_identifier(node.callee, context.state.scope)) {\n\t\t\t\tcontext.state.analysis.needs_context = true;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$bindable':\n\t\t\tif (node.arguments.length > 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, '$bindable', 'zero or one arguments');\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tparent.type !== 'AssignmentPattern' ||\n\t\t\t\tcontext.path.at(-3)?.type !== 'ObjectPattern' ||\n\t\t\t\tcontext.path.at(-4)?.type !== 'VariableDeclarator' ||\n\t\t\t\tget_rune(\n\t\t\t\t\t/** @type {VariableDeclarator} */ (context.path.at(-4)).init,\n\t\t\t\t\tcontext.state.scope\n\t\t\t\t) !== '$props'\n\t\t\t) {\n\t\t\t\te.bindable_invalid_location(node);\n\t\t\t}\n\n\t\t\t// We need context in case the bound prop is stale\n\t\t\tcontext.state.analysis.needs_context = true;\n\n\t\t\tbreak;\n\n\t\tcase '$host':\n\t\t\tif (node.arguments.length > 0) {\n\t\t\t\te.rune_invalid_arguments(node, '$host');\n\t\t\t} else if (context.state.ast_type === 'module' || !context.state.analysis.custom_element) {\n\t\t\t\te.host_invalid_placement(node);\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$props':\n\t\t\tif (context.state.has_props_rune) {\n\t\t\t\te.props_duplicate(node, rune);\n\t\t\t}\n\n\t\t\tcontext.state.has_props_rune = true;\n\n\t\t\tif (\n\t\t\t\tparent.type !== 'VariableDeclarator' ||\n\t\t\t\tcontext.state.ast_type !== 'instance' ||\n\t\t\t\tcontext.state.scope !== context.state.analysis.instance.scope\n\t\t\t) {\n\t\t\t\te.props_invalid_placement(node);\n\t\t\t}\n\n\t\t\tif (node.arguments.length > 0) {\n\t\t\t\te.rune_invalid_arguments(node, rune);\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$props.id': {\n\t\t\tconst grand_parent = get_parent(context.path, -2);\n\n\t\t\tif (context.state.analysis.props_id) {\n\t\t\t\te.props_duplicate(node, rune);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tparent.type !== 'VariableDeclarator' ||\n\t\t\t\tparent.id.type !== 'Identifier' ||\n\t\t\t\tcontext.state.ast_type !== 'instance' ||\n\t\t\t\tcontext.state.scope !== context.state.analysis.instance.scope ||\n\t\t\t\tgrand_parent.type !== 'VariableDeclaration'\n\t\t\t) {\n\t\t\t\te.props_id_invalid_placement(node);\n\t\t\t}\n\n\t\t\tif (node.arguments.length > 0) {\n\t\t\t\te.rune_invalid_arguments(node, rune);\n\t\t\t}\n\n\t\t\tcontext.state.analysis.props_id = parent.id;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase '$state':\n\t\tcase '$state.raw':\n\t\tcase '$derived':\n\t\tcase '$derived.by': {\n\t\t\tconst valid =\n\t\t\t\tis_variable_declaration(parent, context) ||\n\t\t\t\tis_class_property_definition(parent) ||\n\t\t\t\tis_class_property_assignment_at_constructor_root(parent, context);\n\n\t\t\tif (!valid) {\n\t\t\t\te.state_invalid_placement(node, rune);\n\t\t\t}\n\n\t\t\tif ((rune === '$derived' || rune === '$derived.by') && node.arguments.length !== 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'exactly one argument');\n\t\t\t} else if (node.arguments.length > 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'zero or one arguments');\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase '$effect':\n\t\tcase '$effect.pre':\n\t\t\tif (parent.type !== 'ExpressionStatement') {\n\t\t\t\te.effect_invalid_placement(node);\n\t\t\t}\n\n\t\t\tif (node.arguments.length !== 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'exactly one argument');\n\t\t\t}\n\n\t\t\t// `$effect` needs context because Svelte needs to know whether it should re-run\n\t\t\t// effects that invalidate themselves, and that's determined by whether we're in runes mode\n\t\t\tcontext.state.analysis.needs_context = true;\n\n\t\t\tbreak;\n\n\t\tcase '$effect.tracking':\n\t\t\tif (node.arguments.length !== 0) {\n\t\t\t\te.rune_invalid_arguments(node, rune);\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$effect.root':\n\t\t\tif (node.arguments.length !== 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'exactly one argument');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$effect.pending':\n\t\t\tif (context.state.expression) {\n\t\t\t\tcontext.state.expression.has_state = true;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$inspect':\n\t\t\tif (node.arguments.length < 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'one or more arguments');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$inspect().with':\n\t\t\tif (node.arguments.length !== 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'exactly one argument');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$inspect.trace': {\n\t\t\tif (node.arguments.length > 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'zero or one arguments');\n\t\t\t}\n\n\t\t\tconst grand_parent = context.path.at(-2);\n\t\t\tconst fn = context.path.at(-3);\n\n\t\t\tif (\n\t\t\t\tparent.type !== 'ExpressionStatement' ||\n\t\t\t\tgrand_parent?.type !== 'BlockStatement' ||\n\t\t\t\t!(\n\t\t\t\t\tfn?.type === 'FunctionDeclaration' ||\n\t\t\t\t\tfn?.type === 'FunctionExpression' ||\n\t\t\t\t\tfn?.type === 'ArrowFunctionExpression'\n\t\t\t\t) ||\n\t\t\t\tgrand_parent.body[0] !== parent\n\t\t\t) {\n\t\t\t\te.inspect_trace_invalid_placement(node);\n\t\t\t}\n\n\t\t\tif (fn.generator) {\n\t\t\t\te.inspect_trace_generator(node);\n\t\t\t}\n\n\t\t\tif (dev) {\n\t\t\t\tif (node.arguments[0]) {\n\t\t\t\t\tcontext.state.scope.tracing = b.thunk(/** @type {Expression} */ (node.arguments[0]));\n\t\t\t\t} else {\n\t\t\t\t\tconst label = get_function_label(context.path.slice(0, -2)) ?? 'trace';\n\t\t\t\t\tconst loc = `(${locate_node(fn)})`;\n\n\t\t\t\t\tcontext.state.scope.tracing = b.thunk(b.literal(label + ' ' + loc));\n\t\t\t\t}\n\n\t\t\t\tcontext.state.analysis.tracing = true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase '$state.eager':\n\t\t\tif (node.arguments.length !== 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'exactly one argument');\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase '$state.snapshot':\n\t\t\tif (node.arguments.length !== 1) {\n\t\t\t\te.rune_invalid_arguments_length(node, rune, 'exactly one argument');\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\t// `$inspect(foo)` or `$derived(foo) should not trigger the `static-state-reference` warning\n\tif (rune === '$derived') {\n\t\tconst expression = new ExpressionMetadata();\n\n\t\tcontext.next({\n\t\t\t...context.state,\n\t\t\tfunction_depth: context.state.function_depth + 1,\n\t\t\tderived_function_depth: context.state.function_depth + 1,\n\t\t\texpression\n\t\t});\n\n\t\tif (expression.has_await) {\n\t\t\tcontext.state.analysis.async_deriveds.add(node);\n\t\t}\n\t} else if (rune === '$inspect') {\n\t\tcontext.next({ ...context.state, function_depth: context.state.function_depth + 1 });\n\t} else {\n\t\tcontext.next();\n\t}\n\n\tif (context.state.expression) {\n\t\t// TODO We assume that any dependencies are stateful, which isn't necessarily the case — see\n\t\t// https://github.com/sveltejs/svelte/issues/13266. This check also includes dependencies\n\t\t// outside the call expression itself (e.g. `{blah && pure()}`) resulting in additional\n\t\t// false positives, but for now we accept that trade-off\n\t\tif (!is_pure(node.callee, context) || context.state.expression.dependencies.size > 0) {\n\t\t\tcontext.state.expression.has_call = true;\n\t\t\tcontext.state.expression.has_state = true;\n\t\t}\n\t}\n}\n\n/**\n * @param {AST.SvelteNode[]} nodes\n */\nfunction get_function_label(nodes) {\n\tconst fn = /** @type {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} */ (\n\t\tnodes.at(-1)\n\t);\n\n\tif ((fn.type === 'FunctionDeclaration' || fn.type === 'FunctionExpression') && fn.id != null) {\n\t\treturn fn.id.name;\n\t}\n\n\tconst parent = nodes.at(-2);\n\tif (!parent) return;\n\n\tif (parent.type === 'CallExpression') {\n\t\treturn source.slice(parent.callee.start, parent.callee.end) + '(...)';\n\t}\n\n\tif (parent.type === 'Property' && !parent.computed) {\n\t\treturn /** @type {Identifier} */ (parent.key).name;\n\t}\n\n\tif (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n\t\treturn parent.id.name;\n\t}\n}\n\n/**\n * @param {AST.SvelteNode} parent\n * @param {Context} context\n */\nfunction is_variable_declaration(parent, context) {\n\treturn parent.type === 'VariableDeclarator' && get_parent(context.path, -3).type !== 'ConstTag';\n}\n\n/**\n * @param {AST.SvelteNode} parent\n */\nfunction is_class_property_definition(parent) {\n\treturn parent.type === 'PropertyDefinition' && !parent.static && !parent.computed;\n}\n\n/**\n * @param {AST.SvelteNode} node\n * @param {Context} context\n */\nfunction is_class_property_assignment_at_constructor_root(node, context) {\n\tif (\n\t\tnode.type === 'AssignmentExpression' &&\n\t\tnode.operator === '=' &&\n\t\tnode.left.type === 'MemberExpression' &&\n\t\tnode.left.object.type === 'ThisExpression' &&\n\t\t((node.left.property.type === 'Identifier' && !node.left.computed) ||\n\t\t\tnode.left.property.type === 'PrivateIdentifier' ||\n\t\t\tnode.left.property.type === 'Literal')\n\t) {\n\t\t// MethodDefinition (-5) -> FunctionExpression (-4) -> BlockStatement (-3) -> ExpressionStatement (-2) -> AssignmentExpression (-1)\n\t\tconst parent = get_parent(context.path, -5);\n\t\treturn parent?.type === 'MethodDefinition' && parent.kind === 'constructor';\n\t}\n\n\treturn false;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ClassBody.js",
    "content": "/** @import { AssignmentExpression, CallExpression, ClassBody, PropertyDefinition, Expression, PrivateIdentifier, MethodDefinition } from 'estree' */\n/** @import { StateField } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../scope.js';\nimport * as e from '../../../errors.js';\nimport { is_state_creation_rune } from '../../../../utils.js';\nimport { get_name } from '../../nodes.js';\nimport { regex_invalid_identifier_chars } from '../../patterns.js';\n\n/**\n * @param {ClassBody} node\n * @param {Context} context\n */\nexport function ClassBody(node, context) {\n\tif (!context.state.analysis.runes) {\n\t\tcontext.next();\n\t\treturn;\n\t}\n\n\t/** @type {string[]} */\n\tconst private_ids = [];\n\n\tfor (const prop of node.body) {\n\t\tif (\n\t\t\t(prop.type === 'MethodDefinition' || prop.type === 'PropertyDefinition') &&\n\t\t\tprop.key.type === 'PrivateIdentifier'\n\t\t) {\n\t\t\tprivate_ids.push(prop.key.name);\n\t\t}\n\t}\n\n\t/** @type {Map<string, StateField>} */\n\tconst state_fields = new Map();\n\n\t/** @type {Map<string, Array<MethodDefinition['kind'] | 'prop' | 'assigned_prop'>>} */\n\tconst fields = new Map();\n\n\tcontext.state.analysis.classes.set(node, state_fields);\n\n\t/** @type {MethodDefinition | null} */\n\tlet constructor = null;\n\n\t/**\n\t * @param {PropertyDefinition | AssignmentExpression} node\n\t * @param {Expression | PrivateIdentifier} key\n\t * @param {Expression | null | undefined} value\n\t */\n\tfunction handle(node, key, value) {\n\t\tconst name = get_name(key);\n\t\tif (name === null) return;\n\n\t\tconst rune = get_rune(value, context.state.scope);\n\n\t\tif (rune && is_state_creation_rune(rune)) {\n\t\t\tif (state_fields.has(name)) {\n\t\t\t\te.state_field_duplicate(node, name);\n\t\t\t}\n\n\t\t\tconst _key = (node.type === 'AssignmentExpression' || !node.static ? '' : '@') + name;\n\t\t\tconst field = fields.get(_key);\n\n\t\t\t// if there's already a method or assigned field, error\n\t\t\tif (field && !(field.length === 1 && field[0] === 'prop')) {\n\t\t\t\te.duplicate_class_field(node, _key);\n\t\t\t}\n\n\t\t\tstate_fields.set(name, {\n\t\t\t\tnode,\n\t\t\t\ttype: rune,\n\t\t\t\t// @ts-expect-error for public state this is filled out in a moment\n\t\t\t\tkey: key.type === 'PrivateIdentifier' ? key : null,\n\t\t\t\tvalue: /** @type {CallExpression} */ (value)\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const child of node.body) {\n\t\tif (child.type === 'PropertyDefinition' && !child.computed && !child.static) {\n\t\t\thandle(child, child.key, child.value);\n\t\t\tconst key = /** @type {string} */ (get_name(child.key));\n\t\t\tconst field = fields.get(key);\n\t\t\tif (!field) {\n\t\t\t\tfields.set(key, [child.value ? 'assigned_prop' : 'prop']);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\te.duplicate_class_field(child, key);\n\t\t}\n\n\t\tif (child.type === 'MethodDefinition') {\n\t\t\tif (child.kind === 'constructor') {\n\t\t\t\tconstructor = child;\n\t\t\t} else if (!child.computed) {\n\t\t\t\tconst key = (child.static ? '@' : '') + get_name(child.key);\n\t\t\t\tconst field = fields.get(key);\n\t\t\t\tif (!field) {\n\t\t\t\t\tfields.set(key, [child.kind]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tfield.includes(child.kind) ||\n\t\t\t\t\tfield.includes('prop') ||\n\t\t\t\t\tfield.includes('assigned_prop')\n\t\t\t\t) {\n\t\t\t\t\te.duplicate_class_field(child, key);\n\t\t\t\t}\n\t\t\t\tif (child.kind === 'get') {\n\t\t\t\t\tif (field.length === 1 && field[0] === 'set') {\n\t\t\t\t\t\tfield.push('get');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (child.kind === 'set') {\n\t\t\t\t\tif (field.length === 1 && field[0] === 'get') {\n\t\t\t\t\t\tfield.push('set');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfield.push(child.kind);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\te.duplicate_class_field(child, key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (constructor) {\n\t\tfor (const statement of constructor.value.body.body) {\n\t\t\tif (statement.type !== 'ExpressionStatement') continue;\n\t\t\tif (statement.expression.type !== 'AssignmentExpression') continue;\n\n\t\t\tconst { left, right } = statement.expression;\n\n\t\t\tif (left.type !== 'MemberExpression') continue;\n\t\t\tif (left.object.type !== 'ThisExpression') continue;\n\t\t\tif (left.computed && left.property.type !== 'Literal') continue;\n\n\t\t\thandle(statement.expression, left.property, right);\n\t\t}\n\t}\n\n\tfor (const [name, field] of state_fields) {\n\t\tif (name[0] === '#') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet deconflicted = name.replace(regex_invalid_identifier_chars, '_');\n\t\twhile (private_ids.includes(deconflicted)) {\n\t\t\tdeconflicted = '_' + deconflicted;\n\t\t}\n\n\t\tprivate_ids.push(deconflicted);\n\t\tfield.key = b.private_id(deconflicted);\n\t}\n\n\tcontext.next({ ...context.state, state_fields });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ClassDeclaration.js",
    "content": "/** @import { ClassDeclaration } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as w from '../../../warnings.js';\nimport { validate_identifier_name } from './shared/utils.js';\n\n/**\n * @param {ClassDeclaration} node\n * @param {Context} context\n */\nexport function ClassDeclaration(node, context) {\n\tif (context.state.analysis.runes && node.id !== null) {\n\t\tvalidate_identifier_name(context.state.scope.get(node.id.name));\n\t}\n\n\t// In modules, we allow top-level module scope only, in components, we allow the component scope,\n\t// which is function_depth of 1. With the exception of `new class` which is also not allowed at\n\t// component scope level either.\n\tconst allowed_depth = context.state.ast_type === 'module' ? 0 : 1;\n\n\tif (context.state.scope.function_depth > allowed_depth) {\n\t\tw.perf_avoid_nested_class(node);\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ClassDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\n\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.ClassDirective} node\n * @param {Context} context\n */\nexport function ClassDirective(node, context) {\n\tmark_subtree_dynamic(context.path);\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/Component.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { visit_component } from './shared/component.js';\n\n/**\n * @param {AST.Component} node\n * @param {Context} context\n */\nexport function Component(node, context) {\n\tconst binding = context.state.scope.get(\n\t\tnode.name.includes('.') ? node.name.slice(0, node.name.indexOf('.')) : node.name\n\t);\n\n\tnode.metadata.dynamic =\n\t\tcontext.state.analysis.runes && // Svelte 4 required you to use svelte:component to switch components\n\t\tbinding !== null &&\n\t\t(binding.kind !== 'normal' || node.name.includes('.'));\n\n\tif (binding) {\n\t\tnode.metadata.expression.has_state = node.metadata.dynamic;\n\t\tnode.metadata.expression.dependencies.add(binding);\n\t\tnode.metadata.expression.references.add(binding);\n\t}\n\n\tvisit_component(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ConstTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { validate_opening_tag } from './shared/utils.js';\n\n/**\n * @param {AST.ConstTag} node\n * @param {Context} context\n */\nexport function ConstTag(node, context) {\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, '@');\n\t}\n\n\tconst parent = context.path.at(-1);\n\tconst grand_parent = context.path.at(-2);\n\n\tif (\n\t\tparent?.type !== 'Fragment' ||\n\t\t(grand_parent?.type !== 'IfBlock' &&\n\t\t\tgrand_parent?.type !== 'SvelteFragment' &&\n\t\t\tgrand_parent?.type !== 'Component' &&\n\t\t\tgrand_parent?.type !== 'SvelteComponent' &&\n\t\t\tgrand_parent?.type !== 'EachBlock' &&\n\t\t\tgrand_parent?.type !== 'AwaitBlock' &&\n\t\t\tgrand_parent?.type !== 'SnippetBlock' &&\n\t\t\tgrand_parent?.type !== 'SvelteBoundary' &&\n\t\t\tgrand_parent?.type !== 'KeyBlock' &&\n\t\t\t((grand_parent?.type !== 'RegularElement' && grand_parent?.type !== 'SvelteElement') ||\n\t\t\t\t!grand_parent.attributes.some((a) => a.type === 'Attribute' && a.name === 'slot')))\n\t) {\n\t\te.const_tag_invalid_placement(node);\n\t}\n\n\tconst declaration = node.declaration.declarations[0];\n\n\tcontext.visit(declaration.id);\n\tcontext.visit(declaration.init, {\n\t\t...context.state,\n\t\texpression: node.metadata.expression,\n\t\t// We're treating this like a $derived under the hood\n\t\tfunction_depth: context.state.function_depth + 1,\n\t\tderived_function_depth: context.state.function_depth + 1\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/DebugTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { validate_opening_tag } from './shared/utils.js';\n\n/**\n * @param {AST.DebugTag} node\n * @param {Context} context\n */\nexport function DebugTag(node, context) {\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, '@');\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/EachBlock.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST, Binding } from '#compiler' */\n/** @import { Context } from '../types' */\n/** @import { Scope } from '../../scope' */\nimport * as e from '../../../errors.js';\nimport { extract_identifiers } from '../../../utils/ast.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { validate_block_not_empty, validate_opening_tag } from './shared/utils.js';\n\n/**\n * @param {AST.EachBlock} node\n * @param {Context} context\n */\nexport function EachBlock(node, context) {\n\tvalidate_opening_tag(node, context.state, '#');\n\n\tvalidate_block_not_empty(node.body, context);\n\tvalidate_block_not_empty(node.fallback, context);\n\n\tconst id = node.context;\n\tif (id?.type === 'Identifier' && (id.name === '$state' || id.name === '$derived')) {\n\t\t// TODO weird that this is necessary\n\t\te.state_invalid_placement(node, id.name);\n\t}\n\n\tif (node.key) {\n\t\t// treat `{#each items as item, i (i)}` as a normal indexed block, everything else as keyed\n\t\tnode.metadata.keyed =\n\t\t\tnode.key.type !== 'Identifier' || !node.index || node.key.name !== node.index;\n\t}\n\n\tif (node.metadata.keyed && !node.context) {\n\t\te.each_key_without_as(/** @type {Expression} */ (node.key));\n\t}\n\n\t// evaluate expression in parent scope\n\tcontext.visit(node.expression, {\n\t\t...context.state,\n\t\texpression: node.metadata.expression,\n\t\tscope: /** @type {Scope} */ (context.state.scope.parent)\n\t});\n\n\tcontext.visit(node.body);\n\tif (node.key) context.visit(node.key);\n\tif (node.fallback) context.visit(node.fallback);\n\n\tif (!context.state.analysis.runes) {\n\t\tlet mutated =\n\t\t\t!!node.context &&\n\t\t\textract_identifiers(node.context).some((id) => {\n\t\t\t\tconst binding = context.state.scope.get(id.name);\n\t\t\t\treturn !!binding?.mutated;\n\t\t\t});\n\n\t\t// collect transitive dependencies...\n\t\tfor (const binding of node.metadata.expression.dependencies) {\n\t\t\tif (binding.declaration_kind !== 'function') {\n\t\t\t\tcollect_transitive_dependencies(binding, node.metadata.transitive_deps);\n\t\t\t}\n\t\t}\n\n\t\t// ...and ensure they are marked as state, so they can be turned\n\t\t// into mutable sources and invalidated\n\t\tif (mutated) {\n\t\t\tfor (const binding of node.metadata.transitive_deps) {\n\t\t\t\tif (\n\t\t\t\t\tbinding.kind === 'normal' &&\n\t\t\t\t\t(binding.declaration_kind === 'const' ||\n\t\t\t\t\t\tbinding.declaration_kind === 'let' ||\n\t\t\t\t\t\tbinding.declaration_kind === 'var')\n\t\t\t\t) {\n\t\t\t\t\tbinding.kind = 'state';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tmark_subtree_dynamic(context.path);\n}\n\n/**\n * @param {Binding} binding\n * @param {Set<Binding>} bindings\n * @returns {void}\n */\nfunction collect_transitive_dependencies(binding, bindings) {\n\tif (bindings.has(binding)) {\n\t\treturn;\n\t}\n\tbindings.add(binding);\n\n\tif (binding.kind === 'legacy_reactive') {\n\t\tfor (const dep of binding.legacy_dependencies) {\n\t\t\tcollect_transitive_dependencies(dep, bindings);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ExportDefaultDeclaration.js",
    "content": "/** @import { ExportDefaultDeclaration } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { validate_export } from './shared/utils.js';\n\n/**\n * @param {ExportDefaultDeclaration} node\n * @param {Context} context\n */\nexport function ExportDefaultDeclaration(node, context) {\n\tif (!context.state.ast_type /* .svelte.js module */) {\n\t\tif (node.declaration.type === 'Identifier') {\n\t\t\tvalidate_export(node, context.state.scope, node.declaration.name);\n\t\t}\n\t} else {\n\t\te.module_illegal_default_export(node);\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ExportNamedDeclaration.js",
    "content": "/** @import { ExportNamedDeclaration, Identifier } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { extract_identifiers } from '../../../utils/ast.js';\n\n/**\n * @param {ExportNamedDeclaration} node\n * @param {Context} context\n */\nexport function ExportNamedDeclaration(node, context) {\n\t// visit children, so bindings are correctly initialised\n\tcontext.next();\n\n\tif (\n\t\tcontext.state.ast_type &&\n\t\tnode.specifiers.some((specifier) =>\n\t\t\tspecifier.exported.type === 'Identifier'\n\t\t\t\t? specifier.exported.name === 'default'\n\t\t\t\t: specifier.exported.value === 'default'\n\t\t)\n\t) {\n\t\te.module_illegal_default_export(node);\n\t}\n\n\tif (node.declaration?.type === 'VariableDeclaration') {\n\t\t// in runes mode, forbid `export let`\n\t\tif (\n\t\t\tcontext.state.analysis.runes &&\n\t\t\tcontext.state.ast_type === 'instance' &&\n\t\t\tnode.declaration.kind === 'let'\n\t\t) {\n\t\t\te.legacy_export_invalid(node);\n\t\t}\n\n\t\tfor (const declarator of node.declaration.declarations) {\n\t\t\tfor (const id of extract_identifiers(declarator.id)) {\n\t\t\t\tconst binding = context.state.scope.get(id.name);\n\t\t\t\tif (!binding) continue;\n\n\t\t\t\tif (binding.kind === 'derived') {\n\t\t\t\t\te.derived_invalid_export(node);\n\t\t\t\t}\n\n\t\t\t\tif ((binding.kind === 'state' || binding.kind === 'raw_state') && binding.reassigned) {\n\t\t\t\t\te.state_invalid_export(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (context.state.analysis.runes) {\n\t\tif (node.declaration && context.state.ast_type === 'instance') {\n\t\t\tif (\n\t\t\t\tnode.declaration.type === 'FunctionDeclaration' ||\n\t\t\t\tnode.declaration.type === 'ClassDeclaration'\n\t\t\t) {\n\t\t\t\tcontext.state.analysis.exports.push({\n\t\t\t\t\tname: /** @type {Identifier} */ (node.declaration.id).name,\n\t\t\t\t\talias: null\n\t\t\t\t});\n\t\t\t} else if (node.declaration.kind === 'const') {\n\t\t\t\tfor (const declarator of node.declaration.declarations) {\n\t\t\t\t\tfor (const node of extract_identifiers(declarator.id)) {\n\t\t\t\t\t\tcontext.state.analysis.exports.push({ name: node.name, alias: null });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ExportSpecifier.js",
    "content": "/** @import { ExportSpecifier } from 'estree' */\n/** @import { Context } from '../types' */\nimport { validate_export } from './shared/utils.js';\n\n/**\n * @param {ExportSpecifier} node\n * @param {Context} context\n */\nexport function ExportSpecifier(node, context) {\n\tconst local_name =\n\t\tnode.local.type === 'Identifier' ? node.local.name : /** @type {string} */ (node.local.value);\n\tconst exported_name =\n\t\tnode.exported.type === 'Identifier'\n\t\t\t? node.exported.name\n\t\t\t: /** @type {string} */ (node.exported.value);\n\n\tif (context.state.ast_type === 'instance') {\n\t\tif (context.state.analysis.runes) {\n\t\t\tcontext.state.analysis.exports.push({\n\t\t\t\tname: local_name,\n\t\t\t\talias: exported_name\n\t\t\t});\n\n\t\t\tconst binding = context.state.scope.get(local_name);\n\t\t\tif (binding) binding.reassigned = true;\n\t\t}\n\t} else {\n\t\tvalidate_export(node, context.state.scope, local_name);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ExpressionStatement.js",
    "content": "/** @import { ExpressionStatement, ImportDeclaration } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as w from '../../../warnings.js';\n\n/**\n * @param {ExpressionStatement} node\n * @param {Context} context\n */\nexport function ExpressionStatement(node, context) {\n\t// warn on `new Component({ target: ... })` if imported from a `.svelte` file\n\tif (\n\t\tnode.expression.type === 'NewExpression' &&\n\t\tnode.expression.callee.type === 'Identifier' &&\n\t\tnode.expression.arguments.length === 1 &&\n\t\tnode.expression.arguments[0].type === 'ObjectExpression' &&\n\t\tnode.expression.arguments[0].properties.some(\n\t\t\t(p) => p.type === 'Property' && p.key.type === 'Identifier' && p.key.name === 'target'\n\t\t)\n\t) {\n\t\tconst binding = context.state.scope.get(node.expression.callee.name);\n\n\t\tif (binding?.kind === 'normal' && binding.declaration_kind === 'import') {\n\t\t\tconst declaration = /** @type {ImportDeclaration} */ (binding.initial);\n\n\t\t\t// Theoretically someone could import a class from a `.svelte.js` module, but that's too rare to worry about\n\t\t\tif (\n\t\t\t\t/** @type {string} */ (declaration.source.value).endsWith('.svelte') &&\n\t\t\t\tdeclaration.specifiers.find(\n\t\t\t\t\t(s) => s.local.name === binding.node.name && s.type === 'ImportDefaultSpecifier'\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tw.legacy_component_creation(node.expression);\n\t\t\t}\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ExpressionTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { is_tag_valid_with_parent } from '../../../../html-tree-validation.js';\nimport * as e from '../../../errors.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.ExpressionTag} node\n * @param {Context} context\n */\nexport function ExpressionTag(node, context) {\n\tconst in_template = context.path.at(-1)?.type === 'Fragment';\n\n\tif (in_template && context.state.parent_element) {\n\t\tconst message = is_tag_valid_with_parent('#text', context.state.parent_element);\n\t\tif (message) {\n\t\t\te.node_invalid_placement(node, message);\n\t\t}\n\t}\n\n\t// TODO ideally we wouldn't do this here, we'd just do it on encountering\n\t// an `Identifier` within the tag. But we currently need to handle `{42}` etc\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/Fragment.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types.js' */\n\n/**\n * @param {AST.Fragment} node\n * @param {Context} context\n */\nexport function Fragment(node, context) {\n\tcontext.next({ ...context.state, fragment: node });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/FunctionDeclaration.js",
    "content": "/** @import { FunctionDeclaration } from 'estree' */\n/** @import { Context } from '../types' */\nimport { visit_function } from './shared/function.js';\nimport { validate_identifier_name } from './shared/utils.js';\n\n/**\n * @param {FunctionDeclaration} node\n * @param {Context} context\n */\nexport function FunctionDeclaration(node, context) {\n\tif (context.state.analysis.runes && node.id !== null) {\n\t\tvalidate_identifier_name(context.state.scope.get(node.id.name));\n\t}\n\n\tvisit_function(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/FunctionExpression.js",
    "content": "/** @import { FunctionExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { visit_function } from './shared/function.js';\n\n/**\n * @param {FunctionExpression} node\n * @param {Context} context\n */\nexport function FunctionExpression(node, context) {\n\tvisit_function(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/HtmlTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { validate_opening_tag } from './shared/utils.js';\n\n/**\n * @param {AST.HtmlTag} node\n * @param {Context} context\n */\nexport function HtmlTag(node, context) {\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, '@');\n\t}\n\n\t// unfortunately this is necessary in order to fix invalid HTML\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/Identifier.js",
    "content": "/** @import { Expression, Identifier } from 'estree' */\n/** @import { Context } from '../types' */\nimport is_reference from 'is-reference';\nimport { should_proxy } from '../../3-transform/client/utils.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { is_rune } from '../../../../utils.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { get_rune } from '../../scope.js';\nimport { is_component_node } from '../../nodes.js';\n\n/**\n * @param {Identifier} node\n * @param {Context} context\n */\nexport function Identifier(node, context) {\n\tlet i = context.path.length;\n\tlet parent = /** @type {Expression} */ (context.path[--i]);\n\n\tif (!is_reference(node, parent)) {\n\t\treturn;\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\t// If we are using arguments outside of a function, then throw an error\n\tif (\n\t\tnode.name === 'arguments' &&\n\t\t!context.path.some((n) => n.type === 'FunctionDeclaration' || n.type === 'FunctionExpression')\n\t) {\n\t\te.invalid_arguments_usage(node);\n\t}\n\n\t// `$$slots` exists even in runes mode\n\tif (node.name === '$$slots') {\n\t\tcontext.state.analysis.uses_slots = true;\n\t}\n\n\tif (context.state.analysis.runes) {\n\t\tif (\n\t\t\tis_rune(node.name) &&\n\t\t\tcontext.state.scope.get(node.name) === null &&\n\t\t\tcontext.state.scope.get(node.name.slice(1))?.kind !== 'store_sub'\n\t\t) {\n\t\t\t/** @type {Expression} */\n\t\t\tlet current = node;\n\t\t\tlet name = node.name;\n\n\t\t\twhile (parent.type === 'MemberExpression') {\n\t\t\t\tif (parent.computed) e.rune_invalid_computed_property(parent);\n\t\t\t\tname += `.${/** @type {Identifier} */ (parent.property).name}`;\n\n\t\t\t\tcurrent = parent;\n\t\t\t\tparent = /** @type {Expression} */ (context.path[--i]);\n\n\t\t\t\tif (!is_rune(name)) {\n\t\t\t\t\tif (name === '$effect.active') {\n\t\t\t\t\t\te.rune_renamed(parent, '$effect.active', '$effect.tracking');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (name === '$state.frozen') {\n\t\t\t\t\t\te.rune_renamed(parent, '$state.frozen', '$state.raw');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (name === '$state.is') {\n\t\t\t\t\t\te.rune_removed(parent, '$state.is');\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_invalid_name(parent, name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (parent.type !== 'CallExpression') {\n\t\t\t\te.rune_missing_parentheses(current);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet binding = context.state.scope.get(node.name);\n\n\tif (!context.state.analysis.runes) {\n\t\tif (node.name === '$$props') {\n\t\t\tcontext.state.analysis.uses_props = true;\n\t\t}\n\n\t\tif (node.name === '$$restProps') {\n\t\t\tcontext.state.analysis.uses_rest_props = true;\n\t\t}\n\t}\n\n\tif (binding) {\n\t\tif (context.state.expression) {\n\t\t\tcontext.state.expression.dependencies.add(binding);\n\t\t\tcontext.state.expression.references.add(binding);\n\t\t\tcontext.state.expression.has_state ||=\n\t\t\t\tbinding.kind !== 'static' &&\n\t\t\t\t(binding.kind === 'prop' ||\n\t\t\t\t\tbinding.kind === 'bindable_prop' ||\n\t\t\t\t\tbinding.kind === 'rest_prop' ||\n\t\t\t\t\t!binding.is_function()) &&\n\t\t\t\t!context.state.scope.evaluate(node).is_known;\n\t\t}\n\n\t\tif (\n\t\t\tcontext.state.analysis.runes &&\n\t\t\tnode !== binding.node &&\n\t\t\tcontext.state.function_depth === binding.scope.function_depth &&\n\t\t\t// If we have $state that can be proxied or frozen and isn't re-assigned, then that means\n\t\t\t// it's likely not using a primitive value and thus this warning isn't that helpful.\n\t\t\t((binding.kind === 'state' &&\n\t\t\t\t(binding.reassigned ||\n\t\t\t\t\t(binding.initial?.type === 'CallExpression' &&\n\t\t\t\t\t\tbinding.initial.arguments.length === 1 &&\n\t\t\t\t\t\tbinding.initial.arguments[0].type !== 'SpreadElement' &&\n\t\t\t\t\t\t!should_proxy(binding.initial.arguments[0], context.state.scope)))) ||\n\t\t\t\tbinding.kind === 'raw_state' ||\n\t\t\t\tbinding.kind === 'derived' ||\n\t\t\t\tbinding.kind === 'prop' ||\n\t\t\t\tbinding.kind === 'rest_prop') &&\n\t\t\t// We're only concerned with reads here\n\t\t\t(parent.type !== 'AssignmentExpression' || parent.left !== node) &&\n\t\t\tparent.type !== 'UpdateExpression'\n\t\t) {\n\t\t\tlet type = 'closure';\n\n\t\t\tlet i = context.path.length;\n\t\t\twhile (i--) {\n\t\t\t\tconst parent = context.path[i];\n\n\t\t\t\tif (\n\t\t\t\t\tparent.type === 'ArrowFunctionExpression' ||\n\t\t\t\t\tparent.type === 'FunctionDeclaration' ||\n\t\t\t\t\tparent.type === 'FunctionExpression'\n\t\t\t\t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tparent.type === 'CallExpression' &&\n\t\t\t\t\tparent.arguments.includes(/** @type {any} */ (context.path[i + 1]))\n\t\t\t\t) {\n\t\t\t\t\tconst rune = get_rune(parent, context.state.scope);\n\n\t\t\t\t\tif (rune === '$state' || rune === '$state.raw') {\n\t\t\t\t\t\ttype = 'derived';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tw.state_referenced_locally(node, node.name, type);\n\t\t}\n\n\t\tif (\n\t\t\tcontext.state.reactive_statement &&\n\t\t\tbinding.scope === context.state.analysis.module.scope &&\n\t\t\tbinding.reassigned\n\t\t) {\n\t\t\tw.reactive_declaration_module_script_dependency(node);\n\t\t}\n\n\t\tif (binding.metadata?.is_template_declaration && context.state.options.experimental.async) {\n\t\t\tlet snippet_name;\n\n\t\t\t// Find out if this references a {@const ...} declaration of an implicit children snippet\n\t\t\t// when it is itself inside a snippet block at the same level. If so, error.\n\t\t\tfor (let i = context.path.length - 1; i >= 0; i--) {\n\t\t\t\tconst parent = context.path[i];\n\t\t\t\tconst grand_parent = context.path[i - 1];\n\n\t\t\t\tif (parent.type === 'SnippetBlock') {\n\t\t\t\t\tsnippet_name = parent.expression.name;\n\t\t\t\t} else if (\n\t\t\t\t\tsnippet_name &&\n\t\t\t\t\tgrand_parent &&\n\t\t\t\t\tparent.type === 'Fragment' &&\n\t\t\t\t\t(is_component_node(grand_parent) ||\n\t\t\t\t\t\t(grand_parent.type === 'SvelteBoundary' &&\n\t\t\t\t\t\t\t(snippet_name === 'failed' || snippet_name === 'pending')))\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tis_component_node(grand_parent)\n\t\t\t\t\t\t\t? grand_parent.metadata.scopes.default === binding.scope\n\t\t\t\t\t\t\t: context.state.scopes.get(parent) === binding.scope\n\t\t\t\t\t) {\n\t\t\t\t\t\te.const_tag_invalid_reference(node, node.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/IfBlock.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { validate_block_not_empty, validate_opening_tag } from './shared/utils.js';\n\n/**\n * @param {AST.IfBlock} node\n * @param {Context} context\n */\nexport function IfBlock(node, context) {\n\tvalidate_block_not_empty(node.consequent, context);\n\tvalidate_block_not_empty(node.alternate, context);\n\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, node.elseif ? ':' : '#');\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.visit(node.test, {\n\t\t...context.state,\n\t\texpression: node.metadata.expression\n\t});\n\n\tcontext.visit(node.consequent);\n\tif (node.alternate) context.visit(node.alternate);\n\n\t// Check if we can flatten branches\n\tconst alt = node.alternate;\n\n\tif (alt && alt.nodes.length === 1 && alt.nodes[0].type === 'IfBlock' && alt.nodes[0].elseif) {\n\t\tconst elseif = alt.nodes[0];\n\n\t\t// Don't flatten if this else-if has an await expression or new blockers\n\t\t// TODO would be nice to check the await expression itself to see if it's awaiting the same thing as a previous if expression\n\t\tif (\n\t\t\t!elseif.metadata.expression.has_await &&\n\t\t\t!elseif.metadata.expression.has_more_blockers_than(node.metadata.expression)\n\t\t) {\n\t\t\t// Roll the existing flattened branches (if any) into this one, then delete those of the else-if block\n\t\t\t// to avoid processing them multiple times as we walk down the chain during code transformation.\n\t\t\tnode.metadata.flattened = [elseif, ...(elseif.metadata.flattened ?? [])];\n\t\t\telseif.metadata.flattened = undefined;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/ImportDeclaration.js",
    "content": "/** @import { ImportDeclaration } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\n\n/**\n * @param {ImportDeclaration} node\n * @param {Context} context\n */\nexport function ImportDeclaration(node, context) {\n\tif (context.state.analysis.runes) {\n\t\tconst source = /** @type {string} */ (node.source.value);\n\n\t\tif (source.startsWith('svelte/internal')) {\n\t\t\te.import_svelte_internal_forbidden(node);\n\t\t}\n\n\t\tif (source === 'svelte') {\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tif (specifier.type === 'ImportSpecifier') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tspecifier.imported.type === 'Identifier' &&\n\t\t\t\t\t\t(specifier.imported.name === 'beforeUpdate' ||\n\t\t\t\t\t\t\tspecifier.imported.name === 'afterUpdate')\n\t\t\t\t\t) {\n\t\t\t\t\t\te.runes_mode_invalid_import(specifier, specifier.imported.name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/KeyBlock.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { validate_block_not_empty, validate_opening_tag } from './shared/utils.js';\n\n/**\n * @param {AST.KeyBlock} node\n * @param {Context} context\n */\nexport function KeyBlock(node, context) {\n\tvalidate_block_not_empty(node.fragment, context);\n\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, '#');\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.visit(node.expression, { ...context.state, expression: node.metadata.expression });\n\tcontext.visit(node.fragment);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/LabeledStatement.js",
    "content": "/** @import { Expression, LabeledStatement } from 'estree' */\n/** @import { AST, ReactiveStatement } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { extract_identifiers, object } from '../../../utils/ast.js';\nimport * as w from '../../../warnings.js';\n\n/**\n * @param {LabeledStatement} node\n * @param {Context} context\n */\nexport function LabeledStatement(node, context) {\n\tif (node.label.name === '$') {\n\t\tconst parent = /** @type {AST.SvelteNode} */ (context.path.at(-1));\n\n\t\tconst is_reactive_statement =\n\t\t\tcontext.state.ast_type === 'instance' && parent.type === 'Program';\n\n\t\tif (is_reactive_statement) {\n\t\t\tif (context.state.analysis.runes) {\n\t\t\t\te.legacy_reactive_statement_invalid(node);\n\t\t\t}\n\n\t\t\t// Find all dependencies of this `$: {...}` statement\n\t\t\t/** @type {ReactiveStatement} */\n\t\t\tconst reactive_statement = {\n\t\t\t\tassignments: new Set(),\n\t\t\t\tdependencies: []\n\t\t\t};\n\n\t\t\tcontext.next({\n\t\t\t\t...context.state,\n\t\t\t\treactive_statement,\n\t\t\t\tfunction_depth: context.state.scope.function_depth + 1\n\t\t\t});\n\n\t\t\t// Every referenced binding becomes a dependency, unless it's on\n\t\t\t// the left-hand side of an `=` assignment\n\t\t\tfor (const [name, nodes] of context.state.scope.references) {\n\t\t\t\tconst binding = context.state.scope.get(name);\n\t\t\t\tif (binding === null) continue;\n\n\t\t\t\tfor (const { node, path } of nodes) {\n\t\t\t\t\t/** @type {Expression} */\n\t\t\t\t\tlet left = node;\n\n\t\t\t\t\tlet i = path.length - 1;\n\t\t\t\t\tlet parent = /** @type {Expression} */ (path.at(i));\n\t\t\t\t\twhile (parent.type === 'MemberExpression') {\n\t\t\t\t\t\tleft = parent;\n\t\t\t\t\t\tparent = /** @type {Expression} */ (path.at(--i));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tparent.type === 'AssignmentExpression' &&\n\t\t\t\t\t\tparent.operator === '=' &&\n\t\t\t\t\t\tparent.left === left\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\treactive_statement.dependencies.push(binding);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.state.analysis.reactive_statements.set(node, reactive_statement);\n\n\t\t\tif (\n\t\t\t\tnode.body.type === 'ExpressionStatement' &&\n\t\t\t\tnode.body.expression.type === 'AssignmentExpression'\n\t\t\t) {\n\t\t\t\tlet ids = extract_identifiers(node.body.expression.left);\n\t\t\t\tif (node.body.expression.left.type === 'MemberExpression') {\n\t\t\t\t\tconst id = object(node.body.expression.left);\n\t\t\t\t\tif (id !== null) {\n\t\t\t\t\t\tids = [id];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tconst binding = context.state.scope.get(id.name);\n\t\t\t\t\tif (binding?.kind === 'legacy_reactive') {\n\t\t\t\t\t\t// TODO does this include `let double; $: double = x * 2`?\n\t\t\t\t\t\tbinding.legacy_dependencies = Array.from(reactive_statement.dependencies);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!context.state.analysis.runes) {\n\t\t\tw.reactive_declaration_invalid_placement(node);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/LetDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.LetDirective} node\n * @param {Context} context\n */\nexport function LetDirective(node, context) {\n\tconst parent = context.path.at(-1);\n\n\tif (\n\t\tparent === undefined ||\n\t\t(parent.type !== 'Component' &&\n\t\t\tparent.type !== 'RegularElement' &&\n\t\t\tparent.type !== 'SlotElement' &&\n\t\t\tparent.type !== 'SvelteElement' &&\n\t\t\tparent.type !== 'SvelteComponent' &&\n\t\t\tparent.type !== 'SvelteSelf' &&\n\t\t\tparent.type !== 'SvelteFragment')\n\t) {\n\t\te.let_directive_invalid_placement(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/Literal.js",
    "content": "/** @import { Literal } from 'estree' */\nimport * as w from '../../../warnings.js';\nimport { regex_bidirectional_control_characters } from '../../patterns.js';\n\n/**\n * @param {Literal} node\n */\nexport function Literal(node) {\n\tif (typeof node.value === 'string') {\n\t\tif (regex_bidirectional_control_characters.test(node.value)) {\n\t\t\tw.bidirectional_control_characters(node);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/MemberExpression.js",
    "content": "/** @import { MemberExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { is_pure, is_safe_identifier } from './shared/utils.js';\n\n/**\n * @param {MemberExpression} node\n * @param {Context} context\n */\nexport function MemberExpression(node, context) {\n\tif (node.object.type === 'Identifier' && node.property.type === 'Identifier') {\n\t\tconst binding = context.state.scope.get(node.object.name);\n\t\tif (binding?.kind === 'rest_prop' && node.property.name.startsWith('$$')) {\n\t\t\te.props_illegal_name(node.property);\n\t\t}\n\t}\n\n\tif (context.state.expression) {\n\t\tcontext.state.expression.has_member_expression = true;\n\t\tcontext.state.expression.has_state ||= !is_pure(node, context);\n\t}\n\n\tif (!is_safe_identifier(node, context.state.scope)) {\n\t\tcontext.state.analysis.needs_context = true;\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/NewExpression.js",
    "content": "/** @import { NewExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as w from '../../../warnings.js';\n\n/**\n * @param {NewExpression} node\n * @param {Context} context\n */\nexport function NewExpression(node, context) {\n\tif (node.callee.type === 'ClassExpression' && context.state.scope.function_depth > 0) {\n\t\tw.perf_avoid_inline_class(node);\n\t}\n\n\tcontext.state.analysis.needs_context = true;\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/OnDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as w from '../../../warnings.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.OnDirective} node\n * @param {Context} context\n */\nexport function OnDirective(node, context) {\n\tif (context.state.analysis.runes) {\n\t\tconst parent_type = context.path.at(-1)?.type;\n\n\t\t// Don't warn on component events; these might not be under the author's control so the warning would be unactionable\n\t\tif (parent_type === 'RegularElement' || parent_type === 'SvelteElement') {\n\t\t\tw.event_directive_deprecated(node, node.name);\n\t\t}\n\t}\n\n\tconst parent = context.path.at(-1);\n\tif (parent?.type === 'SvelteElement' || parent?.type === 'RegularElement') {\n\t\tcontext.state.analysis.event_directive_node ??= node;\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/PropertyDefinition.js",
    "content": "/** @import { PropertyDefinition } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { get_name } from '../../nodes.js';\n\n/**\n * @param {PropertyDefinition} node\n * @param {Context} context\n */\nexport function PropertyDefinition(node, context) {\n\tconst name = get_name(node.key);\n\tconst field = name && context.state.state_fields.get(name);\n\n\tif (field && node !== field.node && node.value) {\n\t\tif (/** @type {number} */ (node.start) < /** @type {number} */ (field.node.start)) {\n\t\t\te.state_field_invalid_assignment(node);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/RegularElement.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { is_mathml, is_svg, is_void } from '../../../../utils.js';\nimport {\n\tis_tag_valid_with_ancestor,\n\tis_tag_valid_with_parent\n} from '../../../../html-tree-validation.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport {\n\tcreate_attribute,\n\tis_custom_element_node,\n\tis_customizable_select_element\n} from '../../nodes.js';\nimport { regex_starts_with_newline } from '../../patterns.js';\nimport { check_element } from './shared/a11y/index.js';\nimport { validate_element } from './shared/element.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { object } from '../../../utils/ast.js';\nimport { runes } from '../../../state.js';\n\n/**\n * @param {AST.RegularElement} node\n * @param {Context} context\n */\nexport function RegularElement(node, context) {\n\tvalidate_element(node, context);\n\tcheck_element(node, context);\n\n\tnode.metadata.path = [...context.path];\n\tcontext.state.analysis.elements.push(node);\n\n\t// Special case: Move the children of <textarea> into a value attribute if they are dynamic\n\tif (node.name === 'textarea' && node.fragment.nodes.length > 0) {\n\t\tfor (const attribute of node.attributes) {\n\t\t\tif (attribute.type === 'Attribute' && attribute.name === 'value') {\n\t\t\t\te.textarea_invalid_content(node);\n\t\t\t}\n\t\t}\n\n\t\tif (node.fragment.nodes.length > 1 || node.fragment.nodes[0].type !== 'Text') {\n\t\t\tconst first = node.fragment.nodes[0];\n\t\t\tif (first.type === 'Text') {\n\t\t\t\t// The leading newline character needs to be stripped because of a qirk:\n\t\t\t\t// It is ignored by browsers if the tag and its contents are set through\n\t\t\t\t// innerHTML, but we're now setting it through the value property at which\n\t\t\t\t// point it is _not_ ignored, so we need to strip it ourselves.\n\t\t\t\t// see https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions\n\t\t\t\t// see https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\n\t\t\t\tfirst.data = first.data.replace(regex_starts_with_newline, '');\n\t\t\t\tfirst.raw = first.raw.replace(regex_starts_with_newline, '');\n\t\t\t}\n\n\t\t\tnode.attributes.push(\n\t\t\t\tcreate_attribute(\n\t\t\t\t\t'value',\n\t\t\t\t\tnull,\n\t\t\t\t\t-1,\n\t\t\t\t\t-1,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tnode.fragment.nodes\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tnode.fragment.nodes = [];\n\t\t}\n\t}\n\n\t// Special case: `<select bind:value={foo}><option>{bar}</option>`\n\t// means we need to invalidate `bar` whenever `foo` is mutated\n\tif (node.name === 'select' && !runes) {\n\t\tfor (const attribute of node.attributes) {\n\t\t\tif (\n\t\t\t\tattribute.type === 'BindDirective' &&\n\t\t\t\tattribute.name === 'value' &&\n\t\t\t\tattribute.expression.type !== 'SequenceExpression'\n\t\t\t) {\n\t\t\t\tconst identifier = object(attribute.expression);\n\t\t\t\tconst binding = identifier && context.state.scope.get(identifier.name);\n\n\t\t\t\tif (binding) {\n\t\t\t\t\tfor (const name of context.state.scope.references.keys()) {\n\t\t\t\t\t\tif (name === binding.node.name) continue;\n\t\t\t\t\t\tconst indirect = context.state.scope.get(name);\n\n\t\t\t\t\t\tif (indirect) {\n\t\t\t\t\t\t\tbinding.legacy_indirect_bindings.add(indirect);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Special case: single expression tag child of option element -> add \"fake\" attribute\n\t// to ensure that value types are the same (else for example numbers would be strings)\n\tif (\n\t\tnode.name === 'option' &&\n\t\tnode.fragment.nodes?.length === 1 &&\n\t\tnode.fragment.nodes[0].type === 'ExpressionTag' &&\n\t\t!node.attributes.some(\n\t\t\t(attribute) => attribute.type === 'Attribute' && attribute.name === 'value'\n\t\t)\n\t) {\n\t\tconst child = node.fragment.nodes[0];\n\t\tnode.metadata.synthetic_value_node = child;\n\t}\n\n\t// Special case: <select>, <option> or <optgroup> with rich content needs special hydration handling\n\t// We mark the subtree as dynamic so parent elements properly include the child init code\n\tif (is_customizable_select_element(node) || node.name === 'selectedcontent') {\n\t\t// Mark the element's own fragment as dynamic so it's not treated as static\n\t\tnode.fragment.metadata.dynamic = true;\n\t\t// Also mark ancestor fragments so parents properly include the child init code\n\t\tmark_subtree_dynamic(context.path);\n\t}\n\n\tconst binding = context.state.scope.get(node.name);\n\tif (\n\t\tbinding !== null &&\n\t\tbinding.declaration_kind === 'import' &&\n\t\tbinding.references.length === 0\n\t) {\n\t\tw.component_name_lowercase(node, node.name);\n\t}\n\n\tnode.metadata.has_spread = node.attributes.some(\n\t\t(attribute) => attribute.type === 'SpreadAttribute'\n\t);\n\n\tconst is_svg_element = () => {\n\t\tif (is_svg(node.name)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (node.name === 'a' || node.name === 'title') {\n\t\t\tlet i = context.path.length;\n\n\t\t\twhile (i--) {\n\t\t\t\tconst ancestor = context.path[i];\n\t\t\t\tif (ancestor.type === 'RegularElement') {\n\t\t\t\t\treturn ancestor.metadata.svg;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tnode.metadata.svg = is_svg_element();\n\tnode.metadata.mathml = is_mathml(node.name);\n\n\tif (is_custom_element_node(node) && node.attributes.length > 0) {\n\t\t// we're setting all attributes on custom elements through properties\n\t\tmark_subtree_dynamic(context.path);\n\t}\n\n\tif (context.state.parent_element) {\n\t\tlet past_parent = false;\n\t\tlet only_warn = false;\n\t\tconst ancestors = [context.state.parent_element];\n\n\t\tfor (let i = context.path.length - 1; i >= 0; i--) {\n\t\t\tconst ancestor = context.path[i];\n\n\t\t\tif (\n\t\t\t\tancestor.type === 'IfBlock' ||\n\t\t\t\tancestor.type === 'EachBlock' ||\n\t\t\t\tancestor.type === 'AwaitBlock' ||\n\t\t\t\tancestor.type === 'KeyBlock'\n\t\t\t) {\n\t\t\t\t// We're creating a separate template string inside blocks, which means client-side this would work\n\t\t\t\tonly_warn = true;\n\t\t\t}\n\n\t\t\tif (!past_parent) {\n\t\t\t\tif (ancestor.type === 'RegularElement' && ancestor.name === context.state.parent_element) {\n\t\t\t\t\tconst message = is_tag_valid_with_parent(node.name, context.state.parent_element);\n\t\t\t\t\tif (message) {\n\t\t\t\t\t\tif (only_warn) {\n\t\t\t\t\t\t\tw.node_invalid_placement_ssr(node, message);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\te.node_invalid_placement(node, message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tpast_parent = true;\n\t\t\t\t}\n\t\t\t} else if (ancestor.type === 'RegularElement') {\n\t\t\t\tancestors.push(ancestor.name);\n\n\t\t\t\tconst message = is_tag_valid_with_ancestor(node.name, ancestors);\n\t\t\t\tif (message) {\n\t\t\t\t\tif (only_warn) {\n\t\t\t\t\t\tw.node_invalid_placement_ssr(node, message);\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.node_invalid_placement(node, message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tancestor.type === 'Component' ||\n\t\t\t\tancestor.type === 'SvelteComponent' ||\n\t\t\t\tancestor.type === 'SvelteElement' ||\n\t\t\t\tancestor.type === 'SvelteSelf' ||\n\t\t\t\tancestor.type === 'SnippetBlock'\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Strip off any namespace from the beginning of the node name.\n\tconst node_name = node.name.replace(/[a-zA-Z-]*:/g, '');\n\n\tif (\n\t\tcontext.state.analysis.source[node.end - 2] === '/' &&\n\t\t!is_void(node_name) &&\n\t\t!is_svg(node_name) &&\n\t\t!is_mathml(node_name)\n\t) {\n\t\tw.element_invalid_self_closing_tag(node, node.name);\n\t}\n\n\tcontext.next({ ...context.state, parent_element: node.name });\n\n\t// Special case: <a> tags are valid in both the SVG and HTML namespace.\n\t// If there's no parent, look downwards to see if it's the parent of a SVG or HTML element.\n\tif (node.name === 'a' && !context.state.parent_element) {\n\t\tfor (const child of node.fragment.nodes) {\n\t\t\tif (child.type === 'RegularElement') {\n\t\t\t\tif (child.metadata.svg && child.name !== 'svg') {\n\t\t\t\t\tnode.metadata.svg = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/RenderTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { unwrap_optional } from '../../../utils/ast.js';\nimport * as e from '../../../errors.js';\nimport { validate_opening_tag } from './shared/utils.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport { is_resolved_snippet } from './shared/snippets.js';\nimport { ExpressionMetadata } from '../../nodes.js';\n\n/**\n * @param {AST.RenderTag} node\n * @param {Context} context\n */\nexport function RenderTag(node, context) {\n\tvalidate_opening_tag(node, context.state, '@');\n\n\tnode.metadata.path = [...context.path];\n\n\tconst expression = unwrap_optional(node.expression);\n\tconst callee = expression.callee;\n\n\tconst binding = callee.type === 'Identifier' ? context.state.scope.get(callee.name) : null;\n\n\tnode.metadata.dynamic = binding?.kind !== 'normal';\n\n\t/**\n\t * If we can't unambiguously resolve this to a declaration, we\n\t * must assume the worst and link the render tag to every snippet\n\t */\n\tlet resolved = callee.type === 'Identifier' && is_resolved_snippet(binding);\n\n\tif (binding?.initial?.type === 'SnippetBlock') {\n\t\t// if this render tag unambiguously references a local snippet, our job is easy\n\t\tnode.metadata.snippets.add(binding.initial);\n\t}\n\n\tcontext.state.analysis.snippet_renderers.set(node, resolved);\n\tcontext.state.analysis.uses_render_tags = true;\n\n\tconst raw_args = unwrap_optional(node.expression).arguments;\n\tfor (const arg of raw_args) {\n\t\tif (arg.type === 'SpreadElement') {\n\t\t\te.render_tag_invalid_spread_argument(arg);\n\t\t}\n\t}\n\n\tif (\n\t\tcallee.type === 'MemberExpression' &&\n\t\tcallee.property.type === 'Identifier' &&\n\t\t['bind', 'apply', 'call'].includes(callee.property.name)\n\t) {\n\t\te.render_tag_invalid_call_expression(node);\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.visit(callee, { ...context.state, expression: node.metadata.expression });\n\n\tfor (const arg of expression.arguments) {\n\t\tconst metadata = new ExpressionMetadata();\n\t\tnode.metadata.arguments.push(metadata);\n\n\t\tcontext.visit(arg, {\n\t\t\t...context.state,\n\t\t\texpression: metadata\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SlotElement.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { is_text_attribute } from '../../../utils/ast.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.SlotElement} node\n * @param {Context} context\n */\nexport function SlotElement(node, context) {\n\tif (context.state.analysis.runes && !context.state.analysis.custom_element) {\n\t\tw.slot_element_deprecated(node);\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\t/** @type {string} */\n\tlet name = 'default';\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tif (attribute.name === 'name') {\n\t\t\t\tif (!is_text_attribute(attribute)) {\n\t\t\t\t\te.slot_element_invalid_name(attribute);\n\t\t\t\t}\n\n\t\t\t\tname = attribute.value[0].data;\n\t\t\t\tif (name === 'default') {\n\t\t\t\t\te.slot_element_invalid_name_default(attribute);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (attribute.type !== 'SpreadAttribute' && attribute.type !== 'LetDirective') {\n\t\t\te.slot_element_invalid_attribute(attribute);\n\t\t}\n\t}\n\n\tcontext.state.analysis.slot_names.set(name, node);\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SnippetBlock.js",
    "content": "/** @import { AST, Binding } from '#compiler' */\n/** @import { Scope } from '../../scope' */\n/** @import { Context } from '../types' */\nimport { validate_block_not_empty, validate_opening_tag } from './shared/utils.js';\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.SnippetBlock} node\n * @param {Context} context\n */\nexport function SnippetBlock(node, context) {\n\tcontext.state.analysis.snippets.add(node);\n\n\tvalidate_block_not_empty(node.body, context);\n\n\tif (context.state.analysis.runes) {\n\t\tvalidate_opening_tag(node, context.state, '#');\n\t}\n\n\tfor (const arg of node.parameters) {\n\t\tif (arg.type === 'RestElement') {\n\t\t\te.snippet_invalid_rest_parameter(arg);\n\t\t}\n\t}\n\n\tcontext.next({ ...context.state, parent_element: null });\n\n\tconst can_hoist =\n\t\tcontext.path.length === 1 &&\n\t\tcontext.path[0].type === 'Fragment' &&\n\t\tcan_hoist_snippet(context.state.scope, context.state.scopes);\n\n\tconst name = node.expression.name;\n\n\tif (can_hoist) {\n\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(name));\n\t\tcontext.state.analysis.module.scope.declarations.set(name, binding);\n\t}\n\n\tnode.metadata.can_hoist = can_hoist;\n\n\tconst { path } = context;\n\tconst parent = path.at(-2);\n\tif (!parent) return;\n\n\tif (\n\t\tparent.type === 'Component' &&\n\t\tparent.attributes.some(\n\t\t\t(attribute) =>\n\t\t\t\t(attribute.type === 'Attribute' || attribute.type === 'BindDirective') &&\n\t\t\t\tattribute.name === node.expression.name\n\t\t)\n\t) {\n\t\te.snippet_shadowing_prop(node, node.expression.name);\n\t}\n\n\tif (node.expression.name !== 'children') return;\n\n\tif (\n\t\tparent.type === 'Component' ||\n\t\tparent.type === 'SvelteComponent' ||\n\t\tparent.type === 'SvelteSelf'\n\t) {\n\t\tif (\n\t\t\tparent.fragment.nodes.some(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.type !== 'SnippetBlock' &&\n\t\t\t\t\t(node.type !== 'Text' || node.data.trim()) &&\n\t\t\t\t\tnode.type !== 'Comment'\n\t\t\t)\n\t\t) {\n\t\t\te.snippet_conflict(node);\n\t\t}\n\t}\n}\n\n/**\n * @param {Map<AST.SvelteNode, Scope>} scopes\n * @param {Scope} scope\n */\nfunction can_hoist_snippet(scope, scopes, visited = new Set()) {\n\tfor (const [reference] of scope.references) {\n\t\tconst binding = scope.get(reference);\n\t\tif (!binding) continue;\n\n\t\tif (binding.blocker) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (binding.scope.function_depth === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// ignore bindings declared inside the snippet (e.g. the snippet's own parameters)\n\t\tif (binding.scope.function_depth >= scope.function_depth) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (binding.initial?.type === 'SnippetBlock') {\n\t\t\tif (visited.has(binding)) continue;\n\t\t\tvisited.add(binding);\n\t\t\tconst snippet_scope = /** @type {Scope} */ (scopes.get(binding.initial));\n\n\t\t\tif (can_hoist_snippet(snippet_scope, scopes, visited)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SpreadAttribute.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\n\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.SpreadAttribute} node\n * @param {Context} context\n */\nexport function SpreadAttribute(node, context) {\n\tmark_subtree_dynamic(context.path);\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SpreadElement.js",
    "content": "/** @import { SpreadElement } from 'estree' */\n/** @import { Context } from '../types' */\n\n/**\n * @param {SpreadElement} node\n * @param {Context} context\n */\nexport function SpreadElement(node, context) {\n\tif (context.state.expression) {\n\t\t// treat e.g. `[...x]` the same as `[...x.values()]`\n\t\tcontext.state.expression.has_call = true;\n\t\tcontext.state.expression.has_state = true;\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/StyleDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { get_attribute_chunks } from '../../../utils/ast.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.StyleDirective} node\n * @param {Context} context\n */\nexport function StyleDirective(node, context) {\n\tif (node.modifiers.length > 1 || (node.modifiers.length && node.modifiers[0] !== 'important')) {\n\t\te.style_directive_invalid_modifier(node);\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tif (node.value === true) {\n\t\t// get the binding for node.name and change the binding to state\n\t\tlet binding = context.state.scope.get(node.name);\n\n\t\tif (binding) {\n\t\t\tif (binding.kind !== 'normal') {\n\t\t\t\tnode.metadata.expression.has_state = true;\n\t\t\t}\n\t\t\tif (binding.blocker) {\n\t\t\t\tnode.metadata.expression.dependencies.add(binding);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tcontext.next();\n\n\t\tfor (const chunk of get_attribute_chunks(node.value)) {\n\t\t\tif (chunk.type !== 'ExpressionTag') continue;\n\n\t\t\tnode.metadata.expression.merge(chunk.metadata.expression);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteBody.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { is_event_attribute } from '../../../utils/ast.js';\nimport { disallow_children } from './shared/special-element.js';\n\n/**\n * @param {AST.SvelteBody} node\n * @param {Context} context\n */\nexport function SvelteBody(node, context) {\n\tdisallow_children(node);\n\tfor (const attribute of node.attributes) {\n\t\tif (\n\t\t\tattribute.type === 'SpreadAttribute' ||\n\t\t\t(attribute.type === 'Attribute' && !is_event_attribute(attribute))\n\t\t) {\n\t\t\te.svelte_body_illegal_attribute(attribute);\n\t\t}\n\t}\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteBoundary.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\nconst valid = ['onerror', 'failed', 'pending'];\n\n/**\n * @param {AST.SvelteBoundary} node\n * @param {Context} context\n */\nexport function SvelteBoundary(node, context) {\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type !== 'Attribute' || !valid.includes(attribute.name)) {\n\t\t\te.svelte_boundary_invalid_attribute(attribute);\n\t\t}\n\n\t\tif (\n\t\t\tattribute.value === true ||\n\t\t\t(Array.isArray(attribute.value) &&\n\t\t\t\t(attribute.value.length !== 1 || attribute.value[0].type !== 'ExpressionTag'))\n\t\t) {\n\t\t\te.svelte_boundary_invalid_attribute_value(attribute);\n\t\t}\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteComponent.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as w from '../../../warnings.js';\nimport { visit_component } from './shared/component.js';\n\n/**\n * @param {AST.SvelteComponent} node\n * @param {Context} context\n */\nexport function SvelteComponent(node, context) {\n\tif (context.state.analysis.runes) {\n\t\tw.svelte_component_deprecated(node);\n\t}\n\n\tcontext.visit(node.expression, { ...context.state, expression: node.metadata.expression });\n\n\tvisit_component(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteDocument.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { disallow_children } from './shared/special-element.js';\nimport * as e from '../../../errors.js';\nimport { is_event_attribute } from '../../../utils/ast.js';\n\n/**\n * @param {AST.SvelteDocument} node\n * @param {Context} context\n */\nexport function SvelteDocument(node, context) {\n\tdisallow_children(node);\n\n\tfor (const attribute of node.attributes) {\n\t\tif (\n\t\t\tattribute.type === 'SpreadAttribute' ||\n\t\t\t(attribute.type === 'Attribute' && !is_event_attribute(attribute))\n\t\t) {\n\t\t\te.illegal_element_attribute(attribute, 'svelte:document');\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteElement.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { NAMESPACE_MATHML, NAMESPACE_SVG } from '../../../../constants.js';\nimport { is_text_attribute } from '../../../utils/ast.js';\nimport { check_element } from './shared/a11y/index.js';\nimport { validate_element } from './shared/element.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.SvelteElement} node\n * @param {Context} context\n */\nexport function SvelteElement(node, context) {\n\tvalidate_element(node, context);\n\tcheck_element(node, context);\n\n\tnode.metadata.path = [...context.path];\n\tcontext.state.analysis.elements.push(node);\n\n\tconst xmlns = /** @type {AST.Attribute & { value: [AST.Text] } | undefined} */ (\n\t\tnode.attributes.find(\n\t\t\t(a) => a.type === 'Attribute' && a.name === 'xmlns' && is_text_attribute(a)\n\t\t)\n\t);\n\n\tif (xmlns) {\n\t\tnode.metadata.svg = xmlns.value[0].data === NAMESPACE_SVG;\n\t\tnode.metadata.mathml = xmlns.value[0].data === NAMESPACE_MATHML;\n\t} else {\n\t\tlet i = context.path.length;\n\t\twhile (i--) {\n\t\t\tconst ancestor = context.path[i];\n\n\t\t\tif (\n\t\t\t\tancestor.type === 'Component' ||\n\t\t\t\tancestor.type === 'SvelteComponent' ||\n\t\t\t\tancestor.type === 'SvelteFragment' ||\n\t\t\t\tancestor.type === 'SnippetBlock' ||\n\t\t\t\ti === 0\n\t\t\t) {\n\t\t\t\t// Root element, or inside a slot or a snippet -> this resets the namespace, so assume the component namespace\n\t\t\t\tnode.metadata.svg = context.state.options.namespace === 'svg';\n\t\t\t\tnode.metadata.mathml = context.state.options.namespace === 'mathml';\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (ancestor.type === 'SvelteElement' || ancestor.type === 'RegularElement') {\n\t\t\t\tnode.metadata.svg =\n\t\t\t\t\tancestor.type === 'RegularElement' && ancestor.name === 'foreignObject'\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: ancestor.metadata.svg;\n\n\t\t\t\tnode.metadata.mathml =\n\t\t\t\t\tancestor.type === 'RegularElement' && ancestor.name === 'foreignObject'\n\t\t\t\t\t\t? false\n\t\t\t\t\t\t: ancestor.metadata.mathml;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.visit(node.tag, {\n\t\t...context.state,\n\t\texpression: node.metadata.expression\n\t});\n\n\tfor (const attribute of node.attributes) {\n\t\tcontext.visit(attribute);\n\t}\n\n\tcontext.visit(node.fragment, {\n\t\t...context.state,\n\t\tparent_element: null\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteFragment.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { validate_slot_attribute } from './shared/attribute.js';\n\n/**\n * @param {AST.SvelteFragment} node\n * @param {Context} context\n */\nexport function SvelteFragment(node, context) {\n\tconst parent = context.path.at(-2);\n\tif (parent?.type !== 'Component' && parent?.type !== 'SvelteComponent') {\n\t\te.svelte_fragment_invalid_placement(node);\n\t}\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tif (attribute.name === 'slot') {\n\t\t\t\tvalidate_slot_attribute(context, attribute);\n\t\t\t}\n\t\t} else if (attribute.type !== 'LetDirective') {\n\t\t\te.svelte_fragment_invalid_attribute(attribute);\n\t\t}\n\t}\n\n\tcontext.next({ ...context.state, parent_element: null });\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteHead.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.SvelteHead} node\n * @param {Context} context\n */\nexport function SvelteHead(node, context) {\n\tfor (const attribute of node.attributes) {\n\t\te.svelte_head_illegal_attribute(attribute);\n\t}\n\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteSelf.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { visit_component } from './shared/component.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { filename, UNKNOWN_FILENAME } from '../../../state.js';\n\n/**\n * @param {AST.SvelteSelf} node\n * @param {Context} context\n */\nexport function SvelteSelf(node, context) {\n\tconst valid = context.path.some(\n\t\t(node) =>\n\t\t\tnode.type === 'IfBlock' ||\n\t\t\tnode.type === 'EachBlock' ||\n\t\t\tnode.type === 'Component' ||\n\t\t\tnode.type === 'SnippetBlock'\n\t);\n\n\tif (!valid) {\n\t\te.svelte_self_invalid_placement(node);\n\t}\n\n\tif (context.state.analysis.runes) {\n\t\tconst name = filename === UNKNOWN_FILENAME ? 'Self' : context.state.analysis.name;\n\t\tconst basename =\n\t\t\tfilename === UNKNOWN_FILENAME\n\t\t\t\t? 'Self.svelte'\n\t\t\t\t: /** @type {string} */ (filename.split(/[/\\\\]/).pop());\n\n\t\tw.svelte_self_deprecated(node, name, basename);\n\t}\n\n\tvisit_component(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteWindow.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { disallow_children } from './shared/special-element.js';\nimport * as e from '../../../errors.js';\nimport { is_event_attribute } from '../../../utils/ast.js';\n\n/**\n * @param {AST.SvelteWindow} node\n * @param {Context} context\n */\nexport function SvelteWindow(node, context) {\n\tdisallow_children(node);\n\n\tfor (const attribute of node.attributes) {\n\t\tif (\n\t\t\tattribute.type === 'SpreadAttribute' ||\n\t\t\t(attribute.type === 'Attribute' && !is_event_attribute(attribute))\n\t\t) {\n\t\t\te.illegal_element_attribute(attribute, 'svelte:window');\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/TaggedTemplateExpression.js",
    "content": "/** @import { TaggedTemplateExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { is_pure } from './shared/utils.js';\n\n/**\n * @param {TaggedTemplateExpression} node\n * @param {Context} context\n */\nexport function TaggedTemplateExpression(node, context) {\n\tif (context.state.expression && !is_pure(node.tag, context)) {\n\t\tcontext.state.expression.has_call = true;\n\t\tcontext.state.expression.has_state = true;\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/TemplateElement.js",
    "content": "/** @import { TemplateElement } from 'estree' */\nimport * as w from '../../../warnings.js';\nimport { regex_bidirectional_control_characters } from '../../patterns.js';\n\n/**\n * @param {TemplateElement} node\n */\nexport function TemplateElement(node) {\n\tif (regex_bidirectional_control_characters.test(node.value.cooked ?? '')) {\n\t\tw.bidirectional_control_characters(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/Text.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { is_tag_valid_with_parent } from '../../../../html-tree-validation.js';\nimport { regex_bidirectional_control_characters, regex_not_whitespace } from '../../patterns.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { extract_svelte_ignore } from '../../../utils/extract_svelte_ignore.js';\n\n/**\n * @param {AST.Text} node\n * @param {Context} context\n */\nexport function Text(node, context) {\n\tconst parent = /** @type {AST.SvelteNode} */ (context.path.at(-1));\n\n\tif (\n\t\tparent.type === 'Fragment' &&\n\t\tcontext.state.parent_element &&\n\t\tregex_not_whitespace.test(node.data)\n\t) {\n\t\tconst message = is_tag_valid_with_parent('#text', context.state.parent_element);\n\t\tif (message) {\n\t\t\te.node_invalid_placement(node, message);\n\t\t}\n\t}\n\n\tregex_bidirectional_control_characters.lastIndex = 0;\n\tfor (const match of node.data.matchAll(regex_bidirectional_control_characters)) {\n\t\tlet is_ignored = false;\n\n\t\t// if we have a svelte-ignore comment earlier in the text, bail\n\t\t// (otherwise we can only use svelte-ignore on parent elements/blocks)\n\t\tif (parent.type === 'Fragment') {\n\t\t\tfor (const child of parent.nodes) {\n\t\t\t\tif (child === node) break;\n\n\t\t\t\tif (child.type === 'Comment') {\n\t\t\t\t\tis_ignored ||= extract_svelte_ignore(\n\t\t\t\t\t\tchild.start + 4,\n\t\t\t\t\t\tchild.data,\n\t\t\t\t\t\tcontext.state.analysis.runes\n\t\t\t\t\t).includes('bidirectional_control_characters');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!is_ignored) {\n\t\t\tlet start = match.index + node.start;\n\t\t\tw.bidirectional_control_characters({ start, end: start + match[0].length });\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/TitleElement.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.TitleElement} node\n * @param {Context} context\n */\nexport function TitleElement(node, context) {\n\tfor (const attribute of node.attributes) {\n\t\te.title_illegal_attribute(attribute);\n\t}\n\n\tfor (const child of node.fragment.nodes) {\n\t\tif (child.type !== 'Text' && child.type !== 'ExpressionTag') {\n\t\t\te.title_invalid_content(child);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/TransitionDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as e from '../../../errors.js';\n\nimport { mark_subtree_dynamic } from './shared/fragment.js';\n\n/**\n * @param {AST.TransitionDirective} node\n * @param {Context} context\n */\nexport function TransitionDirective(node, context) {\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n\n\tif (node.metadata.expression.has_await) {\n\t\te.illegal_await_expression(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/UpdateExpression.js",
    "content": "/** @import { UpdateExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { object } from '../../../utils/ast.js';\nimport { validate_assignment } from './shared/utils.js';\n\n/**\n * @param {UpdateExpression} node\n * @param {Context} context\n */\nexport function UpdateExpression(node, context) {\n\tvalidate_assignment(node, node.argument, context);\n\n\tif (context.state.reactive_statement) {\n\t\tconst id = node.argument.type === 'MemberExpression' ? object(node.argument) : node.argument;\n\t\tif (id?.type === 'Identifier') {\n\t\t\tconst binding = context.state.scope.get(id.name);\n\n\t\t\tif (binding) {\n\t\t\t\tcontext.state.reactive_statement.assignments.add(binding);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (context.state.expression) {\n\t\tcontext.state.expression.has_assignment = true;\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/UseDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { mark_subtree_dynamic } from './shared/fragment.js';\nimport * as e from '../../../errors.js';\n\n/**\n * @param {AST.UseDirective} node\n * @param {Context} context\n */\nexport function UseDirective(node, context) {\n\tmark_subtree_dynamic(context.path);\n\n\tcontext.next({ ...context.state, expression: node.metadata.expression });\n\n\tif (node.metadata.expression.has_await) {\n\t\te.illegal_await_expression(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/VariableDeclarator.js",
    "content": "/** @import { Expression, Identifier, Literal, VariableDeclarator } from 'estree' */\n/** @import { Binding } from '#compiler' */\n/** @import { Context } from '../types' */\nimport { get_rune } from '../../scope.js';\nimport { ensure_no_module_import_conflict, validate_identifier_name } from './shared/utils.js';\nimport * as e from '../../../errors.js';\nimport * as w from '../../../warnings.js';\nimport { extract_paths } from '../../../utils/ast.js';\nimport { equal } from '../../../utils/assert.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @param {VariableDeclarator} node\n * @param {Context} context\n */\nexport function VariableDeclarator(node, context) {\n\tensure_no_module_import_conflict(node, context.state);\n\n\tif (context.state.analysis.runes) {\n\t\tconst init = node.init;\n\t\tconst rune = get_rune(init, context.state.scope);\n\t\tconst { paths } = extract_paths(node.id, b.id('dummy'));\n\n\t\tfor (const path of paths) {\n\t\t\tvalidate_identifier_name(context.state.scope.get(/** @type {Identifier} */ (path.node).name));\n\t\t}\n\n\t\t// TODO feels like this should happen during scope creation?\n\t\tif (\n\t\t\trune === '$state' ||\n\t\t\trune === '$state.raw' ||\n\t\t\trune === '$derived' ||\n\t\t\trune === '$derived.by' ||\n\t\t\trune === '$props'\n\t\t) {\n\t\t\tfor (const path of paths) {\n\t\t\t\t// @ts-ignore this fails in CI for some insane reason\n\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(path.node.name));\n\t\t\t\tbinding.kind =\n\t\t\t\t\trune === '$state'\n\t\t\t\t\t\t? 'state'\n\t\t\t\t\t\t: rune === '$state.raw'\n\t\t\t\t\t\t\t? 'raw_state'\n\t\t\t\t\t\t\t: rune === '$derived' || rune === '$derived.by'\n\t\t\t\t\t\t\t\t? 'derived'\n\t\t\t\t\t\t\t\t: path.is_rest\n\t\t\t\t\t\t\t\t\t? 'rest_prop'\n\t\t\t\t\t\t\t\t\t: 'prop';\n\t\t\t\tif (rune === '$props' && binding.kind === 'rest_prop' && node.id.type === 'ObjectPattern') {\n\t\t\t\t\tconst { properties } = node.id;\n\t\t\t\t\t/** @type {string[]} */\n\t\t\t\t\tconst exclude_props = [];\n\t\t\t\t\tfor (const property of properties) {\n\t\t\t\t\t\tif (property.type === 'RestElement') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst key = /** @type {Identifier | Literal & { value: string | number }} */ (\n\t\t\t\t\t\t\tproperty.key\n\t\t\t\t\t\t);\n\t\t\t\t\t\texclude_props.push(key.type === 'Identifier' ? key.name : key.value.toString());\n\t\t\t\t\t}\n\t\t\t\t\t(binding.metadata ??= {}).exclude_props = exclude_props;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (rune === '$props') {\n\t\t\tif (node.id.type !== 'ObjectPattern' && node.id.type !== 'Identifier') {\n\t\t\t\te.props_invalid_identifier(node);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcontext.state.analysis.custom_element &&\n\t\t\t\tcontext.state.options.customElementOptions?.props == null\n\t\t\t) {\n\t\t\t\tlet warn_on;\n\t\t\t\tif (\n\t\t\t\t\tnode.id.type === 'Identifier' ||\n\t\t\t\t\t(warn_on = node.id.properties.find((p) => p.type === 'RestElement')) != null\n\t\t\t\t) {\n\t\t\t\t\tw.custom_element_props_identifier(warn_on ?? node.id);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.state.analysis.needs_props = true;\n\n\t\t\tif (node.id.type === 'Identifier') {\n\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(node.id.name));\n\t\t\t\tbinding.initial = null; // else would be $props()\n\t\t\t\tbinding.kind = 'rest_prop';\n\t\t\t} else {\n\t\t\t\tequal(node.id.type, 'ObjectPattern');\n\n\t\t\t\tfor (const property of node.id.properties) {\n\t\t\t\t\tif (property.type !== 'Property') continue;\n\n\t\t\t\t\tif (property.computed) {\n\t\t\t\t\t\te.props_invalid_pattern(property);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (property.key.type === 'Identifier' && property.key.name.startsWith('$$')) {\n\t\t\t\t\t\te.props_illegal_name(property);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value =\n\t\t\t\t\t\tproperty.value.type === 'AssignmentPattern' ? property.value.left : property.value;\n\n\t\t\t\t\tif (value.type !== 'Identifier') {\n\t\t\t\t\t\te.props_invalid_pattern(property);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst alias =\n\t\t\t\t\t\tproperty.key.type === 'Identifier'\n\t\t\t\t\t\t\t? property.key.name\n\t\t\t\t\t\t\t: String(/** @type {Literal} */ (property.key).value);\n\n\t\t\t\t\tlet initial = property.value.type === 'AssignmentPattern' ? property.value.right : null;\n\n\t\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(value.name));\n\t\t\t\t\tbinding.prop_alias = alias;\n\n\t\t\t\t\t// rewire initial from $props() to the actual initial value, stripping $bindable() if necessary\n\t\t\t\t\tif (\n\t\t\t\t\t\tinitial?.type === 'CallExpression' &&\n\t\t\t\t\t\tinitial.callee.type === 'Identifier' &&\n\t\t\t\t\t\tinitial.callee.name === '$bindable'\n\t\t\t\t\t) {\n\t\t\t\t\t\tbinding.initial = /** @type {Expression | null} */ (initial.arguments[0] ?? null);\n\t\t\t\t\t\tbinding.kind = 'bindable_prop';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbinding.initial = initial;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (node.init?.type === 'CallExpression') {\n\t\t\tconst callee = node.init.callee;\n\t\t\tif (\n\t\t\t\tcallee.type === 'Identifier' &&\n\t\t\t\t(callee.name === '$state' || callee.name === '$derived' || callee.name === '$props') &&\n\t\t\t\tcontext.state.scope.get(callee.name)?.kind !== 'store_sub'\n\t\t\t) {\n\t\t\t\te.rune_invalid_usage(node.init, callee.name);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (node.init && get_rune(node.init, context.state.scope) === '$props') {\n\t\t// prevent erroneous `state_referenced_locally` warnings on prop fallbacks\n\t\tcontext.visit(node.id, {\n\t\t\t...context.state,\n\t\t\tfunction_depth: context.state.function_depth + 1\n\t\t});\n\n\t\tcontext.visit(node.init);\n\t} else {\n\t\tcontext.next();\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/constants.js",
    "content": "/** @import { ARIARoleRelationConcept  } from 'aria-query' */\nimport { roles as roles_map, elementRoles } from 'aria-query';\n// @ts-expect-error package doesn't provide typings\nimport { AXObjects, elementAXObjects } from 'axobject-query';\n\nexport const aria_attributes =\n\t'activedescendant atomic autocomplete busy checked colcount colindex colspan controls current describedby description details disabled dropeffect errormessage expanded flowto grabbed haspopup hidden invalid keyshortcuts label labelledby level live modal multiline multiselectable orientation owns placeholder posinset pressed readonly relevant required roledescription rowcount rowindex rowspan selected setsize sort valuemax valuemin valuenow valuetext'.split(\n\t\t' '\n\t);\n\n/** @type {Record<string, string[]>} */\nexport const a11y_required_attributes = {\n\ta: ['href'],\n\tarea: ['alt', 'aria-label', 'aria-labelledby'],\n\t// html-has-lang\n\thtml: ['lang'],\n\t// iframe-has-title\n\tiframe: ['title'],\n\timg: ['alt'],\n\tobject: ['title', 'aria-label', 'aria-labelledby']\n};\n\nexport const a11y_distracting_elements = ['blink', 'marquee'];\n\n// this excludes `<a>` and `<button>` because they are handled separately\nexport const a11y_required_content = [\n\t// heading-has-content\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6'\n];\n\nexport const a11y_labelable = [\n\t'button',\n\t'input',\n\t'keygen',\n\t'meter',\n\t'output',\n\t'progress',\n\t'select',\n\t'textarea'\n];\n\nexport const a11y_interactive_handlers = [\n\t// Keyboard events\n\t'keypress',\n\t'keydown',\n\t'keyup',\n\t// Click events\n\t'click',\n\t'contextmenu',\n\t'dblclick',\n\t'drag',\n\t'dragend',\n\t'dragenter',\n\t'dragexit',\n\t'dragleave',\n\t'dragover',\n\t'dragstart',\n\t'drop',\n\t'mousedown',\n\t'mouseenter',\n\t'mouseleave',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t// Pointer events\n\t'pointerdown',\n\t'pointerup',\n\t'pointermove',\n\t'pointerenter',\n\t'pointerleave',\n\t'pointerover',\n\t'pointerout',\n\t'pointercancel',\n\t// Touch events\n\t'touchstart',\n\t'touchend',\n\t'touchmove',\n\t'touchcancel'\n];\n\nexport const a11y_recommended_interactive_handlers = [\n\t'click',\n\t'mousedown',\n\t'mouseup',\n\t'keypress',\n\t'keydown',\n\t'keyup'\n];\n\nexport const a11y_nested_implicit_semantics = new Map([\n\t['header', 'banner'],\n\t['footer', 'contentinfo']\n]);\n\nexport const a11y_implicit_semantics = new Map([\n\t['a', 'link'],\n\t['area', 'link'],\n\t['article', 'article'],\n\t['aside', 'complementary'],\n\t['body', 'document'],\n\t['button', 'button'],\n\t['datalist', 'listbox'],\n\t['dd', 'definition'],\n\t['dfn', 'term'],\n\t['dialog', 'dialog'],\n\t['details', 'group'],\n\t['dt', 'term'],\n\t['fieldset', 'group'],\n\t['figure', 'figure'],\n\t['form', 'form'],\n\t['h1', 'heading'],\n\t['h2', 'heading'],\n\t['h3', 'heading'],\n\t['h4', 'heading'],\n\t['h5', 'heading'],\n\t['h6', 'heading'],\n\t['hr', 'separator'],\n\t['img', 'img'],\n\t['li', 'listitem'],\n\t['link', 'link'],\n\t['main', 'main'],\n\t['menu', 'list'],\n\t['meter', 'progressbar'],\n\t['nav', 'navigation'],\n\t['ol', 'list'],\n\t['option', 'option'],\n\t['optgroup', 'group'],\n\t['output', 'status'],\n\t['progress', 'progressbar'],\n\t['section', 'region'],\n\t['summary', 'button'],\n\t['table', 'table'],\n\t['tbody', 'rowgroup'],\n\t['textarea', 'textbox'],\n\t['tfoot', 'rowgroup'],\n\t['thead', 'rowgroup'],\n\t['tr', 'row'],\n\t['ul', 'list']\n]);\n\nexport const menuitem_type_to_implicit_role = new Map([\n\t['command', 'menuitem'],\n\t['checkbox', 'menuitemcheckbox'],\n\t['radio', 'menuitemradio']\n]);\n\nexport const input_type_to_implicit_role = new Map([\n\t['button', 'button'],\n\t['image', 'button'],\n\t['reset', 'button'],\n\t['submit', 'button'],\n\t['checkbox', 'checkbox'],\n\t['radio', 'radio'],\n\t['range', 'slider'],\n\t['number', 'spinbutton'],\n\t['email', 'textbox'],\n\t['search', 'searchbox'],\n\t['tel', 'textbox'],\n\t['text', 'textbox'],\n\t['url', 'textbox']\n]);\n\n/**\n * Exceptions to the rule which follows common A11y conventions\n * TODO make this configurable by the user\n * @type {Record<string, string[]>}\n */\nexport const a11y_non_interactive_element_to_interactive_role_exceptions = {\n\tul: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],\n\tol: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],\n\tmenu: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],\n\tli: ['menuitem', 'option', 'row', 'tab', 'treeitem'],\n\ttable: ['grid'],\n\ttd: ['gridcell'],\n\tfieldset: ['radiogroup', 'presentation']\n};\n\nexport const combobox_if_list = ['email', 'search', 'tel', 'text', 'url'];\n\n// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofilling-form-controls:-the-autocomplete-attribute\nexport const address_type_tokens = ['shipping', 'billing'];\n\nexport const autofill_field_name_tokens = [\n\t'',\n\t'on',\n\t'off',\n\t'name',\n\t'honorific-prefix',\n\t'given-name',\n\t'additional-name',\n\t'family-name',\n\t'honorific-suffix',\n\t'nickname',\n\t'username',\n\t'new-password',\n\t'current-password',\n\t'one-time-code',\n\t'organization-title',\n\t'organization',\n\t'street-address',\n\t'address-line1',\n\t'address-line2',\n\t'address-line3',\n\t'address-level4',\n\t'address-level3',\n\t'address-level2',\n\t'address-level1',\n\t'country',\n\t'country-name',\n\t'postal-code',\n\t'cc-name',\n\t'cc-given-name',\n\t'cc-additional-name',\n\t'cc-family-name',\n\t'cc-number',\n\t'cc-exp',\n\t'cc-exp-month',\n\t'cc-exp-year',\n\t'cc-csc',\n\t'cc-type',\n\t'transaction-currency',\n\t'transaction-amount',\n\t'language',\n\t'bday',\n\t'bday-day',\n\t'bday-month',\n\t'bday-year',\n\t'sex',\n\t'url',\n\t'photo'\n];\n\nexport const contact_type_tokens = ['home', 'work', 'mobile', 'fax', 'pager'];\n\nexport const autofill_contact_field_name_tokens = [\n\t'tel',\n\t'tel-country-code',\n\t'tel-national',\n\t'tel-area-code',\n\t'tel-local',\n\t'tel-local-prefix',\n\t'tel-local-suffix',\n\t'tel-extension',\n\t'email',\n\t'impp'\n];\n\nexport const ElementInteractivity = /** @type {const} */ ({\n\tInteractive: 'interactive',\n\tNonInteractive: 'non-interactive',\n\tStatic: 'static'\n});\n\nexport const invisible_elements = ['meta', 'html', 'script', 'style'];\n\nexport const aria_roles = roles_map.keys();\n\nexport const abstract_roles = aria_roles.filter((role) => roles_map.get(role)?.abstract);\n\nconst non_abstract_roles = aria_roles.filter((name) => !abstract_roles.includes(name));\n\nexport const non_interactive_roles = non_abstract_roles\n\t.filter((name) => {\n\t\tconst role = roles_map.get(name);\n\t\treturn (\n\t\t\t// 'toolbar' does not descend from widget, but it does support\n\t\t\t// aria-activedescendant, thus in practice we treat it as a widget.\n\t\t\t// focusable tabpanel elements are recommended if any panels in a set contain content where the first element in the panel is not focusable.\n\t\t\t// 'generic' is meant to have no semantic meaning.\n\t\t\t// 'cell' is treated as CellRole by the AXObject which is interactive, so we treat 'cell' it as interactive as well.\n\t\t\t!['toolbar', 'tabpanel', 'generic', 'cell'].includes(name) &&\n\t\t\t!role?.superClass.some((classes) => classes.includes('widget') || classes.includes('window'))\n\t\t);\n\t})\n\t.concat(\n\t\t// The `progressbar` is descended from `widget`, but in practice, its\n\t\t// value is always `readonly`, so we treat it as a non-interactive role.\n\t\t'progressbar'\n\t);\n\nexport const interactive_roles = non_abstract_roles.filter(\n\t(name) =>\n\t\t!non_interactive_roles.includes(name) &&\n\t\t// 'generic' is meant to have no semantic meaning.\n\t\tname !== 'generic'\n);\n\nexport const presentation_roles = ['presentation', 'none'];\n\n/** @type {ARIARoleRelationConcept[]} */\nexport const non_interactive_element_role_schemas = [];\n\n/** @type {ARIARoleRelationConcept[]} */\nexport const interactive_element_role_schemas = [];\n\nfor (const [schema, roles] of elementRoles.entries()) {\n\tif ([...roles].every((role) => role !== 'generic' && non_interactive_roles.includes(role))) {\n\t\tnon_interactive_element_role_schemas.push(schema);\n\t}\n\n\tif ([...roles].every((role) => interactive_roles.includes(role))) {\n\t\tinteractive_element_role_schemas.push(schema);\n\t}\n}\n\nconst interactive_ax_objects = [...AXObjects.keys()].filter(\n\t(name) => AXObjects.get(name).type === 'widget'\n);\n\n/** @type {ARIARoleRelationConcept[]} */\nexport const interactive_element_ax_object_schemas = [];\n\n/** @type {ARIARoleRelationConcept[]} */\nexport const non_interactive_element_ax_object_schemas = [];\n\nconst non_interactive_ax_objects = [...AXObjects.keys()].filter((name) =>\n\t['windows', 'structure'].includes(AXObjects.get(name).type)\n);\n\nfor (const [schema, ax_object] of elementAXObjects.entries()) {\n\tif ([...ax_object].every((role) => interactive_ax_objects.includes(role))) {\n\t\tinteractive_element_ax_object_schemas.push(schema);\n\t}\n\n\tif ([...ax_object].every((role) => non_interactive_ax_objects.includes(role))) {\n\t\tnon_interactive_element_ax_object_schemas.push(schema);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../../../types.js' */\n/** @import { ARIARoleDefinitionKey, ARIARoleRelationConcept, ARIAProperty, ARIAPropertyDefinition, ARIARoleDefinition } from 'aria-query' */\nimport {\n\ta11y_distracting_elements,\n\ta11y_implicit_semantics,\n\ta11y_interactive_handlers,\n\ta11y_labelable,\n\ta11y_nested_implicit_semantics,\n\ta11y_non_interactive_element_to_interactive_role_exceptions,\n\ta11y_recommended_interactive_handlers,\n\ta11y_required_attributes,\n\ta11y_required_content,\n\tabstract_roles,\n\taddress_type_tokens,\n\taria_attributes,\n\taria_roles,\n\tautofill_contact_field_name_tokens,\n\tautofill_field_name_tokens,\n\tcombobox_if_list,\n\tcontact_type_tokens,\n\tElementInteractivity,\n\tinput_type_to_implicit_role,\n\tinteractive_element_ax_object_schemas,\n\tinteractive_element_role_schemas,\n\tinteractive_roles,\n\tinvisible_elements,\n\tmenuitem_type_to_implicit_role,\n\tnon_interactive_element_ax_object_schemas,\n\tnon_interactive_element_role_schemas,\n\tnon_interactive_roles,\n\tpresentation_roles\n} from './constants.js';\nimport { roles as roles_map, aria } from 'aria-query';\n// @ts-expect-error package doesn't provide typings\nimport { AXObjectRoles, elementAXObjects } from 'axobject-query';\nimport {\n\tregex_heading_tags,\n\tregex_js_prefix,\n\tregex_not_whitespace,\n\tregex_redundant_img_alt,\n\tregex_starts_with_vowel,\n\tregex_whitespaces\n} from '../../../../patterns.js';\nimport { is_event_attribute, is_text_attribute } from '../../../../../utils/ast.js';\nimport { list } from '../../../../../utils/string.js';\nimport { walk } from 'zimmerframe';\nimport fuzzymatch from '../../../../1-parse/utils/fuzzymatch.js';\nimport { is_content_editable_binding } from '../../../../../../utils.js';\nimport * as w from '../../../../../warnings.js';\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} node\n * @param {Context} context\n */\nexport function check_element(node, context) {\n\t/** @type {Map<string, AST.Attribute>} */\n\tconst attribute_map = new Map();\n\n\t/** @type {Set<string>} */\n\tconst handlers = new Set();\n\n\t/** @type {AST.Attribute[]} */\n\tconst attributes = [];\n\n\tconst is_dynamic_element = node.type === 'SvelteElement';\n\n\tlet has_spread = false;\n\tlet has_contenteditable_attr = false;\n\tlet has_contenteditable_binding = false;\n\n\tfor (const attribute of node.attributes) {\n\t\tswitch (attribute.type) {\n\t\t\tcase 'Attribute': {\n\t\t\t\tif (is_event_attribute(attribute)) {\n\t\t\t\t\thandlers.add(attribute.name.slice(2));\n\t\t\t\t} else {\n\t\t\t\t\tattributes.push(attribute);\n\t\t\t\t\tattribute_map.set(attribute.name, attribute);\n\t\t\t\t\tif (attribute.name === 'contenteditable') {\n\t\t\t\t\t\thas_contenteditable_attr = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SpreadAttribute': {\n\t\t\t\thas_spread = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'BindDirective': {\n\t\t\t\tif (is_content_editable_binding(attribute.name)) {\n\t\t\t\t\thas_contenteditable_binding = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'OnDirective': {\n\t\t\t\thandlers.add(attribute.name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst interactivity = element_interactivity(node.name, attribute_map);\n\tconst is_interactive = interactivity === ElementInteractivity.Interactive;\n\tconst is_non_interactive = interactivity === ElementInteractivity.NonInteractive;\n\tconst is_static = interactivity === ElementInteractivity.Static;\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type !== 'Attribute') continue;\n\n\t\tconst name = attribute.name.toLowerCase();\n\t\t// aria-props\n\t\tif (name.startsWith('aria-')) {\n\t\t\tif (invisible_elements.includes(node.name)) {\n\t\t\t\t// aria-unsupported-elements\n\t\t\t\tw.a11y_aria_attributes(attribute, node.name);\n\t\t\t}\n\n\t\t\tconst type = name.slice(5);\n\t\t\tif (!aria_attributes.includes(type)) {\n\t\t\t\tconst match = fuzzymatch(type, aria_attributes);\n\t\t\t\tw.a11y_unknown_aria_attribute(attribute, type, match);\n\t\t\t}\n\n\t\t\tif (name === 'aria-hidden' && regex_heading_tags.test(node.name)) {\n\t\t\t\tw.a11y_hidden(attribute, node.name);\n\t\t\t}\n\n\t\t\t// aria-proptypes\n\t\t\tlet value = get_static_value(attribute);\n\n\t\t\tconst schema = aria.get(/** @type {ARIAProperty} */ (name));\n\t\t\tif (schema !== undefined) {\n\t\t\t\tvalidate_aria_attribute_value(attribute, /** @type {ARIAProperty} */ (name), schema, value);\n\t\t\t}\n\n\t\t\t// aria-activedescendant-has-tabindex\n\t\t\tif (\n\t\t\t\tname === 'aria-activedescendant' &&\n\t\t\t\t!is_dynamic_element &&\n\t\t\t\t!is_interactive &&\n\t\t\t\t!attribute_map.has('tabindex') &&\n\t\t\t\t!has_spread\n\t\t\t) {\n\t\t\t\tw.a11y_aria_activedescendant_has_tabindex(attribute);\n\t\t\t}\n\t\t}\n\n\t\tswitch (name) {\n\t\t\t// aria-role\n\t\t\tcase 'role': {\n\t\t\t\tif (invisible_elements.includes(node.name)) {\n\t\t\t\t\t// aria-unsupported-elements\n\t\t\t\t\tw.a11y_misplaced_role(attribute, node.name);\n\t\t\t\t}\n\n\t\t\t\tconst value = get_static_value(attribute);\n\t\t\t\tif (typeof value !== 'string') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const c_r of value.split(regex_whitespaces)) {\n\t\t\t\t\tconst current_role = /** @type {ARIARoleDefinitionKey} current_role */ (c_r);\n\n\t\t\t\t\tif (current_role && is_abstract_role(current_role)) {\n\t\t\t\t\t\tw.a11y_no_abstract_role(attribute, current_role);\n\t\t\t\t\t} else if (current_role && !aria_roles.includes(current_role)) {\n\t\t\t\t\t\tconst match = fuzzymatch(current_role, aria_roles);\n\t\t\t\t\t\tw.a11y_unknown_role(attribute, current_role, match);\n\t\t\t\t\t}\n\n\t\t\t\t\t// no-redundant-roles\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrent_role === get_implicit_role(node.name, attribute_map) &&\n\t\t\t\t\t\t// <ul role=\"list\"> is ok because CSS list-style:none removes the semantics and this is a way to bring them back\n\t\t\t\t\t\t!['ul', 'ol', 'li', 'menu'].includes(node.name) &&\n\t\t\t\t\t\t// <a role=\"link\" /> is ok because without href the a tag doesn't have a role of link\n\t\t\t\t\t\t!(node.name === 'a' && !attribute_map.has('href'))\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.a11y_no_redundant_roles(attribute, current_role);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Footers and headers are special cases, and should not have redundant roles unless they are the children of sections or articles.\n\t\t\t\t\tconst is_parent_section_or_article = is_parent(context.path, ['section', 'article']);\n\t\t\t\t\tif (!is_parent_section_or_article) {\n\t\t\t\t\t\tconst has_nested_redundant_role =\n\t\t\t\t\t\t\tcurrent_role === a11y_nested_implicit_semantics.get(node.name);\n\t\t\t\t\t\tif (has_nested_redundant_role) {\n\t\t\t\t\t\t\tw.a11y_no_redundant_roles(attribute, current_role);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// role-has-required-aria-props\n\t\t\t\t\tif (\n\t\t\t\t\t\t!is_dynamic_element &&\n\t\t\t\t\t\t!is_semantic_role_element(current_role, node.name, attribute_map)\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst role = roles_map.get(current_role);\n\t\t\t\t\t\tif (role) {\n\t\t\t\t\t\t\tconst required_role_props = Object.keys(role.requiredProps);\n\t\t\t\t\t\t\tconst has_missing_props =\n\t\t\t\t\t\t\t\t!has_spread &&\n\t\t\t\t\t\t\t\trequired_role_props.some((prop) => !attributes.find((a) => a.name === prop));\n\t\t\t\t\t\t\tif (has_missing_props) {\n\t\t\t\t\t\t\t\tw.a11y_role_has_required_aria_props(\n\t\t\t\t\t\t\t\t\tattribute,\n\t\t\t\t\t\t\t\t\tcurrent_role,\n\t\t\t\t\t\t\t\t\tlist(\n\t\t\t\t\t\t\t\t\t\trequired_role_props.map((v) => `\"${v}\"`),\n\t\t\t\t\t\t\t\t\t\t'and'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// interactive-supports-focus\n\t\t\t\t\tif (\n\t\t\t\t\t\t!has_spread &&\n\t\t\t\t\t\t!has_disabled_attribute(attribute_map) &&\n\t\t\t\t\t\t!is_hidden_from_screen_reader(node.name, attribute_map) &&\n\t\t\t\t\t\t!is_presentation_role(current_role) &&\n\t\t\t\t\t\tis_interactive_roles(current_role) &&\n\t\t\t\t\t\tis_static &&\n\t\t\t\t\t\t!attribute_map.get('tabindex')\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst has_interactive_handlers = [...handlers].some((handler) =>\n\t\t\t\t\t\t\ta11y_interactive_handlers.includes(handler)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (has_interactive_handlers) {\n\t\t\t\t\t\t\tw.a11y_interactive_supports_focus(node, current_role);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// no-interactive-element-to-noninteractive-role\n\t\t\t\t\tif (\n\t\t\t\t\t\t!has_spread &&\n\t\t\t\t\t\tis_interactive &&\n\t\t\t\t\t\t(is_non_interactive_roles(current_role) || is_presentation_role(current_role))\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.a11y_no_interactive_element_to_noninteractive_role(node, node.name, current_role);\n\t\t\t\t\t}\n\n\t\t\t\t\t// no-noninteractive-element-to-interactive-role\n\t\t\t\t\tif (\n\t\t\t\t\t\t!has_spread &&\n\t\t\t\t\t\tis_non_interactive &&\n\t\t\t\t\t\tis_interactive_roles(current_role) &&\n\t\t\t\t\t\t!a11y_non_interactive_element_to_interactive_role_exceptions[node.name]?.includes(\n\t\t\t\t\t\t\tcurrent_role\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.a11y_no_noninteractive_element_to_interactive_role(node, node.name, current_role);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// no-access-key\n\t\t\tcase 'accesskey': {\n\t\t\t\tw.a11y_accesskey(attribute);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// no-autofocus\n\t\t\tcase 'autofocus': {\n\t\t\t\tif (node.name !== 'dialog' && !is_parent(context.path, ['dialog'])) {\n\t\t\t\t\tw.a11y_autofocus(attribute);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// scope\n\t\t\tcase 'scope': {\n\t\t\t\tif (!is_dynamic_element && node.name !== 'th') {\n\t\t\t\t\tw.a11y_misplaced_scope(attribute);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// tabindex-no-positive\n\t\t\tcase 'tabindex': {\n\t\t\t\tconst value = get_static_value(attribute);\n\t\t\t\t// @ts-ignore todo is tabindex=true correct case?\n\t\t\t\tif (!isNaN(value) && +value > 0) {\n\t\t\t\t\tw.a11y_positive_tabindex(attribute);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst role = attribute_map.get('role');\n\tconst role_static_value = /** @type {ARIARoleDefinitionKey} */ (get_static_text_value(role));\n\n\t// click-events-have-key-events\n\tif (handlers.has('click')) {\n\t\tconst is_non_presentation_role =\n\t\t\trole_static_value !== null && !is_presentation_role(role_static_value);\n\t\tif (\n\t\t\t!is_dynamic_element &&\n\t\t\t!is_hidden_from_screen_reader(node.name, attribute_map) &&\n\t\t\t(!role || is_non_presentation_role) &&\n\t\t\t!is_interactive &&\n\t\t\t!has_spread\n\t\t) {\n\t\t\tconst has_key_event =\n\t\t\t\thandlers.has('keydown') || handlers.has('keyup') || handlers.has('keypress');\n\t\t\tif (!has_key_event) {\n\t\t\t\tw.a11y_click_events_have_key_events(node);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst role_value = /** @type {ARIARoleDefinitionKey} */ (\n\t\trole ? role_static_value : get_implicit_role(node.name, attribute_map)\n\t);\n\n\t// no-noninteractive-tabindex\n\tif (!is_dynamic_element && !is_interactive && !is_interactive_roles(role_static_value)) {\n\t\tconst tab_index = attribute_map.get('tabindex');\n\t\tconst tab_index_value = get_static_text_value(tab_index);\n\t\tif (tab_index && (tab_index_value === null || Number(tab_index_value) >= 0)) {\n\t\t\tw.a11y_no_noninteractive_tabindex(node);\n\t\t}\n\t}\n\n\t// role-supports-aria-props\n\tif (typeof role_value === 'string' && roles_map.has(role_value)) {\n\t\tconst { props } = /** @type {ARIARoleDefinition} */ (roles_map.get(role_value));\n\t\tconst invalid_aria_props = aria.keys().filter((attribute) => !(attribute in props));\n\t\tconst is_implicit = role_value && role === undefined;\n\t\tfor (const attr of attributes) {\n\t\t\tif (invalid_aria_props.includes(/** @type {ARIAProperty} */ (attr.name))) {\n\t\t\t\tif (is_implicit) {\n\t\t\t\t\tw.a11y_role_supports_aria_props_implicit(attr, attr.name, role_value, node.name);\n\t\t\t\t} else {\n\t\t\t\t\tw.a11y_role_supports_aria_props(attr, attr.name, role_value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// no-noninteractive-element-interactions\n\tif (\n\t\t!has_spread &&\n\t\t!has_contenteditable_attr &&\n\t\t!is_hidden_from_screen_reader(node.name, attribute_map) &&\n\t\t!is_presentation_role(role_static_value) &&\n\t\t((!is_interactive && is_non_interactive_roles(role_static_value)) ||\n\t\t\t(is_non_interactive && !role))\n\t) {\n\t\tconst has_interactive_handlers = [...handlers].some((handler) =>\n\t\t\ta11y_recommended_interactive_handlers.includes(handler)\n\t\t);\n\t\tif (has_interactive_handlers) {\n\t\t\tw.a11y_no_noninteractive_element_interactions(node, node.name);\n\t\t}\n\t}\n\n\t// no-static-element-interactions\n\tif (\n\t\t!has_spread &&\n\t\t(!role || role_static_value !== null) &&\n\t\t!is_hidden_from_screen_reader(node.name, attribute_map) &&\n\t\t!is_presentation_role(role_static_value) &&\n\t\t!is_interactive &&\n\t\t!is_interactive_roles(role_static_value) &&\n\t\t!is_non_interactive &&\n\t\t!is_non_interactive_roles(role_static_value) &&\n\t\t!is_abstract_role(role_static_value)\n\t) {\n\t\tconst interactive_handlers = [...handlers].filter((handler) =>\n\t\t\ta11y_interactive_handlers.includes(handler)\n\t\t);\n\t\tif (interactive_handlers.length > 0) {\n\t\t\tw.a11y_no_static_element_interactions(node, node.name, list(interactive_handlers));\n\t\t}\n\t}\n\n\tif (!has_spread && handlers.has('mouseover') && !handlers.has('focus')) {\n\t\tw.a11y_mouse_events_have_key_events(node, 'mouseover', 'focus');\n\t}\n\n\tif (!has_spread && handlers.has('mouseout') && !handlers.has('blur')) {\n\t\tw.a11y_mouse_events_have_key_events(node, 'mouseout', 'blur');\n\t}\n\n\t// element-specific checks\n\tconst is_labelled =\n\t\tattribute_map.has('aria-label') ||\n\t\tattribute_map.has('aria-labelledby') ||\n\t\tattribute_map.has('title');\n\n\tswitch (node.name) {\n\t\tcase 'a':\n\t\tcase 'button': {\n\t\t\tconst is_hidden =\n\t\t\t\tget_static_value(attribute_map.get('aria-hidden')) === 'true' ||\n\t\t\t\tget_static_value(attribute_map.get('inert')) !== null;\n\n\t\t\tif (!has_spread && !is_hidden && !is_labelled && !has_content(node)) {\n\t\t\t\tw.a11y_consider_explicit_label(node);\n\t\t\t}\n\t\t\tif (node.name === 'button') {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst href = attribute_map.get('href') || attribute_map.get('xlink:href');\n\t\t\tif (href) {\n\t\t\t\tconst href_value = get_static_text_value(href);\n\t\t\t\tif (href_value !== null) {\n\t\t\t\t\tif (href_value === '' || href_value === '#' || regex_js_prefix.test(href_value)) {\n\t\t\t\t\t\tw.a11y_invalid_attribute(href, href_value, href.name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!has_spread) {\n\t\t\t\tconst id_attribute = get_static_value(attribute_map.get('id'));\n\t\t\t\tconst name_attribute = get_static_value(attribute_map.get('name'));\n\t\t\t\tconst aria_disabled_attribute = get_static_value(attribute_map.get('aria-disabled'));\n\t\t\t\tif (!id_attribute && !name_attribute && aria_disabled_attribute !== 'true') {\n\t\t\t\t\twarn_missing_attribute(node, ['href']);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'input': {\n\t\t\tconst type = attribute_map.get('type');\n\t\t\tconst type_value = get_static_text_value(type);\n\t\t\tif (type_value === 'image' && !has_spread) {\n\t\t\t\tconst required_attributes = ['alt', 'aria-label', 'aria-labelledby'];\n\t\t\t\tconst has_attribute = required_attributes.some((name) => attribute_map.has(name));\n\t\t\t\tif (!has_attribute) {\n\t\t\t\t\twarn_missing_attribute(node, required_attributes, 'input type=\"image\"');\n\t\t\t\t}\n\t\t\t}\n\t\t\t// autocomplete-valid\n\t\t\tconst autocomplete = attribute_map.get('autocomplete');\n\t\t\tif (type && autocomplete) {\n\t\t\t\tconst autocomplete_value = get_static_value(autocomplete);\n\t\t\t\tif (!is_valid_autocomplete(autocomplete_value)) {\n\t\t\t\t\tw.a11y_autocomplete_valid(\n\t\t\t\t\t\tautocomplete,\n\t\t\t\t\t\t/** @type {string} */ (autocomplete_value),\n\t\t\t\t\t\ttype_value ?? '...'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'img': {\n\t\t\tconst alt_attribute = get_static_text_value(attribute_map.get('alt'));\n\t\t\tconst aria_hidden = get_static_value(attribute_map.get('aria-hidden'));\n\t\t\tif (alt_attribute && !aria_hidden && !has_spread) {\n\t\t\t\tif (regex_redundant_img_alt.test(alt_attribute)) {\n\t\t\t\t\tw.a11y_img_redundant_alt(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'label': {\n\t\t\t/** @param {AST.TemplateNode} node */\n\t\t\tconst has_input_child = (node) => {\n\t\t\t\tlet has = false;\n\t\t\t\twalk(\n\t\t\t\t\tnode,\n\t\t\t\t\t{},\n\t\t\t\t\t{\n\t\t\t\t\t\t_(node, { next }) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tnode.type === 'SvelteElement' ||\n\t\t\t\t\t\t\t\tnode.type === 'SlotElement' ||\n\t\t\t\t\t\t\t\tnode.type === 'Component' ||\n\t\t\t\t\t\t\t\tnode.type === 'RenderTag' ||\n\t\t\t\t\t\t\t\t(node.type === 'RegularElement' &&\n\t\t\t\t\t\t\t\t\t(a11y_labelable.includes(node.name) || node.name === 'slot'))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\thas = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn has;\n\t\t\t};\n\t\t\tif (!has_spread && !attribute_map.has('for') && !has_input_child(node)) {\n\t\t\t\tw.a11y_label_has_associated_control(node);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'video': {\n\t\t\tconst aria_hidden_attribute = attribute_map.get('aria-hidden');\n\t\t\tconst aria_hidden_exist = aria_hidden_attribute && get_static_value(aria_hidden_attribute);\n\n\t\t\tif (attribute_map.has('muted') || aria_hidden_exist === 'true' || has_spread) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!attribute_map.has('src')) {\n\t\t\t\t// don't warn about missing captions if `<video>` has no `src` —\n\t\t\t\t// could e.g. be playing a MediaStream\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet has_caption = false;\n\t\t\tconst track = /** @type {AST.RegularElement | undefined} */ (\n\t\t\t\tnode.fragment.nodes.find((i) => i.type === 'RegularElement' && i.name === 'track')\n\t\t\t);\n\t\t\tif (track) {\n\t\t\t\thas_caption = track.attributes.some(\n\t\t\t\t\t(a) =>\n\t\t\t\t\t\ta.type === 'SpreadAttribute' ||\n\t\t\t\t\t\t(a.type === 'Attribute' && a.name === 'kind' && get_static_value(a) === 'captions')\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!has_caption) {\n\t\t\t\tw.a11y_media_has_caption(node);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'figcaption': {\n\t\t\tif (!is_parent(context.path, ['figure'])) {\n\t\t\t\tw.a11y_figcaption_parent(node);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'figure': {\n\t\t\tconst children = node.fragment.nodes.filter((node) => {\n\t\t\t\tif (node.type === 'Comment') return false;\n\t\t\t\tif (node.type === 'Text') return regex_not_whitespace.test(node.data);\n\t\t\t\treturn true;\n\t\t\t});\n\t\t\tconst index = children.findIndex(\n\t\t\t\t(child) => child.type === 'RegularElement' && child.name === 'figcaption'\n\t\t\t);\n\t\t\tif (index !== -1 && index !== 0 && index !== children.length - 1) {\n\t\t\t\tw.a11y_figcaption_index(children[index]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!has_spread && node.name !== 'a') {\n\t\tconst required_attributes = a11y_required_attributes[node.name];\n\t\tif (required_attributes) {\n\t\t\tconst has_attribute = required_attributes.some((name) => attribute_map.has(name));\n\t\t\tif (!has_attribute) {\n\t\t\t\twarn_missing_attribute(node, required_attributes);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (a11y_distracting_elements.includes(node.name)) {\n\t\t// no-distracting-elements\n\t\tw.a11y_distracting_elements(node, node.name);\n\t}\n\n\t// Check content\n\tif (\n\t\t!has_spread &&\n\t\t!is_labelled &&\n\t\t!has_contenteditable_binding &&\n\t\ta11y_required_content.includes(node.name) &&\n\t\t!has_content(node)\n\t) {\n\t\tw.a11y_missing_content(node, node.name);\n\t}\n}\n\n/**\n * @param {ARIARoleDefinitionKey} role\n */\nfunction is_presentation_role(role) {\n\treturn presentation_roles.includes(role);\n}\n\n/**\n * @param {string} tag_name\n * @param {Map<string, AST.Attribute>} attribute_map\n */\nfunction is_hidden_from_screen_reader(tag_name, attribute_map) {\n\tif (tag_name === 'input') {\n\t\tconst type = get_static_value(attribute_map.get('type'));\n\t\tif (type === 'hidden') {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst aria_hidden = attribute_map.get('aria-hidden');\n\tif (!aria_hidden) return false;\n\tconst aria_hidden_value = get_static_value(aria_hidden);\n\tif (aria_hidden_value === null) return true;\n\treturn aria_hidden_value === true || aria_hidden_value === 'true';\n}\n\n/**\n * @param {Map<string, AST.Attribute>} attribute_map\n */\nfunction has_disabled_attribute(attribute_map) {\n\tconst disabled_attr_value = get_static_value(attribute_map.get('disabled'));\n\tif (disabled_attr_value) {\n\t\treturn true;\n\t}\n\n\tconst aria_disabled_attr = attribute_map.get('aria-disabled');\n\tif (aria_disabled_attr) {\n\t\tconst aria_disabled_attr_value = get_static_value(aria_disabled_attr);\n\t\tif (aria_disabled_attr_value === 'true') {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @param {string} tag_name\n * @param {Map<string, AST.Attribute>} attribute_map\n * @returns {typeof ElementInteractivity[keyof typeof ElementInteractivity]}\n */\nfunction element_interactivity(tag_name, attribute_map) {\n\tif (\n\t\tinteractive_element_role_schemas.some((schema) => match_schema(schema, tag_name, attribute_map))\n\t) {\n\t\treturn ElementInteractivity.Interactive;\n\t}\n\tif (\n\t\ttag_name !== 'header' &&\n\t\tnon_interactive_element_role_schemas.some((schema) =>\n\t\t\tmatch_schema(schema, tag_name, attribute_map)\n\t\t)\n\t) {\n\t\treturn ElementInteractivity.NonInteractive;\n\t}\n\tif (\n\t\tinteractive_element_ax_object_schemas.some((schema) =>\n\t\t\tmatch_schema(schema, tag_name, attribute_map)\n\t\t)\n\t) {\n\t\treturn ElementInteractivity.Interactive;\n\t}\n\tif (\n\t\tnon_interactive_element_ax_object_schemas.some((schema) =>\n\t\t\tmatch_schema(schema, tag_name, attribute_map)\n\t\t)\n\t) {\n\t\treturn ElementInteractivity.NonInteractive;\n\t}\n\treturn ElementInteractivity.Static;\n}\n\n/**\n * @param {ARIARoleDefinitionKey} role\n * @param {string} tag_name\n * @param {Map<string, AST.Attribute>} attribute_map\n */\nfunction is_semantic_role_element(role, tag_name, attribute_map) {\n\tfor (const [schema, ax_object] of elementAXObjects.entries()) {\n\t\tif (\n\t\t\tschema.name === tag_name &&\n\t\t\t(!schema.attributes ||\n\t\t\t\tschema.attributes.every(\n\t\t\t\t\t/** @param {any} attr */\n\t\t\t\t\t(attr) =>\n\t\t\t\t\t\tattribute_map.has(attr.name) &&\n\t\t\t\t\t\tget_static_value(attribute_map.get(attr.name)) === attr.value\n\t\t\t\t))\n\t\t) {\n\t\t\tfor (const name of ax_object) {\n\t\t\t\tconst roles = AXObjectRoles.get(name);\n\t\t\t\tif (roles) {\n\t\t\t\t\tfor (const { name } of roles) {\n\t\t\t\t\t\tif (name === role) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @param {null | true | string} autocomplete\n */\nfunction is_valid_autocomplete(autocomplete) {\n\tif (autocomplete === true) {\n\t\treturn false;\n\t} else if (!autocomplete) {\n\t\treturn true; // dynamic value\n\t}\n\tconst tokens = autocomplete.trim().toLowerCase().split(regex_whitespaces);\n\tif (typeof tokens[0] === 'string' && tokens[0].startsWith('section-')) {\n\t\ttokens.shift();\n\t}\n\tif (address_type_tokens.includes(tokens[0])) {\n\t\ttokens.shift();\n\t}\n\tif (autofill_field_name_tokens.includes(tokens[0])) {\n\t\ttokens.shift();\n\t} else {\n\t\tif (contact_type_tokens.includes(tokens[0])) {\n\t\t\ttokens.shift();\n\t\t}\n\t\tif (autofill_contact_field_name_tokens.includes(tokens[0])) {\n\t\t\ttokens.shift();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (tokens[0] === 'webauthn') {\n\t\ttokens.shift();\n\t}\n\treturn tokens.length === 0;\n}\n\n/** @param {Map<string, AST.Attribute>} attribute_map */\nfunction input_implicit_role(attribute_map) {\n\tconst type_attribute = attribute_map.get('type');\n\tif (!type_attribute) return;\n\tconst type = get_static_text_value(type_attribute);\n\tif (!type) return;\n\tconst list_attribute_exists = attribute_map.has('list');\n\tif (list_attribute_exists && combobox_if_list.includes(type)) {\n\t\treturn 'combobox';\n\t}\n\treturn input_type_to_implicit_role.get(type);\n}\n\n/** @param {Map<string, AST.Attribute>} attribute_map */\nfunction menuitem_implicit_role(attribute_map) {\n\tconst type_attribute = attribute_map.get('type');\n\tif (!type_attribute) return;\n\tconst type = get_static_text_value(type_attribute);\n\tif (!type) return;\n\treturn menuitem_type_to_implicit_role.get(type);\n}\n\n/**\n * @param {string} name\n * @param {Map<string, AST.Attribute>} attribute_map\n */\nfunction get_implicit_role(name, attribute_map) {\n\tif (name === 'menuitem') {\n\t\treturn menuitem_implicit_role(attribute_map);\n\t} else if (name === 'input') {\n\t\treturn input_implicit_role(attribute_map);\n\t} else {\n\t\treturn a11y_implicit_semantics.get(name);\n\t}\n}\n\n/**\n * @param {ARIARoleDefinitionKey} role\n */\nfunction is_non_interactive_roles(role) {\n\treturn non_interactive_roles.includes(role);\n}\n\n/**\n * @param {ARIARoleDefinitionKey} role\n */\nfunction is_interactive_roles(role) {\n\treturn interactive_roles.includes(role);\n}\n\n/**\n * @param {ARIARoleDefinitionKey} role\n */\nfunction is_abstract_role(role) {\n\treturn abstract_roles.includes(role);\n}\n\n/**\n * @param {AST.Attribute | undefined} attribute\n */\nfunction get_static_text_value(attribute) {\n\tconst value = get_static_value(attribute);\n\tif (value === true) return null;\n\treturn value;\n}\n\n/**\n * @param {AST.Attribute | undefined} attribute\n */\nfunction get_static_value(attribute) {\n\tif (!attribute) return null;\n\tif (attribute.value === true) return true;\n\tif (is_text_attribute(attribute)) return attribute.value[0].data;\n\treturn null;\n}\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} element\n */\nfunction has_content(element) {\n\tfor (const node of element.fragment.nodes) {\n\t\tif (node.type === 'Text') {\n\t\t\tif (node.data.trim() === '') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (node.type === 'RegularElement' || node.type === 'SvelteElement') {\n\t\t\tif (node.attributes.some((a) => a.type === 'Attribute' && a.name === 'popover')) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tnode.name === 'img' &&\n\t\t\t\tnode.attributes.some((node) => node.type === 'Attribute' && node.name === 'alt')\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (node.name === 'selectedcontent') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!has_content(node)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// assume everything else has content — this will result in false positives\n\t\t// (e.g. an empty `{#if ...}{/if}`) but that's probably fine\n\t\treturn true;\n\t}\n}\n\n/**\n * @param {ARIARoleRelationConcept} schema\n * @param {string} tag_name\n * @param {Map<string, AST.Attribute>} attribute_map\n */\nfunction match_schema(schema, tag_name, attribute_map) {\n\tif (schema.name !== tag_name) return false;\n\tif (!schema.attributes) return true;\n\treturn schema.attributes.every((schema_attribute) => {\n\t\tconst attribute = attribute_map.get(schema_attribute.name);\n\t\tif (!attribute) return false;\n\t\tif (schema_attribute.value && schema_attribute.value !== get_static_text_value(attribute)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n}\n\n/**\n * @param {AST.SvelteNode[]} path\n * @param {string[]} elements\n */\nfunction is_parent(path, elements) {\n\tlet i = path.length;\n\twhile (i--) {\n\t\tconst parent = path[i];\n\t\tif (parent.type === 'SvelteElement') return true; // unknown, play it safe, so we don't warn\n\t\tif (parent.type === 'RegularElement') {\n\t\t\treturn elements.includes(parent.name);\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @param {AST.Attribute} attribute\n * @param {ARIAProperty} name\n * @param {ARIAPropertyDefinition} schema\n * @param {string | true | null} value\n */\nfunction validate_aria_attribute_value(attribute, name, schema, value) {\n\tconst type = schema.type;\n\n\tif (value === null) return;\n\tif (value === true) value = '';\n\n\tswitch (type) {\n\t\tcase 'id':\n\t\tcase 'string': {\n\t\t\tif (value === '') {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type(attribute, name, 'non-empty string');\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'number': {\n\t\t\tif (value === '' || isNaN(+value)) {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type(attribute, name, 'number');\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'boolean': {\n\t\t\tif (value !== 'true' && value !== 'false') {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type_boolean(attribute, name);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'idlist': {\n\t\t\tif (value === '') {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type_idlist(attribute, name);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'integer': {\n\t\t\tif (value === '' || !Number.isInteger(+value)) {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type_integer(attribute, name);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'token': {\n\t\t\tconst values = (schema.values ?? []).map((value) => value.toString());\n\t\t\tif (!values.includes(value.toLowerCase())) {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type_token(\n\t\t\t\t\tattribute,\n\t\t\t\t\tname,\n\t\t\t\t\tlist(values.map((v) => `\"${v}\"`))\n\t\t\t\t);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'tokenlist': {\n\t\t\tconst values = (schema.values ?? []).map((value) => value.toString());\n\t\t\tif (\n\t\t\t\tvalue\n\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t.split(regex_whitespaces)\n\t\t\t\t\t.some((value) => !values.includes(value))\n\t\t\t) {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type_tokenlist(\n\t\t\t\t\tattribute,\n\t\t\t\t\tname,\n\t\t\t\t\tlist(values.map((v) => `\"${v}\"`))\n\t\t\t\t);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'tristate': {\n\t\t\tif (value !== 'true' && value !== 'false' && value !== 'mixed') {\n\t\t\t\tw.a11y_incorrect_aria_attribute_type_tristate(attribute, name);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * @param {AST.RegularElement |AST.SvelteElement} node\n * @param {string[]} attributes\n * @param {string} name\n */\nfunction warn_missing_attribute(node, attributes, name = node.name) {\n\tconst article =\n\t\tregex_starts_with_vowel.test(attributes[0]) || attributes[0] === 'href' ? 'an' : 'a';\n\tconst sequence =\n\t\tattributes.length > 1\n\t\t\t? attributes.slice(0, -1).join(', ') + ` or ${attributes[attributes.length - 1]}`\n\t\t\t: attributes[0];\n\n\tw.a11y_missing_attribute(node, name, article, sequence);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/attribute.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../../types' */\nimport * as e from '../../../../errors.js';\nimport { is_text_attribute } from '../../../../utils/ast.js';\nimport * as w from '../../../../warnings.js';\nimport { is_custom_element_node } from '../../../nodes.js';\nimport { regex_only_whitespaces } from '../../../patterns.js';\n\n/**\n * @param {AST.Attribute} attribute\n */\nexport function validate_attribute_name(attribute) {\n\tif (\n\t\tattribute.name.includes(':') &&\n\t\t!attribute.name.startsWith('xmlns:') &&\n\t\t!attribute.name.startsWith('xlink:') &&\n\t\t!attribute.name.startsWith('xml:')\n\t) {\n\t\tw.attribute_illegal_colon(attribute);\n\t}\n}\n\n/**\n * @param {AST.Attribute} attribute\n * @param {AST.ElementLike} parent\n */\nexport function validate_attribute(attribute, parent) {\n\tif (\n\t\tArray.isArray(attribute.value) &&\n\t\tattribute.value.length === 1 &&\n\t\tattribute.value[0].type === 'ExpressionTag' &&\n\t\t(parent.type === 'Component' ||\n\t\t\tparent.type === 'SvelteComponent' ||\n\t\t\tparent.type === 'SvelteSelf' ||\n\t\t\t(parent.type === 'RegularElement' && is_custom_element_node(parent)))\n\t) {\n\t\tw.attribute_quoted(attribute);\n\t}\n\n\tif (attribute.value === true || !Array.isArray(attribute.value) || attribute.value.length === 1) {\n\t\treturn;\n\t}\n\n\tconst is_quoted = attribute.value.at(-1)?.end !== attribute.end;\n\n\tif (!is_quoted) {\n\t\te.attribute_unquoted_sequence(attribute);\n\t}\n}\n\n/**\n * @param {Context} context\n * @param {AST.Attribute} attribute\n * @param {boolean} is_component\n */\nexport function validate_slot_attribute(context, attribute, is_component = false) {\n\tconst parent = context.path.at(-2);\n\tlet owner = undefined;\n\n\tif (parent?.type === 'SnippetBlock') {\n\t\tif (!is_text_attribute(attribute)) {\n\t\t\te.slot_attribute_invalid(attribute);\n\t\t}\n\t\treturn;\n\t}\n\n\tlet i = context.path.length;\n\twhile (i--) {\n\t\tconst ancestor = context.path[i];\n\t\tif (\n\t\t\t!owner &&\n\t\t\t(ancestor.type === 'Component' ||\n\t\t\t\tancestor.type === 'SvelteComponent' ||\n\t\t\t\tancestor.type === 'SvelteSelf' ||\n\t\t\t\tancestor.type === 'SvelteElement' ||\n\t\t\t\t(ancestor.type === 'RegularElement' && is_custom_element_node(ancestor)))\n\t\t) {\n\t\t\towner = ancestor;\n\t\t}\n\t}\n\n\tif (owner) {\n\t\tif (\n\t\t\towner.type === 'Component' ||\n\t\t\towner.type === 'SvelteComponent' ||\n\t\t\towner.type === 'SvelteSelf'\n\t\t) {\n\t\t\tif (owner !== parent) {\n\t\t\t\tif (!is_component) {\n\t\t\t\t\te.slot_attribute_invalid_placement(attribute);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!is_text_attribute(attribute)) {\n\t\t\t\t\te.slot_attribute_invalid(attribute);\n\t\t\t\t}\n\n\t\t\t\tconst name = attribute.value[0].data;\n\n\t\t\t\tif (context.state.component_slots.has(name)) {\n\t\t\t\t\te.slot_attribute_duplicate(attribute, name, owner.name);\n\t\t\t\t}\n\n\t\t\t\tcontext.state.component_slots.add(name);\n\n\t\t\t\tif (name === 'default') {\n\t\t\t\t\tfor (const node of owner.fragment.nodes) {\n\t\t\t\t\t\tif (node.type === 'Text' && regex_only_whitespaces.test(node.data)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (node.type === 'RegularElement' || node.type === 'SvelteFragment') {\n\t\t\t\t\t\t\tif (node.attributes.some((a) => a.type === 'Attribute' && a.name === 'slot')) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.slot_default_duplicate(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (!is_component) {\n\t\te.slot_attribute_invalid_placement(attribute);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/component.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { AnalysisState, Context } from '../../types' */\nimport * as e from '../../../../errors.js';\nimport { get_attribute_expression, is_expression_attribute } from '../../../../utils/ast.js';\nimport { determine_slot } from '../../../../utils/slot.js';\nimport {\n\tvalidate_attribute,\n\tvalidate_attribute_name,\n\tvalidate_slot_attribute\n} from './attribute.js';\nimport { mark_subtree_dynamic } from './fragment.js';\nimport { is_resolved_snippet } from './snippets.js';\n\n/**\n * @param {AST.Component | AST.SvelteComponent | AST.SvelteSelf} node\n * @param {Context} context\n */\nexport function visit_component(node, context) {\n\tnode.metadata.path = [...context.path];\n\n\t// link this node to all the snippets that it could render, so that we can prune CSS correctly\n\tnode.metadata.snippets = new Set();\n\n\t// 'resolved' means we know which snippets this component might render. if it is `false`,\n\t// then `node.metadata.snippets` is populated with every locally defined snippet\n\t// once analysis is complete\n\tlet resolved = true;\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'SpreadAttribute' || attribute.type === 'BindDirective') {\n\t\t\tresolved = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (attribute.type !== 'Attribute' || !is_expression_attribute(attribute)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst expression = get_attribute_expression(attribute);\n\n\t\t// given an attribute like `foo={bar}`, if `bar` resolves to an import or a prop\n\t\t// then we know it doesn't reference a locally defined snippet. if it resolves\n\t\t// to a `{#snippet bar()}` then we know _which_ snippet it resolves to. in all\n\t\t// other cases, we can't know (without much more complex static analysis) which\n\t\t// snippets the component might render, so we treat the component as unresolved\n\t\tif (expression.type === 'Identifier') {\n\t\t\tconst binding = context.state.scope.get(expression.name);\n\n\t\t\tresolved &&= is_resolved_snippet(binding);\n\n\t\t\tif (binding?.initial?.type === 'SnippetBlock') {\n\t\t\t\tnode.metadata.snippets.add(binding.initial);\n\t\t\t}\n\t\t} else if (expression.type !== 'Literal') {\n\t\t\tresolved = false;\n\t\t}\n\t}\n\n\tif (resolved) {\n\t\tfor (const child of node.fragment.nodes) {\n\t\t\tif (child.type === 'SnippetBlock') {\n\t\t\t\tnode.metadata.snippets.add(child);\n\t\t\t}\n\t\t}\n\t}\n\n\tcontext.state.analysis.snippet_renderers.set(node, resolved);\n\n\tmark_subtree_dynamic(context.path);\n\n\tfor (const attribute of node.attributes) {\n\t\tif (\n\t\t\tattribute.type !== 'Attribute' &&\n\t\t\tattribute.type !== 'SpreadAttribute' &&\n\t\t\tattribute.type !== 'LetDirective' &&\n\t\t\tattribute.type !== 'OnDirective' &&\n\t\t\tattribute.type !== 'BindDirective' &&\n\t\t\tattribute.type !== 'AttachTag'\n\t\t) {\n\t\t\te.component_invalid_directive(attribute);\n\t\t}\n\n\t\tif (\n\t\t\tattribute.type === 'OnDirective' &&\n\t\t\t(attribute.modifiers.length > 1 || attribute.modifiers.some((m) => m !== 'once'))\n\t\t) {\n\t\t\te.event_handler_invalid_component_modifier(attribute);\n\t\t}\n\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tif (context.state.analysis.runes) {\n\t\t\t\tvalidate_attribute(attribute, node);\n\n\t\t\t\tif (is_expression_attribute(attribute)) {\n\t\t\t\t\tdisallow_unparenthesized_sequences(\n\t\t\t\t\t\tget_attribute_expression(attribute),\n\t\t\t\t\t\tcontext.state.analysis.source\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalidate_attribute_name(attribute);\n\n\t\t\tif (attribute.name === 'slot') {\n\t\t\t\tvalidate_slot_attribute(context, attribute, true);\n\t\t\t}\n\t\t}\n\n\t\tif (attribute.type === 'BindDirective' && attribute.name !== 'this') {\n\t\t\tcontext.state.analysis.uses_component_bindings = true;\n\t\t}\n\n\t\tif (attribute.type === 'AttachTag') {\n\t\t\tdisallow_unparenthesized_sequences(attribute.expression, context.state.analysis.source);\n\t\t}\n\t}\n\n\t// If the component has a slot attribute — `<Foo slot=\"whatever\" .../>` —\n\t// then `let:` directives apply to other attributes, instead of just the\n\t// top-level contents of the component. Yes, this is very weird.\n\tconst default_state = determine_slot(node)\n\t\t? context.state\n\t\t: { ...context.state, scope: node.metadata.scopes.default };\n\n\tfor (const attribute of node.attributes) {\n\t\tcontext.visit(attribute, attribute.type === 'LetDirective' ? default_state : context.state);\n\t}\n\n\t/** @type {AST.Comment[]} */\n\tlet comments = [];\n\n\t/** @type {Record<string, AST.Fragment['nodes']>} */\n\tconst nodes = { default: [] };\n\n\tfor (const child of node.fragment.nodes) {\n\t\tif (child.type === 'Comment') {\n\t\t\tcomments.push(child);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst slot_name = determine_slot(child) ?? 'default';\n\t\t(nodes[slot_name] ??= []).push(...comments, child);\n\n\t\tif (slot_name !== 'default') comments = [];\n\t}\n\n\t/** @type {Set<string>} */\n\tconst component_slots = new Set();\n\n\tfor (const slot_name in nodes) {\n\t\t/** @type {AnalysisState} */\n\t\tconst state = {\n\t\t\t...context.state,\n\t\t\tscope: node.metadata.scopes[slot_name],\n\t\t\tparent_element: null,\n\t\t\tcomponent_slots\n\t\t};\n\n\t\tcontext.visit({ ...node.fragment, nodes: nodes[slot_name] }, state);\n\t}\n}\n\n/**\n * @param {Expression} expression\n * @param {string} source\n */\nfunction disallow_unparenthesized_sequences(expression, source) {\n\tif (expression.type === 'SequenceExpression') {\n\t\tlet i = /** @type {number} */ (expression.start);\n\t\twhile (--i > 0) {\n\t\t\tconst char = source[i];\n\t\t\tif (char === '(') break; // parenthesized sequence expressions are ok\n\t\t\tif (char === '{') e.attribute_invalid_sequence_expression(expression);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/element.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Context } from '../../types' */\nimport { get_attribute_expression, is_expression_attribute } from '../../../../utils/ast.js';\nimport { regex_illegal_attribute_character } from '../../../patterns.js';\nimport * as e from '../../../../errors.js';\nimport * as w from '../../../../warnings.js';\nimport {\n\tvalidate_attribute,\n\tvalidate_attribute_name,\n\tvalidate_slot_attribute\n} from './attribute.js';\n\nconst EVENT_MODIFIERS = [\n\t'preventDefault',\n\t'stopPropagation',\n\t'stopImmediatePropagation',\n\t'capture',\n\t'once',\n\t'passive',\n\t'nonpassive',\n\t'self',\n\t'trusted'\n];\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} node\n * @param {Context} context\n */\nexport function validate_element(node, context) {\n\tlet has_animate_directive = false;\n\n\t/** @type {AST.TransitionDirective | null} */\n\tlet in_transition = null;\n\n\t/** @type {AST.TransitionDirective | null} */\n\tlet out_transition = null;\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tconst is_expression = is_expression_attribute(attribute);\n\n\t\t\tif (context.state.analysis.runes) {\n\t\t\t\tvalidate_attribute(attribute, node);\n\n\t\t\t\tif (is_expression) {\n\t\t\t\t\tconst expression = get_attribute_expression(attribute);\n\t\t\t\t\tif (expression.type === 'SequenceExpression') {\n\t\t\t\t\t\tlet i = /** @type {number} */ (expression.start);\n\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\tconst char = context.state.analysis.source[i];\n\t\t\t\t\t\t\tif (char === '(') break; // parenthesized sequence expressions are ok\n\t\t\t\t\t\t\tif (char === '{') e.attribute_invalid_sequence_expression(expression);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (regex_illegal_attribute_character.test(attribute.name)) {\n\t\t\t\te.attribute_invalid_name(attribute, attribute.name);\n\t\t\t}\n\n\t\t\tif (attribute.name.startsWith('on') && attribute.name.length > 2) {\n\t\t\t\tif (!is_expression) {\n\t\t\t\t\te.attribute_invalid_event_handler(attribute);\n\t\t\t\t}\n\n\t\t\t\tconst value = get_attribute_expression(attribute);\n\t\t\t\tif (\n\t\t\t\t\tvalue.type === 'Identifier' &&\n\t\t\t\t\tvalue.name === attribute.name &&\n\t\t\t\t\t!context.state.scope.get(value.name)\n\t\t\t\t) {\n\t\t\t\t\tw.attribute_global_event_reference(attribute, attribute.name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (attribute.name === 'slot') {\n\t\t\t\t/** @type {AST.RegularElement | AST.SvelteElement | AST.Component | AST.SvelteComponent | AST.SvelteSelf | undefined} */\n\t\t\t\tvalidate_slot_attribute(context, attribute);\n\t\t\t}\n\n\t\t\tif (attribute.name === 'is') {\n\t\t\t\tw.attribute_avoid_is(attribute);\n\t\t\t}\n\n\t\t\tconst correct_name = react_attributes.get(attribute.name);\n\t\t\tif (correct_name) {\n\t\t\t\tw.attribute_invalid_property_name(attribute, attribute.name, correct_name);\n\t\t\t}\n\n\t\t\tvalidate_attribute_name(attribute);\n\t\t} else if (attribute.type === 'AnimateDirective') {\n\t\t\tconst parent = context.path.at(-2);\n\t\t\tif (parent?.type !== 'EachBlock') {\n\t\t\t\te.animation_invalid_placement(attribute);\n\t\t\t} else if (!parent.key) {\n\t\t\t\te.animation_missing_key(attribute);\n\t\t\t} else if (\n\t\t\t\tparent.body.nodes.filter(\n\t\t\t\t\t(n) =>\n\t\t\t\t\t\tn.type !== 'Comment' &&\n\t\t\t\t\t\tn.type !== 'ConstTag' &&\n\t\t\t\t\t\t(n.type !== 'Text' || n.data.trim() !== '')\n\t\t\t\t).length > 1\n\t\t\t) {\n\t\t\t\te.animation_invalid_placement(attribute);\n\t\t\t}\n\n\t\t\tif (has_animate_directive) {\n\t\t\t\te.animation_duplicate(attribute);\n\t\t\t} else {\n\t\t\t\thas_animate_directive = true;\n\t\t\t}\n\t\t} else if (attribute.type === 'TransitionDirective') {\n\t\t\tconst existing = /** @type {AST.TransitionDirective | null} */ (\n\t\t\t\t(attribute.intro && in_transition) || (attribute.outro && out_transition)\n\t\t\t);\n\n\t\t\tif (existing) {\n\t\t\t\tconst a = existing.intro ? (existing.outro ? 'transition' : 'in') : 'out';\n\t\t\t\tconst b = attribute.intro ? (attribute.outro ? 'transition' : 'in') : 'out';\n\n\t\t\t\tif (a === b) {\n\t\t\t\t\te.transition_duplicate(attribute, a);\n\t\t\t\t} else {\n\t\t\t\t\te.transition_conflict(attribute, a, b);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (attribute.intro) in_transition = attribute;\n\t\t\tif (attribute.outro) out_transition = attribute;\n\t\t} else if (attribute.type === 'OnDirective') {\n\t\t\tlet has_passive_modifier = false;\n\t\t\tlet conflicting_passive_modifier = '';\n\t\t\tfor (const modifier of attribute.modifiers) {\n\t\t\t\tif (!EVENT_MODIFIERS.includes(modifier)) {\n\t\t\t\t\tconst list = `${EVENT_MODIFIERS.slice(0, -1).join(', ')} or ${EVENT_MODIFIERS.at(-1)}`;\n\t\t\t\t\te.event_handler_invalid_modifier(attribute, list);\n\t\t\t\t}\n\t\t\t\tif (modifier === 'passive') {\n\t\t\t\t\thas_passive_modifier = true;\n\t\t\t\t} else if (modifier === 'nonpassive' || modifier === 'preventDefault') {\n\t\t\t\t\tconflicting_passive_modifier = modifier;\n\t\t\t\t}\n\t\t\t\tif (has_passive_modifier && conflicting_passive_modifier) {\n\t\t\t\t\te.event_handler_invalid_modifier_combination(\n\t\t\t\t\t\tattribute,\n\t\t\t\t\t\t'passive',\n\t\t\t\t\t\tconflicting_passive_modifier\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst react_attributes = new Map([\n\t['className', 'class'],\n\t['htmlFor', 'for']\n]);\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/fragment.js",
    "content": "/** @import { AST } from '#compiler' */\n\n/**\n * @param {AST.SvelteNode[]} path\n */\nexport function mark_subtree_dynamic(path) {\n\tlet i = path.length;\n\twhile (i--) {\n\t\tconst node = path[i];\n\t\tif (node.type === 'Fragment') {\n\t\t\tif (node.metadata.dynamic) return;\n\t\t\tnode.metadata.dynamic = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/function.js",
    "content": "/** @import { ArrowFunctionExpression, FunctionDeclaration, FunctionExpression } from 'estree' */\n/** @import { Context } from '../../types' */\n\n/**\n * @param {ArrowFunctionExpression | FunctionExpression | FunctionDeclaration} node\n * @param {Context} context\n */\nexport function visit_function(node, context) {\n\tif (context.state.expression) {\n\t\tfor (const [name] of context.state.scope.references) {\n\t\t\tconst binding = context.state.scope.get(name);\n\n\t\t\tif (binding && binding.scope !== context.state.scope) {\n\t\t\t\tcontext.state.expression.references.add(binding);\n\t\t\t}\n\t\t}\n\t}\n\n\tcontext.next({\n\t\t...context.state,\n\t\tfunction_depth: context.state.function_depth + 1,\n\t\texpression: null\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/snippets.js",
    "content": "/** @import { Binding } from '#compiler' */\n\n/**\n * Returns `true` if a binding unambiguously resolves to a specific\n * snippet declaration, or is external to the current component\n * @param {Binding | null} binding\n */\nexport function is_resolved_snippet(binding) {\n\treturn (\n\t\t!binding ||\n\t\tbinding.declaration_kind === 'import' ||\n\t\tbinding.kind === 'prop' ||\n\t\tbinding.kind === 'rest_prop' ||\n\t\tbinding.kind === 'bindable_prop' ||\n\t\tbinding?.initial?.type === 'SnippetBlock'\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/special-element.js",
    "content": "/** @import { AST } from '#compiler' */\nimport * as e from '../../../../errors.js';\n\n/**\n * @param {AST.SvelteBody | AST.SvelteDocument | AST.SvelteOptionsRaw | AST.SvelteWindow} node\n */\nexport function disallow_children(node) {\n\tconst { nodes } = node.fragment;\n\n\tif (nodes.length > 0) {\n\t\tconst first = nodes[0];\n\t\tconst last = nodes[nodes.length - 1];\n\n\t\te.svelte_meta_invalid_content({ start: first.start, end: last.end }, node.name);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/2-analyze/visitors/shared/utils.js",
    "content": "/** @import { AssignmentExpression, Expression, Literal, Node, Pattern, Super, UpdateExpression, VariableDeclarator } from 'estree' */\n/** @import { AST, Binding } from '#compiler' */\n/** @import { AnalysisState, Context } from '../../types' */\n/** @import { Scope } from '../../../scope' */\n/** @import { NodeLike } from '../../../../errors.js' */\nimport * as e from '../../../../errors.js';\nimport { extract_identifiers, get_parent } from '../../../../utils/ast.js';\nimport * as w from '../../../../warnings.js';\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\nimport { get_name } from '../../../nodes.js';\n\n/**\n * @param {AssignmentExpression | UpdateExpression | AST.BindDirective} node\n * @param {Pattern | Expression} argument\n * @param {Context} context\n */\nexport function validate_assignment(node, argument, context) {\n\tvalidate_no_const_assignment(node, argument, context.state.scope, node.type === 'BindDirective');\n\n\tif (argument.type === 'Identifier') {\n\t\tconst binding = context.state.scope.get(argument.name);\n\n\t\tif (context.state.analysis.runes) {\n\t\t\tif (\n\t\t\t\tcontext.state.analysis.props_id != null &&\n\t\t\t\tbinding?.node === context.state.analysis.props_id\n\t\t\t) {\n\t\t\t\te.constant_assignment(node, '$props.id()');\n\t\t\t}\n\n\t\t\tif (binding?.kind === 'each') {\n\t\t\t\te.each_item_invalid_assignment(node);\n\t\t\t}\n\t\t}\n\n\t\tif (binding?.kind === 'snippet') {\n\t\t\te.snippet_parameter_assignment(node);\n\t\t}\n\t}\n\n\tif (argument.type === 'MemberExpression' && argument.object.type === 'ThisExpression') {\n\t\tconst name =\n\t\t\targument.computed && argument.property.type !== 'Literal'\n\t\t\t\t? null\n\t\t\t\t: get_name(argument.property);\n\n\t\tconst field = name !== null && context.state.state_fields?.get(name);\n\n\t\t// check we're not assigning to a state field before its declaration in the constructor\n\t\tif (field && field.node.type === 'AssignmentExpression' && node !== field.node) {\n\t\t\tlet i = context.path.length;\n\t\t\twhile (i--) {\n\t\t\t\tconst parent = context.path[i];\n\n\t\t\t\tif (\n\t\t\t\t\tparent.type === 'FunctionDeclaration' ||\n\t\t\t\t\tparent.type === 'FunctionExpression' ||\n\t\t\t\t\tparent.type === 'ArrowFunctionExpression'\n\t\t\t\t) {\n\t\t\t\t\tconst grandparent = get_parent(context.path, i - 1);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tgrandparent.type === 'MethodDefinition' &&\n\t\t\t\t\t\tgrandparent.kind === 'constructor' &&\n\t\t\t\t\t\t/** @type {number} */ (node.start) < /** @type {number} */ (field.node.start)\n\t\t\t\t\t) {\n\t\t\t\t\t\te.state_field_invalid_assignment(node);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {NodeLike} node\n * @param {Pattern | Expression} argument\n * @param {Scope} scope\n * @param {boolean} is_binding\n */\nexport function validate_no_const_assignment(node, argument, scope, is_binding) {\n\tif (argument.type === 'ArrayPattern') {\n\t\tfor (const element of argument.elements) {\n\t\t\tif (element) {\n\t\t\t\tvalidate_no_const_assignment(node, element, scope, is_binding);\n\t\t\t}\n\t\t}\n\t} else if (argument.type === 'ObjectPattern') {\n\t\tfor (const element of argument.properties) {\n\t\t\tif (element.type === 'Property') {\n\t\t\t\tvalidate_no_const_assignment(node, element.value, scope, is_binding);\n\t\t\t}\n\t\t}\n\t} else if (argument.type === 'Identifier') {\n\t\tconst binding = scope.get(argument.name);\n\t\tif (\n\t\t\tbinding?.declaration_kind === 'import' ||\n\t\t\t(binding?.declaration_kind === 'const' && binding.kind !== 'each')\n\t\t) {\n\t\t\t// e.invalid_const_assignment(\n\t\t\t// \tnode,\n\t\t\t// \tis_binding,\n\t\t\t// \t// This takes advantage of the fact that we don't assign initial for let directives and then/catch variables.\n\t\t\t// \t// If we start doing that, we need another property on the binding to differentiate, or give up on the more precise error message.\n\t\t\t// \tbinding.kind !== 'state' &&\n\t\t\t// \t\tbinding.kind !== 'raw_state' &&\n\t\t\t// \t\t(binding.kind !== 'normal' || !binding.initial)\n\t\t\t// );\n\n\t\t\t// TODO have a more specific error message for assignments to things like `{:then foo}`\n\t\t\tconst thing = binding.declaration_kind === 'import' ? 'import' : 'constant';\n\n\t\t\tif (is_binding) {\n\t\t\t\te.constant_binding(node, thing);\n\t\t\t} else {\n\t\t\t\te.constant_assignment(node, thing);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Validates that the opening of a control flow block is `{` immediately followed by the expected character.\n * In legacy mode whitespace is allowed inbetween. TODO remove once legacy mode is gone and move this into parser instead.\n * @param {{start: number; end: number}} node\n * @param {AnalysisState} state\n * @param {string} expected\n */\nexport function validate_opening_tag(node, state, expected) {\n\tif (state.analysis.source[node.start + 1] !== expected) {\n\t\t// avoid a sea of red and only mark the first few characters\n\t\te.block_unexpected_character({ start: node.start, end: node.start + 5 }, expected);\n\t}\n}\n\n/**\n * @param {AST.Fragment | null | undefined} node\n * @param {Context} context\n */\nexport function validate_block_not_empty(node, context) {\n\tif (!node) return;\n\t// Assumption: If the block has zero elements, someone's in the middle of typing it out,\n\t// so don't warn in that case because it would be distracting.\n\tif (node.nodes.length === 1 && node.nodes[0].type === 'Text' && !node.nodes[0].raw.trim()) {\n\t\tw.block_empty(node.nodes[0]);\n\t}\n}\n\n/**\n * @param {VariableDeclarator} node\n * @param {AnalysisState} state\n */\nexport function ensure_no_module_import_conflict(node, state) {\n\tconst ids = extract_identifiers(node.id);\n\tfor (const id of ids) {\n\t\tif (\n\t\t\tstate.ast_type === 'instance' &&\n\t\t\tstate.scope === state.analysis.instance.scope &&\n\t\t\tstate.analysis.module.scope.get(id.name)?.declaration_kind === 'import'\n\t\t) {\n\t\t\te.declaration_duplicate_module_import(node.id);\n\t\t}\n\t}\n}\n\n/**\n * A 'safe' identifier means that the `foo` in `foo.bar` or `foo()` will not\n * call functions that require component context to exist\n * @param {Expression | Super} expression\n * @param {Scope} scope\n */\nexport function is_safe_identifier(expression, scope) {\n\tlet node = expression;\n\twhile (node.type === 'MemberExpression') node = node.object;\n\n\tif (node.type !== 'Identifier') return false;\n\n\tconst binding = scope.get(node.name);\n\tif (!binding) return true;\n\n\tif (binding.kind === 'store_sub') {\n\t\treturn is_safe_identifier({ name: node.name.slice(1), type: 'Identifier' }, scope);\n\t}\n\n\treturn (\n\t\tbinding.declaration_kind !== 'import' &&\n\t\tbinding.kind !== 'prop' &&\n\t\tbinding.kind !== 'bindable_prop' &&\n\t\tbinding.kind !== 'rest_prop'\n\t);\n}\n\n/**\n * @param {Expression | Literal | Super} node\n * @param {Context} context\n * @returns {boolean}\n */\nexport function is_pure(node, context) {\n\tif (node.type === 'Literal') {\n\t\treturn true;\n\t}\n\n\tif (node.type === 'CallExpression') {\n\t\tif (!is_pure(node.callee, context)) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let arg of node.arguments) {\n\t\t\tif (!is_pure(arg.type === 'SpreadElement' ? arg.argument : arg, context)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (node.type !== 'Identifier' && node.type !== 'MemberExpression') {\n\t\treturn false;\n\t}\n\n\tif (get_rune(b.call(node), context.state.scope) === '$effect.tracking') {\n\t\treturn false;\n\t}\n\n\t/** @type {Expression | Super | null} */\n\tlet left = node;\n\twhile (left.type === 'MemberExpression') {\n\t\tleft = left.object;\n\t}\n\n\tif (!left) return false;\n\n\tif (left.type === 'Identifier') {\n\t\tconst binding = context.state.scope.get(left.name);\n\t\tif (binding === null) return true; // globals are assumed to be safe\n\t} else if (is_pure(left, context)) {\n\t\treturn true;\n\t}\n\n\t// TODO add more cases (safe Svelte imports, etc)\n\treturn false;\n}\n\n/**\n * Checks if the name is valid, which it is when it's not starting with (or is) a dollar sign or if it's a function parameter.\n * The second argument is the depth of the scope, which is there for backwards compatibility reasons: In Svelte 4, you\n * were allowed to define `$`-prefixed variables anywhere below the top level of components. Once legacy mode is gone, this\n * argument can be removed / the call sites adjusted accordingly.\n * @param {Binding | null} binding\n * @param {number | undefined} [function_depth]\n */\nexport function validate_identifier_name(binding, function_depth) {\n\tif (!binding) return;\n\n\tconst declaration_kind = binding.declaration_kind;\n\n\tif (\n\t\tdeclaration_kind !== 'synthetic' &&\n\t\tdeclaration_kind !== 'param' &&\n\t\tdeclaration_kind !== 'rest_param' &&\n\t\t(!function_depth || function_depth <= 1)\n\t) {\n\t\tconst node = binding.node;\n\n\t\tif (node.name === '$') {\n\t\t\te.dollar_binding_invalid(node);\n\t\t} else if (\n\t\t\tnode.name.startsWith('$') &&\n\t\t\t// import type { $Type } from \"\" - these are normally already filtered out,\n\t\t\t// but for the migration they aren't, and throwing here is preventing the migration to complete\n\t\t\t// TODO -> once migration script is gone we can remove this check\n\t\t\t!(\n\t\t\t\tbinding.initial?.type === 'ImportDeclaration' &&\n\t\t\t\t/** @type {any} */ (binding.initial).importKind === 'type'\n\t\t\t)\n\t\t) {\n\t\t\te.dollar_prefix_invalid(node);\n\t\t}\n\t}\n}\n\n/**\n * Checks that the exported name is not a derived or reassigned state variable.\n * @param {Node} node\n * @param {Scope} scope\n * @param {string} name\n */\nexport function validate_export(node, scope, name) {\n\tconst binding = scope.get(name);\n\tif (!binding) return;\n\n\tif (binding.kind === 'derived') {\n\t\te.derived_invalid_export(node);\n\t}\n\n\tif ((binding.kind === 'state' || binding.kind === 'raw_state') && binding.reassigned) {\n\t\te.state_invalid_export(node);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/transform-client.js",
    "content": "/** @import * as ESTree from 'estree' */\n/** @import { AST, ValidatedCompileOptions, ValidatedModuleCompileOptions } from '#compiler' */\n/** @import { ComponentAnalysis, Analysis } from '../../types' */\n/** @import { Visitors, ComponentClientTransformState, ClientTransformState } from './types' */\nimport { walk } from 'zimmerframe';\nimport * as b from '#compiler/builders';\nimport { build_getter, is_state_source } from './utils.js';\nimport { render_stylesheet } from '../css/index.js';\nimport { dev, filename } from '../../../state.js';\nimport { AnimateDirective } from './visitors/AnimateDirective.js';\nimport { ArrowFunctionExpression } from './visitors/ArrowFunctionExpression.js';\nimport { AssignmentExpression } from './visitors/AssignmentExpression.js';\nimport { Attribute } from './visitors/Attribute.js';\nimport { AwaitBlock } from './visitors/AwaitBlock.js';\nimport { AwaitExpression } from './visitors/AwaitExpression.js';\nimport { BinaryExpression } from './visitors/BinaryExpression.js';\nimport { BindDirective } from './visitors/BindDirective.js';\nimport { BlockStatement } from './visitors/BlockStatement.js';\nimport { BreakStatement } from './visitors/BreakStatement.js';\nimport { CallExpression } from './visitors/CallExpression.js';\nimport { ClassBody } from './visitors/ClassBody.js';\nimport { Comment } from './visitors/Comment.js';\nimport { Component } from './visitors/Component.js';\nimport { ConstTag } from './visitors/ConstTag.js';\nimport { DebugTag } from './visitors/DebugTag.js';\nimport { EachBlock } from './visitors/EachBlock.js';\nimport { ExportNamedDeclaration } from './visitors/ExportNamedDeclaration.js';\nimport { ExpressionStatement } from './visitors/ExpressionStatement.js';\nimport { ForOfStatement } from './visitors/ForOfStatement.js';\nimport { Fragment } from './visitors/Fragment.js';\nimport { FunctionDeclaration } from './visitors/FunctionDeclaration.js';\nimport { FunctionExpression } from './visitors/FunctionExpression.js';\nimport { HtmlTag } from './visitors/HtmlTag.js';\nimport { Identifier } from './visitors/Identifier.js';\nimport { IfBlock } from './visitors/IfBlock.js';\nimport { KeyBlock } from './visitors/KeyBlock.js';\nimport { LabeledStatement } from './visitors/LabeledStatement.js';\nimport { LetDirective } from './visitors/LetDirective.js';\nimport { MemberExpression } from './visitors/MemberExpression.js';\nimport { OnDirective } from './visitors/OnDirective.js';\nimport { Program } from './visitors/Program.js';\nimport { RegularElement } from './visitors/RegularElement.js';\nimport { RenderTag } from './visitors/RenderTag.js';\nimport { SlotElement } from './visitors/SlotElement.js';\nimport { SnippetBlock } from './visitors/SnippetBlock.js';\nimport { SpreadAttribute } from './visitors/SpreadAttribute.js';\nimport { SvelteBody } from './visitors/SvelteBody.js';\nimport { SvelteComponent } from './visitors/SvelteComponent.js';\nimport { SvelteDocument } from './visitors/SvelteDocument.js';\nimport { SvelteElement } from './visitors/SvelteElement.js';\nimport { SvelteFragment } from './visitors/SvelteFragment.js';\nimport { SvelteBoundary } from './visitors/SvelteBoundary.js';\nimport { SvelteHead } from './visitors/SvelteHead.js';\nimport { SvelteSelf } from './visitors/SvelteSelf.js';\nimport { SvelteWindow } from './visitors/SvelteWindow.js';\nimport { TitleElement } from './visitors/TitleElement.js';\nimport { TransitionDirective } from './visitors/TransitionDirective.js';\nimport { UpdateExpression } from './visitors/UpdateExpression.js';\nimport { UseDirective } from './visitors/UseDirective.js';\nimport { AttachTag } from './visitors/AttachTag.js';\nimport { VariableDeclaration } from './visitors/VariableDeclaration.js';\n\n/** @type {Visitors} */\nconst visitors = {\n\t_: function set_scope(node, { next, state }) {\n\t\tconst scope = state.scopes.get(node);\n\n\t\tif (scope && scope !== state.scope) {\n\t\t\tconst transform = { ...state.transform };\n\n\t\t\tfor (const [name, binding] of scope.declarations) {\n\t\t\t\tif (\n\t\t\t\t\tbinding.kind === 'normal' ||\n\t\t\t\t\t// Reads of `$state(...)` declarations are not\n\t\t\t\t\t// transformed if they are never reassigned\n\t\t\t\t\t(binding.kind === 'state' && !is_state_source(binding, state.analysis))\n\t\t\t\t) {\n\t\t\t\t\tdelete transform[name];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext({ ...state, transform, scope });\n\t\t} else {\n\t\t\tnext();\n\t\t}\n\t},\n\tAnimateDirective,\n\tArrowFunctionExpression,\n\tAssignmentExpression,\n\tAttribute,\n\tAwaitBlock,\n\tAwaitExpression,\n\tBinaryExpression,\n\tBindDirective,\n\tBlockStatement,\n\tBreakStatement,\n\tCallExpression,\n\tClassBody,\n\tComment,\n\tComponent,\n\tConstTag,\n\tDebugTag,\n\tEachBlock,\n\tExportNamedDeclaration,\n\tExpressionStatement,\n\tForOfStatement,\n\tFragment,\n\tFunctionDeclaration,\n\tFunctionExpression,\n\tHtmlTag,\n\tIdentifier,\n\tIfBlock,\n\tKeyBlock,\n\tLabeledStatement,\n\tLetDirective,\n\tMemberExpression,\n\tOnDirective,\n\tProgram,\n\tRegularElement,\n\tRenderTag,\n\tSlotElement,\n\tSnippetBlock,\n\tSpreadAttribute,\n\tSvelteBody,\n\tSvelteComponent,\n\tSvelteDocument,\n\tSvelteElement,\n\tSvelteFragment,\n\tSvelteBoundary,\n\tSvelteHead,\n\tSvelteSelf,\n\tSvelteWindow,\n\tTitleElement,\n\tTransitionDirective,\n\tUpdateExpression,\n\tUseDirective,\n\tAttachTag,\n\tVariableDeclaration\n};\n\n/**\n * @param {ComponentAnalysis} analysis\n * @param {ValidatedCompileOptions} options\n * @returns {ESTree.Program}\n */\nexport function client_component(analysis, options) {\n\t/** @type {ComponentClientTransformState} */\n\tconst state = {\n\t\tanalysis,\n\t\toptions,\n\t\tscope: analysis.module.scope,\n\t\tscopes: analysis.module.scopes,\n\t\tis_instance: false,\n\t\thoisted: [b.import_all('$', 'svelte/internal/client'), ...analysis.instance_body.hoisted],\n\t\tnode: /** @type {any} */ (null), // populated by the root node\n\t\tlegacy_reactive_imports: [],\n\t\tlegacy_reactive_statements: new Map(),\n\t\tmetadata: {\n\t\t\tnamespace: options.namespace,\n\t\t\tbound_contenteditable: false\n\t\t},\n\t\tevents: new Set(),\n\t\tpreserve_whitespace: options.preserveWhitespace,\n\t\tstate_fields: new Map(),\n\t\ttransform: {},\n\t\tin_constructor: false,\n\t\tinstance_level_snippets: [],\n\t\tmodule_level_snippets: [],\n\t\tis_standalone: false,\n\n\t\t// these are set inside the `Fragment` visitor, and cannot be used until then\n\t\tinit: /** @type {any} */ (null),\n\t\tconsts: /** @type {any} */ (null),\n\t\tsnippets: /** @type {any} */ (null),\n\t\tlet_directives: /** @type {any} */ (null),\n\t\tupdate: /** @type {any} */ (null),\n\t\tafter_update: /** @type {any} */ (null),\n\t\ttemplate: /** @type {any} */ (null),\n\t\tmemoizer: /** @type {any} */ (null)\n\t};\n\n\tconst module = /** @type {ESTree.Program} */ (\n\t\twalk(/** @type {AST.SvelteNode} */ (analysis.module.ast), state, visitors)\n\t);\n\n\tconst instance_state = {\n\t\t...state,\n\t\ttransform: { ...state.transform },\n\t\tscope: analysis.instance.scope,\n\t\tscopes: analysis.instance.scopes,\n\t\tis_instance: true\n\t};\n\n\tconst instance = /** @type {ESTree.Program} */ (\n\t\twalk(/** @type {AST.SvelteNode} */ (analysis.instance.ast), instance_state, visitors)\n\t);\n\n\tconst template = /** @type {ESTree.Program} */ (\n\t\twalk(\n\t\t\t/** @type {AST.SvelteNode} */ (analysis.template.ast),\n\t\t\t{\n\t\t\t\t...state,\n\t\t\t\ttransform: instance_state.transform,\n\t\t\t\tscope: analysis.instance.scope,\n\t\t\t\tscopes: analysis.template.scopes\n\t\t\t},\n\t\t\tvisitors\n\t\t)\n\t);\n\n\tmodule.body.unshift(...state.legacy_reactive_imports);\n\n\t/** @type {ESTree.Statement[]} */\n\tconst store_setup = [];\n\t/** @type {ESTree.Statement} */\n\tlet store_init = b.empty;\n\t/** @type {ESTree.VariableDeclaration[]} */\n\tconst legacy_reactive_declarations = [];\n\n\tlet needs_store_cleanup = false;\n\n\tfor (const [name, binding] of analysis.instance.scope.declarations) {\n\t\tif (binding.kind === 'legacy_reactive') {\n\t\t\tlegacy_reactive_declarations.push(\n\t\t\t\tb.const(\n\t\t\t\t\tname,\n\t\t\t\t\tb.call('$.mutable_source', undefined, analysis.immutable ? b.true : undefined)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tif (binding.kind === 'store_sub') {\n\t\t\tif (store_setup.length === 0) {\n\t\t\t\tneeds_store_cleanup = true;\n\t\t\t\tstore_init = b.const(\n\t\t\t\t\tb.array_pattern([b.id('$$stores'), b.id('$$cleanup')]),\n\t\t\t\t\tb.call('$.setup_stores')\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// We're creating an arrow function that gets the store value which minifies better for two or more references\n\t\t\tconst store_reference = build_getter(b.id(name.slice(1)), instance_state);\n\t\t\tconst store_get = b.call('$.store_get', store_reference, b.literal(name), b.id('$$stores'));\n\t\t\tstore_setup.push(\n\t\t\t\tb.const(\n\t\t\t\t\tbinding.node,\n\t\t\t\t\tdev\n\t\t\t\t\t\t? b.thunk(\n\t\t\t\t\t\t\t\tb.sequence([\n\t\t\t\t\t\t\t\t\tb.call('$.validate_store', store_reference, b.literal(name.slice(1))),\n\t\t\t\t\t\t\t\t\tstore_get\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: b.thunk(store_get)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const [node] of analysis.reactive_statements) {\n\t\tconst statement = [...state.legacy_reactive_statements].find(([n]) => n === node);\n\t\tif (statement === undefined) {\n\t\t\tthrow new Error('Could not find reactive statement');\n\t\t}\n\t\tinstance.body.push(statement[1]);\n\t}\n\n\tif (analysis.reactive_statements.size > 0) {\n\t\tinstance.body.push(b.stmt(b.call('$.legacy_pre_effect_reset')));\n\t}\n\n\t/**\n\t * Used to store the group nodes\n\t * @type {ESTree.VariableDeclaration[]}\n\t */\n\tconst group_binding_declarations = [];\n\tfor (const group of analysis.binding_groups.values()) {\n\t\tgroup_binding_declarations.push(b.const(group.name, b.array([])));\n\t}\n\n\t/** @type {Array<ESTree.Property | ESTree.SpreadElement>} */\n\tconst component_returned_object = analysis.exports.flatMap(({ name, alias }) => {\n\t\tconst binding = instance_state.scope.get(name);\n\t\tconst expression = build_getter(b.id(name), instance_state);\n\t\tconst getter = b.get(alias ?? name, [b.return(expression)]);\n\n\t\tif (expression.type === 'Identifier') {\n\t\t\tif (binding?.declaration_kind === 'let' || binding?.declaration_kind === 'var') {\n\t\t\t\treturn [\n\t\t\t\t\tgetter,\n\t\t\t\t\tb.set(alias ?? name, [b.stmt(b.assignment('=', expression, b.id('$$value')))])\n\t\t\t\t];\n\t\t\t} else if (!dev) {\n\t\t\t\treturn b.init(alias ?? name, expression);\n\t\t\t}\n\t\t}\n\n\t\tif (binding?.kind === 'prop' || binding?.kind === 'bindable_prop') {\n\t\t\treturn [getter, b.set(alias ?? name, [b.stmt(b.call(name, b.id('$$value')))])];\n\t\t}\n\n\t\tif (binding?.kind === 'state' || binding?.kind === 'raw_state') {\n\t\t\tconst value = binding.kind === 'state' ? b.call('$.proxy', b.id('$$value')) : b.id('$$value');\n\t\t\treturn [getter, b.set(alias ?? name, [b.stmt(b.call('$.set', b.id(name), value))])];\n\t\t}\n\n\t\treturn getter;\n\t});\n\n\tconst properties = [...analysis.instance.scope.declarations].filter(\n\t\t([name, binding]) =>\n\t\t\t(binding.kind === 'prop' || binding.kind === 'bindable_prop') && !name.startsWith('$$')\n\t);\n\n\tif (analysis.accessors) {\n\t\tfor (const [name, binding] of properties) {\n\t\t\tconst key = binding.prop_alias ?? name;\n\n\t\t\tconst getter = b.get(key, [b.return(b.call(b.id(name)))]);\n\n\t\t\tconst setter = b.set(key, [\n\t\t\t\tb.stmt(b.call(b.id(name), b.id('$$value'))),\n\t\t\t\tb.stmt(b.call('$.flush'))\n\t\t\t]);\n\n\t\t\tif (analysis.runes && binding.initial) {\n\t\t\t\t// turn `set foo($$value)` into `set foo($$value = expression)`\n\t\t\t\tsetter.value.params[0] = {\n\t\t\t\t\ttype: 'AssignmentPattern',\n\t\t\t\t\tleft: b.id('$$value'),\n\t\t\t\t\tright: /** @type {ESTree.Expression} */ (binding.initial)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcomponent_returned_object.push(getter, setter);\n\t\t}\n\t}\n\n\tif (options.compatibility.componentApi === 4) {\n\t\tcomponent_returned_object.push(\n\t\t\tb.init('$set', b.id('$.update_legacy_props')),\n\t\t\tb.init(\n\t\t\t\t'$on',\n\t\t\t\tb.arrow(\n\t\t\t\t\t[b.id('$$event_name'), b.id('$$event_cb')],\n\t\t\t\t\tb.call(\n\t\t\t\t\t\t'$.add_legacy_event_listener',\n\t\t\t\t\t\tb.id('$$props'),\n\t\t\t\t\t\tb.id('$$event_name'),\n\t\t\t\t\t\tb.id('$$event_cb')\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else if (dev) {\n\t\tcomponent_returned_object.unshift(b.spread(b.call(b.id('$.legacy_api'))));\n\t}\n\n\tconst push_args = [b.id('$$props'), b.literal(analysis.runes)];\n\tif (dev) push_args.push(b.id(analysis.name));\n\n\tlet component_block = b.block([\n\t\tstore_init,\n\t\t...legacy_reactive_declarations,\n\t\t...group_binding_declarations\n\t]);\n\n\tconst should_inject_context =\n\t\tdev ||\n\t\tanalysis.needs_context ||\n\t\tanalysis.reactive_statements.size > 0 ||\n\t\tcomponent_returned_object.length > 0;\n\n\tcomponent_block.body.push(\n\t\t...state.instance_level_snippets,\n\t\t.../** @type {ESTree.Statement[]} */ (instance.body)\n\t);\n\n\tif (should_inject_context && component_returned_object.length > 0) {\n\t\tcomponent_block.body.push(b.var('$$exports', b.object(component_returned_object)));\n\t}\n\tcomponent_block.body.unshift(...store_setup);\n\n\tif (!analysis.runes && analysis.needs_context) {\n\t\tcomponent_block.body.push(b.stmt(b.call('$.init', analysis.immutable ? b.true : undefined)));\n\t}\n\n\tcomponent_block.body.push(.../** @type {ESTree.Statement[]} */ (template.body));\n\n\tif (analysis.needs_mutation_validation) {\n\t\tcomponent_block.body.unshift(\n\t\t\tb.var('$$ownership_validator', b.call('$.create_ownership_validator', b.id('$$props')))\n\t\t);\n\t}\n\n\tlet should_inject_props =\n\t\tshould_inject_context ||\n\t\tanalysis.needs_props ||\n\t\tanalysis.uses_props ||\n\t\tanalysis.uses_rest_props ||\n\t\tanalysis.uses_slots ||\n\t\tanalysis.slot_names.size > 0;\n\n\t// trick esrap into including comments\n\tcomponent_block.loc = instance.loc;\n\n\tif (!analysis.runes) {\n\t\t// Bind static exports to props so that people can access them with bind:x\n\t\tfor (const { name, alias } of analysis.exports) {\n\t\t\tcomponent_block.body.push(\n\t\t\t\tb.stmt(\n\t\t\t\t\tb.call(\n\t\t\t\t\t\t'$.bind_prop',\n\t\t\t\t\t\tb.id('$$props'),\n\t\t\t\t\t\tb.literal(alias ?? name),\n\t\t\t\t\t\tbuild_getter(b.id(name), instance_state)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tif (analysis.css.ast !== null && analysis.inject_styles) {\n\t\tconst hash = b.literal(analysis.css.hash);\n\t\tconst code = b.literal(render_stylesheet(analysis.source, analysis, options).code);\n\n\t\tstate.hoisted.push(b.const('$$css', b.object([b.init('hash', hash), b.init('code', code)])));\n\n\t\tcomponent_block.body.unshift(\n\t\t\tb.stmt(b.call('$.append_styles', b.id('$$anchor'), b.id('$$css')))\n\t\t);\n\t}\n\n\t// we want the cleanup function for the stores to run as the very last thing\n\t// so that it can effectively clean up the store subscription even after the user effects runs\n\tif (should_inject_context) {\n\t\tcomponent_block.body.unshift(b.stmt(b.call('$.push', ...push_args)));\n\n\t\tlet to_push;\n\n\t\tif (component_returned_object.length > 0) {\n\t\t\tlet pop_call = b.call('$.pop', b.id('$$exports'));\n\t\t\tto_push = needs_store_cleanup ? b.var('$$pop', pop_call) : b.return(pop_call);\n\t\t} else {\n\t\t\tto_push = b.stmt(b.call('$.pop'));\n\t\t}\n\n\t\tcomponent_block.body.push(to_push);\n\t}\n\n\tif (needs_store_cleanup) {\n\t\tcomponent_block.body.push(b.stmt(b.call('$$cleanup')));\n\n\t\tif (component_returned_object.length > 0) {\n\t\t\tcomponent_block.body.push(b.return(b.id('$$pop')));\n\t\t}\n\t}\n\n\tif (analysis.uses_rest_props) {\n\t\tconst named_props = analysis.exports.map(({ name, alias }) => alias ?? name);\n\t\tfor (const [name, binding] of analysis.instance.scope.declarations) {\n\t\t\tif (binding.kind === 'bindable_prop') named_props.push(binding.prop_alias ?? name);\n\t\t}\n\n\t\tcomponent_block.body.unshift(\n\t\t\tb.const(\n\t\t\t\t'$$restProps',\n\t\t\t\tb.call(\n\t\t\t\t\t'$.legacy_rest_props',\n\t\t\t\t\tb.id('$$sanitized_props'),\n\t\t\t\t\tb.array(named_props.map((name) => b.literal(name)))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tif (analysis.uses_props || analysis.uses_rest_props) {\n\t\tconst to_remove = [\n\t\t\tb.literal('children'),\n\t\t\tb.literal('$$slots'),\n\t\t\tb.literal('$$events'),\n\t\t\tb.literal('$$legacy')\n\t\t];\n\t\tif (analysis.custom_element) {\n\t\t\tto_remove.push(b.literal('$$host'));\n\t\t}\n\n\t\tcomponent_block.body.unshift(\n\t\t\tb.const(\n\t\t\t\t'$$sanitized_props',\n\t\t\t\tb.call('$.legacy_rest_props', b.id('$$props'), b.array(to_remove))\n\t\t\t)\n\t\t);\n\t}\n\n\tif (analysis.uses_slots) {\n\t\tcomponent_block.body.unshift(b.const('$$slots', b.call('$.sanitize_slots', b.id('$$props'))));\n\t}\n\n\t// Merge hoisted statements into module body.\n\t// Ensure imports are on top, with the order preserved, then module body, then hoisted statements\n\t/** @type {ESTree.ImportDeclaration[]} */\n\tconst imports = [];\n\t/** @type {ESTree.Program['body']} */\n\tlet body = [];\n\n\tfor (const entry of [...module.body, ...state.hoisted]) {\n\t\tif (entry.type === 'ImportDeclaration') {\n\t\t\timports.push(entry);\n\t\t} else {\n\t\t\tbody.push(entry);\n\t\t}\n\t}\n\n\tbody = [...imports, ...state.module_level_snippets, ...body];\n\n\tconst component = b.function_declaration(\n\t\tb.id(analysis.name),\n\t\tshould_inject_props ? [b.id('$$anchor'), b.id('$$props')] : [b.id('$$anchor')],\n\t\tcomponent_block\n\t);\n\n\tif (options.hmr) {\n\t\tconst id = b.id(analysis.name);\n\n\t\tconst accept_fn_body = [\n\t\t\tb.stmt(b.call(b.member(b.member(id, b.id('$.HMR'), true), 'update'), b.id('module.default')))\n\t\t];\n\n\t\tif (analysis.css.hash) {\n\t\t\t// remove existing `<style>` element, in case CSS changed\n\t\t\taccept_fn_body.unshift(b.stmt(b.call('$.cleanup_styles', b.literal(analysis.css.hash))));\n\t\t}\n\n\t\tconst hmr = b.block([\n\t\t\tb.stmt(b.assignment('=', id, b.call('$.hmr', id))),\n\t\t\tb.stmt(b.call('import.meta.hot.accept', b.arrow([b.id('module')], b.block(accept_fn_body))))\n\t\t]);\n\n\t\tbody.push(component, b.if(b.id('import.meta.hot'), hmr), b.export_default(b.id(analysis.name)));\n\t} else {\n\t\tbody.push(b.export_default(component));\n\t}\n\n\tif (dev) {\n\t\t// add `App[$.FILENAME] = 'App.svelte'` so that we can print useful messages later\n\t\tbody.unshift(\n\t\t\tb.stmt(\n\t\t\t\tb.assignment('=', b.member(b.id(analysis.name), '$.FILENAME', true), b.literal(filename))\n\t\t\t)\n\t\t);\n\t}\n\n\tif (options.experimental.async) {\n\t\tbody.unshift(b.imports([], 'svelte/internal/flags/async'));\n\t}\n\n\tif (!analysis.runes) {\n\t\tbody.unshift(b.imports([], 'svelte/internal/flags/legacy'));\n\t}\n\n\tif (analysis.tracing) {\n\t\tbody.unshift(b.imports([], 'svelte/internal/flags/tracing'));\n\t}\n\n\tif (options.discloseVersion) {\n\t\tbody.unshift(b.imports([], 'svelte/internal/disclose-version'));\n\t}\n\n\tif (options.compatibility.componentApi === 4) {\n\t\tbody.unshift(b.imports([['createClassComponent', '$$_createClassComponent']], 'svelte/legacy'));\n\t\tcomponent_block.body.unshift(\n\t\t\tb.if(\n\t\t\t\tb.id('new.target'),\n\t\t\t\tb.return(\n\t\t\t\t\tb.call(\n\t\t\t\t\t\t'$$_createClassComponent',\n\t\t\t\t\t\t// When called with new, the first argument is the constructor options\n\t\t\t\t\t\tb.object([b.init('component', b.id(analysis.name)), b.spread(b.id('$$anchor'))])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else if (dev) {\n\t\tcomponent_block.body.unshift(b.stmt(b.call('$.check_target', b.id('new.target'))));\n\t}\n\n\tif (analysis.props_id) {\n\t\t// need to be placed on first line of the component for hydration\n\t\tcomponent_block.body.unshift(b.const(analysis.props_id, b.call('$.props_id')));\n\t}\n\n\tif (state.events.size > 0) {\n\t\tbody.push(\n\t\t\tb.stmt(b.call('$.delegate', b.array(Array.from(state.events).map((name) => b.literal(name)))))\n\t\t);\n\t}\n\n\tconst ce = analysis.custom_element;\n\n\tif (ce) {\n\t\tconst ce_props = typeof ce === 'boolean' ? {} : ce.props || {};\n\n\t\t/** @type {ESTree.Property[]} */\n\t\tconst props_str = [];\n\n\t\tfor (const [name, prop_def] of Object.entries(ce_props)) {\n\t\t\tconst binding = analysis.instance.scope.get(name);\n\t\t\tconst key = binding?.prop_alias ?? name;\n\n\t\t\tif (\n\t\t\t\t!prop_def.type &&\n\t\t\t\tbinding?.initial?.type === 'Literal' &&\n\t\t\t\ttypeof binding?.initial.value === 'boolean'\n\t\t\t) {\n\t\t\t\tprop_def.type = 'Boolean';\n\t\t\t}\n\n\t\t\tconst value = b.object(\n\t\t\t\t/** @type {ESTree.Property[]} */ (\n\t\t\t\t\t[\n\t\t\t\t\t\tprop_def.attribute ? b.init('attribute', b.literal(prop_def.attribute)) : undefined,\n\t\t\t\t\t\tprop_def.reflect ? b.init('reflect', b.true) : undefined,\n\t\t\t\t\t\tprop_def.type ? b.init('type', b.literal(prop_def.type)) : undefined\n\t\t\t\t\t].filter(Boolean)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tprops_str.push(b.init(key, value));\n\t\t}\n\n\t\tfor (const [name, binding] of properties) {\n\t\t\tconst key = binding.prop_alias ?? name;\n\t\t\tif (ce_props[key]) continue;\n\n\t\t\tprops_str.push(b.init(key, b.object([])));\n\t\t}\n\n\t\tconst slots_str = b.array([...analysis.slot_names.keys()].map((name) => b.literal(name)));\n\t\tconst accessors_str = b.array(\n\t\t\tanalysis.exports.map(({ name, alias }) => b.literal(alias ?? name))\n\t\t);\n\n\t\t/** @type {ESTree.ObjectExpression | undefined} */\n\t\tlet shadow_root_init;\n\t\tif (typeof ce === 'boolean' || ce.shadow === 'open' || ce.shadow === undefined) {\n\t\t\tshadow_root_init = b.object([b.init('mode', b.literal('open'))]);\n\t\t} else if (ce.shadow === 'none') {\n\t\t\tshadow_root_init = undefined;\n\t\t} else {\n\t\t\tshadow_root_init = ce.shadow;\n\t\t}\n\n\t\tconst create_ce = b.call(\n\t\t\t'$.create_custom_element',\n\t\t\tb.id(analysis.name),\n\t\t\tb.object(props_str),\n\t\t\tslots_str,\n\t\t\taccessors_str,\n\t\t\tshadow_root_init,\n\t\t\t/** @type {any} */ (typeof ce !== 'boolean' ? ce.extend : undefined)\n\t\t);\n\n\t\t// If a tag name is provided, call `customElements.define`, otherwise leave to the user\n\t\tif (typeof ce !== 'boolean' && typeof ce.tag === 'string') {\n\t\t\tconst define = b.stmt(b.call('customElements.define', b.literal(ce.tag), create_ce));\n\n\t\t\tif (options.hmr) {\n\t\t\t\tbody.push(\n\t\t\t\t\tb.if(b.binary('==', b.call('customElements.get', b.literal(ce.tag)), b.null), define)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tbody.push(define);\n\t\t\t}\n\t\t} else {\n\t\t\tbody.push(b.stmt(create_ce));\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: 'Program',\n\t\tsourceType: 'module',\n\t\tbody\n\t};\n}\n\n/**\n * @param {Analysis} analysis\n * @param {ValidatedModuleCompileOptions} options\n * @returns {ESTree.Program}\n */\nexport function client_module(analysis, options) {\n\t/** @type {ClientTransformState} */\n\tconst state = {\n\t\tanalysis,\n\t\toptions,\n\t\tscope: analysis.module.scope,\n\t\tscopes: analysis.module.scopes,\n\t\tstate_fields: new Map(),\n\t\ttransform: {},\n\t\tin_constructor: false,\n\t\tis_instance: false\n\t};\n\n\tconst module = /** @type {ESTree.Program} */ (\n\t\twalk(/** @type {AST.SvelteNode} */ (analysis.module.ast), state, visitors)\n\t);\n\n\tconst body = [b.import_all('$', 'svelte/internal/client')];\n\n\tif (analysis.tracing) {\n\t\tbody.push(b.imports([], 'svelte/internal/flags/tracing'));\n\t}\n\n\treturn {\n\t\ttype: 'Program',\n\t\tsourceType: 'module',\n\t\tbody: [...body, ...module.body]\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/transform-template/fix-attribute-casing.js",
    "content": "const svg_attributes =\n\t'accent-height accumulate additive alignment-baseline allowReorder alphabetic amplitude arabic-form ascent attributeName attributeType autoReverse azimuth baseFrequency baseline-shift baseProfile bbox begin bias by calcMode cap-height class clip clipPathUnits clip-path clip-rule color color-interpolation color-interpolation-filters color-profile color-rendering contentScriptType contentStyleType cursor cx cy d decelerate descent diffuseConstant direction display divisor dominant-baseline dur dx dy edgeMode elevation enable-background end exponent externalResourcesRequired fill fill-opacity fill-rule filter filterRes filterUnits flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight format from fr fx fy g1 g2 glyph-name glyph-orientation-horizontal glyph-orientation-vertical glyphRef gradientTransform gradientUnits hanging height href horiz-adv-x horiz-origin-x id ideographic image-rendering in in2 intercept k k1 k2 k3 k4 kernelMatrix kernelUnitLength kerning keyPoints keySplines keyTimes lang lengthAdjust letter-spacing lighting-color limitingConeAngle local marker-end marker-mid marker-start markerHeight markerUnits markerWidth mask maskContentUnits maskUnits mathematical max media method min mode name numOctaves offset onabort onactivate onbegin onclick onend onerror onfocusin onfocusout onload onmousedown onmousemove onmouseout onmouseover onmouseup onrepeat onresize onscroll onunload opacity operator order orient orientation origin overflow overline-position overline-thickness panose-1 paint-order pathLength patternContentUnits patternTransform patternUnits pointer-events points pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits r radius refX refY rendering-intent repeatCount repeatDur requiredExtensions requiredFeatures restart result rotate rx ry scale seed shape-rendering slope spacing specularConstant specularExponent speed spreadMethod startOffset stdDeviation stemh stemv stitchTiles stop-color stop-opacity strikethrough-position strikethrough-thickness string stroke stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width style surfaceScale systemLanguage tabindex tableValues target targetX targetY text-anchor text-decoration text-rendering textLength to transform type u1 u2 underline-position underline-thickness unicode unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical values version vert-adv-y vert-origin-x vert-origin-y viewBox viewTarget visibility width widths word-spacing writing-mode x x-height x1 x2 xChannelSelector xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xml:lang xml:space y y1 y2 yChannelSelector z zoomAndPan'.split(\n\t\t' '\n\t);\n\nconst svg_attribute_lookup = new Map();\n\nsvg_attributes.forEach((name) => {\n\tsvg_attribute_lookup.set(name.toLowerCase(), name);\n});\n\n/**\n * @param {string} name\n */\nexport default function fix_attribute_casing(name) {\n\tname = name.toLowerCase();\n\treturn svg_attribute_lookup.get(name) || name;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/transform-template/index.js",
    "content": "/** @import { Namespace } from '#compiler' */\n/** @import { ComponentClientTransformState } from '../types.js' */\n/** @import { Node } from './types.js' */\nimport { TEMPLATE_USE_MATHML, TEMPLATE_USE_SVG } from '../../../../../constants.js';\nimport { dev, locator } from '../../../../state.js';\nimport * as b from '../../../../utils/builders.js';\n\n/**\n * @param {Node[]} nodes\n */\nfunction build_locations(nodes) {\n\tconst array = b.array([]);\n\n\tfor (const node of nodes) {\n\t\tif (node.type !== 'element') continue;\n\n\t\tconst { line, column } = locator(node.start);\n\n\t\tconst expression = b.array([b.literal(line), b.literal(column)]);\n\t\tconst children = build_locations(node.children);\n\n\t\tif (children.elements.length > 0) {\n\t\t\texpression.elements.push(children);\n\t\t}\n\n\t\tarray.elements.push(expression);\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {ComponentClientTransformState} state\n * @param {Namespace} namespace\n * @param {number} [flags]\n */\nexport function transform_template(state, namespace, flags = 0) {\n\tconst tree = state.options.fragments === 'tree';\n\n\tconst expression = tree ? state.template.as_tree() : state.template.as_html();\n\n\tif (tree) {\n\t\tif (namespace === 'svg') flags |= TEMPLATE_USE_SVG;\n\t\tif (namespace === 'mathml') flags |= TEMPLATE_USE_MATHML;\n\t}\n\n\tlet call = b.call(\n\t\ttree ? `$.from_tree` : `$.from_${namespace}`,\n\t\texpression,\n\t\tflags ? b.literal(flags) : undefined\n\t);\n\n\tif (state.template.contains_script_tag) {\n\t\tcall = b.call(`$.with_script`, call);\n\t}\n\n\tif (dev) {\n\t\tcall = b.call(\n\t\t\t'$.add_locations',\n\t\t\tcall,\n\t\t\tb.member(b.id(state.analysis.name), '$.FILENAME', true),\n\t\t\tbuild_locations(state.template.nodes)\n\t\t);\n\t}\n\n\treturn call;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/transform-template/template.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { Node, Element } from './types'; */\nimport { escape_html } from '../../../../../escaping.js';\nimport { is_void } from '../../../../../utils.js';\nimport * as b from '#compiler/builders';\nimport fix_attribute_casing from './fix-attribute-casing.js';\nimport { regex_starts_with_newline } from '../../../patterns.js';\n\nexport class Template {\n\t/**\n\t * `true` if HTML template contains a `<script>` tag. In this case we need to invoke a special\n\t * template instantiation function (see `create_fragment_with_script_from_html` for more info)\n\t */\n\tcontains_script_tag = false;\n\n\t/** `true` if the HTML template needs to be instantiated with `importNode` */\n\tneeds_import_node = false;\n\n\t/** @type {Node[]} */\n\tnodes = [];\n\n\t/** @type {Node[][]} */\n\t#stack = [this.nodes];\n\n\t/** @type {Element | undefined} */\n\t#element;\n\n\t#fragment = this.nodes;\n\n\t/**\n\t * @param {string} name\n\t * @param {number} start\n\t * @param {boolean} is_html\n\t */\n\tpush_element(name, start, is_html) {\n\t\tthis.#element = {\n\t\t\ttype: 'element',\n\t\t\tname,\n\t\t\tattributes: {},\n\t\t\tchildren: [],\n\t\t\tis_html,\n\t\t\tstart\n\t\t};\n\n\t\tthis.#fragment.push(this.#element);\n\n\t\tthis.#fragment = /** @type {Element} */ (this.#element).children;\n\t\tthis.#stack.push(this.#fragment);\n\t}\n\n\t/** @param {string} [data] */\n\tpush_comment(data) {\n\t\tthis.#fragment.push({ type: 'comment', data });\n\t}\n\n\t/** @param {AST.Text[]} nodes */\n\tpush_text(nodes) {\n\t\tthis.#fragment.push({ type: 'text', nodes });\n\t}\n\n\tpop_element() {\n\t\tthis.#stack.pop();\n\t\tthis.#fragment = /** @type {Node[]} */ (this.#stack.at(-1));\n\t}\n\n\t/**\n\t * @param {string} key\n\t * @param {string | undefined} value\n\t */\n\tset_prop(key, value) {\n\t\t/** @type {Element} */ (this.#element).attributes[key] = value;\n\t}\n\n\tas_html() {\n\t\treturn b.template([b.quasi(this.nodes.map(stringify).join(''), true)], []);\n\t}\n\n\tas_tree() {\n\t\t// if the first item is a comment we need to add another comment for effect.start\n\t\tif (this.nodes[0].type === 'comment') {\n\t\t\tthis.nodes.unshift({ type: 'comment', data: undefined });\n\t\t}\n\n\t\treturn b.array(this.nodes.map(objectify));\n\t}\n}\n\n/**\n * @param {Node} item\n */\nfunction stringify(item) {\n\tif (item.type === 'text') {\n\t\treturn item.nodes.map((node) => node.raw).join('');\n\t}\n\n\tif (item.type === 'comment') {\n\t\treturn item.data ? `<!--${item.data}-->` : '<!>';\n\t}\n\n\tlet str = `<${item.name}`;\n\n\tfor (const key in item.attributes) {\n\t\tconst value = item.attributes[key];\n\n\t\tstr += ` ${item.is_html ? key.toLowerCase() : key}`;\n\t\tif (value !== undefined) str += `=\"${escape_html(value, true)}\"`;\n\t}\n\n\tif (is_void(item.name)) {\n\t\tstr += '/>'; // XHTML compliance\n\t} else {\n\t\tstr += `>`;\n\t\tstr += item.children.map(stringify).join('');\n\t\tstr += `</${item.name}>`;\n\t}\n\n\treturn str;\n}\n\n/** @param {Node} item */\nfunction objectify(item) {\n\tif (item.type === 'text') {\n\t\treturn b.literal(item.nodes.map((node) => node.data).join(''));\n\t}\n\n\tif (item.type === 'comment') {\n\t\treturn item.data ? b.array([b.literal(`// ${item.data}`)]) : null;\n\t}\n\n\tconst element = b.array([b.literal(item.name)]);\n\n\tconst attributes = b.object([]);\n\n\tfor (const key in item.attributes) {\n\t\tconst value = item.attributes[key];\n\n\t\tattributes.properties.push(\n\t\t\tb.prop(\n\t\t\t\t'init',\n\t\t\t\tb.key(fix_attribute_casing(key)),\n\t\t\t\tvalue === undefined ? b.void0 : b.literal(value)\n\t\t\t)\n\t\t);\n\t}\n\n\tif (attributes.properties.length > 0 || item.children.length > 0) {\n\t\telement.elements.push(attributes.properties.length > 0 ? attributes : b.null);\n\t}\n\n\tif (item.children.length > 0) {\n\t\tconst children = item.children.map(objectify);\n\t\telement.elements.push(...children);\n\n\t\t// special case — strip leading newline from `<pre>` and `<textarea>`\n\t\tif (item.name === 'pre' || item.name === 'textarea') {\n\t\t\tconst first = children[0];\n\t\t\tif (first?.type === 'Literal') {\n\t\t\t\tfirst.value = /** @type {string} */ (first.value).replace(regex_starts_with_newline, '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn element;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/transform-template/types.d.ts",
    "content": "import type { AST } from '#compiler';\n\nexport interface Element {\n\ttype: 'element';\n\tname: string;\n\tattributes: Record<string, string | undefined>;\n\tchildren: Node[];\n\tis_html: boolean;\n\t/** used for populating __svelte_meta */\n\tstart: number;\n}\n\nexport interface Text {\n\ttype: 'text';\n\tnodes: AST.Text[];\n}\n\nexport interface Comment {\n\ttype: 'comment';\n\tdata: string | undefined;\n}\n\nexport type Node = Element | Text | Comment;\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/types.d.ts",
    "content": "import type {\n\tModuleDeclaration,\n\tStatement,\n\tLabeledStatement,\n\tIdentifier,\n\tExpression,\n\tAssignmentExpression,\n\tUpdateExpression,\n\tVariableDeclaration\n} from 'estree';\nimport type { AST, Namespace, ValidatedCompileOptions } from '#compiler';\nimport type { TransformState } from '../types.js';\nimport type { ComponentAnalysis } from '../../types.js';\nimport type { Template } from './transform-template/template.js';\nimport type { Memoizer } from './visitors/shared/utils.js';\n\nexport interface ClientTransformState extends TransformState {\n\t/**\n\t * `true` if the current lexical scope belongs to a class constructor. this allows\n\t * us to rewrite `this.foo` as `this.#foo.value`\n\t */\n\treadonly in_constructor: boolean;\n\n\treadonly transform: Record<\n\t\tstring,\n\t\t{\n\t\t\t/** turn `foo` into e.g. `$.get(foo)` */\n\t\t\tread: (id: Identifier) => Expression;\n\t\t\t/** turn `foo = bar` into e.g. `$.set(foo, bar)` */\n\t\t\tassign?: (node: Identifier, value: Expression, proxy?: boolean) => Expression;\n\t\t\t/** turn `foo.bar = baz` into e.g. `$.mutate(foo, $.get(foo).bar = baz);` */\n\t\t\tmutate?: (node: Identifier, mutation: AssignmentExpression | UpdateExpression) => Expression;\n\t\t\t/** turn `foo++` into e.g. `$.update(foo)` */\n\t\t\tupdate?: (node: UpdateExpression) => Expression;\n\t\t}\n\t>;\n}\n\nexport interface ComponentClientTransformState extends ClientTransformState {\n\treadonly analysis: ComponentAnalysis;\n\treadonly options: ValidatedCompileOptions;\n\treadonly hoisted: Array<Statement | ModuleDeclaration>;\n\treadonly events: Set<string>;\n\treadonly store_to_invalidate?: string;\n\n\t/** Stuff that happens before the render effect(s) */\n\treadonly init: Statement[];\n\t/** Stuff that happens inside the render effect */\n\treadonly update: Statement[];\n\t/** Stuff that happens after the render effect (control blocks, dynamic elements, bindings, actions, etc) */\n\treadonly after_update: Statement[];\n\t/** Transformed `{#snippets }` declarations */\n\treadonly snippets: Statement[];\n\t/** Transformed `{@const }` declarations */\n\treadonly consts: Statement[];\n\t/** Transformed async `{@const }` declarations (if any) and those coming after them */\n\tasync_consts?: {\n\t\tid: Identifier;\n\t\tthunks: Expression[];\n\t};\n\t/** Transformed `let:` directives */\n\treadonly let_directives: Statement[];\n\t/** Memoized expressions */\n\treadonly memoizer: Memoizer;\n\t/** The HTML template string */\n\treadonly template: Template;\n\treadonly metadata: {\n\t\tnamespace: Namespace;\n\t\tbound_contenteditable: boolean;\n\t};\n\treadonly preserve_whitespace: boolean;\n\n\t/** The anchor node for the current context */\n\treadonly node: Identifier;\n\n\t/** Imports that should be re-evaluated in legacy mode following a mutation */\n\treadonly legacy_reactive_imports: Statement[];\n\n\t/** The $: calls, which will be ordered in the end */\n\treadonly legacy_reactive_statements: Map<LabeledStatement, Statement>;\n\n\t/** Snippets hoisted to the instance */\n\treadonly instance_level_snippets: VariableDeclaration[];\n\t/** Snippets hoisted to the module */\n\treadonly module_level_snippets: VariableDeclaration[];\n\n\t/** True if the current node is a) a component or render tag and b) the sole child of a block  */\n\treadonly is_standalone: boolean;\n}\n\nexport type Context = import('zimmerframe').Context<AST.SvelteNode, ClientTransformState>;\nexport type Visitors = import('zimmerframe').Visitors<AST.SvelteNode, any>;\n\nexport type ComponentContext = import('zimmerframe').Context<\n\tAST.SvelteNode,\n\tComponentClientTransformState\n>;\nexport type ComponentVisitors = import('zimmerframe').Visitors<\n\tAST.SvelteNode,\n\tComponentClientTransformState\n>;\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/utils.js",
    "content": "/** @import { BlockStatement, Expression, Identifier } from 'estree' */\n/** @import { Binding } from '#compiler' */\n/** @import { ClientTransformState, ComponentClientTransformState } from './types.js' */\n/** @import { Analysis } from '../../types.js' */\n/** @import { Scope } from '../../scope.js' */\nimport * as b from '#compiler/builders';\nimport { is_simple_expression, save } from '../../../utils/ast.js';\nimport {\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED,\n\tPROPS_IS_BINDABLE\n} from '../../../../constants.js';\n\n/**\n * @param {Binding} binding\n * @param {Analysis} analysis\n * @returns {boolean}\n */\nexport function is_state_source(binding, analysis) {\n\treturn (\n\t\t(binding.kind === 'state' || binding.kind === 'raw_state') &&\n\t\t(!analysis.immutable || binding.reassigned || analysis.accessors)\n\t);\n}\n\n/**\n * @param {Identifier} node\n * @param {ClientTransformState} state\n * @returns {Expression}\n */\nexport function build_getter(node, state) {\n\tif (Object.hasOwn(state.transform, node.name)) {\n\t\tconst binding = state.scope.get(node.name);\n\n\t\t// don't transform the declaration itself\n\t\tif (node !== binding?.node) {\n\t\t\treturn state.transform[node.name].read(node);\n\t\t}\n\t}\n\n\treturn node;\n}\n\n/**\n * @param {Binding} binding\n * @param {ComponentClientTransformState} state\n * @param {string} name\n * @param {Expression | null} [initial]\n * @returns\n */\nexport function get_prop_source(binding, state, name, initial) {\n\t/** @type {Expression[]} */\n\tconst args = [b.id('$$props'), b.literal(name)];\n\n\tlet flags = 0;\n\n\tif (binding.kind === 'bindable_prop') {\n\t\tflags |= PROPS_IS_BINDABLE;\n\t}\n\n\tif (state.analysis.immutable) {\n\t\tflags |= PROPS_IS_IMMUTABLE;\n\t}\n\n\tif (state.analysis.runes) {\n\t\tflags |= PROPS_IS_RUNES;\n\t}\n\n\tif (\n\t\tstate.analysis.accessors ||\n\t\t(state.analysis.immutable\n\t\t\t? binding.reassigned || (state.analysis.runes && binding.mutated)\n\t\t\t: binding.updated)\n\t) {\n\t\tflags |= PROPS_IS_UPDATED;\n\t}\n\n\t/** @type {Expression | undefined} */\n\tlet arg;\n\n\tif (initial) {\n\t\t// To avoid eagerly evaluating the right-hand-side, we wrap it in a thunk if necessary\n\t\tif (is_simple_expression(initial)) {\n\t\t\targ = initial;\n\t\t} else {\n\t\t\tif (\n\t\t\t\tinitial.type === 'CallExpression' &&\n\t\t\t\tinitial.callee.type === 'Identifier' &&\n\t\t\t\tinitial.arguments.length === 0\n\t\t\t) {\n\t\t\t\targ = initial.callee;\n\t\t\t} else {\n\t\t\t\targ = b.thunk(initial);\n\t\t\t}\n\n\t\t\tflags |= PROPS_IS_LAZY_INITIAL;\n\t\t}\n\t}\n\n\tif (flags || arg) {\n\t\targs.push(b.literal(flags));\n\t\tif (arg) args.push(arg);\n\t}\n\n\treturn b.call('$.prop', ...args);\n}\n\n/**\n *\n * @param {Binding} binding\n * @param {ClientTransformState} state\n * @returns\n */\nexport function is_prop_source(binding, state) {\n\treturn (\n\t\t(binding.kind === 'prop' || binding.kind === 'bindable_prop') &&\n\t\t(!state.analysis.runes ||\n\t\t\tstate.analysis.accessors ||\n\t\t\tbinding.reassigned ||\n\t\t\tbinding.initial ||\n\t\t\t// Until legacy mode is gone, we also need to use the prop source when only mutated is true,\n\t\t\t// because the parent could be a legacy component which needs coarse-grained reactivity\n\t\t\tbinding.updated)\n\t);\n}\n\n/**\n * @param {Expression} node\n * @param {Scope | null} scope\n */\nexport function should_proxy(node, scope) {\n\tif (\n\t\t!node ||\n\t\tnode.type === 'Literal' ||\n\t\tnode.type === 'TemplateLiteral' ||\n\t\tnode.type === 'ArrowFunctionExpression' ||\n\t\tnode.type === 'FunctionExpression' ||\n\t\tnode.type === 'UnaryExpression' ||\n\t\tnode.type === 'BinaryExpression' ||\n\t\t(node.type === 'Identifier' && node.name === 'undefined')\n\t) {\n\t\treturn false;\n\t}\n\n\tif (node.type === 'Identifier' && scope !== null) {\n\t\tconst binding = scope.get(node.name);\n\t\t// Let's see if the reference is something that can be proxied\n\t\tif (\n\t\t\tbinding !== null &&\n\t\t\t!binding.reassigned &&\n\t\t\tbinding.initial !== null &&\n\t\t\tbinding.initial.type !== 'FunctionDeclaration' &&\n\t\t\tbinding.initial.type !== 'ClassDeclaration' &&\n\t\t\tbinding.initial.type !== 'ImportDeclaration' &&\n\t\t\tbinding.initial.type !== 'EachBlock' &&\n\t\t\tbinding.initial.type !== 'SnippetBlock'\n\t\t) {\n\t\t\treturn should_proxy(binding.initial, null);\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Svelte legacy mode should use safe equals in most places, runes mode shouldn't\n * @param {ComponentClientTransformState} state\n * @param {Expression | BlockStatement} expression\n * @param {boolean} [async]\n */\nexport function create_derived(state, expression, async = false) {\n\tconst thunk = b.thunk(expression, async);\n\n\tif (async) {\n\t\treturn save(b.call('$.async_derived', thunk));\n\t} else {\n\t\treturn b.call(state.analysis.runes ? '$.derived' : '$.derived_safe_equal', thunk);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/AnimateDirective.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { parse_directive_name } from './shared/utils.js';\n\n/**\n * @param {AST.AnimateDirective} node\n * @param {ComponentContext} context\n */\nexport function AnimateDirective(node, context) {\n\tconst expression =\n\t\tnode.expression === null\n\t\t\t? b.null\n\t\t\t: b.thunk(/** @type {Expression} */ (context.visit(node.expression)));\n\n\t// in after_update to ensure it always happens after bind:this\n\tlet statement = b.stmt(\n\t\tb.call(\n\t\t\t'$.animation',\n\t\t\tcontext.state.node,\n\t\t\tb.thunk(/** @type {Expression} */ (context.visit(parse_directive_name(node.name)))),\n\t\t\texpression\n\t\t)\n\t);\n\n\tif (node.metadata.expression.is_async()) {\n\t\tstatement = b.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.run_after_blockers',\n\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\tb.thunk(b.block([statement]))\n\t\t\t)\n\t\t);\n\t}\n\n\tcontext.state.after_update.push(statement);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/ArrowFunctionExpression.js",
    "content": "/** @import { ArrowFunctionExpression } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport { visit_function } from './shared/function.js';\n\n/**\n * @param {ArrowFunctionExpression} node\n * @param {ComponentContext} context\n */\nexport function ArrowFunctionExpression(node, context) {\n\treturn visit_function(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js",
    "content": "/** @import { AssignmentExpression, AssignmentOperator, Expression, Identifier, Pattern } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport {\n\tbuild_assignment_value,\n\tget_attribute_expression,\n\tis_event_attribute,\n\tis_expression_async\n} from '../../../../utils/ast.js';\nimport { dev, locate_node } from '../../../../state.js';\nimport { build_getter, should_proxy } from '../utils.js';\nimport { visit_assignment_expression } from '../../shared/assignments.js';\nimport { validate_mutation } from './shared/utils.js';\nimport { get_rune } from '../../../scope.js';\nimport { get_name } from '../../../nodes.js';\n\n/**\n * @param {AssignmentExpression} node\n * @param {Context} context\n */\nexport function AssignmentExpression(node, context) {\n\tconst expression = /** @type {Expression} */ (\n\t\tvisit_assignment_expression(node, context, build_assignment) ?? context.next()\n\t);\n\n\treturn validate_mutation(node, context, expression);\n}\n\n/**\n * Determines whether the value will be coerced on assignment (as with e.g. `+=`).\n * If not, we may need to proxify the value, or warn that the value will not be\n * proxified in time\n * @param {AssignmentOperator} operator\n */\nfunction is_non_coercive_operator(operator) {\n\treturn ['=', '||=', '&&=', '??='].includes(operator);\n}\n\n/**\n * @param {AssignmentOperator} operator\n * @param {Pattern} left\n * @param {Expression} right\n * @param {Context} context\n * @returns {Expression | null}\n */\nfunction build_assignment(operator, left, right, context) {\n\tif (context.state.analysis.runes && left.type === 'MemberExpression') {\n\t\tconst name = get_name(left.property);\n\t\tconst field = name && context.state.state_fields.get(name);\n\n\t\tif (field) {\n\t\t\t// special case — state declaration in class constructor\n\t\t\tif (field.node.type === 'AssignmentExpression' && left === field.node.left) {\n\t\t\t\tconst rune = get_rune(right, context.state.scope);\n\n\t\t\t\tif (rune) {\n\t\t\t\t\tconst child_state = {\n\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\tin_constructor: rune !== '$derived' && rune !== '$derived.by'\n\t\t\t\t\t};\n\n\t\t\t\t\tlet value = /** @type {Expression} */ (context.visit(right, child_state));\n\n\t\t\t\t\tif (dev) {\n\t\t\t\t\t\tconst declaration = context.path.findLast(\n\t\t\t\t\t\t\t(parent) => parent.type === 'ClassDeclaration' || parent.type === 'ClassExpression'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tvalue = b.call(\n\t\t\t\t\t\t\t'$.tag',\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tb.literal(`${declaration?.id?.name ?? '[class]'}.${name}`)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.assignment(operator, b.member(b.this, field.key), value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// special case — assignment to private state field\n\t\t\tif (left.property.type === 'PrivateIdentifier') {\n\t\t\t\tlet value = /** @type {Expression} */ (\n\t\t\t\t\tcontext.visit(build_assignment_value(operator, left, right))\n\t\t\t\t);\n\n\t\t\t\tconst needs_proxy =\n\t\t\t\t\tfield.type === '$state' &&\n\t\t\t\t\tis_non_coercive_operator(operator) &&\n\t\t\t\t\tshould_proxy(value, context.state.scope);\n\n\t\t\t\treturn b.call('$.set', left, value, needs_proxy && b.true);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet object = left;\n\n\twhile (object.type === 'MemberExpression') {\n\t\t// @ts-expect-error\n\t\tobject = object.object;\n\t}\n\n\tif (object.type !== 'Identifier') {\n\t\treturn null;\n\t}\n\n\tconst binding = context.state.scope.get(object.name);\n\tif (!binding) return null;\n\n\tconst transform = Object.hasOwn(context.state.transform, object.name)\n\t\t? context.state.transform[object.name]\n\t\t: null;\n\n\tconst path = context.path.map((node) => node.type);\n\n\t// reassignment\n\tif (object === left && transform?.assign) {\n\t\t// special case — if an element binding, we know it's a primitive\n\n\t\tconst is_primitive = path.at(-1) === 'BindDirective' && path.at(-2) === 'RegularElement';\n\n\t\tlet value = /** @type {Expression} */ (\n\t\t\tcontext.visit(build_assignment_value(operator, left, right))\n\t\t);\n\n\t\treturn transform.assign(\n\t\t\tobject,\n\t\t\tvalue,\n\t\t\t!is_primitive &&\n\t\t\t\tbinding.kind !== 'prop' &&\n\t\t\t\tbinding.kind !== 'bindable_prop' &&\n\t\t\t\tbinding.kind !== 'raw_state' &&\n\t\t\t\tbinding.kind !== 'derived' &&\n\t\t\t\tbinding.kind !== 'store_sub' &&\n\t\t\t\tcontext.state.analysis.runes &&\n\t\t\t\tshould_proxy(right, context.state.scope) &&\n\t\t\t\tis_non_coercive_operator(operator)\n\t\t);\n\t}\n\n\t// mutation\n\tif (transform?.mutate) {\n\t\tlet mutation = transform.mutate(\n\t\t\tobject,\n\t\t\tb.assignment(\n\t\t\t\toperator,\n\t\t\t\t/** @type {Pattern} */ (context.visit(left)),\n\t\t\t\t/** @type {Expression} */ (context.visit(right))\n\t\t\t)\n\t\t);\n\n\t\tif (binding.legacy_indirect_bindings.size > 0) {\n\t\t\tmutation = b.sequence([\n\t\t\t\tmutation,\n\t\t\t\tb.call(\n\t\t\t\t\t'$.invalidate_inner_signals',\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\t[],\n\t\t\t\t\t\tb.block(\n\t\t\t\t\t\t\tArray.from(binding.legacy_indirect_bindings).map((binding) =>\n\t\t\t\t\t\t\t\tb.stmt(build_getter({ ...binding.node }, context.state))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t]);\n\t\t}\n\n\t\treturn mutation;\n\t}\n\n\t// in cases like `(object.items ??= []).push(value)`, we may need to warn\n\t// if the value gets proxified, since the proxy _isn't_ the thing that\n\t// will be pushed to. we do this by transforming it to something like\n\t// `$.assign(object, 'items', '??=', () => [])`\n\tlet should_transform =\n\t\tdev &&\n\t\tpath.at(-1) !== 'ExpressionStatement' &&\n\t\tis_non_coercive_operator(operator) &&\n\t\t!context.state.scope.evaluate(right).is_primitive;\n\n\t// special case — ignore `onclick={() => (...)}`\n\tif (\n\t\tpath.at(-1) === 'ArrowFunctionExpression' &&\n\t\t(path.at(-2) === 'RegularElement' || path.at(-2) === 'SvelteElement')\n\t) {\n\t\tconst element = /** @type {AST.RegularElement} */ (context.path.at(-2));\n\n\t\tconst attribute = element.attributes.find((attribute) => {\n\t\t\tif (attribute.type !== 'Attribute' || !is_event_attribute(attribute)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst expression = get_attribute_expression(attribute);\n\n\t\t\treturn expression === context.path.at(-1);\n\t\t});\n\n\t\tif (attribute) {\n\t\t\tshould_transform = false;\n\t\t}\n\t}\n\n\t// special case — ignore `bind:prop={getter, (v) => (...)}` / `bind:value={x.y}`\n\tif (\n\t\tpath.at(-1) === 'BindDirective' ||\n\t\tpath.at(-1) === 'Component' ||\n\t\tpath.at(-1) === 'SvelteComponent' ||\n\t\t(path.at(-1) === 'ArrowFunctionExpression' &&\n\t\t\t(path.at(-2) === 'BindDirective' ||\n\t\t\t\t(path.at(-2) === 'Component' && path.at(-3) === 'Fragment') ||\n\t\t\t\t(path.at(-2) === 'SequenceExpression' &&\n\t\t\t\t\t(path.at(-3) === 'Component' ||\n\t\t\t\t\t\tpath.at(-3) === 'SvelteComponent' ||\n\t\t\t\t\t\tpath.at(-3) === 'BindDirective'))))\n\t) {\n\t\tshould_transform = false;\n\t}\n\n\tif (left.type === 'MemberExpression' && should_transform) {\n\t\tconst needs_lazy_getter = operator !== '=';\n\t\tconst needs_async = needs_lazy_getter && is_expression_async(right);\n\t\t/** @type {Expression} */\n\t\tlet e = b.call(\n\t\t\tneeds_async ? '$.assign_async' : '$.assign',\n\t\t\t/** @type {Expression} */ (left.object),\n\t\t\t/** @type {Expression} */ (\n\t\t\t\tleft.computed ? left.property : b.literal(/** @type {Identifier} */ (left.property).name)\n\t\t\t),\n\t\t\tb.literal(operator),\n\t\t\tneeds_lazy_getter ? b.arrow([], right, needs_async) : right,\n\t\t\tb.literal(locate_node(left))\n\t\t);\n\t\tif (needs_async) {\n\t\t\te = b.await(e);\n\t\t}\n\t\treturn /** @type {Expression} */ (context.visit(e));\n\t}\n\n\treturn null;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/AttachTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '../../../../utils/builders.js';\nimport { build_expression } from './shared/utils.js';\n\n/**\n * @param {AST.AttachTag} node\n * @param {ComponentContext} context\n */\nexport function AttachTag(node, context) {\n\tconst expression = build_expression(context, node.expression, node.metadata.expression);\n\tlet statement = b.stmt(b.call('$.attach', context.state.node, b.thunk(expression)));\n\n\tif (node.metadata.expression.is_async()) {\n\t\tstatement = b.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.run_after_blockers',\n\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\tb.thunk(b.block([statement]))\n\t\t\t)\n\t\t);\n\t}\n\n\tcontext.state.init.push(statement);\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/Attribute.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { is_event_attribute } from '../../../../utils/ast.js';\nimport { visit_event_attribute } from './shared/events.js';\n\n/**\n * @param {AST.Attribute} node\n * @param {ComponentContext} context\n */\nexport function Attribute(node, context) {\n\tif (is_event_attribute(node)) {\n\t\tvisit_event_attribute(node, context);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js",
    "content": "/** @import { BlockStatement, Pattern, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentClientTransformState, ComponentContext } from '../types' */\nimport { extract_identifiers, is_expression_async } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { create_derived } from '../utils.js';\nimport { get_value } from './shared/declarations.js';\nimport { build_expression, add_svelte_meta } from './shared/utils.js';\n\n/**\n * @param {AST.AwaitBlock} node\n * @param {ComponentContext} context\n */\nexport function AwaitBlock(node, context) {\n\tcontext.state.template.push_comment();\n\n\t// Visit {#await <expression>} first to ensure that scopes are in the correct order\n\tconst expression = b.thunk(\n\t\tbuild_expression(context, node.expression, node.metadata.expression),\n\t\tnode.metadata.expression.has_await\n\t);\n\n\tlet then_block;\n\tlet catch_block;\n\n\tif (node.then) {\n\t\tconst then_context = {\n\t\t\t...context,\n\t\t\tstate: { ...context.state, transform: { ...context.state.transform } }\n\t\t};\n\t\tconst argument = node.value && create_derived_block_argument(node.value, then_context);\n\n\t\t/** @type {Pattern[]} */\n\t\tconst args = [b.id('$$anchor')];\n\t\tif (argument) args.push(argument.id);\n\n\t\tconst declarations = argument?.declarations ?? [];\n\t\tconst block = /** @type {BlockStatement} */ (then_context.visit(node.then, then_context.state));\n\n\t\tthen_block = b.arrow(args, b.block([...declarations, ...block.body]));\n\t}\n\n\tif (node.catch) {\n\t\tconst catch_context = { ...context, state: { ...context.state } };\n\t\tconst argument = node.error && create_derived_block_argument(node.error, catch_context);\n\n\t\t/** @type {Pattern[]} */\n\t\tconst args = [b.id('$$anchor')];\n\t\tif (argument) args.push(argument.id);\n\n\t\tconst declarations = argument?.declarations ?? [];\n\t\tconst block = /** @type {BlockStatement} */ (\n\t\t\tcatch_context.visit(node.catch, catch_context.state)\n\t\t);\n\n\t\tcatch_block = b.arrow(args, b.block([...declarations, ...block.body]));\n\t}\n\n\tconst stmt = add_svelte_meta(\n\t\tb.call(\n\t\t\t'$.await',\n\t\t\tcontext.state.node,\n\t\t\texpression,\n\t\t\tnode.pending\n\t\t\t\t? b.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(node.pending)))\n\t\t\t\t: b.null,\n\t\t\tthen_block,\n\t\t\tcatch_block\n\t\t),\n\t\tnode,\n\t\t'await'\n\t);\n\n\tif (node.metadata.expression.has_blockers()) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\t\tb.array([]),\n\t\t\t\t\tb.arrow([context.state.node], b.block([stmt]))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(stmt);\n\t}\n}\n\n/**\n * @param {Pattern} node\n * @param {import('zimmerframe').Context<AST.SvelteNode, ComponentClientTransformState>} context\n * @returns {{ id: Pattern, declarations: null | Statement[] }}\n */\nfunction create_derived_block_argument(node, context) {\n\tif (node.type === 'Identifier') {\n\t\tcontext.state.transform[node.name] = { read: get_value };\n\t\treturn { id: node, declarations: null };\n\t}\n\n\tconst pattern = /** @type {Pattern} */ (context.visit(node));\n\tconst identifiers = extract_identifiers(node);\n\n\tconst id = b.id('$$source');\n\tconst value = b.id('$$value');\n\n\tconst block = b.block([\n\t\tb.var(pattern, b.call('$.get', id)),\n\t\tb.return(b.object(identifiers.map((identifier) => b.prop('init', identifier, identifier))))\n\t]);\n\n\tconst declarations = [b.var(value, create_derived(context.state, block))];\n\n\tfor (const id of identifiers) {\n\t\tcontext.state.transform[id.name] = { read: get_value };\n\n\t\tdeclarations.push(\n\t\t\tb.var(id, create_derived(context.state, b.member(b.call('$.get', value), id)))\n\t\t);\n\t}\n\n\treturn { id, declarations };\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/AwaitExpression.js",
    "content": "/** @import { AwaitExpression, Expression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { dev, is_ignored } from '../../../../state.js';\nimport { save } from '../../../../utils/ast.js';\nimport * as b from '../../../../utils/builders.js';\n\n/**\n * @param {AwaitExpression} node\n * @param {Context} context\n */\nexport function AwaitExpression(node, context) {\n\tconst argument = /** @type {Expression} */ (context.visit(node.argument));\n\n\tif (context.state.analysis.pickled_awaits.has(node)) {\n\t\treturn save(argument);\n\t}\n\n\t// in dev, note which values are read inside a reactive expression,\n\t// but don't track them\n\telse if (dev && !is_ignored(node, 'await_reactivity_loss')) {\n\t\treturn b.call(b.await(b.call('$.track_reactivity_loss', argument)));\n\t}\n\n\treturn argument === node.argument ? node : { ...node, argument };\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/BinaryExpression.js",
    "content": "/** @import { Expression, BinaryExpression } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport { dev } from '../../../../state.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @param {BinaryExpression} node\n * @param {ComponentContext} context\n */\nexport function BinaryExpression(node, context) {\n\tif (dev) {\n\t\tconst operator = node.operator;\n\n\t\tif (operator === '===' || operator === '!==') {\n\t\t\treturn b.call(\n\t\t\t\t'$.strict_equals',\n\t\t\t\t/** @type {Expression} */ (context.visit(node.left)),\n\t\t\t\t/** @type {Expression} */ (context.visit(node.right)),\n\t\t\t\toperator === '!==' && b.false\n\t\t\t);\n\t\t}\n\n\t\tif (operator === '==' || operator === '!=') {\n\t\t\treturn b.call(\n\t\t\t\t'$.equals',\n\t\t\t\t/** @type {Expression} */ (context.visit(node.left)),\n\t\t\t\t/** @type {Expression} */ (context.visit(node.right)),\n\t\t\t\toperator === '!=' && b.false\n\t\t\t);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/BindDirective.js",
    "content": "/** @import { CallExpression, Expression, Pattern } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { dev, is_ignored } from '../../../../state.js';\nimport { is_text_attribute } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { binding_properties } from '../../../bindings.js';\nimport { build_attribute_value } from './shared/element.js';\nimport { build_bind_this, validate_binding } from './shared/utils.js';\n\n/**\n * @param {AST.BindDirective} node\n * @param {ComponentContext} context\n */\nexport function BindDirective(node, context) {\n\tconst expression = /** @type {Expression} */ (context.visit(node.expression));\n\tconst property = binding_properties[node.name];\n\n\tconst parent = /** @type {AST.SvelteNode} */ (context.path.at(-1));\n\n\tlet get, set;\n\n\tif (expression.type === 'SequenceExpression') {\n\t\t[get, set] = expression.expressions;\n\t} else {\n\t\tif (\n\t\t\tdev &&\n\t\t\tcontext.state.analysis.runes &&\n\t\t\texpression.type === 'MemberExpression' &&\n\t\t\t(node.name !== 'this' ||\n\t\t\t\tcontext.path.some(\n\t\t\t\t\t({ type }) =>\n\t\t\t\t\t\ttype === 'IfBlock' ||\n\t\t\t\t\t\ttype === 'EachBlock' ||\n\t\t\t\t\t\ttype === 'AwaitBlock' ||\n\t\t\t\t\t\ttype === 'KeyBlock'\n\t\t\t\t)) &&\n\t\t\t!is_ignored(node, 'binding_property_non_reactive')\n\t\t) {\n\t\t\tvalidate_binding(context.state, node, expression);\n\t\t}\n\n\t\tconst assignment = /** @type {Expression} */ (\n\t\t\tcontext.visit(b.assignment('=', /** @type {Pattern} */ (node.expression), b.id('$$value')))\n\t\t);\n\n\t\tif (dev) {\n\t\t\t// in dev, create named functions, so that `$inspect(...)` delivers\n\t\t\t// useful stack traces\n\t\t\tget = b.function(b.id('get', node.name_loc), [], b.block([b.return(expression)]));\n\t\t\tset = b.function(\n\t\t\t\tb.id('set', node.name_loc),\n\t\t\t\t[b.id('$$value')],\n\t\t\t\tb.block([b.stmt(assignment)])\n\t\t\t);\n\t\t} else {\n\t\t\t// in prod, optimise for brevity\n\t\t\tget = b.thunk(expression);\n\n\t\t\t/** @type {Expression | undefined} */\n\t\t\tset = b.unthunk(\n\t\t\t\tb.arrow(\n\t\t\t\t\t[b.id('$$value')],\n\t\t\t\t\t/** @type {Expression} */ (\n\t\t\t\t\t\tcontext.visit(\n\t\t\t\t\t\t\tb.assignment('=', /** @type {Pattern} */ (node.expression), b.id('$$value'))\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tif (get === set) {\n\t\t\t\tset = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @type {CallExpression} */\n\tlet call;\n\n\tif (property?.event) {\n\t\tcall = b.call(\n\t\t\t'$.bind_property',\n\t\t\tb.literal(node.name),\n\t\t\tb.literal(property.event),\n\t\t\tcontext.state.node,\n\t\t\tset ?? get,\n\t\t\tproperty.bidirectional && get\n\t\t);\n\t} else {\n\t\t// special cases\n\t\tswitch (node.name) {\n\t\t\t// window\n\t\t\tcase 'online':\n\t\t\t\tcall = b.call(`$.bind_online`, set ?? get);\n\t\t\t\tbreak;\n\n\t\t\tcase 'scrollX':\n\t\t\tcase 'scrollY':\n\t\t\t\tcall = b.call(\n\t\t\t\t\t'$.bind_window_scroll',\n\t\t\t\t\tb.literal(node.name === 'scrollX' ? 'x' : 'y'),\n\t\t\t\t\tget,\n\t\t\t\t\tset\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'innerWidth':\n\t\t\tcase 'innerHeight':\n\t\t\tcase 'outerWidth':\n\t\t\tcase 'outerHeight':\n\t\t\t\tcall = b.call('$.bind_window_size', b.literal(node.name), set ?? get);\n\t\t\t\tbreak;\n\n\t\t\t// document\n\t\t\tcase 'activeElement':\n\t\t\t\tcall = b.call('$.bind_active_element', set ?? get);\n\t\t\t\tbreak;\n\n\t\t\t// media\n\t\t\tcase 'muted':\n\t\t\t\tcall = b.call(`$.bind_muted`, context.state.node, get, set);\n\t\t\t\tbreak;\n\t\t\tcase 'paused':\n\t\t\t\tcall = b.call(`$.bind_paused`, context.state.node, get, set);\n\t\t\t\tbreak;\n\t\t\tcase 'volume':\n\t\t\t\tcall = b.call(`$.bind_volume`, context.state.node, get, set);\n\t\t\t\tbreak;\n\t\t\tcase 'playbackRate':\n\t\t\t\tcall = b.call(`$.bind_playback_rate`, context.state.node, get, set);\n\t\t\t\tbreak;\n\t\t\tcase 'currentTime':\n\t\t\t\tcall = b.call(`$.bind_current_time`, context.state.node, get, set);\n\t\t\t\tbreak;\n\t\t\tcase 'buffered':\n\t\t\t\tcall = b.call(`$.bind_buffered`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\t\t\tcase 'played':\n\t\t\t\tcall = b.call(`$.bind_played`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\t\t\tcase 'seekable':\n\t\t\t\tcall = b.call(`$.bind_seekable`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\t\t\tcase 'seeking':\n\t\t\t\tcall = b.call(`$.bind_seeking`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\t\t\tcase 'ended':\n\t\t\t\tcall = b.call(`$.bind_ended`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\t\t\tcase 'readyState':\n\t\t\t\tcall = b.call(`$.bind_ready_state`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\n\t\t\t// dimensions\n\t\t\tcase 'contentRect':\n\t\t\tcase 'contentBoxSize':\n\t\t\tcase 'borderBoxSize':\n\t\t\tcase 'devicePixelContentBoxSize':\n\t\t\t\tcall = b.call(\n\t\t\t\t\t'$.bind_resize_observer',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tb.literal(node.name),\n\t\t\t\t\tset ?? get\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'clientWidth':\n\t\t\tcase 'clientHeight':\n\t\t\tcase 'offsetWidth':\n\t\t\tcase 'offsetHeight':\n\t\t\t\tcall = b.call('$.bind_element_size', context.state.node, b.literal(node.name), set ?? get);\n\t\t\t\tbreak;\n\n\t\t\t// various\n\t\t\tcase 'value': {\n\t\t\t\tif (parent?.type === 'RegularElement' && parent.name === 'select') {\n\t\t\t\t\tcall = b.call(`$.bind_select_value`, context.state.node, get, set);\n\t\t\t\t} else {\n\t\t\t\t\tcall = b.call(`$.bind_value`, context.state.node, get, set);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'files':\n\t\t\t\tcall = b.call(`$.bind_files`, context.state.node, get, set);\n\t\t\t\tbreak;\n\n\t\t\tcase 'this':\n\t\t\t\tcall = build_bind_this(node.expression, context.state.node, context);\n\t\t\t\tbreak;\n\n\t\t\tcase 'textContent':\n\t\t\tcase 'innerHTML':\n\t\t\tcase 'innerText':\n\t\t\t\tcall = b.call(\n\t\t\t\t\t'$.bind_content_editable',\n\t\t\t\t\tb.literal(node.name),\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tget,\n\t\t\t\t\tset\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\t// checkbox/radio\n\t\t\tcase 'checked':\n\t\t\t\tcall = b.call(`$.bind_checked`, context.state.node, get, set);\n\t\t\t\tbreak;\n\n\t\t\tcase 'focused':\n\t\t\t\tcall = b.call(`$.bind_focused`, context.state.node, set ?? get);\n\t\t\t\tbreak;\n\n\t\t\tcase 'group': {\n\t\t\t\tconst indexes = node.metadata.parent_each_blocks.map((each) => {\n\t\t\t\t\t// if we have a keyed block with an index, the index is wrapped in a source\n\t\t\t\t\treturn each.metadata.keyed && each.index\n\t\t\t\t\t\t? b.call('$.get', each.metadata.index)\n\t\t\t\t\t\t: each.metadata.index;\n\t\t\t\t});\n\n\t\t\t\t// We need to additionally invoke the value attribute signal to register it as a dependency,\n\t\t\t\t// so that when the value is updated, the group binding is updated\n\t\t\t\tlet group_getter = get;\n\n\t\t\t\tif (parent?.type === 'RegularElement') {\n\t\t\t\t\tconst value = /** @type {any[]} */ (\n\t\t\t\t\t\t/** @type {AST.Attribute} */ (\n\t\t\t\t\t\t\tparent.attributes.find(\n\t\t\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\t\t\ta.type === 'Attribute' &&\n\t\t\t\t\t\t\t\t\ta.name === 'value' &&\n\t\t\t\t\t\t\t\t\t!is_text_attribute(a) &&\n\t\t\t\t\t\t\t\t\ta.value !== true\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)?.value\n\t\t\t\t\t);\n\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tgroup_getter = b.thunk(\n\t\t\t\t\t\t\tb.block([b.stmt(build_attribute_value(value, context).value), b.return(expression)])\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcall = b.call(\n\t\t\t\t\t'$.bind_group',\n\t\t\t\t\tnode.metadata.binding_group_name,\n\t\t\t\t\tb.array(indexes),\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tgroup_getter,\n\t\t\t\t\tset ?? get\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error('unknown binding ' + node.name);\n\t\t}\n\t}\n\n\tconst defer =\n\t\tnode.name !== 'this' &&\n\t\tparent.type === 'RegularElement' &&\n\t\tparent.attributes.find((a) => a.type === 'UseDirective');\n\n\tlet statement = defer ? b.stmt(b.call('$.effect', b.thunk(call))) : b.stmt(call);\n\n\tif (node.metadata.expression.is_async()) {\n\t\tstatement = b.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.run_after_blockers',\n\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\tb.thunk(b.block([statement]))\n\t\t\t)\n\t\t);\n\t}\n\n\t// Bindings need to happen after attribute updates, therefore after the render effect, and in order with events/actions.\n\t// bind:this is a special case as it's one-way and could influence the render effect.\n\tif (node.name === 'this') {\n\t\tcontext.state.init.push(statement);\n\t} else {\n\t\tif (defer) {\n\t\t\tcontext.state.init.push(statement);\n\t\t} else {\n\t\t\tcontext.state.after_update.push(statement);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/BlockStatement.js",
    "content": "/** @import { ArrowFunctionExpression, BlockStatement, Expression, FunctionDeclaration, FunctionExpression, Statement } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport { add_state_transformers } from './shared/declarations.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @param {BlockStatement} node\n * @param {ComponentContext} context\n */\nexport function BlockStatement(node, context) {\n\tadd_state_transformers(context);\n\tconst tracing = context.state.scope.tracing;\n\n\tif (tracing !== null) {\n\t\tconst parent =\n\t\t\t/** @type {ArrowFunctionExpression | FunctionDeclaration | FunctionExpression} */ (\n\t\t\t\tcontext.path.at(-1)\n\t\t\t);\n\n\t\tconst is_async = parent.async;\n\n\t\tconst call = b.call(\n\t\t\t'$.trace',\n\t\t\t/** @type {Expression} */ (tracing),\n\t\t\tb.thunk(b.block(node.body.map((n) => /** @type {Statement} */ (context.visit(n)))), is_async)\n\t\t);\n\n\t\treturn b.block([b.return(is_async ? b.await(call) : call)]);\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/BreakStatement.js",
    "content": "/** @import { BreakStatement } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {BreakStatement} node\n * @param {ComponentContext} context\n */\nexport function BreakStatement(node, context) {\n\tif (context.state.analysis.runes || !node.label || node.label.name !== '$') {\n\t\treturn;\n\t}\n\n\tconst in_reactive_statement =\n\t\tcontext.path[1].type === 'LabeledStatement' && context.path[1].label.name === '$';\n\n\tif (in_reactive_statement) {\n\t\treturn b.return();\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/CallExpression.js",
    "content": "/** @import { CallExpression, Expression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { dev, is_ignored } from '../../../../state.js';\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\nimport { should_proxy } from '../utils.js';\nimport { get_inspect_args } from '../../utils.js';\n\n/**\n * @param {CallExpression} node\n * @param {Context} context\n */\nexport function CallExpression(node, context) {\n\tconst rune = get_rune(node, context.state.scope);\n\n\tswitch (rune) {\n\t\tcase '$host':\n\t\t\treturn b.id('$$props.$$host');\n\n\t\tcase '$effect.tracking':\n\t\t\treturn b.call('$.effect_tracking');\n\n\t\t// transform state field assignments in constructors\n\t\tcase '$state':\n\t\tcase '$state.raw': {\n\t\t\tlet arg = node.arguments[0];\n\n\t\t\t/** @type {Expression | undefined} */\n\t\t\tlet value = undefined;\n\n\t\t\tif (arg) {\n\t\t\t\tvalue = /** @type {Expression} */ (context.visit(node.arguments[0]));\n\n\t\t\t\tif (\n\t\t\t\t\trune === '$state' &&\n\t\t\t\t\tshould_proxy(/** @type {Expression} */ (arg), context.state.scope)\n\t\t\t\t) {\n\t\t\t\t\tvalue = b.call('$.proxy', value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst callee = b.id('$.state', node.callee.loc);\n\t\t\treturn b.call(callee, value);\n\t\t}\n\n\t\tcase '$derived':\n\t\tcase '$derived.by': {\n\t\t\tlet fn = /** @type {Expression} */ (context.visit(node.arguments[0]));\n\n\t\t\treturn b.call('$.derived', rune === '$derived' ? b.thunk(fn) : fn);\n\t\t}\n\n\t\tcase '$state.eager':\n\t\t\treturn b.call(\n\t\t\t\t'$.eager',\n\t\t\t\tb.thunk(/** @type {Expression} */ (context.visit(node.arguments[0])))\n\t\t\t);\n\n\t\tcase '$state.snapshot':\n\t\t\treturn b.call(\n\t\t\t\t'$.snapshot',\n\t\t\t\t/** @type {Expression} */ (context.visit(node.arguments[0])),\n\t\t\t\tis_ignored(node, 'state_snapshot_uncloneable') && b.true\n\t\t\t);\n\n\t\tcase '$effect':\n\t\tcase '$effect.pre': {\n\t\t\tconst callee = rune === '$effect' ? '$.user_effect' : '$.user_pre_effect';\n\t\t\tconst func = /** @type {Expression} */ (context.visit(node.arguments[0]));\n\n\t\t\tconst expr = b.call(callee, /** @type {Expression} */ (func));\n\t\t\texpr.callee.loc = node.callee.loc; // ensure correct mapping\n\n\t\t\treturn expr;\n\t\t}\n\n\t\tcase '$effect.root':\n\t\t\treturn b.call(\n\t\t\t\t'$.effect_root',\n\t\t\t\t.../** @type {Expression[]} */ (node.arguments.map((arg) => context.visit(arg)))\n\t\t\t);\n\n\t\tcase '$effect.pending':\n\t\t\treturn b.call('$.eager', b.thunk(b.call('$.pending')));\n\n\t\tcase '$inspect':\n\t\tcase '$inspect().with':\n\t\t\treturn transform_inspect_rune(rune, node, context);\n\t}\n\n\tif (\n\t\tdev &&\n\t\tnode.callee.type === 'MemberExpression' &&\n\t\tnode.callee.object.type === 'Identifier' &&\n\t\tnode.callee.object.name === 'console' &&\n\t\tcontext.state.scope.get('console') === null &&\n\t\tnode.callee.property.type === 'Identifier' &&\n\t\t['debug', 'dir', 'error', 'group', 'groupCollapsed', 'info', 'log', 'trace', 'warn'].includes(\n\t\t\tnode.callee.property.name\n\t\t) &&\n\t\tnode.arguments.some(\n\t\t\t(arg) => arg.type === 'SpreadElement' || context.state.scope.evaluate(arg).has_unknown\n\t\t)\n\t) {\n\t\treturn b.call(\n\t\t\tnode.callee,\n\t\t\tb.spread(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.log_if_contains_state',\n\t\t\t\t\tb.literal(node.callee.property.name),\n\t\t\t\t\t.../** @type {Expression[]} */ (node.arguments.map((arg) => context.visit(arg)))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tcontext.next();\n}\n\n/**\n * @param {'$inspect' | '$inspect().with'} rune\n * @param {CallExpression} node\n * @param {Context} context\n */\nfunction transform_inspect_rune(rune, node, context) {\n\tif (!dev) return b.empty;\n\n\tconst { args, inspector } = get_inspect_args(rune, node, context.visit);\n\n\t// by passing an arrow function, the log appears to come from the `$inspect` callsite\n\t// rather than the `inspect.js` file containing the utility\n\tconst id = b.id('$$args');\n\tconst fn = b.arrow([b.rest(id)], b.call(inspector, b.spread(id)));\n\n\treturn b.call('$.inspect', b.thunk(b.array(args)), fn, rune === '$inspect' && b.true);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js",
    "content": "/** @import { CallExpression, ClassBody, ClassDeclaration, ClassExpression, MethodDefinition, PropertyDefinition, StaticBlock } from 'estree' */\n/** @import { StateField } from '#compiler' */\n/** @import { Context } from '../types' */\nimport * as b from '#compiler/builders';\nimport { dev } from '../../../../state.js';\nimport { get_parent } from '../../../../utils/ast.js';\nimport { get_name } from '../../../nodes.js';\n\n/**\n * @param {ClassBody} node\n * @param {Context} context\n */\nexport function ClassBody(node, context) {\n\tconst state_fields = context.state.analysis.classes.get(node);\n\n\tif (!state_fields) {\n\t\t// in legacy mode, do nothing\n\t\tcontext.next();\n\t\treturn;\n\t}\n\n\t/** @type {Array<MethodDefinition | PropertyDefinition | StaticBlock>} */\n\tconst body = [];\n\n\tconst child_state = { ...context.state, state_fields };\n\n\tfor (const [name, field] of state_fields) {\n\t\tif (name[0] === '#') {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// insert backing fields for stuff declared in the constructor\n\t\tif (field.node.type === 'AssignmentExpression') {\n\t\t\tconst member = b.member(b.this, field.key);\n\n\t\t\tconst should_proxy = field.type === '$state' && true; // TODO\n\n\t\t\tconst key = b.key(name);\n\n\t\t\tbody.push(\n\t\t\t\tb.prop_def(field.key, null),\n\n\t\t\t\tb.method('get', key, [], [b.return(b.call('$.get', member))]),\n\n\t\t\t\tb.method(\n\t\t\t\t\t'set',\n\t\t\t\t\tkey,\n\t\t\t\t\t[b.id('value')],\n\t\t\t\t\t[b.stmt(b.call('$.set', member, b.id('value'), should_proxy && b.true))]\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tconst declaration = /** @type {ClassDeclaration | ClassExpression} */ (\n\t\tget_parent(context.path, -1)\n\t);\n\n\t// Replace parts of the class body\n\tfor (const definition of node.body) {\n\t\tif (definition.type !== 'PropertyDefinition') {\n\t\t\tbody.push(\n\t\t\t\t/** @type {MethodDefinition | StaticBlock} */ (context.visit(definition, child_state))\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst name = get_name(definition.key);\n\t\tconst field = name && /** @type {StateField} */ (state_fields.get(name));\n\n\t\tif (!field) {\n\t\t\tbody.push(/** @type {PropertyDefinition} */ (context.visit(definition, child_state)));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (name[0] === '#') {\n\t\t\tlet value = definition.value\n\t\t\t\t? /** @type {CallExpression} */ (context.visit(definition.value, child_state))\n\t\t\t\t: undefined;\n\n\t\t\tif (dev && field.node === definition) {\n\t\t\t\tvalue = b.call('$.tag', value, b.literal(`${declaration.id?.name ?? '[class]'}.${name}`));\n\t\t\t}\n\n\t\t\tbody.push(b.prop_def(definition.key, value));\n\t\t} else if (field.node === definition) {\n\t\t\tlet call = /** @type {CallExpression} */ (context.visit(field.value, child_state));\n\n\t\t\tif (dev) {\n\t\t\t\tcall = b.call('$.tag', call, b.literal(`${declaration.id?.name ?? '[class]'}.${name}`));\n\t\t\t}\n\t\t\tconst member = b.member(b.this, field.key);\n\t\t\tconst should_proxy = field.type === '$state' && true; // TODO\n\n\t\t\tbody.push(\n\t\t\t\tb.prop_def(field.key, call),\n\n\t\t\t\tb.method('get', definition.key, [], [b.return(b.call('$.get', member))]),\n\n\t\t\t\tb.method(\n\t\t\t\t\t'set',\n\t\t\t\t\tdefinition.key,\n\t\t\t\t\t[b.id('value')],\n\t\t\t\t\t[b.stmt(b.call('$.set', member, b.id('value'), should_proxy && b.true))]\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\treturn { ...node, body };\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/Comment.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n\n/**\n * @param {AST.Comment} node\n * @param {ComponentContext} context\n */\nexport function Comment(node, context) {\n\t// We'll only get here if comments are not filtered out, which they are unless preserveComments is true\n\tcontext.state.template.push_comment(node.data);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/Component.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { build_component } from './shared/component.js';\n\n/**\n * @param {AST.Component} node\n * @param {ComponentContext} context\n */\nexport function Component(node, context) {\n\tconst component = build_component(node, node.name, node.name_loc, context);\n\tcontext.state.init.push(component);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.js",
    "content": "/** @import { Expression, Identifier, Pattern } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n/** @import { ExpressionMetadata } from '../../../nodes.js' */\nimport { dev } from '../../../../state.js';\nimport { extract_identifiers } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { create_derived } from '../utils.js';\nimport { get_value } from './shared/declarations.js';\nimport { build_expression } from './shared/utils.js';\n\n/**\n * @param {AST.ConstTag} node\n * @param {ComponentContext} context\n */\nexport function ConstTag(node, context) {\n\tconst declaration = node.declaration.declarations[0];\n\t// TODO we can almost certainly share some code with $derived(...)\n\tif (declaration.id.type === 'Identifier') {\n\t\tconst init = build_expression(context, declaration.init, node.metadata.expression);\n\n\t\tlet expression = create_derived(context.state, init, node.metadata.expression.has_await);\n\n\t\tif (dev) {\n\t\t\texpression = b.call('$.tag', expression, b.literal(declaration.id.name));\n\t\t}\n\n\t\tcontext.state.transform[declaration.id.name] = { read: get_value };\n\n\t\tadd_const_declaration(\n\t\t\tcontext.state,\n\t\t\tdeclaration.id,\n\t\t\texpression,\n\t\t\tnode.metadata.expression,\n\t\t\tcontext.state.scope.get_bindings(declaration)\n\t\t);\n\t} else {\n\t\tconst identifiers = extract_identifiers(declaration.id);\n\t\tconst tmp = b.id(context.state.scope.generate('computed_const'));\n\n\t\tconst transform = { ...context.state.transform };\n\n\t\t// Make all identifiers that are declared within the following computed regular\n\t\t// variables, as they are not signals in that context yet\n\t\tfor (const node of identifiers) {\n\t\t\tdelete transform[node.name];\n\t\t}\n\n\t\tconst child_state = /** @type {ComponentContext['state']} */ ({\n\t\t\t...context.state,\n\t\t\ttransform\n\t\t});\n\n\t\t// TODO optimise the simple `{ x } = y` case — we can just return `y`\n\t\t// instead of destructuring it only to return a new object\n\t\tconst init = build_expression(\n\t\t\t{ ...context, state: child_state },\n\t\t\tdeclaration.init,\n\t\t\tnode.metadata.expression\n\t\t);\n\n\t\tconst block = b.block([\n\t\t\tb.const(/** @type {Pattern} */ (context.visit(declaration.id, child_state)), init),\n\t\t\tb.return(b.object(identifiers.map((node) => b.prop('init', node, node))))\n\t\t]);\n\n\t\tlet expression = create_derived(context.state, block, node.metadata.expression.has_await);\n\n\t\tif (dev) {\n\t\t\texpression = b.call('$.tag', expression, b.literal('[@const]'));\n\t\t}\n\n\t\tadd_const_declaration(\n\t\t\tcontext.state,\n\t\t\ttmp,\n\t\t\texpression,\n\t\t\tnode.metadata.expression,\n\t\t\tcontext.state.scope.get_bindings(declaration)\n\t\t);\n\n\t\tfor (const node of identifiers) {\n\t\t\tcontext.state.transform[node.name] = {\n\t\t\t\tread: (node) => b.member(b.call('$.get', tmp), node)\n\t\t\t};\n\t\t}\n\t}\n}\n\n/**\n * @param {ComponentContext['state']} state\n * @param {Identifier} id\n * @param {Expression} expression\n * @param {ExpressionMetadata} metadata\n * @param {import('#compiler').Binding[]} bindings\n */\nfunction add_const_declaration(state, id, expression, metadata, bindings) {\n\t// we need to eagerly evaluate the expression in order to hit any\n\t// 'Cannot access x before initialization' errors\n\tconst after = dev ? [b.stmt(b.call('$.get', id))] : [];\n\n\tconst has_await = metadata.has_await;\n\tconst blockers = [...metadata.dependencies]\n\t\t.map((dep) => dep.blocker)\n\t\t.filter((b) => b !== null && b.object !== state.async_consts?.id);\n\n\tif (has_await || state.async_consts || blockers.length > 0) {\n\t\tconst run = (state.async_consts ??= {\n\t\t\tid: b.id(state.scope.generate('promises')),\n\t\t\tthunks: []\n\t\t});\n\n\t\tstate.consts.push(b.let(id));\n\n\t\tconst assignment = b.assignment('=', id, expression);\n\t\tconst body = after.length === 0 ? assignment : b.block([b.stmt(assignment), ...after]);\n\n\t\tif (blockers.length === 1) {\n\t\t\trun.thunks.push(b.thunk(b.member(/** @type {Expression} */ (blockers[0]), 'promise')));\n\t\t} else if (blockers.length > 0) {\n\t\t\trun.thunks.push(b.thunk(b.call('$.wait', b.array(blockers))));\n\t\t}\n\n\t\trun.thunks.push(b.thunk(body, has_await));\n\n\t\tconst blocker = b.member(run.id, b.literal(run.thunks.length - 1), true);\n\n\t\tfor (const binding of bindings) {\n\t\t\tbinding.blocker = blocker;\n\t\t}\n\t} else {\n\t\tstate.consts.push(b.const(id, expression));\n\t\tstate.consts.push(...after);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/DebugTag.js",
    "content": "/** @import { Expression} from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {AST.DebugTag} node\n * @param {ComponentContext} context\n */\nexport function DebugTag(node, context) {\n\tconst object = b.object(\n\t\tnode.identifiers.map((identifier) => {\n\t\t\tconst visited = b.call('$.snapshot', /** @type {Expression} */ (context.visit(identifier)));\n\n\t\t\treturn b.prop(\n\t\t\t\t'init',\n\t\t\t\tidentifier,\n\t\t\t\tcontext.state.analysis.runes ? visited : b.call('$.untrack', b.thunk(visited))\n\t\t\t);\n\t\t})\n\t);\n\n\tconst call = b.call('console.log', object);\n\n\tcontext.state.init.push(\n\t\tb.stmt(b.call('$.template_effect', b.thunk(b.block([b.stmt(call), b.debugger]))))\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/EachBlock.js",
    "content": "/** @import { BlockStatement, Expression, Identifier, Pattern, Statement } from 'estree' */\n/** @import { AST, Binding } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n/** @import { Scope } from '../../../scope' */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE\n} from '../../../../../constants.js';\nimport { dev } from '../../../../state.js';\nimport { extract_paths, object } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { get_value } from './shared/declarations.js';\nimport { build_expression, add_svelte_meta } from './shared/utils.js';\n\n/**\n * @param {AST.EachBlock} node\n * @param {ComponentContext} context\n */\nexport function EachBlock(node, context) {\n\tconst each_node_meta = node.metadata;\n\n\t// expression should be evaluated in the parent scope, not the scope\n\t// created by the each block itself\n\tconst parent_scope_state = {\n\t\t...context.state,\n\t\tscope: /** @type {Scope} */ (context.state.scope.parent)\n\t};\n\n\tconst collection = build_expression(\n\t\t{\n\t\t\t...context,\n\t\t\tstate: parent_scope_state\n\t\t},\n\t\tnode.expression,\n\t\tnode.metadata.expression\n\t);\n\n\tif (!each_node_meta.is_controlled) {\n\t\tcontext.state.template.push_comment();\n\t}\n\n\tlet flags = 0;\n\n\tif (node.metadata.keyed && node.index) {\n\t\tflags |= EACH_INDEX_REACTIVE;\n\t}\n\n\tconst key_is_item =\n\t\tnode.key?.type === 'Identifier' &&\n\t\tnode.context?.type === 'Identifier' &&\n\t\tnode.context?.name === node.key.name;\n\n\t// if the each block expression references a store subscription, we need\n\t// to use mutable stores internally\n\tlet uses_store;\n\n\tfor (const binding of node.metadata.expression.dependencies) {\n\t\tif (binding.kind === 'store_sub') {\n\t\t\tuses_store = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tfor (const binding of node.metadata.expression.dependencies) {\n\t\t// if the expression doesn't reference any external state, we don't need to\n\t\t// create a source for the item. TODO cover more cases (e.g. `x.filter(y)`\n\t\t// should also qualify if `y` doesn't reference state, and non-state\n\t\t// bindings should also be fine\n\t\tif (binding.scope.function_depth >= context.state.scope.function_depth) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!context.state.analysis.runes || !key_is_item || uses_store) {\n\t\t\tflags |= EACH_ITEM_REACTIVE;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (context.state.analysis.runes && !uses_store) {\n\t\tflags |= EACH_ITEM_IMMUTABLE;\n\t}\n\n\t// Since `animate:` can only appear on elements that are the sole child of a keyed each block,\n\t// we can determine at compile time whether the each block is animated or not (in which\n\t// case it should measure animated elements before and after reconciliation).\n\tif (\n\t\tnode.key &&\n\t\tnode.body.nodes.some((child) => {\n\t\t\tif (child.type !== 'RegularElement' && child.type !== 'SvelteElement') return false;\n\t\t\treturn child.attributes.some((attr) => attr.type === 'AnimateDirective');\n\t\t})\n\t) {\n\t\tflags |= EACH_IS_ANIMATED;\n\t}\n\n\tif (each_node_meta.is_controlled) {\n\t\tflags |= EACH_IS_CONTROLLED;\n\t}\n\n\t// If the array is a store expression, we need to invalidate it when the array is changed.\n\tlet store_to_invalidate = '';\n\tfor (const binding of node.metadata.expression.dependencies) {\n\t\tif (binding.kind === 'store_sub') {\n\t\t\tstore_to_invalidate = binding.node.name;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t/** @type {Identifier | null} */\n\tlet collection_id = null;\n\n\t// Check if inner scope shadows something from outer scope.\n\t// This is necessary because we need access to the array expression of the each block\n\t// in the inner scope if bindings are used, in order to invalidate the array.\n\tfor (const [name] of context.state.scope.declarations) {\n\t\tif (context.state.scope.parent?.get(name) != null) {\n\t\t\tcollection_id = context.state.scope.root.unique('$$array');\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst child_state = {\n\t\t...context.state,\n\t\ttransform: { ...context.state.transform },\n\t\tstore_to_invalidate\n\t};\n\n\t/** The state used when generating the key function, if necessary */\n\tconst key_state = {\n\t\t...context.state,\n\t\ttransform: { ...context.state.transform }\n\t};\n\n\t// We need to generate a unique identifier in case there's a bind:group below\n\t// which needs a reference to the index\n\tconst index =\n\t\teach_node_meta.contains_group_binding || !node.index ? each_node_meta.index : b.id(node.index);\n\tconst item = node.context?.type === 'Identifier' ? node.context : b.id('$$item');\n\n\tlet uses_index = each_node_meta.contains_group_binding;\n\tlet key_uses_index = false;\n\n\tif (node.index) {\n\t\tchild_state.transform[node.index] = {\n\t\t\tread: (node) => {\n\t\t\t\tuses_index = true;\n\t\t\t\treturn (flags & EACH_INDEX_REACTIVE) !== 0 ? get_value(node) : node;\n\t\t\t}\n\t\t};\n\n\t\tkey_state.transform[node.index] = {\n\t\t\tread: (node) => {\n\t\t\t\tkey_uses_index = true;\n\t\t\t\treturn node;\n\t\t\t}\n\t\t};\n\t}\n\n\t/** @type {Statement[]} */\n\tconst declarations = [];\n\n\tconst invalidate_store = store_to_invalidate\n\t\t? b.call('$.invalidate_store', b.id('$$stores'), b.literal(store_to_invalidate))\n\t\t: undefined;\n\n\t/** @type {Expression[]} */\n\tconst sequence = [];\n\n\tif (!context.state.analysis.runes) {\n\t\t/** @type {Set<Identifier>} */\n\t\tconst transitive_deps = new Set();\n\n\t\tif (collection_id) {\n\t\t\ttransitive_deps.add(collection_id);\n\t\t\tchild_state.transform[collection_id.name] = { read: b.call };\n\t\t} else {\n\t\t\tfor (const binding of each_node_meta.transitive_deps) {\n\t\t\t\ttransitive_deps.add(binding.node);\n\t\t\t}\n\t\t}\n\n\t\tfor (const block of collect_parent_each_blocks(context)) {\n\t\t\tfor (const binding of block.metadata.transitive_deps) {\n\t\t\t\ttransitive_deps.add(binding.node);\n\t\t\t}\n\t\t}\n\n\t\tif (transitive_deps.size > 0) {\n\t\t\tconst invalidate = b.call(\n\t\t\t\t'$.invalidate_inner_signals',\n\t\t\t\tb.thunk(\n\t\t\t\t\tb.sequence(\n\t\t\t\t\t\t[...transitive_deps].map(\n\t\t\t\t\t\t\t(node) => /** @type {Expression} */ (context.visit({ ...node }, child_state))\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tsequence.push(invalidate);\n\t\t}\n\t}\n\n\tif (invalidate_store) {\n\t\tsequence.push(invalidate_store);\n\t}\n\n\tif (node.context?.type === 'Identifier') {\n\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(node.context.name));\n\n\t\tchild_state.transform[node.context.name] = {\n\t\t\tread: (node) => {\n\t\t\t\tif (binding.reassigned) {\n\t\t\t\t\t// we need to do `array[$$index]` instead of `$$item` or whatever\n\t\t\t\t\t// TODO 6.0 this only applies in legacy mode, reassignments are\n\t\t\t\t\t// forbidden in runes mode\n\t\t\t\t\treturn b.member(\n\t\t\t\t\t\tcollection_id ? b.call(collection_id) : collection,\n\t\t\t\t\t\t(flags & EACH_INDEX_REACTIVE) !== 0 ? get_value(index) : index,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (flags & EACH_ITEM_REACTIVE) !== 0 ? get_value(node) : node;\n\t\t\t},\n\t\t\tassign: (_, value) => {\n\t\t\t\tuses_index = true;\n\n\t\t\t\tconst left = b.member(\n\t\t\t\t\tcollection_id ? b.call(collection_id) : collection,\n\t\t\t\t\t(flags & EACH_INDEX_REACTIVE) !== 0 ? get_value(index) : index,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\treturn b.sequence([b.assignment('=', left, value), ...sequence]);\n\t\t\t},\n\t\t\tmutate: (_, mutation) => {\n\t\t\t\tuses_index = true;\n\t\t\t\treturn b.sequence([mutation, ...sequence]);\n\t\t\t}\n\t\t};\n\n\t\tdelete key_state.transform[node.context.name];\n\t} else if (node.context) {\n\t\tconst unwrapped = (flags & EACH_ITEM_REACTIVE) !== 0 ? b.call('$.get', item) : item;\n\n\t\tconst { inserts, paths } = extract_paths(node.context, unwrapped);\n\n\t\tfor (const { id, value } of inserts) {\n\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\tchild_state.transform[id.name] = { read: get_value };\n\n\t\t\tconst expression = /** @type {Expression} */ (context.visit(b.thunk(value), child_state));\n\t\t\tdeclarations.push(b.var(id, b.call('$.derived', expression)));\n\t\t}\n\n\t\tfor (const path of paths) {\n\t\t\tconst name = /** @type {Identifier} */ (path.node).name;\n\t\t\tconst needs_derived = path.has_default_value; // to ensure that default value is only called once\n\n\t\t\tconst fn = b.thunk(/** @type {Expression} */ (context.visit(path.expression, child_state)));\n\n\t\t\tdeclarations.push(b.let(path.node, needs_derived ? b.call('$.derived_safe_equal', fn) : fn));\n\n\t\t\tconst read = needs_derived ? get_value : b.call;\n\n\t\t\tchild_state.transform[name] = {\n\t\t\t\tread,\n\t\t\t\tassign: (_, value) => {\n\t\t\t\t\tconst left = /** @type {Pattern} */ (path.update_expression);\n\t\t\t\t\treturn b.sequence([b.assignment('=', left, value), ...sequence]);\n\t\t\t\t},\n\t\t\t\tmutate: (_, mutation) => {\n\t\t\t\t\treturn b.sequence([mutation, ...sequence]);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// we need to eagerly evaluate the expression in order to hit any\n\t\t\t// 'Cannot access x before initialization' errors\n\t\t\tif (dev) {\n\t\t\t\tdeclarations.push(b.stmt(read(b.id(name))));\n\t\t\t}\n\n\t\t\tdelete key_state.transform[name];\n\t\t}\n\t}\n\n\tconst block = /** @type {BlockStatement} */ (context.visit(node.body, child_state));\n\n\t/** @type {Expression} */\n\tlet key_function = b.id('$.index');\n\n\tif (node.metadata.keyed) {\n\t\tconst pattern = /** @type {Pattern} */ (node.context); // can only be keyed when a context is provided\n\t\tconst expression = /** @type {Expression} */ (\n\t\t\tcontext.visit(/** @type {Expression} */ (node.key), key_state)\n\t\t);\n\n\t\tkey_function = b.arrow(key_uses_index ? [pattern, index] : [pattern], expression);\n\t}\n\n\tif (node.index && each_node_meta.contains_group_binding) {\n\t\t// We needed to create a unique identifier for the index above, but we want to use the\n\t\t// original index name in the template, therefore create another binding\n\t\tdeclarations.push(b.let(node.index, index));\n\t}\n\n\tconst has_await = node.metadata.expression.has_await;\n\n\tconst get_collection = b.thunk(collection, has_await);\n\tconst thunk = has_await ? b.thunk(b.call('$.get', b.id('$$collection'))) : get_collection;\n\n\tconst render_args = [b.id('$$anchor'), item];\n\tif (uses_index || collection_id) render_args.push(index);\n\tif (collection_id) render_args.push(collection_id);\n\n\t/** @type {Expression[]} */\n\tconst args = [\n\t\tcontext.state.node,\n\t\tb.literal(flags),\n\t\tthunk,\n\t\tkey_function,\n\t\tb.arrow(render_args, b.block(declarations.concat(block.body)))\n\t];\n\n\tif (node.fallback) {\n\t\targs.push(\n\t\t\tb.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(node.fallback)))\n\t\t);\n\t}\n\n\tconst statements = [add_svelte_meta(b.call('$.each', ...args), node, 'each')];\n\n\tif (node.metadata.expression.is_async()) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\t\thas_await ? b.array([get_collection]) : b.void0,\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\thas_await ? [context.state.node, b.id('$$collection')] : [context.state.node],\n\t\t\t\t\t\tb.block(statements)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(...statements);\n\t}\n}\n\n/**\n * @param {ComponentContext} context\n */\nfunction collect_parent_each_blocks(context) {\n\treturn /** @type {AST.EachBlock[]} */ (context.path.filter((node) => node.type === 'EachBlock'));\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/ExportNamedDeclaration.js",
    "content": "/** @import { ExportNamedDeclaration } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {ExportNamedDeclaration} node\n * @param {ComponentContext} context\n */\nexport function ExportNamedDeclaration(node, context) {\n\tif (context.state.is_instance) {\n\t\tif (node.declaration) {\n\t\t\treturn context.visit(node.declaration);\n\t\t}\n\n\t\treturn b.empty;\n\t}\n\n\treturn context.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/ExpressionStatement.js",
    "content": "/** @import { ExpressionStatement } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\n\n/**\n * @param {ExpressionStatement} node\n * @param {ComponentContext} context\n */\nexport function ExpressionStatement(node, context) {\n\tif (node.expression.type === 'CallExpression') {\n\t\tconst rune = get_rune(node.expression, context.state.scope);\n\n\t\tif (rune === '$inspect.trace') {\n\t\t\treturn b.empty;\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/ForOfStatement.js",
    "content": "/** @import { Expression, ForOfStatement, Pattern, Statement, VariableDeclaration } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { dev, is_ignored } from '../../../../state.js';\n\n/**\n * @param {ForOfStatement} node\n * @param {ComponentContext} context\n */\nexport function ForOfStatement(node, context) {\n\tif (\n\t\tnode.await &&\n\t\tdev &&\n\t\t!is_ignored(node, 'await_reactivity_loss') &&\n\t\tcontext.state.options.experimental.async\n\t) {\n\t\tconst left = /** @type {VariableDeclaration | Pattern} */ (context.visit(node.left));\n\t\tconst argument = /** @type {Expression} */ (context.visit(node.right));\n\t\tconst body = /** @type {Statement} */ (context.visit(node.body));\n\t\tconst right = b.call('$.for_await_track_reactivity_loss', argument);\n\t\treturn b.for_of(left, right, body, true);\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/Fragment.js",
    "content": "/** @import { Expression, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentClientTransformState, ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { TEMPLATE_FRAGMENT, TEMPLATE_USE_IMPORT_NODE } from '../../../../../constants.js';\nimport { clean_nodes, infer_namespace } from '../../utils.js';\nimport { transform_template } from '../transform-template/index.js';\nimport { Template } from '../transform-template/template.js';\nimport { process_children } from './shared/fragment.js';\nimport { build_render_statement, Memoizer } from './shared/utils.js';\n\n/**\n * @param {AST.Fragment} node\n * @param {ComponentContext} context\n */\nexport function Fragment(node, context) {\n\t// Creates a new block which looks roughly like this:\n\t// ```js\n\t// // hoisted:\n\t// const block_name = $.from_html(`...`);\n\t//\n\t// // for the main block:\n\t// const id = block_name();\n\t// // init stuff and possibly render effect\n\t// $.append($$anchor, id);\n\t// ```\n\t// Adds the hoisted parts to `context.state.hoisted` and returns the statements of the main block.\n\n\tconst parent = context.path.at(-1) ?? node;\n\n\tconst namespace = infer_namespace(context.state.metadata.namespace, parent, node.nodes);\n\n\tconst { hoisted, trimmed, is_standalone, is_text_first } = clean_nodes(\n\t\tparent,\n\t\tnode.nodes,\n\t\tcontext.path,\n\t\tnamespace,\n\t\tcontext.state,\n\t\tcontext.state.preserve_whitespace,\n\t\tcontext.state.options.preserveComments\n\t);\n\n\tif (hoisted.length === 0 && trimmed.length === 0) {\n\t\treturn b.block([]);\n\t}\n\n\tconst is_single_element = trimmed.length === 1 && trimmed[0].type === 'RegularElement';\n\tconst is_single_child_not_needing_template =\n\t\ttrimmed.length === 1 &&\n\t\t(trimmed[0].type === 'SvelteFragment' ||\n\t\t\ttrimmed[0].type === 'TitleElement' ||\n\t\t\t(trimmed[0].type === 'IfBlock' &&\n\t\t\t\ttrimmed[0].elseif &&\n\t\t\t\t/** @type {AST.IfBlock} */ (parent).metadata.flattened?.includes(trimmed[0])));\n\tconst template_name = context.state.scope.root.unique('root'); // TODO infer name from parent\n\n\t/** @type {Statement[]} */\n\tconst body = [];\n\n\t/** @type {Statement | undefined} */\n\tlet close = undefined;\n\n\t/** @type {ComponentClientTransformState} */\n\tconst state = {\n\t\t...context.state,\n\t\tis_standalone,\n\t\tinit: [],\n\t\tsnippets: [],\n\t\tconsts: [],\n\t\tlet_directives: [],\n\t\tupdate: [],\n\t\tafter_update: [],\n\t\tmemoizer: new Memoizer(),\n\t\ttemplate: new Template(),\n\t\ttransform: { ...context.state.transform },\n\t\tmetadata: {\n\t\t\tnamespace,\n\t\t\tbound_contenteditable: context.state.metadata.bound_contenteditable\n\t\t},\n\t\tasync_consts: undefined\n\t};\n\n\tfor (const node of hoisted) {\n\t\tcontext.visit(node, state);\n\t}\n\n\tif (is_single_element) {\n\t\tconst element = /** @type {AST.RegularElement} */ (trimmed[0]);\n\n\t\tconst id = b.id(context.state.scope.generate(element.name), element.name_loc);\n\n\t\tcontext.visit(element, {\n\t\t\t...state,\n\t\t\tnode: id\n\t\t});\n\n\t\tlet flags = state.template.needs_import_node ? TEMPLATE_USE_IMPORT_NODE : undefined;\n\n\t\tconst template = transform_template(state, namespace, flags);\n\t\tstate.hoisted.push(b.var(template_name, template));\n\n\t\tstate.init.unshift(b.var(id, b.call(template_name)));\n\t\tclose = b.stmt(b.call('$.append', b.id('$$anchor'), id));\n\t} else if (is_single_child_not_needing_template) {\n\t\tcontext.visit(trimmed[0], state);\n\t} else if (trimmed.length === 1 && trimmed[0].type === 'Text') {\n\t\tconst id = b.id(context.state.scope.generate('text'));\n\t\tstate.init.unshift(b.var(id, b.call('$.text', b.literal(trimmed[0].data))));\n\t\tclose = b.stmt(b.call('$.append', b.id('$$anchor'), id));\n\t} else if (trimmed.length > 0) {\n\t\tconst id = b.id(context.state.scope.generate('fragment'));\n\n\t\tconst use_space_template =\n\t\t\ttrimmed.some((node) => node.type === 'ExpressionTag') &&\n\t\t\ttrimmed.every((node) => node.type === 'Text' || node.type === 'ExpressionTag');\n\n\t\tif (use_space_template) {\n\t\t\t// special case — we can use `$.text` instead of creating a unique template\n\t\t\tconst id = b.id(context.state.scope.generate('text'));\n\n\t\t\tprocess_children(trimmed, () => id, false, {\n\t\t\t\t...context,\n\t\t\t\tstate\n\t\t\t});\n\n\t\t\tstate.init.unshift(b.var(id, b.call('$.text')));\n\t\t\tclose = b.stmt(b.call('$.append', b.id('$$anchor'), id));\n\t\t} else if (is_standalone) {\n\t\t\t// no need to create a template, we can just use the existing block's anchor\n\t\t\tprocess_children(trimmed, () => b.id('$$anchor'), false, {\n\t\t\t\t...context,\n\t\t\t\tstate\n\t\t\t});\n\t\t} else {\n\t\t\t/** @type {(is_text: boolean) => Expression} */\n\t\t\tconst expression = (is_text) => b.call('$.first_child', id, is_text && b.true);\n\n\t\t\tprocess_children(trimmed, expression, false, { ...context, state });\n\n\t\t\tlet flags = TEMPLATE_FRAGMENT;\n\n\t\t\tif (state.template.needs_import_node) {\n\t\t\t\tflags |= TEMPLATE_USE_IMPORT_NODE;\n\t\t\t}\n\n\t\t\tif (state.template.nodes.length === 1 && state.template.nodes[0].type === 'comment') {\n\t\t\t\t// special case — we can use `$.comment` instead of creating a unique template\n\t\t\t\tstate.init.unshift(b.var(id, b.call('$.comment')));\n\t\t\t} else {\n\t\t\t\tconst template = transform_template(state, namespace, flags);\n\t\t\t\tstate.hoisted.push(b.var(template_name, template));\n\n\t\t\t\tstate.init.unshift(b.var(id, b.call(template_name)));\n\t\t\t}\n\n\t\t\tclose = b.stmt(b.call('$.append', b.id('$$anchor'), id));\n\t\t}\n\t}\n\n\tbody.push(...state.snippets, ...state.let_directives, ...state.consts);\n\n\tif (state.async_consts && state.async_consts.thunks.length > 0) {\n\t\tbody.push(b.var(state.async_consts.id, b.call('$.run', b.array(state.async_consts.thunks))));\n\t}\n\n\tif (is_text_first) {\n\t\t// skip over inserted comment\n\t\tbody.push(b.stmt(b.call('$.next')));\n\t}\n\n\tbody.push(...state.init);\n\n\tif (state.update.length > 0) {\n\t\tbody.push(build_render_statement(state));\n\t}\n\n\tbody.push(...state.after_update);\n\n\tif (close !== undefined) {\n\t\t// It's important that close is the last statement in the block, as any previous statements\n\t\t// could contain element insertions into the template, which the close statement needs to\n\t\t// know of when constructing the list of current inner elements.\n\t\tbody.push(close);\n\t}\n\n\treturn b.block(body);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/FunctionDeclaration.js",
    "content": "/** @import { FunctionDeclaration } from 'estree' */\n/** @import { ComponentContext } from '../types' */\n\n/**\n * @param {FunctionDeclaration} node\n * @param {ComponentContext} context\n */\nexport function FunctionDeclaration(node, context) {\n\tconst state = { ...context.state, in_constructor: false, in_derived: false };\n\n\tcontext.next(state);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/FunctionExpression.js",
    "content": "/** @import { FunctionExpression } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport { visit_function } from './shared/function.js';\n\n/**\n * @param {FunctionExpression} node\n * @param {ComponentContext} context\n */\nexport function FunctionExpression(node, context) {\n\treturn visit_function(node, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/HtmlTag.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { is_ignored } from '../../../../state.js';\nimport * as b from '#compiler/builders';\nimport { build_expression } from './shared/utils.js';\n\n/**\n * @param {AST.HtmlTag} node\n * @param {ComponentContext} context\n */\nexport function HtmlTag(node, context) {\n\tconst is_controlled = node.metadata.is_controlled;\n\n\tif (!is_controlled) {\n\t\tcontext.state.template.push_comment();\n\t}\n\n\tconst has_await = node.metadata.expression.has_await;\n\tconst has_blockers = node.metadata.expression.has_blockers();\n\n\tconst expression = build_expression(context, node.expression, node.metadata.expression);\n\tconst html = has_await ? b.call('$.get', b.id('$$html')) : expression;\n\n\t// When is_controlled, the parent node already provides the correct namespace,\n\t// so is_svg/is_mathml are only needed for the non-controlled path's wrapper element\n\tconst is_svg = !is_controlled && context.state.metadata.namespace === 'svg';\n\tconst is_mathml = !is_controlled && context.state.metadata.namespace === 'mathml';\n\n\tconst statement = b.stmt(\n\t\tb.call(\n\t\t\t'$.html',\n\t\t\tcontext.state.node,\n\t\t\tb.thunk(html),\n\t\t\tis_controlled && b.true,\n\t\t\tis_svg && b.true,\n\t\t\tis_mathml && b.true,\n\t\t\tis_ignored(node, 'hydration_html_changed') && b.true\n\t\t)\n\t);\n\n\t// push into init, so that bindings run afterwards, which might trigger another run and override hydration\n\tif (has_await || has_blockers) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\t\thas_await ? b.array([b.thunk(expression, true)]) : b.void0,\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\thas_await ? [context.state.node, b.id('$$html')] : [context.state.node],\n\t\t\t\t\t\tb.block([statement])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(statement);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/Identifier.js",
    "content": "/** @import { Identifier, Node } from 'estree' */\n/** @import { Context } from '../types' */\nimport is_reference from 'is-reference';\nimport * as b from '#compiler/builders';\nimport { build_getter } from '../utils.js';\n\n/**\n * @param {Identifier} node\n * @param {Context} context\n */\nexport function Identifier(node, context) {\n\tconst parent = /** @type {Node} */ (context.path.at(-1));\n\n\tif (is_reference(node, parent)) {\n\t\tif (node.name === '$$props') {\n\t\t\treturn b.id('$$sanitized_props');\n\t\t}\n\n\t\t// Optimize prop access: If it's a member read access, we can use the $$props object directly\n\t\tconst binding = context.state.scope.get(node.name);\n\t\tif (\n\t\t\tcontext.state.analysis.runes && // can't do this in legacy mode because the proxy does more than just read/write\n\t\t\tbinding !== null &&\n\t\t\tnode !== binding.node &&\n\t\t\tbinding.kind === 'rest_prop'\n\t\t) {\n\t\t\tconst grand_parent = context.path.at(-2);\n\n\t\t\tif (\n\t\t\t\tparent?.type === 'MemberExpression' &&\n\t\t\t\t!parent.computed &&\n\t\t\t\tgrand_parent?.type !== 'AssignmentExpression' &&\n\t\t\t\tgrand_parent?.type !== 'UpdateExpression'\n\t\t\t) {\n\t\t\t\tconst key = /** @type {Identifier} */ (parent.property);\n\n\t\t\t\tif (!binding.metadata?.exclude_props?.includes(key.name)) {\n\t\t\t\t\treturn b.id('$$props');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn build_getter(node, context.state);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/IfBlock.js",
    "content": "/** @import { BlockStatement, Expression, IfStatement, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { build_expression, add_svelte_meta } from './shared/utils.js';\n\n/**\n * @param {AST.IfBlock} node\n * @param {ComponentContext} context\n */\nexport function IfBlock(node, context) {\n\tcontext.state.template.push_comment();\n\n\t/** @type {Statement[]} */\n\tconst statements = [];\n\n\tconst has_await = node.metadata.expression.has_await;\n\tconst has_blockers = node.metadata.expression.has_blockers();\n\tconst expression = build_expression(context, node.test, node.metadata.expression);\n\n\t// Build the if/else-if/else chain\n\tlet index = 0;\n\t/** @type {IfStatement | undefined} */\n\tlet first_if;\n\t/** @type {IfStatement | undefined} */\n\tlet last_if;\n\t/** @type {AST.IfBlock | undefined} */\n\tlet last_alt;\n\n\tfor (const branch of [node, ...(node.metadata.flattened ?? [])]) {\n\t\tconst consequent = /** @type {BlockStatement} */ (context.visit(branch.consequent));\n\t\tconst consequent_id = b.id(context.state.scope.generate('consequent'));\n\t\tstatements.push(b.var(consequent_id, b.arrow([b.id('$$anchor')], consequent)));\n\n\t\t// Build the test expression for this branch\n\t\t/** @type {Expression} */\n\t\tlet test;\n\n\t\tif (branch.metadata.expression.has_await) {\n\t\t\t// Top-level condition with await: already resolved by $.async wrapper\n\t\t\ttest = b.call('$.get', b.id('$$condition'));\n\t\t} else {\n\t\t\tconst expression = build_expression(context, branch.test, branch.metadata.expression);\n\n\t\t\tif (branch.metadata.expression.has_call) {\n\t\t\t\tconst derived_id = b.id(context.state.scope.generate('d'));\n\t\t\t\tstatements.push(b.var(derived_id, b.call('$.derived', b.arrow([], expression))));\n\t\t\t\ttest = b.call('$.get', derived_id);\n\t\t\t} else {\n\t\t\t\ttest = expression;\n\t\t\t}\n\t\t}\n\n\t\tconst render_call = b.stmt(b.call('$$render', consequent_id, index !== 0 && b.literal(index)));\n\t\tconst new_if = b.if(test, render_call);\n\n\t\tif (last_if) {\n\t\t\tlast_if.alternate = new_if;\n\t\t} else {\n\t\t\tfirst_if = new_if;\n\t\t}\n\n\t\tlast_alt = branch;\n\t\tlast_if = new_if;\n\t\tindex++;\n\t}\n\n\t// Handle final alternate (else branch, remaining async chain, or nothing)\n\tif (last_if && last_alt?.alternate) {\n\t\tconst alternate = /** @type {BlockStatement} */ (context.visit(last_alt.alternate));\n\t\tconst alternate_id = b.id(context.state.scope.generate('alternate'));\n\t\tstatements.push(b.var(alternate_id, b.arrow([b.id('$$anchor')], alternate)));\n\n\t\tlast_if.alternate = b.stmt(b.call('$$render', alternate_id, b.literal(-1)));\n\t}\n\n\t// Build $.if() arguments\n\t/** @type {Expression[]} */\n\tconst args = [\n\t\tcontext.state.node,\n\t\tb.arrow([b.id('$$render')], first_if ? b.block([first_if]) : b.block([]))\n\t];\n\n\tif (node.elseif) {\n\t\t// We treat this...\n\t\t//\n\t\t//   {#if x}\n\t\t//     ...\n\t\t//   {:else}\n\t\t//     {#if y}\n\t\t//       <div transition:foo>...</div>\n\t\t//     {/if}\n\t\t//   {/if}\n\t\t//\n\t\t// ...slightly differently to this...\n\t\t//\n\t\t//   {#if x}\n\t\t//     ...\n\t\t//   {:else if y}\n\t\t//     <div transition:foo>...</div>\n\t\t//   {/if}\n\t\t//\n\t\t// ...even though they're logically equivalent. In the first case, the\n\t\t// transition will only play when `y` changes, but in the second it\n\t\t// should play when `x` or `y` change — both are considered 'local'.\n\t\t// This could also be a non-flattened elseif (because it has an async expression).\n\t\t// In both cases mark as elseif so the runtime uses EFFECT_TRANSPARENT for transitions.\n\t\targs.push(b.true);\n\t}\n\n\tstatements.push(add_svelte_meta(b.call('$.if', ...args), node, 'if'));\n\n\tif (has_await || has_blockers) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\t\thas_await ? b.array([b.thunk(expression, true)]) : b.void0,\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\thas_await ? [context.state.node, b.id('$$condition')] : [context.state.node],\n\t\t\t\t\t\tb.block(statements)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(b.block(statements));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/KeyBlock.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { build_expression, add_svelte_meta } from './shared/utils.js';\n\n/**\n * @param {AST.KeyBlock} node\n * @param {ComponentContext} context\n */\nexport function KeyBlock(node, context) {\n\tcontext.state.template.push_comment();\n\n\tconst has_await = node.metadata.expression.has_await;\n\tconst has_blockers = node.metadata.expression.has_blockers();\n\n\tconst expression = build_expression(context, node.expression, node.metadata.expression);\n\tconst key = b.thunk(has_await ? b.call('$.get', b.id('$$key')) : expression);\n\tconst body = /** @type {Expression} */ (context.visit(node.fragment));\n\n\tconst statement = add_svelte_meta(\n\t\tb.call('$.key', context.state.node, key, b.arrow([b.id('$$anchor')], body)),\n\t\tnode,\n\t\t'key'\n\t);\n\n\tif (has_await || has_blockers) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\t\thas_await ? b.array([b.thunk(expression, true)]) : b.void0,\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\thas_await ? [context.state.node, b.id('$$key')] : [context.state.node],\n\t\t\t\t\t\tb.block([statement])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(statement);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/LabeledStatement.js",
    "content": "/** @import { Expression, LabeledStatement, Statement } from 'estree' */\n/** @import { ReactiveStatement } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { build_getter } from '../utils.js';\n\n/**\n * @param {LabeledStatement} node\n * @param {ComponentContext} context\n */\nexport function LabeledStatement(node, context) {\n\tif (context.state.analysis.runes || context.path.length > 1 || node.label.name !== '$') {\n\t\tcontext.next();\n\t\treturn;\n\t}\n\n\t// To recreate Svelte 4 behaviour, we track the dependencies\n\t// the compiler can 'see', but we untrack the effect itself\n\tconst reactive_statement = /** @type {ReactiveStatement} */ (\n\t\tcontext.state.analysis.reactive_statements.get(node)\n\t);\n\n\tif (!reactive_statement) return; // not the instance context\n\n\tlet serialized_body = /** @type {Statement} */ (context.visit(node.body));\n\n\tif (serialized_body.type !== 'BlockStatement') {\n\t\tserialized_body = b.block([serialized_body]);\n\t}\n\n\tconst body = serialized_body.body;\n\n\t/** @type {Expression[]} */\n\tconst sequence = [];\n\n\tfor (const binding of reactive_statement.dependencies) {\n\t\tif (binding.kind === 'normal' && binding.declaration_kind !== 'import') continue;\n\n\t\tconst name = binding.node.name;\n\t\tlet serialized = build_getter(b.id(name), context.state);\n\n\t\t// If the binding is a prop, we need to deep read it because it could be fine-grained $state\n\t\t// from a runes-component, where mutations don't trigger an update on the prop as a whole.\n\t\tif (name === '$$props' || name === '$$restProps' || binding.kind === 'bindable_prop') {\n\t\t\tserialized = b.call('$.deep_read_state', serialized);\n\t\t}\n\n\t\tsequence.push(serialized);\n\t}\n\n\t// these statements will be topologically ordered later\n\tcontext.state.legacy_reactive_statements.set(\n\t\tnode,\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.legacy_pre_effect',\n\t\t\t\tsequence.length > 0 ? b.thunk(b.sequence(sequence)) : b.thunk(b.block([])),\n\t\t\t\tb.thunk(b.block(body))\n\t\t\t)\n\t\t)\n\t);\n\n\treturn b.empty;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/LetDirective.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { create_derived } from '../utils.js';\n\n/**\n * @param {AST.LetDirective} node\n * @param {ComponentContext} context\n */\nexport function LetDirective(node, context) {\n\t// let:x        -->  const x = $.derived(() => $$slotProps.x);\n\t// let:x={{y, z}}  -->  const derived_x = $.derived(() => { const { y, z } = $$slotProps.x; return { y, z }));\n\tif (node.expression && node.expression.type !== 'Identifier') {\n\t\tconst name = context.state.scope.generate(node.name);\n\t\tconst bindings = context.state.scope.get_bindings(node);\n\n\t\tfor (const binding of bindings) {\n\t\t\tcontext.state.transform[binding.node.name] = {\n\t\t\t\tread: (node) => b.member(b.call('$.get', b.id(name)), node)\n\t\t\t};\n\t\t}\n\n\t\tcontext.state.let_directives.push(\n\t\t\tb.const(\n\t\t\t\tname,\n\t\t\t\tb.call(\n\t\t\t\t\t'$.derived',\n\t\t\t\t\tb.thunk(\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\tb.let(\n\t\t\t\t\t\t\t\t/** @type {Expression} */ (node.expression).type === 'ObjectExpression'\n\t\t\t\t\t\t\t\t\t? // @ts-expect-error types don't match, but it can't contain spread elements and the structure is otherwise fine\n\t\t\t\t\t\t\t\t\t\tb.object_pattern(node.expression.properties)\n\t\t\t\t\t\t\t\t\t: // @ts-expect-error types don't match, but it can't contain spread elements and the structure is otherwise fine\n\t\t\t\t\t\t\t\t\t\tb.array_pattern(node.expression.elements),\n\t\t\t\t\t\t\t\tb.member(b.id('$$slotProps'), node.name)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tb.return(b.object(bindings.map((binding) => b.init(binding.node.name, binding.node))))\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tconst name = node.expression === null ? node.name : node.expression.name;\n\t\tcontext.state.transform[name] = {\n\t\t\tread: (node) => b.call('$.get', node)\n\t\t};\n\n\t\tcontext.state.let_directives.push(\n\t\t\tb.const(name, create_derived(context.state, b.member(b.id('$$slotProps'), node.name)))\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/MemberExpression.js",
    "content": "/** @import { MemberExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {MemberExpression} node\n * @param {Context} context\n */\nexport function MemberExpression(node, context) {\n\t// rewrite `this.#foo` as `this.#foo.v` inside a constructor\n\tif (node.property.type === 'PrivateIdentifier') {\n\t\tconst field = context.state.state_fields.get('#' + node.property.name);\n\n\t\tif (field) {\n\t\t\treturn context.state.in_constructor &&\n\t\t\t\t(field.type === '$state.raw' || field.type === '$state')\n\t\t\t\t? b.member(node, 'v')\n\t\t\t\t: b.call('$.get', node);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/OnDirective.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { build_event, build_event_handler } from './shared/events.js';\n\nconst modifiers = /** @type {const} */ ([\n\t'stopPropagation',\n\t'stopImmediatePropagation',\n\t'preventDefault',\n\t'self',\n\t'trusted',\n\t'once'\n]);\n\n/**\n * @param {AST.OnDirective} node\n * @param {ComponentContext} context\n */\nexport function OnDirective(node, context) {\n\tif (!node.expression) {\n\t\tcontext.state.analysis.needs_props = true;\n\t}\n\n\tlet handler = build_event_handler(node.expression, node.metadata.expression, context);\n\n\tfor (const modifier of modifiers) {\n\t\tif (node.modifiers.includes(modifier)) {\n\t\t\thandler = b.call('$.' + modifier, handler);\n\t\t}\n\t}\n\n\tconst capture = node.modifiers.includes('capture');\n\tconst passive =\n\t\tnode.modifiers.includes('passive') ||\n\t\t(node.modifiers.includes('nonpassive') ? false : undefined);\n\n\treturn build_event(context, node.name, handler, capture, passive, false);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js",
    "content": "/** @import { Expression, ImportDeclaration, MemberExpression, Node, Program } from 'estree' */\n/** @import { ComponentContext } from '../types' */\nimport { build_getter, is_prop_source } from '../utils.js';\nimport * as b from '#compiler/builders';\nimport { add_state_transformers } from './shared/declarations.js';\nimport { transform_body } from '../../shared/transform-async.js';\n\n/**\n * @param {Program} node\n * @param {ComponentContext} context\n */\nexport function Program(node, context) {\n\tif (!context.state.analysis.runes) {\n\t\tcontext.state.transform['$$props'] = {\n\t\t\tread: (node) => ({ ...node, name: '$$sanitized_props' })\n\t\t};\n\n\t\tfor (const [name, binding] of context.state.scope.declarations) {\n\t\t\tif (binding.declaration_kind === 'import' && binding.mutated) {\n\t\t\t\t// the declaration itself is hoisted to the module scope, so we need\n\t\t\t\t// to resort to cruder measures to differentiate instance/module imports\n\t\t\t\tconst { start, end } = context.state.analysis.instance.ast;\n\t\t\t\tconst node = /** @type {ImportDeclaration} */ (binding.initial);\n\t\t\t\tconst is_instance_import =\n\t\t\t\t\t/** @type {number} */ (node.start) > /** @type {number} */ (start) &&\n\t\t\t\t\t/** @type {number} */ (node.end) < /** @type {number} */ (end);\n\n\t\t\t\tif (is_instance_import) {\n\t\t\t\t\tconst id = b.id('$$_import_' + name);\n\n\t\t\t\t\tcontext.state.transform[name] = {\n\t\t\t\t\t\tread: (_) => b.call(id),\n\t\t\t\t\t\tmutate: (_, mutation) => b.call(id, mutation)\n\t\t\t\t\t};\n\n\t\t\t\t\tcontext.state.legacy_reactive_imports.push(\n\t\t\t\t\t\tb.var(id, b.call('$.reactive_import', b.thunk(b.id(name))))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const [name, binding] of context.state.scope.declarations) {\n\t\tif (binding.kind === 'store_sub') {\n\t\t\t// read lazily, so that transforms added later are still applied\n\t\t\t/** @type {Expression} */\n\t\t\tlet cached;\n\n\t\t\tconst get_store = () => {\n\t\t\t\treturn (cached ??= /** @type {Expression} */ (context.visit(b.id(name.slice(1)))));\n\t\t\t};\n\n\t\t\tcontext.state.transform[name] = {\n\t\t\t\tread: b.call,\n\t\t\t\tassign: (_, value) => b.call('$.store_set', get_store(), value),\n\t\t\t\tmutate: (node, mutation) => {\n\t\t\t\t\t// We need to untrack the store read, for consistency with Svelte 4\n\t\t\t\t\tconst untracked = b.call('$.untrack', node);\n\n\t\t\t\t\t/**\n\t\t\t\t\t *\n\t\t\t\t\t * @param {Expression} n\n\t\t\t\t\t * @returns {Expression}\n\t\t\t\t\t */\n\t\t\t\t\tfunction replace(n) {\n\t\t\t\t\t\tif (n.type === 'MemberExpression') {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...n,\n\t\t\t\t\t\t\t\tobject: replace(/** @type {Expression} */ (n.object)),\n\t\t\t\t\t\t\t\tproperty: n.property\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn untracked;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.call(\n\t\t\t\t\t\t'$.store_mutate',\n\t\t\t\t\t\tget_store(),\n\t\t\t\t\t\tmutation.type === 'AssignmentExpression'\n\t\t\t\t\t\t\t? b.assignment(\n\t\t\t\t\t\t\t\t\tmutation.operator,\n\t\t\t\t\t\t\t\t\t/** @type {MemberExpression} */ (\n\t\t\t\t\t\t\t\t\t\treplace(/** @type {MemberExpression} */ (mutation.left))\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tmutation.right\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: b.update(mutation.operator, replace(mutation.argument), mutation.prefix),\n\t\t\t\t\t\tuntracked\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tupdate: (node) => {\n\t\t\t\t\treturn b.call(\n\t\t\t\t\t\tnode.prefix ? '$.update_pre_store' : '$.update_store',\n\t\t\t\t\t\tbuild_getter(b.id(name.slice(1)), context.state),\n\t\t\t\t\t\tb.call(node.argument),\n\t\t\t\t\t\tnode.operator === '--' && b.literal(-1)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (binding.kind === 'prop' || binding.kind === 'bindable_prop') {\n\t\t\tif (is_prop_source(binding, context.state)) {\n\t\t\t\tcontext.state.transform[name] = {\n\t\t\t\t\tread: b.call,\n\t\t\t\t\tassign: (node, value) => b.call(node, value),\n\t\t\t\t\tmutate: (node, value) => {\n\t\t\t\t\t\tif (binding.kind === 'bindable_prop') {\n\t\t\t\t\t\t\t// only necessary for interop with legacy parent bindings\n\t\t\t\t\t\t\treturn b.call(node, value, b.true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tupdate: (node) => {\n\t\t\t\t\t\treturn b.call(\n\t\t\t\t\t\t\tnode.prefix ? '$.update_pre_prop' : '$.update_prop',\n\t\t\t\t\t\t\tnode.argument,\n\t\t\t\t\t\t\tnode.operator === '--' && b.literal(-1)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (binding.prop_alias) {\n\t\t\t\tconst key = b.key(binding.prop_alias);\n\n\t\t\t\tcontext.state.transform[name] = {\n\t\t\t\t\tread: (_) => b.member(b.id('$$props'), key, key.type === 'Literal')\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tcontext.state.transform[name] = {\n\t\t\t\t\tread: (node) => b.member(b.id('$$props'), node)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tadd_state_transformers(context);\n\n\tif (context.state.is_instance) {\n\t\treturn {\n\t\t\t...node,\n\t\t\tbody: transform_body(\n\t\t\t\tcontext.state.analysis.instance_body,\n\t\t\t\tb.id('$.run'),\n\t\t\t\t(node) => /** @type {Node} */ (context.visit(node))\n\t\t\t)\n\t\t};\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js",
    "content": "/** @import { ArrayExpression, Expression, ExpressionStatement, Identifier, MemberExpression, ObjectExpression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentClientTransformState, ComponentContext } from '../types' */\n/** @import { Scope } from '../../../scope' */\nimport {\n\tcannot_be_set_statically,\n\tis_boolean_attribute,\n\tis_dom_property,\n\tis_load_error_element\n} from '../../../../../utils.js';\nimport { is_ignored } from '../../../../state.js';\nimport { is_event_attribute, is_text_attribute } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport {\n\tcreate_attribute,\n\tExpressionMetadata,\n\tis_custom_element_node,\n\tis_customizable_select_element\n} from '../../../nodes.js';\nimport { clean_nodes, determine_namespace_for_children } from '../../utils.js';\nimport { build_getter } from '../utils.js';\nimport {\n\tget_attribute_name,\n\tbuild_attribute_value,\n\tbuild_attribute_effect,\n\tbuild_set_class,\n\tbuild_set_style\n} from './shared/element.js';\nimport { process_children, is_static_element } from './shared/fragment.js';\nimport { build_render_statement, build_template_chunk, Memoizer } from './shared/utils.js';\nimport { visit_event_attribute } from './shared/events.js';\nimport { Template } from '../transform-template/template.js';\nimport { transform_template } from '../transform-template/index.js';\nimport { TEMPLATE_FRAGMENT } from '../../../../../constants.js';\n\n/**\n * @param {AST.RegularElement} node\n * @param {ComponentContext} context\n */\nexport function RegularElement(node, context) {\n\tconst is_html = context.state.metadata.namespace === 'html' && node.name !== 'svg';\n\tconst name = is_html ? node.name.toLowerCase() : node.name;\n\tcontext.state.template.push_element(name, node.start, is_html);\n\n\tif (name === 'noscript') {\n\t\tcontext.state.template.pop_element();\n\t\treturn;\n\t}\n\n\tconst is_custom_element = is_custom_element_node(node);\n\n\t// cloneNode is faster, but it does not instantiate the underlying class of the\n\t// custom element until the template is connected to the dom, which would\n\t// cause problems when setting properties on the custom element.\n\t// Therefore we need to use importNode instead, which doesn't have this caveat.\n\t// Additionally, Webkit browsers need importNode for video elements for autoplay\n\t// to work correctly.\n\tcontext.state.template.needs_import_node ||= name === 'video' || is_custom_element;\n\n\tcontext.state.template.contains_script_tag ||= name === 'script';\n\n\t/** @type {Array<AST.Attribute | AST.SpreadAttribute>} */\n\tconst attributes = [];\n\n\t/** @type {AST.ClassDirective[]} */\n\tconst class_directives = [];\n\n\t/** @type {AST.StyleDirective[]} */\n\tconst style_directives = [];\n\n\t/** @type {Array<AST.AnimateDirective | AST.BindDirective | AST.OnDirective | AST.TransitionDirective | AST.UseDirective | AST.AttachTag>} */\n\tconst other_directives = [];\n\n\t/** @type {ExpressionStatement[]} */\n\tconst lets = [];\n\n\t/** @type {Map<string, AST.Attribute>} */\n\tconst lookup = new Map();\n\n\t/** @type {Map<string, AST.BindDirective>} */\n\tconst bindings = new Map();\n\n\tlet has_spread = node.metadata.has_spread;\n\tlet has_use = false;\n\tlet should_remove_defaults = false;\n\n\tfor (const attribute of node.attributes) {\n\t\tswitch (attribute.type) {\n\t\t\tcase 'AnimateDirective':\n\t\t\t\tother_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'Attribute':\n\t\t\t\t// `is` attributes need to be part of the template, otherwise they break\n\t\t\t\tif (attribute.name === 'is' && context.state.metadata.namespace === 'html') {\n\t\t\t\t\tconst { value } = build_attribute_value(attribute.value, context);\n\n\t\t\t\t\tif (value.type === 'Literal' && typeof value.value === 'string') {\n\t\t\t\t\t\tcontext.state.template.set_prop('is', value.value);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tattributes.push(attribute);\n\t\t\t\tlookup.set(attribute.name, attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'BindDirective':\n\t\t\t\tbindings.set(attribute.name, attribute);\n\t\t\t\tother_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'ClassDirective':\n\t\t\t\tclass_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'LetDirective':\n\t\t\t\t// visit let directives before everything else, to set state\n\t\t\t\tcontext.visit(attribute, { ...context.state, let_directives: lets });\n\t\t\t\tbreak;\n\n\t\t\tcase 'OnDirective':\n\t\t\t\tother_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpreadAttribute':\n\t\t\t\tattributes.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'StyleDirective':\n\t\t\t\tstyle_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'TransitionDirective':\n\t\t\t\tother_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'UseDirective':\n\t\t\t\thas_use = true;\n\t\t\t\tother_directives.push(attribute);\n\t\t\t\tbreak;\n\n\t\t\tcase 'AttachTag':\n\t\t\t\tother_directives.push(attribute);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/** @type {typeof state} */\n\tconst element_state = { ...context.state, init: [], after_update: [] };\n\n\tfor (const attribute of other_directives) {\n\t\tif (attribute.type === 'OnDirective') {\n\t\t\tconst handler = /** @type {Expression} */ (context.visit(attribute));\n\n\t\t\tif (has_use) {\n\t\t\t\telement_state.init.push(b.stmt(b.call('$.effect', b.thunk(handler))));\n\t\t\t} else {\n\t\t\t\telement_state.after_update.push(b.stmt(handler));\n\t\t\t}\n\t\t} else {\n\t\t\tcontext.visit(attribute, element_state);\n\t\t}\n\t}\n\n\tif (name === 'input') {\n\t\tconst has_value_attribute = attributes.some(\n\t\t\t(attribute) =>\n\t\t\t\tattribute.type === 'Attribute' &&\n\t\t\t\t(attribute.name === 'value' || attribute.name === 'checked') &&\n\t\t\t\t!is_text_attribute(attribute)\n\t\t);\n\t\tconst has_default_value_attribute = attributes.some(\n\t\t\t(attribute) =>\n\t\t\t\tattribute.type === 'Attribute' &&\n\t\t\t\t(attribute.name === 'defaultValue' || attribute.name === 'defaultChecked')\n\t\t);\n\t\tif (\n\t\t\t!has_default_value_attribute &&\n\t\t\t(has_spread ||\n\t\t\t\tbindings.has('value') ||\n\t\t\t\tbindings.has('checked') ||\n\t\t\t\tbindings.has('group') ||\n\t\t\t\t(!bindings.has('group') && has_value_attribute))\n\t\t) {\n\t\t\tif (has_spread) {\n\t\t\t\t// remove_input_defaults will be called inside set_attributes\n\t\t\t\tshould_remove_defaults = true;\n\t\t\t} else {\n\t\t\t\tcontext.state.init.push(b.stmt(b.call('$.remove_input_defaults', context.state.node)));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (name === 'textarea') {\n\t\tconst attribute = lookup.get('value') ?? lookup.get('checked');\n\t\tconst needs_content_reset = attribute && !is_text_attribute(attribute);\n\n\t\tif (has_spread || bindings.has('value') || needs_content_reset) {\n\t\t\tcontext.state.init.push(b.stmt(b.call('$.remove_textarea_child', context.state.node)));\n\t\t}\n\t}\n\n\t// Let bindings first, they can be used on attributes\n\tcontext.state.init.push(...lets);\n\n\tconst node_id = context.state.node;\n\n\t/** If true, needs `__value` for inputs */\n\tconst needs_special_value_handling =\n\t\tname === 'option' || name === 'select' || bindings.has('group') || bindings.has('checked');\n\n\tif (has_spread) {\n\t\tbuild_attribute_effect(\n\t\t\tattributes,\n\t\t\tclass_directives,\n\t\t\tstyle_directives,\n\t\t\tcontext,\n\t\t\tnode,\n\t\t\tnode_id,\n\t\t\tshould_remove_defaults\n\t\t);\n\t} else {\n\t\tfor (const attribute of /** @type {AST.Attribute[]} */ (attributes)) {\n\t\t\tif (is_event_attribute(attribute)) {\n\t\t\t\tvisit_event_attribute(attribute, context);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (needs_special_value_handling && attribute.name === 'value') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst name = get_attribute_name(node, attribute);\n\n\t\t\tif (\n\t\t\t\t!is_custom_element &&\n\t\t\t\t!cannot_be_set_statically(attribute.name) &&\n\t\t\t\t(attribute.value === true || is_text_attribute(attribute)) &&\n\t\t\t\t(name !== 'class' || class_directives.length === 0) &&\n\t\t\t\t(name !== 'style' || style_directives.length === 0)\n\t\t\t) {\n\t\t\t\tlet value = is_text_attribute(attribute) ? attribute.value[0].data : true;\n\n\t\t\t\tif (name === 'class' && node.metadata.scoped && context.state.analysis.css.hash) {\n\t\t\t\t\tif (value === true || value === '') {\n\t\t\t\t\t\tvalue = context.state.analysis.css.hash;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue += ' ' + context.state.analysis.css.hash;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (name !== 'class' || value) {\n\t\t\t\t\tcontext.state.template.set_prop(attribute.name, value === true ? '' : value);\n\t\t\t\t}\n\t\t\t} else if (name === 'autofocus') {\n\t\t\t\tlet { value } = build_attribute_value(attribute.value, context);\n\t\t\t\tcontext.state.init.push(b.stmt(b.call('$.autofocus', node_id, value)));\n\t\t\t} else if (name === 'class') {\n\t\t\t\tbuild_set_class(node, node_id, attribute, class_directives, context, is_html);\n\t\t\t} else if (name === 'style') {\n\t\t\t\tbuild_set_style(node_id, attribute, style_directives, context);\n\t\t\t} else if (is_custom_element) {\n\t\t\t\tbuild_custom_element_attribute_update_assignment(node_id, attribute, context);\n\t\t\t} else {\n\t\t\t\tconst { value, has_state } = build_attribute_value(\n\t\t\t\t\tattribute.value,\n\t\t\t\t\tcontext,\n\t\t\t\t\t(value, metadata) => context.state.memoizer.add(value, metadata)\n\t\t\t\t);\n\n\t\t\t\tconst update = build_element_attribute_update(node, node_id, name, value, attributes);\n\n\t\t\t\t(has_state ? context.state.update : context.state.init).push(b.stmt(update));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (\n\t\tis_load_error_element(name) &&\n\t\t(has_spread || has_use || lookup.has('onload') || lookup.has('onerror'))\n\t) {\n\t\tcontext.state.after_update.push(b.stmt(b.call('$.replay_events', node_id)));\n\t}\n\n\tconst metadata = {\n\t\t...context.state.metadata,\n\t\tnamespace: determine_namespace_for_children(node, context.state.metadata.namespace)\n\t};\n\n\tif (bindings.has('innerHTML') || bindings.has('innerText') || bindings.has('textContent')) {\n\t\tconst contenteditable = lookup.get('contenteditable');\n\n\t\tif (\n\t\t\tcontenteditable &&\n\t\t\t(contenteditable.value === true ||\n\t\t\t\t(is_text_attribute(contenteditable) && contenteditable.value[0].data === 'true'))\n\t\t) {\n\t\t\tmetadata.bound_contenteditable = true;\n\t\t}\n\t}\n\n\t/** @type {ComponentClientTransformState} */\n\tconst state = {\n\t\t...context.state,\n\t\tmetadata,\n\t\tscope: /** @type {Scope} */ (context.state.scopes.get(node.fragment)),\n\t\tpreserve_whitespace: context.state.preserve_whitespace || name === 'pre' || name === 'textarea'\n\t};\n\n\tconst { hoisted, trimmed } = clean_nodes(\n\t\tnode,\n\t\tnode.fragment.nodes,\n\t\tcontext.path,\n\t\tstate.metadata.namespace,\n\t\tstate,\n\t\tname === 'script' || state.preserve_whitespace,\n\t\tstate.options.preserveComments\n\t);\n\n\t/** @type {typeof state} */\n\tconst child_state = { ...state, init: [], update: [], after_update: [], snippets: [] };\n\n\tfor (const node of hoisted) {\n\t\tcontext.visit(node, child_state);\n\t}\n\n\t// special case — if an element that only contains text, we don't need\n\t// to descend into it if the text is non-reactive\n\t// in the rare case that we have static text that can't be inlined\n\t// (e.g. `<span>{location}</span>`), set `textContent` programmatically\n\tconst use_text_content =\n\t\ttrimmed.every((node) => node.type === 'Text' || node.type === 'ExpressionTag') &&\n\t\ttrimmed.every(\n\t\t\t(node) =>\n\t\t\t\tnode.type === 'Text' ||\n\t\t\t\t(!node.metadata.expression.has_state &&\n\t\t\t\t\t!node.metadata.expression.has_await &&\n\t\t\t\t\t!node.metadata.expression.has_blockers())\n\t\t) &&\n\t\ttrimmed.some((node) => node.type === 'ExpressionTag');\n\n\tif (use_text_content) {\n\t\tconst { value } = build_template_chunk(trimmed, context, child_state);\n\t\tconst empty_string = value.type === 'Literal' && value.value === '';\n\n\t\tif (!empty_string) {\n\t\t\tchild_state.init.push(\n\t\t\t\tb.stmt(b.assignment('=', b.member(context.state.node, 'textContent'), value))\n\t\t\t);\n\t\t}\n\t} else if (is_customizable_select_element(node)) {\n\t\t// For <option>, <optgroup>, or <select> elements with rich content, we need to branch based on browser support.\n\t\t// Modern browsers preserve rich HTML in options, older browsers strip it to text only.\n\t\t// We create a separate template for the rich content and append it to the element.\n\n\t\tconst element_node = context.state.node;\n\n\t\t// Add a hydration marker inside the option element so $.child() has an anchor to find\n\t\tcontext.state.template.push_comment();\n\n\t\t// Create a separate template for the rich content\n\t\tconst template_name = context.state.scope.root.unique(`${name}_content`);\n\t\tconst fragment_id = b.id(context.state.scope.generate('fragment'));\n\t\tconst anchor_id = b.id(context.state.scope.generate('anchor'));\n\n\t\t// Create state with a new template for the rich content\n\t\t/** @type {typeof state} */\n\t\tconst select_state = {\n\t\t\t...state,\n\t\t\tinit: [],\n\t\t\tupdate: [],\n\t\t\tafter_update: [],\n\t\t\ttemplate: new Template()\n\t\t};\n\n\t\tprocess_children(\n\t\t\ttrimmed,\n\t\t\t(is_text) => b.call('$.first_child', fragment_id, is_text && b.true),\n\t\t\tfalse,\n\t\t\t{\n\t\t\t\t...context,\n\t\t\t\tstate: select_state\n\t\t\t}\n\t\t);\n\n\t\t// Transform the template to $.from_html(...) and hoist it\n\t\tconst template = transform_template(select_state, metadata.namespace, TEMPLATE_FRAGMENT);\n\t\tcontext.state.hoisted.push(b.var(template_name, template));\n\n\t\t// Build the rich content function body\n\t\t// The anchor is the child of the element (a hydration marker during hydration)\n\t\tconst body = b.block([\n\t\t\tb.var(anchor_id, b.call('$.child', element_node)),\n\t\t\tb.var(fragment_id, b.call(template_name)),\n\t\t\t...select_state.init,\n\t\t\t...(select_state.update.length > 0 ? [build_render_statement(select_state)] : []),\n\t\t\t...select_state.after_update,\n\t\t\tb.stmt(b.call('$.append', anchor_id, fragment_id))\n\t\t]);\n\n\t\tchild_state.init.push(b.stmt(b.call('$.customizable_select', element_node, b.arrow([], body))));\n\t} else {\n\t\t/** @type {Expression} */\n\t\tlet arg = context.state.node;\n\n\t\t// If `hydrate_node` is set inside the element, we need to reset it\n\t\t// after the element has been hydrated. We need to check if any child\n\t\t// would actually advance the hydrate_node cursor - static elements don't.\n\t\tlet needs_reset = trimmed.some((node) => node.type !== 'Text' && !is_static_element(node));\n\n\t\t// The same applies if it's a `<template>` element, since we need to\n\t\t// set the value of `hydrate_node` to `node.content`\n\t\tif (name === 'template') {\n\t\t\tneeds_reset = true;\n\t\t\tchild_state.init.push(b.stmt(b.call('$.hydrate_template', arg)));\n\t\t\targ = b.member(arg, 'content');\n\t\t}\n\n\t\tprocess_children(trimmed, (is_text) => b.call('$.child', arg, is_text && b.true), true, {\n\t\t\t...context,\n\t\t\tstate: child_state\n\t\t});\n\n\t\tif (needs_reset) {\n\t\t\tchild_state.init.push(b.stmt(b.call('$.reset', context.state.node)));\n\t\t}\n\t}\n\n\tif (node.fragment.nodes.some((node) => node.type === 'SnippetBlock')) {\n\t\t// Wrap children in `{...}` to avoid declaration conflicts\n\t\tcontext.state.init.push(\n\t\t\tb.block([\n\t\t\t\t...child_state.snippets,\n\t\t\t\t...child_state.init,\n\t\t\t\t...element_state.init,\n\t\t\t\tchild_state.update.length > 0 ? build_render_statement(child_state) : b.empty,\n\t\t\t\t...child_state.after_update,\n\t\t\t\t...element_state.after_update\n\t\t\t])\n\t\t);\n\t} else if (node.fragment.metadata.dynamic) {\n\t\tcontext.state.init.push(...child_state.init, ...element_state.init);\n\t\tcontext.state.update.push(...child_state.update);\n\t\tcontext.state.after_update.push(...child_state.after_update, ...element_state.after_update);\n\t} else {\n\t\tcontext.state.init.push(...element_state.init);\n\t\tcontext.state.after_update.push(...element_state.after_update);\n\t}\n\n\tif (name === 'selectedcontent') {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.selectedcontent',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tb.arrow([b.id('$$element')], b.assignment('=', context.state.node, b.id('$$element')))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tif (lookup.has('dir')) {\n\t\t// This fixes an issue with Chromium where updates to text content within an element\n\t\t// does not update the direction when set to auto. If we just re-assign the dir, this fixes it.\n\t\tconst dir = b.member(node_id, 'dir');\n\t\tcontext.state.update.push(b.stmt(b.assignment('=', dir, dir)));\n\t}\n\n\tif (!has_spread && needs_special_value_handling) {\n\t\tif (node.metadata.synthetic_value_node) {\n\t\t\tconst synthetic_node = node.metadata.synthetic_value_node;\n\t\t\tconst synthetic_attribute = create_attribute(\n\t\t\t\t'value',\n\t\t\t\tnull,\n\t\t\t\tsynthetic_node.start,\n\t\t\t\tsynthetic_node.end,\n\t\t\t\t[synthetic_node]\n\t\t\t);\n\t\t\t// this node is an `option` that didn't have a `value` attribute, but had\n\t\t\t// a single-expression child, so we treat the value of that expression as\n\t\t\t// the value of the option\n\t\t\tbuild_element_special_value_attribute(name, node_id, synthetic_attribute, context, true);\n\t\t} else {\n\t\t\tfor (const attribute of /** @type {AST.Attribute[]} */ (attributes)) {\n\t\t\t\tif (attribute.name === 'value') {\n\t\t\t\t\tbuild_element_special_value_attribute(name, node_id, attribute, context);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tcontext.state.template.pop_element();\n}\n\n/**\n * @param {AST.ClassDirective[]} class_directives\n * @param {ComponentContext} context\n * @param {Memoizer} memoizer\n */\nexport function build_class_directives_object(\n\tclass_directives,\n\tcontext,\n\tmemoizer = context.state.memoizer\n) {\n\tlet properties = [];\n\n\tconst metadata = new ExpressionMetadata();\n\n\tfor (const d of class_directives) {\n\t\tmetadata.merge(d.metadata.expression);\n\n\t\tconst expression = /** @type Expression */ (context.visit(d.expression));\n\t\tproperties.push(b.init(d.name, expression));\n\t}\n\n\tconst directives = b.object(properties);\n\n\treturn memoizer.add(directives, metadata);\n}\n\n/**\n * @param {AST.StyleDirective[]} style_directives\n * @param {ComponentContext} context\n * @param {Memoizer} memoizer\n */\nexport function build_style_directives_object(\n\tstyle_directives,\n\tcontext,\n\tmemoizer = context.state.memoizer\n) {\n\tconst normal = b.object([]);\n\tconst important = b.object([]);\n\n\tconst metadata = new ExpressionMetadata();\n\n\tfor (const d of style_directives) {\n\t\tmetadata.merge(d.metadata.expression);\n\n\t\tconst expression =\n\t\t\td.value === true\n\t\t\t\t? build_getter(b.id(d.name), context.state)\n\t\t\t\t: build_attribute_value(d.value, context).value;\n\n\t\tconst object = d.modifiers.includes('important') ? important : normal;\n\t\tobject.properties.push(b.init(d.name, expression));\n\t}\n\n\tconst directives = important.properties.length ? b.array([normal, important]) : normal;\n\n\treturn memoizer.add(directives, metadata);\n}\n\n/**\n * Serializes an assignment to an element property by adding relevant statements to either only\n * the init or the init and update arrays, depending on whether or not the value is dynamic.\n * Resulting code for static looks something like this:\n * ```js\n * element.property = value;\n * // or\n * $.set_attribute(element, property, value);\n * });\n * ```\n * Resulting code for dynamic looks something like this:\n * ```js\n * let value;\n * $.template_effect(() => {\n * \tif (value !== (value = 'new value')) {\n * \t\telement.property = value;\n * \t\t// or\n * \t\t$.set_attribute(element, property, value);\n * \t}\n * });\n * ```\n * Returns true if attribute is deemed reactive, false otherwise.\n * @param {AST.RegularElement} element\n * @param {Identifier} node_id\n * @param {string} name\n * @param {Expression} value\n * @param {Array<AST.Attribute | AST.SpreadAttribute>} attributes\n */\nfunction build_element_attribute_update(element, node_id, name, value, attributes) {\n\tif (name === 'muted') {\n\t\t// Special case for Firefox who needs it set as a property in order to work\n\t\treturn b.assignment('=', b.member(node_id, b.id('muted')), value);\n\t}\n\n\tif (name === 'value') {\n\t\treturn b.call('$.set_value', node_id, value);\n\t}\n\n\tif (name === 'checked') {\n\t\treturn b.call('$.set_checked', node_id, value);\n\t}\n\n\tif (name === 'selected') {\n\t\treturn b.call('$.set_selected', node_id, value);\n\t}\n\n\tif (\n\t\t// If we would just set the defaultValue property, it would override the value property,\n\t\t// because it is set in the template which implicitly means it's also setting the default value,\n\t\t// and if one updates the default value while the input is pristine it will also update the\n\t\t// current value, which is not what we want, which is why we need to do some extra work.\n\t\tname === 'defaultValue' &&\n\t\t(attributes.some(\n\t\t\t(attr) => attr.type === 'Attribute' && attr.name === 'value' && is_text_attribute(attr)\n\t\t) ||\n\t\t\t(element.name === 'textarea' && element.fragment.nodes.length > 0))\n\t) {\n\t\treturn b.call('$.set_default_value', node_id, value);\n\t}\n\n\tif (\n\t\t// See defaultValue comment\n\t\tname === 'defaultChecked' &&\n\t\tattributes.some(\n\t\t\t(attr) => attr.type === 'Attribute' && attr.name === 'checked' && attr.value === true\n\t\t)\n\t) {\n\t\treturn b.call('$.set_default_checked', node_id, value);\n\t}\n\n\tif (is_dom_property(name)) {\n\t\treturn b.assignment('=', b.member(node_id, name), value);\n\t}\n\n\treturn b.call(\n\t\tname.startsWith('xlink') ? '$.set_xlink_attribute' : '$.set_attribute',\n\t\tnode_id,\n\t\tb.literal(name),\n\t\tvalue,\n\t\tis_ignored(element, 'hydration_attribute_changed') && b.true\n\t);\n}\n\n/**\n * Like `build_element_attribute_update` but without any special attribute treatment.\n * @param {Identifier}\tnode_id\n * @param {AST.Attribute} attribute\n * @param {ComponentContext} context\n */\nfunction build_custom_element_attribute_update_assignment(node_id, attribute, context) {\n\tconst { value, has_state } = build_attribute_value(attribute.value, context);\n\n\t// don't lowercase name, as we set the element's property, which might be case sensitive\n\tconst call = b.call('$.set_custom_element_data', node_id, b.literal(attribute.name), value);\n\n\t// this is different from other updates — it doesn't get grouped,\n\t// because set_custom_element_data may not be idempotent\n\tconst update = has_state ? b.call('$.template_effect', b.thunk(call)) : call;\n\n\tcontext.state.init.push(b.stmt(update));\n}\n\n/**\n * Serializes an assignment to the value property of a `<select>`, `<option>` or `<input>` element\n * that needs the hidden `__value` property.\n * Returns true if attribute is deemed reactive, false otherwise.\n * @param {string} element\n * @param {Identifier} node_id\n * @param {AST.Attribute} attribute\n * @param {ComponentContext} context\n * @param {boolean} [synthetic] - true if this should not sync to the DOM\n */\nfunction build_element_special_value_attribute(\n\telement,\n\tnode_id,\n\tattribute,\n\tcontext,\n\tsynthetic = false\n) {\n\tconst state = context.state;\n\tconst is_select_with_value =\n\t\t// attribute.metadata.dynamic would give false negatives because even if the value does not change,\n\t\t// the inner options could still change, so we need to always treat it as reactive\n\t\telement === 'select' && attribute.value !== true && !is_text_attribute(attribute);\n\n\tconst { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) =>\n\t\tstate.memoizer.add(value, metadata)\n\t);\n\n\tconst evaluated = context.state.scope.evaluate(value);\n\tconst assignment = b.assignment('=', b.member(node_id, '__value'), value);\n\n\tconst set_value_assignment = b.assignment(\n\t\t'=',\n\t\tb.member(node_id, 'value'),\n\t\tevaluated.is_defined ? assignment : b.logical('??', assignment, b.literal(''))\n\t);\n\n\tconst update = b.stmt(\n\t\tis_select_with_value\n\t\t\t? b.sequence([\n\t\t\t\t\tset_value_assignment,\n\t\t\t\t\t// This ensures a one-way street to the DOM in case it's <select {value}>\n\t\t\t\t\t// and not <select bind:value>. We need it in addition to $.init_select\n\t\t\t\t\t// because the select value is not reflected as an attribute, so the\n\t\t\t\t\t// mutation observer wouldn't notice.\n\t\t\t\t\tb.call('$.select_option', node_id, value)\n\t\t\t\t])\n\t\t\t: synthetic\n\t\t\t\t? assignment\n\t\t\t\t: set_value_assignment\n\t);\n\n\tif (has_state) {\n\t\tconst id = b.id(state.scope.generate(`${node_id.name}_value`));\n\n\t\t// `<option>` is a special case: The value property reflects to the DOM. If the value is set to undefined,\n\t\t// that means the value should be set to the empty string. To be able to do that when the value is\n\t\t// initially undefined, we need to set a value that is guaranteed to be different.\n\t\tconst init = element === 'option' ? b.object([]) : undefined;\n\n\t\tstate.init.push(b.var(id, init));\n\t\tstate.update.push(b.if(b.binary('!==', id, b.assignment('=', id, value)), b.block([update])));\n\t} else {\n\t\tstate.init.push(update);\n\t}\n\n\tif (is_select_with_value) {\n\t\tstate.init.push(b.stmt(b.call('$.init_select', node_id)));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/RenderTag.js",
    "content": "/** @import { Expression, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { unwrap_optional } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { add_svelte_meta, build_expression, Memoizer } from './shared/utils.js';\n\n/**\n * @param {AST.RenderTag} node\n * @param {ComponentContext} context\n */\nexport function RenderTag(node, context) {\n\tcontext.state.template.push_comment();\n\n\tconst call = unwrap_optional(node.expression);\n\n\t/** @type {Expression[]} */\n\tlet args = [];\n\n\tconst memoizer = new Memoizer();\n\n\tfor (let i = 0; i < call.arguments.length; i++) {\n\t\tconst arg = /** @type {Expression} */ (call.arguments[i]);\n\t\tconst metadata = node.metadata.arguments[i];\n\t\tlet expression = build_expression(context, arg, metadata);\n\t\tconst memoized = memoizer.add(expression, metadata);\n\n\t\tif (expression !== memoized) {\n\t\t\texpression = b.call('$.get', memoized);\n\t\t}\n\n\t\targs.push(b.thunk(expression));\n\t}\n\n\tmemoizer.apply();\n\n\t/** @type {Statement[]} */\n\tconst statements = memoizer.deriveds(context.state.analysis.runes);\n\n\tlet snippet_function = build_expression(\n\t\tcontext,\n\t\t/** @type {Expression} */ (call.callee),\n\t\tnode.metadata.expression\n\t);\n\n\tif (node.metadata.dynamic) {\n\t\t// If we have a chain expression then ensure a nullish snippet function gets turned into an empty one\n\t\tif (node.expression.type === 'ChainExpression') {\n\t\t\tsnippet_function = b.logical('??', snippet_function, b.id('$.noop'));\n\t\t}\n\n\t\tstatements.push(\n\t\t\tadd_svelte_meta(\n\t\t\t\tb.call('$.snippet', context.state.node, b.thunk(snippet_function), ...args),\n\t\t\t\tnode,\n\t\t\t\t'render'\n\t\t\t)\n\t\t);\n\t} else {\n\t\tstatements.push(\n\t\t\tadd_svelte_meta(\n\t\t\t\t(node.expression.type === 'CallExpression' ? b.call : b.maybe_call)(\n\t\t\t\t\tsnippet_function,\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\t...args\n\t\t\t\t),\n\t\t\t\tnode,\n\t\t\t\t'render'\n\t\t\t)\n\t\t);\n\t}\n\n\tconst async_values = memoizer.async_values();\n\tconst blockers = memoizer.blockers();\n\n\tif (async_values || blockers) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tblockers,\n\t\t\t\t\tmemoizer.async_values(),\n\t\t\t\t\tb.arrow([context.state.node, ...memoizer.async_ids()], b.block(statements))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\tif (context.state.is_standalone) {\n\t\t\tcontext.state.init.push(b.stmt(b.call('$.next')));\n\t\t}\n\t} else {\n\t\tcontext.state.init.push(statements.length === 1 ? statements[0] : b.block(statements));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SlotElement.js",
    "content": "/** @import { BlockStatement, Expression, ExpressionStatement, Literal, Property, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { build_attribute_value } from './shared/element.js';\nimport { Memoizer } from './shared/utils.js';\n\n/**\n * @param {AST.SlotElement} node\n * @param {ComponentContext} context\n */\nexport function SlotElement(node, context) {\n\t// <slot {a}>fallback</slot>  -->   $.slot($$slots.default, { get a() { .. } }, () => ...fallback);\n\tcontext.state.template.push_comment();\n\n\t/** @type {Property[]} */\n\tconst props = [];\n\n\t/** @type {Expression[]} */\n\tconst spreads = [];\n\n\t/** @type {ExpressionStatement[]} */\n\tconst lets = [];\n\n\tconst memoizer = new Memoizer();\n\n\tlet name = b.literal('default');\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'SpreadAttribute') {\n\t\t\tspreads.push(b.thunk(/** @type {Expression} */ (context.visit(attribute))));\n\t\t} else if (attribute.type === 'Attribute') {\n\t\t\tconst { value, has_state } = build_attribute_value(\n\t\t\t\tattribute.value,\n\t\t\t\tcontext,\n\t\t\t\t(value, metadata) =>\n\t\t\t\t\tmetadata.has_call || metadata.has_await\n\t\t\t\t\t\t? b.call('$.get', memoizer.add(value, metadata))\n\t\t\t\t\t\t: value\n\t\t\t);\n\n\t\t\tif (attribute.name === 'name') {\n\t\t\t\tname = /** @type {Literal} */ (value);\n\t\t\t} else if (attribute.name !== 'slot') {\n\t\t\t\tif (has_state) {\n\t\t\t\t\tprops.push(b.get(attribute.name, [b.return(value)]));\n\t\t\t\t} else {\n\t\t\t\t\tprops.push(b.init(attribute.name, value));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (attribute.type === 'LetDirective') {\n\t\t\tcontext.visit(attribute, { ...context.state, let_directives: lets });\n\t\t}\n\t}\n\n\tmemoizer.apply();\n\n\t// Let bindings first, they can be used on attributes\n\tcontext.state.init.push(...lets);\n\n\t/** @type {Statement[]} */\n\tconst statements = memoizer.deriveds(context.state.analysis.runes);\n\n\tconst props_expression =\n\t\tspreads.length === 0 ? b.object(props) : b.call('$.spread_props', b.object(props), ...spreads);\n\n\tconst fallback =\n\t\tnode.fragment.nodes.length === 0\n\t\t\t? b.null\n\t\t\t: b.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(node.fragment)));\n\n\tstatements.push(\n\t\tb.stmt(b.call('$.slot', context.state.node, b.id('$$props'), name, props_expression, fallback))\n\t);\n\n\tconst async_values = memoizer.async_values();\n\tconst blockers = memoizer.blockers();\n\n\tif (async_values || blockers) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tblockers,\n\t\t\t\t\tasync_values,\n\t\t\t\t\tb.arrow([context.state.node, ...memoizer.async_ids()], b.block(statements))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(statements.length === 1 ? statements[0] : b.block(statements));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js",
    "content": "/** @import { AssignmentPattern, BlockStatement, Expression, Identifier, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { dev } from '../../../../state.js';\nimport { extract_paths } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { get_value } from './shared/declarations.js';\n\n/**\n * @param {AST.SnippetBlock} node\n * @param {ComponentContext} context\n */\nexport function SnippetBlock(node, context) {\n\t// TODO hoist where possible\n\t/** @type {(Identifier | AssignmentPattern)[]} */\n\tconst args = [b.id('$$anchor')];\n\t/** @type {BlockStatement} */\n\tlet body;\n\n\t/** @type {Statement[]} */\n\tconst declarations = [];\n\n\tconst transform = { ...context.state.transform };\n\tconst child_state = { ...context.state, transform };\n\n\tfor (let i = 0; i < node.parameters.length; i++) {\n\t\tconst argument = node.parameters[i];\n\n\t\tif (!argument) continue;\n\n\t\tif (argument.type === 'Identifier') {\n\t\t\targs.push(b.assignment_pattern(argument, b.id('$.noop')));\n\t\t\ttransform[argument.name] = { read: b.call };\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet arg_alias = `$$arg${i}`;\n\t\targs.push(b.id(arg_alias));\n\n\t\tconst { inserts, paths } = extract_paths(argument, b.maybe_call(b.id(arg_alias)));\n\n\t\tfor (const { id, value } of inserts) {\n\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\ttransform[id.name] = { read: get_value };\n\n\t\t\tdeclarations.push(\n\t\t\t\tb.var(id, b.call('$.derived', /** @type {Expression} */ (context.visit(b.thunk(value)))))\n\t\t\t);\n\t\t}\n\n\t\tfor (const path of paths) {\n\t\t\tconst name = /** @type {Identifier} */ (path.node).name;\n\t\t\tconst needs_derived = path.has_default_value; // to ensure that default value is only called once\n\t\t\tconst fn = b.thunk(/** @type {Expression} */ (context.visit(path.expression, child_state)));\n\n\t\t\tdeclarations.push(b.let(path.node, needs_derived ? b.call('$.derived_safe_equal', fn) : fn));\n\n\t\t\ttransform[name] = {\n\t\t\t\tread: needs_derived ? get_value : b.call\n\t\t\t};\n\n\t\t\t// we need to eagerly evaluate the expression in order to hit any\n\t\t\t// 'Cannot access x before initialization' errors\n\t\t\tif (dev) {\n\t\t\t\tdeclarations.push(b.stmt(transform[name].read(b.id(name))));\n\t\t\t}\n\t\t}\n\t}\n\tconst block = /** @type {BlockStatement} */ (context.visit(node.body, child_state)).body;\n\tbody = b.block([\n\t\tdev ? b.stmt(b.call('$.validate_snippet_args', b.spread(b.id('arguments')))) : b.empty,\n\t\t...declarations,\n\t\t...block\n\t]);\n\n\t// in dev we use a FunctionExpression (not arrow function) so we can use `arguments`\n\tlet snippet = dev\n\t\t? b.call('$.wrap_snippet', b.id(context.state.analysis.name), b.function(null, args, body))\n\t\t: b.arrow(args, body);\n\n\tconst declaration = b.const(node.expression, snippet);\n\n\t// Top-level snippets are hoisted so they can be referenced in the `<script>`\n\tif (context.path.length === 1 && context.path[0].type === 'Fragment') {\n\t\tif (node.metadata.can_hoist) {\n\t\t\tcontext.state.module_level_snippets.push(declaration);\n\t\t} else {\n\t\t\tcontext.state.instance_level_snippets.push(declaration);\n\t\t}\n\t} else {\n\t\tcontext.state.snippets.push(declaration);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SpreadAttribute.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n\n/**\n * @param {AST.SpreadAttribute} node\n * @param {ComponentContext} context\n */\nexport function SpreadAttribute(node, context) {\n\treturn context.visit(node.expression);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteBody.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { visit_special_element } from './shared/special_element.js';\n\n/**\n * @param {AST.SvelteBody} node\n * @param {ComponentContext} context\n */\nexport function SvelteBody(node, context) {\n\tvisit_special_element(node, '$.document.body', context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteBoundary.js",
    "content": "/** @import { BlockStatement, Statement, Expression, VariableDeclaration } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { dev } from '../../../../state.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @param {AST.SvelteBoundary} node\n * @param {ComponentContext} context\n */\nexport function SvelteBoundary(node, context) {\n\tconst props = b.object([]);\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type !== 'Attribute' || attribute.value === true) {\n\t\t\t// these can't exist, because they would have caused validation\n\t\t\t// to fail, but typescript doesn't know that\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst chunk = Array.isArray(attribute.value)\n\t\t\t? /** @type {AST.ExpressionTag} */ (attribute.value[0])\n\t\t\t: attribute.value;\n\n\t\tconst expression = /** @type {Expression} */ (context.visit(chunk.expression, context.state));\n\n\t\tif (chunk.metadata.expression.has_state) {\n\t\t\tprops.properties.push(b.get(attribute.name, [b.return(expression)]));\n\t\t} else {\n\t\t\tprops.properties.push(b.init(attribute.name, expression));\n\t\t}\n\t}\n\n\tconst nodes = [];\n\n\t/** @type {Statement[]} */\n\tconst const_tags = [];\n\n\t/** @type {Statement[]} */\n\tconst hoisted = [];\n\n\tlet has_const = false;\n\n\t// const tags need to live inside the boundary, but might also be referenced in hoisted snippets.\n\t// to resolve this we cheat: we duplicate const tags inside snippets\n\t// We'll revert this behavior in the future, it was a mistake to allow this (Component snippets also don't do this).\n\tfor (const child of node.fragment.nodes) {\n\t\tif (child.type === 'ConstTag') {\n\t\t\thas_const = true;\n\t\t\tif (!context.state.options.experimental.async) {\n\t\t\t\tcontext.visit(child, {\n\t\t\t\t\t...context.state,\n\t\t\t\t\tconsts: const_tags,\n\t\t\t\t\tscope: context.state.scopes.get(node.fragment) ?? context.state.scope\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const child of node.fragment.nodes) {\n\t\tif (child.type === 'ConstTag') {\n\t\t\tif (context.state.options.experimental.async) {\n\t\t\t\tnodes.push(child);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (child.type === 'SnippetBlock') {\n\t\t\tif (\n\t\t\t\tcontext.state.options.experimental.async &&\n\t\t\t\thas_const &&\n\t\t\t\t!['failed', 'pending'].includes(child.expression.name)\n\t\t\t) {\n\t\t\t\t// we can't hoist snippets as they may reference const tags, so we just keep them in the fragment\n\t\t\t\tnodes.push(child);\n\t\t\t} else {\n\t\t\t\t/** @type {Statement[]} */\n\t\t\t\tconst statements = [];\n\n\t\t\t\tcontext.visit(child, { ...context.state, snippets: statements });\n\n\t\t\t\tconst snippet = /** @type {VariableDeclaration} */ (statements[0]);\n\n\t\t\t\tconst snippet_fn = dev\n\t\t\t\t\t? // @ts-expect-error we know this shape is correct\n\t\t\t\t\t\tsnippet.declarations[0].init.arguments[1]\n\t\t\t\t\t: snippet.declarations[0].init;\n\n\t\t\t\tif (!context.state.options.experimental.async) {\n\t\t\t\t\tsnippet_fn.body.body.unshift(\n\t\t\t\t\t\t...const_tags.filter((node) => node.type === 'VariableDeclaration')\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (['failed', 'pending'].includes(child.expression.name)) {\n\t\t\t\t\tprops.properties.push(b.prop('init', child.expression, child.expression));\n\t\t\t\t}\n\n\t\t\t\thoisted.push(snippet);\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tnodes.push(child);\n\t}\n\n\tconst block = /** @type {BlockStatement} */ (\n\t\tcontext.visit(\n\t\t\t{ ...node.fragment, nodes },\n\t\t\t// Since we're creating a new fragment the reference in scopes can't match, so we gotta attach the right scope manually\n\t\t\t{ ...context.state, scope: context.state.scopes.get(node.fragment) ?? context.state.scope }\n\t\t)\n\t);\n\n\tif (!context.state.options.experimental.async) {\n\t\tblock.body.unshift(...const_tags);\n\t}\n\n\tconst boundary = b.stmt(\n\t\tb.call('$.boundary', context.state.node, props, b.arrow([b.id('$$anchor')], block))\n\t);\n\n\tcontext.state.template.push_comment();\n\tcontext.state.init.push(hoisted.length > 0 ? b.block([...hoisted, boundary]) : boundary);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteComponent.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { build_component } from './shared/component.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @param {AST.SvelteComponent} node\n * @param {ComponentContext} context\n */\nexport function SvelteComponent(node, context) {\n\tconst component = build_component(node, '$$component', null, context);\n\tcontext.state.init.push(component);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteDocument.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { visit_special_element } from './shared/special_element.js';\n\n/**\n * @param {AST.SvelteDocument} node\n * @param {ComponentContext} context\n */\nexport function SvelteDocument(node, context) {\n\tvisit_special_element(node, '$.document', context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteElement.js",
    "content": "/** @import { BlockStatement, Expression, ExpressionStatement, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { dev, locator } from '../../../../state.js';\nimport { is_text_attribute } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { determine_namespace_for_children } from '../../utils.js';\nimport {\n\tbuild_attribute_value,\n\tbuild_attribute_effect,\n\tbuild_set_class\n} from './shared/element.js';\nimport { build_render_statement, Memoizer } from './shared/utils.js';\n\n/**\n * @param {AST.SvelteElement} node\n * @param {ComponentContext} context\n */\nexport function SvelteElement(node, context) {\n\tcontext.state.template.push_comment();\n\n\t/** @type {Array<AST.Attribute | AST.SpreadAttribute>} */\n\tconst attributes = [];\n\n\t/** @type {AST.Attribute['value'] | undefined} */\n\tlet dynamic_namespace = undefined;\n\n\t/** @type {AST.ClassDirective[]} */\n\tconst class_directives = [];\n\n\t/** @type {AST.StyleDirective[]} */\n\tconst style_directives = [];\n\n\t/** @type {ExpressionStatement[]} */\n\tconst statements = [];\n\n\t// Create a temporary context which picks up the init/update statements.\n\t// They'll then be added to the function parameter of $.element\n\tconst element_id = b.id(context.state.scope.generate('$$element'));\n\n\t/** @type {ComponentContext} */\n\tconst inner_context = {\n\t\t...context,\n\t\tstate: {\n\t\t\t...context.state,\n\t\t\tnode: element_id,\n\t\t\tinit: [],\n\t\t\tupdate: [],\n\t\t\tafter_update: [],\n\t\t\tmemoizer: new Memoizer()\n\t\t}\n\t};\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tif (attribute.name === 'xmlns' && !is_text_attribute(attribute)) {\n\t\t\t\tdynamic_namespace = attribute.value;\n\t\t\t}\n\t\t\tattributes.push(attribute);\n\t\t} else if (attribute.type === 'SpreadAttribute') {\n\t\t\tattributes.push(attribute);\n\t\t} else if (attribute.type === 'ClassDirective') {\n\t\t\tclass_directives.push(attribute);\n\t\t} else if (attribute.type === 'StyleDirective') {\n\t\t\tstyle_directives.push(attribute);\n\t\t} else if (attribute.type === 'LetDirective') {\n\t\t\tstatements.push(/** @type {ExpressionStatement} */ (context.visit(attribute)));\n\t\t} else if (attribute.type === 'OnDirective') {\n\t\t\tconst handler = /** @type {Expression} */ (context.visit(attribute, inner_context.state));\n\t\t\tinner_context.state.after_update.push(b.stmt(handler));\n\t\t} else {\n\t\t\tcontext.visit(attribute, inner_context.state);\n\t\t}\n\t}\n\n\tif (\n\t\tattributes.length === 1 &&\n\t\tattributes[0].type === 'Attribute' &&\n\t\tattributes[0].name.toLowerCase() === 'class' &&\n\t\tis_text_attribute(attributes[0])\n\t) {\n\t\tbuild_set_class(node, element_id, attributes[0], class_directives, inner_context, false);\n\t} else if (attributes.length) {\n\t\t// Always use spread because we don't know whether the element is a custom element or not,\n\t\t// therefore we need to do the \"how to set an attribute\" logic at runtime.\n\t\tbuild_attribute_effect(\n\t\t\tattributes,\n\t\t\tclass_directives,\n\t\t\tstyle_directives,\n\t\t\tinner_context,\n\t\t\tnode,\n\t\t\telement_id\n\t\t);\n\t}\n\n\tconst has_await = node.metadata.expression.has_await;\n\tconst has_blockers = node.metadata.expression.has_blockers();\n\n\tconst expression = /** @type {Expression} */ (context.visit(node.tag));\n\tconst get_tag = b.thunk(has_await ? b.call('$.get', b.id('$$tag')) : expression);\n\n\t/** @type {Statement[]} */\n\tconst inner = inner_context.state.init;\n\tif (inner_context.state.update.length > 0) {\n\t\tinner.push(build_render_statement(inner_context.state));\n\t}\n\tinner.push(...inner_context.state.after_update);\n\tinner.push(\n\t\t.../** @type {BlockStatement} */ (\n\t\t\tcontext.visit(node.fragment, {\n\t\t\t\t...context.state,\n\t\t\t\tmetadata: {\n\t\t\t\t\t...context.state.metadata,\n\t\t\t\t\tnamespace: determine_namespace_for_children(node, context.state.metadata.namespace)\n\t\t\t\t}\n\t\t\t})\n\t\t).body\n\t);\n\n\tif (dev) {\n\t\tstatements.push(b.stmt(b.call('$.validate_dynamic_element_tag', get_tag)));\n\t\tif (node.fragment.nodes.length > 0) {\n\t\t\tstatements.push(b.stmt(b.call('$.validate_void_dynamic_element', get_tag)));\n\t\t}\n\t}\n\n\tconst location = dev && locator(node.start);\n\n\tstatements.push(\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.element',\n\t\t\t\tcontext.state.node,\n\t\t\t\tget_tag,\n\t\t\t\tnode.metadata.svg || node.metadata.mathml ? b.true : b.false,\n\t\t\t\tinner.length > 0 && b.arrow([element_id, b.id('$$anchor')], b.block(inner)),\n\t\t\t\tdynamic_namespace && b.thunk(build_attribute_value(dynamic_namespace, context).value),\n\t\t\t\tlocation && b.array([b.literal(location.line), b.literal(location.column)])\n\t\t\t)\n\t\t)\n\t);\n\n\tif (has_await || has_blockers) {\n\t\tcontext.state.init.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tcontext.state.node,\n\t\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\t\thas_await ? b.array([b.thunk(expression, true)]) : b.void0,\n\t\t\t\t\tb.arrow(\n\t\t\t\t\t\thas_await ? [context.state.node, b.id('$$tag')] : [context.state.node],\n\t\t\t\t\t\tb.block(statements)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(statements.length === 1 ? statements[0] : b.block(statements));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteFragment.js",
    "content": "/** @import { BlockStatement, ExpressionStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n\n/**\n * @param {AST.SvelteFragment} node\n * @param {ComponentContext} context\n */\nexport function SvelteFragment(node, context) {\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'LetDirective') {\n\t\t\tcontext.visit(attribute);\n\t\t}\n\t}\n\n\tcontext.state.init.push(.../** @type {BlockStatement} */ (context.visit(node.fragment)).body);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteHead.js",
    "content": "/** @import { BlockStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { hash } from '../../../../../utils.js';\nimport { filename } from '../../../../state.js';\n\n/**\n * @param {AST.SvelteHead} node\n * @param {ComponentContext} context\n */\nexport function SvelteHead(node, context) {\n\t// TODO attributes?\n\tcontext.state.init.push(\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\tb.id('$.head', node.name_loc),\n\t\t\t\tb.literal(hash(filename)),\n\t\t\t\tb.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(node.fragment)))\n\t\t\t)\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteSelf.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { component_name } from '../../../../state.js';\nimport { build_component } from './shared/component.js';\n\n/**\n * @param {AST.SvelteSelf} node\n * @param {ComponentContext} context\n */\nexport function SvelteSelf(node, context) {\n\tconst component = build_component(node, component_name, node.name_loc, context);\n\tcontext.state.init.push(component);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteWindow.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { visit_special_element } from './shared/special_element.js';\n\n/**\n * @param {AST.SvelteWindow} node\n * @param {ComponentContext} context\n */\nexport function SvelteWindow(node, context) {\n\tvisit_special_element(node, '$.window', context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/TitleElement.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { build_template_chunk, Memoizer } from './shared/utils.js';\n\n/**\n * @param {AST.TitleElement} node\n * @param {ComponentContext} context\n */\nexport function TitleElement(node, context) {\n\tconst memoizer = new Memoizer();\n\tconst { has_state, value } = build_template_chunk(\n\t\t/** @type {any} */ (node.fragment.nodes),\n\t\tcontext,\n\t\tcontext.state,\n\t\t(value, metadata) => memoizer.add(value, metadata)\n\t);\n\tconst evaluated = context.state.scope.evaluate(value);\n\n\tconst statement = b.stmt(\n\t\tb.assignment(\n\t\t\t'=',\n\t\t\tb.member(b.id('$.document'), b.id('title', node.name_loc)),\n\t\t\tevaluated.is_known\n\t\t\t\t? b.literal(evaluated.value)\n\t\t\t\t: evaluated.is_defined\n\t\t\t\t\t? value\n\t\t\t\t\t: b.logical('??', value, b.literal(''))\n\t\t)\n\t);\n\n\t// Make sure it only changes the title once async work is done\n\tif (has_state) {\n\t\tcontext.state.after_update.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.deferred_template_effect',\n\t\t\t\t\tb.arrow(memoizer.apply(), b.block([statement])),\n\t\t\t\t\tmemoizer.sync_values(),\n\t\t\t\t\tmemoizer.async_values(),\n\t\t\t\t\tmemoizer.blockers()\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.after_update.push(b.stmt(b.call('$.effect', b.thunk(b.block([statement])))));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/TransitionDirective.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { TRANSITION_GLOBAL, TRANSITION_IN, TRANSITION_OUT } from '../../../../../constants.js';\nimport * as b from '#compiler/builders';\nimport { parse_directive_name } from './shared/utils.js';\n\n/**\n * @param {AST.TransitionDirective} node\n * @param {ComponentContext} context\n */\nexport function TransitionDirective(node, context) {\n\tlet flags = node.modifiers.includes('global') ? TRANSITION_GLOBAL : 0;\n\tif (node.intro) flags |= TRANSITION_IN;\n\tif (node.outro) flags |= TRANSITION_OUT;\n\n\tconst args = [\n\t\tb.literal(flags),\n\t\tcontext.state.node,\n\t\tb.thunk(/** @type {Expression} */ (context.visit(parse_directive_name(node.name))))\n\t];\n\n\tif (node.expression) {\n\t\targs.push(b.thunk(/** @type {Expression} */ (context.visit(node.expression))));\n\t}\n\n\t// in after_update to ensure it always happens after bind:this\n\tlet statement = b.stmt(b.call('$.transition', ...args));\n\n\tif (node.metadata.expression.is_async()) {\n\t\tstatement = b.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.run_after_blockers',\n\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\tb.thunk(b.block([statement]))\n\t\t\t)\n\t\t);\n\t}\n\n\tcontext.state.after_update.push(statement);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/UpdateExpression.js",
    "content": "/** @import { AssignmentExpression, Expression, UpdateExpression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { object } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { validate_mutation } from './shared/utils.js';\n\n/**\n * @param {UpdateExpression} node\n * @param {Context} context\n */\nexport function UpdateExpression(node, context) {\n\tconst argument = node.argument;\n\n\tif (\n\t\targument.type === 'MemberExpression' &&\n\t\targument.object.type === 'ThisExpression' &&\n\t\targument.property.type === 'PrivateIdentifier' &&\n\t\tcontext.state.state_fields.has('#' + argument.property.name)\n\t) {\n\t\tlet fn = '$.update';\n\t\tif (node.prefix) fn += '_pre';\n\n\t\t/** @type {Expression[]} */\n\t\tconst args = [argument];\n\t\tif (node.operator === '--') {\n\t\t\targs.push(b.literal(-1));\n\t\t}\n\n\t\treturn b.call(fn, ...args);\n\t}\n\n\tif (argument.type !== 'Identifier' && argument.type !== 'MemberExpression') {\n\t\tthrow new Error('An impossible state was reached');\n\t}\n\n\tconst left = object(argument);\n\tconst transformers = left && context.state.transform[left.name];\n\n\tif (left === argument && transformers?.update) {\n\t\t// we don't need to worry about ownership_invalid_mutation here, because\n\t\t// we're not mutating but reassigning\n\t\treturn transformers.update(node);\n\t}\n\n\tlet update = /** @type {Expression} */ (context.next());\n\n\tif (left && transformers?.mutate) {\n\t\tupdate = transformers.mutate(\n\t\t\tleft,\n\t\t\t/** @type {AssignmentExpression | UpdateExpression} */ (update)\n\t\t);\n\t}\n\n\treturn validate_mutation(node, context, update);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/UseDirective.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport { parse_directive_name } from './shared/utils.js';\n\n/**\n * @param {AST.UseDirective} node\n * @param {ComponentContext} context\n */\nexport function UseDirective(node, context) {\n\tconst params = [b.id('$$node')];\n\n\tif (node.expression) {\n\t\tparams.push(b.id('$$action_arg'));\n\t}\n\n\t/** @type {Expression[]} */\n\tconst args = [\n\t\tcontext.state.node,\n\t\tb.arrow(\n\t\t\tparams,\n\t\t\tb.maybe_call(\n\t\t\t\t/** @type {Expression} */ (context.visit(parse_directive_name(node.name))),\n\t\t\t\t...params\n\t\t\t)\n\t\t)\n\t];\n\n\tif (node.expression) {\n\t\targs.push(b.thunk(/** @type {Expression} */ (context.visit(node.expression))));\n\t}\n\n\t// actions need to run after attribute updates in order with bindings/events\n\tlet statement = b.stmt(b.call('$.action', ...args));\n\n\tif (node.metadata.expression.is_async()) {\n\t\tstatement = b.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.run_after_blockers',\n\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\tb.thunk(b.block([statement]))\n\t\t\t)\n\t\t);\n\t}\n\n\tcontext.state.init.push(statement);\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js",
    "content": "/** @import { CallExpression, Expression, Identifier, Literal, VariableDeclaration, VariableDeclarator } from 'estree' */\n/** @import { Binding } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport { dev, is_ignored, locate_node } from '../../../../state.js';\nimport { extract_paths, save } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport * as assert from '../../../../utils/assert.js';\nimport { get_rune } from '../../../scope.js';\nimport { get_prop_source, is_prop_source, is_state_source, should_proxy } from '../utils.js';\nimport { get_value } from './shared/declarations.js';\n\n/**\n * @param {VariableDeclaration} node\n * @param {ComponentContext} context\n */\nexport function VariableDeclaration(node, context) {\n\t/** @type {VariableDeclarator[]} */\n\tconst declarations = [];\n\n\tif (context.state.analysis.runes) {\n\t\tfor (const declarator of node.declarations) {\n\t\t\tconst init = /** @type {Expression} */ (declarator.init);\n\t\t\tconst rune = get_rune(init, context.state.scope);\n\n\t\t\tif (\n\t\t\t\t!rune ||\n\t\t\t\trune === '$effect.tracking' ||\n\t\t\t\trune === '$effect.root' ||\n\t\t\t\trune === '$inspect' ||\n\t\t\t\trune === '$inspect.trace' ||\n\t\t\t\trune === '$state.snapshot' ||\n\t\t\t\trune === '$host'\n\t\t\t) {\n\t\t\t\tdeclarations.push(/** @type {VariableDeclarator} */ (context.visit(declarator)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rune === '$props.id') {\n\t\t\t\t// skip\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rune === '$props') {\n\t\t\t\t/** @type {string[]} */\n\t\t\t\tconst seen = ['$$slots', '$$events', '$$legacy'];\n\n\t\t\t\tif (context.state.analysis.custom_element) {\n\t\t\t\t\tseen.push('$$host');\n\t\t\t\t}\n\n\t\t\t\tif (declarator.id.type === 'Identifier') {\n\t\t\t\t\t/** @type {Expression[]} */\n\t\t\t\t\tconst args = [b.id('$$props'), b.array(seen.map((name) => b.literal(name)))];\n\n\t\t\t\t\tif (dev) {\n\t\t\t\t\t\t// include rest name, so we can provide informative error messages\n\t\t\t\t\t\targs.push(b.literal(declarator.id.name));\n\t\t\t\t\t}\n\n\t\t\t\t\tdeclarations.push(b.declarator(declarator.id, b.call('$.rest_props', ...args)));\n\t\t\t\t} else {\n\t\t\t\t\tassert.equal(declarator.id.type, 'ObjectPattern');\n\n\t\t\t\t\tfor (const property of declarator.id.properties) {\n\t\t\t\t\t\tif (property.type === 'Property') {\n\t\t\t\t\t\t\tconst key = /** @type {Identifier | Literal} */ (property.key);\n\t\t\t\t\t\t\tconst name = key.type === 'Identifier' ? key.name : /** @type {string} */ (key.value);\n\n\t\t\t\t\t\t\tseen.push(name);\n\n\t\t\t\t\t\t\tlet id =\n\t\t\t\t\t\t\t\tproperty.value.type === 'AssignmentPattern' ? property.value.left : property.value;\n\t\t\t\t\t\t\tassert.equal(id.type, 'Identifier');\n\t\t\t\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(id.name));\n\t\t\t\t\t\t\tlet initial =\n\t\t\t\t\t\t\t\tbinding.initial && /** @type {Expression} */ (context.visit(binding.initial));\n\t\t\t\t\t\t\t// We're adding proxy here on demand and not within the prop runtime function so that\n\t\t\t\t\t\t\t// people not using proxied state anywhere in their code don't have to pay the additional bundle size cost\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tinitial &&\n\t\t\t\t\t\t\t\tbinding.kind === 'bindable_prop' &&\n\t\t\t\t\t\t\t\tshould_proxy(initial, context.state.scope)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinitial = b.call('$.proxy', initial);\n\n\t\t\t\t\t\t\t\tif (dev) {\n\t\t\t\t\t\t\t\t\tinitial = b.call('$.tag_proxy', initial, b.literal(id.name));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (is_prop_source(binding, context.state)) {\n\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\tb.declarator(id, get_prop_source(binding, context.state, name, initial))\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// RestElement\n\t\t\t\t\t\t\t/** @type {Expression[]} */\n\t\t\t\t\t\t\tconst args = [b.id('$$props'), b.array(seen.map((name) => b.literal(name)))];\n\n\t\t\t\t\t\t\tif (dev) {\n\t\t\t\t\t\t\t\t// include rest name, so we can provide informative error messages\n\t\t\t\t\t\t\t\targs.push(b.literal(/** @type {Identifier} */ (property.argument).name));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdeclarations.push(b.declarator(property.argument, b.call('$.rest_props', ...args)));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// TODO\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst args = /** @type {CallExpression} */ (init).arguments;\n\t\t\tconst value = /** @type {Expression} */ (args[0]) ?? b.void0; // TODO do we need the void 0? can we just omit it altogether?\n\n\t\t\tif (rune === '$state' || rune === '$state.raw') {\n\t\t\t\t/**\n\t\t\t\t * @param {Identifier} id\n\t\t\t\t * @param {Expression} value\n\t\t\t\t */\n\t\t\t\tconst create_state_declarator = (id, value) => {\n\t\t\t\t\tconst binding = /** @type {import('#compiler').Binding} */ (\n\t\t\t\t\t\tcontext.state.scope.get(id.name)\n\t\t\t\t\t);\n\t\t\t\t\tconst is_state = is_state_source(binding, context.state.analysis);\n\t\t\t\t\tconst is_proxy = should_proxy(value, context.state.scope);\n\n\t\t\t\t\tif (rune === '$state' && is_proxy) {\n\t\t\t\t\t\tvalue = b.call('$.proxy', value);\n\n\t\t\t\t\t\tif (dev && !is_state) {\n\t\t\t\t\t\t\tvalue = b.call('$.tag_proxy', value, b.literal(id.name));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (is_state) {\n\t\t\t\t\t\tconst callee = b.id('$.state', /** @type {CallExpression} */ (init).callee.loc);\n\t\t\t\t\t\tvalue = b.call(callee, value);\n\n\t\t\t\t\t\tif (dev) {\n\t\t\t\t\t\t\tvalue = b.call('$.tag', value, b.literal(id.name));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t};\n\n\t\t\t\tif (declarator.id.type === 'Identifier') {\n\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(value));\n\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\tb.declarator(declarator.id, create_state_declarator(declarator.id, expression))\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconst tmp = b.id(context.state.scope.generate('tmp'));\n\t\t\t\t\tconst { inserts, paths } = extract_paths(declarator.id, tmp);\n\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\tb.declarator(tmp, /** @type {Expression} */ (context.visit(value))),\n\t\t\t\t\t\t...inserts.map(({ id, value }) => {\n\t\t\t\t\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\t\t\t\t\tcontext.state.transform[id.name] = { read: get_value };\n\n\t\t\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(b.thunk(value)));\n\t\t\t\t\t\t\tlet call = b.call('$.derived', expression);\n\n\t\t\t\t\t\t\tif (dev) {\n\t\t\t\t\t\t\t\tconst label = `[$state ${declarator.id.type === 'ArrayPattern' ? 'iterable' : 'object'}]`;\n\t\t\t\t\t\t\t\tcall = b.call('$.tag', call, b.literal(label));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn b.declarator(id, call);\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t...paths.map((path) => {\n\t\t\t\t\t\t\tconst value = /** @type {Expression} */ (context.visit(path.expression));\n\t\t\t\t\t\t\tconst binding = context.state.scope.get(/** @type {Identifier} */ (path.node).name);\n\t\t\t\t\t\t\treturn b.declarator(\n\t\t\t\t\t\t\t\tpath.node,\n\t\t\t\t\t\t\t\tbinding?.kind === 'state' || binding?.kind === 'raw_state'\n\t\t\t\t\t\t\t\t\t? create_state_declarator(binding.node, value)\n\t\t\t\t\t\t\t\t\t: value\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rune === '$derived' || rune === '$derived.by') {\n\t\t\t\tconst is_async = context.state.analysis.async_deriveds.has(\n\t\t\t\t\t/** @type {CallExpression} */ (init)\n\t\t\t\t);\n\n\t\t\t\t// for now, only wrap async derived in $.save if it's not\n\t\t\t\t// a top-level instance derived. TODO in future maybe we\n\t\t\t\t// can dewaterfall all of them?\n\t\t\t\tconst should_save = context.state.is_instance && context.state.scope.function_depth > 1;\n\n\t\t\t\tif (declarator.id.type === 'Identifier') {\n\t\t\t\t\tlet expression = /** @type {Expression} */ (context.visit(value));\n\n\t\t\t\t\tif (is_async) {\n\t\t\t\t\t\tconst location = dev && !is_ignored(init, 'await_waterfall') && locate_node(init);\n\n\t\t\t\t\t\t/** @type {Expression} */\n\t\t\t\t\t\tlet call = b.call(\n\t\t\t\t\t\t\t'$.async_derived',\n\t\t\t\t\t\t\tb.thunk(expression, true),\n\t\t\t\t\t\t\tdev && b.literal(declarator.id.name),\n\t\t\t\t\t\t\tlocation ? b.literal(location) : undefined\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcall = should_save ? save(call) : b.await(call);\n\n\t\t\t\t\t\tdeclarations.push(b.declarator(declarator.id, call));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (rune === '$derived') expression = b.thunk(expression);\n\n\t\t\t\t\t\tlet call = b.call('$.derived', expression);\n\t\t\t\t\t\tif (dev) call = b.call('$.tag', call, b.literal(declarator.id.name));\n\n\t\t\t\t\t\tdeclarations.push(b.declarator(declarator.id, call));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst init = /** @type {CallExpression} */ (declarator.init);\n\t\t\t\t\tlet expression = /** @type {Expression} */ (context.visit(value));\n\n\t\t\t\t\tlet rhs = value;\n\n\t\t\t\t\tif (rune !== '$derived' || init.arguments[0].type !== 'Identifier') {\n\t\t\t\t\t\tconst id = b.id(context.state.scope.generate('$$d'));\n\n\t\t\t\t\t\t/** @type {Expression} */\n\t\t\t\t\t\tlet call = b.call('$.derived', rune === '$derived' ? b.thunk(expression) : expression);\n\n\t\t\t\t\t\trhs = b.call('$.get', id);\n\n\t\t\t\t\t\tif (is_async) {\n\t\t\t\t\t\t\tconst location = dev && !is_ignored(init, 'await_waterfall') && locate_node(init);\n\n\t\t\t\t\t\t\tcall = b.call(\n\t\t\t\t\t\t\t\t'$.async_derived',\n\t\t\t\t\t\t\t\tb.thunk(expression, true),\n\t\t\t\t\t\t\t\tdev &&\n\t\t\t\t\t\t\t\t\tb.literal(\n\t\t\t\t\t\t\t\t\t\t`[$derived ${declarator.id.type === 'ArrayPattern' ? 'iterable' : 'object'}]`\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tlocation ? b.literal(location) : undefined\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tcall = should_save ? save(call) : b.await(call);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeclarations.push(b.declarator(id, call));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { inserts, paths } = extract_paths(declarator.id, rhs);\n\n\t\t\t\t\tfor (const { id, value } of inserts) {\n\t\t\t\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\t\t\t\tcontext.state.transform[id.name] = { read: get_value };\n\n\t\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(b.thunk(value)));\n\t\t\t\t\t\tlet call = b.call('$.derived', expression);\n\n\t\t\t\t\t\tif (dev) {\n\t\t\t\t\t\t\tconst label = `[$derived ${declarator.id.type === 'ArrayPattern' ? 'iterable' : 'object'}]`;\n\t\t\t\t\t\t\tcall = b.call('$.tag', call, b.literal(label));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeclarations.push(b.declarator(id, call));\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const path of paths) {\n\t\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(path.expression));\n\t\t\t\t\t\tconst call = b.call('$.derived', b.thunk(expression));\n\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\tb.declarator(\n\t\t\t\t\t\t\t\tpath.node,\n\t\t\t\t\t\t\t\tdev\n\t\t\t\t\t\t\t\t\t? b.call('$.tag', call, b.literal(/** @type {Identifier} */ (path.node).name))\n\t\t\t\t\t\t\t\t\t: call\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (const declarator of node.declarations) {\n\t\t\tconst bindings = /** @type {Binding[]} */ (context.state.scope.get_bindings(declarator));\n\t\t\tconst has_state = bindings.some((binding) => binding.kind === 'state');\n\t\t\tconst has_props = bindings.some((binding) => binding.kind === 'bindable_prop');\n\n\t\t\tif (!has_state && !has_props) {\n\t\t\t\tdeclarations.push(/** @type {VariableDeclarator} */ (context.visit(declarator)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (has_props) {\n\t\t\t\tif (declarator.id.type !== 'Identifier') {\n\t\t\t\t\t// Turn export let into props. It's really really weird because export let { x: foo, z: [bar]} = ..\n\t\t\t\t\t// means that foo and bar are the props (i.e. the leaves are the prop names), not x and z.\n\t\t\t\t\tconst tmp = b.id(context.state.scope.generate('tmp'));\n\t\t\t\t\tconst { inserts, paths } = extract_paths(declarator.id, tmp);\n\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\tb.declarator(\n\t\t\t\t\t\t\ttmp,\n\t\t\t\t\t\t\t/** @type {Expression} */ (context.visit(/** @type {Expression} */ (declarator.init)))\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const { id, value } of inserts) {\n\t\t\t\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\t\t\t\tcontext.state.transform[id.name] = { read: get_value };\n\n\t\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(b.thunk(value)));\n\t\t\t\t\t\tdeclarations.push(b.declarator(id, b.call('$.derived', expression)));\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const path of paths) {\n\t\t\t\t\t\tconst name = /** @type {Identifier} */ (path.node).name;\n\t\t\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(name));\n\t\t\t\t\t\tconst value = /** @type {Expression} */ (context.visit(path.expression));\n\n\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\tb.declarator(\n\t\t\t\t\t\t\t\tpath.node,\n\t\t\t\t\t\t\t\tbinding.kind === 'bindable_prop'\n\t\t\t\t\t\t\t\t\t? get_prop_source(binding, context.state, binding.prop_alias ?? name, value)\n\t\t\t\t\t\t\t\t\t: value\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(declarator.id.name));\n\n\t\t\t\tdeclarations.push(\n\t\t\t\t\tb.declarator(\n\t\t\t\t\t\tdeclarator.id,\n\t\t\t\t\t\tget_prop_source(\n\t\t\t\t\t\t\tbinding,\n\t\t\t\t\t\t\tcontext.state,\n\t\t\t\t\t\t\tbinding.prop_alias ?? declarator.id.name,\n\t\t\t\t\t\t\tdeclarator.init && /** @type {Expression} */ (context.visit(declarator.init))\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdeclarations.push(\n\t\t\t\t...create_state_declarators(\n\t\t\t\t\tdeclarator,\n\t\t\t\t\tcontext,\n\t\t\t\t\t/** @type {Expression} */ (declarator.init && context.visit(declarator.init))\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tif (declarations.length === 0) {\n\t\treturn b.empty;\n\t}\n\n\treturn {\n\t\t...node,\n\t\tdeclarations\n\t};\n}\n\n/**\n * Creates the output for a state declaration in legacy mode.\n * @param {VariableDeclarator} declarator\n * @param {ComponentContext} context\n * @param {Expression} value\n */\nfunction create_state_declarators(declarator, context, value) {\n\tif (declarator.id.type === 'Identifier') {\n\t\treturn [\n\t\t\tb.declarator(\n\t\t\t\tdeclarator.id,\n\t\t\t\tb.call('$.mutable_source', value, context.state.analysis.immutable ? b.true : undefined)\n\t\t\t)\n\t\t];\n\t}\n\n\tconst tmp = b.id(context.state.scope.generate('tmp'));\n\tconst { inserts, paths } = extract_paths(declarator.id, tmp);\n\n\treturn [\n\t\tb.declarator(tmp, value),\n\t\t...inserts.map(({ id, value }) => {\n\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\tcontext.state.transform[id.name] = { read: get_value };\n\n\t\t\tconst expression = /** @type {Expression} */ (context.visit(b.thunk(value)));\n\t\t\treturn b.declarator(id, b.call('$.derived', expression));\n\t\t}),\n\t\t...paths.map((path) => {\n\t\t\tconst value = /** @type {Expression} */ (context.visit(path.expression));\n\t\t\tconst binding = context.state.scope.get(/** @type {Identifier} */ (path.node).name);\n\n\t\t\treturn b.declarator(\n\t\t\t\tpath.node,\n\t\t\t\tbinding?.kind === 'state'\n\t\t\t\t\t? b.call('$.mutable_source', value, context.state.analysis.immutable ? b.true : undefined)\n\t\t\t\t\t: value\n\t\t\t);\n\t\t})\n\t];\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js",
    "content": "/** @import { BlockStatement, Expression, ExpressionStatement, Identifier, MemberExpression, Pattern, Property, SequenceExpression, SourceLocation, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../../types.js' */\nimport { dev, is_ignored } from '../../../../../state.js';\nimport { get_attribute_chunks, object } from '../../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { add_svelte_meta, build_bind_this, Memoizer, validate_binding } from '../shared/utils.js';\nimport { build_attribute_value } from '../shared/element.js';\nimport { build_event_handler } from './events.js';\nimport { determine_slot } from '../../../../../utils/slot.js';\n\n/**\n * @param {AST.Component | AST.SvelteComponent | AST.SvelteSelf} node\n * @param {string} component_name\n * @param {SourceLocation | null} loc\n * @param {ComponentContext} context\n * @returns {Statement}\n */\nexport function build_component(node, component_name, loc, context) {\n\t/** @type {Expression} */\n\tconst anchor = context.state.node;\n\n\t/** @type {Array<Property[] | Expression>} */\n\tconst props_and_spreads = [];\n\n\t/** @type {Array<() => void>} */\n\tconst delayed_props = [];\n\n\t/** @type {ExpressionStatement[]} */\n\tconst lets = [];\n\n\t/** @type {Record<string, typeof context.state>} */\n\tconst states = {\n\t\tdefault: {\n\t\t\t...context.state,\n\t\t\tscope: node.metadata.scopes.default,\n\t\t\ttransform: { ...context.state.transform }\n\t\t}\n\t};\n\n\t/** @type {Record<string, AST.TemplateNode[]>} */\n\tconst children = {};\n\n\t/** @type {Record<string, Expression[]>} */\n\tconst events = {};\n\n\tconst memoizer = new Memoizer();\n\n\t/** @type {Property[]} */\n\tconst custom_css_props = [];\n\n\t/** @type {Identifier | MemberExpression | SequenceExpression | null} */\n\tlet bind_this = null;\n\n\t/** @type {ExpressionStatement[]} */\n\tconst binding_initializers = [];\n\n\tconst is_component_dynamic =\n\t\tnode.type === 'SvelteComponent' || (node.type === 'Component' && node.metadata.dynamic);\n\n\t// The variable name used for the component inside $.component()\n\tconst intermediate_name =\n\t\tnode.type === 'Component' && node.metadata.dynamic\n\t\t\t? context.state.scope.generate(node.name)\n\t\t\t: '$$component';\n\n\t/**\n\t * If this component has a slot property, it is a named slot within another component. In this case\n\t * the slot scope applies to the component itself, too, and not just its children.\n\t */\n\tlet slot_scope_applies_to_itself = !!determine_slot(node);\n\n\t/**\n\t * Components may have a children prop and also have child nodes. In this case, we assume\n\t * that the child component isn't using render tags yet and pass the slot as $$slots.default.\n\t * We're not doing it for spread attributes, as this would result in too many false positives.\n\t */\n\tlet has_children_prop = false;\n\n\t/**\n\t * @param {Property} prop\n\t * @param {boolean} [delay]\n\t */\n\tfunction push_prop(prop, delay = false) {\n\t\tconst do_push = () => {\n\t\t\tconst current = props_and_spreads.at(-1);\n\t\t\tconst current_is_props = Array.isArray(current);\n\t\t\tconst props = current_is_props ? current : [];\n\t\t\tprops.push(prop);\n\t\t\tif (!current_is_props) {\n\t\t\t\tprops_and_spreads.push(props);\n\t\t\t}\n\t\t};\n\n\t\tif (delay) {\n\t\t\tdelayed_props.push(do_push);\n\t\t} else {\n\t\t\tdo_push();\n\t\t}\n\t}\n\n\tif (slot_scope_applies_to_itself) {\n\t\tfor (const attribute of node.attributes) {\n\t\t\tif (attribute.type === 'LetDirective') {\n\t\t\t\tcontext.visit(attribute, { ...context.state, let_directives: lets });\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'LetDirective') {\n\t\t\tif (!slot_scope_applies_to_itself) {\n\t\t\t\tcontext.visit(attribute, { ...states.default, let_directives: lets });\n\t\t\t}\n\t\t} else if (attribute.type === 'OnDirective') {\n\t\t\tif (!attribute.expression) {\n\t\t\t\tcontext.state.analysis.needs_props = true;\n\t\t\t}\n\n\t\t\tlet handler = build_event_handler(\n\t\t\t\tattribute.expression,\n\t\t\t\tattribute.metadata.expression,\n\t\t\t\tcontext\n\t\t\t);\n\n\t\t\tif (attribute.modifiers.includes('once')) {\n\t\t\t\thandler = b.call('$.once', handler);\n\t\t\t}\n\n\t\t\t(events[attribute.name] ||= []).push(handler);\n\t\t} else if (attribute.type === 'SpreadAttribute') {\n\t\t\tconst expression = /** @type {Expression} */ (context.visit(attribute));\n\t\t\tconst memoized_expression = memoizer.add(expression, attribute.metadata.expression);\n\t\t\tconst is_memoized = expression !== memoized_expression;\n\n\t\t\tif (\n\t\t\t\tis_memoized ||\n\t\t\t\tattribute.metadata.expression.has_state ||\n\t\t\t\tattribute.metadata.expression.has_await\n\t\t\t) {\n\t\t\t\tprops_and_spreads.push(\n\t\t\t\t\tb.thunk(is_memoized ? b.call('$.get', memoized_expression) : expression)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tprops_and_spreads.push(expression);\n\t\t\t}\n\t\t} else if (attribute.type === 'Attribute') {\n\t\t\tif (attribute.name.startsWith('--')) {\n\t\t\t\tcustom_css_props.push(\n\t\t\t\t\tb.init(\n\t\t\t\t\t\tattribute.name,\n\t\t\t\t\t\tbuild_attribute_value(attribute.value, context, (value, metadata) => {\n\t\t\t\t\t\t\tconst memoized = memoizer.add(value, metadata);\n\n\t\t\t\t\t\t\t// TODO put the derived in the local block\n\t\t\t\t\t\t\treturn value !== memoized ? b.call('$.get', memoized) : value;\n\t\t\t\t\t\t}).value\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attribute.name === 'slot') {\n\t\t\t\tslot_scope_applies_to_itself = true;\n\t\t\t}\n\n\t\t\tif (attribute.name === 'children') {\n\t\t\t\thas_children_prop = true;\n\t\t\t}\n\n\t\t\tconst { value, has_state } = build_attribute_value(\n\t\t\t\tattribute.value,\n\t\t\t\tcontext,\n\t\t\t\t(value, metadata) => {\n\t\t\t\t\t// When we have a non-simple computation, anything other than an Identifier or Member expression,\n\t\t\t\t\t// then there's a good chance it needs to be memoized to avoid over-firing when read within the\n\t\t\t\t\t// child component (e.g. `active={i === index}`)\n\t\t\t\t\tconst should_wrap_in_derived =\n\t\t\t\t\t\tmetadata.has_await ||\n\t\t\t\t\t\tget_attribute_chunks(attribute.value).some((n) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tn.type === 'ExpressionTag' &&\n\t\t\t\t\t\t\t\tn.expression.type !== 'Identifier' &&\n\t\t\t\t\t\t\t\tn.expression.type !== 'MemberExpression'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\n\t\t\t\t\tconst memoized = memoizer.add(value, metadata, should_wrap_in_derived);\n\n\t\t\t\t\treturn value !== memoized ? b.call('$.get', memoized) : value;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (has_state) {\n\t\t\t\tpush_prop(b.get(attribute.name, [b.return(value)]));\n\t\t\t} else {\n\t\t\t\tpush_prop(b.init(attribute.name, value));\n\t\t\t}\n\t\t} else if (attribute.type === 'BindDirective') {\n\t\t\tconst expression = /** @type {Expression} */ (\n\t\t\t\tcontext.visit(attribute.expression, { ...context.state, memoizer })\n\t\t\t);\n\n\t\t\t// Bindings are a bit special: we don't want to add them to (async) deriveds but we need to check if they have blockers\n\t\t\tmemoizer.check_blockers(attribute.metadata.expression);\n\n\t\t\tif (\n\t\t\t\tdev &&\n\t\t\t\tattribute.name !== 'this' &&\n\t\t\t\t!is_ignored(node, 'ownership_invalid_binding') &&\n\t\t\t\t// bind:x={() => x.y, y => x.y = y} will be handled by the assignment expression binding validation\n\t\t\t\tattribute.expression.type !== 'SequenceExpression'\n\t\t\t) {\n\t\t\t\tconst left = object(attribute.expression);\n\t\t\t\tconst binding = left && context.state.scope.get(left.name);\n\n\t\t\t\tif (binding?.kind === 'bindable_prop' || binding?.kind === 'prop') {\n\t\t\t\t\tcontext.state.analysis.needs_mutation_validation = true;\n\t\t\t\t\tbinding_initializers.push(\n\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\t'$$ownership_validator.binding',\n\t\t\t\t\t\t\t\tb.literal(binding.node.name),\n\t\t\t\t\t\t\t\tb.id(is_component_dynamic ? intermediate_name : component_name),\n\t\t\t\t\t\t\t\tb.thunk(expression)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (expression.type === 'SequenceExpression') {\n\t\t\t\tif (attribute.name === 'this') {\n\t\t\t\t\tbind_this = attribute.expression;\n\t\t\t\t} else {\n\t\t\t\t\tconst [get, set] = expression.expressions;\n\t\t\t\t\tconst get_id = b.id(context.state.scope.generate('bind_get'));\n\t\t\t\t\tconst set_id = b.id(context.state.scope.generate('bind_set'));\n\n\t\t\t\t\tcontext.state.init.push(b.var(get_id, get));\n\t\t\t\t\tcontext.state.init.push(b.var(set_id, set));\n\n\t\t\t\t\tpush_prop(b.get(attribute.name, [b.return(b.call(get_id))]));\n\t\t\t\t\tpush_prop(b.set(attribute.name, [b.stmt(b.call(set_id, b.id('$$value')))]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tdev &&\n\t\t\t\t\texpression.type === 'MemberExpression' &&\n\t\t\t\t\tcontext.state.analysis.runes &&\n\t\t\t\t\t!is_ignored(node, 'binding_property_non_reactive')\n\t\t\t\t) {\n\t\t\t\t\tvalidate_binding(context.state, attribute, expression);\n\t\t\t\t}\n\n\t\t\t\tif (attribute.name === 'this') {\n\t\t\t\t\tbind_this = attribute.expression;\n\t\t\t\t} else {\n\t\t\t\t\tconst is_store_sub =\n\t\t\t\t\t\tattribute.expression.type === 'Identifier' &&\n\t\t\t\t\t\tcontext.state.scope.get(attribute.expression.name)?.kind === 'store_sub';\n\n\t\t\t\t\tconst get = is_store_sub\n\t\t\t\t\t\t? b.get(attribute.name, [b.stmt(b.call('$.mark_store_binding')), b.return(expression)])\n\t\t\t\t\t\t: b.get(attribute.name, [b.return(expression)]);\n\n\t\t\t\t\tconst assignment = b.assignment(\n\t\t\t\t\t\t'=',\n\t\t\t\t\t\t/** @type {Pattern} */ (attribute.expression),\n\t\t\t\t\t\tb.id('$$value')\n\t\t\t\t\t);\n\n\t\t\t\t\tconst set = b.set(attribute.name, [\n\t\t\t\t\t\tb.stmt(/** @type {Expression} */ (context.visit(assignment)))\n\t\t\t\t\t]);\n\n\t\t\t\t\tget.key.loc = attribute.name_loc;\n\t\t\t\t\tset.key.loc = attribute.name_loc;\n\n\t\t\t\t\t// Delay prop pushes so bindings come at the end, to avoid spreads overwriting them\n\t\t\t\t\tpush_prop(get, true);\n\t\t\t\t\tpush_prop(set, true);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (attribute.type === 'AttachTag') {\n\t\t\tconst evaluated = context.state.scope.evaluate(attribute.expression);\n\n\t\t\tlet expression = /** @type {Expression} */ (context.visit(attribute.expression));\n\n\t\t\tif (attribute.metadata.expression.has_state) {\n\t\t\t\texpression = b.arrow(\n\t\t\t\t\t[b.id('$$node')],\n\t\t\t\t\tb.call(\n\t\t\t\t\t\tevaluated.is_function ? expression : b.logical('||', expression, b.id('$.noop')),\n\t\t\t\t\t\tb.id('$$node')\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// TODO also support await expressions here?\n\t\t\tmemoizer.check_blockers(attribute.metadata.expression);\n\n\t\t\tpush_prop(b.prop('init', b.call('$.attachment'), expression, true));\n\t\t}\n\t}\n\n\tdelayed_props.forEach((fn) => fn());\n\n\tif (slot_scope_applies_to_itself) {\n\t\tcontext.state.init.push(...lets);\n\t}\n\n\tif (Object.keys(events).length > 0) {\n\t\tconst events_expression = b.object(\n\t\t\tObject.keys(events).map((name) =>\n\t\t\t\tb.init(name, events[name].length > 1 ? b.array(events[name]) : events[name][0])\n\t\t\t)\n\t\t);\n\t\tpush_prop(b.init('$$events', events_expression));\n\t}\n\n\t/** @type {Statement[]} */\n\tconst snippet_declarations = [];\n\n\t/** @type {import('estree').Property[]} */\n\tconst serialized_slots = [];\n\n\t// Group children by slot\n\tfor (const child of node.fragment.nodes) {\n\t\tif (child.type === 'SnippetBlock') {\n\t\t\t// the SnippetBlock visitor adds a declaration to `init`, but if it's directly\n\t\t\t// inside a component then we want to hoist them into a block so that they\n\t\t\t// can be used as props without creating conflicts\n\t\t\tcontext.visit(child, {\n\t\t\t\t...context.state,\n\t\t\t\tsnippets: snippet_declarations\n\t\t\t});\n\n\t\t\tpush_prop(b.prop('init', child.expression, child.expression));\n\n\t\t\t// Interop: allows people to pass snippets when component still uses slots\n\t\t\tserialized_slots.push(\n\t\t\t\tb.init(child.expression.name === 'children' ? 'default' : child.expression.name, b.true)\n\t\t\t);\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet slot_name = determine_slot(child) ?? 'default';\n\n\t\t(children[slot_name] ||= []).push(child);\n\t}\n\n\t// Serialize each slot\n\tfor (const slot_name of Object.keys(children)) {\n\t\tconst block = /** @type {BlockStatement} */ (\n\t\t\tcontext.visit(\n\t\t\t\t{\n\t\t\t\t\t...node.fragment,\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tnodes: children[slot_name]\n\t\t\t\t},\n\t\t\t\tslot_name === 'default'\n\t\t\t\t\t? slot_scope_applies_to_itself\n\t\t\t\t\t\t? context.state\n\t\t\t\t\t\t: states.default\n\t\t\t\t\t: {\n\t\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\t\tscope: node.metadata.scopes[slot_name],\n\t\t\t\t\t\t\ttransform: { ...context.state.transform }\n\t\t\t\t\t\t}\n\t\t\t)\n\t\t);\n\n\t\tif (block.body.length === 0) continue;\n\n\t\tconst slot_fn = b.arrow(\n\t\t\t[b.id('$$anchor'), b.id('$$slotProps')],\n\t\t\tb.block([\n\t\t\t\t...(slot_name === 'default' && !slot_scope_applies_to_itself ? lets : []),\n\t\t\t\t...block.body\n\t\t\t])\n\t\t);\n\n\t\tif (slot_name === 'default' && !has_children_prop) {\n\t\t\tif (\n\t\t\t\tlets.length === 0 &&\n\t\t\t\tchildren.default.every(\n\t\t\t\t\t(node) =>\n\t\t\t\t\t\tnode.type !== 'SvelteFragment' ||\n\t\t\t\t\t\t!node.attributes.some((attr) => attr.type === 'LetDirective')\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// create `children` prop...\n\t\t\t\tpush_prop(\n\t\t\t\t\tb.init(\n\t\t\t\t\t\t'children',\n\t\t\t\t\t\tdev ? b.call('$.wrap_snippet', b.id(context.state.analysis.name), slot_fn) : slot_fn\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t// and `$$slots.default: true` so that `<slot>` on the child works\n\t\t\t\tserialized_slots.push(b.init(slot_name, b.true));\n\t\t\t} else {\n\t\t\t\t// create `$$slots.default`...\n\t\t\t\tserialized_slots.push(b.init(slot_name, slot_fn));\n\n\t\t\t\t// and a `children` prop that errors\n\t\t\t\tpush_prop(b.init('children', b.id('$.invalid_default_snippet')));\n\t\t\t}\n\t\t} else {\n\t\t\tserialized_slots.push(b.init(slot_name, slot_fn));\n\t\t}\n\t}\n\n\tif (serialized_slots.length > 0) {\n\t\tpush_prop(b.init('$$slots', b.object(serialized_slots)));\n\t}\n\n\tif (\n\t\t!context.state.analysis.runes &&\n\t\tnode.attributes.some((attribute) => attribute.type === 'BindDirective')\n\t) {\n\t\tpush_prop(b.init('$$legacy', b.true));\n\t}\n\n\tconst props_expression =\n\t\tprops_and_spreads.length === 0 ||\n\t\t(props_and_spreads.length === 1 && Array.isArray(props_and_spreads[0]))\n\t\t\t? b.object(/** @type {Property[]} */ (props_and_spreads[0]) || [])\n\t\t\t: b.call(\n\t\t\t\t\t'$.spread_props',\n\t\t\t\t\t...props_and_spreads.map((p) => (Array.isArray(p) ? b.object(p) : p))\n\t\t\t\t);\n\n\t/** @param {Expression} node_id */\n\tlet fn = (node_id) => {\n\t\t// TODO We can remove this ternary once we remove legacy mode, since in runes mode dynamic components\n\t\t// will be handled separately through the `$.component` function, and then the component name will\n\t\t// always be referenced through just the identifier here.\n\t\tconst callee = is_component_dynamic\n\t\t\t? b.id(intermediate_name)\n\t\t\t: /** @type {Expression} */ (context.visit(b.member_id(component_name)));\n\n\t\t// line up the `Foo` in `Foo(...)` and `<Foo>` for usable stack traces\n\t\tcallee.loc = loc;\n\n\t\treturn b.call(callee, node_id, props_expression);\n\t};\n\n\tif (bind_this !== null) {\n\t\tconst prev = fn;\n\n\t\tfn = (node_id) => {\n\t\t\treturn build_bind_this(bind_this, prev(node_id), context);\n\t\t};\n\t}\n\n\tif (node.type !== 'SvelteSelf') {\n\t\t// Component name itself could be blocked on async values\n\t\tmemoizer.check_blockers(node.metadata.expression);\n\t}\n\n\tlet statements = [...snippet_declarations, ...memoizer.deriveds(context.state.analysis.runes)];\n\n\tif (is_component_dynamic) {\n\t\tconst prev = fn;\n\n\t\tfn = (node_id) => {\n\t\t\treturn b.call(\n\t\t\t\t'$.component',\n\t\t\t\tnode_id,\n\t\t\t\tb.thunk(\n\t\t\t\t\t/** @type {Expression} */ (\n\t\t\t\t\t\tcontext.visit(node.type === 'Component' ? b.member_id(component_name) : node.expression)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tb.arrow(\n\t\t\t\t\t[b.id('$$anchor'), b.id(intermediate_name)],\n\t\t\t\t\tb.block([...binding_initializers, b.stmt(prev(b.id('$$anchor')))])\n\t\t\t\t)\n\t\t\t);\n\t\t};\n\t} else {\n\t\tstatements.push(...binding_initializers);\n\t}\n\n\tif (Object.keys(custom_css_props).length > 0) {\n\t\tif (context.state.metadata.namespace === 'svg') {\n\t\t\t// this boils down to <g><!></g>\n\t\t\tcontext.state.template.push_element('g', node.start, false);\n\t\t} else {\n\t\t\t// this boils down to <svelte-css-wrapper style='display: contents'><!></svelte-css-wrapper>\n\t\t\tcontext.state.template.push_element('svelte-css-wrapper', node.start, false);\n\t\t\tcontext.state.template.set_prop('style', 'display: contents');\n\t\t}\n\n\t\tcontext.state.template.push_comment();\n\t\tcontext.state.template.pop_element();\n\n\t\tstatements.push(\n\t\t\tb.stmt(b.call('$.css_props', anchor, b.thunk(b.object(custom_css_props)))),\n\t\t\tb.stmt(fn(b.member(anchor, 'lastChild'))),\n\t\t\tb.stmt(b.call('$.reset', anchor))\n\t\t);\n\t} else {\n\t\tcontext.state.template.push_comment();\n\n\t\tstatements.push(add_svelte_meta(fn(anchor), node, 'component', { componentTag: node.name }));\n\t}\n\n\tmemoizer.apply();\n\n\tconst async_values = memoizer.async_values();\n\tconst blockers = memoizer.blockers();\n\n\tif (async_values || blockers) {\n\t\tstatements = [\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.async',\n\t\t\t\t\tanchor,\n\t\t\t\t\tblockers,\n\t\t\t\t\tasync_values,\n\t\t\t\t\tb.arrow([b.id('$$anchor'), ...memoizer.async_ids()], b.block(statements))\n\t\t\t\t)\n\t\t\t)\n\t\t];\n\n\t\tif (context.state.is_standalone) {\n\t\t\tstatements.push(b.stmt(b.call('$.next')));\n\t\t}\n\t}\n\n\treturn statements.length > 1 ? b.block(statements) : statements[0];\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/declarations.js",
    "content": "/** @import { Identifier } from 'estree' */\n/** @import { ComponentContext, Context } from '../../types' */\nimport { is_state_source } from '../../utils.js';\nimport * as b from '#compiler/builders';\n\n/**\n * Turns `foo` into `$.get(foo)`\n * @param {Identifier} node\n */\nexport function get_value(node) {\n\treturn b.call('$.get', node);\n}\n\n/**\n *\n * @param {Context | ComponentContext} context\n */\nexport function add_state_transformers(context) {\n\tfor (const [name, binding] of context.state.scope.declarations) {\n\t\tif (\n\t\t\tis_state_source(binding, context.state.analysis) ||\n\t\t\tbinding.kind === 'derived' ||\n\t\t\tbinding.kind === 'legacy_reactive'\n\t\t) {\n\t\t\tcontext.state.transform[name] = {\n\t\t\t\tread: binding.declaration_kind === 'var' ? (node) => b.call('$.safe_get', node) : get_value,\n\t\t\t\tassign: (node, value, proxy = false) => {\n\t\t\t\t\tlet call = b.call('$.set', node, value, proxy && b.true);\n\n\t\t\t\t\tif (context.state.scope.get(`$${node.name}`)?.kind === 'store_sub') {\n\t\t\t\t\t\tcall = b.call('$.store_unsub', call, b.literal(`$${node.name}`), b.id('$$stores'));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn call;\n\t\t\t\t},\n\t\t\t\tmutate: (node, mutation) => {\n\t\t\t\t\tif (context.state.analysis.runes) {\n\t\t\t\t\t\treturn mutation;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.call('$.mutate', node, mutation);\n\t\t\t\t},\n\t\t\t\tupdate: (node) => {\n\t\t\t\t\treturn b.call(\n\t\t\t\t\t\tnode.prefix ? '$.update_pre' : '$.update',\n\t\t\t\t\t\tnode.argument,\n\t\t\t\t\t\tnode.operator === '--' && b.literal(-1)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js",
    "content": "/** @import { Expression, Identifier, ObjectExpression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../../types' */\nimport { escape_html } from '../../../../../../escaping.js';\nimport { normalize_attribute } from '../../../../../../utils.js';\nimport { is_ignored } from '../../../../../state.js';\nimport { is_event_attribute } from '../../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { build_class_directives_object, build_style_directives_object } from '../RegularElement.js';\nimport { build_expression, build_template_chunk, Memoizer } from './utils.js';\nimport { ExpressionMetadata } from '../../../../nodes.js';\n\n/**\n * @param {Array<AST.Attribute | AST.SpreadAttribute>} attributes\n * @param {AST.ClassDirective[]} class_directives\n * @param {AST.StyleDirective[]} style_directives\n * @param {ComponentContext} context\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {Identifier} element_id\n * @param {boolean} [should_remove_defaults]\n */\nexport function build_attribute_effect(\n\tattributes,\n\tclass_directives,\n\tstyle_directives,\n\tcontext,\n\telement,\n\telement_id,\n\tshould_remove_defaults = false\n) {\n\t/** @type {ObjectExpression['properties']} */\n\tconst values = [];\n\n\tconst memoizer = new Memoizer();\n\n\tfor (const attribute of attributes) {\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tconst { value } = build_attribute_value(attribute.value, context, (value, metadata) =>\n\t\t\t\tmemoizer.add(value, metadata)\n\t\t\t);\n\n\t\t\tif (\n\t\t\t\tis_event_attribute(attribute) &&\n\t\t\t\t(value.type === 'ArrowFunctionExpression' || value.type === 'FunctionExpression')\n\t\t\t) {\n\t\t\t\t// Give the event handler a stable ID so it isn't removed and readded on every update\n\t\t\t\tconst id = context.state.scope.generate('event_handler');\n\t\t\t\tcontext.state.init.push(b.var(id, value));\n\t\t\t\tvalues.push(b.init(attribute.name, b.id(id)));\n\t\t\t} else {\n\t\t\t\tvalues.push(b.init(attribute.name, value));\n\t\t\t}\n\t\t} else {\n\t\t\tlet value = /** @type {Expression} */ (context.visit(attribute));\n\n\t\t\tvalue = memoizer.add(value, attribute.metadata.expression);\n\n\t\t\tvalues.push(b.spread(value));\n\t\t}\n\t}\n\n\tif (class_directives.length) {\n\t\tvalues.push(\n\t\t\tb.prop(\n\t\t\t\t'init',\n\t\t\t\tb.array([b.id('$.CLASS')]),\n\t\t\t\tbuild_class_directives_object(class_directives, context, memoizer)\n\t\t\t)\n\t\t);\n\t}\n\n\tif (style_directives.length) {\n\t\tvalues.push(\n\t\t\tb.prop(\n\t\t\t\t'init',\n\t\t\t\tb.array([b.id('$.STYLE')]),\n\t\t\t\tbuild_style_directives_object(style_directives, context, memoizer)\n\t\t\t)\n\t\t);\n\t}\n\n\tconst ids = memoizer.apply();\n\n\tcontext.state.init.push(\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.attribute_effect',\n\t\t\t\telement_id,\n\t\t\t\tb.arrow(ids, b.object(values)),\n\t\t\t\tmemoizer.sync_values(),\n\t\t\t\tmemoizer.async_values(),\n\t\t\t\tmemoizer.blockers(),\n\t\t\t\telement.metadata.scoped &&\n\t\t\t\t\tcontext.state.analysis.css.hash !== '' &&\n\t\t\t\t\tb.literal(context.state.analysis.css.hash),\n\t\t\t\tshould_remove_defaults && b.true,\n\t\t\t\tis_ignored(element, 'hydration_attribute_changed') && b.true\n\t\t\t)\n\t\t)\n\t);\n}\n\n/**\n * @param {AST.Attribute['value']} value\n * @param {ComponentContext} context\n * @param {(value: Expression, metadata: ExpressionMetadata) => Expression} memoize\n * @returns {{ value: Expression, has_state: boolean }}\n */\nexport function build_attribute_value(value, context, memoize = (value) => value) {\n\tif (value === true) {\n\t\treturn { value: b.true, has_state: false };\n\t}\n\n\tif (!Array.isArray(value) || value.length === 1) {\n\t\tconst chunk = Array.isArray(value) ? value[0] : value;\n\n\t\tif (chunk.type === 'Text') {\n\t\t\treturn { value: b.literal(chunk.data), has_state: false };\n\t\t}\n\n\t\tlet expression = build_expression(context, chunk.expression, chunk.metadata.expression);\n\n\t\treturn {\n\t\t\tvalue: memoize(expression, chunk.metadata.expression),\n\t\t\thas_state: chunk.metadata.expression.has_state || chunk.metadata.expression.is_async()\n\t\t};\n\t}\n\n\treturn build_template_chunk(value, context, context.state, memoize);\n}\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {AST.Attribute} attribute\n */\nexport function get_attribute_name(element, attribute) {\n\tif (!element.metadata.svg && !element.metadata.mathml) {\n\t\treturn normalize_attribute(attribute.name);\n\t}\n\n\treturn attribute.name;\n}\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {Identifier} node_id\n * @param {AST.Attribute} attribute\n * @param {AST.ClassDirective[]} class_directives\n * @param {ComponentContext} context\n * @param {boolean} is_html\n */\nexport function build_set_class(element, node_id, attribute, class_directives, context, is_html) {\n\tlet { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) => {\n\t\tif (attribute.metadata.needs_clsx) {\n\t\t\tvalue = b.call('$.clsx', value);\n\t\t}\n\n\t\treturn context.state.memoizer.add(value, metadata);\n\t});\n\n\t/** @type {Identifier | undefined} */\n\tlet previous_id;\n\n\t/** @type {ObjectExpression | Identifier | undefined} */\n\tlet prev;\n\n\t/** @type {Expression | undefined} */\n\tlet next;\n\n\tif (class_directives.length) {\n\t\tnext = build_class_directives_object(class_directives, context);\n\t\thas_state ||= class_directives.some(\n\t\t\t(d) => d.metadata.expression.has_state || d.metadata.expression.is_async()\n\t\t);\n\n\t\tif (has_state) {\n\t\t\tprevious_id = b.id(context.state.scope.generate('classes'));\n\t\t\tcontext.state.init.push(b.declaration('let', [b.declarator(previous_id)]));\n\t\t\tprev = previous_id;\n\t\t} else {\n\t\t\tprev = b.object([]);\n\t\t}\n\t}\n\n\t/** @type {Expression | undefined} */\n\tlet css_hash;\n\n\tif (element.metadata.scoped && context.state.analysis.css.hash) {\n\t\tif (value.type === 'Literal' && (value.value === '' || value.value === null)) {\n\t\t\tvalue = b.literal(context.state.analysis.css.hash);\n\t\t} else if (value.type === 'Literal' && typeof value.value === 'string') {\n\t\t\tvalue = b.literal(escape_html(value.value, true) + ' ' + context.state.analysis.css.hash);\n\t\t} else {\n\t\t\tcss_hash = b.literal(context.state.analysis.css.hash);\n\t\t}\n\t}\n\n\tif (!css_hash && next) {\n\t\tcss_hash = b.null;\n\t}\n\n\t/** @type {Expression} */\n\tlet set_class = b.call(\n\t\t'$.set_class',\n\t\tnode_id,\n\t\tis_html ? b.literal(1) : b.literal(0),\n\t\tvalue,\n\t\tcss_hash,\n\t\tprev,\n\t\tnext\n\t);\n\n\tif (previous_id) {\n\t\tset_class = b.assignment('=', previous_id, set_class);\n\t}\n\n\t(has_state ? context.state.update : context.state.init).push(b.stmt(set_class));\n}\n\n/**\n * @param {Identifier} node_id\n * @param {AST.Attribute} attribute\n * @param {AST.StyleDirective[]} style_directives\n * @param {ComponentContext} context\n */\nexport function build_set_style(node_id, attribute, style_directives, context) {\n\tlet { value, has_state } = build_attribute_value(attribute.value, context, (value, metadata) =>\n\t\tcontext.state.memoizer.add(value, metadata)\n\t);\n\n\t/** @type {Identifier | undefined} */\n\tlet previous_id;\n\n\t/** @type {ObjectExpression | Identifier | undefined} */\n\tlet prev;\n\n\t/** @type {Expression | undefined} */\n\tlet next;\n\n\tif (style_directives.length) {\n\t\tnext = build_style_directives_object(style_directives, context);\n\t\thas_state ||= style_directives.some(\n\t\t\t(d) => d.metadata.expression.has_state || d.metadata.expression.is_async()\n\t\t);\n\n\t\tif (has_state) {\n\t\t\tprevious_id = b.id(context.state.scope.generate('styles'));\n\t\t\tcontext.state.init.push(b.declaration('let', [b.declarator(previous_id)]));\n\t\t\tprev = previous_id;\n\t\t} else {\n\t\t\tprev = b.object([]);\n\t\t}\n\t}\n\n\t/** @type {Expression} */\n\tlet set_style = b.call('$.set_style', node_id, value, prev, next);\n\n\tif (previous_id) {\n\t\tset_style = b.assignment('=', previous_id, set_style);\n\t}\n\n\t(has_state ? context.state.update : context.state.init).push(b.stmt(set_style));\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/events.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../../types' */\nimport { is_capture_event, is_passive_event } from '../../../../../../utils.js';\nimport { dev, locator } from '../../../../../state.js';\nimport * as b from '#compiler/builders';\nimport { ExpressionMetadata } from '../../../../nodes.js';\n\n/**\n * @param {AST.Attribute} node\n * @param {ComponentContext} context\n */\nexport function visit_event_attribute(node, context) {\n\tlet capture = false;\n\n\tlet event_name = node.name.slice(2);\n\tif (is_capture_event(event_name)) {\n\t\tevent_name = event_name.slice(0, -7);\n\t\tcapture = true;\n\t}\n\n\t// we still need to support the weird `onclick=\"{() => {...}}\" form\n\tconst tag = Array.isArray(node.value)\n\t\t? /** @type {AST.ExpressionTag} */ (node.value[0])\n\t\t: /** @type {AST.ExpressionTag} */ (node.value);\n\n\tlet handler = build_event_handler(tag.expression, tag.metadata.expression, context);\n\n\tif (node.metadata.delegated) {\n\t\tcontext.state.events.add(event_name);\n\t}\n\n\tconst statement = b.stmt(\n\t\tbuild_event(\n\t\t\tcontext,\n\t\t\tevent_name,\n\t\t\thandler,\n\t\t\tcapture,\n\t\t\tis_passive_event(event_name) ? true : undefined,\n\t\t\tnode.metadata.delegated\n\t\t)\n\t);\n\n\tconst type = /** @type {AST.SvelteNode} */ (context.path.at(-1)).type;\n\n\tif (type === 'SvelteDocument' || type === 'SvelteWindow' || type === 'SvelteBody') {\n\t\t// These nodes are above the component tree, and its events should run parent first\n\t\tcontext.state.init.push(statement);\n\t} else {\n\t\tcontext.state.after_update.push(statement);\n\t}\n}\n\n/**\n * Creates a `$.event(...)` call for non-delegated event handlers\n * @param {ComponentContext} context\n * @param {string} event_name\n * @param {Expression} handler\n * @param {boolean} capture\n * @param {boolean | undefined} passive\n * @param {boolean | undefined} delegated\n */\nexport function build_event(context, event_name, handler, capture, passive, delegated) {\n\tlet fn = handler;\n\n\tif (dev && handler.type === 'ArrowFunctionExpression') {\n\t\t// create a named function for better debugging\n\t\tconst name = context.state.scope.generate(event_name);\n\n\t\tfn = b.function(\n\t\t\tb.id(name),\n\t\t\thandler.params,\n\t\t\thandler.body.type === 'BlockStatement' ? handler.body : b.block([b.return(handler.body)]),\n\t\t\thandler.async\n\t\t);\n\t}\n\n\treturn b.call(\n\t\tdelegated ? '$.delegated' : '$.event',\n\t\tb.literal(event_name),\n\t\tcontext.state.node,\n\t\tfn,\n\t\tcapture && b.true,\n\t\tpassive === undefined ? undefined : b.literal(passive)\n\t);\n}\n\n/**\n * Creates an event handler\n * @param {Expression | null} node\n * @param {ExpressionMetadata} metadata\n * @param {ComponentContext} context\n * @returns {Expression}\n */\nexport function build_event_handler(node, metadata, context) {\n\tif (node === null) {\n\t\t// bubble event\n\t\treturn b.function(\n\t\t\tnull,\n\t\t\t[b.id('$$arg')],\n\t\t\tb.block([b.stmt(b.call('$.bubble_event.call', b.this, b.id('$$props'), b.id('$$arg')))])\n\t\t);\n\t}\n\n\tlet handler = /** @type {Expression} */ (context.visit(node));\n\n\t// inline handler\n\tif (handler.type === 'ArrowFunctionExpression' || handler.type === 'FunctionExpression') {\n\t\treturn handler;\n\t}\n\n\t// function declared in the script\n\tif (handler.type === 'Identifier') {\n\t\tconst binding = context.state.scope.get(handler.name);\n\n\t\tif (binding?.is_function()) {\n\t\t\treturn handler;\n\t\t}\n\n\t\t// local variable can be assigned directly\n\t\t// except in dev mode where when need $.apply()\n\t\t// in order to handle warnings.\n\t\tif (!dev && binding?.declaration_kind !== 'import') {\n\t\t\treturn handler;\n\t\t}\n\t}\n\n\tif (metadata.has_call) {\n\t\t// memoize where necessary\n\t\tconst id = b.id(context.state.scope.generate('event_handler'));\n\n\t\tcontext.state.init.push(b.var(id, b.call('$.derived', b.thunk(handler))));\n\t\thandler = b.call('$.get', id);\n\t}\n\n\t// wrap the handler in a function, so the expression is re-evaluated for each event\n\tlet call = b.call(b.member(handler, 'apply', false, true), b.this, b.id('$$args'));\n\n\tif (dev) {\n\t\tconst loc = locator(/** @type {number} */ (node.start));\n\n\t\tconst remove_parens =\n\t\t\tnode.type === 'CallExpression' &&\n\t\t\tnode.arguments.length === 0 &&\n\t\t\tnode.callee.type === 'Identifier';\n\n\t\tcall = b.call(\n\t\t\t'$.apply',\n\t\t\tb.thunk(handler),\n\t\t\tb.this,\n\t\t\tb.id('$$args'),\n\t\t\tb.id(context.state.analysis.name),\n\t\t\tb.array([b.literal(loc.line), b.literal(loc.column)]),\n\t\t\thas_side_effects(node) && b.true,\n\t\t\tremove_parens && b.true\n\t\t);\n\t}\n\n\treturn b.function(null, [b.rest(b.id('$$args'))], b.block([b.stmt(call)]));\n}\n\n/**\n * @param {Expression} node\n */\nfunction has_side_effects(node) {\n\tif (\n\t\tnode.type === 'CallExpression' ||\n\t\tnode.type === 'NewExpression' ||\n\t\tnode.type === 'AssignmentExpression' ||\n\t\tnode.type === 'UpdateExpression'\n\t) {\n\t\treturn true;\n\t}\n\n\tif (node.type === 'SequenceExpression') {\n\t\treturn node.expressions.some(has_side_effects);\n\t}\n\n\treturn false;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/fragment.js",
    "content": "/** @import { Expression, Identifier, SourceLocation } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../../types' */\nimport { cannot_be_set_statically } from '../../../../../../utils.js';\nimport { is_event_attribute, is_text_attribute } from '../../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { is_custom_element_node } from '../../../../nodes.js';\nimport { build_template_chunk } from './utils.js';\n\n/**\n * Processes an array of template nodes, joining sibling text/expression nodes\n * (e.g. `{a} b {c}`) into a single update function. Along the way it creates\n * corresponding template node references these updates are applied to.\n * @param {AST.SvelteNode[]} nodes\n * @param {(is_text: boolean) => Expression} initial\n * @param {boolean} is_element\n * @param {ComponentContext} context\n */\nexport function process_children(nodes, initial, is_element, context) {\n\tconst within_bound_contenteditable = context.state.metadata.bound_contenteditable;\n\tlet prev = initial;\n\tlet skipped = 0;\n\n\t/** @typedef {Array<AST.Text | AST.ExpressionTag>} Sequence */\n\t/** @type {Sequence} */\n\tlet sequence = [];\n\n\t/** @param {boolean} is_text */\n\tfunction get_node(is_text) {\n\t\tif (skipped === 0) {\n\t\t\treturn prev(is_text);\n\t\t}\n\n\t\treturn b.call(\n\t\t\t'$.sibling',\n\t\t\tprev(false),\n\t\t\t(is_text || skipped !== 1) && b.literal(skipped),\n\t\t\tis_text && b.true\n\t\t);\n\t}\n\n\t/**\n\t * @param {boolean} is_text\n\t * @param {string} name\n\t * @param {SourceLocation | null} [loc]\n\t */\n\tfunction flush_node(is_text, name, loc) {\n\t\tconst expression = get_node(is_text);\n\t\tlet id = expression;\n\n\t\tif (id.type !== 'Identifier') {\n\t\t\tid = b.id(context.state.scope.generate(name), loc);\n\t\t\tcontext.state.init.push(b.var(id, expression));\n\t\t}\n\n\t\tprev = () => id;\n\t\tskipped = 1; // the next node is `$.sibling(id)`\n\n\t\treturn id;\n\t}\n\n\t/**\n\t * @param {Sequence} sequence\n\t */\n\tfunction flush_sequence(sequence) {\n\t\tif (sequence.every((node) => node.type === 'Text')) {\n\t\t\tskipped += 1;\n\t\t\tcontext.state.template.push_text(sequence);\n\t\t\treturn;\n\t\t}\n\n\t\tcontext.state.template.push_text([{ type: 'Text', data: ' ', raw: ' ', start: -1, end: -1 }]);\n\n\t\tconst { has_state, value } = build_template_chunk(sequence, context);\n\n\t\t// if this is a standalone `{expression}`, make sure we handle the case where\n\t\t// no text node was created because the expression was empty during SSR\n\t\tconst is_text = sequence.length === 1;\n\t\tconst id = flush_node(is_text, 'text');\n\n\t\tconst update = b.stmt(b.call('$.set_text', id, value));\n\n\t\tif (has_state && !within_bound_contenteditable) {\n\t\t\tcontext.state.update.push(update);\n\t\t} else {\n\t\t\tcontext.state.init.push(b.stmt(b.assignment('=', b.member(id, 'nodeValue'), value)));\n\t\t}\n\t}\n\n\tfor (const node of nodes) {\n\t\tif (node.type === 'Text' || node.type === 'ExpressionTag') {\n\t\t\tsequence.push(node);\n\t\t} else {\n\t\t\tif (sequence.length > 0) {\n\t\t\t\tflush_sequence(sequence);\n\t\t\t\tsequence = [];\n\t\t\t}\n\n\t\t\tlet child_state = context.state;\n\n\t\t\tif (is_static_element(node)) {\n\t\t\t\tskipped += 1;\n\t\t\t} else if (\n\t\t\t\t(node.type === 'EachBlock' || node.type === 'HtmlTag') &&\n\t\t\t\tnodes.length === 1 &&\n\t\t\t\tis_element &&\n\t\t\t\t// In case it's wrapped in async the async logic will want to skip sibling nodes up until the end, hence we cannot make this controlled\n\t\t\t\t// TODO switch this around and instead optimize for elements with a single block child and not require extra comments (neither for async nor normally)\n\t\t\t\t!node.metadata.expression.is_async()\n\t\t\t) {\n\t\t\t\tnode.metadata.is_controlled = true;\n\t\t\t} else {\n\t\t\t\tconst id = flush_node(\n\t\t\t\t\tfalse,\n\t\t\t\t\tnode.type === 'RegularElement' ? node.name : 'node',\n\t\t\t\t\tnode.type === 'RegularElement' ? node.name_loc : null\n\t\t\t\t);\n\n\t\t\t\tchild_state = { ...context.state, node: id };\n\t\t\t}\n\n\t\t\tcontext.visit(node, child_state);\n\t\t}\n\t}\n\n\tif (sequence.length > 0) {\n\t\tflush_sequence(sequence);\n\t}\n\n\t// if there are trailing static text nodes/elements,\n\t// traverse to the last (n - 1) one when hydrating\n\tif (skipped > 1) {\n\t\tskipped -= 1;\n\t\tcontext.state.init.push(b.stmt(b.call('$.next', skipped !== 1 && b.literal(skipped))));\n\t}\n}\n\n/**\n * @param {AST.SvelteNode} node\n */\nexport function is_static_element(node) {\n\tif (node.type !== 'RegularElement') return false;\n\tif (node.fragment.metadata.dynamic) return false;\n\tif (is_custom_element_node(node)) return false; // we're setting all attributes on custom elements through properties\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type !== 'Attribute') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (is_event_attribute(attribute)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (cannot_be_set_statically(attribute.name)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (attribute.name === 'dir') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\t['input', 'textarea'].includes(node.name) &&\n\t\t\t['value', 'checked'].includes(attribute.name)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (node.name === 'option' && attribute.name === 'value') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We need to apply src and loading after appending the img to the DOM for lazy loading to work\n\t\tif (node.name === 'img' && attribute.name === 'loading') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (attribute.value !== true && !is_text_attribute(attribute)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/function.js",
    "content": "/** @import { ArrowFunctionExpression, FunctionExpression, Node } from 'estree' */\n/** @import { ComponentContext } from '../../types' */\n\n/**\n * @param {ArrowFunctionExpression | FunctionExpression} node\n * @param {ComponentContext} context\n */\nexport const visit_function = (node, context) => {\n\tlet state = { ...context.state, in_constructor: false, in_derived: false };\n\n\tif (node.type === 'FunctionExpression') {\n\t\tconst parent = /** @type {Node} */ (context.path.at(-1));\n\t\tstate.in_constructor = parent.type === 'MethodDefinition' && parent.kind === 'constructor';\n\t}\n\n\tcontext.next(state);\n};\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/special_element.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../../types' */\nimport * as b from '#compiler/builders';\n\n/**\n *\n * @param {AST.SvelteBody | AST.SvelteDocument | AST.SvelteWindow} node\n * @param {string} id\n * @param {ComponentContext} context\n */\nexport function visit_special_element(node, id, context) {\n\tconst state = { ...context.state, node: b.id(id) };\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'OnDirective') {\n\t\t\tcontext.state.init.push(b.stmt(/** @type {Expression} */ (context.visit(attribute, state))));\n\t\t} else {\n\t\t\tcontext.visit(attribute, state);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js",
    "content": "/** @import { AssignmentExpression, Expression, Identifier, MemberExpression, SequenceExpression, Literal, Super, UpdateExpression, ExpressionStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentClientTransformState, ComponentContext, Context } from '../../types' */\nimport { walk } from 'zimmerframe';\nimport { object } from '../../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { sanitize_template_string } from '../../../../../utils/sanitize_template_string.js';\nimport { regex_is_valid_identifier } from '../../../../patterns.js';\nimport is_reference from 'is-reference';\nimport { dev, is_ignored, locator, component_name } from '../../../../../state.js';\nimport { build_getter } from '../../utils.js';\nimport { ExpressionMetadata } from '../../../../nodes.js';\n\n/**\n * A utility for extracting complex expressions (such as call expressions)\n * from templates and replacing them with `$0`, `$1` etc\n */\nexport class Memoizer {\n\t/** @type {Array<{ id: Identifier, expression: Expression }>} */\n\t#sync = [];\n\n\t/** @type {Array<{ id: Identifier, expression: Expression }>} */\n\t#async = [];\n\n\t/** @type {Set<Expression>} */\n\t#blockers = new Set();\n\n\t/**\n\t * @param {Expression} expression\n\t * @param {ExpressionMetadata} metadata\n\t * @param {boolean} memoize_if_state\n\t */\n\tadd(expression, metadata, memoize_if_state = false) {\n\t\tthis.check_blockers(metadata);\n\n\t\tconst should_memoize =\n\t\t\tmetadata.has_call || metadata.has_await || (memoize_if_state && metadata.has_state);\n\n\t\tif (!should_memoize) {\n\t\t\t// no memoization required\n\t\t\treturn expression;\n\t\t}\n\n\t\tconst id = b.id('#'); // filled in later\n\n\t\t(metadata.has_await ? this.#async : this.#sync).push({ id, expression });\n\n\t\treturn id;\n\t}\n\n\t/**\n\t * @param {ExpressionMetadata} metadata\n\t */\n\tcheck_blockers(metadata) {\n\t\tfor (const binding of metadata.dependencies) {\n\t\t\tif (binding.blocker) {\n\t\t\t\tthis.#blockers.add(binding.blocker);\n\t\t\t}\n\t\t}\n\t}\n\n\tapply() {\n\t\treturn [...this.#sync, ...this.#async].map((memo, i) => {\n\t\t\tmemo.id.name = `$${i}`;\n\t\t\treturn memo.id;\n\t\t});\n\t}\n\n\tblockers() {\n\t\treturn this.#blockers.size > 0 ? b.array([...this.#blockers]) : undefined;\n\t}\n\n\tderiveds(runes = true) {\n\t\treturn this.#sync.map((memo) =>\n\t\t\tb.let(memo.id, b.call(runes ? '$.derived' : '$.derived_safe_equal', b.thunk(memo.expression)))\n\t\t);\n\t}\n\n\tasync_ids() {\n\t\treturn this.#async.map((memo) => memo.id);\n\t}\n\n\tasync_values() {\n\t\tif (this.#async.length === 0) return;\n\t\t// use `b.arrow` rather than `b.thunk` so that deferred async/template effects\n\t\t// always read live bindings rather than a possibly stale snapshot.\n\t\treturn b.array(this.#async.map((memo) => b.arrow([], memo.expression, true)));\n\t}\n\n\tsync_values() {\n\t\tif (this.#sync.length === 0) return;\n\t\t// use `b.arrow` rather than `b.thunk` so that deferred async/template effects\n\t\t// always read live bindings rather than a possibly stale snapshot.\n\t\treturn b.array(this.#sync.map((memo) => b.arrow([], memo.expression)));\n\t}\n}\n\n/**\n * @param {Array<AST.Text | AST.ExpressionTag>} values\n * @param {ComponentContext} context\n * @param {ComponentClientTransformState} state\n * @param {(value: Expression, metadata: ExpressionMetadata) => Expression} memoize\n * @returns {{ value: Expression, has_state: boolean }}\n */\nexport function build_template_chunk(\n\tvalues,\n\tcontext,\n\tstate = context.state,\n\tmemoize = (value, metadata) => state.memoizer.add(value, metadata)\n) {\n\t/** @type {Expression[]} */\n\tconst expressions = [];\n\n\tlet quasi = b.quasi('');\n\tconst quasis = [quasi];\n\n\tlet has_state = false;\n\tlet has_await = false;\n\n\tfor (let i = 0; i < values.length; i++) {\n\t\tconst node = values[i];\n\n\t\tif (node.type === 'Text') {\n\t\t\tquasi.value.cooked += node.data;\n\t\t} else if (node.expression.type === 'Literal') {\n\t\t\tif (node.expression.value != null) {\n\t\t\t\tquasi.value.cooked += node.expression.value + '';\n\t\t\t}\n\t\t} else if (\n\t\t\tnode.expression.type !== 'Identifier' ||\n\t\t\tnode.expression.name !== 'undefined' ||\n\t\t\tstate.scope.get('undefined')\n\t\t) {\n\t\t\tlet value = memoize(\n\t\t\t\tbuild_expression(context, node.expression, node.metadata.expression, state),\n\t\t\t\tnode.metadata.expression\n\t\t\t);\n\n\t\t\tconst evaluated = state.scope.evaluate(value);\n\n\t\t\thas_await ||= node.metadata.expression.has_await || node.metadata.expression.has_blockers();\n\t\t\thas_state ||= has_await || (node.metadata.expression.has_state && !evaluated.is_known);\n\n\t\t\tif (values.length === 1) {\n\t\t\t\t// If we have a single expression, then pass that in directly to possibly avoid doing\n\t\t\t\t// extra work in the template_effect (instead we do the work in set_text).\n\t\t\t\tif (evaluated.is_known) {\n\t\t\t\t\tvalue = b.literal((evaluated.value ?? '') + '');\n\t\t\t\t}\n\n\t\t\t\treturn { value, has_state };\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tvalue.type === 'LogicalExpression' &&\n\t\t\t\tvalue.right.type === 'Literal' &&\n\t\t\t\t(value.operator === '??' || value.operator === '||')\n\t\t\t) {\n\t\t\t\t// `foo ?? null` -=> `foo ?? ''`\n\t\t\t\t// otherwise leave the expression untouched\n\t\t\t\tif (value.right.value === null) {\n\t\t\t\t\tvalue = { ...value, right: b.literal('') };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (evaluated.is_known) {\n\t\t\t\tquasi.value.cooked += (evaluated.value ?? '') + '';\n\t\t\t} else {\n\t\t\t\tif (!evaluated.is_defined) {\n\t\t\t\t\t// add `?? ''` where necessary\n\t\t\t\t\tvalue = b.logical('??', value, b.literal(''));\n\t\t\t\t}\n\n\t\t\t\texpressions.push(value);\n\n\t\t\t\tquasi = b.quasi('', i + 1 === values.length);\n\t\t\t\tquasis.push(quasi);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const quasi of quasis) {\n\t\tquasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n\t}\n\n\tconst value =\n\t\texpressions.length > 0\n\t\t\t? b.template(quasis, expressions)\n\t\t\t: b.literal(/** @type {string} */ (quasi.value.cooked));\n\n\treturn { value, has_state };\n}\n\n/**\n * @param {ComponentClientTransformState} state\n */\nexport function build_render_statement(state) {\n\tconst { memoizer } = state;\n\n\tconst ids = memoizer.apply();\n\n\treturn b.stmt(\n\t\tb.call(\n\t\t\t'$.template_effect',\n\t\t\tb.arrow(\n\t\t\t\tids,\n\t\t\t\tstate.update.length === 1 && state.update[0].type === 'ExpressionStatement'\n\t\t\t\t\t? state.update[0].expression\n\t\t\t\t\t: b.block(state.update)\n\t\t\t),\n\t\t\tmemoizer.sync_values(),\n\t\t\tmemoizer.async_values(),\n\t\t\tmemoizer.blockers()\n\t\t)\n\t);\n}\n\n/**\n * For unfortunate legacy reasons, directive names can look like this `use:a.b-c`\n * This turns that string into a member expression\n * @param {string} name\n */\nexport function parse_directive_name(name) {\n\t// this allow for accessing members of an object\n\tconst parts = name.split('.');\n\tlet part = /** @type {string} */ (parts.shift());\n\n\t/** @type {Identifier | MemberExpression} */\n\tlet expression = b.id(part);\n\n\twhile ((part = /** @type {string} */ (parts.shift()))) {\n\t\tconst computed = !regex_is_valid_identifier.test(part);\n\t\texpression = b.member(expression, computed ? b.literal(part) : b.id(part), computed);\n\t}\n\n\treturn expression;\n}\n\n/**\n * Serializes `bind:this` for components and elements.\n * @param {Identifier | MemberExpression | SequenceExpression} expression\n * @param {Expression} value\n * @param {import('zimmerframe').Context<AST.SvelteNode, ComponentClientTransformState>} context\n */\nexport function build_bind_this(expression, value, { state, visit }) {\n\tconst [getter, setter] =\n\t\texpression.type === 'SequenceExpression' ? expression.expressions : [null, null];\n\n\t/** @type {Identifier[]} */\n\tconst ids = [];\n\n\t/** @type {Expression[]} */\n\tconst values = [];\n\n\t/** @type {string[]} */\n\tconst seen = [];\n\n\tconst transform = { ...state.transform };\n\n\t// Pass in each context variables to the get/set functions, so that we can null out old values on teardown.\n\t// Note that we only do this for each context variables, the consequence is that the value might be stale in\n\t// some scenarios where the value is a member expression with changing computed parts or using a combination of multiple\n\t// variables, but that was the same case in Svelte 4, too. Once legacy mode is gone completely, we can revisit this.\n\twalk(getter ?? expression, null, {\n\t\tIdentifier(node, { path }) {\n\t\t\tif (seen.includes(node.name)) return;\n\t\t\tseen.push(node.name);\n\n\t\t\tconst parent = /** @type {Expression} */ (path.at(-1));\n\t\t\tif (!is_reference(node, parent)) return;\n\n\t\t\tconst binding = state.scope.get(node.name);\n\t\t\tif (!binding) return;\n\n\t\t\tfor (const [owner, scope] of state.scopes) {\n\t\t\t\tif (owner.type === 'EachBlock' && scope === binding.scope) {\n\t\t\t\t\tids.push(node);\n\t\t\t\t\tvalues.push(/** @type {Expression} */ (visit(node)));\n\n\t\t\t\t\tif (transform[node.name]) {\n\t\t\t\t\t\ttransform[node.name] = {\n\t\t\t\t\t\t\t...transform[node.name],\n\t\t\t\t\t\t\tread: (node) => node\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tconst child_state = { ...state, transform };\n\n\tlet get = /** @type {Expression} */ (visit(getter ?? expression, child_state));\n\tlet set = /** @type {Expression} */ (\n\t\tvisit(\n\t\t\tsetter ??\n\t\t\t\tb.assignment(\n\t\t\t\t\t'=',\n\t\t\t\t\t/** @type {Identifier | MemberExpression} */ (expression),\n\t\t\t\t\tb.id('$$value')\n\t\t\t\t),\n\t\t\tchild_state\n\t\t)\n\t);\n\n\t// If we're mutating a property, then it might already be non-existent.\n\t// If we make all the object nodes optional, then it avoids any runtime exceptions.\n\t/** @type {Expression | Super} */\n\tlet node = get;\n\n\twhile (node.type === 'MemberExpression') {\n\t\tnode.optional = true;\n\t\tnode = node.object;\n\t}\n\n\tget =\n\t\tget.type === 'ArrowFunctionExpression'\n\t\t\t? b.arrow([...ids], get.body)\n\t\t\t: get.type === 'FunctionExpression'\n\t\t\t\t? b.function(null, [...ids], get.body)\n\t\t\t\t: getter\n\t\t\t\t\t? get\n\t\t\t\t\t: b.arrow([...ids], get);\n\n\tset =\n\t\tset.type === 'ArrowFunctionExpression'\n\t\t\t? b.arrow([set.params[0] ?? b.id('_'), ...ids], set.body)\n\t\t\t: set.type === 'FunctionExpression'\n\t\t\t\t? b.function(null, [set.params[0] ?? b.id('_'), ...ids], set.body)\n\t\t\t\t: setter\n\t\t\t\t\t? set\n\t\t\t\t\t: b.arrow([b.id('$$value'), ...ids], set);\n\n\treturn b.call('$.bind_this', value, set, get, values.length > 0 && b.thunk(b.array(values)));\n}\n\n/**\n * @param {ComponentClientTransformState} state\n * @param {AST.BindDirective} binding\n * @param {MemberExpression} expression\n */\nexport function validate_binding(state, binding, expression) {\n\tif (binding.expression.type === 'SequenceExpression') {\n\t\treturn;\n\t}\n\t// If we are referencing a $store.foo then we don't need to add validation\n\tconst left = object(binding.expression);\n\tconst left_binding = left && state.scope.get(left.name);\n\tif (left_binding?.kind === 'store_sub') return;\n\n\tconst loc = locator(binding.start);\n\n\tconst obj = /** @type {Expression} */ (expression.object);\n\n\tstate.init.push(\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.validate_binding',\n\t\t\t\tb.literal(state.analysis.source.slice(binding.start, binding.end)),\n\t\t\t\tbinding.metadata.expression.blockers(),\n\t\t\t\tb.thunk(\n\t\t\t\t\tstate.store_to_invalidate ? b.sequence([b.call('$.mark_store_binding'), obj]) : obj\n\t\t\t\t),\n\t\t\t\tb.thunk(\n\t\t\t\t\t/** @type {Expression} */ (\n\t\t\t\t\t\texpression.computed\n\t\t\t\t\t\t\t? expression.property\n\t\t\t\t\t\t\t: b.literal(/** @type {Identifier} */ (expression.property).name)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tb.literal(loc.line),\n\t\t\t\tb.literal(loc.column)\n\t\t\t)\n\t\t)\n\t);\n}\n\n/**\n * In dev mode validate mutations to props\n * @param {AssignmentExpression | UpdateExpression} node\n * @param {Context} context\n * @param {Expression} expression\n */\nexport function validate_mutation(node, context, expression) {\n\tlet left = /** @type {Expression | Super} */ (\n\t\tnode.type === 'AssignmentExpression' ? node.left : node.argument\n\t);\n\n\tif (!dev || left.type !== 'MemberExpression' || is_ignored(node, 'ownership_invalid_mutation')) {\n\t\treturn expression;\n\t}\n\n\tconst name = object(left);\n\tif (!name) return expression;\n\n\tconst binding = context.state.scope.get(name.name);\n\tif (binding?.kind !== 'prop' && binding?.kind !== 'bindable_prop') return expression;\n\n\tconst state = /** @type {ComponentClientTransformState} */ (context.state);\n\tstate.analysis.needs_mutation_validation = true;\n\n\t/** @type {Array<Identifier | Literal | Expression>} */\n\tconst path = [];\n\n\twhile (left.type === 'MemberExpression') {\n\t\tif (left.property.type === 'Literal') {\n\t\t\tpath.unshift(left.property);\n\t\t} else if (left.property.type === 'Identifier') {\n\t\t\tconst transform = Object.hasOwn(context.state.transform, left.property.name)\n\t\t\t\t? context.state.transform[left.property.name]\n\t\t\t\t: null;\n\t\t\tif (left.computed) {\n\t\t\t\tpath.unshift(transform?.read ? transform.read(left.property) : left.property);\n\t\t\t} else {\n\t\t\t\tpath.unshift(b.literal(left.property.name));\n\t\t\t}\n\t\t} else {\n\t\t\treturn expression;\n\t\t}\n\n\t\tleft = left.object;\n\t}\n\n\tpath.unshift(b.literal(name.name));\n\n\tconst loc = locator(/** @type {number} */ (left.start));\n\n\treturn b.call(\n\t\t'$$ownership_validator.mutation',\n\t\tb.literal(binding.prop_alias),\n\t\tb.array(path),\n\t\texpression,\n\t\tloc && b.literal(loc.line),\n\t\tloc && b.literal(loc.column)\n\t);\n}\n\n/**\n *\n * @param {ComponentContext} context\n * @param {Expression} expression\n * @param {ExpressionMetadata} metadata\n */\nexport function build_expression(context, expression, metadata, state = context.state) {\n\tconst value = /** @type {Expression} */ (context.visit(expression, state));\n\n\t// Components not explicitly in legacy mode might be expected to be in runes mode (especially since we didn't\n\t// adjust this behavior until recently, which broke people's existing components), so we also bail in this case.\n\t// Kind of an in-between-mode.\n\tif (context.state.analysis.runes || context.state.analysis.maybe_runes) {\n\t\treturn value;\n\t}\n\n\tif (!metadata.has_call && !metadata.has_member_expression && !metadata.has_assignment) {\n\t\treturn value;\n\t}\n\n\t// Legacy reactivity is coarse-grained, looking at the statically visible dependencies. Replicate that here\n\tconst sequence = b.sequence([]);\n\n\tfor (const binding of metadata.references) {\n\t\tif (binding.kind === 'normal' && binding.declaration_kind !== 'import') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar getter = build_getter({ ...binding.node }, state);\n\n\t\tif (\n\t\t\tbinding.kind === 'bindable_prop' ||\n\t\t\tbinding.kind === 'template' ||\n\t\t\tbinding.declaration_kind === 'import' ||\n\t\t\tbinding.node.name === '$$props' ||\n\t\t\tbinding.node.name === '$$restProps'\n\t\t) {\n\t\t\tgetter = b.call('$.deep_read_state', getter);\n\t\t}\n\n\t\tsequence.expressions.push(getter);\n\t}\n\n\tsequence.expressions.push(b.call('$.untrack', b.thunk(value)));\n\n\treturn sequence;\n}\n\n/**\n * Wraps a statement/expression with dev stack tracking in dev mode\n * @param {Expression} expression - The function call to wrap (e.g., $.if, $.each, etc.)\n * @param {{ start?: number }} node - AST node for location info\n * @param {'component' | 'if' | 'each' | 'await' | 'key' | 'render'} type - Type of block/component\n * @param {Record<string, number | string>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {ExpressionStatement} - Statement with or without dev stack wrapping\n */\nexport function add_svelte_meta(expression, node, type, additional) {\n\tif (!dev) {\n\t\treturn b.stmt(expression);\n\t}\n\n\tconst location = node.start !== undefined && locator(node.start);\n\tif (!location) {\n\t\treturn b.stmt(expression);\n\t}\n\n\treturn b.stmt(\n\t\tb.call(\n\t\t\t'$.add_svelte_meta',\n\t\t\tb.arrow([], expression),\n\t\t\tb.literal(type),\n\t\t\tb.id(component_name),\n\t\t\tb.literal(location.line),\n\t\t\tb.literal(location.column),\n\t\t\tadditional && b.object(Object.entries(additional).map(([k, v]) => b.init(k, b.literal(v))))\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/css/index.js",
    "content": "/** @import { Visitors } from 'zimmerframe' */\n/** @import { AST, ValidatedCompileOptions } from '#compiler' */\n/** @import { ComponentAnalysis } from '../../types.js' */\nimport MagicString from 'magic-string';\nimport { walk } from 'zimmerframe';\nimport { is_keyframes_node, regex_css_name_boundary, remove_css_prefix } from '../../css.js';\nimport { merge_with_preprocessor_map } from '../../../utils/mapped_code.js';\nimport { dev } from '../../../state.js';\n\n/**\n * @typedef {{\n *   code: MagicString;\n *   hash: string;\n *   minify: boolean;\n *   selector: string;\n *   keyframes: string[];\n *   specificity: {\n *     bumped: boolean\n *   }\n * }} State\n */\n\n/**\n *\n * @param {string} source\n * @param {ComponentAnalysis} analysis\n * @param {ValidatedCompileOptions} options\n */\nexport function render_stylesheet(source, analysis, options) {\n\tconst code = new MagicString(source);\n\n\t/** @type {State} */\n\tconst state = {\n\t\tcode,\n\t\thash: analysis.css.hash,\n\t\tminify: analysis.inject_styles && !options.dev,\n\t\tselector: `.${analysis.css.hash}`,\n\t\tkeyframes: analysis.css.keyframes,\n\t\tspecificity: {\n\t\t\tbumped: false\n\t\t}\n\t};\n\n\tconst ast = /** @type {AST.CSS.StyleSheet} */ (analysis.css.ast);\n\n\twalk(/** @type {AST.CSS.Node} */ (ast), state, visitors);\n\n\tcode.remove(0, ast.content.start);\n\tcode.remove(/** @type {number} */ (ast.content.end), source.length);\n\tif (state.minify) {\n\t\tremove_preceding_whitespace(ast.content.end, state);\n\t}\n\n\tconst css = {\n\t\tcode: code.toString(),\n\t\tmap: code.generateMap({\n\t\t\t// include source content; makes it easier/more robust looking up the source map code\n\t\t\tincludeContent: true,\n\t\t\t// generateMap takes care of calculating source relative to file\n\t\t\tsource: options.filename,\n\t\t\tfile: options.cssOutputFilename || options.filename\n\t\t}),\n\t\thasGlobal: analysis.css.has_global\n\t};\n\n\tmerge_with_preprocessor_map(css, options, css.map.sources[0]);\n\n\tif (dev && analysis.inject_styles && css.code) {\n\t\tcss.code += `\\n/*# sourceMappingURL=${css.map.toUrl()} */`;\n\t}\n\n\treturn css;\n}\n\n/** @type {Visitors<AST.CSS.Node, State>} */\nconst visitors = {\n\t_: (node, context) => {\n\t\tcontext.state.code.addSourcemapLocation(node.start);\n\t\tcontext.state.code.addSourcemapLocation(node.end);\n\t\tcontext.next();\n\t},\n\tAtrule(node, { state, next, path }) {\n\t\tif (is_keyframes_node(node)) {\n\t\t\tlet start = node.start + node.name.length + 1;\n\t\t\twhile (state.code.original[start] === ' ') start += 1;\n\t\t\tlet end = start;\n\t\t\twhile (state.code.original[end] !== '{' && state.code.original[end] !== ' ') end += 1;\n\n\t\t\tif (node.prelude.startsWith('-global-')) {\n\t\t\t\tstate.code.remove(start, start + 8);\n\t\t\t} else if (!is_in_global_block(path)) {\n\t\t\t\tstate.code.prependRight(start, `${state.hash}-`);\n\t\t\t}\n\n\t\t\treturn; // don't transform anything within\n\t\t}\n\n\t\tnext();\n\t},\n\tDeclaration(node, { state }) {\n\t\tconst property = node.property && remove_css_prefix(node.property.toLowerCase());\n\t\tif (property === 'animation' || property === 'animation-name') {\n\t\t\tlet index = node.start + node.property.length + 1;\n\t\t\tlet name = '';\n\n\t\t\twhile (index < state.code.original.length) {\n\t\t\t\tconst character = state.code.original[index];\n\n\t\t\t\tif (regex_css_name_boundary.test(character)) {\n\t\t\t\t\tif (state.keyframes.includes(name)) {\n\t\t\t\t\t\tstate.code.prependRight(index - name.length, `${state.hash}-`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (character === ';' || character === '}') {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tname = '';\n\t\t\t\t} else {\n\t\t\t\t\tname += character;\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\t\t} else if (state.minify) {\n\t\t\tremove_preceding_whitespace(node.start, state);\n\n\t\t\t// Don't minify whitespace in custom properties, since some browsers (Chromium < 99)\n\t\t\t// treat --foo: ; and --foo:; differently\n\t\t\tif (!node.property.startsWith('--')) {\n\t\t\t\tlet start = node.start + node.property.length + 1;\n\t\t\t\tlet end = start;\n\t\t\t\twhile (/\\s/.test(state.code.original[end])) end++;\n\t\t\t\tif (end > start) state.code.remove(start, end);\n\t\t\t}\n\t\t}\n\t},\n\tRule(node, { state, next, visit, path }) {\n\t\tif (state.minify) {\n\t\t\tremove_preceding_whitespace(node.start, state);\n\t\t\tremove_preceding_whitespace(node.block.end - 1, state);\n\t\t}\n\n\t\t// keep empty rules in dev, because it's convenient to\n\t\t// see them in devtools\n\t\tif (!dev && is_empty(node, is_in_global_block(path))) {\n\t\t\tif (state.minify) {\n\t\t\t\tstate.code.remove(node.start, node.end);\n\t\t\t} else {\n\t\t\t\tstate.code.prependRight(node.start, '/* (empty) ');\n\t\t\t\tstate.code.appendLeft(node.end, '*/');\n\t\t\t\tescape_comment_close(node, state.code);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!is_used(node) && !is_in_global_block(path)) {\n\t\t\tif (state.minify) {\n\t\t\t\tstate.code.remove(node.start, node.end);\n\t\t\t} else {\n\t\t\t\tstate.code.prependRight(node.start, '/* (unused) ');\n\t\t\t\tstate.code.appendLeft(node.end, '*/');\n\t\t\t\tescape_comment_close(node, state.code);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (node.metadata.is_global_block) {\n\t\t\tconst selector = node.prelude.children[0];\n\n\t\t\tif (\n\t\t\t\tnode.prelude.children.length === 1 &&\n\t\t\t\tselector.children.length === 1 &&\n\t\t\t\tselector.children[0].selectors.length === 1\n\t\t\t) {\n\t\t\t\t// `:global {...}`\n\t\t\t\tif (state.minify) {\n\t\t\t\t\tstate.code.remove(node.start, node.block.start + 1);\n\t\t\t\t\tstate.code.remove(node.block.end - 1, node.end);\n\t\t\t\t} else {\n\t\t\t\t\tstate.code.prependRight(node.start, '/* ');\n\t\t\t\t\tstate.code.appendLeft(node.block.start + 1, '*/');\n\n\t\t\t\t\tstate.code.prependRight(node.block.end - 1, '/*');\n\t\t\t\t\tstate.code.appendLeft(node.block.end, '*/');\n\t\t\t\t}\n\n\t\t\t\t// don't recurse into selectors but visit the body\n\t\t\t\tvisit(node.block);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tnext();\n\t},\n\tSelectorList(node, { state, next, path }) {\n\t\tconst parent = path.at(-1);\n\n\t\t// Only add comments if we're not inside a complex selector that itself is unused or a global block\n\t\tif (\n\t\t\t(!is_in_global_block(path) ||\n\t\t\t\t(node.children.length > 1 && parent?.type === 'Rule' && parent.metadata.is_global_block)) &&\n\t\t\t!path.find((n) => n.type === 'ComplexSelector' && !n.metadata.used)\n\t\t) {\n\t\t\tconst children = node.children;\n\t\t\tlet pruning = false;\n\t\t\tlet prune_start = children[0].start;\n\t\t\tlet last = prune_start;\n\t\t\tlet has_previous_used = false;\n\n\t\t\tfor (let i = 0; i < children.length; i += 1) {\n\t\t\t\tconst selector = children[i];\n\n\t\t\t\tif (selector.metadata.used === pruning) {\n\t\t\t\t\tif (pruning) {\n\t\t\t\t\t\tlet i = selector.start;\n\t\t\t\t\t\twhile (state.code.original[i] !== ',') i--;\n\n\t\t\t\t\t\tif (state.minify) {\n\t\t\t\t\t\t\tstate.code.remove(prune_start, has_previous_used ? i : i + 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstate.code.appendRight(has_previous_used ? i : i + 1, '*/');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\tif (state.minify) {\n\t\t\t\t\t\t\t\tprune_start = selector.start;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstate.code.prependRight(selector.start, '/* (unused) ');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (state.minify) {\n\t\t\t\t\t\t\t\tprune_start = last;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstate.code.overwrite(last, selector.start, ` /* (unused) `);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tpruning = !pruning;\n\t\t\t\t}\n\n\t\t\t\tif (!pruning && selector.metadata.used) {\n\t\t\t\t\thas_previous_used = true;\n\t\t\t\t}\n\n\t\t\t\tlast = selector.end;\n\t\t\t}\n\n\t\t\tif (pruning) {\n\t\t\t\tif (state.minify) {\n\t\t\t\t\tstate.code.remove(prune_start, last);\n\t\t\t\t} else {\n\t\t\t\t\tstate.code.appendLeft(last, '*/');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're in a `:is(...)` or whatever, keep existing specificity bump state\n\t\tlet specificity = state.specificity;\n\n\t\t// if this selector list belongs to a rule, require a specificity bump for the\n\t\t// first scoped selector but only if we're at the top level\n\t\tif (parent?.type === 'Rule') {\n\t\t\tspecificity = { bumped: false };\n\n\t\t\t/** @type {AST.CSS.Rule | null} */\n\t\t\tlet rule = parent.metadata.parent_rule;\n\n\t\t\twhile (rule) {\n\t\t\t\tif (rule.metadata.has_local_selectors) {\n\t\t\t\t\tspecificity = { bumped: true };\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\trule = rule.metadata.parent_rule;\n\t\t\t}\n\t\t}\n\n\t\tnext({ ...state, specificity });\n\t},\n\tComplexSelector(node, context) {\n\t\tconst before_bumped = context.state.specificity.bumped;\n\n\t\tfor (const relative_selector of node.children) {\n\t\t\tif (relative_selector.metadata.is_global) {\n\t\t\t\tconst global = /** @type {AST.CSS.PseudoClassSelector} */ (relative_selector.selectors[0]);\n\t\t\t\tremove_global_pseudo_class(global, relative_selector.combinator, context.state);\n\n\t\t\t\tconst parent_rule = node.metadata.rule?.metadata.parent_rule;\n\t\t\t\tif (parent_rule && global.args === null) {\n\t\t\t\t\tif (relative_selector.combinator === null) {\n\t\t\t\t\t\t// div { :global.x { ... } } becomes div { &.x { ... } }\n\t\t\t\t\t\tcontext.state.code.prependRight(global.start, '&');\n\t\t\t\t\t}\n\n\t\t\t\t\t// In case of multiple :global selectors in a selector list we gotta delete the comma, too, but only if\n\t\t\t\t\t// the next selector is used; if it's unused then the comma deletion happens as part of removal of that next selector\n\t\t\t\t\tif (\n\t\t\t\t\t\tparent_rule.prelude.children.length > 1 &&\n\t\t\t\t\t\tnode.children.length === node.children.findIndex((s) => s === relative_selector) - 1\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst next_selector = parent_rule.prelude.children.find((s) => s.start > global.end);\n\t\t\t\t\t\tif (next_selector && next_selector.metadata.used) {\n\t\t\t\t\t\t\tcontext.state.code.update(global.end, next_selector.start, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// for any :global() or :global at the middle of compound selector\n\t\t\t\tfor (const selector of relative_selector.selectors) {\n\t\t\t\t\tif (selector.type === 'PseudoClassSelector' && selector.name === 'global') {\n\t\t\t\t\t\tremove_global_pseudo_class(selector, null, context.state);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (relative_selector.metadata.scoped) {\n\t\t\t\tif (relative_selector.selectors.length === 1) {\n\t\t\t\t\t// skip standalone :is/:where/& selectors\n\t\t\t\t\tconst selector = relative_selector.selectors[0];\n\t\t\t\t\tif (\n\t\t\t\t\t\tselector.type === 'PseudoClassSelector' &&\n\t\t\t\t\t\t(selector.name === 'is' || selector.name === 'where')\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (relative_selector.selectors.some((s) => s.type === 'NestingSelector')) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// for the first occurrence, we use a classname selector, so that every\n\t\t\t\t// encapsulated selector gets a +0-1-0 specificity bump. thereafter,\n\t\t\t\t// we use a `:where` selector, which does not affect specificity\n\t\t\t\tlet modifier = context.state.selector;\n\t\t\t\tif (context.state.specificity.bumped) modifier = `:where(${modifier})`;\n\n\t\t\t\tcontext.state.specificity.bumped = true;\n\n\t\t\t\tlet i = relative_selector.selectors.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tconst selector = relative_selector.selectors[i];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tselector.type === 'PseudoElementSelector' ||\n\t\t\t\t\t\tselector.type === 'PseudoClassSelector'\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (selector.name !== 'root' && selector.name !== 'host') {\n\t\t\t\t\t\t\tif (i === 0) context.state.code.prependRight(selector.start, modifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (selector.type === 'TypeSelector' && selector.name === '*') {\n\t\t\t\t\t\tcontext.state.code.update(selector.start, selector.end, modifier);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.state.code.appendLeft(selector.end, modifier);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcontext.next();\n\n\t\tcontext.state.specificity.bumped = before_bumped;\n\t},\n\tPseudoClassSelector(node, context) {\n\t\tif (node.name === 'is' || node.name === 'where' || node.name === 'has' || node.name === 'not') {\n\t\t\tcontext.next();\n\t\t}\n\t}\n};\n\n/**\n * @param {Array<AST.CSS.Node>} path\n */\nfunction is_in_global_block(path) {\n\treturn path.some((node) => node.type === 'Rule' && node.metadata.is_global_block);\n}\n\n/**\n * @param {AST.CSS.PseudoClassSelector} selector\n * @param {AST.CSS.Combinator | null} combinator\n * @param {State} state\n */\nfunction remove_global_pseudo_class(selector, combinator, state) {\n\tif (selector.args === null) {\n\t\tlet start = selector.start;\n\t\tif (combinator?.name === ' ') {\n\t\t\t// div :global.x becomes div.x\n\t\t\twhile (/\\s/.test(state.code.original[start - 1])) start--;\n\t\t}\n\n\t\t// update(...), not remove(...) because there could be a closing unused comment at the end\n\t\tstate.code.update(start, selector.start + ':global'.length, '');\n\t} else {\n\t\tstate.code\n\t\t\t.remove(selector.start, selector.start + ':global('.length)\n\t\t\t.remove(selector.end - 1, selector.end);\n\t}\n}\n\n/**\n * Walk backwards until we find a non-whitespace character\n * @param {number} end\n * @param {State} state\n */\nfunction remove_preceding_whitespace(end, state) {\n\tlet start = end;\n\twhile (/\\s/.test(state.code.original[start - 1])) start--;\n\tif (start < end) state.code.remove(start, end);\n}\n\n/**\n *  @param {AST.CSS.Rule} rule\n * @param {boolean} is_in_global_block\n */\nfunction is_empty(rule, is_in_global_block) {\n\tif (rule.metadata.is_global_block) {\n\t\treturn rule.block.children.length === 0;\n\t}\n\n\tfor (const child of rule.block.children) {\n\t\tif (child.type === 'Declaration') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (child.type === 'Rule') {\n\t\t\tif ((is_used(child) || is_in_global_block) && !is_empty(child, is_in_global_block)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (child.type === 'Atrule') {\n\t\t\tif (child.block === null || child.block.children.length > 0) return false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @param {AST.CSS.Rule} rule */\nfunction is_used(rule) {\n\treturn rule.prelude.children.some((selector) => selector.metadata.used);\n}\n\n/**\n *\n * @param {AST.CSS.Rule} node\n * @param {MagicString} code\n */\nfunction escape_comment_close(node, code) {\n\tlet escaped = false;\n\tlet in_comment = false;\n\n\tfor (let i = node.start; i < node.end; i++) {\n\t\tif (escaped) {\n\t\t\tescaped = false;\n\t\t} else {\n\t\t\tconst char = code.original[i];\n\t\t\tif (in_comment) {\n\t\t\t\tif (char === '*' && code.original[i + 1] === '/') {\n\t\t\t\t\tcode.prependRight(++i, '\\\\');\n\t\t\t\t\tin_comment = false;\n\t\t\t\t}\n\t\t\t} else if (char === '\\\\') {\n\t\t\t\tescaped = true;\n\t\t\t} else if (char === '/' && code.original[++i] === '*') {\n\t\t\t\tin_comment = true;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/index.js",
    "content": "/** @import { Node } from 'esrap/languages/ts' */\n/** @import { ValidatedCompileOptions, CompileResult, ValidatedModuleCompileOptions } from '#compiler' */\n/** @import { ComponentAnalysis, Analysis } from '../types' */\nimport { print } from 'esrap';\nimport ts from 'esrap/languages/ts';\nimport { VERSION } from '../../../version.js';\nimport { server_component, server_module } from './server/transform-server.js';\nimport { client_component, client_module } from './client/transform-client.js';\nimport { render_stylesheet } from './css/index.js';\nimport { merge_with_preprocessor_map, get_source_name } from '../../utils/mapped_code.js';\nimport * as state from '../../state.js';\n\n/**\n * @param {ComponentAnalysis} analysis\n * @param {string} source\n * @param {ValidatedCompileOptions} options\n * @returns {CompileResult}\n */\nexport function transform_component(analysis, source, options) {\n\tif (options.generate === false) {\n\t\treturn {\n\t\t\tjs: /** @type {any} */ (null),\n\t\t\tcss: null,\n\t\t\twarnings: state.warnings, // set afterwards\n\t\t\tmetadata: {\n\t\t\t\trunes: analysis.runes\n\t\t\t},\n\t\t\tast: /** @type {any} */ (null) // set afterwards\n\t\t};\n\t}\n\n\tconst program =\n\t\toptions.generate === 'server'\n\t\t\t? server_component(analysis, options)\n\t\t\t: client_component(analysis, options);\n\n\tconst js_source_name = get_source_name(options.filename, options.outputFilename, 'input.svelte');\n\n\tconst js = print(/** @type {Node} */ (program), ts({ comments: analysis.comments }), {\n\t\t// include source content; makes it easier/more robust looking up the source map code\n\t\t// (else esrap does return null for source and sourceMapContent which may trip up tooling)\n\t\tsourceMapContent: source,\n\t\tsourceMapSource: js_source_name\n\t});\n\n\tmerge_with_preprocessor_map(js, options, js_source_name);\n\n\tconst css =\n\t\tanalysis.css.ast && !analysis.inject_styles\n\t\t\t? render_stylesheet(source, analysis, options)\n\t\t\t: null;\n\n\treturn {\n\t\tjs,\n\t\tcss,\n\t\twarnings: state.warnings, // set afterwards. TODO apply preprocessor sourcemap\n\t\tmetadata: {\n\t\t\trunes: analysis.runes\n\t\t},\n\t\tast: /** @type {any} */ (null) // set afterwards\n\t};\n}\n\n/**\n * @param {Analysis} analysis\n * @param {string} source\n * @param {ValidatedModuleCompileOptions} options\n * @returns {CompileResult}\n */\nexport function transform_module(analysis, source, options) {\n\tif (options.generate === false) {\n\t\treturn {\n\t\t\tjs: /** @type {any} */ (null),\n\t\t\tcss: null,\n\t\t\twarnings: state.warnings, // set afterwards\n\t\t\tmetadata: {\n\t\t\t\trunes: true\n\t\t\t},\n\t\t\tast: /** @type {any} */ (null) // set afterwards\n\t\t};\n\t}\n\n\tconst program =\n\t\toptions.generate === 'server'\n\t\t\t? server_module(analysis, options)\n\t\t\t: client_module(analysis, options);\n\n\tconst basename = options.filename.split(/[/\\\\]/).at(-1);\n\tif (program.body.length > 0) {\n\t\tprogram.body[0].leadingComments = [\n\t\t\t{\n\t\t\t\ttype: 'Block',\n\t\t\t\tvalue: ` ${basename} generated by Svelte v${VERSION} `\n\t\t\t}\n\t\t];\n\t}\n\n\tconst js = print(/** @type {Node} */ (program), ts({ comments: analysis.comments }), {\n\t\t// include source content; makes it easier/more robust looking up the source map code\n\t\t// (else esrap does return null for source and sourceMapContent which may trip up tooling)\n\t\tsourceMapContent: source,\n\t\tsourceMapSource: get_source_name(options.filename, undefined, 'input.svelte.js')\n\t});\n\n\t// prepend comment\n\tjs.code = `/* ${basename} generated by Svelte v${VERSION} */\\n${js.code}`;\n\tjs.map.mappings = ';' + js.map.mappings;\n\n\treturn {\n\t\tjs,\n\t\tcss: null,\n\t\tmetadata: {\n\t\t\trunes: true\n\t\t},\n\t\twarnings: state.warnings, // set afterwards\n\t\tast: /** @type {any} */ (null) // set afterwards\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/transform-server.js",
    "content": "/** @import * as ESTree from 'estree' */\n/** @import { AST, ValidatedCompileOptions, ValidatedModuleCompileOptions } from '#compiler' */\n/** @import { ComponentServerTransformState, ComponentVisitors, ServerTransformState, Visitors } from './types.js' */\n/** @import { Analysis, ComponentAnalysis } from '../../types.js' */\nimport { walk } from 'zimmerframe';\nimport { set_scope } from '../../scope.js';\nimport { extract_identifiers } from '../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { component_name, dev, filename } from '../../../state.js';\nimport { render_stylesheet } from '../css/index.js';\nimport { AssignmentExpression } from './visitors/AssignmentExpression.js';\nimport { AwaitBlock } from './visitors/AwaitBlock.js';\nimport { AwaitExpression } from './visitors/AwaitExpression.js';\nimport { CallExpression } from './visitors/CallExpression.js';\nimport { ClassBody } from './visitors/ClassBody.js';\nimport { Component } from './visitors/Component.js';\nimport { ConstTag } from './visitors/ConstTag.js';\nimport { DebugTag } from './visitors/DebugTag.js';\nimport { EachBlock } from './visitors/EachBlock.js';\nimport { ExpressionStatement } from './visitors/ExpressionStatement.js';\nimport { Fragment } from './visitors/Fragment.js';\nimport { HtmlTag } from './visitors/HtmlTag.js';\nimport { Identifier } from './visitors/Identifier.js';\nimport { IfBlock } from './visitors/IfBlock.js';\nimport { KeyBlock } from './visitors/KeyBlock.js';\nimport { LabeledStatement } from './visitors/LabeledStatement.js';\nimport { MemberExpression } from './visitors/MemberExpression.js';\nimport { Program } from './visitors/Program.js';\nimport { PropertyDefinition } from './visitors/PropertyDefinition.js';\nimport { RegularElement } from './visitors/RegularElement.js';\nimport { RenderTag } from './visitors/RenderTag.js';\nimport { SlotElement } from './visitors/SlotElement.js';\nimport { SnippetBlock } from './visitors/SnippetBlock.js';\nimport { SpreadAttribute } from './visitors/SpreadAttribute.js';\nimport { SvelteComponent } from './visitors/SvelteComponent.js';\nimport { SvelteElement } from './visitors/SvelteElement.js';\nimport { SvelteFragment } from './visitors/SvelteFragment.js';\nimport { SvelteHead } from './visitors/SvelteHead.js';\nimport { SvelteSelf } from './visitors/SvelteSelf.js';\nimport { TitleElement } from './visitors/TitleElement.js';\nimport { UpdateExpression } from './visitors/UpdateExpression.js';\nimport { VariableDeclaration } from './visitors/VariableDeclaration.js';\nimport { SvelteBoundary } from './visitors/SvelteBoundary.js';\n\n/** @type {Visitors} */\nconst global_visitors = {\n\t_: set_scope,\n\tAssignmentExpression,\n\tAwaitExpression,\n\tCallExpression,\n\tClassBody,\n\tExpressionStatement,\n\tIdentifier,\n\tLabeledStatement,\n\tMemberExpression,\n\tProgram,\n\tPropertyDefinition,\n\tUpdateExpression,\n\tVariableDeclaration\n};\n\n/** @type {ComponentVisitors} */\nconst template_visitors = {\n\tAwaitBlock,\n\tComponent,\n\tConstTag,\n\tDebugTag,\n\tEachBlock,\n\tFragment,\n\tHtmlTag,\n\tIfBlock,\n\tKeyBlock,\n\tRegularElement,\n\tRenderTag,\n\tSlotElement,\n\tSnippetBlock,\n\tSpreadAttribute,\n\tSvelteComponent,\n\tSvelteElement,\n\tSvelteFragment,\n\tSvelteHead,\n\tSvelteSelf,\n\tTitleElement,\n\tSvelteBoundary\n};\n\n/**\n * @param {ComponentAnalysis} analysis\n * @param {ValidatedCompileOptions} options\n * @returns {ESTree.Program}\n */\nexport function server_component(analysis, options) {\n\t/** @type {ComponentServerTransformState} */\n\tconst state = {\n\t\tanalysis,\n\t\toptions,\n\t\tscope: analysis.module.scope,\n\t\tscopes: analysis.module.scopes,\n\t\thoisted: [b.import_all('$', 'svelte/internal/server'), ...analysis.instance_body.hoisted],\n\t\tlegacy_reactive_statements: new Map(),\n\t\t// these are set inside the `Fragment` visitor, and cannot be used until then\n\t\tinit: /** @type {any} */ (null),\n\t\ttemplate: /** @type {any} */ (null),\n\t\tnamespace: options.namespace,\n\t\tpreserve_whitespace: options.preserveWhitespace,\n\t\tstate_fields: new Map(),\n\t\tis_standalone: false,\n\t\tis_instance: false\n\t};\n\n\tconst module = /** @type {ESTree.Program} */ (\n\t\twalk(/** @type {AST.SvelteNode} */ (analysis.module.ast), state, global_visitors)\n\t);\n\n\tconst instance = /** @type {ESTree.Program} */ (\n\t\twalk(\n\t\t\t/** @type {AST.SvelteNode} */ (analysis.instance.ast),\n\t\t\t{ ...state, scopes: analysis.instance.scopes, is_instance: true },\n\t\t\t{\n\t\t\t\t...global_visitors,\n\t\t\t\tImportDeclaration(node) {\n\t\t\t\t\tstate.hoisted.push(node);\n\t\t\t\t\treturn b.empty;\n\t\t\t\t},\n\t\t\t\tExportNamedDeclaration(node, context) {\n\t\t\t\t\tif (node.declaration) {\n\t\t\t\t\t\treturn context.visit(node.declaration);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.empty;\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t);\n\n\tconst template = /** @type {ESTree.Program} */ (\n\t\twalk(\n\t\t\t/** @type {AST.SvelteNode} */ (analysis.template.ast),\n\t\t\t{ ...state, scopes: analysis.template.scopes },\n\t\t\t// @ts-expect-error don't know, don't care\n\t\t\t{ ...global_visitors, ...template_visitors }\n\t\t)\n\t);\n\n\t/** @type {ESTree.VariableDeclarator[]} */\n\tconst legacy_reactive_declarations = [];\n\n\tfor (const [node] of analysis.reactive_statements) {\n\t\tconst statement = [...state.legacy_reactive_statements].find(([n]) => n === node);\n\t\tif (statement === undefined) {\n\t\t\tthrow new Error('Could not find reactive statement');\n\t\t}\n\n\t\tif (\n\t\t\tnode.body.type === 'ExpressionStatement' &&\n\t\t\tnode.body.expression.type === 'AssignmentExpression'\n\t\t) {\n\t\t\tfor (const id of extract_identifiers(node.body.expression.left)) {\n\t\t\t\tconst binding = analysis.instance.scope.get(id.name);\n\t\t\t\tif (binding?.kind === 'legacy_reactive') {\n\t\t\t\t\tlegacy_reactive_declarations.push(b.declarator(id));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinstance.body.push(statement[1]);\n\t}\n\n\tif (legacy_reactive_declarations.length > 0) {\n\t\tinstance.body.unshift({\n\t\t\ttype: 'VariableDeclaration',\n\t\t\tkind: 'let',\n\t\t\tdeclarations: legacy_reactive_declarations\n\t\t});\n\t}\n\n\t// If the component binds to a child, we need to put the template in a loop and repeat until legacy bindings are stable.\n\t// We can remove this once the legacy syntax is gone.\n\tif (analysis.uses_component_bindings) {\n\t\tconst snippets = template.body.filter(\n\t\t\t// @ts-expect-error\n\t\t\t(node) => node.type === 'FunctionDeclaration' && node.___snippet\n\t\t);\n\n\t\tconst rest = template.body.filter(\n\t\t\t// @ts-expect-error\n\t\t\t(node) => node.type !== 'FunctionDeclaration' || !node.___snippet\n\t\t);\n\n\t\ttemplate.body = [\n\t\t\t...snippets,\n\t\t\tb.let('$$settled', b.true),\n\t\t\tb.let('$$inner_renderer'),\n\t\t\tb.function_declaration(\n\t\t\t\tb.id('$$render_inner'),\n\t\t\t\t[b.id('$$renderer')],\n\t\t\t\tb.block(/** @type {ESTree.Statement[]} */ (rest))\n\t\t\t),\n\t\t\tb.do_while(\n\t\t\t\tb.unary('!', b.id('$$settled')),\n\t\t\t\tb.block([\n\t\t\t\t\tb.stmt(b.assignment('=', b.id('$$settled'), b.true)),\n\t\t\t\t\tb.stmt(b.assignment('=', b.id('$$inner_renderer'), b.call('$$renderer.copy'))),\n\t\t\t\t\tb.stmt(b.call('$$render_inner', b.id('$$inner_renderer')))\n\t\t\t\t])\n\t\t\t),\n\t\t\tb.stmt(b.call('$$renderer.subsume', b.id('$$inner_renderer')))\n\t\t];\n\t}\n\n\tif (\n\t\t[...analysis.instance.scope.declarations.values()].some(\n\t\t\t(binding) => binding.kind === 'store_sub'\n\t\t)\n\t) {\n\t\tinstance.body.unshift(b.var('$$store_subs'));\n\t\ttemplate.body.push(\n\t\t\tb.if(b.id('$$store_subs'), b.stmt(b.call('$.unsubscribe_stores', b.id('$$store_subs'))))\n\t\t);\n\t}\n\n\t// Propagate values of bound props upwards if they're undefined in the parent and have a value.\n\t// Don't do this as part of the props retrieval because people could eagerly mutate the prop in the instance script.\n\t/** @type {ESTree.Property[]} */\n\tconst props = [];\n\n\tfor (const [name, binding] of analysis.instance.scope.declarations) {\n\t\tif (binding.kind === 'bindable_prop' && !name.startsWith('$$')) {\n\t\t\tprops.push(b.init(binding.prop_alias ?? name, b.id(name)));\n\t\t}\n\t}\n\n\tfor (const { name, alias } of analysis.exports) {\n\t\tprops.push(b.init(alias ?? name, b.id(name)));\n\t}\n\n\tif (props.length > 0) {\n\t\t// This has no effect in runes mode other than throwing an error when someone passes\n\t\t// undefined to a binding that has a default value.\n\t\ttemplate.body.push(b.stmt(b.call('$.bind_props', b.id('$$props'), b.object(props))));\n\t}\n\n\tlet component_block = b.block([\n\t\t.../** @type {ESTree.Statement[]} */ (instance.body),\n\t\t.../** @type {ESTree.Statement[]} */ (template.body)\n\t]);\n\n\t// trick esrap into including comments\n\tcomponent_block.loc = instance.loc;\n\n\tif (analysis.props_id) {\n\t\t// need to be placed on first line of the component for hydration\n\t\tcomponent_block.body.unshift(\n\t\t\tb.const(analysis.props_id, b.call('$.props_id', b.id('$$renderer')))\n\t\t);\n\t}\n\n\tlet should_inject_context = dev || analysis.needs_context;\n\n\tif (should_inject_context) {\n\t\tcomponent_block = b.block([\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$$renderer.component',\n\t\t\t\t\tb.arrow([b.id('$$renderer')], component_block, false),\n\t\t\t\t\tdev && b.id(component_name)\n\t\t\t\t)\n\t\t\t)\n\t\t]);\n\t}\n\n\tif (analysis.uses_rest_props) {\n\t\t/** @type {string[]} */\n\t\tconst named_props = analysis.exports.map(({ name, alias }) => alias ?? name);\n\t\tfor (const [name, binding] of analysis.instance.scope.declarations) {\n\t\t\tif (binding.kind === 'bindable_prop') named_props.push(binding.prop_alias ?? name);\n\t\t}\n\n\t\tcomponent_block.body.unshift(\n\t\t\tb.const(\n\t\t\t\t'$$restProps',\n\t\t\t\tb.call(\n\t\t\t\t\t'$.rest_props',\n\t\t\t\t\tb.id('$$sanitized_props'),\n\t\t\t\t\tb.array(named_props.map((name) => b.literal(name)))\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tif (analysis.uses_props || analysis.uses_rest_props) {\n\t\tcomponent_block.body.unshift(\n\t\t\tb.const('$$sanitized_props', b.call('$.sanitize_props', b.id('$$props')))\n\t\t);\n\t}\n\n\tif (analysis.uses_slots) {\n\t\tcomponent_block.body.unshift(b.const('$$slots', b.call('$.sanitize_slots', b.id('$$props'))));\n\t}\n\n\tconst body = [...state.hoisted, ...module.body];\n\n\tif (analysis.css.ast !== null && analysis.inject_styles && !analysis.custom_element) {\n\t\tconst hash = b.literal(analysis.css.hash);\n\t\tconst code = b.literal(render_stylesheet(analysis.source, analysis, options).code);\n\n\t\tbody.push(b.const('$$css', b.object([b.init('hash', hash), b.init('code', code)])));\n\t\tcomponent_block.body.unshift(b.stmt(b.call('$$renderer.global.css.add', b.id('$$css'))));\n\t}\n\n\tlet should_inject_props =\n\t\tshould_inject_context ||\n\t\tprops.length > 0 ||\n\t\tanalysis.needs_props ||\n\t\tanalysis.uses_props ||\n\t\tanalysis.uses_rest_props ||\n\t\tanalysis.uses_slots ||\n\t\tanalysis.slot_names.size > 0;\n\n\tconst component_function = b.function_declaration(\n\t\tb.id(analysis.name),\n\t\tshould_inject_props ? [b.id('$$renderer'), b.id('$$props')] : [b.id('$$renderer')],\n\t\tcomponent_block\n\t);\n\n\tif (options.compatibility.componentApi === 4) {\n\t\tbody.unshift(b.imports([['render', '$$_render']], 'svelte/server'));\n\t\tbody.push(\n\t\t\tcomponent_function,\n\t\t\tb.stmt(\n\t\t\t\tb.assignment(\n\t\t\t\t\t'=',\n\t\t\t\t\tb.member_id(`${analysis.name}.render`),\n\t\t\t\t\tb.function(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t[b.id('$$props'), b.id('$$opts')],\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\tb.return(\n\t\t\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t\t\t'$$_render',\n\t\t\t\t\t\t\t\t\tb.id(analysis.name),\n\t\t\t\t\t\t\t\t\tb.object([\n\t\t\t\t\t\t\t\t\t\tb.init('props', b.id('$$props')),\n\t\t\t\t\t\t\t\t\t\tb.init('context', b.member(b.id('$$opts'), 'context', false, true))\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\tb.export_default(b.id(analysis.name))\n\t\t);\n\t} else if (dev) {\n\t\tbody.push(\n\t\t\tcomponent_function,\n\t\t\tb.stmt(\n\t\t\t\tb.assignment(\n\t\t\t\t\t'=',\n\t\t\t\t\tb.member_id(`${analysis.name}.render`),\n\t\t\t\t\tb.function(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t[],\n\t\t\t\t\t\tb.block([\n\t\t\t\t\t\t\tb.throw_error(\n\t\t\t\t\t\t\t\t`Component.render(...) is no longer valid in Svelte 5. ` +\n\t\t\t\t\t\t\t\t\t'See https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes for more information'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t])\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\tb.export_default(b.id(analysis.name))\n\t\t);\n\t} else {\n\t\tbody.push(b.export_default(component_function));\n\t}\n\n\tif (dev) {\n\t\t// add `App[$.FILENAME] = 'App.svelte'` so that we can print useful messages later\n\t\tbody.unshift(\n\t\t\tb.stmt(\n\t\t\t\tb.assignment('=', b.member(b.id(analysis.name), '$.FILENAME', true), b.literal(filename))\n\t\t\t)\n\t\t);\n\t}\n\n\tif (options.experimental.async) {\n\t\tbody.unshift(b.imports([], 'svelte/internal/flags/async'));\n\t}\n\n\treturn {\n\t\ttype: 'Program',\n\t\tsourceType: 'module',\n\t\tbody\n\t};\n}\n\n/**\n * @param {Analysis} analysis\n * @param {ValidatedModuleCompileOptions} options\n * @returns {ESTree.Program}\n */\nexport function server_module(analysis, options) {\n\t/** @type {ServerTransformState} */\n\tconst state = {\n\t\tanalysis,\n\t\toptions,\n\t\tscope: analysis.module.scope,\n\t\tscopes: analysis.module.scopes,\n\t\t// this is an anomaly — it can only be used in components, but it needs\n\t\t// to be present for `javascript_visitors_legacy` and so is included in module\n\t\t// transform state as well as component transform state\n\t\tlegacy_reactive_statements: new Map(),\n\t\tstate_fields: new Map(),\n\t\tis_instance: false\n\t};\n\n\tconst module = /** @type {ESTree.Program} */ (\n\t\twalk(/** @type {AST.SvelteNode} */ (analysis.module.ast), state, global_visitors)\n\t);\n\n\treturn {\n\t\ttype: 'Program',\n\t\tsourceType: 'module',\n\t\tbody: [b.import_all('$', 'svelte/internal/server'), ...module.body]\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/types.d.ts",
    "content": "import type {\n\tExpression,\n\tStatement,\n\tModuleDeclaration,\n\tLabeledStatement,\n\tIdentifier\n} from 'estree';\nimport type { AST, Namespace, ValidatedCompileOptions } from '#compiler';\nimport type { TransformState } from '../types.js';\nimport type { ComponentAnalysis } from '../../types.js';\n\nexport interface ServerTransformState extends TransformState {\n\t/** The $: calls, which will be ordered in the end */\n\treadonly legacy_reactive_statements: Map<LabeledStatement, Statement>;\n}\n\nexport interface ComponentServerTransformState extends ServerTransformState {\n\treadonly analysis: ComponentAnalysis;\n\treadonly options: ValidatedCompileOptions;\n\n\treadonly init: Statement[];\n\n\treadonly hoisted: Array<Statement | ModuleDeclaration>;\n\n\t/** The SSR template  */\n\treadonly template: Array<Statement | Expression>;\n\treadonly namespace: Namespace;\n\treadonly preserve_whitespace: boolean;\n\t/** True if the current node is a) a component or render tag and b) the sole child of a block  */\n\treadonly is_standalone: boolean;\n\t/** Transformed async `{@const }` declarations (if any) and those coming after them */\n\tasync_consts?: {\n\t\tid: Identifier;\n\t\tthunks: Expression[];\n\t};\n}\n\nexport type Context = import('zimmerframe').Context<AST.SvelteNode, ServerTransformState>;\nexport type Visitors = import('zimmerframe').Visitors<AST.SvelteNode, ServerTransformState>;\n\nexport type ComponentContext = import('zimmerframe').Context<\n\tAST.SvelteNode,\n\tComponentServerTransformState\n>;\nexport type ComponentVisitors = import('zimmerframe').Visitors<\n\tAST.SvelteNode,\n\tComponentServerTransformState\n>;\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js",
    "content": "/** @import { AssignmentExpression, AssignmentOperator, Expression, Pattern } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { Context, ServerTransformState } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { build_assignment_value } from '../../../../utils/ast.js';\nimport { get_name } from '../../../nodes.js';\nimport { get_rune } from '../../../scope.js';\nimport { visit_assignment_expression } from '../../shared/assignments.js';\n\n/**\n * @param {AssignmentExpression} node\n * @param {Context} context\n */\nexport function AssignmentExpression(node, context) {\n\treturn visit_assignment_expression(node, context, build_assignment) ?? context.next();\n}\n\n/**\n * Only returns an expression if this is not a `$store` assignment, as others can be kept as-is\n * @param {AssignmentOperator} operator\n * @param {Pattern} left\n * @param {Expression} right\n * @param {import('zimmerframe').Context<AST.SvelteNode, ServerTransformState>} context\n * @returns {Expression | null}\n */\nfunction build_assignment(operator, left, right, context) {\n\tif (\n\t\tcontext.state.analysis.runes &&\n\t\tleft.type === 'MemberExpression' &&\n\t\tleft.object.type === 'ThisExpression' &&\n\t\t!left.computed\n\t) {\n\t\tconst name = get_name(left.property);\n\t\tconst field = name && context.state.state_fields.get(name);\n\n\t\t// special case — state declaration in class constructor\n\t\tif (field && field.node.type === 'AssignmentExpression' && left === field.node.left) {\n\t\t\tconst rune = get_rune(right, context.state.scope);\n\n\t\t\tif (rune) {\n\t\t\t\tconst key =\n\t\t\t\t\tleft.property.type === 'PrivateIdentifier' || rune === '$state' || rune === '$state.raw'\n\t\t\t\t\t\t? left.property\n\t\t\t\t\t\t: field.key;\n\n\t\t\t\treturn b.assignment(\n\t\t\t\t\toperator,\n\t\t\t\t\tb.member(b.this, key, key.type === 'Literal'),\n\t\t\t\t\t/** @type {Expression} */ (context.visit(right))\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tfield &&\n\t\t\t(field.type === '$derived' || field.type === '$derived.by') &&\n\t\t\tleft.property.type === 'PrivateIdentifier'\n\t\t) {\n\t\t\tlet value = /** @type {Expression} */ (\n\t\t\t\tcontext.visit(build_assignment_value(operator, left, right))\n\t\t\t);\n\t\t\treturn b.call(b.member(b.this, name), value);\n\t\t}\n\t}\n\n\tlet object = left;\n\n\twhile (object.type === 'MemberExpression') {\n\t\t// @ts-expect-error\n\t\tobject = object.object;\n\t}\n\n\tif (object.type !== 'Identifier') {\n\t\treturn null;\n\t}\n\n\tif (is_store_name(object.name)) {\n\t\tconst name = object.name.slice(1);\n\n\t\tif (!context.state.scope.get(name)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (object === left) {\n\t\t\tlet value = /** @type {Expression} */ (\n\t\t\t\tcontext.visit(build_assignment_value(operator, left, right))\n\t\t\t);\n\n\t\t\treturn b.call('$.store_set', b.id(name), value);\n\t\t}\n\n\t\treturn b.call(\n\t\t\t'$.store_mutate',\n\t\t\tb.assignment('??=', b.id('$$store_subs'), b.object([])),\n\t\t\tb.literal(object.name),\n\t\t\tb.id(name),\n\t\t\tb.assignment(\n\t\t\t\toperator,\n\t\t\t\t/** @type {Pattern} */ (context.visit(left)),\n\t\t\t\t/** @type {Expression} */ (context.visit(right))\n\t\t\t)\n\t\t);\n\t}\n\n\tconst binding = context.state.scope.get(object.name);\n\n\t// TODO 6.0 this won't work perfectly: once a derived is written to, it will\n\t// no longer recompute. It might be better to disallow writing to deriveds\n\t// on the server, to prevent this bug occurring\n\tif (binding?.kind === 'derived' && object === left) {\n\t\tlet value = /** @type {Expression} */ (\n\t\t\tcontext.visit(build_assignment_value(operator, left, right))\n\t\t);\n\n\t\treturn b.call(binding.node, value);\n\t}\n\n\treturn null;\n}\n\n/**\n * @param {string} name\n */\nfunction is_store_name(name) {\n\treturn name[0] === '$' && /[A-Za-z_]/.test(name[1]);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/AwaitBlock.js",
    "content": "/** @import { BlockStatement, Expression, Pattern, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { block_close, create_child_block } from './shared/utils.js';\n\n/**\n * @param {AST.AwaitBlock} node\n * @param {ComponentContext} context\n */\nexport function AwaitBlock(node, context) {\n\t/** @type {Statement} */\n\tlet statement = b.stmt(\n\t\tb.call(\n\t\t\t'$.await',\n\t\t\tb.id('$$renderer'),\n\t\t\t/** @type {Expression} */ (context.visit(node.expression)),\n\t\t\tb.thunk(\n\t\t\t\tnode.pending ? /** @type {BlockStatement} */ (context.visit(node.pending)) : b.block([])\n\t\t\t),\n\t\t\tb.arrow(\n\t\t\t\tnode.value ? [/** @type {Pattern} */ (context.visit(node.value))] : [],\n\t\t\t\tnode.then ? /** @type {BlockStatement} */ (context.visit(node.then)) : b.block([])\n\t\t\t)\n\t\t)\n\t);\n\n\tcontext.state.template.push(\n\t\t...create_child_block(\n\t\t\t[statement],\n\t\t\tnode.metadata.expression.blockers(),\n\t\t\tnode.metadata.expression.has_await\n\t\t),\n\t\tblock_close\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/AwaitExpression.js",
    "content": "/** @import { AwaitExpression, Expression } from 'estree' */\n/** @import { Context } from '../types' */\nimport { save } from '../../../../utils/ast.js';\n\n/**\n * @param {AwaitExpression} node\n * @param {Context} context\n */\nexport function AwaitExpression(node, context) {\n\tconst argument = /** @type {Expression} */ (context.visit(node.argument));\n\n\tif (context.state.analysis.pickled_awaits.has(node)) {\n\t\treturn save(argument);\n\t}\n\n\t// we also need to restore context after block expressions\n\tlet i = context.path.length;\n\twhile (i--) {\n\t\tconst parent = context.path[i];\n\n\t\tif (\n\t\t\tparent.type === 'ArrowFunctionExpression' ||\n\t\t\tparent.type === 'FunctionExpression' ||\n\t\t\tparent.type === 'FunctionDeclaration'\n\t\t) {\n\t\t\tbreak;\n\t\t}\n\n\t\t// @ts-ignore\n\t\tif (parent.metadata) {\n\t\t\tif (parent.type !== 'ExpressionTag' && parent.type !== 'Fragment') {\n\t\t\t\treturn save(argument);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn argument === node.argument ? node : { ...node, argument };\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/CallExpression.js",
    "content": "/** @import { CallExpression, Expression, MemberExpression } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport { dev, is_ignored } from '../../../../state.js';\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\nimport { get_inspect_args } from '../../utils.js';\n\n/**\n * @param {CallExpression} node\n * @param {Context} context\n */\nexport function CallExpression(node, context) {\n\tconst rune = get_rune(node, context.state.scope);\n\n\tif (\n\t\trune === '$host' ||\n\t\trune === '$effect' ||\n\t\trune === '$effect.pre' ||\n\t\trune === '$inspect.trace'\n\t) {\n\t\t// we will only encounter `$effect` etc if they are top-level statements in the <script>\n\t\t// following an `await`, otherwise they are removed by the ExpressionStatement visitor\n\t\treturn b.void0;\n\t}\n\n\tif (rune === '$effect.tracking') {\n\t\treturn b.false;\n\t}\n\n\tif (rune === '$effect.root') {\n\t\t// ignore $effect.root() calls, just return a noop which mimics the cleanup function\n\t\treturn b.arrow([], b.block([]));\n\t}\n\n\tif (rune === '$effect.pending') {\n\t\treturn b.literal(0);\n\t}\n\n\tif (rune === '$state' || rune === '$state.raw') {\n\t\treturn node.arguments[0] ? context.visit(node.arguments[0]) : b.void0;\n\t}\n\n\tif (rune === '$derived' || rune === '$derived.by') {\n\t\tconst fn = /** @type {Expression} */ (context.visit(node.arguments[0]));\n\t\treturn b.call('$.derived', rune === '$derived' ? b.thunk(fn) : fn);\n\t}\n\n\tif (rune === '$state.eager') {\n\t\treturn node.arguments[0];\n\t}\n\n\tif (rune === '$state.snapshot') {\n\t\treturn b.call(\n\t\t\t'$.snapshot',\n\t\t\t/** @type {Expression} */ (context.visit(node.arguments[0])),\n\t\t\tis_ignored(node, 'state_snapshot_uncloneable') && b.true\n\t\t);\n\t}\n\n\tif (rune === '$inspect' || rune === '$inspect().with') {\n\t\tif (!dev) return b.empty;\n\n\t\tconst { args, inspector } = get_inspect_args(rune, node, context.visit);\n\n\t\treturn rune === '$inspect'\n\t\t\t? b.call(inspector, b.literal('$inspect('), ...args, b.literal(')'))\n\t\t\t: b.call(inspector, b.literal('init'), ...args);\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/ClassBody.js",
    "content": "/** @import { CallExpression, ClassBody, MethodDefinition, PropertyDefinition, StaticBlock } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { get_name } from '../../../nodes.js';\n\n/**\n * @param {ClassBody} node\n * @param {Context} context\n */\nexport function ClassBody(node, context) {\n\tconst state_fields = context.state.analysis.classes.get(node);\n\n\tif (!state_fields) {\n\t\t// in legacy mode, do nothing\n\t\tcontext.next();\n\t\treturn;\n\t}\n\n\t/** @type {Array<MethodDefinition | PropertyDefinition | StaticBlock>} */\n\tconst body = [];\n\n\tconst child_state = { ...context.state, state_fields };\n\n\tfor (const [name, field] of state_fields) {\n\t\tif (name[0] === '#') {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// insert backing fields for stuff declared in the constructor\n\t\tif (\n\t\t\tfield &&\n\t\t\tfield.node.type === 'AssignmentExpression' &&\n\t\t\t(field.type === '$derived' || field.type === '$derived.by')\n\t\t) {\n\t\t\tconst member = b.member(b.this, field.key);\n\n\t\t\tbody.push(\n\t\t\t\tb.prop_def(field.key, null),\n\t\t\t\tb.method('get', b.key(name), [], [b.return(b.call(member))]),\n\t\t\t\tb.method('set', b.key(name), [b.id('$$value')], [b.return(b.call(member, b.id('$$value')))])\n\t\t\t);\n\t\t}\n\t}\n\n\t// Replace parts of the class body\n\tfor (const definition of node.body) {\n\t\tif (definition.type !== 'PropertyDefinition') {\n\t\t\tbody.push(\n\t\t\t\t/** @type {MethodDefinition | StaticBlock} */ (context.visit(definition, child_state))\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst name = get_name(definition.key);\n\t\tconst field = name && state_fields.get(name);\n\n\t\tif (!field) {\n\t\t\tbody.push(/** @type {PropertyDefinition} */ (context.visit(definition, child_state)));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (name[0] === '#' || field.type === '$state' || field.type === '$state.raw') {\n\t\t\tbody.push(/** @type {PropertyDefinition} */ (context.visit(definition, child_state)));\n\t\t} else if (field.node === definition) {\n\t\t\t// $derived / $derived.by\n\t\t\tconst member = b.member(b.this, field.key);\n\n\t\t\tbody.push(\n\t\t\t\tb.prop_def(\n\t\t\t\t\tfield.key,\n\t\t\t\t\t/** @type {CallExpression} */ (context.visit(field.value, child_state))\n\t\t\t\t),\n\n\t\t\t\tb.method('get', definition.key, [], [b.return(b.call(member))]),\n\t\t\t\tb.method('set', b.key(name), [b.id('$$value')], [b.return(b.call(member, b.id('$$value')))])\n\t\t\t);\n\t\t}\n\t}\n\n\treturn { ...node, body };\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/Component.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { build_inline_component } from './shared/component.js';\n\n/**\n * @param {AST.Component} node\n * @param {ComponentContext} context\n */\nexport function Component(node, context) {\n\tbuild_inline_component(node, /** @type {Expression} */ (context.visit(b.id(node.name))), context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/ConstTag.js",
    "content": "/** @import { Expression, Pattern } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { extract_identifiers } from '../../../../utils/ast.js';\n\n/**\n * @param {AST.ConstTag} node\n * @param {ComponentContext} context\n */\nexport function ConstTag(node, context) {\n\tconst declaration = node.declaration.declarations[0];\n\tconst id = /** @type {Pattern} */ (context.visit(declaration.id));\n\tconst init = /** @type {Expression} */ (context.visit(declaration.init));\n\tconst has_await = node.metadata.expression.has_await;\n\tconst blockers = [...node.metadata.expression.dependencies]\n\t\t.map((dep) => dep.blocker)\n\t\t.filter((b) => b !== null && b.object !== context.state.async_consts?.id);\n\n\tif (has_await || context.state.async_consts || blockers.length > 0) {\n\t\tconst run = (context.state.async_consts ??= {\n\t\t\tid: b.id(context.state.scope.generate('promises')),\n\t\t\tthunks: []\n\t\t});\n\n\t\tconst identifiers = extract_identifiers(declaration.id);\n\t\tconst bindings = context.state.scope.get_bindings(declaration);\n\n\t\tfor (const identifier of identifiers) {\n\t\t\tcontext.state.init.push(b.let(identifier.name));\n\t\t}\n\n\t\tif (blockers.length === 1) {\n\t\t\trun.thunks.push(b.thunk(/** @type {Expression} */ (blockers[0])));\n\t\t} else if (blockers.length > 0) {\n\t\t\trun.thunks.push(b.thunk(b.call('Promise.all', b.array(blockers))));\n\t\t}\n\n\t\tconst assignment = b.assignment('=', id, init);\n\t\trun.thunks.push(b.thunk(b.block([b.stmt(assignment)]), has_await));\n\n\t\tconst blocker = b.member(run.id, b.literal(run.thunks.length - 1), true);\n\t\tfor (const binding of bindings) {\n\t\t\tbinding.blocker = blocker;\n\t\t}\n\t} else {\n\t\tcontext.state.init.push(b.const(id, init));\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/DebugTag.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {AST.DebugTag} node\n * @param {ComponentContext} context\n */\nexport function DebugTag(node, context) {\n\tcontext.state.template.push(\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\t'console.log',\n\t\t\t\tb.object(\n\t\t\t\t\tnode.identifiers.map((identifier) =>\n\t\t\t\t\t\tb.prop('init', identifier, /** @type {Expression} */ (context.visit(identifier)))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tb.debugger\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/EachBlock.js",
    "content": "/** @import { BlockStatement, Expression, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { block_close, block_open, block_open_else, create_child_block } from './shared/utils.js';\n\n/**\n * @param {AST.EachBlock} node\n * @param {ComponentContext} context\n */\nexport function EachBlock(node, context) {\n\tconst state = context.state;\n\n\tconst each_node_meta = node.metadata;\n\tconst collection = /** @type {Expression} */ (context.visit(node.expression));\n\tconst index =\n\t\teach_node_meta.contains_group_binding || !node.index ? each_node_meta.index : b.id(node.index);\n\n\tconst array_id = state.scope.root.unique('each_array');\n\n\t/** @type {Statement[]} */\n\tlet statements = [b.const(array_id, b.call('$.ensure_array_like', collection))];\n\n\t/** @type {Statement[]} */\n\tconst each = [];\n\n\tif (node.context) {\n\t\teach.push(b.let(node.context, b.member(array_id, index, true)));\n\t}\n\n\tif (index.name !== node.index && node.index != null) {\n\t\teach.push(b.let(node.index, index));\n\t}\n\n\tconst new_body = /** @type {BlockStatement} */ (context.visit(node.body)).body;\n\n\tif (node.body) each.push(...new_body);\n\n\tconst for_loop = b.for(\n\t\tb.declaration('let', [\n\t\t\tb.declarator(index, b.literal(0)),\n\t\t\tb.declarator('$$length', b.member(array_id, 'length'))\n\t\t]),\n\t\tb.binary('<', index, b.id('$$length')),\n\t\tb.update('++', index, false),\n\t\tb.block(each)\n\t);\n\n\tif (node.fallback) {\n\t\tconst open = b.stmt(b.call(b.id('$$renderer.push'), block_open));\n\n\t\tconst fallback = /** @type {BlockStatement} */ (context.visit(node.fallback));\n\n\t\tfallback.body.unshift(b.stmt(b.call(b.id('$$renderer.push'), block_open_else)));\n\n\t\tstatements.push(\n\t\t\tb.if(\n\t\t\t\tb.binary('!==', b.member(array_id, 'length'), b.literal(0)),\n\t\t\t\tb.block([open, for_loop]),\n\t\t\t\tfallback\n\t\t\t)\n\t\t);\n\t} else {\n\t\tstate.template.push(block_open);\n\t\tstatements.push(for_loop);\n\t}\n\n\tstate.template.push(\n\t\t...create_child_block(\n\t\t\tstatements,\n\t\t\tnode.metadata.expression.blockers(),\n\t\t\tnode.metadata.expression.has_await\n\t\t),\n\t\tblock_close\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/ExpressionStatement.js",
    "content": "/** @import { ExpressionStatement } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\n\n/**\n * @param {ExpressionStatement} node\n * @param {Context} context\n */\nexport function ExpressionStatement(node, context) {\n\tconst rune = get_rune(node.expression, context.state.scope);\n\n\tif (\n\t\trune === '$effect' ||\n\t\trune === '$effect.pre' ||\n\t\trune === '$effect.root' ||\n\t\trune === '$inspect.trace'\n\t) {\n\t\treturn b.empty;\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/Fragment.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext, ComponentServerTransformState } from '../types.js' */\nimport { clean_nodes, infer_namespace } from '../../utils.js';\nimport * as b from '#compiler/builders';\nimport { empty_comment, process_children, build_template } from './shared/utils.js';\n\n/**\n * @param {AST.Fragment} node\n * @param {ComponentContext} context\n */\nexport function Fragment(node, context) {\n\tconst parent = context.path.at(-1) ?? node;\n\tconst namespace = infer_namespace(context.state.namespace, parent, node.nodes);\n\n\tconst { hoisted, trimmed, is_standalone, is_text_first } = clean_nodes(\n\t\tparent,\n\t\tnode.nodes,\n\t\tcontext.path,\n\t\tnamespace,\n\t\tcontext.state,\n\t\tcontext.state.preserve_whitespace,\n\t\tcontext.state.options.preserveComments\n\t);\n\n\t/** @type {ComponentServerTransformState} */\n\tconst state = {\n\t\t...context.state,\n\t\tinit: [],\n\t\ttemplate: [],\n\t\tnamespace,\n\t\tis_standalone,\n\t\tasync_consts: undefined\n\t};\n\n\tfor (const node of hoisted) {\n\t\tcontext.visit(node, state);\n\t}\n\n\tif (is_text_first) {\n\t\t// insert `<!---->` to prevent this from being glued to the previous fragment\n\t\tstate.template.push(empty_comment);\n\t}\n\n\tprocess_children(trimmed, { ...context, state });\n\n\tif (state.async_consts && state.async_consts.thunks.length > 0) {\n\t\tstate.init.push(\n\t\t\tb.var(state.async_consts.id, b.call('$$renderer.run', b.array(state.async_consts.thunks)))\n\t\t);\n\t}\n\n\treturn b.block([...state.init, ...build_template(state.template)]);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/HtmlTag.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { create_child_block } from './shared/utils.js';\n\n/**\n * @param {AST.HtmlTag} node\n * @param {ComponentContext} context\n */\nexport function HtmlTag(node, context) {\n\tconst expression = b.call('$.html', /** @type {Expression} */ (context.visit(node.expression)));\n\n\tif (node.metadata.expression.is_async()) {\n\t\tcontext.state.template.push(\n\t\t\t...create_child_block(\n\t\t\t\t[b.stmt(b.call('$$renderer.push', expression))],\n\t\t\t\tnode.metadata.expression.blockers(),\n\t\t\t\tnode.metadata.expression.has_await\n\t\t\t)\n\t\t);\n\t} else {\n\t\tcontext.state.template.push(expression);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/Identifier.js",
    "content": "/** @import { Identifier, Node } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport is_reference from 'is-reference';\nimport * as b from '#compiler/builders';\nimport { build_getter } from './shared/utils.js';\n\n/**\n * @param {Identifier} node\n * @param {Context} context\n */\nexport function Identifier(node, context) {\n\tif (is_reference(node, /** @type {Node} */ (context.path.at(-1)))) {\n\t\tif (node.name === '$$props') {\n\t\t\treturn b.id('$$sanitized_props');\n\t\t}\n\n\t\tif (node.name.startsWith('$$derived_array')) {\n\t\t\t// terrible hack, but easier than adding new stuff to `context.state` for now\n\t\t\treturn b.call(node);\n\t\t}\n\n\t\treturn build_getter(node, context.state);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js",
    "content": "/** @import { BlockStatement, Expression, IfStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { block_close, create_child_block } from './shared/utils.js';\n\n/**\n * @param {AST.IfBlock} node\n * @param {ComponentContext} context\n */\nexport function IfBlock(node, context) {\n\tconst consequent = /** @type {BlockStatement} */ (context.visit(node.consequent));\n\tconsequent.body.unshift(b.stmt(b.call(b.id('$$renderer.push'), b.literal(`<!--[0-->`))));\n\n\t/** @type {IfStatement} */\n\tlet if_statement = b.if(/** @type {Expression} */ (context.visit(node.test)), consequent);\n\n\tlet index = 1;\n\tlet current_if = if_statement;\n\tlet alt = node.alternate;\n\n\t// Walk the else-if chain, flattening branches\n\tfor (const elseif of node.metadata.flattened ?? []) {\n\t\tconst branch = /** @type {BlockStatement} */ (context.visit(elseif.consequent));\n\t\tbranch.body.unshift(b.stmt(b.call(b.id('$$renderer.push'), b.literal(`<!--[${index++}-->`))));\n\n\t\tcurrent_if = current_if.alternate = b.if(\n\t\t\t/** @type {Expression} */ (context.visit(elseif.test)),\n\t\t\tbranch\n\t\t);\n\t\talt = elseif.alternate;\n\t}\n\n\t// Handle final else (or remaining async chain)\n\tconst final_alternate = alt ? /** @type {BlockStatement} */ (context.visit(alt)) : b.block([]);\n\n\tfinal_alternate.body.unshift(b.stmt(b.call(b.id('$$renderer.push'), b.literal(`<!--[-1-->`))));\n\tcurrent_if.alternate = final_alternate;\n\n\tcontext.state.template.push(\n\t\t...create_child_block(\n\t\t\t[if_statement],\n\t\t\tnode.metadata.expression.blockers(),\n\t\t\tnode.metadata.expression.has_await\n\t\t),\n\t\tblock_close\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/KeyBlock.js",
    "content": "/** @import { BlockStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport { block_close, block_open, empty_comment } from './shared/utils.js';\n\n/**\n * @param {AST.KeyBlock} node\n * @param {ComponentContext} context\n */\nexport function KeyBlock(node, context) {\n\tconst is_async = node.metadata.expression.is_async();\n\n\tif (is_async) context.state.template.push(block_open);\n\n\tcontext.state.template.push(\n\t\tempty_comment,\n\t\t/** @type {BlockStatement} */ (context.visit(node.fragment)),\n\t\tempty_comment\n\t);\n\n\tif (is_async) context.state.template.push(block_close);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/LabeledStatement.js",
    "content": "/** @import { ExpressionStatement, LabeledStatement } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {LabeledStatement} node\n * @param {Context} context\n */\nexport function LabeledStatement(node, context) {\n\tif (context.state.analysis.runes || context.path.length > 1 || node.label.name !== '$') {\n\t\treturn;\n\t}\n\n\t// TODO bail out if we're in module context\n\n\t// these statements will be topologically ordered later\n\tcontext.state.legacy_reactive_statements.set(\n\t\tnode,\n\t\t// people could do \"break $\" inside, so we need to keep the label\n\t\tb.labeled('$', /** @type {ExpressionStatement} */ (context.visit(node.body)))\n\t);\n\n\treturn b.empty;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/MemberExpression.js",
    "content": "/** @import { ClassBody, MemberExpression } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {MemberExpression} node\n * @param {Context} context\n */\nexport function MemberExpression(node, context) {\n\tif (context.state.analysis.runes && node.property.type === 'PrivateIdentifier') {\n\t\tconst field = context.state.state_fields?.get(`#${node.property.name}`);\n\n\t\tif (field?.type === '$derived' || field?.type === '$derived.by') {\n\t\t\treturn b.call(node);\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/Program.js",
    "content": "/** @import { Node, Program } from 'estree' */\n/** @import { Context, ComponentServerTransformState } from '../types' */\nimport * as b from '#compiler/builders';\nimport { transform_body } from '../../shared/transform-async.js';\n\n/**\n * @param {Program} node\n * @param {Context} context\n */\nexport function Program(node, context) {\n\tif (context.state.is_instance) {\n\t\tconst state = /** @type {ComponentServerTransformState} */ (context.state);\n\n\t\treturn {\n\t\t\t...node,\n\t\t\tbody: transform_body(\n\t\t\t\tstate.analysis.instance_body,\n\t\t\t\tb.id('$$renderer.run'),\n\t\t\t\t(node) => /** @type {Node} */ (context.visit(node))\n\t\t\t)\n\t\t};\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/PropertyDefinition.js",
    "content": "/** @import { Expression, PropertyDefinition } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\n\n/**\n * @param {PropertyDefinition} node\n * @param {Context} context\n */\nexport function PropertyDefinition(node, context) {\n\tif (context.state.analysis.runes && node.value != null && node.value.type === 'CallExpression') {\n\t\tconst rune = get_rune(node.value, context.state.scope);\n\n\t\tif (rune === '$state' || rune === '$state.raw') {\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tvalue:\n\t\t\t\t\tnode.value.arguments.length === 0\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: /** @type {Expression} */ (context.visit(node.value.arguments[0]))\n\t\t\t};\n\t\t}\n\n\t\tif (rune === '$derived.by' || rune === '$derived') {\n\t\t\tconst fn = /** @type {Expression} */ (context.visit(node.value.arguments[0]));\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\tvalue:\n\t\t\t\t\tnode.value.arguments.length === 0\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: b.call('$.derived', rune === '$derived' ? b.thunk(fn) : fn)\n\t\t\t};\n\t\t}\n\t}\n\n\tcontext.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/RegularElement.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext, ComponentServerTransformState } from '../types.js' */\n/** @import { Scope } from '../../../scope.js' */\nimport { is_void } from '../../../../../utils.js';\nimport { dev, locator } from '../../../../state.js';\nimport * as b from '#compiler/builders';\nimport { clean_nodes, determine_namespace_for_children } from '../../utils.js';\nimport { build_element_attributes, prepare_element_spread_object } from './shared/element.js';\nimport { process_children, build_template, PromiseOptimiser } from './shared/utils.js';\nimport { is_customizable_select_element } from '../../../nodes.js';\n\n/**\n * @param {AST.RegularElement} node\n * @param {ComponentContext} context\n */\nexport function RegularElement(node, context) {\n\tconst name = context.state.namespace === 'html' ? node.name.toLowerCase() : node.name;\n\tconst namespace = determine_namespace_for_children(node, context.state.namespace);\n\n\t/** @type {ComponentServerTransformState} */\n\tconst state = {\n\t\t...context.state,\n\t\tnamespace,\n\t\tpreserve_whitespace:\n\t\t\tcontext.state.preserve_whitespace || node.name === 'pre' || node.name === 'textarea',\n\t\tinit: [],\n\t\ttemplate: []\n\t};\n\n\tconst node_is_void = is_void(name);\n\n\tconst optimiser = new PromiseOptimiser();\n\n\t// If this element needs special handling (like <select value> / <option>),\n\t// avoid calling build_element_attributes here to prevent evaluating/awaiting\n\t// attribute expressions twice. We'll handle attributes in the special branch.\n\tconst is_select_special =\n\t\tname === 'select' &&\n\t\tnode.attributes.some(\n\t\t\t(attribute) =>\n\t\t\t\t((attribute.type === 'Attribute' || attribute.type === 'BindDirective') &&\n\t\t\t\t\tattribute.name === 'value') ||\n\t\t\t\tattribute.type === 'SpreadAttribute'\n\t\t);\n\tconst is_option_special = name === 'option';\n\tconst is_special = is_select_special || is_option_special;\n\n\tlet body = /** @type {Expression | null} */ (null);\n\tif (!is_special) {\n\t\t// only open the tag in the non-special path\n\t\tstate.template.push(b.literal(`<${name}`));\n\t\tbody = build_element_attributes(node, { ...context, state }, optimiser.transform);\n\t\tstate.template.push(b.literal(node_is_void ? '/>' : '>')); // add `/>` for XHTML compliance\n\t}\n\n\tif ((name === 'script' || name === 'style') && node.fragment.nodes.length === 1) {\n\t\tstate.template.push(\n\t\t\tb.literal(/** @type {AST.Text} */ (node.fragment.nodes[0]).data),\n\t\t\tb.literal(`</${name}>`)\n\t\t);\n\n\t\tcontext.state.template.push(\n\t\t\t...optimiser.render([...state.init, ...build_template(state.template)])\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst { hoisted, trimmed } = clean_nodes(\n\t\tnode,\n\t\tnode.fragment.nodes,\n\t\tcontext.path,\n\t\tnamespace,\n\t\t{\n\t\t\t...state,\n\t\t\tscope: /** @type {Scope} */ (state.scopes.get(node.fragment))\n\t\t},\n\t\tstate.preserve_whitespace,\n\t\tstate.options.preserveComments\n\t);\n\n\tfor (const node of hoisted) {\n\t\tcontext.visit(node, state);\n\t}\n\n\tif (dev) {\n\t\tconst location = locator(node.start);\n\t\tstate.template.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.push_element',\n\t\t\t\t\tb.id('$$renderer'),\n\t\t\t\t\tb.literal(name),\n\t\t\t\t\tb.literal(location.line),\n\t\t\t\t\tb.literal(location.column)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tif (is_select_special) {\n\t\tconst inner_state = { ...state, template: [], init: [] };\n\t\tprocess_children(trimmed, { ...context, state: inner_state });\n\n\t\tconst fn = b.arrow(\n\t\t\t[b.id('$$renderer')],\n\t\t\tb.block([...state.init, ...build_template(inner_state.template)])\n\t\t);\n\n\t\tconst [attributes, ...rest] = prepare_element_spread_object(node, context, optimiser.transform);\n\n\t\tif (is_customizable_select_element(node)) {\n\t\t\trest.push(b.true);\n\t\t}\n\n\t\tconst statement = b.stmt(b.call('$$renderer.select', attributes, fn, ...rest));\n\n\t\tcontext.state.template.push(...optimiser.render([...state.init, statement]));\n\n\t\treturn;\n\t}\n\n\tif (is_option_special) {\n\t\tlet body;\n\n\t\tif (node.metadata.synthetic_value_node) {\n\t\t\tbody = optimiser.transform(\n\t\t\t\t/** @type {Expression} */ (context.visit(node.metadata.synthetic_value_node.expression)),\n\t\t\t\tnode.metadata.synthetic_value_node.metadata.expression\n\t\t\t);\n\t\t} else {\n\t\t\tconst inner_state = { ...state, template: [], init: [] };\n\t\t\tprocess_children(trimmed, { ...context, state: inner_state });\n\n\t\t\t/** @type {import('estree').Statement[]} */\n\t\t\tconst body_statements = [...state.init, ...build_template(inner_state.template)];\n\n\t\t\tif (dev) {\n\t\t\t\tconst location = locator(node.start);\n\t\t\t\tbody_statements.unshift(\n\t\t\t\t\tb.stmt(\n\t\t\t\t\t\tb.call(\n\t\t\t\t\t\t\t'$.push_element',\n\t\t\t\t\t\t\tb.id('$$renderer'),\n\t\t\t\t\t\t\tb.literal(name),\n\t\t\t\t\t\t\tb.literal(location.line),\n\t\t\t\t\t\t\tb.literal(location.column)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tbody_statements.push(b.stmt(b.call('$.pop_element')));\n\t\t\t}\n\n\t\t\tbody = b.arrow([b.id('$$renderer')], b.block(body_statements));\n\t\t}\n\n\t\tconst [attributes, ...rest] = prepare_element_spread_object(node, context, optimiser.transform);\n\n\t\tif (is_customizable_select_element(node)) {\n\t\t\trest.push(b.true);\n\t\t}\n\n\t\tconst statement = b.stmt(b.call('$$renderer.option', attributes, body, ...rest));\n\n\t\tcontext.state.template.push(...optimiser.render([...state.init, statement]));\n\n\t\treturn;\n\t}\n\n\tif (body !== null) {\n\t\t// if this is a `<textarea>` value or a contenteditable binding, we only add\n\t\t// the body if the attribute/binding is falsy\n\t\tconst inner_state = { ...state, template: [], init: [] };\n\t\tprocess_children(trimmed, { ...context, state: inner_state });\n\n\t\tlet id = /** @type {Expression} */ (body);\n\n\t\tif (body.type !== 'Identifier') {\n\t\t\tid = b.id(state.scope.generate('$$body'));\n\t\t\tstate.template.push(b.const(id, body));\n\t\t}\n\n\t\t// Use the body expression as the body if it's truthy, otherwise use the inner template\n\t\tstate.template.push(\n\t\t\tb.if(\n\t\t\t\tid,\n\t\t\t\tb.block(build_template([id])),\n\t\t\t\tb.block([...inner_state.init, ...build_template(inner_state.template)])\n\t\t\t)\n\t\t);\n\t} else {\n\t\t// For optgroup or select with rich content, add hydration marker at the start\n\t\tprocess_children(trimmed, { ...context, state });\n\t\tif ((name === 'optgroup' || name === 'select') && is_customizable_select_element(node)) {\n\t\t\tstate.template.push(b.literal('<!>'));\n\t\t}\n\t}\n\n\tif (!node_is_void) {\n\t\tstate.template.push(b.literal(`</${name}>`));\n\t}\n\n\tif (dev) {\n\t\tstate.template.push(b.stmt(b.call('$.pop_element')));\n\t}\n\n\tif (optimiser.is_async()) {\n\t\tcontext.state.template.push(\n\t\t\t...optimiser.render([...state.init, ...build_template(state.template)])\n\t\t);\n\t} else {\n\t\tcontext.state.init.push(...state.init);\n\t\tcontext.state.template.push(...state.template);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/RenderTag.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport { unwrap_optional } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { empty_comment, PromiseOptimiser } from './shared/utils.js';\n\n/**\n * @param {AST.RenderTag} node\n * @param {ComponentContext} context\n */\nexport function RenderTag(node, context) {\n\tconst optimiser = new PromiseOptimiser();\n\n\tconst callee = unwrap_optional(node.expression).callee;\n\tconst raw_args = unwrap_optional(node.expression).arguments;\n\n\tconst snippet_function = optimiser.transform(\n\t\t/** @type {Expression} */ (context.visit(callee)),\n\t\tnode.metadata.expression\n\t);\n\n\tconst snippet_args = raw_args.map((arg, i) => {\n\t\treturn optimiser.transform(\n\t\t\t/** @type {Expression} */ (context.visit(arg)),\n\t\t\tnode.metadata.arguments[i]\n\t\t);\n\t});\n\n\tlet statement = b.stmt(\n\t\t(node.expression.type === 'CallExpression' ? b.call : b.maybe_call)(\n\t\t\tsnippet_function,\n\t\t\tb.id('$$renderer'),\n\t\t\t...snippet_args\n\t\t)\n\t);\n\n\tcontext.state.template.push(...optimiser.render_block([statement]));\n\n\t// If the render tag is wrapped in $.async, that $.async call already contains surrounding markers,\n\t// so we don't need to (or rather must not, to avoid hydration mismatches) add our own.\n\tif (!optimiser.is_async() && !context.state.is_standalone) {\n\t\tcontext.state.template.push(empty_comment);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SlotElement.js",
    "content": "/** @import { BlockStatement, Expression, Literal, Property } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport {\n\tbuild_attribute_value,\n\tPromiseOptimiser,\n\tblock_open,\n\tblock_close\n} from './shared/utils.js';\n\n/**\n * @param {AST.SlotElement} node\n * @param {ComponentContext} context\n */\nexport function SlotElement(node, context) {\n\t/** @type {Property[]} */\n\tconst props = [];\n\n\t/** @type {Expression[]} */\n\tconst spreads = [];\n\n\tconst optimiser = new PromiseOptimiser();\n\n\tlet name = b.literal('default');\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'SpreadAttribute') {\n\t\t\tlet expression = /** @type {Expression} */ (context.visit(attribute));\n\t\t\tspreads.push(optimiser.transform(expression, attribute.metadata.expression));\n\t\t} else if (attribute.type === 'Attribute') {\n\t\t\tconst value = build_attribute_value(\n\t\t\t\tattribute.value,\n\t\t\t\tcontext,\n\t\t\t\toptimiser.transform,\n\t\t\t\tfalse,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (attribute.name === 'name') {\n\t\t\t\tname = /** @type {Literal} */ (value);\n\t\t\t} else if (attribute.name !== 'slot') {\n\t\t\t\tprops.push(b.init(attribute.name, value));\n\t\t\t}\n\t\t}\n\t}\n\n\tconst props_expression =\n\t\tspreads.length === 0\n\t\t\t? b.object(props)\n\t\t\t: b.call('$.spread_props', b.array([b.object(props), ...spreads]));\n\n\tconst fallback =\n\t\tnode.fragment.nodes.length === 0\n\t\t\t? b.null\n\t\t\t: b.thunk(/** @type {BlockStatement} */ (context.visit(node.fragment)));\n\n\tconst slot = b.call(\n\t\t'$.slot',\n\t\tb.id('$$renderer'),\n\t\tb.id('$$props'),\n\t\tname,\n\t\tprops_expression,\n\t\tfallback\n\t);\n\n\tcontext.state.template.push(block_open, ...optimiser.render_block([b.stmt(slot)]), block_close);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SnippetBlock.js",
    "content": "/** @import { BlockStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport { dev } from '../../../../state.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @param {AST.SnippetBlock} node\n * @param {ComponentContext} context\n */\nexport function SnippetBlock(node, context) {\n\tlet fn = b.function_declaration(\n\t\tnode.expression,\n\t\t[b.id('$$renderer'), ...node.parameters],\n\t\t/** @type {BlockStatement} */ (context.visit(node.body))\n\t);\n\n\t// @ts-expect-error - TODO remove this hack once $$render_inner for legacy bindings is gone\n\tfn.___snippet = true;\n\n\tconst statements = node.metadata.can_hoist ? context.state.hoisted : context.state.init;\n\n\tif (dev) {\n\t\tfn.body.body.unshift(b.stmt(b.call('$.validate_snippet_args', b.id('$$renderer'))));\n\t\tstatements.push(b.stmt(b.call('$.prevent_snippet_stringification', fn.id)));\n\t}\n\n\tstatements.push(fn);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SpreadAttribute.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n\n/**\n * @param {AST.SpreadAttribute} node\n * @param {ComponentContext} context\n */\nexport function SpreadAttribute(node, context) {\n\treturn context.visit(node.expression);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteBoundary.js",
    "content": "/** @import { BlockStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\nimport * as b from '#compiler/builders';\nimport {\n\tblock_close,\n\tblock_open,\n\tblock_open_else,\n\tbuild_attribute_value,\n\tbuild_template\n} from './shared/utils.js';\n\n/**\n * @param {AST.SvelteBoundary} node\n * @param {ComponentContext} context\n */\nexport function SvelteBoundary(node, context) {\n\t// Extract the `failed` snippet/attribute\n\tconst failed_snippet = /** @type {AST.SnippetBlock | undefined} */ (\n\t\tnode.fragment.nodes.find(\n\t\t\t(node) => node.type === 'SnippetBlock' && node.expression.name === 'failed'\n\t\t)\n\t);\n\tconst failed_attribute = /** @type {AST.Attribute} */ (\n\t\tnode.attributes.find((node) => node.type === 'Attribute' && node.name === 'failed')\n\t);\n\n\t// Extract the `pending` snippet/attribute\n\tconst pending_attribute = /** @type {AST.Attribute} */ (\n\t\tnode.attributes.find((node) => node.type === 'Attribute' && node.name === 'pending')\n\t);\n\tconst is_pending_attr_nullish =\n\t\tpending_attribute &&\n\t\ttypeof pending_attribute.value === 'object' &&\n\t\t!Array.isArray(pending_attribute.value) &&\n\t\t!context.state.scope.evaluate(pending_attribute.value.expression).is_defined;\n\tconst pending_snippet = /** @type {AST.SnippetBlock | undefined} */ (\n\t\tnode.fragment.nodes.find(\n\t\t\t(node) => node.type === 'SnippetBlock' && node.expression.name === 'pending'\n\t\t)\n\t);\n\n\tconst children_nodes = node.fragment.nodes.filter(\n\t\t(child) =>\n\t\t\t!(child.type === 'SnippetBlock' && ['failed', 'pending'].includes(child.expression.name))\n\t);\n\n\tconst children_fragment = { ...node.fragment, nodes: children_nodes };\n\tconst children_block = /** @type {BlockStatement} */ (\n\t\tcontext.visit(children_fragment, {\n\t\t\t...context.state,\n\t\t\tscope: context.state.scopes.get(node.fragment) ?? context.state.scope\n\t\t})\n\t);\n\n\t/** @type {BlockStatement} */\n\tlet children_body;\n\n\tif (pending_attribute || pending_snippet) {\n\t\tif (pending_attribute && is_pending_attr_nullish && !pending_snippet) {\n\t\t\tconst { callee, pending_block } = build_pending_attribute_block(pending_attribute, context);\n\n\t\t\tchildren_body = b.block([\n\t\t\t\tb.if(\n\t\t\t\t\tcallee,\n\t\t\t\t\tpending_block,\n\t\t\t\t\tb.block(build_template([block_open, children_block, block_close]))\n\t\t\t\t)\n\t\t\t]);\n\t\t} else {\n\t\t\tchildren_body = pending_attribute\n\t\t\t\t? build_pending_attribute_block(pending_attribute, context).pending_block\n\t\t\t\t: build_pending_snippet_block(/** @type {AST.SnippetBlock} */ (pending_snippet), context);\n\t\t}\n\t} else {\n\t\tchildren_body = b.block(build_template([block_open, children_block, block_close]));\n\t}\n\n\t// When there's no `failed` snippet/attribute, skip the boundary wrapper entirely\n\t// (saves bytes / more performant at runtime)\n\tif (!failed_snippet && !failed_attribute) {\n\t\tcontext.state.template.push(...children_body.body);\n\t\treturn;\n\t}\n\n\tconst props = b.object([]);\n\tif (failed_attribute && !failed_snippet) {\n\t\tconst failed_callee = build_attribute_value(\n\t\t\tfailed_attribute.value,\n\t\t\tcontext,\n\t\t\t(expression) => expression,\n\t\t\tfalse,\n\t\t\ttrue\n\t\t);\n\n\t\tprops.properties.push(b.init('failed', failed_callee));\n\t} else if (failed_snippet) {\n\t\tcontext.visit(failed_snippet, context.state);\n\t\tprops.properties.push(b.init('failed', failed_snippet.expression));\n\t}\n\n\tcontext.state.template.push(\n\t\tb.stmt(b.call('$$renderer.boundary', props, b.arrow([b.id('$$renderer')], children_body)))\n\t);\n}\n\n/**\n * @param {AST.Attribute} attribute\n * @param {ComponentContext} context\n */\nfunction build_pending_attribute_block(attribute, context) {\n\tconst callee = build_attribute_value(\n\t\tattribute.value,\n\t\tcontext,\n\t\t(expression) => expression,\n\t\tfalse,\n\t\ttrue\n\t);\n\tconst pending = b.call(callee, b.id('$$renderer'));\n\n\treturn {\n\t\tcallee,\n\t\tpending_block: b.block(build_template([block_open_else, b.stmt(pending), block_close]))\n\t};\n}\n\n/**\n * @param {AST.SnippetBlock} snippet\n * @param {ComponentContext} context\n */\nfunction build_pending_snippet_block(snippet, context) {\n\treturn b.block(\n\t\tbuild_template([\n\t\t\tblock_open_else,\n\t\t\t/** @type {BlockStatement} */ (context.visit(snippet.body)),\n\t\t\tblock_close\n\t\t])\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteComponent.js",
    "content": "/** @import { Expression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport { build_inline_component } from './shared/component.js';\n\n/**\n * @param {AST.SvelteComponent} node\n * @param {ComponentContext} context\n */\nexport function SvelteComponent(node, context) {\n\tbuild_inline_component(node, /** @type {Expression} */ (context.visit(node.expression)), context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js",
    "content": "/** @import { BlockStatement, Expression, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport { dev, locator } from '../../../../state.js';\nimport * as b from '#compiler/builders';\nimport { determine_namespace_for_children } from '../../utils.js';\nimport { build_element_attributes } from './shared/element.js';\nimport { build_template, create_child_block, PromiseOptimiser } from './shared/utils.js';\n\n/**\n * @param {AST.SvelteElement} node\n * @param {ComponentContext} context\n */\nexport function SvelteElement(node, context) {\n\tlet tag = /** @type {Expression} */ (context.visit(node.tag));\n\n\tif (dev) {\n\t\t// Ensure getters/function calls aren't called multiple times.\n\t\t// If we ever start referencing `tag` more than once in prod, move this out of the if block.\n\t\tif (tag.type !== 'Identifier') {\n\t\t\tconst tag_id = context.state.scope.generate('$$tag');\n\t\t\tcontext.state.init.push(b.const(tag_id, tag));\n\t\t\ttag = b.id(tag_id);\n\t\t}\n\n\t\tcontext.state.init.push(b.stmt(b.call('$.validate_dynamic_element_tag', b.thunk(tag))));\n\t\tif (node.fragment.nodes.length > 0) {\n\t\t\tcontext.state.init.push(b.stmt(b.call('$.validate_void_dynamic_element', b.thunk(tag))));\n\t\t}\n\t}\n\n\tconst state = {\n\t\t...context.state,\n\t\tnamespace: determine_namespace_for_children(node, context.state.namespace),\n\t\ttemplate: [],\n\t\tinit: []\n\t};\n\n\tconst optimiser = new PromiseOptimiser();\n\n\t/** @type {Statement[]} */\n\tlet statements = [];\n\n\tbuild_element_attributes(node, { ...context, state }, optimiser.transform);\n\n\tif (dev) {\n\t\tconst location = locator(node.start);\n\t\tstatements.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.push_element',\n\t\t\t\t\tb.id('$$renderer'),\n\t\t\t\t\ttag,\n\t\t\t\t\tb.literal(location.line),\n\t\t\t\t\tb.literal(location.column)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tconst attributes = b.block([...state.init, ...build_template(state.template)]);\n\tconst children = /** @type {BlockStatement} */ (context.visit(node.fragment, state));\n\n\tstatements.push(\n\t\t...optimiser.render([\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.element',\n\t\t\t\t\tb.id('$$renderer'),\n\t\t\t\t\ttag,\n\t\t\t\t\tattributes.body.length > 0 && b.thunk(attributes),\n\t\t\t\t\tchildren.body.length > 0 && b.thunk(children)\n\t\t\t\t)\n\t\t\t)\n\t\t])\n\t);\n\n\tif (dev) {\n\t\tstatements.push(b.stmt(b.call('$.pop_element')));\n\t}\n\n\tcontext.state.template.push(\n\t\t...create_child_block(\n\t\t\tstatements,\n\t\t\tnode.metadata.expression.blockers(),\n\t\t\tnode.metadata.expression.has_await\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js",
    "content": "/** @import { BlockStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types' */\n\n/**\n * @param {AST.SvelteFragment} node\n * @param {ComponentContext} context\n */\nexport function SvelteFragment(node, context) {\n\tcontext.state.template.push(/** @type {BlockStatement} */ (context.visit(node.fragment)));\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteHead.js",
    "content": "/** @import { BlockStatement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { hash } from '../../../../../utils.js';\nimport { filename } from '../../../../state.js';\n\n/**\n * @param {AST.SvelteHead} node\n * @param {ComponentContext} context\n */\nexport function SvelteHead(node, context) {\n\tconst block = /** @type {BlockStatement} */ (context.visit(node.fragment));\n\n\tcontext.state.template.push(\n\t\tb.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.head',\n\t\t\t\tb.literal(hash(filename)),\n\t\t\t\tb.id('$$renderer'),\n\t\t\t\tb.arrow([b.id('$$renderer')], block)\n\t\t\t)\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteSelf.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { build_inline_component } from './shared/component.js';\n\n/**\n * @param {AST.SvelteSelf} node\n * @param {ComponentContext} context\n */\nexport function SvelteSelf(node, context) {\n\tbuild_inline_component(node, b.id(context.state.analysis.name), context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/TitleElement.js",
    "content": "/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../types.js' */\nimport * as b from '#compiler/builders';\nimport { process_children, build_template } from './shared/utils.js';\n\n/**\n * @param {AST.TitleElement} node\n * @param {ComponentContext} context\n */\nexport function TitleElement(node, context) {\n\t// title is guaranteed to contain only text/expression tag children\n\tconst template = [b.literal('<title>')];\n\tprocess_children(node.fragment.nodes, { ...context, state: { ...context.state, template } });\n\ttemplate.push(b.literal('</title>'));\n\n\tcontext.state.init.push(\n\t\tb.stmt(\n\t\t\tb.call('$$renderer.title', b.arrow([b.id('$$renderer')], b.block(build_template(template))))\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/UpdateExpression.js",
    "content": "/** @import { UpdateExpression } from 'estree' */\n/** @import { Context } from '../types.js' */\nimport * as b from '#compiler/builders';\n\n/**\n * @param {UpdateExpression} node\n * @param {Context} context\n */\nexport function UpdateExpression(node, context) {\n\tconst argument = node.argument;\n\n\tif (argument.type === 'Identifier') {\n\t\tconst binding = context.state.scope.get(argument.name);\n\n\t\tif (binding?.kind === 'store_sub') {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '$.update_store_pre' : '$.update_store',\n\t\t\t\tb.assignment('??=', b.id('$$store_subs'), b.object([])),\n\t\t\t\tb.literal(argument.name),\n\t\t\t\tb.id(argument.name.slice(1)),\n\t\t\t\tnode.operator === '--' && b.literal(-1)\n\t\t\t);\n\t\t}\n\n\t\tif (binding?.kind === 'derived') {\n\t\t\treturn b.call(\n\t\t\t\tnode.prefix ? '$.update_derived_pre' : '$.update_derived',\n\t\t\t\tbinding.node,\n\t\t\t\tnode.operator === '--' && b.literal(-1)\n\t\t\t);\n\t\t}\n\t}\n\n\treturn context.next();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js",
    "content": "/** @import { VariableDeclaration, VariableDeclarator, Expression, CallExpression, Pattern, Identifier } from 'estree' */\n/** @import { Binding } from '#compiler' */\n/** @import { Context } from '../types.js' */\n/** @import { ComponentAnalysis } from '../../../types.js' */\n/** @import { Scope } from '../../../scope.js' */\nimport { build_fallback, extract_paths } from '../../../../utils/ast.js';\nimport * as b from '#compiler/builders';\nimport { get_rune } from '../../../scope.js';\nimport { walk } from 'zimmerframe';\n\n/**\n * @param {VariableDeclaration} node\n * @param {Context} context\n */\nexport function VariableDeclaration(node, context) {\n\t/** @type {VariableDeclarator[]} */\n\tconst declarations = [];\n\n\tif (context.state.analysis.runes) {\n\t\tfor (const declarator of node.declarations) {\n\t\t\tconst init = declarator.init;\n\t\t\tconst rune = get_rune(init, context.state.scope);\n\t\t\tif (!rune || rune === '$effect.tracking' || rune === '$inspect' || rune === '$effect.root') {\n\t\t\t\tdeclarations.push(/** @type {VariableDeclarator} */ (context.visit(declarator)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rune === '$props.id') {\n\t\t\t\t// skip\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rune === '$props') {\n\t\t\t\tlet has_rest = false;\n\t\t\t\t// remove $bindable() from props declaration\n\t\t\t\tlet id = walk(declarator.id, null, {\n\t\t\t\t\tRestElement(node, context) {\n\t\t\t\t\t\tif (context.path.at(-1) === declarator.id) {\n\t\t\t\t\t\t\thas_rest = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tAssignmentPattern(node) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnode.right.type === 'CallExpression' &&\n\t\t\t\t\t\t\tget_rune(node.right, context.state.scope) === '$bindable'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst right = node.right.arguments.length\n\t\t\t\t\t\t\t\t? /** @type {Expression} */ (context.visit(node.right.arguments[0]))\n\t\t\t\t\t\t\t\t: b.void0;\n\t\t\t\t\t\t\treturn b.assignment_pattern(node.left, right);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// if `$$slots` is declared separately, deconflict\n\t\t\t\tconst slots_name = /** @type {ComponentAnalysis} */ (context.state.analysis).uses_slots\n\t\t\t\t\t? b.id('$$slots_')\n\t\t\t\t\t: b.id('$$slots');\n\n\t\t\t\tif (id.type === 'ObjectPattern' && has_rest) {\n\t\t\t\t\t// If a rest pattern is used within an object pattern, we need to ensure we don't expose $$slots or $$events\n\t\t\t\t\tid.properties.splice(\n\t\t\t\t\t\tid.properties.length - 1,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tb.prop('init', b.id('$$slots'), slots_name),\n\t\t\t\t\t\tb.prop('init', b.id('$$events'), b.id('$$events'))\n\t\t\t\t\t);\n\t\t\t\t} else if (id.type === 'Identifier') {\n\t\t\t\t\t// If $props is referenced as an identifier, we need to ensure we don't expose $$slots or $$events as properties\n\t\t\t\t\t// on the identifier reference\n\t\t\t\t\tid = b.object_pattern([\n\t\t\t\t\t\tb.prop('init', b.id('$$slots'), slots_name),\n\t\t\t\t\t\tb.prop('init', b.id('$$events'), b.id('$$events')),\n\t\t\t\t\t\tb.rest(b.id(id.name))\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tdeclarations.push(\n\t\t\t\t\tb.declarator(/** @type {Pattern} */ (context.visit(id)), b.id('$$props'))\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst args = /** @type {CallExpression} */ (init).arguments;\n\t\t\tconst value = args.length > 0 ? /** @type {Expression} */ (context.visit(args[0])) : b.void0;\n\n\t\t\tif (rune === '$derived' || rune === '$derived.by') {\n\t\t\t\tconst is_async =\n\t\t\t\t\trune === '$derived' &&\n\t\t\t\t\tcontext.state.analysis.async_deriveds.has(\n\t\t\t\t\t\t/** @type {CallExpression} */ (declarator.init)\n\t\t\t\t\t);\n\n\t\t\t\tlet init = is_async\n\t\t\t\t\t? b.await(b.call('$.async_derived', b.thunk(value, true)))\n\t\t\t\t\t: b.call('$.derived', rune === '$derived' ? b.thunk(value) : value);\n\n\t\t\t\tif (declarator.id.type === 'Identifier') {\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\tb.declarator(/** @type {Pattern} */ (context.visit(declarator.id)), init)\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconst call = /** @type {CallExpression} */ (declarator.init);\n\n\t\t\t\t\tlet rhs = value;\n\n\t\t\t\t\tif (rune !== '$derived' || call.arguments[0].type !== 'Identifier') {\n\t\t\t\t\t\tconst id = b.id(context.state.scope.generate('$$d'));\n\n\t\t\t\t\t\trhs = b.call(id);\n\t\t\t\t\t\tdeclarations.push(b.declarator(id, init));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { inserts, paths } = extract_paths(declarator.id, rhs);\n\n\t\t\t\t\tfor (const { id, value } of inserts) {\n\t\t\t\t\t\tid.name = context.state.scope.generate('$$derived_array');\n\n\t\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(b.thunk(value)));\n\t\t\t\t\t\tconst call = b.call('$.derived', expression);\n\n\t\t\t\t\t\tdeclarations.push(b.declarator(id, call));\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const path of paths) {\n\t\t\t\t\t\tconst expression = /** @type {Expression} */ (context.visit(path.expression));\n\t\t\t\t\t\tconst call = b.call('$.derived', b.thunk(expression));\n\n\t\t\t\t\t\tdeclarations.push(b.declarator(path.node, call));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (declarator.id.type === 'Identifier') {\n\t\t\t\tdeclarations.push(b.declarator(declarator.id, value));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdeclarations.push(...create_state_declarators(declarator, context.state.scope, value));\n\t\t}\n\t} else {\n\t\tfor (const declarator of node.declarations) {\n\t\t\tconst bindings = /** @type {Binding[]} */ (context.state.scope.get_bindings(declarator));\n\t\t\tconst has_state = bindings.some((binding) => binding.kind === 'state');\n\t\t\tconst has_props = bindings.some((binding) => binding.kind === 'bindable_prop');\n\n\t\t\tif (!has_state && !has_props) {\n\t\t\t\tdeclarations.push(/** @type {VariableDeclarator} */ (context.visit(declarator)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (has_props) {\n\t\t\t\tif (declarator.id.type !== 'Identifier') {\n\t\t\t\t\t// Turn export let into props. It's really really weird because export let { x: foo, z: [bar]} = ..\n\t\t\t\t\t// means that foo and bar are the props (i.e. the leaves are the prop names), not x and z.\n\t\t\t\t\tconst tmp = b.id(context.state.scope.generate('tmp'));\n\t\t\t\t\tconst { inserts, paths } = extract_paths(declarator.id, tmp);\n\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\tb.declarator(\n\t\t\t\t\t\t\ttmp,\n\t\t\t\t\t\t\t/** @type {Expression} */ (context.visit(/** @type {Expression} */ (declarator.init)))\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const { id, value } of inserts) {\n\t\t\t\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t\t\t\t\tdeclarations.push(b.declarator(id, value));\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const path of paths) {\n\t\t\t\t\t\tconst value = path.expression;\n\t\t\t\t\t\tconst name = /** @type {Identifier} */ (path.node).name;\n\t\t\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(name));\n\t\t\t\t\t\tconst prop = b.member(b.id('$$props'), b.literal(binding.prop_alias ?? name), true);\n\t\t\t\t\t\tdeclarations.push(b.declarator(path.node, build_fallback(prop, value)));\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst binding = /** @type {Binding} */ (context.state.scope.get(declarator.id.name));\n\t\t\t\tconst prop = b.member(\n\t\t\t\t\tb.id('$$props'),\n\t\t\t\t\tb.literal(binding.prop_alias ?? declarator.id.name),\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\t/** @type {Expression} */\n\t\t\t\tlet init = prop;\n\t\t\t\tif (declarator.init) {\n\t\t\t\t\tconst default_value = /** @type {Expression} */ (context.visit(declarator.init));\n\t\t\t\t\tinit = build_fallback(prop, default_value);\n\t\t\t\t}\n\n\t\t\t\tdeclarations.push(b.declarator(declarator.id, init));\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdeclarations.push(\n\t\t\t\t...create_state_declarators(\n\t\t\t\t\tdeclarator,\n\t\t\t\t\tcontext.state.scope,\n\t\t\t\t\t/** @type {Expression} */ (declarator.init && context.visit(declarator.init))\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tif (declarations.length === 0) {\n\t\treturn b.empty;\n\t}\n\n\treturn {\n\t\t...node,\n\t\tdeclarations\n\t};\n}\n\n/**\n * @param {VariableDeclarator} declarator\n * @param {Scope} scope\n * @param {Expression} value\n * @returns {VariableDeclarator[]}\n */\nfunction create_state_declarators(declarator, scope, value) {\n\tif (declarator.id.type === 'Identifier') {\n\t\treturn [b.declarator(declarator.id, value)];\n\t}\n\n\tconst tmp = b.id(scope.generate('tmp'));\n\tconst { paths, inserts } = extract_paths(declarator.id, tmp);\n\treturn [\n\t\tb.declarator(tmp, value), // TODO inject declarator for opts, so we can use it below\n\t\t...inserts.map(({ id, value }) => {\n\t\t\tid.name = scope.generate('$$array');\n\t\t\treturn b.declarator(id, value);\n\t\t}),\n\t\t...paths.map((path) => {\n\t\t\tconst value = path.expression;\n\t\t\treturn b.declarator(path.node, value);\n\t\t})\n\t];\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/component.js",
    "content": "/** @import { BlockStatement, Expression, Pattern, Property, SequenceExpression, Statement } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext } from '../../types.js' */\nimport {\n\tempty_comment,\n\tbuild_attribute_value,\n\tPromiseOptimiser,\n\tblock_open_else,\n\tblock_open,\n\tblock_close\n} from './utils.js';\nimport * as b from '#compiler/builders';\nimport { is_element_node } from '../../../../nodes.js';\nimport { dev } from '../../../../../state.js';\n\n/**\n * @param {AST.Component | AST.SvelteComponent | AST.SvelteSelf} node\n * @param {Expression} expression\n * @param {ComponentContext} context\n */\nexport function build_inline_component(node, expression, context) {\n\t/** @type {Array<Property[] | Expression>} */\n\tconst props_and_spreads = [];\n\t/** @type {Array<() => void>} */\n\tconst delayed_props = [];\n\n\t/** @type {Property[]} */\n\tconst custom_css_props = [];\n\n\t/** @type {Record<string, AST.LetDirective[]>} */\n\tconst lets = { default: [] };\n\n\t/**\n\t * Children in the default slot are evaluated in the component scope,\n\t * children in named slots are evaluated in the parent scope\n\t */\n\tconst child_state = {\n\t\t...context.state,\n\t\tscope: node.metadata.scopes.default\n\t};\n\n\t/** @type {Record<string, AST.TemplateNode[]>} */\n\tconst children = {};\n\n\t/**\n\t * If this component has a slot property, it is a named slot within another component. In this case\n\t * the slot scope applies to the component itself, too, and not just its children.\n\t */\n\tconst slot_scope_applies_to_itself = node.attributes.some(\n\t\t(node) => node.type === 'Attribute' && node.name === 'slot'\n\t);\n\n\t/**\n\t * Components may have a children prop and also have child nodes. In this case, we assume\n\t * that the child component isn't using render tags yet and pass the slot as $$slots.default.\n\t * We're not doing it for spread attributes, as this would result in too many false positives.\n\t */\n\tlet has_children_prop = false;\n\n\t/**\n\t * @param {Property} prop\n\t * @param {boolean} [delay]\n\t */\n\tfunction push_prop(prop, delay = false) {\n\t\tconst do_push = () => {\n\t\t\tconst current = props_and_spreads.at(-1);\n\t\t\tconst current_is_props = Array.isArray(current);\n\t\t\tconst props = current_is_props ? current : [];\n\t\t\tprops.push(prop);\n\t\t\tif (!current_is_props) {\n\t\t\t\tprops_and_spreads.push(props);\n\t\t\t}\n\t\t};\n\n\t\tif (delay) {\n\t\t\tdelayed_props.push(do_push);\n\t\t} else {\n\t\t\tdo_push();\n\t\t}\n\t}\n\n\tconst optimiser = new PromiseOptimiser();\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'LetDirective') {\n\t\t\tif (!slot_scope_applies_to_itself) {\n\t\t\t\tlets.default.push(attribute);\n\t\t\t}\n\t\t} else if (attribute.type === 'SpreadAttribute') {\n\t\t\tlet expression = /** @type {Expression} */ (context.visit(attribute));\n\t\t\tprops_and_spreads.push(optimiser.transform(expression, attribute.metadata.expression));\n\t\t} else if (attribute.type === 'Attribute') {\n\t\t\tconst value = build_attribute_value(\n\t\t\t\tattribute.value,\n\t\t\t\tcontext,\n\t\t\t\toptimiser.transform,\n\t\t\t\tfalse,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (attribute.name.startsWith('--')) {\n\t\t\t\tcustom_css_props.push(b.init(attribute.name, value));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attribute.name === 'children') {\n\t\t\t\thas_children_prop = true;\n\t\t\t}\n\n\t\t\tpush_prop(b.prop('init', b.key(attribute.name), value));\n\t\t} else if (attribute.type === 'BindDirective') {\n\t\t\t// Bindings are a bit special: we don't want to add them to (async) deriveds but we need to check if they have blockers\n\t\t\toptimiser.check_blockers(attribute.metadata.expression);\n\n\t\t\tif (attribute.name === 'this') {\n\t\t\t\t// bind:this is client-only, but we still need to check for blockers to ensure\n\t\t\t\t// the server generates matching hydration markers if the client wraps in $.async\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attribute.expression.type === 'SequenceExpression') {\n\t\t\t\tconst [get, set] = /** @type {SequenceExpression} */ (context.visit(attribute.expression))\n\t\t\t\t\t.expressions;\n\t\t\t\tconst get_id = b.id(context.state.scope.generate('bind_get'));\n\t\t\t\tconst set_id = b.id(context.state.scope.generate('bind_set'));\n\n\t\t\t\tcontext.state.init.push(b.var(get_id, get));\n\t\t\t\tcontext.state.init.push(b.var(set_id, set));\n\n\t\t\t\tpush_prop(b.get(attribute.name, [b.return(b.call(get_id))]));\n\t\t\t\tpush_prop(b.set(attribute.name, [b.stmt(b.call(set_id, b.id('$$value')))]));\n\t\t\t} else {\n\t\t\t\t// Delay prop pushes so bindings come at the end, to avoid spreads overwriting them\n\t\t\t\tpush_prop(\n\t\t\t\t\tb.get(attribute.name, [\n\t\t\t\t\t\tb.return(/** @type {Expression} */ (context.visit(attribute.expression)))\n\t\t\t\t\t]),\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\tpush_prop(\n\t\t\t\t\tb.set(attribute.name, [\n\t\t\t\t\t\tb.stmt(\n\t\t\t\t\t\t\t/** @type {Expression} */ (\n\t\t\t\t\t\t\t\tcontext.visit(b.assignment('=', attribute.expression, b.id('$$value')))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tb.stmt(b.assignment('=', b.id('$$settled'), b.false))\n\t\t\t\t\t]),\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (attribute.type === 'AttachTag') {\n\t\t\t// While we don't run attachments on the server, on the client they might generate a surrounding blocker function which generates\n\t\t\t// extra comments, and to prevent hydration mismatches we therefore have to account for them here to generate similar comments on the server.\n\t\t\toptimiser.check_blockers(attribute.metadata.expression);\n\t\t}\n\t}\n\n\tdelayed_props.forEach((fn) => fn());\n\n\t/** @type {Statement[]} */\n\tconst snippet_declarations = [];\n\n\t/** @type {Property[]} */\n\tconst serialized_slots = [];\n\n\t// Group children by slot\n\tfor (const child of node.fragment.nodes) {\n\t\tif (child.type === 'SnippetBlock') {\n\t\t\t// the SnippetBlock visitor adds a declaration to `init`, but if it's directly\n\t\t\t// inside a component then we want to hoist them into a block so that they\n\t\t\t// can be used as props without creating conflicts\n\t\t\tcontext.visit(child, {\n\t\t\t\t...context.state,\n\t\t\t\tinit: snippet_declarations\n\t\t\t});\n\n\t\t\tpush_prop(b.prop('init', child.expression, child.expression));\n\n\t\t\t// Interop: allows people to pass snippets when component still uses slots\n\t\t\tserialized_slots.push(\n\t\t\t\tb.init(child.expression.name === 'children' ? 'default' : child.expression.name, b.true)\n\t\t\t);\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet slot_name = 'default';\n\t\tif (is_element_node(child)) {\n\t\t\tconst slot = /** @type {AST.Attribute | undefined} */ (\n\t\t\t\tchild.attributes.find(\n\t\t\t\t\t(attribute) => attribute.type === 'Attribute' && attribute.name === 'slot'\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tif (slot !== undefined) {\n\t\t\t\tslot_name = /** @type {AST.Text[]} */ (slot.value)[0].data;\n\n\t\t\t\tlets[slot_name] = child.attributes.filter((attribute) => attribute.type === 'LetDirective');\n\t\t\t} else if (child.type === 'SvelteFragment') {\n\t\t\t\tlets.default.push(\n\t\t\t\t\t...child.attributes.filter((attribute) => attribute.type === 'LetDirective')\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tchildren[slot_name] = children[slot_name] || [];\n\t\tchildren[slot_name].push(child);\n\t}\n\n\t// Serialize each slot\n\tfor (const slot_name of Object.keys(children)) {\n\t\tconst block = /** @type {BlockStatement} */ (\n\t\t\tcontext.visit(\n\t\t\t\t{\n\t\t\t\t\t...node.fragment,\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tnodes: children[slot_name]\n\t\t\t\t},\n\t\t\t\tslot_name === 'default'\n\t\t\t\t\t? child_state\n\t\t\t\t\t: {\n\t\t\t\t\t\t\t...context.state,\n\t\t\t\t\t\t\tscope: node.metadata.scopes[slot_name]\n\t\t\t\t\t\t}\n\t\t\t)\n\t\t);\n\n\t\tif (block.body.length === 0) continue;\n\n\t\t/** @type {Pattern[]} */\n\t\tconst params = [b.id('$$renderer')];\n\n\t\tif (lets[slot_name].length > 0) {\n\t\t\tconst pattern = b.object_pattern(\n\t\t\t\tlets[slot_name].map((node) => {\n\t\t\t\t\tif (node.expression === null) {\n\t\t\t\t\t\treturn b.init(node.name, b.id(node.name));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.expression.type === 'ObjectExpression') {\n\t\t\t\t\t\t// @ts-expect-error it gets parsed as an `ObjectExpression` but is really an `ObjectPattern`\n\t\t\t\t\t\treturn b.init(node.name, b.object_pattern(node.expression.properties));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.expression.type === 'ArrayExpression') {\n\t\t\t\t\t\t// @ts-expect-error it gets parsed as an `ArrayExpression` but is really an `ArrayPattern`\n\t\t\t\t\t\treturn b.init(node.name, b.array_pattern(node.expression.elements));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.init(node.name, node.expression);\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tparams.push(pattern);\n\t\t}\n\n\t\tconst slot_fn = b.arrow(params, b.block(block.body));\n\n\t\tif (slot_name === 'default' && !has_children_prop) {\n\t\t\tif (\n\t\t\t\tlets.default.length === 0 &&\n\t\t\t\tchildren.default.every(\n\t\t\t\t\t(node) =>\n\t\t\t\t\t\tnode.type !== 'SvelteFragment' ||\n\t\t\t\t\t\t!node.attributes.some((attr) => attr.type === 'LetDirective')\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// create `children` prop...\n\t\t\t\tpush_prop(\n\t\t\t\t\tb.prop(\n\t\t\t\t\t\t'init',\n\t\t\t\t\t\tb.id('children'),\n\t\t\t\t\t\tdev ? b.call('$.prevent_snippet_stringification', slot_fn) : slot_fn\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t// and `$$slots.default: true` so that `<slot>` on the child works\n\t\t\t\tserialized_slots.push(b.init(slot_name, b.true));\n\t\t\t} else {\n\t\t\t\t// create `$$slots.default`...\n\t\t\t\tserialized_slots.push(b.init(slot_name, slot_fn));\n\n\t\t\t\t// and a `children` prop that errors\n\t\t\t\tpush_prop(b.init('children', b.id('$.invalid_default_snippet')));\n\t\t\t}\n\t\t} else {\n\t\t\tserialized_slots.push(b.init(slot_name, slot_fn));\n\t\t}\n\t}\n\n\tif (serialized_slots.length > 0) {\n\t\tpush_prop(b.prop('init', b.id('$$slots'), b.object(serialized_slots)));\n\t}\n\n\tconst props_expression =\n\t\tprops_and_spreads.length === 0 ||\n\t\t(props_and_spreads.length === 1 && Array.isArray(props_and_spreads[0]))\n\t\t\t? b.object(/** @type {Property[]} */ (props_and_spreads[0] || []))\n\t\t\t: b.call(\n\t\t\t\t\t'$.spread_props',\n\t\t\t\t\tb.array(props_and_spreads.map((p) => (Array.isArray(p) ? b.object(p) : p)))\n\t\t\t\t);\n\n\tconst dynamic =\n\t\tnode.type === 'SvelteComponent' || (node.type === 'Component' && node.metadata.dynamic);\n\n\t/** @type {Statement} */\n\tlet statement = b.stmt(b.call(expression, b.id('$$renderer'), props_expression));\n\n\tif (dynamic) {\n\t\tstatement = b.if(\n\t\t\texpression,\n\t\t\tb.block([\n\t\t\t\tb.stmt(b.call('$$renderer.push', block_open)),\n\t\t\t\tstatement,\n\t\t\t\tb.stmt(b.call('$$renderer.push', block_close))\n\t\t\t]),\n\t\t\tb.block([\n\t\t\t\tb.stmt(b.call('$$renderer.push', block_open_else)),\n\t\t\t\tb.stmt(b.call('$$renderer.push', block_close))\n\t\t\t])\n\t\t);\n\t}\n\n\tif (snippet_declarations.length > 0) {\n\t\tstatement = b.block([...snippet_declarations, statement]);\n\t}\n\n\tif (custom_css_props.length > 0) {\n\t\tstatement = b.stmt(\n\t\t\tb.call(\n\t\t\t\t'$.css_props',\n\t\t\t\tb.id('$$renderer'),\n\t\t\t\tb.literal(context.state.namespace === 'svg' ? false : true),\n\t\t\t\tb.object(custom_css_props),\n\t\t\t\tb.thunk(b.block([statement])),\n\t\t\t\tdynamic && b.true\n\t\t\t)\n\t\t);\n\t}\n\n\tif (node.type !== 'SvelteSelf') {\n\t\t// Component name itself could be blocked on async values\n\t\toptimiser.check_blockers(node.metadata.expression);\n\t}\n\n\tcontext.state.template.push(...optimiser.render_block([statement]));\n\n\tif (\n\t\t!dynamic &&\n\t\t!optimiser.is_async() &&\n\t\t!context.state.is_standalone &&\n\t\tcustom_css_props.length === 0\n\t) {\n\t\tcontext.state.template.push(empty_comment);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/element.js",
    "content": "/** @import { ArrayExpression, Expression, Literal, ObjectExpression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext, ComponentServerTransformState } from '../../types.js' */\nimport { is_event_attribute, is_text_attribute } from '../../../../../utils/ast.js';\nimport { binding_properties } from '../../../../bindings.js';\nimport { create_attribute, ExpressionMetadata, is_custom_element_node } from '../../../../nodes.js';\nimport { regex_starts_with_newline } from '../../../../patterns.js';\nimport * as b from '#compiler/builders';\nimport {\n\tELEMENT_IS_INPUT,\n\tELEMENT_IS_NAMESPACED,\n\tELEMENT_PRESERVE_ATTRIBUTE_CASE\n} from '../../../../../../constants.js';\nimport { build_attribute_value } from './utils.js';\nimport {\n\tis_boolean_attribute,\n\tis_content_editable_binding,\n\tis_load_error_element\n} from '../../../../../../utils.js';\nimport { escape_html } from '../../../../../../escaping.js';\n\nconst WHITESPACE_INSENSITIVE_ATTRIBUTES = ['class', 'style'];\n\n/**\n * Writes the output to the template output. Some elements may have attributes on them that require the\n * their output to be the child content instead. In this case, an object is returned.\n * @param {AST.RegularElement | AST.SvelteElement} node\n * @param {import('zimmerframe').Context<AST.SvelteNode, ComponentServerTransformState>} context\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n */\nexport function build_element_attributes(node, context, transform) {\n\t/** @type {Array<AST.Attribute | AST.SpreadAttribute>} */\n\tconst attributes = [];\n\n\t/** @type {AST.ClassDirective[]} */\n\tconst class_directives = [];\n\n\t/** @type {AST.StyleDirective[]} */\n\tconst style_directives = [];\n\n\t/** @type {Expression | null} */\n\tlet content = null;\n\n\tlet has_spread = false;\n\tlet events_to_capture = new Set();\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type === 'Attribute') {\n\t\t\tif (attribute.name === 'value') {\n\t\t\t\tif (node.name === 'textarea') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tattribute.value !== true &&\n\t\t\t\t\t\tArray.isArray(attribute.value) &&\n\t\t\t\t\t\tattribute.value[0].type === 'Text' &&\n\t\t\t\t\t\tregex_starts_with_newline.test(attribute.value[0].data)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Two or more leading newlines are required to restore the leading newline immediately after `<textarea>`.\n\t\t\t\t\t\t// see https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions\n\t\t\t\t\t\t// also see related code in analysis phase\n\t\t\t\t\t\tattribute.value[0].data = '\\n' + attribute.value[0].data;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent = b.call('$.escape', build_attribute_value(attribute.value, context, transform));\n\t\t\t\t} else if (node.name !== 'select') {\n\t\t\t\t\t// omit value attribute for select elements, it's irrelevant for the initially selected value and has no\n\t\t\t\t\t// effect on the selected value after the user interacts with the select element (the value _property_ does, but not the attribute)\n\t\t\t\t\tattributes.push(attribute);\n\t\t\t\t}\n\n\t\t\t\t// omit event handlers except for special cases\n\t\t\t} else if (is_event_attribute(attribute)) {\n\t\t\t\tif (\n\t\t\t\t\t(attribute.name === 'onload' || attribute.name === 'onerror') &&\n\t\t\t\t\tis_load_error_element(node.name)\n\t\t\t\t) {\n\t\t\t\t\tevents_to_capture.add(attribute.name);\n\t\t\t\t}\n\t\t\t\t// the defaultValue/defaultChecked properties don't exist as attributes\n\t\t\t} else if (attribute.name !== 'defaultValue' && attribute.name !== 'defaultChecked') {\n\t\t\t\tif (attribute.name === 'class') {\n\t\t\t\t\tif (attribute.metadata.needs_clsx) {\n\t\t\t\t\t\tattributes.push({\n\t\t\t\t\t\t\t...attribute,\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t.../** @type {AST.ExpressionTag} */ (attribute.value),\n\t\t\t\t\t\t\t\texpression: b.call(\n\t\t\t\t\t\t\t\t\t'$.clsx',\n\t\t\t\t\t\t\t\t\t/** @type {AST.ExpressionTag} */ (attribute.value).expression\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattributes.push(attribute);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tattributes.push(attribute);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (attribute.type === 'BindDirective') {\n\t\t\tif (attribute.name === 'value' && node.name === 'select') continue;\n\t\t\tif (\n\t\t\t\tattribute.name === 'value' &&\n\t\t\t\tattributes.some(\n\t\t\t\t\t(attr) =>\n\t\t\t\t\t\tattr.type === 'Attribute' &&\n\t\t\t\t\t\tattr.name === 'type' &&\n\t\t\t\t\t\tis_text_attribute(attr) &&\n\t\t\t\t\t\tattr.value[0].data === 'file'\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (attribute.name === 'this') continue;\n\n\t\t\tconst binding = binding_properties[attribute.name];\n\t\t\tif (binding?.omit_in_ssr) continue;\n\n\t\t\tlet expression = /** @type {Expression} */ (context.visit(attribute.expression));\n\n\t\t\tif (expression.type === 'SequenceExpression') {\n\t\t\t\texpression = b.call(expression.expressions[0]);\n\t\t\t}\n\n\t\t\texpression = transform(expression, attribute.metadata.expression);\n\n\t\t\tif (attribute.name === 'innerHTML') {\n\t\t\t\t// innerHTML is the only binding we don't escape\n\t\t\t\tcontent = expression;\n\t\t\t} else if (\n\t\t\t\tis_content_editable_binding(attribute.name) ||\n\t\t\t\t(attribute.name === 'value' && node.name === 'textarea')\n\t\t\t) {\n\t\t\t\tcontent = b.call('$.escape', expression);\n\t\t\t} else if (attribute.name === 'group' && attribute.expression.type !== 'SequenceExpression') {\n\t\t\t\tconst value_attribute = /** @type {AST.Attribute | undefined} */ (\n\t\t\t\t\tnode.attributes.find((attr) => attr.type === 'Attribute' && attr.name === 'value')\n\t\t\t\t);\n\t\t\t\tif (!value_attribute) continue;\n\n\t\t\t\tconst is_checkbox = node.attributes.some(\n\t\t\t\t\t(attr) =>\n\t\t\t\t\t\tattr.type === 'Attribute' &&\n\t\t\t\t\t\tattr.name === 'type' &&\n\t\t\t\t\t\tis_text_attribute(attr) &&\n\t\t\t\t\t\tattr.value[0].data === 'checkbox'\n\t\t\t\t);\n\n\t\t\t\tattributes.push(\n\t\t\t\t\tcreate_attribute('checked', null, -1, -1, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'ExpressionTag',\n\t\t\t\t\t\t\tstart: -1,\n\t\t\t\t\t\t\tend: -1,\n\t\t\t\t\t\t\texpression: is_checkbox\n\t\t\t\t\t\t\t\t? b.call(\n\t\t\t\t\t\t\t\t\t\tb.member(attribute.expression, 'includes'),\n\t\t\t\t\t\t\t\t\t\tbuild_attribute_value(value_attribute.value, context, transform)\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: b.binary(\n\t\t\t\t\t\t\t\t\t\t'===',\n\t\t\t\t\t\t\t\t\t\tattribute.expression,\n\t\t\t\t\t\t\t\t\t\tbuild_attribute_value(value_attribute.value, context, transform)\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tattributes.push(\n\t\t\t\t\tcreate_attribute(attribute.name, null, -1, -1, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'ExpressionTag',\n\t\t\t\t\t\t\tstart: -1,\n\t\t\t\t\t\t\tend: -1,\n\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\texpression: new ExpressionMetadata()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t])\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (attribute.type === 'SpreadAttribute') {\n\t\t\tattributes.push(attribute);\n\t\t\thas_spread = true;\n\t\t\tif (is_load_error_element(node.name)) {\n\t\t\t\tevents_to_capture.add('onload');\n\t\t\t\tevents_to_capture.add('onerror');\n\t\t\t}\n\t\t} else if (attribute.type === 'UseDirective') {\n\t\t\tif (is_load_error_element(node.name)) {\n\t\t\t\tevents_to_capture.add('onload');\n\t\t\t\tevents_to_capture.add('onerror');\n\t\t\t}\n\t\t} else if (attribute.type === 'ClassDirective') {\n\t\t\tclass_directives.push(attribute);\n\t\t} else if (attribute.type === 'StyleDirective') {\n\t\t\tstyle_directives.push(attribute);\n\t\t} else if (attribute.type === 'LetDirective') {\n\t\t\t// do nothing, these are handled inside `build_inline_component`\n\t\t} else {\n\t\t\tcontext.visit(attribute);\n\t\t}\n\t}\n\n\tif (has_spread) {\n\t\tbuild_element_spread_attributes(\n\t\t\tnode,\n\t\t\tattributes,\n\t\t\tstyle_directives,\n\t\t\tclass_directives,\n\t\t\tcontext,\n\t\t\ttransform\n\t\t);\n\t} else {\n\t\tconst css_hash = node.metadata.scoped ? context.state.analysis.css.hash : null;\n\n\t\tfor (const attribute of /** @type {AST.Attribute[]} */ (attributes)) {\n\t\t\tconst name = get_attribute_name(node, attribute);\n\t\t\tconst can_use_literal =\n\t\t\t\t(name !== 'class' || class_directives.length === 0) &&\n\t\t\t\t(name !== 'style' || style_directives.length === 0);\n\n\t\t\tif (can_use_literal && (attribute.value === true || is_text_attribute(attribute))) {\n\t\t\t\tlet literal_value = /** @type {Literal} */ (\n\t\t\t\t\tbuild_attribute_value(\n\t\t\t\t\t\tattribute.value,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\ttransform,\n\t\t\t\t\t\tWHITESPACE_INSENSITIVE_ATTRIBUTES.includes(name)\n\t\t\t\t\t)\n\t\t\t\t).value;\n\n\t\t\t\tif (name === 'class' && css_hash) {\n\t\t\t\t\tliteral_value = (String(literal_value) + ' ' + css_hash).trim();\n\t\t\t\t}\n\n\t\t\t\tif (name !== 'class' || literal_value) {\n\t\t\t\t\tcontext.state.template.push(\n\t\t\t\t\t\tb.literal(` ${name}=\"${literal_value === true ? '' : String(literal_value)}\"`)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst value = build_attribute_value(\n\t\t\t\tattribute.value,\n\t\t\t\tcontext,\n\t\t\t\ttransform,\n\t\t\t\tWHITESPACE_INSENSITIVE_ATTRIBUTES.includes(name)\n\t\t\t);\n\n\t\t\t// pre-escape and inline literal attributes :\n\t\t\tif (can_use_literal && value.type === 'Literal' && typeof value.value === 'string') {\n\t\t\t\tif (name === 'class' && css_hash) {\n\t\t\t\t\tvalue.value = (value.value + ' ' + css_hash).trim();\n\t\t\t\t}\n\t\t\t\tcontext.state.template.push(b.literal(` ${name}=\"${escape_html(value.value, true)}\"`));\n\t\t\t} else if (name === 'class') {\n\t\t\t\tcontext.state.template.push(\n\t\t\t\t\tbuild_attr_class(class_directives, value, context, css_hash, transform)\n\t\t\t\t);\n\t\t\t} else if (name === 'style') {\n\t\t\t\tcontext.state.template.push(build_attr_style(style_directives, value, context, transform));\n\t\t\t} else {\n\t\t\t\tcontext.state.template.push(\n\t\t\t\t\tb.call('$.attr', b.literal(name), value, is_boolean_attribute(name) && b.true)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (events_to_capture.size !== 0) {\n\t\tfor (const event of events_to_capture) {\n\t\t\tcontext.state.template.push(b.literal(` ${event}=\"this.__e=event\"`));\n\t\t}\n\t}\n\n\treturn content;\n}\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {AST.Attribute | AST.BindDirective} attribute\n */\nfunction get_attribute_name(element, attribute) {\n\tlet name = attribute.name;\n\tif (!element.metadata.svg && !element.metadata.mathml) {\n\t\tname = name.toLowerCase();\n\t\t// don't lookup boolean aliases here, the server runtime function does only\n\t\t// check for the lowercase variants of boolean attributes\n\t}\n\treturn name;\n}\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} attributes\n * @param {ComponentContext} context\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n */\nexport function build_spread_object(element, attributes, context, transform) {\n\tconst object = b.object(\n\t\tattributes.map((attribute) => {\n\t\t\tif (attribute.type === 'Attribute') {\n\t\t\t\tconst name = get_attribute_name(element, attribute);\n\t\t\t\tconst value = build_attribute_value(\n\t\t\t\t\tattribute.value,\n\t\t\t\t\tcontext,\n\t\t\t\t\ttransform,\n\t\t\t\t\tWHITESPACE_INSENSITIVE_ATTRIBUTES.includes(name)\n\t\t\t\t);\n\n\t\t\t\treturn b.prop('init', b.key(name), value);\n\t\t\t} else if (attribute.type === 'BindDirective') {\n\t\t\t\tconst name = get_attribute_name(element, attribute);\n\t\t\t\tconst value =\n\t\t\t\t\tattribute.expression.type === 'SequenceExpression'\n\t\t\t\t\t\t? b.call(attribute.expression.expressions[0])\n\t\t\t\t\t\t: /** @type {Expression} */ (context.visit(attribute.expression));\n\n\t\t\t\treturn b.prop('init', b.key(name), value);\n\t\t\t}\n\n\t\t\treturn b.spread(\n\t\t\t\ttransform(\n\t\t\t\t\t/** @type {Expression} */ (context.visit(attribute)),\n\t\t\t\t\tattribute.metadata.expression\n\t\t\t\t)\n\t\t\t);\n\t\t})\n\t);\n\n\treturn object;\n}\n\n/**\n *\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {Array<AST.Attribute | AST.SpreadAttribute>} attributes\n * @param {AST.StyleDirective[]} style_directives\n * @param {AST.ClassDirective[]} class_directives\n * @param {ComponentContext} context\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n */\nfunction build_element_spread_attributes(\n\telement,\n\tattributes,\n\tstyle_directives,\n\tclass_directives,\n\tcontext,\n\ttransform\n) {\n\tconst args = prepare_element_spread(\n\t\telement,\n\t\t/** @type {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} */ (attributes),\n\t\tstyle_directives,\n\t\tclass_directives,\n\t\tcontext,\n\t\ttransform\n\t);\n\n\tlet call = b.call('$.attributes', ...args);\n\n\tcontext.state.template.push(call);\n}\n\n/**\n * Prepare args for $.attributes(...): compute object, css_hash, classes, styles and flags.\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {ComponentContext} context\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n * @returns {[ObjectExpression,Literal | undefined, ObjectExpression | undefined, ObjectExpression | undefined, Literal | undefined]}\n */\nexport function prepare_element_spread_object(element, context, transform) {\n\t/** @type {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} */\n\tconst select_attributes = [];\n\t/** @type {AST.ClassDirective[]} */\n\tconst class_directives = [];\n\t/** @type {AST.StyleDirective[]} */\n\tconst style_directives = [];\n\n\tfor (const attribute of element.attributes) {\n\t\tif (\n\t\t\tattribute.type === 'Attribute' ||\n\t\t\tattribute.type === 'BindDirective' ||\n\t\t\tattribute.type === 'SpreadAttribute'\n\t\t) {\n\t\t\tselect_attributes.push(attribute);\n\t\t} else if (attribute.type === 'ClassDirective') {\n\t\t\tclass_directives.push(attribute);\n\t\t} else if (attribute.type === 'StyleDirective') {\n\t\t\tstyle_directives.push(attribute);\n\t\t}\n\t}\n\n\treturn prepare_element_spread(\n\t\telement,\n\t\tselect_attributes,\n\t\tstyle_directives,\n\t\tclass_directives,\n\t\tcontext,\n\t\ttransform\n\t);\n}\n\n/**\n * Prepare args for $.attributes(...): compute object, css_hash, classes, styles and flags.\n * @param {AST.RegularElement | AST.SvelteElement} element\n * @param {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} attributes\n * @param {AST.StyleDirective[]} style_directives\n * @param {AST.ClassDirective[]} class_directives\n * @param {ComponentContext} context\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n * @returns {[ObjectExpression,Literal | undefined, ObjectExpression | undefined, ObjectExpression | undefined, Literal | undefined]}\n */\nexport function prepare_element_spread(\n\telement,\n\tattributes,\n\tstyle_directives,\n\tclass_directives,\n\tcontext,\n\ttransform\n) {\n\t/** @type {ObjectExpression | undefined} */\n\tlet classes;\n\t/** @type {ObjectExpression | undefined} */\n\tlet styles;\n\tlet flags = 0;\n\n\tif (class_directives.length) {\n\t\tconst properties = class_directives.map((directive) =>\n\t\t\tb.init(\n\t\t\t\tdirective.name,\n\t\t\t\tdirective.expression.type === 'Identifier' && directive.expression.name === directive.name\n\t\t\t\t\t? b.id(directive.name)\n\t\t\t\t\t: transform(\n\t\t\t\t\t\t\t/** @type {Expression} */ (context.visit(directive.expression)),\n\t\t\t\t\t\t\tdirective.metadata.expression\n\t\t\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\tclasses = b.object(properties);\n\t}\n\n\tif (style_directives.length > 0) {\n\t\tconst properties = style_directives.map((directive) =>\n\t\t\tb.init(\n\t\t\t\tdirective.name,\n\t\t\t\tdirective.value === true\n\t\t\t\t\t? b.id(directive.name)\n\t\t\t\t\t: build_attribute_value(directive.value, context, transform, true)\n\t\t\t)\n\t\t);\n\t\tstyles = b.object(properties);\n\t}\n\n\tif (element.metadata.svg || element.metadata.mathml) {\n\t\tflags |= ELEMENT_IS_NAMESPACED | ELEMENT_PRESERVE_ATTRIBUTE_CASE;\n\t} else if (is_custom_element_node(element)) {\n\t\tflags |= ELEMENT_PRESERVE_ATTRIBUTE_CASE;\n\t} else if (element.type === 'RegularElement' && element.name === 'input') {\n\t\tflags |= ELEMENT_IS_INPUT;\n\t}\n\n\tconst object = build_spread_object(element, attributes, context, transform);\n\tconst css_hash =\n\t\telement.metadata.scoped && context.state.analysis.css.hash\n\t\t\t? b.literal(context.state.analysis.css.hash)\n\t\t\t: undefined;\n\n\treturn [object, css_hash, classes, styles, flags ? b.literal(flags) : undefined];\n}\n\n/**\n *\n * @param {AST.ClassDirective[]} class_directives\n * @param {Expression} expression\n * @param {ComponentContext} context\n * @param {string | null} hash\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n */\nfunction build_attr_class(class_directives, expression, context, hash, transform) {\n\t/** @type {ObjectExpression | undefined} */\n\tlet directives;\n\n\tif (class_directives.length) {\n\t\tdirectives = b.object(\n\t\t\tclass_directives.map((directive) =>\n\t\t\t\tb.prop(\n\t\t\t\t\t'init',\n\t\t\t\t\tb.literal(directive.name),\n\t\t\t\t\ttransform(\n\t\t\t\t\t\t/** @type {Expression} */ (context.visit(directive.expression, context.state)),\n\t\t\t\t\t\tdirective.metadata.expression\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tlet css_hash;\n\n\tif (hash) {\n\t\tif (expression.type === 'Literal' && typeof expression.value === 'string') {\n\t\t\texpression.value = (expression.value + ' ' + hash).trim();\n\t\t} else {\n\t\t\tcss_hash = b.literal(hash);\n\t\t}\n\t}\n\n\treturn b.call('$.attr_class', expression, css_hash, directives);\n}\n\n/**\n *\n * @param {AST.StyleDirective[]} style_directives\n * @param {Expression} expression\n * @param {ComponentContext} context,\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n */\nfunction build_attr_style(style_directives, expression, context, transform) {\n\t/** @type {ArrayExpression | ObjectExpression | undefined} */\n\tlet directives;\n\n\tif (style_directives.length) {\n\t\tlet normal_properties = [];\n\t\tlet important_properties = [];\n\n\t\tfor (const directive of style_directives) {\n\t\t\tconst expression =\n\t\t\t\tdirective.value === true\n\t\t\t\t\t? b.id(directive.name)\n\t\t\t\t\t: build_attribute_value(directive.value, context, transform, true);\n\n\t\t\tlet name = directive.name;\n\t\t\tif (name[0] !== '-' || name[1] !== '-') {\n\t\t\t\tname = name.toLowerCase();\n\t\t\t}\n\n\t\t\tconst property = b.init(name, expression);\n\t\t\tif (directive.modifiers.includes('important')) {\n\t\t\t\timportant_properties.push(property);\n\t\t\t} else {\n\t\t\t\tnormal_properties.push(property);\n\t\t\t}\n\t\t}\n\n\t\tif (important_properties.length) {\n\t\t\tdirectives = b.array([b.object(normal_properties), b.object(important_properties)]);\n\t\t} else {\n\t\t\tdirectives = b.object(normal_properties);\n\t\t}\n\t}\n\n\treturn b.call('$.attr_style', expression, directives);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js",
    "content": "/** @import { Expression, Identifier, Node, Statement, BlockStatement, ArrayExpression } from 'estree' */\n/** @import { AST } from '#compiler' */\n/** @import { ComponentContext, ServerTransformState } from '../../types.js' */\n\nimport { escape_html } from '../../../../../../escaping.js';\nimport {\n\tBLOCK_CLOSE,\n\tBLOCK_OPEN,\n\tBLOCK_OPEN_ELSE,\n\tEMPTY_COMMENT\n} from '../../../../../../internal/server/hydration.js';\nimport * as b from '#compiler/builders';\nimport { sanitize_template_string } from '../../../../../utils/sanitize_template_string.js';\nimport { regex_whitespaces_strict } from '../../../../patterns.js';\nimport { has_await_expression } from '../../../../../utils/ast.js';\nimport { ExpressionMetadata } from '../../../../nodes.js';\n\n/** Opens an if/each block, so that we can remove nodes in the case of a mismatch */\nexport const block_open = b.literal(BLOCK_OPEN);\n\n/** Opens an if/each block, so that we can remove nodes in the case of a mismatch */\nexport const block_open_else = b.literal(BLOCK_OPEN_ELSE);\n\n/** Closes an if/each block, so that we can remove nodes in the case of a mismatch. Also serves as an anchor for these blocks */\nexport const block_close = b.literal(BLOCK_CLOSE);\n\n/** Empty comment to keep text nodes separate, or provide an anchor node for blocks */\nexport const empty_comment = b.literal(EMPTY_COMMENT);\n\n/**\n * Processes an array of template nodes, joining sibling text/expression nodes and\n * recursing into child nodes.\n * @param {Array<AST.SvelteNode>} nodes\n * @param {ComponentContext} context\n */\nexport function process_children(nodes, { visit, state }) {\n\t/** @type {Array<AST.Text | AST.Comment | AST.ExpressionTag>} */\n\tlet sequence = [];\n\n\tfunction flush() {\n\t\tif (sequence.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet quasi = b.quasi('', false);\n\t\tconst quasis = [quasi];\n\n\t\t/** @type {Expression[]} */\n\t\tconst expressions = [];\n\n\t\tfor (let i = 0; i < sequence.length; i++) {\n\t\t\tconst node = sequence[i];\n\n\t\t\tif (node.type === 'Text' || node.type === 'Comment') {\n\t\t\t\tquasi.value.cooked +=\n\t\t\t\t\tnode.type === 'Comment' ? `<!--${node.data}-->` : escape_html(node.data);\n\t\t\t} else {\n\t\t\t\tconst evaluated = state.scope.evaluate(node.expression);\n\n\t\t\t\tif (evaluated.is_known) {\n\t\t\t\t\tquasi.value.cooked += escape_html((evaluated.value ?? '') + '');\n\t\t\t\t} else {\n\t\t\t\t\texpressions.push(b.call('$.escape', /** @type {Expression} */ (visit(node.expression))));\n\n\t\t\t\t\tquasi = b.quasi('', i + 1 === sequence.length);\n\t\t\t\t\tquasis.push(quasi);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const quasi of quasis) {\n\t\t\tquasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n\t\t}\n\n\t\tstate.template.push(b.template(quasis, expressions));\n\t\tsequence = [];\n\t}\n\n\tfor (const node of nodes) {\n\t\tif (node.type === 'ExpressionTag' && node.metadata.expression.is_async()) {\n\t\t\tflush();\n\n\t\t\tconst expression = /** @type {Expression} */ (visit(node.expression));\n\n\t\t\tlet call = b.call(\n\t\t\t\t'$$renderer.push',\n\t\t\t\tb.thunk(b.call('$.escape', expression), node.metadata.expression.has_await)\n\t\t\t);\n\n\t\t\tconst blockers = node.metadata.expression.blockers();\n\n\t\t\tif (blockers.elements.length > 0) {\n\t\t\t\tcall = b.call('$$renderer.async', blockers, b.arrow([b.id('$$renderer')], call));\n\t\t\t}\n\n\t\t\tstate.template.push(b.stmt(call));\n\t\t} else if (node.type === 'Text' || node.type === 'Comment' || node.type === 'ExpressionTag') {\n\t\t\tsequence.push(node);\n\t\t} else {\n\t\t\tflush();\n\t\t\tvisit(node, { ...state });\n\t\t}\n\t}\n\n\tflush();\n}\n\n/**\n * @param {Node} node\n * @returns {node is Statement}\n */\nfunction is_statement(node) {\n\treturn node.type.endsWith('Statement') || node.type.endsWith('Declaration');\n}\n\n/**\n * @param {Array<Statement | Expression>} template\n * @returns {Statement[]}\n */\nexport function build_template(template) {\n\t/** @type {string[]} */\n\tlet strings = [];\n\n\t/** @type {Expression[]} */\n\tlet expressions = [];\n\n\t/** @type {Statement[]} */\n\tconst statements = [];\n\n\tconst flush = () => {\n\t\tstatements.push(\n\t\t\tb.stmt(\n\t\t\t\tb.call(\n\t\t\t\t\tb.id('$$renderer.push'),\n\t\t\t\t\tb.template(\n\t\t\t\t\t\tstrings.map((cooked, i) => b.quasi(cooked, i === strings.length - 1)),\n\t\t\t\t\t\texpressions\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\tstrings = [];\n\t\texpressions = [];\n\t};\n\n\tfor (let i = 0; i < template.length; i++) {\n\t\tconst node = template[i];\n\n\t\tif (is_statement(node)) {\n\t\t\tif (strings.length !== 0) {\n\t\t\t\tflush();\n\t\t\t}\n\n\t\t\tstatements.push(node);\n\t\t} else {\n\t\t\tif (strings.length === 0) {\n\t\t\t\tstrings.push('');\n\t\t\t}\n\n\t\t\tif (node.type === 'Literal') {\n\t\t\t\tstrings[strings.length - 1] += node.value;\n\t\t\t} else if (node.type === 'TemplateLiteral') {\n\t\t\t\tstrings[strings.length - 1] += node.quasis[0].value.cooked;\n\t\t\t\tstrings.push(...node.quasis.slice(1).map((q) => /** @type {string} */ (q.value.cooked)));\n\t\t\t\texpressions.push(...node.expressions);\n\t\t\t} else {\n\t\t\t\texpressions.push(node);\n\t\t\t\tstrings.push('');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (strings.length !== 0) {\n\t\tflush();\n\t}\n\n\treturn statements;\n}\n\n/**\n *\n * @param {AST.Attribute['value']} value\n * @param {ComponentContext} context\n * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform\n * @param {boolean} trim_whitespace\n * @param {boolean} is_component\n * @returns {Expression}\n */\nexport function build_attribute_value(\n\tvalue,\n\tcontext,\n\ttransform,\n\ttrim_whitespace = false,\n\tis_component = false\n) {\n\tif (value === true) {\n\t\treturn b.true;\n\t}\n\n\tif (!Array.isArray(value) || value.length === 1) {\n\t\tconst chunk = Array.isArray(value) ? value[0] : value;\n\n\t\tif (chunk.type === 'Text') {\n\t\t\tconst data = trim_whitespace\n\t\t\t\t? chunk.data.replace(regex_whitespaces_strict, ' ').trim()\n\t\t\t\t: chunk.data;\n\n\t\t\treturn b.literal(is_component ? data : escape_html(data, true));\n\t\t}\n\n\t\treturn transform(\n\t\t\t/** @type {Expression} */ (context.visit(chunk.expression)),\n\t\t\tchunk.metadata.expression\n\t\t);\n\t}\n\n\tlet quasi = b.quasi('', false);\n\tconst quasis = [quasi];\n\n\t/** @type {Expression[]} */\n\tconst expressions = [];\n\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst node = value[i];\n\n\t\tif (node.type === 'Text') {\n\t\t\tquasi.value.cooked += trim_whitespace\n\t\t\t\t? node.data.replace(regex_whitespaces_strict, ' ')\n\t\t\t\t: node.data;\n\t\t} else {\n\t\t\texpressions.push(\n\t\t\t\tb.call(\n\t\t\t\t\t'$.stringify',\n\t\t\t\t\ttransform(\n\t\t\t\t\t\t/** @type {Expression} */ (context.visit(node.expression)),\n\t\t\t\t\t\tnode.metadata.expression\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tquasi = b.quasi('', i + 1 === value.length);\n\t\t\tquasis.push(quasi);\n\t\t}\n\t}\n\n\tfor (const quasi of quasis) {\n\t\tquasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));\n\t}\n\n\treturn b.template(quasis, expressions);\n}\n\n/**\n * @param {Identifier} node\n * @param {ServerTransformState} state\n * @returns {Expression}\n */\nexport function build_getter(node, state) {\n\tconst binding = state.scope.get(node.name);\n\n\tif (binding === null || node === binding.node) {\n\t\t// No associated binding or the declaration itself which shouldn't be transformed\n\t\treturn node;\n\t}\n\n\tif (binding.kind === 'store_sub') {\n\t\tconst store_id = b.id(node.name.slice(1));\n\t\treturn b.call(\n\t\t\t'$.store_get',\n\t\t\tb.assignment('??=', b.id('$$store_subs'), b.object([])),\n\t\t\tb.literal(node.name),\n\t\t\tbuild_getter(store_id, state)\n\t\t);\n\t}\n\n\tif (binding.kind === 'derived') {\n\t\treturn (binding.declaration_kind === 'var' ? b.maybe_call : b.call)(binding.node);\n\t}\n\n\treturn node;\n}\n\n/**\n * @param {Statement[]} statements\n * @param {ArrayExpression} blockers\n * @param {boolean} has_await\n */\nexport function create_child_block(statements, blockers, has_await) {\n\tif (blockers.elements.length === 0 && !has_await) {\n\t\treturn statements;\n\t}\n\n\tconst fn = b.arrow([b.id('$$renderer')], b.block(statements), has_await);\n\n\treturn blockers.elements.length > 0\n\t\t? [b.stmt(b.call('$$renderer.async_block', blockers, fn))]\n\t\t: [b.stmt(b.call('$$renderer.child_block', fn))];\n}\n\n/**\n * A utility for optimising promises in templates. Without it code like\n * `<Component foo={await fetch()} bar={await other()} />` would be transformed\n * into two blocking promises, with it it's using `Promise.all` to await them.\n * It also keeps track of blocking promises, i.e. those that need to be resolved before continuing.\n */\nexport class PromiseOptimiser {\n\t/** @type {Expression[]} */\n\texpressions = [];\n\n\thas_await = false;\n\n\t/** @type {Set<Expression>} */\n\t#blockers = new Set();\n\n\t/**\n\t * @param {Expression} expression\n\t * @param {ExpressionMetadata} metadata\n\t */\n\ttransform = (expression, metadata) => {\n\t\tthis.check_blockers(metadata);\n\n\t\tif (metadata.has_await) {\n\t\t\tthis.has_await = true;\n\n\t\t\tconst length = this.expressions.push(expression);\n\t\t\treturn b.id(`$$${length - 1}`);\n\t\t}\n\n\t\treturn expression;\n\t};\n\n\t/**\n\t * @param {ExpressionMetadata} metadata\n\t */\n\tcheck_blockers(metadata) {\n\t\tfor (const binding of metadata.dependencies) {\n\t\t\tif (binding.blocker) {\n\t\t\t\tthis.#blockers.add(binding.blocker);\n\t\t\t}\n\t\t}\n\t}\n\n\t#apply() {\n\t\tif (this.expressions.length === 0) {\n\t\t\treturn b.empty;\n\t\t}\n\n\t\tif (this.expressions.length === 1) {\n\t\t\treturn b.const('$$0', this.expressions[0]);\n\t\t}\n\n\t\tconst promises = b.array(\n\t\t\tthis.expressions.map((expression) => {\n\t\t\t\treturn expression.type === 'AwaitExpression' && !has_await_expression(expression.argument)\n\t\t\t\t\t? expression.argument\n\t\t\t\t\t: b.call(b.thunk(expression, true));\n\t\t\t})\n\t\t);\n\n\t\treturn b.const(\n\t\t\tb.array_pattern(this.expressions.map((_, i) => b.id(`$$${i}`))),\n\t\t\tb.await(b.call('Promise.all', promises))\n\t\t);\n\t}\n\n\tblockers() {\n\t\treturn b.array([...this.#blockers]);\n\t}\n\n\tis_async() {\n\t\treturn this.expressions.length > 0 || this.#blockers.size > 0;\n\t}\n\n\t/**\n\t * @param {Statement[]} statements\n\t * @returns {Statement[]}\n\t */\n\trender(statements) {\n\t\tif (!this.is_async()) {\n\t\t\treturn statements;\n\t\t}\n\n\t\tconst fn = b.arrow(\n\t\t\t[b.id('$$renderer')],\n\t\t\tb.block([this.#apply(), ...statements]),\n\t\t\tthis.has_await\n\t\t);\n\n\t\tconst blockers = this.blockers();\n\n\t\treturn blockers.elements.length > 0\n\t\t\t? [b.stmt(b.call('$$renderer.async', blockers, fn))]\n\t\t\t: [b.stmt(b.call('$$renderer.child', fn))];\n\t}\n\n\t/**\n\t * @param {Statement[]} statements\n\t * @returns {Statement[]}\n\t */\n\trender_block(statements) {\n\t\tif (!this.is_async()) {\n\t\t\treturn statements;\n\t\t}\n\n\t\treturn create_child_block([this.#apply(), ...statements], this.blockers(), this.has_await);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/shared/assignments.js",
    "content": "/** @import { AssignmentExpression, AssignmentOperator, Expression, Node, Pattern, Statement } from 'estree' */\n/** @import { Context as ClientContext } from '../client/types.js' */\n/** @import { Context as ServerContext } from '../server/types.js' */\nimport { extract_paths, is_expression_async } from '../../../utils/ast.js';\nimport * as b from '#compiler/builders';\n\n/**\n * @template {ClientContext | ServerContext} Context\n * @param {AssignmentExpression} node\n * @param {Context} context\n * @param {(operator: AssignmentOperator, left: Pattern, right: Expression, context: Context) => Expression | null} build_assignment\n * @returns\n */\nexport function visit_assignment_expression(node, context, build_assignment) {\n\tif (\n\t\tnode.left.type === 'ArrayPattern' ||\n\t\tnode.left.type === 'ObjectPattern' ||\n\t\tnode.left.type === 'RestElement'\n\t) {\n\t\tconst value = /** @type {Expression} */ (context.visit(node.right));\n\t\tconst should_cache = value.type !== 'Identifier';\n\t\tconst rhs = should_cache ? b.id('$$value') : value;\n\n\t\tlet changed = false;\n\n\t\tconst { inserts, paths } = extract_paths(node.left, rhs);\n\n\t\tfor (const { id } of inserts) {\n\t\t\tid.name = context.state.scope.generate('$$array');\n\t\t}\n\n\t\tconst assignments = paths.map((path) => {\n\t\t\tconst value = path.expression;\n\n\t\t\tlet assignment = build_assignment('=', path.node, value, context);\n\t\t\tif (assignment !== null) changed = true;\n\n\t\t\treturn (\n\t\t\t\tassignment ??\n\t\t\t\tb.assignment(\n\t\t\t\t\t'=',\n\t\t\t\t\t/** @type {Pattern} */ (context.visit(path.node)),\n\t\t\t\t\t/** @type {Expression} */ (context.visit(value))\n\t\t\t\t)\n\t\t\t);\n\t\t});\n\n\t\tif (!changed) {\n\t\t\t// No change to output -> nothing to transform -> we can keep the original assignment\n\t\t\treturn null;\n\t\t}\n\n\t\tconst is_standalone = /** @type {Node} */ (context.path.at(-1)).type.endsWith('Statement');\n\n\t\tif (inserts.length > 0 || should_cache) {\n\t\t\t/** @type {Statement[]} */\n\t\t\tconst statements = [\n\t\t\t\t...inserts.map(({ id, value }) => b.var(id, value)),\n\t\t\t\t...assignments.map(b.stmt)\n\t\t\t];\n\n\t\t\tif (!is_standalone) {\n\t\t\t\t// this is part of an expression, we need the sequence to end with the value\n\t\t\t\tstatements.push(b.return(rhs));\n\t\t\t}\n\n\t\t\tconst async =\n\t\t\t\tis_expression_async(value) ||\n\t\t\t\tassignments.some((assignment) => is_expression_async(assignment));\n\n\t\t\tconst iife = b.arrow([rhs], b.block(statements), async);\n\t\t\tconst call = b.call(iife, value);\n\n\t\t\treturn async ? b.await(call) : call;\n\t\t}\n\n\t\tconst sequence = b.sequence(assignments);\n\n\t\tif (!is_standalone) {\n\t\t\t// this is part of an expression, we need the sequence to end with the value\n\t\t\tsequence.expressions.push(rhs);\n\t\t}\n\n\t\treturn sequence;\n\t}\n\n\tif (node.left.type !== 'Identifier' && node.left.type !== 'MemberExpression') {\n\t\tthrow new Error(`Unexpected assignment type ${node.left.type}`);\n\t}\n\n\treturn build_assignment(node.operator, node.left, node.right, context);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/shared/transform-async.js",
    "content": "/** @import * as ESTree from 'estree' */\n/** @import { ComponentAnalysis } from '../../types' */\nimport * as b from '#compiler/builders';\n\n/**\n * Transforms the body of the instance script in such a way that await expressions are made non-blocking as much as possible.\n *\n * Example Transformation:\n * ```js\n * let x = 1;\n * let data = await fetch('/api');\n * let y = data.value;\n * ```\n * becomes:\n * ```js\n * let x = 1;\n * var data, y;\n * var $$promises = $.run([\n *   () => data = await fetch('/api'),\n *   () => y = data.value\n * ]);\n * ```\n * where `$$promises` is an array of promises that are resolved in the order they are declared,\n * and which expressions in the template can await on like `await $$promises[0]` which means they\n * wouldn't have to wait for e.g. `$$promises[1]` to resolve.\n *\n * @param {ComponentAnalysis['instance_body']} instance_body\n * @param {ESTree.Expression} runner\n * @param {(node: ESTree.Node) => ESTree.Node} transform\n * @returns {Array<ESTree.Statement | ESTree.VariableDeclaration>}\n */\nexport function transform_body(instance_body, runner, transform) {\n\t// Any sync statements before the first await expression\n\tconst statements = instance_body.sync.map(\n\t\t(node) => /** @type {ESTree.Statement | ESTree.VariableDeclaration} */ (transform(node))\n\t);\n\n\t// Declarations for the await expressions (they will assign to them; need to be hoisted to be available in whole instance scope)\n\tif (instance_body.declarations.length > 0) {\n\t\tstatements.push(\n\t\t\tb.declaration(\n\t\t\t\t'var',\n\t\t\t\tinstance_body.declarations.map((id) => b.declarator(id))\n\t\t\t)\n\t\t);\n\t}\n\n\t// Thunks for the await expressions\n\tif (instance_body.async.length > 0) {\n\t\tconst thunks = instance_body.async.map((entry) => {\n\t\t\t/** @type {ESTree.Statement[]} */\n\t\t\tconst entry_statements = [];\n\n\t\t\tfor (const node of entry.nodes) {\n\t\t\t\tentry_statements.push(...transform_async_node(node, transform));\n\t\t\t}\n\n\t\t\tif (entry_statements.length === 0) {\n\t\t\t\t// Keep indices stable for async sequencing while avoiding array holes in run([...]).\n\t\t\t\treturn b.thunk(b.void0, false);\n\t\t\t}\n\n\t\t\tif (entry_statements.length === 1 && entry_statements[0].type === 'ExpressionStatement') {\n\t\t\t\treturn b.thunk(entry_statements[0].expression, entry.has_await);\n\t\t\t}\n\n\t\t\treturn b.thunk(b.block(entry_statements), entry.has_await);\n\t\t});\n\n\t\t// TODO get the `$$promises` ID from scope\n\t\tstatements.push(b.var('$$promises', b.call(runner, b.array(thunks))));\n\t}\n\n\treturn statements;\n}\n\n/**\n * @param {ESTree.Statement | ESTree.VariableDeclarator} node\n * @param {(node: ESTree.Node) => ESTree.Node} transform\n * @returns {ESTree.Statement[]}\n */\nfunction transform_async_node(node, transform) {\n\tif (node.type === 'VariableDeclarator') {\n\t\tconst visited = /** @type {ESTree.VariableDeclaration | ESTree.EmptyStatement} */ (\n\t\t\ttransform(b.var(node.id, node.init))\n\t\t);\n\n\t\treturn visited.type === 'VariableDeclaration'\n\t\t\t? visited.declarations.map((node) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.id.type === 'Identifier' &&\n\t\t\t\t\t\t(node.id.name.startsWith('$$d') || node.id.name.startsWith('$$array'))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// This intermediate declaration is created in VariableDeclaration.js;\n\t\t\t\t\t\t// subsequent statements may depend on it.\n\t\t\t\t\t\treturn b.var(node.id, node.init);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn b.stmt(b.assignment('=', node.id, node.init ?? b.void0));\n\t\t\t\t})\n\t\t\t: [];\n\t}\n\n\tif (node.type === 'ClassDeclaration') {\n\t\treturn [\n\t\t\tb.stmt(\n\t\t\t\tb.assignment(\n\t\t\t\t\t'=',\n\t\t\t\t\tnode.id,\n\t\t\t\t\t/** @type {ESTree.ClassExpression} */ ({ ...node, type: 'ClassExpression' })\n\t\t\t\t)\n\t\t\t)\n\t\t];\n\t}\n\n\tif (node.type === 'ExpressionStatement') {\n\t\t// The expression may be a $inspect call, which will be transformed into an empty statement.\n\t\tconst expression = /** @type {ESTree.Expression | ESTree.EmptyStatement} */ (\n\t\t\ttransform(node.expression)\n\t\t);\n\n\t\tif (expression.type === 'EmptyStatement') {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (expression.type === 'AwaitExpression') {\n\t\t\treturn [b.stmt(expression)];\n\t\t}\n\n\t\treturn [b.stmt(b.unary('void', expression))];\n\t}\n\n\tconst statement = /** @type {ESTree.Statement | ESTree.EmptyStatement} */ (transform(node));\n\treturn statement.type === 'EmptyStatement' ? [] : [statement];\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/types.d.ts",
    "content": "import type { Scope } from '../scope.js';\nimport type { AST, StateField, ValidatedModuleCompileOptions } from '#compiler';\nimport type { Analysis } from '../types.js';\n\nexport interface TransformState {\n\treadonly analysis: Analysis;\n\treadonly options: ValidatedModuleCompileOptions;\n\treadonly scope: Scope;\n\treadonly scopes: Map<AST.SvelteNode, Scope>;\n\n\t/** `true` if we're transforming the contents of `<script>` */\n\treadonly is_instance: boolean;\n\n\treadonly state_fields: Map<string, StateField>;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/3-transform/utils.js",
    "content": "/** @import { TransformState } from './types.js' */\n/** @import { AST, Binding, Namespace, ValidatedCompileOptions } from '#compiler' */\n/** @import { Node, Expression, CallExpression, MemberExpression } from 'estree' */\nimport {\n\tregex_ends_with_whitespaces,\n\tregex_not_whitespace,\n\tregex_starts_with_whitespaces\n} from '../patterns.js';\nimport * as e from '../../errors.js';\nimport { walk } from 'zimmerframe';\nimport { extract_identifiers } from '../../utils/ast.js';\nimport check_graph_for_cycles from '../2-analyze/utils/check_graph_for_cycles.js';\nimport is_reference from 'is-reference';\nimport { set_scope } from '../scope.js';\n\n/**\n * Match Svelte 4 behaviour by sorting ConstTag nodes in topological order\n * @param {AST.SvelteNode[]} nodes\n * @param {TransformState} state\n */\nfunction sort_const_tags(nodes, state) {\n\t/**\n\t * @typedef {{\n\t *   node: AST.ConstTag;\n\t *   deps: Set<Binding>;\n\t * }} Tag\n\t */\n\n\tconst other = [];\n\n\t/** @type {Map<Binding, Tag>} */\n\tconst tags = new Map();\n\n\tfor (const node of nodes) {\n\t\tif (node.type === 'ConstTag') {\n\t\t\tconst declaration = node.declaration.declarations[0];\n\n\t\t\tconst bindings = extract_identifiers(declaration.id).map((id) => {\n\t\t\t\treturn /** @type {Binding} */ (state.scope.get(id.name));\n\t\t\t});\n\n\t\t\t/** @type {Set<Binding>} */\n\t\t\tconst deps = new Set();\n\n\t\t\twalk(declaration.init, state, {\n\t\t\t\t// @ts-expect-error don't know, don't care\n\t\t\t\t_: set_scope,\n\t\t\t\tIdentifier(node, context) {\n\t\t\t\t\tconst parent = /** @type {Expression} */ (context.path.at(-1));\n\n\t\t\t\t\tif (is_reference(node, parent)) {\n\t\t\t\t\t\tconst binding = context.state.scope.get(node.name);\n\t\t\t\t\t\tif (binding) deps.add(binding);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (const binding of bindings) {\n\t\t\t\ttags.set(binding, { node, deps });\n\t\t\t}\n\t\t} else {\n\t\t\tother.push(node);\n\t\t}\n\t}\n\n\tif (tags.size === 0) {\n\t\treturn nodes;\n\t}\n\n\t/** @type {Array<[Binding, Binding]>} */\n\tconst edges = [];\n\n\tfor (const [id, tag] of tags) {\n\t\tfor (const dep of tag.deps) {\n\t\t\tif (tags.has(dep)) {\n\t\t\t\tedges.push([id, dep]);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst cycle = check_graph_for_cycles(edges);\n\tif (cycle?.length) {\n\t\tconst tag = /** @type {Tag} */ (tags.get(cycle[0]));\n\t\te.const_tag_cycle(tag.node, cycle.map((binding) => binding.node.name).join(' → '));\n\t}\n\n\t/** @type {AST.ConstTag[]} */\n\tconst sorted = [];\n\n\t/** @param {Tag} tag */\n\tfunction add(tag) {\n\t\tif (sorted.includes(tag.node)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const dep of tag.deps) {\n\t\t\tconst dep_tag = tags.get(dep);\n\t\t\tif (dep_tag) add(dep_tag);\n\t\t}\n\n\t\tsorted.push(tag.node);\n\t}\n\n\tfor (const tag of tags.values()) {\n\t\tadd(tag);\n\t}\n\n\treturn [...sorted, ...other];\n}\n\n/**\n * Extract nodes that are hoisted and trim whitespace according to the following rules:\n * - trim leading and trailing whitespace, regardless of surroundings\n * - keep leading / trailing whitespace of inbetween text nodes,\n *   unless it's whitespace-only, in which case collapse to a single whitespace for all cases\n *   except when it's children of certain elements where we know ignore whitespace (like td/option/head),\n *   in which case we remove it entirely\n * @param {AST.SvelteNode} parent\n * @param {AST.SvelteNode[]} nodes\n * @param {AST.SvelteNode[]} path\n * @param {Namespace} namespace\n * @param {TransformState & { options: ValidatedCompileOptions }} state\n * @param {boolean} preserve_whitespace\n * @param {boolean} preserve_comments\n */\nexport function clean_nodes(\n\tparent,\n\tnodes,\n\tpath,\n\tnamespace = 'html',\n\tstate,\n\t// TODO give these defaults (state.options.preserveWhitespace and state.options.preserveComments).\n\t// first, we need to make `Component(Client|Server)TransformState` inherit from a new `ComponentTransformState`\n\t// rather than from `ClientTransformState` and `ServerTransformState`\n\tpreserve_whitespace,\n\tpreserve_comments\n) {\n\tif (!state.analysis.runes) {\n\t\tnodes = sort_const_tags(nodes, state);\n\t}\n\n\t/** @type {AST.SvelteNode[]} */\n\tconst hoisted = [];\n\n\t/** @type {AST.SvelteNode[]} */\n\tconst regular = [];\n\n\tfor (const node of nodes) {\n\t\tif (node.type === 'Comment' && !preserve_comments) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\tnode.type === 'ConstTag' ||\n\t\t\tnode.type === 'DebugTag' ||\n\t\t\tnode.type === 'SvelteBody' ||\n\t\t\tnode.type === 'SvelteWindow' ||\n\t\t\tnode.type === 'SvelteDocument' ||\n\t\t\tnode.type === 'SvelteHead' ||\n\t\t\tnode.type === 'TitleElement' ||\n\t\t\tnode.type === 'SnippetBlock'\n\t\t) {\n\t\t\t// TODO others?\n\t\t\thoisted.push(node);\n\t\t} else {\n\t\t\tregular.push(node);\n\t\t}\n\t}\n\n\tlet trimmed = regular;\n\n\tif (!preserve_whitespace) {\n\t\ttrimmed = [];\n\n\t\tlet first, last;\n\n\t\twhile (\n\t\t\t(first = regular[0]) &&\n\t\t\tfirst.type === 'Text' &&\n\t\t\t!regex_not_whitespace.test(first.data)\n\t\t) {\n\t\t\tregular.shift();\n\t\t}\n\n\t\tif (first?.type === 'Text') {\n\t\t\tfirst.raw = first.raw.replace(regex_starts_with_whitespaces, '');\n\t\t\tfirst.data = first.data.replace(regex_starts_with_whitespaces, '');\n\t\t}\n\n\t\twhile (\n\t\t\t(last = regular.at(-1)) &&\n\t\t\tlast.type === 'Text' &&\n\t\t\t!regex_not_whitespace.test(last.data)\n\t\t) {\n\t\t\tregular.pop();\n\t\t}\n\n\t\tif (last?.type === 'Text') {\n\t\t\tlast.raw = last.raw.replace(regex_ends_with_whitespaces, '');\n\t\t\tlast.data = last.data.replace(regex_ends_with_whitespaces, '');\n\t\t}\n\n\t\tconst can_remove_entirely =\n\t\t\t(namespace === 'svg' &&\n\t\t\t\t(parent.type !== 'RegularElement' || parent.name !== 'text') &&\n\t\t\t\t!path.some((n) => n.type === 'RegularElement' && n.name === 'text')) ||\n\t\t\t(parent.type === 'RegularElement' &&\n\t\t\t\t// TODO others?\n\t\t\t\t(parent.name === 'select' ||\n\t\t\t\t\tparent.name === 'tr' ||\n\t\t\t\t\tparent.name === 'table' ||\n\t\t\t\t\tparent.name === 'tbody' ||\n\t\t\t\t\tparent.name === 'thead' ||\n\t\t\t\t\tparent.name === 'tfoot' ||\n\t\t\t\t\tparent.name === 'colgroup' ||\n\t\t\t\t\tparent.name === 'datalist'));\n\n\t\t// Replace any whitespace between a text and non-text node with a single spaceand keep whitespace\n\t\t// as-is within text nodes, or between text nodes and expression tags (because in the end they count\n\t\t// as one text). This way whitespace is mostly preserved when using CSS with `white-space: pre-line`\n\t\t// and default slot content going into a pre tag (which we can't see).\n\t\tfor (let i = 0; i < regular.length; i++) {\n\t\t\tconst prev = regular[i - 1];\n\t\t\tconst node = regular[i];\n\t\t\tconst next = regular[i + 1];\n\n\t\t\tif (node.type === 'Text') {\n\t\t\t\tif (prev?.type !== 'ExpressionTag') {\n\t\t\t\t\tconst prev_is_text_ending_with_whitespace =\n\t\t\t\t\t\tprev?.type === 'Text' && regex_ends_with_whitespaces.test(prev.data);\n\t\t\t\t\tnode.data = node.data.replace(\n\t\t\t\t\t\tregex_starts_with_whitespaces,\n\t\t\t\t\t\tprev_is_text_ending_with_whitespace ? '' : ' '\n\t\t\t\t\t);\n\t\t\t\t\tnode.raw = node.raw.replace(\n\t\t\t\t\t\tregex_starts_with_whitespaces,\n\t\t\t\t\t\tprev_is_text_ending_with_whitespace ? '' : ' '\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (next?.type !== 'ExpressionTag') {\n\t\t\t\t\tnode.data = node.data.replace(regex_ends_with_whitespaces, ' ');\n\t\t\t\t\tnode.raw = node.raw.replace(regex_ends_with_whitespaces, ' ');\n\t\t\t\t}\n\t\t\t\tif (node.data && (node.data !== ' ' || !can_remove_entirely)) {\n\t\t\t\t\ttrimmed.push(node);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttrimmed.push(node);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar first = trimmed[0];\n\n\t// if first text node inside a <pre> is a single newline, discard it, because otherwise\n\t// the browser will do it for us which could break hydration\n\tif (parent.type === 'RegularElement' && parent.name === 'pre' && first?.type === 'Text') {\n\t\tif (first.data === '\\n' || first.data === '\\r\\n') {\n\t\t\ttrimmed.shift();\n\t\t\tfirst = trimmed[0];\n\t\t}\n\t}\n\n\t// Special case: Add a comment if this is a lone script tag. This ensures that our run_scripts logic in template.js\n\t// will always be able to call node.replaceWith() on the script tag in order to make it run. If we don't add this\n\t// and would still call node.replaceWith() on the script tag, it would be a no-op because the script tag has no parent.\n\tif (trimmed.length === 1 && first.type === 'RegularElement' && first.name === 'script') {\n\t\ttrimmed.push({\n\t\t\ttype: 'Comment',\n\t\t\tdata: '',\n\t\t\tstart: -1,\n\t\t\tend: -1\n\t\t});\n\t}\n\n\treturn {\n\t\thoisted,\n\t\ttrimmed,\n\t\t/**\n\t\t * In a case like `{#if x}<Foo />{/if}`, we don't need to wrap the child in\n\t\t * comments — we can just use the parent block's anchor for the component.\n\t\t * TODO extend this optimisation to other cases\n\t\t */\n\t\tis_standalone:\n\t\t\ttrimmed.length === 1 &&\n\t\t\t((first.type === 'RenderTag' && !first.metadata.dynamic) ||\n\t\t\t\t(first.type === 'Component' &&\n\t\t\t\t\t!state.options.hmr &&\n\t\t\t\t\t!first.metadata.dynamic &&\n\t\t\t\t\t!first.attributes.some(\n\t\t\t\t\t\t(attribute) => attribute.type === 'Attribute' && attribute.name.startsWith('--')\n\t\t\t\t\t))),\n\t\t/** if a component/snippet/each block starts with text, we need to add an anchor comment so that its text node doesn't get fused with its surroundings */\n\t\tis_text_first:\n\t\t\t(parent.type === 'Fragment' ||\n\t\t\t\tparent.type === 'SnippetBlock' ||\n\t\t\t\tparent.type === 'EachBlock' ||\n\t\t\t\tparent.type === 'SvelteComponent' ||\n\t\t\t\tparent.type === 'SvelteBoundary' ||\n\t\t\t\tparent.type === 'Component' ||\n\t\t\t\tparent.type === 'SvelteSelf') &&\n\t\t\tfirst &&\n\t\t\t(first?.type === 'Text' || first?.type === 'ExpressionTag')\n\t};\n}\n\n/**\n * Infers the namespace for the children of a node that should be used when creating the fragment\n * @param {Namespace} namespace\n * @param {AST.SvelteNode} parent\n * @param {AST.SvelteNode[]} nodes\n */\nexport function infer_namespace(namespace, parent, nodes) {\n\tif (parent.type === 'RegularElement' && parent.name === 'foreignObject') {\n\t\treturn 'html';\n\t}\n\n\tif (parent.type === 'RegularElement' || parent.type === 'SvelteElement') {\n\t\tif (parent.metadata.svg) {\n\t\t\treturn 'svg';\n\t\t}\n\t\treturn parent.metadata.mathml ? 'mathml' : 'html';\n\t}\n\n\t// Re-evaluate the namespace inside slot nodes that reset the namespace\n\tif (\n\t\tparent.type === 'Fragment' ||\n\t\tparent.type === 'Root' ||\n\t\tparent.type === 'Component' ||\n\t\tparent.type === 'SvelteComponent' ||\n\t\tparent.type === 'SvelteFragment' ||\n\t\tparent.type === 'SnippetBlock' ||\n\t\tparent.type === 'SlotElement'\n\t) {\n\t\tconst new_namespace = check_nodes_for_namespace(nodes, 'keep');\n\t\tif (new_namespace !== 'keep' && new_namespace !== 'maybe_html') {\n\t\t\treturn new_namespace;\n\t\t}\n\t}\n\n\t/** @type {Namespace | null} */\n\tlet new_namespace = null;\n\n\t// Check the elements within the fragment and look for consistent namespaces.\n\t// If we have no namespaces or they are mixed, then fallback to existing namespace\n\tfor (const node of nodes) {\n\t\tif (node.type !== 'RegularElement') continue;\n\n\t\tif (node.metadata.mathml) {\n\t\t\tnew_namespace = new_namespace === null || new_namespace === 'mathml' ? 'mathml' : 'html';\n\t\t} else if (node.metadata.svg) {\n\t\t\tnew_namespace = new_namespace === null || new_namespace === 'svg' ? 'svg' : 'html';\n\t\t} else {\n\t\t\treturn 'html';\n\t\t}\n\t}\n\n\treturn new_namespace ?? namespace;\n}\n\n/**\n * Heuristic: Keep current namespace, unless we find a regular element,\n * in which case we always want html, or we only find svg nodes,\n * in which case we assume svg.\n * @param {AST.SvelteNode[]} nodes\n * @param {Namespace | 'keep' | 'maybe_html'} namespace\n */\nfunction check_nodes_for_namespace(nodes, namespace) {\n\t/**\n\t * @param {AST.SvelteElement | AST.RegularElement} node}\n\t * @param {{stop: () => void}} context\n\t */\n\tconst RegularElement = (node, { stop }) => {\n\t\tif (!node.metadata.svg && !node.metadata.mathml) {\n\t\t\tnamespace = 'html';\n\t\t\tstop();\n\t\t} else if (namespace === 'keep') {\n\t\t\tnamespace = node.metadata.svg ? 'svg' : 'mathml';\n\t\t}\n\t};\n\n\tfor (const node of nodes) {\n\t\twalk(\n\t\t\tnode,\n\t\t\t{},\n\t\t\t{\n\t\t\t\t_(node, { next }) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.type === 'EachBlock' ||\n\t\t\t\t\t\tnode.type === 'IfBlock' ||\n\t\t\t\t\t\tnode.type === 'AwaitBlock' ||\n\t\t\t\t\t\tnode.type === 'Fragment' ||\n\t\t\t\t\t\tnode.type === 'KeyBlock' ||\n\t\t\t\t\t\tnode.type === 'RegularElement' ||\n\t\t\t\t\t\tnode.type === 'SvelteElement' ||\n\t\t\t\t\t\tnode.type === 'Text'\n\t\t\t\t\t) {\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tSvelteElement: RegularElement,\n\t\t\t\tRegularElement,\n\t\t\t\tText(node) {\n\t\t\t\t\tif (node.data.trim() !== '') {\n\t\t\t\t\t\tnamespace = 'maybe_html';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tif (namespace === 'html') return namespace;\n\t}\n\n\treturn namespace;\n}\n\n/**\n * Determines the namespace the children of this node are in.\n * @param {AST.RegularElement | AST.SvelteElement} node\n * @param {Namespace} namespace\n * @returns {Namespace}\n */\nexport function determine_namespace_for_children(node, namespace) {\n\tif (node.name === 'foreignObject') {\n\t\treturn 'html';\n\t}\n\n\tif (node.metadata.svg) {\n\t\treturn 'svg';\n\t}\n\n\treturn node.metadata.mathml ? 'mathml' : 'html';\n}\n\n/**\n * @param {'$inspect' | '$inspect().with'} rune\n * @param {CallExpression} node\n * @param {(node: AST.SvelteNode) => AST.SvelteNode} visit\n */\nexport function get_inspect_args(rune, node, visit) {\n\tconst call =\n\t\trune === '$inspect'\n\t\t\t? node\n\t\t\t: /** @type {CallExpression} */ (/** @type {MemberExpression} */ (node.callee).object);\n\n\treturn {\n\t\targs: call.arguments.map((arg) => /** @type {Expression} */ (visit(arg))),\n\t\tinspector:\n\t\t\trune === '$inspect' ? 'console.log' : /** @type {Expression} */ (visit(node.arguments[0]))\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/bindings.js",
    "content": "/**\n * @typedef BindingProperty\n * @property {string} [event] This is set if the binding corresponds to the property name on the dom element it's bound to\n * \t\t\t\t\t\t\t  and there's an event that notifies of a change to that property\n * @property {boolean} [bidirectional] Set this to `true` if updates are written to the dom property\n * @property {boolean} [omit_in_ssr] Set this to true if the binding should not be included in SSR\n * @property {string[]} [valid_elements] If this is set, the binding is only valid on the given elements\n * @property {string[]} [invalid_elements] If this is set, the binding is invalid on the given elements\n */\n\n/**\n * @type {Record<string, BindingProperty>}\n */\nexport const binding_properties = {\n\t// media\n\tcurrentTime: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tduration: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tevent: 'durationchange',\n\t\tomit_in_ssr: true\n\t},\n\tfocused: {},\n\tpaused: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tbuffered: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true\n\t},\n\tseekable: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true\n\t},\n\tplayed: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true\n\t},\n\tvolume: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tmuted: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tplaybackRate: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tseeking: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true\n\t},\n\tended: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true\n\t},\n\treadyState: {\n\t\tvalid_elements: ['audio', 'video'],\n\t\tomit_in_ssr: true\n\t},\n\t// video\n\tvideoHeight: {\n\t\tvalid_elements: ['video'],\n\t\tevent: 'resize',\n\t\tomit_in_ssr: true\n\t},\n\tvideoWidth: {\n\t\tvalid_elements: ['video'],\n\t\tevent: 'resize',\n\t\tomit_in_ssr: true\n\t},\n\t// img\n\tnaturalWidth: {\n\t\tvalid_elements: ['img'],\n\t\tevent: 'load',\n\t\tomit_in_ssr: true\n\t},\n\tnaturalHeight: {\n\t\tvalid_elements: ['img'],\n\t\tevent: 'load',\n\t\tomit_in_ssr: true\n\t},\n\t// document\n\tactiveElement: {\n\t\tvalid_elements: ['svelte:document'],\n\t\tomit_in_ssr: true\n\t},\n\tfullscreenElement: {\n\t\tvalid_elements: ['svelte:document'],\n\t\tevent: 'fullscreenchange',\n\t\tomit_in_ssr: true\n\t},\n\tpointerLockElement: {\n\t\tvalid_elements: ['svelte:document'],\n\t\tevent: 'pointerlockchange',\n\t\tomit_in_ssr: true\n\t},\n\tvisibilityState: {\n\t\tvalid_elements: ['svelte:document'],\n\t\tevent: 'visibilitychange',\n\t\tomit_in_ssr: true\n\t},\n\t// window\n\tinnerWidth: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true\n\t},\n\tinnerHeight: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true\n\t},\n\touterWidth: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true\n\t},\n\touterHeight: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true\n\t},\n\tscrollX: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tscrollY: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t},\n\tonline: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tomit_in_ssr: true\n\t},\n\tdevicePixelRatio: {\n\t\tvalid_elements: ['svelte:window'],\n\t\tevent: 'resize',\n\t\tomit_in_ssr: true\n\t},\n\t// dimensions\n\tclientWidth: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\tclientHeight: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\toffsetWidth: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\toffsetHeight: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\tcontentRect: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\tcontentBoxSize: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\tborderBoxSize: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\tdevicePixelContentBoxSize: {\n\t\tomit_in_ssr: true,\n\t\tinvalid_elements: ['svelte:window', 'svelte:document']\n\t},\n\t// checkbox/radio\n\tindeterminate: {\n\t\tevent: 'change',\n\t\tbidirectional: true,\n\t\tvalid_elements: ['input'],\n\t\tomit_in_ssr: true // no corresponding attribute\n\t},\n\tchecked: {\n\t\tvalid_elements: ['input'],\n\t\tbidirectional: true\n\t},\n\tgroup: {\n\t\tvalid_elements: ['input'],\n\t\tbidirectional: true\n\t},\n\t// various\n\tthis: {\n\t\tomit_in_ssr: true\n\t},\n\tinnerText: {\n\t\tinvalid_elements: ['svelte:window', 'svelte:document'],\n\t\tbidirectional: true\n\t},\n\tinnerHTML: {\n\t\tinvalid_elements: ['svelte:window', 'svelte:document'],\n\t\tbidirectional: true\n\t},\n\ttextContent: {\n\t\tinvalid_elements: ['svelte:window', 'svelte:document'],\n\t\tbidirectional: true\n\t},\n\topen: {\n\t\tevent: 'toggle',\n\t\tbidirectional: true,\n\t\tvalid_elements: ['details']\n\t},\n\tvalue: {\n\t\tvalid_elements: ['input', 'textarea', 'select'],\n\t\tbidirectional: true\n\t},\n\tfiles: {\n\t\tvalid_elements: ['input'],\n\t\tomit_in_ssr: true,\n\t\tbidirectional: true\n\t}\n};\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/css.js",
    "content": "/** @import { AST } from '#compiler' */\nconst regex_css_browser_prefix = /^-((webkit)|(moz)|(o)|(ms))-/;\nexport const regex_css_name_boundary = /^[\\s,;}]$/;\n\n/**\n * @param {string} name\n * @returns {string}\n */\nexport function remove_css_prefix(name) {\n\treturn name.replace(regex_css_browser_prefix, '');\n}\n\n/** @param {AST.CSS.Atrule} node */\nexport const is_keyframes_node = (node) => remove_css_prefix(node.name) === 'keyframes';\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/nodes.js",
    "content": "/** @import { Expression, PrivateIdentifier, SourceLocation } from 'estree' */\n/** @import { AST, Binding } from '#compiler' */\nimport * as b from '#compiler/builders';\n\n/**\n * All nodes that can appear elsewhere than the top level, have attributes and can contain children\n */\nconst element_nodes = [\n\t'SvelteElement',\n\t'RegularElement',\n\t'SvelteFragment',\n\t'Component',\n\t'SvelteComponent',\n\t'SvelteSelf',\n\t'SlotElement'\n];\n\n/**\n * Returns true for all nodes that can appear elsewhere than the top level, have attributes and can contain children\n * @param {AST.SvelteNode} node\n * @returns {node is AST.Component | AST.RegularElement | AST.SlotElement | AST.SvelteComponent | AST.SvelteElement | AST.SvelteFragment | AST.SvelteSelf}\n */\nexport function is_element_node(node) {\n\treturn element_nodes.includes(node.type);\n}\n\n/**\n * Returns true for all component-like nodes\n * @param {AST.SvelteNode} node\n * @returns {node is AST.Component |  AST.SvelteComponent | AST.SvelteSelf}\n */\nexport function is_component_node(node) {\n\treturn ['Component', 'SvelteComponent', 'SvelteSelf'].includes(node.type);\n}\n\n/**\n * @param {AST.RegularElement | AST.SvelteElement} node\n * @returns {boolean}\n */\nexport function is_custom_element_node(node) {\n\treturn (\n\t\tnode.type === 'RegularElement' &&\n\t\t(node.name.includes('-') ||\n\t\t\tnode.attributes.some((attr) => attr.type === 'Attribute' && attr.name === 'is'))\n\t);\n}\n\n/**\n * @param {string} name\n * @param {SourceLocation | null} name_loc\n * @param {number} start\n * @param {number} end\n * @param {AST.Attribute['value']} value\n * @returns {AST.Attribute}\n */\nexport function create_attribute(name, name_loc, start, end, value) {\n\treturn {\n\t\ttype: 'Attribute',\n\t\tstart,\n\t\tend,\n\t\tname,\n\t\tname_loc,\n\t\tvalue,\n\t\tmetadata: {\n\t\t\tdelegated: false,\n\t\t\tneeds_clsx: false\n\t\t}\n\t};\n}\nexport class ExpressionMetadata {\n\t/** True if the expression references state directly, or _might_ (via member/call expressions) */\n\thas_state = false;\n\n\t/** True if the expression involves a call expression (often, it will need to be wrapped in a derived) */\n\thas_call = false;\n\n\t/** True if the expression contains `await` */\n\thas_await = false;\n\n\t/** True if the expression includes a member expression */\n\thas_member_expression = false;\n\n\t/** True if the expression includes an assignment or an update */\n\thas_assignment = false;\n\n\t/**\n\t * All the bindings that are referenced eagerly (not inside functions) in this expression\n\t * @type {Set<Binding>}\n\t */\n\tdependencies = new Set();\n\n\t/**\n\t * True if the expression references state directly, or _might_ (via member/call expressions)\n\t * @type {Set<Binding>}\n\t */\n\treferences = new Set();\n\n\t/** @type {null | Set<Expression>} */\n\t#blockers = null;\n\n\t#get_blockers() {\n\t\tif (!this.#blockers) {\n\t\t\tthis.#blockers = new Set();\n\n\t\t\tfor (const d of this.dependencies) {\n\t\t\t\tif (d.blocker) this.#blockers.add(d.blocker);\n\t\t\t}\n\t\t}\n\n\t\treturn this.#blockers;\n\t}\n\n\tblockers() {\n\t\treturn b.array([...this.#get_blockers()]);\n\t}\n\n\thas_blockers() {\n\t\treturn this.#get_blockers().size > 0;\n\t}\n\n\t/**\n\t * @param {ExpressionMetadata} other\n\t */\n\thas_more_blockers_than(other) {\n\t\tfor (const blocker of this.#get_blockers()) {\n\t\t\tif (!other.#get_blockers().has(blocker)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tis_async() {\n\t\treturn this.has_await || this.#get_blockers().size > 0;\n\t}\n\n\t/**\n\t * @param {ExpressionMetadata} source\n\t */\n\tmerge(source) {\n\t\tthis.has_state ||= source.has_state;\n\t\tthis.has_call ||= source.has_call;\n\t\tthis.has_await ||= source.has_await;\n\t\tthis.has_member_expression ||= source.has_member_expression;\n\t\tthis.has_assignment ||= source.has_assignment;\n\t\tthis.#blockers = null; // so that blockers are recalculated\n\n\t\tfor (const r of source.references) this.references.add(r);\n\t\tfor (const b of source.dependencies) this.dependencies.add(b);\n\t}\n}\n\n/**\n * @param {Expression | PrivateIdentifier} node\n */\nexport function get_name(node) {\n\tif (node.type === 'Literal') return String(node.value);\n\tif (node.type === 'PrivateIdentifier') return '#' + node.name;\n\tif (node.type === 'Identifier') return node.name;\n\n\treturn null;\n}\n\n/**\n * Checks if an <option>, <optgroup>, or <select> element has rich content that requires special hydration handling.\n * Rich content is anything beyond simple text, expressions, and comments for <option>,\n * anything beyond <option> children for <optgroup>,\n * or anything beyond <option>, <optgroup>, and empty text for <select>.\n * Control flow blocks are recursively checked - they only count as rich content if they contain rich content.\n * @param {AST.RegularElement} node\n * @returns {boolean}\n */\nexport function is_customizable_select_element(node) {\n\tif (node.name === 'select' || node.name === 'optgroup' || node.name === 'option') {\n\t\tfor (const child of find_descendants(node.fragment)) {\n\t\t\tif (child.type === 'RegularElement') {\n\t\t\t\tif (node.name === 'select' && child.name !== 'option' && child.name !== 'optgroup') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (node.name === 'optgroup' && child.name !== 'option') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (node.name === 'option') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Text nodes directly in <select> or <optgroup> are rich content\n\t\t\telse if (child.type === 'Text') {\n\t\t\t\tif (node.name === 'select' || node.name === 'optgroup') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Any non-RegularElement, non-Text node is rich content\n\t\t\telse {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {AST.Fragment | null} fragment\n * @returns {Iterable<AST.SvelteNode>}\n */\nfunction* find_descendants(fragment) {\n\tif (fragment === null) return;\n\n\tfor (const node of fragment.nodes) {\n\t\tswitch (node.type) {\n\t\t\tcase 'SnippetBlock':\n\t\t\tcase 'DebugTag':\n\t\t\tcase 'ConstTag':\n\t\t\tcase 'Comment':\n\t\t\tcase 'ExpressionTag':\n\t\t\t\tbreak;\n\n\t\t\tcase 'Text':\n\t\t\t\tif (node.data.trim() !== '') {\n\t\t\t\t\tyield node;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'IfBlock':\n\t\t\t\tyield* find_descendants(node.consequent);\n\t\t\t\tyield* find_descendants(node.alternate);\n\t\t\t\tbreak;\n\n\t\t\tcase 'EachBlock':\n\t\t\t\tyield* find_descendants(node.body);\n\t\t\t\tyield* find_descendants(node.fallback ?? null);\n\t\t\t\tbreak;\n\n\t\t\tcase 'KeyBlock':\n\t\t\t\tyield* find_descendants(node.fragment);\n\t\t\t\tbreak;\n\n\t\t\tcase 'AwaitBlock':\n\t\t\t\tyield* find_descendants(node.pending);\n\t\t\t\tyield* find_descendants(node.then);\n\t\t\t\tyield* find_descendants(node.catch);\n\t\t\t\tbreak;\n\n\t\t\tcase 'SvelteBoundary':\n\t\t\t\tyield* find_descendants(node.fragment);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tyield node;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/patterns.js",
    "content": "export const regex_whitespace = /\\s/;\nexport const regex_whitespaces = /\\s+/;\nexport const regex_starts_with_newline = /^\\r?\\n/;\nexport const regex_starts_with_whitespace = /^\\s/;\nexport const regex_starts_with_whitespaces = /^[ \\t\\r\\n]+/;\nexport const regex_ends_with_whitespace = /\\s$/;\nexport const regex_ends_with_whitespaces = /[ \\t\\r\\n]+$/;\n/** Not \\S because that also removes explicit whitespace defined through things like `&nbsp;` */\nexport const regex_not_whitespace = /[^ \\t\\r\\n]/;\n/** Not \\s+ because that also includes explicit whitespace defined through things like `&nbsp;` */\nexport const regex_whitespaces_strict = /[ \\t\\n\\r\\f]+/g;\n\nexport const regex_only_whitespaces = /^[ \\t\\n\\r\\f]+$/;\n\nexport const regex_not_newline_characters = /[^\\n]/g;\n\nexport const regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n// used in replace all to remove all invalid chars from a literal identifier\nexport const regex_invalid_identifier_chars = /(^[^a-zA-Z_$]|[^a-zA-Z0-9_$])/g;\n\nexport const regex_starts_with_vowel = /^[aeiou]/;\nexport const regex_heading_tags = /^h[1-6]$/;\nexport const regex_illegal_attribute_character = /(^[0-9-.])|[\\^$@%&#?!|()[\\]{}^*+~;]/;\nexport const regex_bidirectional_control_characters =\n\t/[\\u202a\\u202b\\u202c\\u202d\\u202e\\u2066\\u2067\\u2068\\u2069]+/g;\nexport const regex_js_prefix = /^\\W*javascript:/i;\nexport const regex_redundant_img_alt = /\\b(image|picture|photo)\\b/i;\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/scope.js",
    "content": "/** @import { BinaryOperator, ClassDeclaration, Expression, FunctionDeclaration, Identifier, ImportDeclaration, MemberExpression, LogicalOperator, Node, Pattern, UnaryOperator, VariableDeclarator, Super, SimpleLiteral, FunctionExpression, ArrowFunctionExpression } from 'estree' */\n/** @import { Context, Visitor } from 'zimmerframe' */\n/** @import { AST, BindingKind, DeclarationKind } from '#compiler' */\nimport is_reference from 'is-reference';\nimport { walk } from 'zimmerframe';\nimport { ExpressionMetadata } from './nodes.js';\nimport * as b from '#compiler/builders';\nimport * as e from '../errors.js';\nimport {\n\textract_identifiers,\n\textract_identifiers_from_destructuring,\n\tobject,\n\tunwrap_pattern\n} from '../utils/ast.js';\nimport { is_reserved, is_rune } from '../../utils.js';\nimport { determine_slot } from '../utils/slot.js';\nimport { validate_identifier_name } from './2-analyze/visitors/shared/utils.js';\n\nconst UNKNOWN = Symbol('unknown');\n/** Includes `BigInt` */\nconst NUMBER = Symbol('number');\nconst STRING = Symbol('string');\nconst FUNCTION = Symbol('string');\n\n/** @type {Record<string, [type: typeof NUMBER | typeof  STRING | typeof  UNKNOWN, fn?: Function]>} */\nconst globals = {\n\tBigInt: [NUMBER],\n\t'Math.min': [NUMBER, Math.min],\n\t'Math.max': [NUMBER, Math.max],\n\t'Math.random': [NUMBER],\n\t'Math.floor': [NUMBER, Math.floor],\n\t// @ts-ignore\n\t'Math.f16round': [NUMBER, Math.f16round],\n\t'Math.round': [NUMBER, Math.round],\n\t'Math.abs': [NUMBER, Math.abs],\n\t'Math.acos': [NUMBER, Math.acos],\n\t'Math.asin': [NUMBER, Math.asin],\n\t'Math.atan': [NUMBER, Math.atan],\n\t'Math.atan2': [NUMBER, Math.atan2],\n\t'Math.ceil': [NUMBER, Math.ceil],\n\t'Math.cos': [NUMBER, Math.cos],\n\t'Math.sin': [NUMBER, Math.sin],\n\t'Math.tan': [NUMBER, Math.tan],\n\t'Math.exp': [NUMBER, Math.exp],\n\t'Math.log': [NUMBER, Math.log],\n\t'Math.pow': [NUMBER, Math.pow],\n\t'Math.sqrt': [NUMBER, Math.sqrt],\n\t'Math.clz32': [NUMBER, Math.clz32],\n\t'Math.imul': [NUMBER, Math.imul],\n\t'Math.sign': [NUMBER, Math.sign],\n\t'Math.log10': [NUMBER, Math.log10],\n\t'Math.log2': [NUMBER, Math.log2],\n\t'Math.log1p': [NUMBER, Math.log1p],\n\t'Math.expm1': [NUMBER, Math.expm1],\n\t'Math.cosh': [NUMBER, Math.cosh],\n\t'Math.sinh': [NUMBER, Math.sinh],\n\t'Math.tanh': [NUMBER, Math.tanh],\n\t'Math.acosh': [NUMBER, Math.acosh],\n\t'Math.asinh': [NUMBER, Math.asinh],\n\t'Math.atanh': [NUMBER, Math.atanh],\n\t'Math.trunc': [NUMBER, Math.trunc],\n\t'Math.fround': [NUMBER, Math.fround],\n\t'Math.cbrt': [NUMBER, Math.cbrt],\n\tNumber: [NUMBER, Number],\n\t'Number.isInteger': [NUMBER, Number.isInteger],\n\t'Number.isFinite': [NUMBER, Number.isFinite],\n\t'Number.isNaN': [NUMBER, Number.isNaN],\n\t'Number.isSafeInteger': [NUMBER, Number.isSafeInteger],\n\t'Number.parseFloat': [NUMBER, Number.parseFloat],\n\t'Number.parseInt': [NUMBER, Number.parseInt],\n\tString: [STRING, String],\n\t'String.fromCharCode': [STRING, String.fromCharCode],\n\t'String.fromCodePoint': [STRING, String.fromCodePoint]\n};\n\n/** @type {Record<string, any>} */\nconst global_constants = {\n\t'Math.PI': Math.PI,\n\t'Math.E': Math.E,\n\t'Math.LN10': Math.LN10,\n\t'Math.LN2': Math.LN2,\n\t'Math.LOG10E': Math.LOG10E,\n\t'Math.LOG2E': Math.LOG2E,\n\t'Math.SQRT2': Math.SQRT2,\n\t'Math.SQRT1_2': Math.SQRT1_2\n};\n\nexport class Binding {\n\t/** @type {Scope} */\n\tscope;\n\n\t/** @type {Identifier} */\n\tnode;\n\n\t/** @type {BindingKind} */\n\tkind;\n\n\t/** @type {DeclarationKind} */\n\tdeclaration_kind;\n\n\t/**\n\t * What the value was initialized with.\n\t * For destructured props such as `let { foo = 'bar' } = $props()` this is `'bar'` and not `$props()`\n\t * @type {null | Expression | FunctionDeclaration | ClassDeclaration | ImportDeclaration | AST.EachBlock | AST.SnippetBlock}\n\t */\n\tinitial = null;\n\n\t/** @type {Array<{ node: Identifier; path: AST.SvelteNode[] }>} */\n\treferences = [];\n\n\t/**\n\t * (Re)assignments of this binding. Includes declarations such as `function x() {}`.\n\t * @type {Array<{ value: Expression; scope: Scope }>}\n\t */\n\tassignments = [];\n\n\t/**\n\t * For `legacy_reactive`: its reactive dependencies\n\t * @type {Binding[]}\n\t */\n\tlegacy_dependencies = [];\n\n\t/**\n\t * Bindings that should be invalidated when this binding is invalidated\n\t * @type {Set<Binding>}\n\t */\n\tlegacy_indirect_bindings = new Set();\n\n\t/**\n\t * Legacy props: the `class` in `{ export klass as class}`. $props(): The `class` in { class: klass } = $props()\n\t * @type {string | null}\n\t */\n\tprop_alias = null;\n\n\t/**\n\t * Additional metadata, varies per binding type\n\t * @type {null | { inside_rest?: boolean; is_template_declaration?: boolean; exclude_props?: string[] }}\n\t */\n\tmetadata = null;\n\n\tmutated = false;\n\treassigned = false;\n\n\t/**\n\t * Instance-level declarations may follow (or contain) a top-level `await`. In these cases,\n\t * any reads that occur in the template must wait for the corresponding promise to resolve\n\t * otherwise the initial value will not have been assigned.\n\t * It is a member expression of the form `$$blockers[n]`.\n\t * TODO the blocker is set during transform which feels a bit grubby\n\t * @type {MemberExpression | null}\n\t */\n\tblocker = null;\n\n\t/**\n\t *\n\t * @param {Scope} scope\n\t * @param {Identifier} node\n\t * @param {BindingKind} kind\n\t * @param {DeclarationKind} declaration_kind\n\t * @param {Binding['initial']} initial\n\t */\n\tconstructor(scope, node, kind, declaration_kind, initial) {\n\t\tthis.scope = scope;\n\t\tthis.node = node;\n\t\tthis.initial = initial;\n\t\tthis.kind = kind;\n\t\tthis.declaration_kind = declaration_kind;\n\n\t\tif (initial) {\n\t\t\tthis.assignments.push({ value: /** @type {Expression} */ (initial), scope });\n\t\t}\n\t}\n\n\tget updated() {\n\t\treturn this.mutated || this.reassigned;\n\t}\n\n\t/**\n\t * @returns {this is Binding & { initial: ArrowFunctionExpression | FunctionDeclaration | FunctionExpression }}\n\t */\n\tis_function() {\n\t\tif (this.updated) {\n\t\t\t// even if it's reassigned to another function,\n\t\t\t// we can't use it directly as e.g. an event handler\n\t\t\treturn false;\n\t\t}\n\n\t\tconst type = this.initial?.type;\n\n\t\treturn (\n\t\t\ttype === 'ArrowFunctionExpression' ||\n\t\t\ttype === 'FunctionExpression' ||\n\t\t\ttype === 'FunctionDeclaration'\n\t\t);\n\t}\n}\n\nclass Evaluation {\n\t/** @type {Set<any>} */\n\tvalues;\n\n\t/**\n\t * True if there is exactly one possible value\n\t * @readonly\n\t * @type {boolean}\n\t */\n\tis_known = true;\n\n\t/**\n\t * True if the possible values contains `UNKNOWN`\n\t * @readonly\n\t * @type {boolean}\n\t */\n\thas_unknown = false;\n\n\t/**\n\t * True if the value is known to not be null/undefined\n\t * @readonly\n\t * @type {boolean}\n\t */\n\tis_defined = true;\n\n\t/**\n\t * True if the value is known to be a string\n\t * @readonly\n\t * @type {boolean}\n\t */\n\tis_string = true;\n\n\t/**\n\t * True if the value is known to be a number\n\t * @readonly\n\t * @type {boolean}\n\t */\n\tis_number = true;\n\n\t/**\n\t * True if the value is known to be a primitive\n\t * @readonly\n\t * @type {boolean}\n\t */\n\tis_primitive = true;\n\n\t/**\n\t * True if the value is known to be a function\n\t * @readonly\n\t * @type {boolean}\n\t */\n\tis_function = true;\n\n\t/**\n\t * @readonly\n\t * @type {any}\n\t */\n\tvalue = undefined;\n\n\t/**\n\t *\n\t * @param {Scope} scope\n\t * @param {Expression | FunctionDeclaration} expression\n\t * @param {Set<any>} values\n\t */\n\tconstructor(scope, expression, values) {\n\t\tcurrent_evaluations.set(expression, this);\n\n\t\tthis.values = values;\n\n\t\tswitch (expression.type) {\n\t\t\tcase 'Literal': {\n\t\t\t\tthis.values.add(expression.value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'Identifier': {\n\t\t\t\tconst binding = scope.get(expression.name);\n\n\t\t\t\tif (binding) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tbinding.initial?.type === 'CallExpression' &&\n\t\t\t\t\t\tget_rune(binding.initial, scope) === '$props.id'\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.values.add(STRING);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst is_prop =\n\t\t\t\t\t\tbinding.kind === 'prop' ||\n\t\t\t\t\t\tbinding.kind === 'rest_prop' ||\n\t\t\t\t\t\tbinding.kind === 'bindable_prop';\n\n\t\t\t\t\tif (binding.initial?.type === 'EachBlock' && binding.initial.index === expression.name) {\n\t\t\t\t\t\tthis.values.add(NUMBER);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (binding.initial?.type === 'SnippetBlock') {\n\t\t\t\t\t\tthis.is_defined = true;\n\t\t\t\t\t\tthis.is_known = false;\n\t\t\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!binding.updated && binding.initial !== null && !is_prop) {\n\t\t\t\t\t\tbinding.scope.evaluate(/** @type {Expression} */ (binding.initial), this.values);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (expression.name === 'undefined') {\n\t\t\t\t\tthis.values.add(undefined);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// TODO glean what we can from reassignments\n\t\t\t\t// TODO one day, expose props and imports somehow\n\n\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'BinaryExpression': {\n\t\t\t\tconst a = scope.evaluate(/** @type {Expression} */ (expression.left)); // `left` cannot be `PrivateIdentifier` unless operator is `in`\n\t\t\t\tconst b = scope.evaluate(expression.right);\n\n\t\t\t\tif (a.is_known && b.is_known) {\n\t\t\t\t\tthis.values.add(binary[expression.operator](a.value, b.value));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tswitch (expression.operator) {\n\t\t\t\t\tcase '!=':\n\t\t\t\t\tcase '!==':\n\t\t\t\t\tcase '<':\n\t\t\t\t\tcase '<=':\n\t\t\t\t\tcase '>':\n\t\t\t\t\tcase '>=':\n\t\t\t\t\tcase '==':\n\t\t\t\t\tcase '===':\n\t\t\t\t\tcase 'in':\n\t\t\t\t\tcase 'instanceof':\n\t\t\t\t\t\tthis.values.add(true);\n\t\t\t\t\t\tthis.values.add(false);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase '%':\n\t\t\t\t\tcase '&':\n\t\t\t\t\tcase '*':\n\t\t\t\t\tcase '**':\n\t\t\t\t\tcase '-':\n\t\t\t\t\tcase '/':\n\t\t\t\t\tcase '<<':\n\t\t\t\t\tcase '>>':\n\t\t\t\t\tcase '>>>':\n\t\t\t\t\tcase '^':\n\t\t\t\t\tcase '|':\n\t\t\t\t\t\tthis.values.add(NUMBER);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase '+':\n\t\t\t\t\t\tif (a.is_string || b.is_string) {\n\t\t\t\t\t\t\tthis.values.add(STRING);\n\t\t\t\t\t\t} else if (a.is_number && b.is_number) {\n\t\t\t\t\t\t\tthis.values.add(NUMBER);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.values.add(STRING);\n\t\t\t\t\t\t\tthis.values.add(NUMBER);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'ConditionalExpression': {\n\t\t\t\tconst test = scope.evaluate(expression.test);\n\t\t\t\tconst consequent = scope.evaluate(expression.consequent);\n\t\t\t\tconst alternate = scope.evaluate(expression.alternate);\n\n\t\t\t\tif (test.is_known) {\n\t\t\t\t\tfor (const value of (test.value ? consequent : alternate).values) {\n\t\t\t\t\t\tthis.values.add(value);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (const value of consequent.values) {\n\t\t\t\t\t\tthis.values.add(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const value of alternate.values) {\n\t\t\t\t\t\tthis.values.add(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'LogicalExpression': {\n\t\t\t\tconst a = scope.evaluate(expression.left);\n\t\t\t\tconst b = scope.evaluate(expression.right);\n\n\t\t\t\tif (a.is_known) {\n\t\t\t\t\tif (b.is_known) {\n\t\t\t\t\t\tthis.values.add(logical[expression.operator](a.value, b.value));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(expression.operator === '&&' && !a.value) ||\n\t\t\t\t\t\t(expression.operator === '||' && a.value) ||\n\t\t\t\t\t\t(expression.operator === '??' && a.value != null)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.values.add(a.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const value of b.values) {\n\t\t\t\t\t\t\tthis.values.add(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tfor (const value of a.values) {\n\t\t\t\t\tthis.values.add(value);\n\t\t\t\t}\n\n\t\t\t\tfor (const value of b.values) {\n\t\t\t\t\tthis.values.add(value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'UnaryExpression': {\n\t\t\t\tconst argument = scope.evaluate(expression.argument);\n\n\t\t\t\tif (argument.is_known) {\n\t\t\t\t\tthis.values.add(unary[expression.operator](argument.value));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tswitch (expression.operator) {\n\t\t\t\t\tcase '!':\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\tthis.values.add(false);\n\t\t\t\t\t\tthis.values.add(true);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase '+':\n\t\t\t\t\tcase '-':\n\t\t\t\t\tcase '~':\n\t\t\t\t\t\tthis.values.add(NUMBER);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'typeof':\n\t\t\t\t\t\tthis.values.add(STRING);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'void':\n\t\t\t\t\t\tthis.values.add(undefined);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'CallExpression': {\n\t\t\t\tconst keypath = get_global_keypath(expression.callee, scope);\n\n\t\t\t\tif (keypath) {\n\t\t\t\t\tif (is_rune(keypath)) {\n\t\t\t\t\t\tconst arg = /** @type {Expression | undefined} */ (expression.arguments[0]);\n\n\t\t\t\t\t\tswitch (keypath) {\n\t\t\t\t\t\t\tcase '$state':\n\t\t\t\t\t\t\tcase '$state.raw':\n\t\t\t\t\t\t\tcase '$derived':\n\t\t\t\t\t\t\t\tif (arg) {\n\t\t\t\t\t\t\t\t\tscope.evaluate(arg, this.values);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.values.add(undefined);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '$props.id':\n\t\t\t\t\t\t\t\tthis.values.add(STRING);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '$effect.tracking':\n\t\t\t\t\t\t\t\tthis.values.add(false);\n\t\t\t\t\t\t\t\tthis.values.add(true);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '$derived.by':\n\t\t\t\t\t\t\t\tif (arg?.type === 'ArrowFunctionExpression' && arg.body.type !== 'BlockStatement') {\n\t\t\t\t\t\t\t\t\tscope.evaluate(arg.body, this.values);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tObject.hasOwn(globals, keypath) &&\n\t\t\t\t\t\texpression.arguments.every((arg) => arg.type !== 'SpreadElement')\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst [type, fn] = globals[keypath];\n\t\t\t\t\t\tconst values = expression.arguments.map((arg) => scope.evaluate(arg));\n\n\t\t\t\t\t\tif (fn && values.every((e) => e.is_known)) {\n\t\t\t\t\t\t\tthis.values.add(fn(...values.map((e) => e.value)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.values.add(type);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'TemplateLiteral': {\n\t\t\t\tlet result = expression.quasis[0].value.cooked;\n\n\t\t\t\tfor (let i = 0; i < expression.expressions.length; i += 1) {\n\t\t\t\t\tconst e = scope.evaluate(expression.expressions[i]);\n\n\t\t\t\t\tif (e.is_known) {\n\t\t\t\t\t\tresult += e.value + expression.quasis[i + 1].value.cooked;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.values.add(STRING);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.values.add(result);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'MemberExpression': {\n\t\t\t\tconst keypath = get_global_keypath(expression, scope);\n\n\t\t\t\tif (keypath && Object.hasOwn(global_constants, keypath)) {\n\t\t\t\t\tthis.values.add(global_constants[keypath]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'ArrowFunctionExpression':\n\t\t\tcase 'FunctionExpression':\n\t\t\tcase 'FunctionDeclaration': {\n\t\t\t\tthis.values.add(FUNCTION);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tthis.values.add(UNKNOWN);\n\t\t\t}\n\t\t}\n\n\t\tfor (const value of this.values) {\n\t\t\tthis.value = value; // saves having special logic for `size === 1`\n\n\t\t\tif (value !== STRING && typeof value !== 'string') {\n\t\t\t\tthis.is_string = false;\n\t\t\t}\n\n\t\t\tif (value !== NUMBER && typeof value !== 'number') {\n\t\t\t\tthis.is_number = false;\n\t\t\t}\n\n\t\t\tif (value !== FUNCTION) {\n\t\t\t\tthis.is_function = false;\n\t\t\t}\n\n\t\t\tif (value == null || value === UNKNOWN) {\n\t\t\t\tthis.is_defined = false;\n\t\t\t}\n\n\t\t\tif (value === UNKNOWN) {\n\t\t\t\tthis.has_unknown = true;\n\t\t\t\tthis.is_primitive = false;\n\t\t\t}\n\t\t}\n\n\t\tif (this.values.size > 1 || typeof this.value === 'symbol') {\n\t\t\tthis.is_known = false;\n\t\t}\n\n\t\tcurrent_evaluations.delete(expression);\n\t}\n}\n\nexport class Scope {\n\t/** @type {ScopeRoot} */\n\troot;\n\n\t/**\n\t * The immediate parent scope\n\t * @type {Scope | null}\n\t */\n\tparent;\n\n\t/**\n\t * Whether or not `var` declarations are contained by this scope\n\t * @type {boolean}\n\t */\n\t#porous;\n\n\t/**\n\t * A map of every identifier declared by this scope, and all the\n\t * identifiers that reference it\n\t * @type {Map<string, Binding>}\n\t */\n\tdeclarations = new Map();\n\n\t/**\n\t * A map of declarators to the bindings they declare\n\t * @type {Map<VariableDeclarator | AST.LetDirective, Binding[]>}\n\t */\n\tdeclarators = new Map();\n\n\t/**\n\t * A set of all the names referenced with this scope\n\t * — useful for generating unique names\n\t * @type {Map<string, { node: Identifier; path: AST.SvelteNode[] }[]>}\n\t */\n\treferences = new Map();\n\n\t/**\n\t * The scope depth allows us to determine if a state variable is referenced in its own scope,\n\t * which is usually an error. Block statements do not increase this value\n\t */\n\tfunction_depth = 0;\n\n\t/**\n\t * If tracing of reactive dependencies is enabled for this scope\n\t * @type {null | Expression}\n\t */\n\ttracing = null;\n\n\t/**\n\t *\n\t * @param {ScopeRoot} root\n\t * @param {Scope | null} parent\n\t * @param {boolean} porous\n\t */\n\tconstructor(root, parent, porous) {\n\t\tthis.root = root;\n\t\tthis.parent = parent;\n\t\tthis.#porous = porous;\n\t\tthis.function_depth = parent ? parent.function_depth + (porous ? 0 : 1) : 0;\n\t}\n\n\t/**\n\t * @param {Identifier} node\n\t * @param {Binding['kind']} kind\n\t * @param {DeclarationKind} declaration_kind\n\t * @param {null | Expression | FunctionDeclaration | ClassDeclaration | ImportDeclaration | AST.EachBlock | AST.SnippetBlock} initial\n\t * @returns {Binding}\n\t */\n\tdeclare(node, kind, declaration_kind, initial = null) {\n\t\tif (this.parent) {\n\t\t\tif (declaration_kind === 'var' && this.#porous) {\n\t\t\t\treturn this.parent.declare(node, kind, declaration_kind);\n\t\t\t}\n\n\t\t\tif (declaration_kind === 'import') {\n\t\t\t\treturn this.parent.declare(node, kind, declaration_kind, initial);\n\t\t\t}\n\t\t}\n\n\t\tif (this.declarations.has(node.name)) {\n\t\t\tconst binding = this.declarations.get(node.name);\n\t\t\tif (binding && binding.declaration_kind !== 'var' && declaration_kind !== 'var') {\n\t\t\t\t// This also errors on function types, but that's arguably a good thing\n\t\t\t\t// declaring function twice is also caught by acorn in the parse phase\n\t\t\t\te.declaration_duplicate(node, node.name);\n\t\t\t}\n\t\t}\n\n\t\tconst binding = new Binding(this, node, kind, declaration_kind, initial);\n\n\t\tvalidate_identifier_name(binding, this.function_depth);\n\n\t\tthis.declarations.set(node.name, binding);\n\t\tthis.root.conflicts.add(node.name);\n\t\treturn binding;\n\t}\n\n\tchild(porous = false) {\n\t\treturn new Scope(this.root, this, porous);\n\t}\n\n\t/**\n\t * @param {string} preferred_name\n\t * @returns {string}\n\t */\n\tgenerate(preferred_name) {\n\t\tif (this.#porous) {\n\t\t\treturn /** @type {Scope} */ (this.parent).generate(preferred_name);\n\t\t}\n\n\t\tpreferred_name = preferred_name.replace(/[^a-zA-Z0-9_$]/g, '_').replace(/^[0-9]/, '_');\n\n\t\t// Use cached counter to skip names already known to be taken (avoids O(n²) scanning)\n\t\tlet n = this.root.next_counter(preferred_name);\n\t\tlet name;\n\n\t\tif (n === 0) {\n\t\t\tname = preferred_name;\n\t\t\tn = 1;\n\t\t} else {\n\t\t\tname = `${preferred_name}_${n}`;\n\t\t\tn++;\n\t\t}\n\n\t\twhile (\n\t\t\tthis.references.has(name) ||\n\t\t\tthis.declarations.has(name) ||\n\t\t\tthis.root.conflicts.has(name) ||\n\t\t\tis_reserved(name)\n\t\t) {\n\t\t\tname = `${preferred_name}_${n++}`;\n\t\t}\n\n\t\tthis.root.set_counter(preferred_name, n);\n\t\tthis.references.set(name, []);\n\t\tthis.root.conflicts.add(name);\n\t\treturn name;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {Binding | null}\n\t */\n\tget(name) {\n\t\treturn this.declarations.get(name) ?? this.parent?.get(name) ?? null;\n\t}\n\n\t/**\n\t * @param {VariableDeclarator | AST.LetDirective} node\n\t * @returns {Binding[]}\n\t */\n\tget_bindings(node) {\n\t\tconst bindings = this.declarators.get(node);\n\t\tif (!bindings) {\n\t\t\tthrow new Error('No binding found for declarator');\n\t\t}\n\t\treturn bindings;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {Scope | null}\n\t */\n\towner(name) {\n\t\treturn this.declarations.has(name) ? this : this.parent && this.parent.owner(name);\n\t}\n\n\t/**\n\t * @param {Identifier} node\n\t * @param {AST.SvelteNode[]} path\n\t */\n\treference(node, path) {\n\t\tpath = [...path]; // ensure that mutations to path afterwards don't affect this reference\n\t\tlet references = this.references.get(node.name);\n\n\t\tif (!references) this.references.set(node.name, (references = []));\n\n\t\treferences.push({ node, path });\n\n\t\tconst binding = this.declarations.get(node.name);\n\t\tif (binding) {\n\t\t\tbinding.references.push({ node, path });\n\t\t} else if (this.parent) {\n\t\t\tthis.parent.reference(node, path);\n\t\t} else {\n\t\t\t// no binding was found, and this is the top level scope,\n\t\t\t// which means this is a global\n\t\t\tthis.root.conflicts.add(node.name);\n\t\t}\n\t}\n\n\t/**\n\t * Does partial evaluation to find an exact value or at least the rough type of the expression.\n\t * Only call this once scope has been fully generated in a first pass,\n\t * else this evaluates on incomplete data and may yield wrong results.\n\t * @param {Expression} expression\n\t * @param {Set<any>} [values]\n\t */\n\tevaluate(expression, values = new Set()) {\n\t\tconst current = current_evaluations.get(expression);\n\t\tif (current) return current;\n\n\t\treturn new Evaluation(this, expression, values);\n\t}\n}\n\n/**\n * Track which expressions are currently being evaluated — this allows\n * us to prevent cyclical evaluations without passing the map around\n * @type {Map<Expression | FunctionDeclaration, Evaluation>}\n */\nconst current_evaluations = new Map();\n\n/** @type {Record<BinaryOperator, (left: any, right: any) => any>} */\nconst binary = {\n\t'!=': (left, right) => left != right,\n\t'!==': (left, right) => left !== right,\n\t'<': (left, right) => left < right,\n\t'<=': (left, right) => left <= right,\n\t'>': (left, right) => left > right,\n\t'>=': (left, right) => left >= right,\n\t'==': (left, right) => left == right,\n\t'===': (left, right) => left === right,\n\tin: (left, right) => left in right,\n\tinstanceof: (left, right) => left instanceof right,\n\t'%': (left, right) => left % right,\n\t'&': (left, right) => left & right,\n\t'*': (left, right) => left * right,\n\t'**': (left, right) => left ** right,\n\t'+': (left, right) => left + right,\n\t'-': (left, right) => left - right,\n\t'/': (left, right) => left / right,\n\t'<<': (left, right) => left << right,\n\t'>>': (left, right) => left >> right,\n\t'>>>': (left, right) => left >>> right,\n\t'^': (left, right) => left ^ right,\n\t'|': (left, right) => left | right\n};\n\n/** @type {Record<UnaryOperator, (argument: any) => any>} */\nconst unary = {\n\t'-': (argument) => -argument,\n\t'+': (argument) => +argument,\n\t'!': (argument) => !argument,\n\t'~': (argument) => ~argument,\n\ttypeof: (argument) => typeof argument,\n\tvoid: () => undefined,\n\tdelete: () => true\n};\n\n/** @type {Record<LogicalOperator, (left: any, right: any) => any>} */\nconst logical = {\n\t'||': (left, right) => left || right,\n\t'&&': (left, right) => left && right,\n\t'??': (left, right) => left ?? right\n};\n\nexport class ScopeRoot {\n\t/** @type {Set<string>} */\n\tconflicts = new Set();\n\n\t/**\n\t * Tracks the next suffix counter per name to avoid O(n) rescanning in generate/unique.\n\t * @type {Map<string, number>}\n\t */\n\t#name_counters = new Map();\n\n\t/**\n\t * @param {string} name\n\t * @returns {number}\n\t */\n\tnext_counter(name) {\n\t\treturn this.#name_counters.get(name) ?? 0;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {number} value\n\t */\n\tset_counter(name, value) {\n\t\tthis.#name_counters.set(name, value);\n\t}\n\n\t/**\n\t * @param {string} preferred_name\n\t */\n\tunique(preferred_name) {\n\t\tpreferred_name = preferred_name.replace(/[^a-zA-Z0-9_$]/g, '_');\n\t\tlet n = this.#name_counters.get(preferred_name) ?? 0;\n\t\tlet final_name;\n\n\t\tif (n === 0) {\n\t\t\tfinal_name = preferred_name;\n\t\t\tn = 1;\n\t\t} else {\n\t\t\tfinal_name = `${preferred_name}_${n}`;\n\t\t\tn++;\n\t\t}\n\n\t\twhile (this.conflicts.has(final_name)) {\n\t\t\tfinal_name = `${preferred_name}_${n++}`;\n\t\t}\n\n\t\tthis.#name_counters.set(preferred_name, n);\n\t\tthis.conflicts.add(final_name);\n\t\tconst id = b.id(final_name);\n\t\treturn id;\n\t}\n}\n\n/**\n * @param {AST.SvelteNode} ast\n * @param {ScopeRoot} root\n * @param {boolean} allow_reactive_declarations\n * @param {Scope | null} parent\n */\nexport function create_scopes(ast, root, allow_reactive_declarations, parent) {\n\t/** @typedef {{ scope: Scope }} State */\n\n\t/**\n\t * A map of node->associated scope. A node appearing in this map does not necessarily mean that it created a scope\n\t * @type {Map<AST.SvelteNode, Scope>}\n\t */\n\tconst scopes = new Map();\n\tconst scope = new Scope(root, parent, false);\n\tscopes.set(ast, scope);\n\n\t/** @type {State} */\n\tconst state = { scope };\n\n\t/** @type {[Scope, { node: Identifier; path: AST.SvelteNode[] }][]} */\n\tconst references = [];\n\n\t/** @type {[Scope, Pattern | MemberExpression, Expression][]} */\n\tconst updates = [];\n\n\t/**\n\t * An array of reactive declarations, i.e. the `a` in `$: a = b * 2`\n\t * @type {Identifier[]}\n\t */\n\tconst possible_implicit_declarations = [];\n\n\t/**\n\t * @param {Scope} scope\n\t * @param {Pattern[]} params\n\t */\n\tfunction add_params(scope, params) {\n\t\tfor (const param of params) {\n\t\t\tfor (const node of extract_identifiers(param)) {\n\t\t\t\tscope.declare(node, 'normal', param.type === 'RestElement' ? 'rest_param' : 'param');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @type {Visitor<Node, State, AST.SvelteNode>}\n\t */\n\tconst create_block_scope = (node, { state, next }) => {\n\t\tconst scope = state.scope.child(true);\n\t\tscopes.set(node, scope);\n\n\t\tnext({ scope });\n\t};\n\n\t/**\n\t * @type {Visitor<AST.ElementLike, State, AST.SvelteNode>}\n\t */\n\tconst SvelteFragment = (node, { state, next }) => {\n\t\tconst scope = state.scope.child();\n\t\tscopes.set(node, scope);\n\t\tnext({ scope });\n\t};\n\n\t/**\n\t * @type {Visitor<AST.Component | AST.SvelteComponent | AST.SvelteSelf, State, AST.SvelteNode>}\n\t */\n\tconst Component = (node, context) => {\n\t\tnode.metadata.scopes = {\n\t\t\tdefault: context.state.scope.child()\n\t\t};\n\n\t\tif (node.type === 'SvelteComponent') {\n\t\t\tcontext.visit(node.expression);\n\t\t}\n\n\t\tconst default_state = determine_slot(node)\n\t\t\t? context.state\n\t\t\t: { scope: node.metadata.scopes.default };\n\n\t\tfor (const attribute of node.attributes) {\n\t\t\tif (attribute.type === 'LetDirective') {\n\t\t\t\tcontext.visit(attribute, default_state);\n\t\t\t} else {\n\t\t\t\tcontext.visit(attribute);\n\t\t\t}\n\t\t}\n\n\t\tfor (const child of node.fragment.nodes) {\n\t\t\tlet state = default_state;\n\n\t\t\tconst slot_name = determine_slot(child);\n\n\t\t\tif (slot_name !== null) {\n\t\t\t\tnode.metadata.scopes[slot_name] = context.state.scope.child();\n\n\t\t\t\tstate = {\n\t\t\t\t\tscope: node.metadata.scopes[slot_name]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcontext.visit(child, state);\n\t\t}\n\t};\n\n\t/**\n\t * @type {Visitor<AST.AnimateDirective | AST.TransitionDirective | AST.UseDirective, State, AST.SvelteNode>}\n\t */\n\tconst SvelteDirective = (node, { state, path, visit }) => {\n\t\tstate.scope.reference(b.id(node.name.split('.')[0]), path);\n\n\t\tif (node.expression) {\n\t\t\tvisit(node.expression);\n\t\t}\n\t};\n\n\tlet has_await = false;\n\n\twalk(ast, state, {\n\t\tAwaitExpression(node, context) {\n\t\t\t// this doesn't _really_ belong here, but it allows us to\n\t\t\t// automatically opt into runes mode on encountering\n\t\t\t// blocking awaits, without doing an additional walk\n\t\t\t// before the analysis occurs\n\t\t\t// TODO remove this in Svelte 7.0 or whenever we get rid of legacy support\n\t\t\thas_await ||= context.path.every(\n\t\t\t\t({ type }) =>\n\t\t\t\t\ttype !== 'ArrowFunctionExpression' &&\n\t\t\t\t\ttype !== 'FunctionExpression' &&\n\t\t\t\t\ttype !== 'FunctionDeclaration'\n\t\t\t);\n\n\t\t\tcontext.next();\n\t\t},\n\n\t\t// references\n\t\tIdentifier(node, { path, state }) {\n\t\t\tconst parent = path.at(-1);\n\t\t\tif (\n\t\t\t\tparent &&\n\t\t\t\tis_reference(node, /** @type {Node} */ (parent)) &&\n\t\t\t\t// TSTypeAnnotation, TSInterfaceDeclaration etc - these are normally already filtered out,\n\t\t\t\t// but for the migration they aren't, so we need to filter them out here\n\t\t\t\t// TODO -> once migration script is gone we can remove this check\n\t\t\t\t!parent.type.startsWith('TS')\n\t\t\t) {\n\t\t\t\treferences.push([state.scope, { node, path: path.slice() }]);\n\t\t\t}\n\t\t},\n\t\tLabeledStatement(node, { path, next }) {\n\t\t\tif (path.length > 1 || !allow_reactive_declarations) return next();\n\t\t\tif (node.label.name !== '$') return next();\n\n\t\t\t// create a scope for the $: block\n\t\t\tconst scope = state.scope.child();\n\t\t\tscopes.set(node, scope);\n\n\t\t\tif (\n\t\t\t\tnode.body.type === 'ExpressionStatement' &&\n\t\t\t\tnode.body.expression.type === 'AssignmentExpression'\n\t\t\t) {\n\t\t\t\tfor (const id of extract_identifiers(node.body.expression.left)) {\n\t\t\t\t\tif (!id.name.startsWith('$')) {\n\t\t\t\t\t\tpossible_implicit_declarations.push(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tSvelteFragment,\n\t\tSlotElement: SvelteFragment,\n\t\tSvelteElement: SvelteFragment,\n\t\tRegularElement: SvelteFragment,\n\n\t\tLetDirective(node, context) {\n\t\t\tconst scope = context.state.scope;\n\n\t\t\t/** @type {Binding[]} */\n\t\t\tconst bindings = [];\n\t\t\tscope.declarators.set(node, bindings);\n\n\t\t\tif (node.expression) {\n\t\t\t\tfor (const id of extract_identifiers_from_destructuring(node.expression)) {\n\t\t\t\t\tconst binding = scope.declare(id, 'template', 'const');\n\t\t\t\t\tscope.reference(id, [context.path[context.path.length - 1], node]);\n\t\t\t\t\tbindings.push(binding);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/** @type {Identifier} */\n\t\t\t\tconst id = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\tstart: node.start,\n\t\t\t\t\tend: node.end\n\t\t\t\t};\n\t\t\t\tconst binding = scope.declare(id, 'template', 'const');\n\t\t\t\tscope.reference(id, [context.path[context.path.length - 1], node]);\n\t\t\t\tbindings.push(binding);\n\t\t\t}\n\t\t},\n\n\t\tComponent: (node, context) => {\n\t\t\tcontext.state.scope.reference(b.id(node.name.split('.')[0]), context.path);\n\t\t\tComponent(node, context);\n\t\t},\n\t\tSvelteSelf: Component,\n\t\tSvelteComponent: Component,\n\n\t\t// updates\n\t\tAssignmentExpression(node, { state, next }) {\n\t\t\tupdates.push([state.scope, node.left, node.right]);\n\t\t\tnext();\n\t\t},\n\n\t\tUpdateExpression(node, { state, next }) {\n\t\t\tconst expression = /** @type {Identifier | MemberExpression} */ (node.argument);\n\t\t\tupdates.push([state.scope, expression, expression]);\n\t\t\tnext();\n\t\t},\n\n\t\tImportDeclaration(node, { state }) {\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tstate.scope.declare(specifier.local, 'normal', 'import', node);\n\t\t\t}\n\t\t},\n\n\t\tFunctionExpression(node, { state, next }) {\n\t\t\tconst scope = state.scope.child(true);\n\t\t\tscopes.set(node, scope);\n\n\t\t\tif (node.id) scope.declare(node.id, 'normal', 'function');\n\n\t\t\tadd_params(scope, node.params);\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tFunctionDeclaration(node, { state, next }) {\n\t\t\tif (node.id) state.scope.declare(node.id, 'normal', 'function', node);\n\n\t\t\tconst scope = state.scope.child(true);\n\t\t\tscopes.set(node, scope);\n\n\t\t\tadd_params(scope, node.params);\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tArrowFunctionExpression(node, { state, next }) {\n\t\t\tconst scope = state.scope.child(true);\n\t\t\tscopes.set(node, scope);\n\n\t\t\tadd_params(scope, node.params);\n\t\t\tnext({ scope });\n\t\t},\n\n\t\tForStatement: create_block_scope,\n\t\tForInStatement: create_block_scope,\n\t\tForOfStatement: create_block_scope,\n\t\tSwitchStatement: create_block_scope,\n\t\tBlockStatement(node, context) {\n\t\t\tconst parent = context.path.at(-1);\n\t\t\tif (\n\t\t\t\tparent?.type === 'FunctionDeclaration' ||\n\t\t\t\tparent?.type === 'FunctionExpression' ||\n\t\t\t\tparent?.type === 'ArrowFunctionExpression'\n\t\t\t) {\n\t\t\t\t// The scopes created for the function nodes above handle the function identifier and\n\t\t\t\t// parameters, but the block statement itself holds the non-porous function scope\n\t\t\t\tconst scope = context.state.scope.child();\n\t\t\t\tscopes.set(node, scope);\n\t\t\t\tcontext.next({ scope });\n\t\t\t} else {\n\t\t\t\tcreate_block_scope(node, context);\n\t\t\t}\n\t\t},\n\n\t\tClassDeclaration(node, { state, next }) {\n\t\t\tif (node.id) state.scope.declare(node.id, 'normal', 'let', node);\n\t\t\tnext();\n\t\t},\n\n\t\tVariableDeclaration(node, { state, path, next }) {\n\t\t\tconst is_parent_const_tag = path.at(-1)?.type === 'ConstTag';\n\t\t\tfor (const declarator of node.declarations) {\n\t\t\t\t/** @type {Binding[]} */\n\t\t\t\tconst bindings = [];\n\n\t\t\t\tstate.scope.declarators.set(declarator, bindings);\n\n\t\t\t\tfor (const id of extract_identifiers(declarator.id)) {\n\t\t\t\t\tconst binding = state.scope.declare(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tis_parent_const_tag ? 'template' : 'normal',\n\t\t\t\t\t\tnode.kind,\n\t\t\t\t\t\tdeclarator.init\n\t\t\t\t\t);\n\t\t\t\t\tbinding.metadata = { is_template_declaration: true };\n\t\t\t\t\tbindings.push(binding);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext();\n\t\t},\n\n\t\tCatchClause(node, { state, next }) {\n\t\t\tif (node.param) {\n\t\t\t\tconst scope = state.scope.child(true);\n\t\t\t\tscopes.set(node, scope);\n\n\t\t\t\tfor (const id of extract_identifiers(node.param)) {\n\t\t\t\t\tscope.declare(id, 'normal', 'let');\n\t\t\t\t}\n\n\t\t\t\tnext({ scope });\n\t\t\t} else {\n\t\t\t\tnext();\n\t\t\t}\n\t\t},\n\n\t\tEachBlock(node, { state, visit }) {\n\t\t\tvisit(node.expression);\n\n\t\t\t// context and children are a new scope\n\t\t\tconst scope = state.scope.child();\n\t\t\tscopes.set(node, scope);\n\n\t\t\tif (node.context) {\n\t\t\t\t// declarations\n\t\t\t\tfor (const id of extract_identifiers(node.context)) {\n\t\t\t\t\tconst binding = scope.declare(id, 'each', 'const');\n\n\t\t\t\t\tlet inside_rest = false;\n\t\t\t\t\tlet is_rest_id = false;\n\t\t\t\t\twalk(node.context, null, {\n\t\t\t\t\t\tIdentifier(node) {\n\t\t\t\t\t\t\tif (inside_rest && node === id) {\n\t\t\t\t\t\t\t\tis_rest_id = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRestElement(_, { next }) {\n\t\t\t\t\t\t\tconst prev = inside_rest;\n\t\t\t\t\t\t\tinside_rest = true;\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t\tinside_rest = prev;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tbinding.metadata = { inside_rest: is_rest_id };\n\t\t\t\t}\n\n\t\t\t\t// Visit to pick up references from default initializers\n\t\t\t\tvisit(node.context, { scope });\n\t\t\t}\n\n\t\t\tif (node.index) {\n\t\t\t\tconst is_keyed =\n\t\t\t\t\tnode.key &&\n\t\t\t\t\t(node.key.type !== 'Identifier' || !node.index || node.key.name !== node.index);\n\t\t\t\tscope.declare(b.id(node.index), is_keyed ? 'template' : 'static', 'const', node);\n\t\t\t}\n\t\t\tif (node.key) visit(node.key, { scope });\n\n\t\t\t// children\n\t\t\tfor (const child of node.body.nodes) {\n\t\t\t\tvisit(child, { scope });\n\t\t\t}\n\t\t\tif (node.fallback) visit(node.fallback, { scope });\n\n\t\t\tnode.metadata = {\n\t\t\t\texpression: new ExpressionMetadata(),\n\t\t\t\tkeyed: false,\n\t\t\t\tcontains_group_binding: false,\n\t\t\t\tindex: scope.root.unique('$$index'),\n\t\t\t\tdeclarations: scope.declarations,\n\t\t\t\tis_controlled: false,\n\t\t\t\t// filled in during analysis\n\t\t\t\ttransitive_deps: new Set()\n\t\t\t};\n\t\t},\n\n\t\tAwaitBlock(node, context) {\n\t\t\tcontext.visit(node.expression);\n\n\t\t\tif (node.pending) {\n\t\t\t\tcontext.visit(node.pending);\n\t\t\t}\n\n\t\t\tif (node.then) {\n\t\t\t\tcontext.visit(node.then);\n\t\t\t\tif (node.value) {\n\t\t\t\t\tconst then_scope = /** @type {Scope} */ (scopes.get(node.then));\n\t\t\t\t\tconst value_scope = context.state.scope.child();\n\t\t\t\t\tscopes.set(node.value, value_scope);\n\t\t\t\t\tcontext.visit(node.value, { scope: value_scope });\n\t\t\t\t\tfor (const id of extract_identifiers(node.value)) {\n\t\t\t\t\t\tthen_scope.declare(id, 'template', 'const');\n\t\t\t\t\t\tvalue_scope.declare(id, 'normal', 'const');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.catch) {\n\t\t\t\tcontext.visit(node.catch);\n\t\t\t\tif (node.error) {\n\t\t\t\t\tconst catch_scope = /** @type {Scope} */ (scopes.get(node.catch));\n\t\t\t\t\tconst error_scope = context.state.scope.child();\n\t\t\t\t\tscopes.set(node.error, error_scope);\n\t\t\t\t\tcontext.visit(node.error, { scope: error_scope });\n\t\t\t\t\tfor (const id of extract_identifiers(node.error)) {\n\t\t\t\t\t\tcatch_scope.declare(id, 'template', 'const');\n\t\t\t\t\t\terror_scope.declare(id, 'normal', 'const');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tSnippetBlock(node, context) {\n\t\t\tconst state = context.state;\n\t\t\tlet scope = state.scope;\n\n\t\t\tscope.declare(node.expression, 'normal', 'function', node);\n\n\t\t\tconst child_scope = state.scope.child();\n\t\t\tscopes.set(node, child_scope);\n\n\t\t\tfor (const param of node.parameters) {\n\t\t\t\tfor (const id of extract_identifiers(param)) {\n\t\t\t\t\tchild_scope.declare(id, 'snippet', 'let');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.next({ scope: child_scope });\n\t\t},\n\n\t\tFragment: (node, context) => {\n\t\t\tconst scope = context.state.scope.child(node.metadata.transparent);\n\t\t\tscopes.set(node, scope);\n\t\t\tcontext.next({ scope });\n\t\t},\n\n\t\tBindDirective(node, context) {\n\t\t\tif (node.expression.type !== 'SequenceExpression') {\n\t\t\t\tconst expression = /** @type {Identifier | MemberExpression} */ (node.expression);\n\t\t\t\tupdates.push([context.state.scope, expression, expression]);\n\t\t\t}\n\n\t\t\tcontext.next();\n\t\t},\n\n\t\tTransitionDirective: SvelteDirective,\n\t\tAnimateDirective: SvelteDirective,\n\t\tUseDirective: SvelteDirective,\n\t\t// using it's own function instead of `SvelteDirective` because\n\t\t// StyleDirective doesn't have expressions and are generally already\n\t\t// handled by `Identifier`. This is the special case for the shorthand\n\t\t// eg <button style:height /> where the variable has the same name of\n\t\t// the css property\n\t\tStyleDirective(node, { path, state, next }) {\n\t\t\tif (node.value === true) {\n\t\t\t\tstate.scope.reference(b.id(node.name), path.concat(node));\n\t\t\t}\n\t\t\tnext();\n\t\t}\n\n\t\t// TODO others\n\t});\n\n\tfor (const id of possible_implicit_declarations) {\n\t\tconst binding = scope.get(id.name);\n\t\tif (binding) continue; // TODO can also be legacy_reactive if declared outside of reactive statement\n\n\t\tscope.declare(id, 'legacy_reactive', 'let');\n\t}\n\n\t// we do this after the fact, so that we don't need to worry\n\t// about encountering references before their declarations\n\tfor (const [scope, { node, path }] of references) {\n\t\tscope.reference(node, path);\n\t}\n\n\tfor (const [scope, node, value] of updates) {\n\t\tfor (const expression of unwrap_pattern(node)) {\n\t\t\tconst left = object(expression);\n\t\t\tconst binding = left && scope.get(left.name);\n\n\t\t\tif (binding !== null && left !== binding.node) {\n\t\t\t\tif (left === expression) {\n\t\t\t\t\tbinding.reassigned = true;\n\t\t\t\t\tbinding.assignments.push({ value, scope });\n\t\t\t\t} else {\n\t\t\t\t\tbinding.mutated = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\thas_await,\n\t\tscope,\n\t\tscopes\n\t};\n}\n\n/**\n * @template {{ scope: Scope, scopes: Map<AST.SvelteNode, Scope> }} State\n * @param {AST.SvelteNode} node\n * @param {Context<AST.SvelteNode, State>} context\n */\nexport function set_scope(node, { next, state }) {\n\tconst scope = state.scopes.get(node);\n\tnext(scope !== undefined && scope !== state.scope ? { ...state, scope } : state);\n}\n\n/**\n * Returns the name of the rune if the given expression is a `CallExpression` using a rune.\n * @param {Node | null | undefined} node\n * @param {Scope} scope\n */\nexport function get_rune(node, scope) {\n\tif (!node) return null;\n\tif (node.type !== 'CallExpression') return null;\n\n\tconst keypath = get_global_keypath(node.callee, scope);\n\n\tif (!keypath || !is_rune(keypath)) return null;\n\treturn keypath;\n}\n\n/**\n * Returns the name of the rune if the given expression is a `CallExpression` using a rune.\n * @param {Expression | Super} node\n * @param {Scope} scope\n */\nfunction get_global_keypath(node, scope) {\n\tlet n = node;\n\n\tlet joined = '';\n\n\twhile (n.type === 'MemberExpression') {\n\t\tif (n.computed) return null;\n\t\tif (n.property.type !== 'Identifier') return null;\n\t\tjoined = '.' + n.property.name + joined;\n\t\tn = n.object;\n\t}\n\n\tif (n.type === 'CallExpression' && n.callee.type === 'Identifier') {\n\t\tjoined = '()' + joined;\n\t\tn = n.callee;\n\t}\n\n\tif (n.type !== 'Identifier') return null;\n\n\tconst binding = scope.get(n.name);\n\tif (binding !== null) return null; // rune name, but references a variable or store\n\n\treturn n.name + joined;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/phases/types.d.ts",
    "content": "import type { AST, Binding, StateField } from '#compiler';\nimport type {\n\tAwaitExpression,\n\tCallExpression,\n\tClassBody,\n\tClassDeclaration,\n\tFunctionDeclaration,\n\tIdentifier,\n\tLabeledStatement,\n\tModuleDeclaration,\n\tPattern,\n\tProgram,\n\tStatement,\n\tVariableDeclaration,\n\tVariableDeclarator\n} from 'estree';\nimport type { Scope, ScopeRoot } from './scope.js';\nimport type { ExpressionMetadata } from './nodes.js';\n\nexport interface Js {\n\tast: Program;\n\tscope: Scope;\n\tscopes: Map<AST.SvelteNode, Scope>;\n\thas_await: boolean;\n}\n\nexport interface Template {\n\tast: AST.Fragment;\n\tscope: Scope;\n\tscopes: Map<AST.SvelteNode, Scope>;\n}\n\nexport interface ReactiveStatement {\n\tassignments: Set<Binding>;\n\tdependencies: Binding[];\n}\n\nexport interface AwaitedDeclaration {\n\tid: Identifier;\n\thas_await: boolean;\n\tpattern: Pattern;\n\tmetadata: ExpressionMetadata;\n\tupdated_by: Set<Identifier>;\n}\n\n/**\n * Analysis common to modules and components\n */\nexport interface Analysis {\n\tmodule: Js;\n\t/** @deprecated use `component_name` from `state.js` instead */\n\tname: string; // TODO should this be filename? it's used in `compileModule` as well as `compile`\n\t/** @deprecated use `runes` from `state.js` instead */\n\trunes: boolean;\n\timmutable: boolean;\n\t/** True if `$inspect.trace` is used */\n\ttracing: boolean;\n\tcomments: AST.JSComment[];\n\n\tclasses: Map<ClassBody, Map<string, StateField>>;\n\n\t// TODO figure out if we can move this to ComponentAnalysis\n\taccessors: boolean;\n\n\t/** A set of deriveds that contain `await` expressions */\n\tasync_deriveds: Set<CallExpression>;\n\t/** Awaits needing context preservation */\n\tpickled_awaits: Set<AwaitExpression>;\n}\n\nexport interface ComponentAnalysis extends Analysis {\n\troot: ScopeRoot;\n\tinstance: Js;\n\ttemplate: Template;\n\t/** Used for CSS pruning and scoping */\n\telements: Array<AST.RegularElement | AST.SvelteElement>;\n\trunes: boolean;\n\tmaybe_runes: boolean;\n\ttracing: boolean;\n\texports: Array<{ name: string; alias: string | null }>;\n\t/** Whether the component uses `$$props` */\n\tuses_props: boolean;\n\t/** The component ID variable name, if any */\n\tprops_id: Identifier | null;\n\t/** Whether the component uses `$$restProps` */\n\tuses_rest_props: boolean;\n\t/** Whether the component uses `$$slots` */\n\tuses_slots: boolean;\n\tuses_component_bindings: boolean;\n\tuses_render_tags: boolean;\n\tneeds_context: boolean;\n\tneeds_mutation_validation: boolean;\n\tneeds_props: boolean;\n\t/** Set to the first event directive (on:x) found on a DOM element in the code */\n\tevent_directive_node: AST.OnDirective | null;\n\t/** true if uses event attributes (onclick) on a DOM element */\n\tuses_event_attributes: boolean;\n\t/**\n\t * Contains the content of `<svelte:options customElement={...} />`,\n\t * or if not present a boolean which corresponds to the compiler option value\n\t */\n\tcustom_element: boolean | AST.SvelteOptions['customElement'];\n\t/** If `true`, should append styles through JavaScript */\n\tinject_styles: boolean;\n\treactive_statements: Map<LabeledStatement, ReactiveStatement>;\n\t/** Identifiers that make up the `bind:group` expression -> internal group binding name */\n\tbinding_groups: Map<[key: string, bindings: Array<Binding | null>], Identifier>;\n\tslot_names: Map<string, AST.SlotElement>;\n\tcss: {\n\t\tast: AST.CSS.StyleSheet | null;\n\t\thash: string;\n\t\tkeyframes: string[];\n\t\thas_global: boolean;\n\t};\n\t/** @deprecated use `source` from `state.js` instead */\n\tsource: string;\n\t/**\n\t * Every render tag/component, and whether it could be definitively resolved or not\n\t */\n\tsnippet_renderers: Map<\n\t\tAST.RenderTag | AST.Component | AST.SvelteComponent | AST.SvelteSelf,\n\t\tboolean\n\t>;\n\t/**\n\t * Every snippet that is declared locally\n\t */\n\tsnippets: Set<AST.SnippetBlock>;\n\t/**\n\t * Pre-transformed `<script>` block\n\t */\n\tinstance_body: {\n\t\thoisted: Array<Statement | ModuleDeclaration>;\n\t\tsync: Array<Statement | ModuleDeclaration | VariableDeclaration>;\n\t\tasync: Array<{ nodes: Array<Statement | VariableDeclarator>; has_await: boolean }>;\n\t\tdeclarations: Array<Identifier>;\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/preprocess/decode_sourcemap.js",
    "content": "/** @import { Processed } from './public.js' */\nimport { decode as decode_mappings } from '@jridgewell/sourcemap-codec';\n\n/**\n * Import decoded sourcemap from mozilla/source-map/SourceMapGenerator\n * Forked from source-map/lib/source-map-generator.js\n * from methods _serializeMappings and toJSON.\n * We cannot use source-map.d.ts types, because we access hidden properties.\n * @param {any} generator\n */\nfunction decoded_sourcemap_from_generator(generator) {\n\tlet previous_generated_line = 1;\n\t/** @type {number[][][]} */\n\tconst converted_mappings = [[]];\n\tlet result_line = converted_mappings[0];\n\tlet result_segment;\n\tlet mapping;\n\tconst source_idx = generator._sources\n\t\t.toArray()\n\t\t// @ts-ignore\n\t\t.reduce((acc, val, idx) => ((acc[val] = idx), acc), {});\n\tconst name_idx = generator._names\n\t\t.toArray()\n\t\t// @ts-ignore\n\t\t.reduce((acc, val, idx) => ((acc[val] = idx), acc), {});\n\tconst mappings = generator._mappings.toArray();\n\tfor (let i = 0, len = mappings.length; i < len; i++) {\n\t\tmapping = mappings[i];\n\t\tif (mapping.generatedLine > previous_generated_line) {\n\t\t\twhile (mapping.generatedLine > previous_generated_line) {\n\t\t\t\tconverted_mappings.push([]);\n\t\t\t\tprevious_generated_line++;\n\t\t\t}\n\t\t\tresult_line = converted_mappings[mapping.generatedLine - 1]; // line is one-based\n\t\t} else if (i > 0) {\n\t\t\tconst previous_mapping = mappings[i - 1];\n\t\t\tif (\n\t\t\t\t// sorted by selectivity\n\t\t\t\tmapping.generatedColumn === previous_mapping.generatedColumn &&\n\t\t\t\tmapping.originalColumn === previous_mapping.originalColumn &&\n\t\t\t\tmapping.name === previous_mapping.name &&\n\t\t\t\tmapping.generatedLine === previous_mapping.generatedLine &&\n\t\t\t\tmapping.originalLine === previous_mapping.originalLine &&\n\t\t\t\tmapping.source === previous_mapping.source\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tresult_line.push([mapping.generatedColumn]);\n\t\tresult_segment = result_line[result_line.length - 1];\n\t\tif (mapping.source != null) {\n\t\t\tresult_segment.push(\n\t\t\t\t...[source_idx[mapping.source], mapping.originalLine - 1, mapping.originalColumn]\n\t\t\t);\n\t\t\tif (mapping.name != null) {\n\t\t\t\tresult_segment.push(name_idx[mapping.name]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @type {{\n\t *  version: number;\n\t * sources: string[];\n\t * names: string[];\n\t * mappings: number[][][];\n\t * file?: string;\n\t * }}\n\t */\n\tconst map = {\n\t\tversion: generator._version,\n\t\tsources: generator._sources.toArray(),\n\t\tnames: generator._names.toArray(),\n\t\tmappings: converted_mappings\n\t};\n\tif (generator._file != null) {\n\t\tmap.file = generator._file;\n\t}\n\t// not needed: map.sourcesContent and map.sourceRoot\n\treturn map;\n}\n\n/**\n * @param {Processed} processed\n */\nexport function decode_map(processed) {\n\tlet decoded_map = typeof processed.map === 'string' ? JSON.parse(processed.map) : processed.map;\n\tif (typeof decoded_map.mappings === 'string') {\n\t\tdecoded_map.mappings = decode_mappings(decoded_map.mappings);\n\t}\n\tif (decoded_map._mappings && decoded_map.constructor.name === 'SourceMapGenerator') {\n\t\t// import decoded sourcemap from mozilla/source-map/SourceMapGenerator\n\t\tdecoded_map = decoded_sourcemap_from_generator(decoded_map);\n\t}\n\treturn decoded_map;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/preprocess/index.js",
    "content": "/** @import { Processed, Preprocessor, MarkupPreprocessor, PreprocessorGroup } from './public.js' */\n/** @import { SourceUpdate, Source } from './private.js' */\n/** @import { DecodedSourceMap, RawSourceMap } from '@jridgewell/remapping' */\nimport { getLocator } from 'locate-character';\nimport {\n\tMappedCode,\n\tparse_attached_sourcemap,\n\tsourcemap_add_offset,\n\tcombine_sourcemaps,\n\tget_basename\n} from '../utils/mapped_code.js';\nimport { decode_map } from './decode_sourcemap.js';\nimport { replace_in_code, slice_source } from './replace_in_code.js';\n\n/**\n * Represents intermediate states of the preprocessing.\n * Implements the Source interface.\n */\nclass PreprocessResult {\n\t/** @type {string} */\n\tsource;\n\n\t/** @type {string | undefined} The filename passed as-is to preprocess */\n\tfilename;\n\n\t// sourcemap_list is sorted in reverse order from last map (index 0) to first map (index -1)\n\t// so we use sourcemap_list.unshift() to add new maps\n\t// https://github.com/jridgewell/sourcemaps/tree/main/packages/remapping#multiple-transformations-of-a-file\n\n\t/**\n\t * @default []\n\t * @type {Array<DecodedSourceMap | RawSourceMap>}\n\t */\n\tsourcemap_list = [];\n\n\t/**\n\t * @default []\n\t * @type {string[]}\n\t */\n\tdependencies = [];\n\n\t/**\n\t * @type {string | null} last part of the filename, as used for `sources` in sourcemaps\n\t */\n\tfile_basename = /** @type {any} */ (undefined);\n\n\t/**\n\t * @type {ReturnType<typeof getLocator>}\n\t */\n\tget_location = /** @type {any} */ (undefined);\n\n\t/**\n\t * @param {string} source\n\t * @param {string} [filename]\n\t */\n\tconstructor(source, filename) {\n\t\tthis.source = source;\n\t\tthis.filename = filename;\n\t\tthis.update_source({ string: source });\n\t\t// preprocess source must be relative to itself or equal null\n\t\tthis.file_basename = filename == null ? null : get_basename(filename);\n\t}\n\n\t/**\n\t * @param {SourceUpdate} opts\n\t */\n\tupdate_source({ string: source, map, dependencies }) {\n\t\tif (source != null) {\n\t\t\tthis.source = source;\n\t\t\tthis.get_location = getLocator(source);\n\t\t}\n\t\tif (map) {\n\t\t\tthis.sourcemap_list.unshift(map);\n\t\t}\n\t\tif (dependencies) {\n\t\t\tthis.dependencies.push(...dependencies);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {Processed}\n\t */\n\tto_processed() {\n\t\t// Combine all the source maps for each preprocessor function into one\n\t\t// @ts-expect-error TODO there might be a bug in hiding here\n\t\tconst map = combine_sourcemaps(this.file_basename, this.sourcemap_list);\n\t\treturn {\n\t\t\t// TODO return separated output, in future version where svelte.compile supports it:\n\t\t\t// style: { code: styleCode, map: styleMap },\n\t\t\t// script { code: scriptCode, map: scriptMap },\n\t\t\t// markup { code: markupCode, map: markupMap },\n\t\t\tcode: this.source,\n\t\t\tdependencies: [...new Set(this.dependencies)],\n\t\t\t// @ts-expect-error TODO there might be a bug in hiding here\n\t\t\tmap,\n\t\t\ttoString: () => this.source\n\t\t};\n\t}\n}\n/**\n * Convert preprocessor output for the tag content into MappedCode\n * @param {Processed} processed\n * @param {{ line: number; column: number; }} location\n * @param {string} file_basename\n * @returns {MappedCode}\n */\nfunction processed_content_to_code(processed, location, file_basename) {\n\t// Convert the preprocessed code and its sourcemap to a MappedCode\n\n\t/**\n\t * @type {DecodedSourceMap | undefined}\n\t */\n\tlet decoded_map = undefined;\n\tif (processed.map) {\n\t\tdecoded_map = decode_map(processed);\n\t\t// decoded map may not have sources for empty maps like `{ mappings: '' }`\n\t\tif (decoded_map?.sources) {\n\t\t\t// offset only segments pointing at original component source\n\t\t\tconst source_index = decoded_map.sources.indexOf(file_basename);\n\t\t\tif (source_index !== -1) {\n\t\t\t\tsourcemap_add_offset(decoded_map, location, source_index);\n\t\t\t}\n\t\t}\n\t}\n\treturn MappedCode.from_processed(processed.code, decoded_map);\n}\n/**\n * Given the whole tag including content, return a `MappedCode`\n * representing the tag content replaced with `processed`.\n * @param {Processed} processed\n * @param {'style' | 'script'} tag_name\n * @param {string} original_attributes\n * @param {string} generated_attributes\n * @param {Source} source\n * @returns {MappedCode}\n */\nfunction processed_tag_to_code(\n\tprocessed,\n\ttag_name,\n\toriginal_attributes,\n\tgenerated_attributes,\n\tsource\n) {\n\tconst { file_basename, get_location } = source;\n\n\t/**\n\t * @param {string} code\n\t * @param {number} offset\n\t */\n\tconst build_mapped_code = (code, offset) =>\n\t\tMappedCode.from_source(slice_source(code, offset, source));\n\n\t// To map the open/close tag and content starts positions correctly, we need to\n\t// differentiate between the original attributes and the generated attributes:\n\t// `source` contains the original attributes and its get_location maps accordingly.\n\tconst original_tag_open = `<${tag_name}${original_attributes}>`;\n\tconst tag_open = `<${tag_name}${generated_attributes}>`;\n\t/** @type {MappedCode} */\n\tlet tag_open_code;\n\n\tif (original_tag_open.length !== tag_open.length) {\n\t\t// Generate a source map for the open tag\n\t\t/** @type {DecodedSourceMap['mappings']} */\n\t\tconst mappings = [\n\t\t\t[\n\t\t\t\t// start of tag\n\t\t\t\t[0, 0, 0, 0],\n\t\t\t\t// end of tag start\n\t\t\t\t[`<${tag_name}`.length, 0, 0, `<${tag_name}`.length]\n\t\t\t]\n\t\t];\n\n\t\tconst line = tag_open.split('\\n').length - 1;\n\t\tconst column = tag_open.length - (line === 0 ? 0 : tag_open.lastIndexOf('\\n')) - 1;\n\n\t\twhile (mappings.length <= line) {\n\t\t\t// end of tag start again, if this is a multi line mapping\n\t\t\tmappings.push([[0, 0, 0, `<${tag_name}`.length]]);\n\t\t}\n\n\t\t// end of tag\n\t\tmappings[line].push([\n\t\t\tcolumn,\n\t\t\t0,\n\t\t\toriginal_tag_open.split('\\n').length - 1,\n\t\t\toriginal_tag_open.length - original_tag_open.lastIndexOf('\\n') - 1\n\t\t]);\n\n\t\t/** @type {DecodedSourceMap} */\n\t\tconst map = {\n\t\t\tversion: 3,\n\t\t\tnames: [],\n\t\t\tsources: [file_basename],\n\t\t\tmappings\n\t\t};\n\t\tsourcemap_add_offset(map, get_location(0), 0);\n\t\ttag_open_code = MappedCode.from_processed(tag_open, map);\n\t} else {\n\t\ttag_open_code = build_mapped_code(tag_open, 0);\n\t}\n\n\tconst tag_close = `</${tag_name}>`;\n\tconst tag_close_code = build_mapped_code(\n\t\ttag_close,\n\t\toriginal_tag_open.length + source.source.length\n\t);\n\n\tparse_attached_sourcemap(processed, tag_name);\n\tconst content_code = processed_content_to_code(\n\t\tprocessed,\n\t\tget_location(original_tag_open.length),\n\t\tfile_basename\n\t);\n\n\treturn tag_open_code.concat(content_code).concat(tag_close_code);\n}\n\nconst attribute_pattern = /([\\w-$]+\\b)(?:=(?:\"([^\"]*)\"|'([^']*)'|(\\S+)))?/g;\n\n/**\n * @param {string} str\n */\nfunction parse_tag_attributes(str) {\n\t/** @type {Record<string, string | boolean>} */\n\tconst attrs = {};\n\n\t/** @type {RegExpMatchArray | null} */\n\tlet match;\n\twhile ((match = attribute_pattern.exec(str)) !== null) {\n\t\tconst name = match[1];\n\t\tconst value = match[2] || match[3] || match[4];\n\t\tattrs[name] = !value || value;\n\t}\n\n\treturn attrs;\n}\n\n/**\n * @param {Record<string, string | boolean> | undefined} attributes\n */\nfunction stringify_tag_attributes(attributes) {\n\tif (!attributes) return;\n\n\tlet value = Object.entries(attributes)\n\t\t.map(([key, value]) => (value === true ? key : `${key}=\"${value}\"`))\n\t\t.join(' ');\n\tif (value) {\n\t\tvalue = ' ' + value;\n\t}\n\treturn value;\n}\n\nconst regex_style_tags =\n\t/<!--[^]*?-->|<style((?:\\s+[^=>'\"/\\s]+=(?:\"[^\"]*\"|'[^']*'|[^>\\s]+)|\\s+[^=>'\"/\\s]+)*\\s*)(?:\\/>|>([\\S\\s]*?)<\\/style>)/g;\nconst regex_script_tags =\n\t/<!--[^]*?-->|<script((?:\\s+[^=>'\"/\\s]+=(?:\"[^\"]*\"|'[^']*'|[^>\\s]+)|\\s+[^=>'\"/\\s]+)*\\s*)(?:\\/>|>([\\S\\s]*?)<\\/script>)/g;\n\n/**\n * Calculate the updates required to process all instances of the specified tag.\n * @param {'style' | 'script'} tag_name\n * @param {Preprocessor} preprocessor\n * @param {Source} source\n * @returns {Promise<SourceUpdate>}\n */\nasync function process_tag(tag_name, preprocessor, source) {\n\tconst { filename, source: markup } = source;\n\tconst tag_regex = tag_name === 'style' ? regex_style_tags : regex_script_tags;\n\n\t/**\n\t * @type {string[]}\n\t */\n\tconst dependencies = [];\n\n\t/**\n\t * @param {string} tag_with_content\n\t * @param {number} tag_offset\n\t * @returns {Promise<MappedCode>}\n\t */\n\tasync function process_single_tag(tag_with_content, attributes = '', content = '', tag_offset) {\n\t\tconst no_change = () =>\n\t\t\tMappedCode.from_source(slice_source(tag_with_content, tag_offset, source));\n\t\tif (!attributes && !content) return no_change();\n\t\tconst processed = await preprocessor({\n\t\t\tcontent: content || '',\n\t\t\tattributes: parse_tag_attributes(attributes || ''),\n\t\t\tmarkup,\n\t\t\tfilename\n\t\t});\n\t\tif (!processed) return no_change();\n\t\tif (processed.dependencies) dependencies.push(...processed.dependencies);\n\t\tif (!processed.map && processed.code === content) return no_change();\n\t\treturn processed_tag_to_code(\n\t\t\tprocessed,\n\t\t\ttag_name,\n\t\t\tattributes,\n\t\t\tstringify_tag_attributes(processed.attributes) ?? attributes,\n\t\t\tslice_source(content, tag_offset, source)\n\t\t);\n\t}\n\tconst { string, map } = await replace_in_code(tag_regex, process_single_tag, source);\n\treturn { string, map, dependencies };\n}\n\n/**\n * @param {MarkupPreprocessor} process\n * @param {Source} source\n */\nasync function process_markup(process, source) {\n\tconst processed = await process({\n\t\tcontent: source.source,\n\t\tfilename: source.filename\n\t});\n\tif (processed) {\n\t\treturn {\n\t\t\tstring: processed.code,\n\t\t\tmap: processed.map\n\t\t\t\t? // TODO: can we use decode_sourcemap?\n\t\t\t\t\ttypeof processed.map === 'string'\n\t\t\t\t\t? JSON.parse(processed.map)\n\t\t\t\t\t: processed.map\n\t\t\t\t: undefined,\n\t\t\tdependencies: processed.dependencies\n\t\t};\n\t} else {\n\t\treturn {};\n\t}\n}\n\n/**\n * The preprocess function provides convenient hooks for arbitrarily transforming component source code.\n * For example, it can be used to convert a `<style lang=\"sass\">` block into vanilla CSS.\n *\n * @param {string} source\n * @param {PreprocessorGroup | PreprocessorGroup[]} preprocessor\n * @param {{ filename?: string }} [options]\n * @returns {Promise<Processed>}\n */\nexport default async function preprocess(source, preprocessor, options) {\n\t/**\n\t * @type {string | undefined}\n\t */\n\tconst filename = (options && options.filename) || /** @type {any} */ (preprocessor).filename; // legacy\n\tconst preprocessors = preprocessor\n\t\t? Array.isArray(preprocessor)\n\t\t\t? preprocessor\n\t\t\t: [preprocessor]\n\t\t: [];\n\tconst result = new PreprocessResult(source, filename);\n\n\t// TODO keep track: what preprocessor generated what sourcemap?\n\t// to make debugging easier = detect low-resolution sourcemaps in fn combine_mappings\n\tfor (const preprocessor of preprocessors) {\n\t\tif (preprocessor.markup) {\n\t\t\t// @ts-expect-error TODO there might be a bug in hiding here\n\t\t\tresult.update_source(await process_markup(preprocessor.markup, result));\n\t\t}\n\t\tif (preprocessor.script) {\n\t\t\t// @ts-expect-error TODO there might be a bug in hiding here\n\t\t\tresult.update_source(await process_tag('script', preprocessor.script, result));\n\t\t}\n\t\tif (preprocessor.style) {\n\t\t\t// @ts-expect-error TODO there might be a bug in hiding here\n\t\t\tresult.update_source(await process_tag('style', preprocessor.style, result));\n\t\t}\n\t}\n\n\treturn result.to_processed();\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/preprocess/legacy-public.d.ts",
    "content": "import {\n\tMarkupPreprocessor as M,\n\tPreprocessor as PP,\n\tPreprocessorGroup as PG,\n\tProcessed as P,\n\tSveltePreprocessor as S\n} from './public.js';\n\n/** @deprecated import this from 'svelte/preprocess' instead */\nexport type MarkupPreprocessor = M;\n/** @deprecated import this from 'svelte/preprocess' instead */\nexport type Preprocessor = PP;\n/** @deprecated import this from 'svelte/preprocess' instead */\nexport type PreprocessorGroup = PG;\n/** @deprecated import this from 'svelte/preprocess' instead */\nexport type Processed = P;\n/** @deprecated import this from 'svelte/preprocess' instead */\nexport type SveltePreprocessor<PreprocessorType extends keyof PG, Options = any> = S<\n\tPreprocessorType,\n\tOptions\n>;\n"
  },
  {
    "path": "packages/svelte/src/compiler/preprocess/private.d.ts",
    "content": "import { DecodedSourceMap } from '@jridgewell/remapping';\nimport { Location } from 'locate-character';\nimport { MappedCode } from '../utils/mapped_code.js';\n\nexport interface Source {\n\tsource: string;\n\tget_location: (search: number) => Location;\n\tfile_basename: string;\n\tfilename?: string;\n}\n\nexport interface SourceUpdate {\n\tstring?: string;\n\tmap?: DecodedSourceMap;\n\tdependencies?: string[];\n}\n\nexport interface Replacement {\n\toffset: number;\n\tlength: number;\n\treplacement: MappedCode;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/preprocess/public.d.ts",
    "content": "/**\n * The result of a preprocessor run. If the preprocessor does not return a result, it is assumed that the code is unchanged.\n */\nexport interface Processed {\n\t/**\n\t * The new code\n\t */\n\tcode: string;\n\t/**\n\t * A source map mapping back to the original code\n\t */\n\tmap?: string | object; // we are opaque with the type here to avoid dependency on the remapping module for our public types.\n\t/**\n\t * A list of additional files to watch for changes\n\t */\n\tdependencies?: string[];\n\t/**\n\t * Only for script/style preprocessors: The updated attributes to set on the tag. If undefined, attributes stay unchanged.\n\t */\n\tattributes?: Record<string, string | boolean>;\n\ttoString?: () => string;\n}\n\n/**\n * A markup preprocessor that takes a string of code and returns a processed version.\n */\nexport type MarkupPreprocessor = (options: {\n\t/**\n\t * The whole Svelte file content\n\t */\n\tcontent: string;\n\t/**\n\t * The filename of the Svelte file\n\t */\n\tfilename?: string;\n}) => Processed | void | Promise<Processed | void>;\n\n/**\n * A script/style preprocessor that takes a string of code and returns a processed version.\n */\nexport type Preprocessor = (options: {\n\t/**\n\t * The script/style tag content\n\t */\n\tcontent: string;\n\t/**\n\t * The attributes on the script/style tag\n\t */\n\tattributes: Record<string, string | boolean>;\n\t/**\n\t * The whole Svelte file content\n\t */\n\tmarkup: string;\n\t/**\n\t * The filename of the Svelte file\n\t */\n\tfilename?: string;\n}) => Processed | void | Promise<Processed | void>;\n\n/**\n * A preprocessor group is a set of preprocessors that are applied to a Svelte file.\n */\nexport interface PreprocessorGroup {\n\t/** Name of the preprocessor. Will be a required option in the next major version */\n\tname?: string;\n\tmarkup?: MarkupPreprocessor;\n\tstyle?: Preprocessor;\n\tscript?: Preprocessor;\n}\n\n/**\n * @description Utility type to extract the type of a preprocessor from a preprocessor group\n * @deprecated Create this utility type yourself instead\n */\nexport interface SveltePreprocessor<\n\tPreprocessorType extends keyof PreprocessorGroup,\n\tOptions = any\n> {\n\t(options?: Options): Required<Pick<PreprocessorGroup, PreprocessorType>>;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/preprocess/replace_in_code.js",
    "content": "/** @import { Source, Replacement } from './private.js' */\nimport { MappedCode } from '../utils/mapped_code.js';\n\n/**\n * @param {string} code_slice\n * @param {number} offset\n * @param {Source} opts\n * @returns {Source}\n */\nexport function slice_source(code_slice, offset, { file_basename, filename, get_location }) {\n\treturn {\n\t\tsource: code_slice,\n\t\tget_location: (index) => get_location(index + offset),\n\t\tfile_basename,\n\t\tfilename\n\t};\n}\n\n/**\n * @param {RegExp} re\n * @param {(...match: any[]) => Promise<MappedCode>} get_replacement\n * @param {string} source\n */\nfunction calculate_replacements(re, get_replacement, source) {\n\t/**\n\t * @type {Array<Promise<Replacement>>}\n\t */\n\tconst replacements = [];\n\tsource.replace(re, (...match) => {\n\t\treplacements.push(\n\t\t\tget_replacement(...match).then((replacement) => {\n\t\t\t\tconst matched_string = match[0];\n\t\t\t\tconst offset = match[match.length - 2];\n\t\t\t\treturn { offset, length: matched_string.length, replacement };\n\t\t\t})\n\t\t);\n\t\treturn '';\n\t});\n\treturn Promise.all(replacements);\n}\n\n/**\n * @param {Replacement[]} replacements\n * @param {Source} source\n * @returns {MappedCode}\n */\nfunction perform_replacements(replacements, source) {\n\tconst out = new MappedCode();\n\tlet last_end = 0;\n\tfor (const { offset, length, replacement } of replacements) {\n\t\tconst unchanged_prefix = MappedCode.from_source(\n\t\t\tslice_source(source.source.slice(last_end, offset), last_end, source)\n\t\t);\n\t\tout.concat(unchanged_prefix).concat(replacement);\n\t\tlast_end = offset + length;\n\t}\n\tconst unchanged_suffix = MappedCode.from_source(\n\t\tslice_source(source.source.slice(last_end), last_end, source)\n\t);\n\treturn out.concat(unchanged_suffix);\n}\n\n/**\n * @param {RegExp} regex\n * @param {(...match: any[]) => Promise<MappedCode>} get_replacement\n * @param {Source} location\n * @returns {Promise<MappedCode>}\n */\nexport async function replace_in_code(regex, get_replacement, location) {\n\tconst replacements = await calculate_replacements(regex, get_replacement, location.source);\n\treturn perform_replacements(replacements, location);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/print/index.js",
    "content": "/** @import { AST } from '#compiler'; */\n/** @import { Context, Visitors } from 'esrap' */\nimport * as esrap from 'esrap';\nimport ts from 'esrap/languages/ts';\nimport { is_void } from '../../utils.js';\n\n/** Threshold for when content should be formatted on separate lines */\nconst LINE_BREAK_THRESHOLD = 50;\n\n/**\n * `print` converts a Svelte AST node back into Svelte source code.\n * It is primarily intended for tools that parse and transform components using the compiler’s modern AST representation.\n *\n * `print(ast)` requires an AST node produced by parse with modern: true, or any sub-node within that modern AST.\n * The result contains the generated source and a corresponding source map.\n * The output is valid Svelte, but formatting details such as whitespace or quoting may differ from the original.\n * @param {AST.SvelteNode} ast\n * @param {import('./types.js').Options | undefined} options\n */\nexport function print(ast, options = undefined) {\n\tconst comments = (ast.type === 'Root' && ast.comments) || [];\n\n\treturn esrap.print(\n\t\tast,\n\t\t/** @type {Visitors<AST.SvelteNode>} */ ({\n\t\t\t...ts({\n\t\t\t\tcomments,\n\t\t\t\tgetLeadingComments: options?.getLeadingComments,\n\t\t\t\tgetTrailingComments: options?.getTrailingComments\n\t\t\t}),\n\t\t\t...svelte_visitors(comments),\n\t\t\t...css_visitors\n\t\t})\n\t);\n}\n\n/**\n * @param {Context} context\n * @param {AST.SvelteNode} node\n * @param {boolean} allow_inline\n */\nfunction block(context, node, allow_inline = false) {\n\tconst child_context = context.new();\n\tchild_context.visit(node);\n\n\tif (child_context.empty()) {\n\t\treturn;\n\t}\n\n\tif (allow_inline && !child_context.multiline) {\n\t\tcontext.append(child_context);\n\t} else {\n\t\tcontext.indent();\n\t\tcontext.newline();\n\t\tcontext.append(child_context);\n\t\tcontext.dedent();\n\t\tcontext.newline();\n\t}\n}\n\n/**\n * @param {AST.BaseNode} node\n * @param {AST.BaseElement['attributes']} attributes\n * @param {Context} context\n * @param {AST.JSComment[]} comments\n * @returns {boolean} true if attributes were formatted on multiple lines\n */\nfunction attributes(node, attributes, context, comments) {\n\tif (attributes.length === 0) {\n\t\treturn false;\n\t}\n\n\tlet length = -1;\n\n\tlet comment_index = comments.findIndex((comment) => comment.start > node.start);\n\n\tif (comment_index === -1) {\n\t\tcomment_index = comments.length;\n\t}\n\n\tconst separator = context.new();\n\n\tconst children = attributes.map((attribute) => {\n\t\tconst child_context = context.new();\n\n\t\twhile (comment_index < comments.length) {\n\t\t\tconst comment = comments[comment_index];\n\n\t\t\tif (comment.start < attribute.start) {\n\t\t\t\tif (comment.type === 'Line') {\n\t\t\t\t\tchild_context.write('//' + comment.value);\n\t\t\t\t\tchild_context.newline();\n\t\t\t\t} else {\n\t\t\t\t\tchild_context.write('/*' + comment.value + '*/'); // TODO match indentation?\n\t\t\t\t\tchild_context.append(separator);\n\t\t\t\t}\n\n\t\t\t\tcomment_index += 1;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchild_context.visit(attribute);\n\n\t\tlength += child_context.measure() + 1;\n\n\t\treturn child_context;\n\t});\n\n\tlet multiline = context.multiline || length > LINE_BREAK_THRESHOLD;\n\n\tif (multiline) {\n\t\tseparator.newline();\n\t\tcontext.indent();\n\t\tfor (const child of children) {\n\t\t\tcontext.newline();\n\t\t\tcontext.append(child);\n\t\t}\n\t\tcontext.dedent();\n\t\tcontext.newline();\n\t} else {\n\t\tseparator.write(' ');\n\t\tfor (const child of children) {\n\t\t\tcontext.write(' ');\n\t\t\tcontext.append(child);\n\t\t}\n\t}\n\n\treturn multiline;\n}\n\n/**\n * @param {AST.BaseElement} node\n * @param {Context} context\n * @param {AST.JSComment[]} comments\n */\nfunction base_element(node, context, comments) {\n\tconst child_context = context.new();\n\n\tchild_context.write('<' + node.name);\n\n\t// Handle special Svelte components/elements that need 'this' attribute\n\tif (node.type === 'SvelteComponent') {\n\t\tchild_context.write(' this={');\n\t\tchild_context.visit(/** @type {AST.SvelteComponent} */ (node).expression);\n\t\tchild_context.write('}');\n\t} else if (node.type === 'SvelteElement') {\n\t\tchild_context.write(' this={');\n\t\tchild_context.visit(/** @type {AST.SvelteElement} */ (node).tag);\n\t\tchild_context.write('}');\n\t}\n\n\tconst multiline_attributes = attributes(node, node.attributes, child_context, comments);\n\tconst is_doctype_node = node.name.toLowerCase() === '!doctype';\n\tconst is_self_closing =\n\t\tis_void(node.name) || (node.type === 'Component' && node.fragment.nodes.length === 0);\n\n\tif (is_doctype_node) child_context.write(`>`);\n\telse if (is_self_closing) {\n\t\tchild_context.write(`${multiline_attributes ? '' : ' '}/>`);\n\t} else {\n\t\tchild_context.write('>');\n\t\tblock(child_context, node.fragment, true);\n\t\tchild_context.write(`</${node.name}>`);\n\t}\n\n\tcontext.append(child_context);\n}\n\n/** @type {Visitors<AST.SvelteNode>} */\nconst css_visitors = {\n\tAtrule(node, context) {\n\t\tcontext.write(`@${node.name}`);\n\t\tif (node.prelude) context.write(` ${node.prelude}`);\n\n\t\tif (node.block) {\n\t\t\tcontext.write(' ');\n\t\t\tcontext.visit(node.block);\n\t\t} else {\n\t\t\tcontext.write(';');\n\t\t}\n\t},\n\n\tAttributeSelector(node, context) {\n\t\tcontext.write(`[${node.name}`);\n\t\tif (node.matcher) {\n\t\t\tcontext.write(node.matcher);\n\t\t\tcontext.write(`\"${node.value}\"`);\n\t\t\tif (node.flags) {\n\t\t\t\tcontext.write(` ${node.flags}`);\n\t\t\t}\n\t\t}\n\t\tcontext.write(']');\n\t},\n\n\tBlock(node, context) {\n\t\tcontext.write('{');\n\n\t\tif (node.children.length > 0) {\n\t\t\tcontext.indent();\n\t\t\tcontext.newline();\n\n\t\t\tlet started = false;\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (started) {\n\t\t\t\t\tcontext.newline();\n\t\t\t\t}\n\n\t\t\t\tcontext.visit(child);\n\n\t\t\t\tstarted = true;\n\t\t\t}\n\n\t\t\tcontext.dedent();\n\t\t\tcontext.newline();\n\t\t}\n\n\t\tcontext.write('}');\n\t},\n\n\tClassSelector(node, context) {\n\t\tcontext.write(`.${node.name}`);\n\t},\n\n\tComplexSelector(node, context) {\n\t\tfor (const selector of node.children) {\n\t\t\tcontext.visit(selector);\n\t\t}\n\t},\n\n\tDeclaration(node, context) {\n\t\tcontext.write(`${node.property}: ${node.value};`);\n\t},\n\n\tIdSelector(node, context) {\n\t\tcontext.write(`#${node.name}`);\n\t},\n\n\tNestingSelector(node, context) {\n\t\tcontext.write('&');\n\t},\n\n\tNth(node, context) {\n\t\tcontext.write(node.value);\n\t},\n\n\tPercentage(node, context) {\n\t\tcontext.write(`${node.value}%`);\n\t},\n\n\tPseudoClassSelector(node, context) {\n\t\tcontext.write(`:${node.name}`);\n\n\t\tif (node.args) {\n\t\t\tcontext.write('(');\n\n\t\t\tlet started = false;\n\n\t\t\tfor (const arg of node.args.children) {\n\t\t\t\tif (started) {\n\t\t\t\t\tcontext.write(', ');\n\t\t\t\t}\n\n\t\t\t\tcontext.visit(arg);\n\n\t\t\t\tstarted = true;\n\t\t\t}\n\n\t\t\tcontext.write(')');\n\t\t}\n\t},\n\n\tPseudoElementSelector(node, context) {\n\t\tcontext.write(`::${node.name}`);\n\t},\n\n\tRelativeSelector(node, context) {\n\t\tif (node.combinator) {\n\t\t\tif (node.combinator.name === ' ') {\n\t\t\t\tcontext.write(' ');\n\t\t\t} else {\n\t\t\t\tcontext.write(` ${node.combinator.name} `);\n\t\t\t}\n\t\t}\n\n\t\tfor (const selector of node.selectors) {\n\t\t\tcontext.visit(selector);\n\t\t}\n\t},\n\n\tRule(node, context) {\n\t\tlet started = false;\n\n\t\tfor (const selector of node.prelude.children) {\n\t\t\tif (started) {\n\t\t\t\tcontext.write(',');\n\t\t\t\tcontext.newline();\n\t\t\t}\n\n\t\t\tcontext.visit(selector);\n\t\t\tstarted = true;\n\t\t}\n\n\t\tcontext.write(' ');\n\t\tcontext.visit(node.block);\n\t},\n\n\tSelectorList(node, context) {\n\t\tlet started = false;\n\t\tfor (const selector of node.children) {\n\t\t\tif (started) {\n\t\t\t\tcontext.write(', ');\n\t\t\t}\n\n\t\t\tcontext.visit(selector);\n\t\t\tstarted = true;\n\t\t}\n\t},\n\n\tTypeSelector(node, context) {\n\t\tcontext.write(node.name);\n\t}\n};\n\n/**\n * @param {AST.JSComment[]} comments\n * @returns {Visitors<AST.SvelteNode>}\n */\nconst svelte_visitors = (comments) => ({\n\tRoot(node, context) {\n\t\tif (node.options) {\n\t\t\tcontext.write('<svelte:options');\n\n\t\t\tfor (const attribute of node.options.attributes) {\n\t\t\t\tcontext.write(' ');\n\t\t\t\tcontext.visit(attribute);\n\t\t\t}\n\n\t\t\tcontext.write(' />');\n\t\t}\n\n\t\tlet started = false;\n\n\t\tfor (const item of [node.module, node.instance, node.fragment, node.css]) {\n\t\t\tif (!item) continue;\n\n\t\t\tif (started) {\n\t\t\t\tcontext.margin();\n\t\t\t\tcontext.newline();\n\t\t\t}\n\n\t\t\tcontext.visit(item);\n\t\t\tstarted = true;\n\t\t}\n\t},\n\n\tScript(node, context) {\n\t\tcontext.write('<script');\n\t\tattributes(node, node.attributes, context, comments);\n\t\tcontext.write('>');\n\t\tblock(context, node.content);\n\t\tcontext.write('</script>');\n\t},\n\n\tFragment(node, context) {\n\t\t/** @type {AST.SvelteNode[][]} */\n\t\tconst items = [];\n\n\t\t/** @type {AST.SvelteNode[]} */\n\t\tlet sequence = [];\n\n\t\tconst flush = () => {\n\t\t\titems.push(sequence);\n\t\t\tsequence = [];\n\t\t};\n\n\t\tfor (let i = 0; i < node.nodes.length; i += 1) {\n\t\t\tlet child_node = node.nodes[i];\n\n\t\t\tconst prev = node.nodes[i - 1];\n\t\t\tconst next = node.nodes[i + 1];\n\n\t\t\tif (child_node.type === 'Text') {\n\t\t\t\tchild_node = { ...child_node }; // always clone, so we can safely mutate\n\n\t\t\t\tchild_node.data = child_node.data.replace(/[^\\S]+/g, ' ');\n\n\t\t\t\t// trim fragment\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tchild_node.data = child_node.data.trimStart();\n\t\t\t\t}\n\n\t\t\t\tif (i === node.nodes.length - 1) {\n\t\t\t\t\tchild_node.data = child_node.data.trimEnd();\n\t\t\t\t}\n\n\t\t\t\tif (child_node.data === '') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (child_node.data.startsWith(' ') && prev && prev.type !== 'ExpressionTag') {\n\t\t\t\t\tflush();\n\t\t\t\t\tchild_node.data = child_node.data.trimStart();\n\t\t\t\t}\n\n\t\t\t\tif (child_node.data !== '') {\n\t\t\t\t\tsequence.push({ ...child_node, data: child_node.data });\n\n\t\t\t\t\tif (child_node.data.endsWith(' ') && next && next.type !== 'ExpressionTag') {\n\t\t\t\t\t\tflush();\n\t\t\t\t\t\tchild_node.data = child_node.data.trimStart();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst is_block_element =\n\t\t\t\t\tchild_node.type === 'RegularElement' ||\n\t\t\t\t\tchild_node.type === 'Component' ||\n\t\t\t\t\tchild_node.type === 'SvelteHead' ||\n\t\t\t\t\tchild_node.type === 'SvelteFragment' ||\n\t\t\t\t\tchild_node.type === 'SvelteBoundary' ||\n\t\t\t\t\tchild_node.type === 'SvelteDocument' ||\n\t\t\t\t\tchild_node.type === 'SvelteSelf' ||\n\t\t\t\t\tchild_node.type === 'SvelteWindow' ||\n\t\t\t\t\tchild_node.type === 'SvelteComponent' ||\n\t\t\t\t\tchild_node.type === 'SvelteElement' ||\n\t\t\t\t\tchild_node.type === 'SlotElement' ||\n\t\t\t\t\tchild_node.type === 'TitleElement';\n\n\t\t\t\tif (is_block_element && sequence.length > 0) flush();\n\t\t\t\tsequence.push(child_node);\n\t\t\t\tif (is_block_element) flush();\n\t\t\t}\n\t\t}\n\n\t\tflush();\n\n\t\tlet multiline = false;\n\t\tlet width = 0;\n\n\t\tconst child_contexts = items\n\t\t\t.filter((x) => x.length > 0)\n\t\t\t.map((sequence) => {\n\t\t\t\tconst child_context = context.new();\n\n\t\t\t\tfor (const node of sequence) {\n\t\t\t\t\tchild_context.visit(node);\n\t\t\t\t\tmultiline ||= child_context.multiline;\n\t\t\t\t}\n\n\t\t\t\twidth += child_context.measure();\n\n\t\t\t\treturn child_context;\n\t\t\t});\n\n\t\tmultiline ||= width > LINE_BREAK_THRESHOLD;\n\n\t\tfor (let i = 0; i < child_contexts.length; i += 1) {\n\t\t\tconst prev = child_contexts[i];\n\t\t\tconst next = child_contexts[i + 1];\n\n\t\t\tcontext.append(prev);\n\n\t\t\tif (next) {\n\t\t\t\tif (prev.multiline || next.multiline) {\n\t\t\t\t\tcontext.margin();\n\t\t\t\t\tcontext.newline();\n\t\t\t\t} else if (multiline) {\n\t\t\t\t\tcontext.newline();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tAnimateDirective(node, context) {\n\t\tcontext.write(`animate:${node.name}`);\n\t\tif (\n\t\t\tnode.expression !== null &&\n\t\t\t!(node.expression.type === 'Identifier' && node.expression.name === node.name)\n\t\t) {\n\t\t\tcontext.write('={');\n\t\t\tcontext.visit(node.expression);\n\t\t\tcontext.write('}');\n\t\t}\n\t},\n\n\tAttachTag(node, context) {\n\t\tcontext.write('{@attach ');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t},\n\n\tAttribute(node, context) {\n\t\tcontext.write(node.name);\n\n\t\tif (node.value === true) return;\n\n\t\tcontext.write('=');\n\n\t\tif (Array.isArray(node.value)) {\n\t\t\tif (node.value.length > 1 || node.value[0].type === 'Text') {\n\t\t\t\tcontext.write('\"');\n\t\t\t}\n\n\t\t\tfor (const chunk of node.value) {\n\t\t\t\tcontext.visit(chunk);\n\t\t\t}\n\n\t\t\tif (node.value.length > 1 || node.value[0].type === 'Text') {\n\t\t\t\tcontext.write('\"');\n\t\t\t}\n\t\t} else {\n\t\t\tcontext.visit(node.value);\n\t\t}\n\t},\n\n\tAwaitBlock(node, context) {\n\t\tcontext.write(`{#await `);\n\t\tcontext.visit(node.expression);\n\n\t\tif (node.pending) {\n\t\t\tcontext.write('}');\n\t\t\tblock(context, node.pending);\n\t\t\tcontext.write('{:');\n\t\t} else {\n\t\t\tcontext.write(' ');\n\t\t}\n\n\t\tif (node.then) {\n\t\t\tcontext.write(node.value ? 'then ' : 'then');\n\t\t\tif (node.value) context.visit(node.value);\n\t\t\tcontext.write('}');\n\n\t\t\tblock(context, node.then);\n\n\t\t\tif (node.catch) {\n\t\t\t\tcontext.write('{:');\n\t\t\t}\n\t\t}\n\n\t\tif (node.catch) {\n\t\t\tcontext.write(node.value ? 'catch ' : 'catch');\n\t\t\tif (node.error) context.visit(node.error);\n\t\t\tcontext.write('}');\n\n\t\t\tblock(context, node.catch);\n\t\t}\n\n\t\tcontext.write('{/await}');\n\t},\n\n\tBindDirective(node, context) {\n\t\tcontext.write(`bind:${node.name}`);\n\n\t\tif (node.expression.type === 'Identifier' && node.expression.name === node.name) {\n\t\t\t// shorthand\n\t\t\treturn;\n\t\t}\n\n\t\tcontext.write('={');\n\n\t\tif (node.expression.type === 'SequenceExpression') {\n\t\t\tcontext.visit(node.expression.expressions[0]);\n\t\t\tcontext.write(', ');\n\t\t\tcontext.visit(node.expression.expressions[1]);\n\t\t} else {\n\t\t\tcontext.visit(node.expression);\n\t\t}\n\n\t\tcontext.write('}');\n\t},\n\n\tClassDirective(node, context) {\n\t\tcontext.write(`class:${node.name}`);\n\t\tif (\n\t\t\tnode.expression !== null &&\n\t\t\t!(node.expression.type === 'Identifier' && node.expression.name === node.name)\n\t\t) {\n\t\t\tcontext.write('={');\n\t\t\tcontext.visit(node.expression);\n\t\t\tcontext.write('}');\n\t\t}\n\t},\n\n\tComment(node, context) {\n\t\tcontext.write('<!--' + node.data + '-->');\n\t},\n\n\tComponent(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tConstTag(node, context) {\n\t\tcontext.write('{@const ');\n\t\tconst declarators = node.declaration.declarations;\n\t\tfor (let i = 0; i < declarators.length; i++) {\n\t\t\tif (i > 0) context.write(', ');\n\t\t\tcontext.visit(declarators[i]);\n\t\t}\n\n\t\tcontext.write('}');\n\t},\n\n\tDebugTag(node, context) {\n\t\tcontext.write('{@debug ');\n\t\tlet started = false;\n\t\tfor (const identifier of node.identifiers) {\n\t\t\tif (started) {\n\t\t\t\tcontext.write(', ');\n\t\t\t}\n\t\t\tcontext.visit(identifier);\n\t\t\tstarted = true;\n\t\t}\n\t\tcontext.write('}');\n\t},\n\n\tEachBlock(node, context) {\n\t\tcontext.write('{#each ');\n\t\tcontext.visit(node.expression);\n\n\t\tif (node.context) {\n\t\t\tcontext.write(' as ');\n\t\t\tcontext.visit(node.context);\n\t\t}\n\n\t\tif (node.index) {\n\t\t\tcontext.write(`, ${node.index}`);\n\t\t}\n\n\t\tif (node.key) {\n\t\t\tcontext.write(' (');\n\t\t\tcontext.visit(node.key);\n\t\t\tcontext.write(')');\n\t\t}\n\n\t\tcontext.write('}');\n\n\t\tblock(context, node.body);\n\n\t\tif (node.fallback) {\n\t\t\tcontext.write('{:else}');\n\t\t\tblock(context, node.fallback);\n\t\t}\n\n\t\tcontext.write('{/each}');\n\t},\n\n\tExpressionTag(node, context) {\n\t\tcontext.write('{');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t},\n\n\tHtmlTag(node, context) {\n\t\tcontext.write('{@html ');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t},\n\n\tIfBlock(node, context) {\n\t\tif (node.elseif) {\n\t\t\tcontext.write('{:else if ');\n\t\t\tcontext.visit(node.test);\n\t\t\tcontext.write('}');\n\n\t\t\tblock(context, node.consequent);\n\t\t} else {\n\t\t\tcontext.write('{#if ');\n\t\t\tcontext.visit(node.test);\n\t\t\tcontext.write('}');\n\n\t\t\tblock(context, node.consequent);\n\t\t}\n\n\t\tif (node.alternate !== null) {\n\t\t\tif (\n\t\t\t\t!(\n\t\t\t\t\tnode.alternate.nodes.length === 1 &&\n\t\t\t\t\tnode.alternate.nodes[0].type === 'IfBlock' &&\n\t\t\t\t\tnode.alternate.nodes[0].elseif\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcontext.write('{:else}');\n\t\t\t\tblock(context, node.alternate);\n\t\t\t} else {\n\t\t\t\tcontext.visit(node.alternate);\n\t\t\t}\n\t\t}\n\n\t\tif (!node.elseif) {\n\t\t\tcontext.write('{/if}');\n\t\t}\n\t},\n\n\tKeyBlock(node, context) {\n\t\tcontext.write('{#key ');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t\tblock(context, node.fragment);\n\t\tcontext.write('{/key}');\n\t},\n\n\tLetDirective(node, context) {\n\t\tcontext.write(`let:${node.name}`);\n\t\tif (\n\t\t\tnode.expression !== null &&\n\t\t\t!(node.expression.type === 'Identifier' && node.expression.name === node.name)\n\t\t) {\n\t\t\tcontext.write('={');\n\t\t\tcontext.visit(node.expression);\n\t\t\tcontext.write('}');\n\t\t}\n\t},\n\n\tOnDirective(node, context) {\n\t\tcontext.write(`on:${node.name}`);\n\t\tfor (const modifier of node.modifiers) {\n\t\t\tcontext.write(`|${modifier}`);\n\t\t}\n\t\tif (\n\t\t\tnode.expression !== null &&\n\t\t\t!(node.expression.type === 'Identifier' && node.expression.name === node.name)\n\t\t) {\n\t\t\tcontext.write('={');\n\t\t\tcontext.visit(node.expression);\n\t\t\tcontext.write('}');\n\t\t}\n\t},\n\n\tRegularElement(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tRenderTag(node, context) {\n\t\tcontext.write('{@render ');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t},\n\n\tSlotElement(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tSnippetBlock(node, context) {\n\t\tcontext.write('{#snippet ');\n\t\tcontext.visit(node.expression);\n\n\t\tif (node.typeParams) {\n\t\t\tcontext.write(`<${node.typeParams}>`);\n\t\t}\n\n\t\tcontext.write('(');\n\n\t\tfor (let i = 0; i < node.parameters.length; i += 1) {\n\t\t\tif (i > 0) context.write(', ');\n\t\t\tcontext.visit(node.parameters[i]);\n\t\t}\n\n\t\tcontext.write(')}');\n\t\tblock(context, node.body);\n\t\tcontext.write('{/snippet}');\n\t},\n\n\tSpreadAttribute(node, context) {\n\t\tcontext.write('{...');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t},\n\n\tStyleDirective(node, context) {\n\t\tcontext.write(`style:${node.name}`);\n\t\tfor (const modifier of node.modifiers) {\n\t\t\tcontext.write(`|${modifier}`);\n\t\t}\n\n\t\tif (node.value === true) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontext.write('=');\n\n\t\tif (Array.isArray(node.value)) {\n\t\t\tcontext.write('\"');\n\n\t\t\tfor (const tag of node.value) {\n\t\t\t\tcontext.visit(tag);\n\t\t\t}\n\n\t\t\tcontext.write('\"');\n\t\t} else {\n\t\t\tcontext.visit(node.value);\n\t\t}\n\t},\n\n\tStyleSheet(node, context) {\n\t\tcontext.write('<style');\n\t\tattributes(node, node.attributes, context, comments);\n\t\tcontext.write('>');\n\n\t\tif (node.children.length > 0) {\n\t\t\tcontext.indent();\n\t\t\tcontext.newline();\n\n\t\t\tlet started = false;\n\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (started) {\n\t\t\t\t\tcontext.margin();\n\t\t\t\t\tcontext.newline();\n\t\t\t\t}\n\n\t\t\t\tcontext.visit(child);\n\t\t\t\tstarted = true;\n\t\t\t}\n\n\t\t\tcontext.dedent();\n\t\t\tcontext.newline();\n\t\t}\n\n\t\tcontext.write('</style>');\n\t},\n\n\tSvelteBoundary(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tSvelteComponent(node, context) {\n\t\tcontext.write('<svelte:component');\n\n\t\tcontext.write(' this={');\n\t\tcontext.visit(node.expression);\n\t\tcontext.write('}');\n\t\tattributes(node, node.attributes, context, comments);\n\t\tif (node.fragment && node.fragment.nodes.length > 0) {\n\t\t\tcontext.write('>');\n\t\t\tblock(context, node.fragment, true);\n\t\t\tcontext.write(`</svelte:component>`);\n\t\t} else {\n\t\t\tcontext.write(' />');\n\t\t}\n\t},\n\n\tSvelteDocument(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tSvelteElement(node, context) {\n\t\tcontext.write('<svelte:element ');\n\n\t\tcontext.write('this={');\n\t\tcontext.visit(node.tag);\n\t\tcontext.write('}');\n\t\tattributes(node, node.attributes, context, comments);\n\n\t\tif (node.fragment && node.fragment.nodes.length > 0) {\n\t\t\tcontext.write('>');\n\t\t\tblock(context, node.fragment);\n\t\t\tcontext.write(`</svelte:element>`);\n\t\t} else {\n\t\t\tcontext.write(' />');\n\t\t}\n\t},\n\n\tSvelteFragment(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tSvelteHead(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tSvelteSelf(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tSvelteWindow(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tText(node, context) {\n\t\tcontext.write(node.data);\n\t},\n\n\tTitleElement(node, context) {\n\t\tbase_element(node, context, comments);\n\t},\n\n\tTransitionDirective(node, context) {\n\t\tconst directive = node.intro && node.outro ? 'transition' : node.intro ? 'in' : 'out';\n\t\tcontext.write(`${directive}:${node.name}`);\n\t\tfor (const modifier of node.modifiers) {\n\t\t\tcontext.write(`|${modifier}`);\n\t\t}\n\t\tif (\n\t\t\tnode.expression !== null &&\n\t\t\t!(node.expression.type === 'Identifier' && node.expression.name === node.name)\n\t\t) {\n\t\t\tcontext.write('={');\n\t\t\tcontext.visit(node.expression);\n\t\t\tcontext.write('}');\n\t\t}\n\t},\n\n\tUseDirective(node, context) {\n\t\tcontext.write(`use:${node.name}`);\n\t\tif (\n\t\t\tnode.expression !== null &&\n\t\t\t!(node.expression.type === 'Identifier' && node.expression.name === node.name)\n\t\t) {\n\t\t\tcontext.write('={');\n\t\t\tcontext.visit(node.expression);\n\t\t\tcontext.write('}');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/src/compiler/print/types.d.ts",
    "content": "import 'esrap'; // This import is required to make typescript happy when `skipLibCheck` is enabled\nimport type ts from 'esrap/languages/ts';\n\nexport type Options = {\n\tgetLeadingComments?: NonNullable<Parameters<typeof ts>[0]>['getLeadingComments'] | undefined;\n\tgetTrailingComments?: NonNullable<Parameters<typeof ts>[0]>['getTrailingComments'] | undefined;\n};\n"
  },
  {
    "path": "packages/svelte/src/compiler/private.d.ts",
    "content": "export * from './types/index';\nexport * from './index';\n"
  },
  {
    "path": "packages/svelte/src/compiler/public.d.ts",
    "content": "export * from './index.js';\nexport type {\n\tMarkupPreprocessor,\n\tPreprocessor,\n\tPreprocessorGroup,\n\tProcessed\n} from './preprocess/public';\nexport type {\n\tCompileError,\n\tCompileOptions,\n\tModuleCompileOptions,\n\tCompileResult,\n\tWarning\n} from './types/index';\nexport type { AST } from './types/template';\n"
  },
  {
    "path": "packages/svelte/src/compiler/state.js",
    "content": "/** @import { Location } from 'locate-character' */\n/** @import { CompileOptions } from './types' */\n/** @import { AST, Warning } from '#compiler' */\nimport { getLocator } from 'locate-character';\nimport { sanitize_location } from '../utils.js';\n\n/** @typedef {{ start?: number, end?: number }} NodeLike */\n\n/** @type {Warning[]} */\nexport let warnings = [];\n\n/**\n * The filename relative to the rootDir (if specified).\n * This should not be used in the compiler output except in dev mode\n * @type {string}\n */\nexport let filename;\n\n/**\n * This is the fallback used when no filename is specified.\n */\nexport const UNKNOWN_FILENAME = '(unknown)';\n\n/**\n * The name of the component that is used in the `export default function ...` statement.\n */\nexport let component_name = '<unknown>';\n\n/**\n * The original source code\n * @type {string}\n */\nexport let source;\n\n/**\n * The source code split into lines (set by `set_source`)\n * @type {string[]}\n */\nexport let source_lines = [];\n\n/**\n * True if compiling with `dev: true`\n * @type {boolean}\n */\nexport let dev;\n\nexport let runes = false;\n\n/** @type {(index: number) => Location} */\nexport let locator;\n\n/** @param {string} value */\nexport function set_source(value) {\n\tsource = value;\n\tsource_lines = source.split('\\n');\n\n\tconst l = getLocator(source, { offsetLine: 1 });\n\n\tlocator = (i) => {\n\t\tconst loc = l(i);\n\t\tif (!loc) throw new Error('An impossible situation occurred');\n\n\t\treturn loc;\n\t};\n}\n\n/**\n * @param {AST.SvelteNode & { start?: number | undefined }} node\n */\nexport function locate_node(node) {\n\tconst loc = locator(/** @type {number} */ (node.start));\n\treturn `${sanitize_location(filename)}:${loc?.line}:${loc.column}`;\n}\n\n/** @type {NonNullable<CompileOptions['warningFilter']>} */\nexport let warning_filter;\n\n/**\n * The current stack of ignored warnings\n * @type {Set<string>[]}\n */\nexport let ignore_stack = [];\n\n/**\n * For each node the list of warnings that should be ignored for that node.\n * Exists in addition to `ignore_stack` because not all warnings are emitted\n * while the stack is being built.\n * @type {Map<AST.SvelteNode | NodeLike, Set<string>[]>}\n */\nexport let ignore_map = new Map();\n\n/**\n * Cached snapshot of the ignore_stack. Only re-created when the stack changes\n * (i.e. when push_ignore or pop_ignore is called), avoiding a structuredClone\n * on every node visit during analysis.\n * @type {Set<string>[] | null}\n */\nlet cached_ignore_snapshot = null;\n\n/**\n * Returns a snapshot of the current ignore_stack, reusing a cached copy\n * when the stack hasn't changed since the last call.\n * @returns {Set<string>[]}\n */\nexport function get_ignore_snapshot() {\n\tif (cached_ignore_snapshot === null) {\n\t\tcached_ignore_snapshot = ignore_stack.map((s) => new Set(s));\n\t}\n\treturn cached_ignore_snapshot;\n}\n\n/**\n * @param {string[]} ignores\n */\nexport function push_ignore(ignores) {\n\tconst next = new Set([...(ignore_stack.at(-1) || []), ...ignores]);\n\tignore_stack.push(next);\n\tcached_ignore_snapshot = null;\n}\n\nexport function pop_ignore() {\n\tignore_stack.pop();\n\tcached_ignore_snapshot = null;\n}\n\n/**\n * @param {AST.SvelteNode | NodeLike} node\n * @param {typeof import('../constants.js').IGNORABLE_RUNTIME_WARNINGS[number]} code\n * @returns\n */\nexport function is_ignored(node, code) {\n\treturn dev && !!ignore_map.get(node)?.some((codes) => codes.has(code));\n}\n\n/**\n * Call this to reset the compiler state. Should be called before each compilation.\n * @param {{ warning?: (warning: Warning) => boolean; filename: string | undefined }} state\n */\nexport function reset(state) {\n\tdev = false;\n\trunes = false;\n\tcomponent_name = UNKNOWN_FILENAME;\n\tsource = '';\n\tsource_lines = [];\n\tfilename = (state.filename ?? UNKNOWN_FILENAME).replace(/\\\\/g, '/');\n\twarning_filter = state.warning ?? (() => true);\n\twarnings = [];\n}\n\n/**\n * Adjust the compiler state based on the provided state object.\n * Call this after parsing and basic analysis happened.\n * @param {{\n *   dev: boolean;\n *   component_name?: string;\n *   rootDir?: string;\n *   runes: boolean;\n * }} state\n */\nexport function adjust(state) {\n\tconst root_dir = state.rootDir?.replace(/\\\\/g, '/');\n\n\tdev = state.dev;\n\trunes = state.runes;\n\tcomponent_name = state.component_name ?? UNKNOWN_FILENAME;\n\n\tif (typeof root_dir === 'string' && filename.startsWith(root_dir)) {\n\t\t// make filename relative to rootDir\n\t\tfilename = filename.replace(root_dir, '').replace(/^[/\\\\]/, '');\n\t}\n\n\tignore_stack = [];\n\tignore_map.clear();\n\tcached_ignore_snapshot = null;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/types/css.d.ts",
    "content": "import type { AST } from '#compiler';\n\nexport namespace _CSS {\n\texport interface BaseNode {\n\t\tstart: number;\n\t\tend: number;\n\t}\n\n\texport interface StyleSheetBase extends BaseNode {\n\t\tchildren: Array<Atrule | Rule>;\n\t}\n\n\texport interface StyleSheetFile extends StyleSheetBase {\n\t\ttype: 'StyleSheetFile';\n\t}\n\n\texport interface StyleSheet extends StyleSheetBase {\n\t\ttype: 'StyleSheet';\n\t\tattributes: any[]; // TODO\n\t\tcontent: {\n\t\t\tstart: number;\n\t\t\tend: number;\n\t\t\tstyles: string;\n\t\t\t/** Possible comment atop the style tag */\n\t\t\tcomment: AST.Comment | null;\n\t\t};\n\t}\n\n\texport interface Atrule extends BaseNode {\n\t\ttype: 'Atrule';\n\t\tname: string;\n\t\tprelude: string;\n\t\tblock: Block | null;\n\t}\n\n\texport interface Rule extends BaseNode {\n\t\ttype: 'Rule';\n\t\tprelude: SelectorList;\n\t\tblock: Block;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\tparent_rule: null | Rule;\n\t\t\thas_local_selectors: boolean;\n\t\t\t/**\n\t\t\t * `true` if the rule contains a ComplexSelector whose RelativeSelectors are all global or global-like\n\t\t\t */\n\t\t\thas_global_selectors: boolean;\n\t\t\t/**\n\t\t\t * `true` if the rule contains a `:global` selector, and therefore everything inside should be unscoped\n\t\t\t */\n\t\t\tis_global_block: boolean;\n\t\t};\n\t}\n\n\t/**\n\t * A list of selectors, e.g. `a, b, c {}`\n\t */\n\texport interface SelectorList extends BaseNode {\n\t\ttype: 'SelectorList';\n\t\t/**\n\t\t * The `a`, `b` and `c` in `a, b, c {}`\n\t\t */\n\t\tchildren: ComplexSelector[];\n\t}\n\n\t/**\n\t * A complex selector, e.g. `a b c {}`\n\t */\n\texport interface ComplexSelector extends BaseNode {\n\t\ttype: 'ComplexSelector';\n\t\t/**\n\t\t * The `a`, `b` and `c` in `a b c {}`\n\t\t */\n\t\tchildren: RelativeSelector[];\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\trule: null | Rule;\n\t\t\tis_global: boolean;\n\t\t\t/** True if this selector applies to an element. For global selectors, this is defined in css-analyze, for others in css-prune while scoping */\n\t\t\tused: boolean;\n\t\t};\n\t}\n\n\t/**\n\t * A relative selector, e.g the `a` and `> b` in `a > b {}`\n\t */\n\texport interface RelativeSelector extends BaseNode {\n\t\ttype: 'RelativeSelector';\n\t\t/**\n\t\t * In `a > b`, `> b` forms one relative selector, and `>` is the combinator. `null` for the first selector.\n\t\t */\n\t\tcombinator: null | Combinator;\n\t\t/**\n\t\t * The `b:is(...)` in `> b:is(...)`\n\t\t */\n\t\tselectors: SimpleSelector[];\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\t/**\n\t\t\t * `true` if the whole selector is unscoped, e.g. `:global(...)` or `:global` or `:global.x`.\n\t\t\t * Selectors like `:global(...).x` are not considered global, because they still need scoping.\n\t\t\t * Selectors like `:global(...):is/where/not/has(...)` are only considered global if all their\n\t\t\t * children are global.\n\t\t\t */\n\t\t\tis_global: boolean;\n\t\t\t/** `:root`, `:host`, `::view-transition`, or selectors after a `:global` */\n\t\t\tis_global_like: boolean;\n\t\t\tscoped: boolean;\n\t\t};\n\t}\n\n\texport interface TypeSelector extends BaseNode {\n\t\ttype: 'TypeSelector';\n\t\tname: string;\n\t}\n\n\texport interface IdSelector extends BaseNode {\n\t\ttype: 'IdSelector';\n\t\tname: string;\n\t}\n\n\texport interface ClassSelector extends BaseNode {\n\t\ttype: 'ClassSelector';\n\t\tname: string;\n\t}\n\n\texport interface AttributeSelector extends BaseNode {\n\t\ttype: 'AttributeSelector';\n\t\tname: string;\n\t\tmatcher: string | null;\n\t\tvalue: string | null;\n\t\tflags: string | null;\n\t}\n\n\texport interface PseudoElementSelector extends BaseNode {\n\t\ttype: 'PseudoElementSelector';\n\t\tname: string;\n\t}\n\n\texport interface PseudoClassSelector extends BaseNode {\n\t\ttype: 'PseudoClassSelector';\n\t\tname: string;\n\t\targs: SelectorList | null;\n\t}\n\n\texport interface Percentage extends BaseNode {\n\t\ttype: 'Percentage';\n\t\tvalue: string;\n\t}\n\n\texport interface NestingSelector extends BaseNode {\n\t\ttype: 'NestingSelector';\n\t\tname: '&';\n\t}\n\n\texport interface Nth extends BaseNode {\n\t\ttype: 'Nth';\n\t\tvalue: string;\n\t}\n\n\texport type SimpleSelector =\n\t\t| TypeSelector\n\t\t| IdSelector\n\t\t| ClassSelector\n\t\t| AttributeSelector\n\t\t| PseudoElementSelector\n\t\t| PseudoClassSelector\n\t\t| Percentage\n\t\t| Nth\n\t\t| NestingSelector;\n\n\texport interface Combinator extends BaseNode {\n\t\ttype: 'Combinator';\n\t\tname: string;\n\t}\n\n\texport interface Block extends BaseNode {\n\t\ttype: 'Block';\n\t\tchildren: Array<Declaration | Rule | Atrule>;\n\t}\n\n\texport interface Declaration extends BaseNode {\n\t\ttype: 'Declaration';\n\t\tproperty: string;\n\t\tvalue: string;\n\t}\n\n\t// for zimmerframe\n\texport type Node =\n\t\t| StyleSheet\n\t\t| Rule\n\t\t| Atrule\n\t\t| SelectorList\n\t\t| Block\n\t\t| ComplexSelector\n\t\t| RelativeSelector\n\t\t| Combinator\n\t\t| SimpleSelector\n\t\t| Declaration;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/types/index.d.ts",
    "content": "import type { SourceMap } from 'magic-string';\nimport type { Binding } from '../phases/scope.js';\nimport type { AST, Namespace } from './template.js';\nimport type { ICompileDiagnostic } from '../utils/compile_diagnostic.js';\nimport type { StateCreationRuneName } from '../../utils.js';\nimport type {\n\tAssignmentExpression,\n\tCallExpression,\n\tPrivateIdentifier,\n\tPropertyDefinition\n} from 'estree';\n\n/** The return value of `compile` from `svelte/compiler` */\nexport interface CompileResult {\n\t/** The compiled JavaScript */\n\tjs: {\n\t\t/** The generated code */\n\t\tcode: string;\n\t\t/** A source map */\n\t\tmap: SourceMap;\n\t};\n\t/** The compiled CSS */\n\tcss: null | {\n\t\t/** The generated code */\n\t\tcode: string;\n\t\t/** A source map */\n\t\tmap: SourceMap;\n\t\t/** Whether or not the CSS includes global rules */\n\t\thasGlobal: boolean;\n\t};\n\t/**\n\t * An array of warning objects that were generated during compilation. Each warning has several properties:\n\t * - `code` is a string identifying the category of warning\n\t * - `message` describes the issue in human-readable terms\n\t * - `start` and `end`, if the warning relates to a specific location, are objects with `line`, `column` and `character` properties\n\t */\n\twarnings: Warning[];\n\t/**\n\t * Metadata about the compiled component\n\t */\n\tmetadata: {\n\t\t/**\n\t\t * Whether the file was compiled in runes mode, either because of an explicit option or inferred from usage.\n\t\t * For `compileModule`, this is always `true`\n\t\t */\n\t\trunes: boolean;\n\t};\n\t/** The AST */\n\tast: any;\n}\n\nexport interface Warning extends ICompileDiagnostic {}\n\nexport interface CompileError extends ICompileDiagnostic {}\n\nexport type CssHashGetter = (args: {\n\tname: string;\n\tfilename: string;\n\tcss: string;\n\thash: (input: string) => string;\n}) => string;\n\nexport interface OptimizeOptions {\n\thydrate?: boolean;\n}\n\nexport interface CompileOptions extends ModuleCompileOptions {\n\t/**\n\t * Sets the name of the resulting JavaScript class (though the compiler will rename it if it would otherwise conflict with other variables in scope).\n\t * If unspecified, will be inferred from `filename`\n\t */\n\tname?: string;\n\t/**\n\t * If `true`, tells the compiler to generate a custom element constructor instead of a regular Svelte component.\n\t *\n\t * You can also pass a function that receives `{ filename }` and returns a boolean.\n\t *\n\t * @default false\n\t */\n\tcustomElement?: boolean | ((options: { filename: string }) => boolean);\n\t/**\n\t * If `true`, getters and setters will be created for the component's props. If `false`, they will only be created for readonly exported values (i.e. those declared with `const`, `class` and `function`). If compiling with `customElement: true` this option defaults to `true`.\n\t *\n\t * @default false\n\t * @deprecated This will have no effect in runes mode\n\t */\n\taccessors?: boolean;\n\t/**\n\t * The namespace of the element; e.g., `\"html\"`, `\"svg\"`, `\"mathml\"`.\n\t *\n\t * @default 'html'\n\t */\n\tnamespace?: Namespace;\n\t/**\n\t * If `true`, tells the compiler that you promise not to mutate any objects.\n\t * This allows it to be less conservative about checking whether values have changed.\n\t *\n\t * @default false\n\t * @deprecated This will have no effect in runes mode\n\t */\n\timmutable?: boolean;\n\t/**\n\t * - `'injected'`: styles will be included in the `head` when using `render(...)`, and injected into the document (if not already present) when the component mounts. For components compiled as custom elements, styles are injected to the shadow root.\n\t * - `'external'`: the CSS will only be returned in the `css` field of the compilation result. Most Svelte bundler plugins will set this to `'external'` and use the CSS that is statically generated for better performance, as it will result in smaller JavaScript bundles and the output can be served as cacheable `.css` files.\n\t * This is always `'injected'` when compiling with `customElement` mode.\n\t *\n\t * You can also pass a function that receives `{ filename }` and returns either `'injected'` or `'external'`.\n\t */\n\tcss?: 'injected' | 'external' | ((options: { filename: string }) => 'injected' | 'external');\n\t/**\n\t * A function that takes a `{ hash, css, name, filename }` argument and returns the string that is used as a classname for scoped CSS.\n\t * It defaults to returning `svelte-${hash(filename ?? css)}`.\n\t *\n\t * @default undefined\n\t */\n\tcssHash?: CssHashGetter;\n\t/**\n\t * If `true`, your HTML comments will be preserved in the output. By default, they are stripped out.\n\t *\n\t * @default false\n\t */\n\tpreserveComments?: boolean;\n\t/**\n\t *  If `true`, whitespace inside and between elements is kept as you typed it, rather than removed or collapsed to a single space where possible.\n\t *\n\t * @default false\n\t */\n\tpreserveWhitespace?: boolean;\n\t/**\n\t * Which strategy to use when cloning DOM fragments:\n\t *\n\t * - `html` populates a `<template>` with `innerHTML` and clones it. This is faster, but cannot be used if your app's [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) includes [`require-trusted-types-for 'script'`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/require-trusted-types-for)\n\t * - `tree` creates the fragment one element at a time and _then_ clones it. This is slower, but works everywhere\n\t *\n\t * @default 'html'\n\t * @since 5.33\n\t */\n\tfragments?: 'html' | 'tree';\n\t/**\n\t * Set to `true` to force the compiler into runes mode, even if there are no indications of runes usage.\n\t * Set to `false` to force the compiler into ignoring runes, even if there are indications of runes usage.\n\t * Set to `undefined` (the default) to infer runes mode from the component code.\n\t * Is always `true` for JS/TS modules compiled with Svelte.\n\t * Will be `true` by default in Svelte 6.\n\t * Note that setting this to `true` in your `svelte.config.js` will force runes mode for your entire project, including components in `node_modules`,\n\t * which is likely not what you want. If you're using Vite, consider using [dynamicCompileOptions](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#dynamiccompileoptions) instead.\n\t * @default undefined\n\t */\n\trunes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined);\n\t/**\n\t *  If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`.\n\t *\n\t * @default true\n\t */\n\tdiscloseVersion?: boolean;\n\t/**\n\t * @deprecated Use these only as a temporary solution before migrating your code\n\t */\n\tcompatibility?: {\n\t\t/**\n\t\t * Applies a transformation so that the default export of Svelte files can still be instantiated the same way as in Svelte 4 —\n\t\t * as a class when compiling for the browser (as though using `createClassComponent(MyComponent, {...})` from `svelte/legacy`)\n\t\t * or as an object with a `.render(...)` method when compiling for the server\n\t\t * @default 5\n\t\t */\n\t\tcomponentApi?: 4 | 5;\n\t};\n\t/**\n\t * An initial sourcemap that will be merged into the final output sourcemap.\n\t * This is usually the preprocessor sourcemap.\n\t *\n\t * @default null\n\t */\n\tsourcemap?: object | string;\n\t/**\n\t * Used for your JavaScript sourcemap.\n\t *\n\t * @default null\n\t */\n\toutputFilename?: string;\n\t/**\n\t * Used for your CSS sourcemap.\n\t *\n\t * @default null\n\t */\n\tcssOutputFilename?: string;\n\t/**\n\t * If `true`, compiles components with hot reloading support.\n\t *\n\t * @default false\n\t */\n\thmr?: boolean;\n\t/**\n\t * If `true`, returns the modern version of the AST.\n\t * Will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n\t *\n\t * @default false\n\t */\n\tmodernAst?: boolean;\n}\n\nexport interface ModuleCompileOptions {\n\t/**\n\t * If `true`, causes extra code to be added that will perform runtime checks and provide debugging information during development.\n\t *\n\t * @default false\n\t */\n\tdev?: boolean;\n\t/**\n\t * If `\"client\"`, Svelte emits code designed to run in the browser.\n\t * If `\"server\"`, Svelte emits code suitable for server-side rendering.\n\t * If `false`, nothing is generated. Useful for tooling that is only interested in warnings.\n\t *\n\t * @default 'client'\n\t */\n\tgenerate?: 'client' | 'server' | false;\n\t/**\n\t * Used for debugging hints and sourcemaps. Your bundler plugin will set it automatically.\n\t */\n\tfilename?: string;\n\t/**\n\t * Used for ensuring filenames don't leak filesystem information. Your bundler plugin will set it automatically.\n\t * @default process.cwd() on node-like environments, undefined elsewhere\n\t */\n\trootDir?: string;\n\t/**\n\t * A function that gets a `Warning` as an argument and returns a boolean.\n\t * Use this to filter out warnings. Return `true` to keep the warning, `false` to discard it.\n\t */\n\twarningFilter?: (warning: Warning) => boolean;\n\t/**\n\t * Experimental options\n\t * @since 5.36\n\t */\n\texperimental?: {\n\t\t/**\n\t\t * Allow `await` keyword in deriveds, template expressions, and the top level of components\n\t\t * @since 5.36\n\t\t */\n\t\tasync?: boolean;\n\t};\n}\n\n// The following two somewhat scary looking types ensure that certain types are required but can be undefined still\n\nexport type ValidatedModuleCompileOptions = Omit<Required<ModuleCompileOptions>, 'rootDir'> & {\n\trootDir: ModuleCompileOptions['rootDir'];\n};\n\nexport type ValidatedCompileOptions = ValidatedModuleCompileOptions &\n\tOmit<\n\t\tRequired<CompileOptions>,\n\t\t| keyof ModuleCompileOptions\n\t\t| 'name'\n\t\t| 'customElement'\n\t\t| 'compatibility'\n\t\t| 'outputFilename'\n\t\t| 'cssOutputFilename'\n\t\t| 'sourcemap'\n\t\t| 'css'\n\t\t| 'runes'\n\t> & {\n\t\tname: CompileOptions['name'];\n\t\tcustomElement: (options: { filename: string }) => boolean;\n\t\toutputFilename: CompileOptions['outputFilename'];\n\t\tcssOutputFilename: CompileOptions['cssOutputFilename'];\n\t\tsourcemap: CompileOptions['sourcemap'];\n\t\tcompatibility: Required<Required<CompileOptions>['compatibility']>;\n\t\tcss: (options: { filename: string }) => 'injected' | 'external';\n\t\trunes: (options: { filename: string }) => boolean | undefined;\n\t\tcustomElementOptions: AST.SvelteOptions['customElement'];\n\t\thmr: CompileOptions['hmr'];\n\t};\n\nexport type BindingKind =\n\t| 'normal' // A variable that is not in any way special\n\t| 'prop' // A normal prop (possibly reassigned or mutated)\n\t| 'bindable_prop' // A prop one can `bind:` to (possibly reassigned or mutated)\n\t| 'rest_prop' // A rest prop\n\t| 'raw_state' // A state variable\n\t| 'state' // A deeply reactive state variable\n\t| 'derived' // A derived variable\n\t| 'each' // An each block parameter\n\t| 'snippet' // A snippet parameter\n\t| 'store_sub' // A $store value\n\t| 'legacy_reactive' // A `$:` declaration\n\t| 'template' // A binding declared in the template, e.g. in an `await` block or `const` tag\n\t| 'static'; // A binding whose value is known to be static (i.e. each index)\n\nexport type DeclarationKind =\n\t| 'var'\n\t| 'let'\n\t| 'const'\n\t| 'using'\n\t| 'await using'\n\t| 'function'\n\t| 'import'\n\t| 'param'\n\t| 'rest_param'\n\t| 'synthetic'\n\t// TODO not yet implemented, but needed for TypeScript reasons\n\t| 'using'\n\t| 'await using';\n\nexport interface StateField {\n\ttype: StateCreationRuneName;\n\tnode: PropertyDefinition | AssignmentExpression;\n\tkey: PrivateIdentifier;\n\tvalue: CallExpression;\n}\n\nexport * from './template.js';\n\nexport { Binding, Scope } from '../phases/scope.js';\n\n// TODO this chain is a bit weird\nexport { ReactiveStatement } from '../phases/types.js';\n"
  },
  {
    "path": "packages/svelte/src/compiler/types/legacy-interfaces.d.ts",
    "content": "import { CompileOptions as C, Warning as W } from '#compiler';\n\n/** @deprecated import this from 'svelte' instead */\nexport type CompileOptions = C;\n/** @deprecated import this from 'svelte' instead */\nexport type Warning = W;\n"
  },
  {
    "path": "packages/svelte/src/compiler/types/legacy-nodes.d.ts",
    "content": "import type { AST } from '#compiler';\nimport type {\n\tArrayExpression,\n\tAssignmentExpression,\n\tExpression,\n\tIdentifier,\n\tMemberExpression,\n\tObjectExpression,\n\tPattern,\n\tSequenceExpression\n} from 'estree';\n\ninterface BaseNode {\n\ttype: string;\n\tstart: number;\n\tend: number;\n}\n\ninterface BaseElement extends BaseNode {\n\tname: string;\n\tattributes: Array<LegacyAttributeLike>;\n\tchildren: Array<LegacyElementLike>;\n}\n\nexport interface LegacyRoot extends BaseNode {\n\thtml: LegacySvelteNode;\n\tcss?: any;\n\tinstance?: any;\n\tmodule?: any;\n}\n\nexport interface LegacyAction extends BaseNode {\n\ttype: 'Action';\n\t/** The 'x' in `use:x` */\n\tname: string;\n\t/** The 'y' in `use:x={y}` */\n\texpression: null | Expression;\n}\n\nexport interface LegacyAnimation extends BaseNode {\n\ttype: 'Animation';\n\t/** The 'x' in `animate:x` */\n\tname: string;\n\t/** The y in `animate:x={y}` */\n\texpression: null | Expression;\n}\n\nexport interface LegacyBinding extends BaseNode {\n\ttype: 'Binding';\n\t/** The 'x' in `bind:x` */\n\tname: string;\n\t/** The y in `bind:x={y}` */\n\texpression: Identifier | MemberExpression | SequenceExpression;\n}\n\nexport interface LegacyBody extends BaseElement {\n\ttype: 'Body';\n\tname: 'svelte:body';\n}\n\nexport interface LegacyAttribute extends BaseNode {\n\ttype: 'Attribute';\n\tname: string;\n\tvalue: true | Array<AST.Text | LegacyMustacheTag | LegacyAttributeShorthand>;\n}\n\nexport interface LegacyAttributeShorthand extends BaseNode {\n\ttype: 'AttributeShorthand';\n\texpression: Expression;\n}\n\nexport interface LegacyLet extends BaseNode {\n\ttype: 'Let';\n\t/** The 'x' in `let:x` */\n\tname: string;\n\t/** The 'y' in `let:x={y}` */\n\texpression: null | Identifier | ArrayExpression | ObjectExpression;\n}\n\nexport interface LegacyCatchBlock extends BaseNode {\n\ttype: 'CatchBlock';\n\tchildren: LegacySvelteNode[];\n\tskip: boolean;\n}\n\nexport interface LegacyClass extends BaseNode {\n\ttype: 'Class';\n\t/** The 'x' in `class:x` */\n\tname: 'class';\n\t/** The 'y' in `class:x={y}`, or the `x` in `class:x` */\n\texpression: Expression;\n}\n\nexport interface LegacyDocument extends BaseElement {\n\ttype: 'Document';\n}\n\nexport interface LegacyElement {\n\ttype: 'Element';\n}\n\nexport interface LegacyEventHandler extends BaseNode {\n\ttype: 'EventHandler';\n\t/** The 'x' in `on:x` */\n\tname: string;\n\t/** The 'y' in `on:x={y}` */\n\texpression: null | Expression;\n\tmodifiers: string[];\n}\n\nexport interface LegacyHead extends BaseElement {\n\ttype: 'Head';\n}\n\nexport interface LegacyInlineComponent extends BaseElement {\n\ttype: 'InlineComponent';\n\t/** Set if this is a `<svelte:component>` */\n\texpression?: Expression;\n}\n\nexport interface LegacyMustacheTag extends BaseNode {\n\ttype: 'MustacheTag';\n\texpression: Expression;\n}\n\nexport interface LegacyOptions {\n\ttype: 'Options';\n\tname: 'svelte:options';\n\tattributes: Array<any>;\n}\n\nexport interface LegacyPendingBlock extends BaseNode {\n\ttype: 'PendingBlock';\n\tchildren: LegacySvelteNode[];\n\tskip: boolean;\n}\n\nexport interface LegacyRawMustacheTag extends BaseNode {\n\ttype: 'RawMustacheTag';\n\texpression: Expression;\n}\n\nexport interface LegacySpread extends BaseNode {\n\ttype: 'Spread';\n\texpression: Expression;\n}\n\nexport interface LegacySlot extends BaseElement {\n\ttype: 'Slot';\n}\n\nexport interface LegacySlotTemplate extends BaseElement {\n\ttype: 'SlotTemplate';\n}\n\nexport interface LegacyThenBlock extends BaseNode {\n\ttype: 'ThenBlock';\n\tchildren: LegacySvelteNode[];\n\tskip: boolean;\n}\n\nexport interface SnippetBlock extends BaseNode {\n\ttype: 'SnippetBlock';\n\texpression: Identifier;\n\tcontext: null | Pattern;\n\tchildren: LegacySvelteNode[];\n}\n\nexport interface RenderTag extends BaseNode {\n\ttype: 'RenderTag';\n\texpression: Identifier;\n\targument: null | Expression;\n}\n\nexport interface LegacyTitle extends BaseElement {\n\ttype: 'Title';\n\tname: 'title';\n}\n\nexport interface LegacyConstTag extends BaseNode {\n\ttype: 'ConstTag';\n\texpression: AssignmentExpression;\n}\n\nexport interface LegacyTransition extends BaseNode {\n\ttype: 'Transition';\n\t/** The 'x' in `transition:x` */\n\tname: string;\n\t/** The 'y' in `transition:x={y}` */\n\texpression: null | Expression;\n\tmodifiers: Array<'local' | 'global'>;\n\t/** True if this is a `transition:` or `in:` directive */\n\tintro: boolean;\n\t/** True if this is a `transition:` or `out:` directive */\n\toutro: boolean;\n}\n\n/** A `style:` directive */\nexport interface LegacyStyleDirective extends BaseNode {\n\ttype: 'StyleDirective';\n\t/** The 'x' in `style:x` */\n\tname: string;\n\t/** The 'y' in `style:x={y}` */\n\tvalue: true | Array<AST.ExpressionTag | AST.Text>;\n\tmodifiers: Array<'important'>;\n}\n\nexport interface LegacyWindow extends BaseElement {\n\ttype: 'Window';\n}\n\nexport interface LegacyComment extends BaseNode {\n\ttype: 'Comment';\n\t/** the contents of the comment */\n\tdata: string;\n\t/** any svelte-ignore directives — <!-- svelte-ignore a b c --> would result in ['a', 'b', 'c'] */\n\tignores: string[];\n}\n\ntype LegacyDirective =\n\t| LegacyAnimation\n\t| LegacyBinding\n\t| LegacyClass\n\t| LegacyLet\n\t| LegacyEventHandler\n\t| LegacyStyleDirective\n\t| LegacyTransition\n\t| LegacyAction;\n\nexport type LegacyAttributeLike = LegacyAttribute | LegacySpread | LegacyDirective;\n\nexport type LegacyElementLike =\n\t| LegacyBody\n\t| LegacyCatchBlock\n\t| LegacyComment\n\t| LegacyDocument\n\t| LegacyElement\n\t| LegacyHead\n\t| LegacyInlineComponent\n\t| LegacyMustacheTag\n\t| LegacyOptions\n\t| LegacyPendingBlock\n\t| LegacyRawMustacheTag\n\t| LegacySlot\n\t| LegacySlotTemplate\n\t| LegacyThenBlock\n\t| LegacyTitle\n\t| LegacyWindow;\n\nexport interface LegacyStyle extends BaseNode {\n\ttype: 'Style';\n\tattributes: any[];\n\tcontent: {\n\t\tstart: number;\n\t\tend: number;\n\t\tstyles: string;\n\t};\n\tchildren: any[];\n}\n\nexport interface LegacySelector extends BaseNode {\n\ttype: 'Selector';\n\tchildren: Array<AST.CSS.Combinator | AST.CSS.SimpleSelector>;\n}\n\nexport type LegacyCssNode = LegacyStyle | LegacySelector;\n\nexport type LegacySvelteNode =\n\t| LegacyConstTag\n\t| LegacyElementLike\n\t| LegacyAttributeLike\n\t| LegacyAttributeShorthand\n\t| LegacyCssNode\n\t| AST.Text;\n"
  },
  {
    "path": "packages/svelte/src/compiler/types/template.d.ts",
    "content": "import type { Binding } from '#compiler';\nimport type {\n\tArrayExpression,\n\tArrowFunctionExpression,\n\tVariableDeclaration,\n\tVariableDeclarator,\n\tExpression,\n\tIdentifier,\n\tMemberExpression,\n\tNode,\n\tObjectExpression,\n\tPattern,\n\tProgram,\n\tChainExpression,\n\tSimpleCallExpression,\n\tSequenceExpression,\n\tSourceLocation\n} from 'estree';\nimport type { Scope } from '../phases/scope';\nimport type { _CSS } from './css';\nimport type { ExpressionMetadata } from '../phases/nodes';\n\n/**\n * - `html`    — the default, for e.g. `<div>` or `<span>`\n * - `svg`     — for e.g. `<svg>` or `<g>`\n * - `mathml`  — for e.g. `<math>` or `<mrow>`\n */\nexport type Namespace = 'html' | 'svg' | 'mathml';\n\nexport namespace AST {\n\texport interface BaseNode {\n\t\ttype: string;\n\t\tstart: number;\n\t\tend: number;\n\t}\n\n\texport interface Fragment {\n\t\ttype: 'Fragment';\n\t\tnodes: Array<Text | Tag | ElementLike | Block | Comment>;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\t/**\n\t\t\t * Fragments declare their own scopes. A transparent fragment is one whose scope\n\t\t\t * is not represented by a scope in the resulting JavaScript (e.g. an element scope),\n\t\t\t * and should therefore delegate to parent scopes when generating unique identifiers\n\t\t\t */\n\t\t\ttransparent: boolean;\n\t\t\t/**\n\t\t\t * Whether or not we need to traverse into the fragment during mount/hydrate\n\t\t\t */\n\t\t\tdynamic: boolean;\n\t\t};\n\t}\n\n\texport interface Root extends BaseNode {\n\t\ttype: 'Root';\n\t\t/**\n\t\t * Inline options provided by `<svelte:options>` — these override options passed to `compile(...)`\n\t\t */\n\t\toptions: SvelteOptions | null;\n\t\tfragment: Fragment;\n\t\t/** The parsed `<style>` element, if exists */\n\t\tcss: AST.CSS.StyleSheet | null;\n\t\t/** The parsed `<script>` element, if exists */\n\t\tinstance: Script | null;\n\t\t/** The parsed `<script module>` element, if exists */\n\t\tmodule: Script | null;\n\t\t/** Comments found in <script> and {expressions} */\n\t\tcomments: JSComment[];\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\t/** Whether the component was parsed with typescript */\n\t\t\tts: boolean;\n\t\t};\n\t}\n\n\texport interface SvelteOptions {\n\t\t// start/end info (needed for warnings and for our Prettier plugin)\n\t\tstart: number;\n\t\tend: number;\n\t\t// options\n\t\trunes?: boolean;\n\t\timmutable?: boolean;\n\t\taccessors?: boolean;\n\t\tpreserveWhitespace?: boolean;\n\t\tnamespace?: Namespace;\n\t\tcss?: 'injected';\n\t\tcustomElement?: {\n\t\t\ttag?: string;\n\t\t\tshadow?: 'open' | 'none' | ObjectExpression | undefined;\n\t\t\tprops?: Record<\n\t\t\t\tstring,\n\t\t\t\t{\n\t\t\t\t\tattribute?: string;\n\t\t\t\t\treflect?: boolean;\n\t\t\t\t\ttype?: 'Array' | 'Boolean' | 'Number' | 'Object' | 'String';\n\t\t\t\t}\n\t\t\t>;\n\t\t\t/**\n\t\t\t * Is of type\n\t\t\t * ```ts\n\t\t\t * (ceClass: new () => HTMLElement) => new () => HTMLElement\n\t\t\t * ```\n\t\t\t */\n\t\t\textend?: ArrowFunctionExpression | Identifier;\n\t\t};\n\t\tattributes: Attribute[];\n\t}\n\n\t/** Static text */\n\texport interface Text extends BaseNode {\n\t\ttype: 'Text';\n\t\t/** Text with decoded HTML entities */\n\t\tdata: string;\n\t\t/** The original text, with undecoded HTML entities */\n\t\traw: string;\n\t}\n\n\t/** A (possibly reactive) template expression — `{...}` */\n\texport interface ExpressionTag extends BaseNode {\n\t\ttype: 'ExpressionTag';\n\t\texpression: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A (possibly reactive) HTML template expression — `{@html ...}` */\n\texport interface HtmlTag extends BaseNode {\n\t\ttype: 'HtmlTag';\n\t\texpression: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t\t/** If `true`, the `{@html}` block is the only child of its parent element and can use `parent.innerHTML` directly */\n\t\t\tis_controlled?: boolean;\n\t\t};\n\t}\n\n\t/** An HTML comment */\n\t// TODO rename to disambiguate\n\texport interface Comment extends BaseNode {\n\t\ttype: 'Comment';\n\t\t/** the contents of the comment */\n\t\tdata: string;\n\t}\n\n\t/** A `{@const ...}` tag */\n\texport interface ConstTag extends BaseNode {\n\t\ttype: 'ConstTag';\n\t\tdeclaration: VariableDeclaration & {\n\t\t\tdeclarations: [VariableDeclarator & { id: Pattern; init: Expression }];\n\t\t};\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A `{@debug ...}` tag */\n\texport interface DebugTag extends BaseNode {\n\t\ttype: 'DebugTag';\n\t\tidentifiers: Identifier[];\n\t}\n\n\t/** A `{@render foo(...)} tag */\n\texport interface RenderTag extends BaseNode {\n\t\ttype: 'RenderTag';\n\t\texpression: SimpleCallExpression | (ChainExpression & { expression: SimpleCallExpression });\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t\tdynamic: boolean;\n\t\t\targuments: ExpressionMetadata[];\n\t\t\tpath: SvelteNode[];\n\t\t\t/** The set of locally-defined snippets that this render tag could correspond to,\n\t\t\t * used for CSS pruning purposes */\n\t\t\tsnippets: Set<SnippetBlock>;\n\t\t};\n\t}\n\n\t/** A `{@attach foo(...)} tag */\n\texport interface AttachTag extends BaseNode {\n\t\ttype: 'AttachTag';\n\t\texpression: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** An `animate:` directive */\n\texport interface AnimateDirective extends BaseAttribute {\n\t\ttype: 'AnimateDirective';\n\t\t/** The 'x' in `animate:x` */\n\t\tname: string;\n\t\t/** The y in `animate:x={y}` */\n\t\texpression: null | Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A `bind:` directive */\n\texport interface BindDirective extends BaseAttribute {\n\t\ttype: 'BindDirective';\n\t\t/** The 'x' in `bind:x` */\n\t\tname: string;\n\t\t/** The y in `bind:x={y}` */\n\t\texpression: Identifier | MemberExpression | SequenceExpression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\tbinding?: Binding | null;\n\t\t\tbinding_group_name: Identifier;\n\t\t\tparent_each_blocks: EachBlock[];\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A `class:` directive */\n\texport interface ClassDirective extends BaseAttribute {\n\t\ttype: 'ClassDirective';\n\t\t/** The 'x' in `class:x` */\n\t\tname: 'class';\n\t\t/** The 'y' in `class:x={y}`, or the `x` in `class:x` */\n\t\texpression: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A `let:` directive */\n\texport interface LetDirective extends BaseAttribute {\n\t\ttype: 'LetDirective';\n\t\t/** The 'x' in `let:x` */\n\t\tname: string;\n\t\t/** The 'y' in `let:x={y}` */\n\t\texpression: null | Identifier | ArrayExpression | ObjectExpression;\n\t}\n\n\t/** An `on:` directive */\n\texport interface OnDirective extends BaseAttribute {\n\t\ttype: 'OnDirective';\n\t\t/** The 'x' in `on:x` */\n\t\tname: string;\n\t\t/** The 'y' in `on:x={y}` */\n\t\texpression: null | Expression;\n\t\tmodifiers: Array<\n\t\t\t| 'capture'\n\t\t\t| 'nonpassive'\n\t\t\t| 'once'\n\t\t\t| 'passive'\n\t\t\t| 'preventDefault'\n\t\t\t| 'self'\n\t\t\t| 'stopImmediatePropagation'\n\t\t\t| 'stopPropagation'\n\t\t\t| 'trusted'\n\t\t>;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A `style:` directive */\n\texport interface StyleDirective extends BaseAttribute {\n\t\ttype: 'StyleDirective';\n\t\t/** The 'x' in `style:x` */\n\t\tname: string;\n\t\t/** The 'y' in `style:x={y}` */\n\t\tvalue: true | ExpressionTag | Array<ExpressionTag | Text>;\n\t\tmodifiers: Array<'important'>;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t// TODO have separate in/out/transition directives\n\t/** A `transition:`, `in:` or `out:` directive */\n\texport interface TransitionDirective extends BaseAttribute {\n\t\ttype: 'TransitionDirective';\n\t\t/** The 'x' in `transition:x` */\n\t\tname: string;\n\t\t/** The 'y' in `transition:x={y}` */\n\t\texpression: null | Expression;\n\t\tmodifiers: Array<'local' | 'global'>;\n\t\t/** True if this is a `transition:` or `in:` directive */\n\t\tintro: boolean;\n\t\t/** True if this is a `transition:` or `out:` directive */\n\t\toutro: boolean;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** A `use:` directive */\n\texport interface UseDirective extends BaseAttribute {\n\t\ttype: 'UseDirective';\n\t\t/** The 'x' in `use:x` */\n\t\tname: string;\n\t\t/** The 'y' in `use:x={y}` */\n\t\texpression: null | Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\texport interface BaseElement extends BaseNode {\n\t\tname: string;\n\t\tname_loc: SourceLocation;\n\t\tattributes: Array<Attribute | SpreadAttribute | Directive | AttachTag>;\n\t\tfragment: Fragment;\n\t}\n\n\texport interface Component extends BaseElement {\n\t\ttype: 'Component';\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t\tscopes: Record<string, Scope>;\n\t\t\tdynamic: boolean;\n\t\t\t/** The set of locally-defined snippets that this component tag could render,\n\t\t\t * used for CSS pruning purposes */\n\t\t\tsnippets: Set<SnippetBlock>;\n\t\t\tpath: SvelteNode[];\n\t\t};\n\t}\n\n\texport interface TitleElement extends BaseElement {\n\t\ttype: 'TitleElement';\n\t\tname: 'title';\n\t}\n\n\texport interface SlotElement extends BaseElement {\n\t\ttype: 'SlotElement';\n\t\tname: 'slot';\n\t}\n\n\texport interface RegularElement extends BaseElement {\n\t\ttype: 'RegularElement';\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\t/** `true` if this is an svg element */\n\t\t\tsvg: boolean;\n\t\t\t/** `true` if this is a mathml element */\n\t\t\tmathml: boolean;\n\t\t\t/** `true` if contains a SpreadAttribute */\n\t\t\thas_spread: boolean;\n\t\t\tscoped: boolean;\n\t\t\tpath: SvelteNode[];\n\t\t\t/** Synthetic value attribute for <option> with single expression child, used for client-only handling */\n\t\t\tsynthetic_value_node: ExpressionTag | null;\n\t\t};\n\t}\n\n\texport interface SvelteBody extends BaseElement {\n\t\ttype: 'SvelteBody';\n\t\tname: 'svelte:body';\n\t}\n\n\texport interface SvelteComponent extends BaseElement {\n\t\ttype: 'SvelteComponent';\n\t\tname: 'svelte:component';\n\t\texpression: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t\tscopes: Record<string, Scope>;\n\t\t\t/** The set of locally-defined snippets that this component tag could render,\n\t\t\t * used for CSS pruning purposes */\n\t\t\tsnippets: Set<SnippetBlock>;\n\t\t\tpath: SvelteNode[];\n\t\t};\n\t}\n\n\texport interface SvelteDocument extends BaseElement {\n\t\ttype: 'SvelteDocument';\n\t\tname: 'svelte:document';\n\t}\n\n\texport interface SvelteElement extends BaseElement {\n\t\ttype: 'SvelteElement';\n\t\tname: 'svelte:element';\n\t\ttag: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t\t/**\n\t\t\t * `true` if this is an svg element. The boolean may not be accurate because\n\t\t\t * the tag is dynamic, but we do our best to infer it from the template.\n\t\t\t */\n\t\t\tsvg: boolean;\n\t\t\t/**\n\t\t\t * `true` if this is a mathml element. The boolean may not be accurate because\n\t\t\t * the tag is dynamic, but we do our best to infer it from the template.\n\t\t\t */\n\t\t\tmathml: boolean;\n\t\t\tscoped: boolean;\n\t\t\tpath: SvelteNode[];\n\t\t};\n\t}\n\n\texport interface SvelteFragment extends BaseElement {\n\t\ttype: 'SvelteFragment';\n\t\tname: 'svelte:fragment';\n\t}\n\n\texport interface SvelteBoundary extends BaseElement {\n\t\ttype: 'SvelteBoundary';\n\t\tname: 'svelte:boundary';\n\t}\n\n\texport interface SvelteHead extends BaseElement {\n\t\ttype: 'SvelteHead';\n\t\tname: 'svelte:head';\n\t}\n\n\t/** This is only an intermediate representation while parsing, it doesn't exist in the final AST */\n\texport interface SvelteOptionsRaw extends BaseElement {\n\t\ttype: 'SvelteOptions';\n\t\tname: 'svelte:options';\n\t}\n\n\texport interface SvelteSelf extends BaseElement {\n\t\ttype: 'SvelteSelf';\n\t\tname: 'svelte:self';\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\tscopes: Record<string, Scope>;\n\t\t\t/** The set of locally-defined snippets that this component tag could render,\n\t\t\t * used for CSS pruning purposes */\n\t\t\tsnippets: Set<SnippetBlock>;\n\t\t\tpath: SvelteNode[];\n\t\t};\n\t}\n\n\texport interface SvelteWindow extends BaseElement {\n\t\ttype: 'SvelteWindow';\n\t\tname: 'svelte:window';\n\t}\n\n\t/** An `{#each ...}` block */\n\texport interface EachBlock extends BaseNode {\n\t\ttype: 'EachBlock';\n\t\texpression: Expression;\n\t\t/** The `entry` in `{#each item as entry}`. `null` if `as` part is omitted */\n\t\tcontext: Pattern | null;\n\t\tbody: Fragment;\n\t\tfallback?: Fragment;\n\t\tindex?: string;\n\t\tkey?: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t\tkeyed: boolean;\n\t\t\tcontains_group_binding: boolean;\n\t\t\tindex: Identifier;\n\t\t\tdeclarations: Map<string, Binding>;\n\t\t\t/**\n\t\t\t * Optimization path for each blocks: If the parent isn't a fragment and\n\t\t\t * it only has a single child, then we can classify the block as being \"controlled\".\n\t\t\t * This saves us from creating an extra comment and insertion being faster.\n\t\t\t */\n\t\t\tis_controlled: boolean;\n\t\t\t/**\n\t\t\t * Bindings this each block transitively depends on. In legacy mode, we\n\t\t\t * invalidate these bindings when mutations happen to each block items\n\t\t\t */\n\t\t\ttransitive_deps: Set<Binding>;\n\t\t};\n\t}\n\n\t/** An `{#if ...}` block */\n\texport interface IfBlock extends BaseNode {\n\t\ttype: 'IfBlock';\n\t\telseif: boolean;\n\t\ttest: Expression;\n\t\tconsequent: Fragment;\n\t\talternate: Fragment | null;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\t/** List of else-if blocks that can be flattened into this if block */\n\t\t\tflattened?: IfBlock[];\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\t/** An `{#await ...}` block */\n\texport interface AwaitBlock extends BaseNode {\n\t\ttype: 'AwaitBlock';\n\t\texpression: Expression;\n\t\t// TODO can/should we move these inside the ThenBlock and CatchBlock?\n\t\t/** The resolved value inside the `then` block */\n\t\tvalue: Pattern | null;\n\t\t/** The rejection reason inside the `catch` block */\n\t\terror: Pattern | null;\n\t\tpending: Fragment | null;\n\t\tthen: Fragment | null;\n\t\tcatch: Fragment | null;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\texport interface KeyBlock extends BaseNode {\n\t\ttype: 'KeyBlock';\n\t\texpression: Expression;\n\t\tfragment: Fragment;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\texport interface SnippetBlock extends BaseNode {\n\t\ttype: 'SnippetBlock';\n\t\texpression: Identifier;\n\t\tparameters: Pattern[];\n\t\ttypeParams?: string;\n\t\tbody: Fragment;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\tcan_hoist: boolean;\n\t\t\t/** The set of components/render tags that could render this snippet,\n\t\t\t * used for CSS pruning */\n\t\t\tsites: Set<Component | SvelteComponent | SvelteSelf | RenderTag>;\n\t\t};\n\t}\n\n\texport interface BaseAttribute extends BaseNode {\n\t\tname: string;\n\t\tname_loc: SourceLocation | null;\n\t}\n\n\texport interface Attribute extends BaseAttribute {\n\t\ttype: 'Attribute';\n\t\t/**\n\t\t * Quoted/string values are represented by an array, even if they contain a single expression like `\"{x}\"`\n\t\t */\n\t\tvalue: true | ExpressionTag | Array<Text | ExpressionTag>;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\t/** May be set if this is an event attribute */\n\t\t\tdelegated: boolean;\n\t\t\t/** May be `true` if this is a `class` attribute that needs `clsx` */\n\t\t\tneeds_clsx: boolean;\n\t\t};\n\t}\n\n\texport interface SpreadAttribute extends BaseNode {\n\t\ttype: 'SpreadAttribute';\n\t\texpression: Expression;\n\t\t/** @internal */\n\t\tmetadata: {\n\t\t\texpression: ExpressionMetadata;\n\t\t};\n\t}\n\n\texport interface Script extends BaseNode {\n\t\ttype: 'Script';\n\t\tcontext: 'default' | 'module';\n\t\tcontent: Program;\n\t\tattributes: Attribute[];\n\t}\n\n\texport interface JSComment {\n\t\ttype: 'Line' | 'Block';\n\t\tvalue: string;\n\t\tstart: number;\n\t\tend: number;\n\t\tloc: {\n\t\t\tstart: { line: number; column: number };\n\t\t\tend: { line: number; column: number };\n\t\t};\n\t}\n\n\texport type AttributeLike = Attribute | SpreadAttribute | Directive;\n\n\texport type Directive =\n\t\t| AST.AnimateDirective\n\t\t| AST.BindDirective\n\t\t| AST.ClassDirective\n\t\t| AST.LetDirective\n\t\t| AST.OnDirective\n\t\t| AST.StyleDirective\n\t\t| AST.TransitionDirective\n\t\t| AST.UseDirective;\n\n\texport type Block =\n\t\t| AST.EachBlock\n\t\t| AST.IfBlock\n\t\t| AST.AwaitBlock\n\t\t| AST.KeyBlock\n\t\t| AST.SnippetBlock;\n\n\texport type ElementLike =\n\t\t| AST.Component\n\t\t| AST.TitleElement\n\t\t| AST.SlotElement\n\t\t| AST.RegularElement\n\t\t| AST.SvelteBody\n\t\t| AST.SvelteBoundary\n\t\t| AST.SvelteComponent\n\t\t| AST.SvelteDocument\n\t\t| AST.SvelteElement\n\t\t| AST.SvelteFragment\n\t\t| AST.SvelteHead\n\t\t| AST.SvelteOptionsRaw\n\t\t| AST.SvelteSelf\n\t\t| AST.SvelteWindow\n\t\t| AST.SvelteBoundary;\n\n\texport type Tag =\n\t\t| AST.AttachTag\n\t\t| AST.ConstTag\n\t\t| AST.DebugTag\n\t\t| AST.ExpressionTag\n\t\t| AST.HtmlTag\n\t\t| AST.RenderTag;\n\n\texport type TemplateNode =\n\t\t| AST.Root\n\t\t| AST.Text\n\t\t| Tag\n\t\t| ElementLike\n\t\t| AST.Attribute\n\t\t| AST.SpreadAttribute\n\t\t| Directive\n\t\t| AST.AttachTag\n\t\t| AST.Comment\n\t\t| Block;\n\n\texport type SvelteNode = Node | TemplateNode | AST.Fragment | _CSS.Node | Script;\n\n\texport type { _CSS as CSS };\n}\n\ndeclare module 'estree' {\n\texport interface BaseNode {\n\t\t/** Added by the Svelte parser */\n\t\tstart?: number;\n\t\t/** Added by the Svelte parser */\n\t\tend?: number;\n\t\t/** Added by acorn-typescript */\n\t\ttypeAnnotation?: any;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/assert.js",
    "content": "/**\n * @template T\n * @param {any} actual\n * @param {T} expected\n * @returns {asserts actual is T}\n */\nexport function equal(actual, expected) {\n\tif (actual !== expected) throw new Error('Assertion failed');\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/ast.js",
    "content": "/** @import { AST, Scope } from '#compiler' */\n/** @import * as ESTree from 'estree' */\nimport { walk } from 'zimmerframe';\nimport * as b from '#compiler/builders';\n\n/**\n * Gets the left-most identifier of a member expression or identifier.\n * @param {ESTree.MemberExpression | ESTree.Identifier} expression\n * @returns {ESTree.Identifier | null}\n */\nexport function object(expression) {\n\twhile (expression.type === 'MemberExpression') {\n\t\texpression = /** @type {ESTree.MemberExpression | ESTree.Identifier} */ (expression.object);\n\t}\n\n\tif (expression.type !== 'Identifier') {\n\t\treturn null;\n\t}\n\n\treturn expression;\n}\n\n/**\n * Returns true if the attribute contains a single static text node.\n * @param {AST.Attribute} attribute\n * @returns {attribute is AST.Attribute & { value: [AST.Text] }}\n */\nexport function is_text_attribute(attribute) {\n\treturn (\n\t\tArray.isArray(attribute.value) &&\n\t\tattribute.value.length === 1 &&\n\t\tattribute.value[0].type === 'Text'\n\t);\n}\n\n/**\n * Returns true if the attribute contains a single expression node.\n * In Svelte 5, this also includes a single expression node wrapped in an array.\n * TODO change that in a future version\n * @param {AST.Attribute} attribute\n * @returns {attribute is AST.Attribute & { value: [AST.ExpressionTag] | AST.ExpressionTag }}\n */\nexport function is_expression_attribute(attribute) {\n\treturn (\n\t\t(attribute.value !== true && !Array.isArray(attribute.value)) ||\n\t\t(Array.isArray(attribute.value) &&\n\t\t\tattribute.value.length === 1 &&\n\t\t\tattribute.value[0].type === 'ExpressionTag')\n\t);\n}\n\n/**\n * Returns the single attribute expression node.\n * In Svelte 5, this also includes a single expression node wrapped in an array.\n * TODO change that in a future version\n * @param { AST.Attribute & { value: [AST.ExpressionTag] | AST.ExpressionTag }} attribute\n * @returns {ESTree.Expression}\n */\nexport function get_attribute_expression(attribute) {\n\treturn Array.isArray(attribute.value)\n\t\t? /** @type {AST.ExpressionTag} */ (attribute.value[0]).expression\n\t\t: attribute.value.expression;\n}\n\n/**\n * Returns the expression chunks of an attribute value\n * @param {AST.Attribute['value']} value\n * @returns {Array<AST.Text | AST.ExpressionTag>}\n */\nexport function get_attribute_chunks(value) {\n\treturn Array.isArray(value) ? value : typeof value === 'boolean' ? [] : [value];\n}\n\n/**\n * Returns true if the attribute starts with `on` and contains a single expression node.\n * @param {AST.Attribute} attribute\n * @returns {attribute is AST.Attribute & { value: [AST.ExpressionTag] | AST.ExpressionTag }}\n */\nexport function is_event_attribute(attribute) {\n\treturn is_expression_attribute(attribute) && attribute.name.startsWith('on');\n}\n\n/**\n * Extracts all identifiers and member expressions from a pattern.\n * @param {ESTree.Pattern} pattern\n * @param {Array<ESTree.Identifier | ESTree.MemberExpression>} [nodes]\n * @returns {Array<ESTree.Identifier | ESTree.MemberExpression>}\n */\nexport function unwrap_pattern(pattern, nodes = []) {\n\tswitch (pattern.type) {\n\t\tcase 'Identifier':\n\t\t\tnodes.push(pattern);\n\t\t\tbreak;\n\n\t\tcase 'MemberExpression':\n\t\t\t// member expressions can be part of an assignment pattern, but not a binding pattern\n\t\t\t// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#binding_and_assignment\n\t\t\tnodes.push(pattern);\n\t\t\tbreak;\n\n\t\tcase 'ObjectPattern':\n\t\t\tfor (const prop of pattern.properties) {\n\t\t\t\tif (prop.type === 'RestElement') {\n\t\t\t\t\tunwrap_pattern(prop.argument, nodes);\n\t\t\t\t} else {\n\t\t\t\t\tunwrap_pattern(prop.value, nodes);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'ArrayPattern':\n\t\t\tfor (const element of pattern.elements) {\n\t\t\t\tif (element) unwrap_pattern(element, nodes);\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'RestElement':\n\t\t\tunwrap_pattern(pattern.argument, nodes);\n\t\t\tbreak;\n\n\t\tcase 'AssignmentPattern':\n\t\t\tunwrap_pattern(pattern.left, nodes);\n\t\t\tbreak;\n\t}\n\n\treturn nodes;\n}\n\n/**\n * Extracts all identifiers from a pattern.\n * @param {ESTree.Pattern} pattern\n * @returns {ESTree.Identifier[]}\n */\nexport function extract_identifiers(pattern) {\n\treturn unwrap_pattern(pattern, []).filter((node) => node.type === 'Identifier');\n}\n\n/**\n * Extracts all identifiers and a stringified keypath from an expression.\n * TODO replace this with `expression.dependencies`\n * @param {ESTree.Expression} expr\n * @returns {[keypath: string, ids: ESTree.Identifier[]]}\n */\nexport function extract_all_identifiers_from_expression(expr) {\n\t/** @type {ESTree.Identifier[]} */\n\tlet nodes = [];\n\t/** @type {string[]} */\n\tlet keypath = [];\n\n\twalk(\n\t\texpr,\n\t\t{},\n\t\t{\n\t\t\tIdentifier(node, { path }) {\n\t\t\t\tconst parent = path.at(-1);\n\t\t\t\tif (parent?.type !== 'MemberExpression' || parent.property !== node || parent.computed) {\n\t\t\t\t\tnodes.push(node);\n\t\t\t\t}\n\n\t\t\t\tif (parent?.type === 'MemberExpression' && parent.computed && parent.property === node) {\n\t\t\t\t\tkeypath.push(`[${node.name}]`);\n\t\t\t\t} else {\n\t\t\t\t\tkeypath.push(node.name);\n\t\t\t\t}\n\t\t\t},\n\t\t\tLiteral(node, { path }) {\n\t\t\t\tconst value = typeof node.value === 'string' ? `\"${node.value}\"` : String(node.value);\n\t\t\t\tconst parent = path.at(-1);\n\t\t\t\tif (parent?.type === 'MemberExpression' && parent.computed && parent.property === node) {\n\t\t\t\t\tkeypath.push(`[${value}]`);\n\t\t\t\t} else {\n\t\t\t\t\tkeypath.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tThisExpression(_, { next }) {\n\t\t\t\tkeypath.push('this');\n\t\t\t\tnext();\n\t\t\t}\n\t\t}\n\t);\n\n\treturn [keypath.join('.'), nodes];\n}\n\n/**\n * Extracts all leaf identifiers from a destructuring expression.\n * @param {ESTree.Identifier | ESTree.ObjectExpression | ESTree.ArrayExpression} node\n * @param {ESTree.Identifier[]} [nodes]\n * @returns\n */\nexport function extract_identifiers_from_destructuring(node, nodes = []) {\n\t// TODO This isn't complete, but it should be enough for our purposes\n\tswitch (node.type) {\n\t\tcase 'Identifier':\n\t\t\tnodes.push(node);\n\t\t\tbreak;\n\n\t\tcase 'ObjectExpression':\n\t\t\tfor (const prop of node.properties) {\n\t\t\t\tif (prop.type === 'Property') {\n\t\t\t\t\textract_identifiers_from_destructuring(/** @type {any} */ (prop.value), nodes);\n\t\t\t\t} else {\n\t\t\t\t\textract_identifiers_from_destructuring(/** @type {any} */ (prop.argument), nodes);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'ArrayExpression':\n\t\t\tfor (const element of node.elements) {\n\t\t\t\tif (element) extract_identifiers_from_destructuring(/** @type {any} */ (element), nodes);\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\treturn nodes;\n}\n\n/**\n * Represents the path of a destructured assignment from either a declaration\n * or assignment expression. For example, given `const { foo: { bar: baz } } = quux`,\n * the path of `baz` is `foo.bar`\n * @typedef {Object} DestructuredAssignment\n * @property {ESTree.Identifier | ESTree.MemberExpression} node The node the destructuring path end in. Can be a member expression only for assignment expressions\n * @property {boolean} is_rest `true` if this is a `...rest` destructuring\n * @property {boolean} has_default_value `true` if this has a fallback value like `const { foo = 'bar } = ..`\n * @property {ESTree.Expression} expression The value of the current path\n * This will be a call expression if a rest element or default is involved — e.g. `const { foo: { bar: baz = 42 }, ...rest } = quux` — since we can't represent `baz` or `rest` purely as a path\n * Will be an await expression in case of an async default value (`const { foo = await bar } = ...`)\n * @property {ESTree.Expression} update_expression Like `expression` but without default values.\n */\n\n/**\n * Extracts all destructured assignments from a pattern.\n * For each `id` in the returned `inserts`, make sure to adjust the `name`.\n * @param {ESTree.Node} param\n * @param {ESTree.Expression} initial\n * @returns {{ inserts: Array<{ id: ESTree.Identifier, value: ESTree.Expression }>, paths: DestructuredAssignment[] }}\n */\nexport function extract_paths(param, initial) {\n\t/**\n\t * When dealing with array destructuring patterns (`let [a, b, c] = $derived(blah())`)\n\t * we need an intermediate declaration that creates an array, since `blah()` could\n\t * return a non-array-like iterator\n\t * @type {Array<{ id: ESTree.Identifier, value: ESTree.Expression }>}\n\t */\n\tconst inserts = [];\n\n\t/** @type {DestructuredAssignment[]} */\n\tconst paths = [];\n\n\t_extract_paths(paths, inserts, param, initial, initial, false);\n\n\treturn { inserts, paths };\n}\n\n/**\n * @param {DestructuredAssignment[]} paths\n * @param {Array<{ id: ESTree.Identifier, value: ESTree.Expression }>} inserts\n * @param {ESTree.Node} param\n * @param {ESTree.Expression} expression\n * @param {ESTree.Expression} update_expression\n * @param {boolean} has_default_value\n * @returns {DestructuredAssignment[]}\n */\nfunction _extract_paths(paths, inserts, param, expression, update_expression, has_default_value) {\n\tswitch (param.type) {\n\t\tcase 'Identifier':\n\t\tcase 'MemberExpression':\n\t\t\tpaths.push({\n\t\t\t\tnode: param,\n\t\t\t\tis_rest: false,\n\t\t\t\thas_default_value,\n\t\t\t\texpression,\n\t\t\t\tupdate_expression\n\t\t\t});\n\t\t\tbreak;\n\n\t\tcase 'ObjectPattern':\n\t\t\tfor (const prop of param.properties) {\n\t\t\t\tif (prop.type === 'RestElement') {\n\t\t\t\t\t/** @type {ESTree.Expression[]} */\n\t\t\t\t\tconst props = [];\n\n\t\t\t\t\tfor (const p of param.properties) {\n\t\t\t\t\t\tif (p.type === 'Property' && p.key.type !== 'PrivateIdentifier') {\n\t\t\t\t\t\t\tif (p.key.type === 'Identifier' && !p.computed) {\n\t\t\t\t\t\t\t\tprops.push(b.literal(p.key.name));\n\t\t\t\t\t\t\t} else if (p.key.type === 'Literal') {\n\t\t\t\t\t\t\t\tprops.push(b.literal(String(p.key.value)));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprops.push(b.call('String', p.key));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rest_expression = b.call('$.exclude_from_object', expression, b.array(props));\n\n\t\t\t\t\tif (prop.argument.type === 'Identifier') {\n\t\t\t\t\t\tpaths.push({\n\t\t\t\t\t\t\tnode: prop.argument,\n\t\t\t\t\t\t\tis_rest: true,\n\t\t\t\t\t\t\thas_default_value,\n\t\t\t\t\t\t\texpression: rest_expression,\n\t\t\t\t\t\t\tupdate_expression: rest_expression\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_extract_paths(\n\t\t\t\t\t\t\tpaths,\n\t\t\t\t\t\t\tinserts,\n\t\t\t\t\t\t\tprop.argument,\n\t\t\t\t\t\t\trest_expression,\n\t\t\t\t\t\t\trest_expression,\n\t\t\t\t\t\t\thas_default_value\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst object_expression = b.member(\n\t\t\t\t\t\texpression,\n\t\t\t\t\t\tprop.key,\n\t\t\t\t\t\tprop.computed || prop.key.type !== 'Identifier'\n\t\t\t\t\t);\n\n\t\t\t\t\t_extract_paths(\n\t\t\t\t\t\tpaths,\n\t\t\t\t\t\tinserts,\n\t\t\t\t\t\tprop.value,\n\t\t\t\t\t\tobject_expression,\n\t\t\t\t\t\tobject_expression,\n\t\t\t\t\t\thas_default_value\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 'ArrayPattern': {\n\t\t\t// we create an intermediate declaration to convert iterables to arrays if necessary.\n\t\t\t// the consumer is responsible for setting the name of the identifier\n\t\t\tconst id = b.id('#');\n\n\t\t\tconst value = b.call(\n\t\t\t\t'$.to_array',\n\t\t\t\texpression,\n\t\t\t\tparam.elements.at(-1)?.type === 'RestElement' ? undefined : b.literal(param.elements.length)\n\t\t\t);\n\n\t\t\tinserts.push({ id, value });\n\n\t\t\tfor (let i = 0; i < param.elements.length; i += 1) {\n\t\t\t\tconst element = param.elements[i];\n\t\t\t\tif (element) {\n\t\t\t\t\tif (element.type === 'RestElement') {\n\t\t\t\t\t\tconst rest_expression = b.call(b.member(id, 'slice'), b.literal(i));\n\n\t\t\t\t\t\tif (element.argument.type === 'Identifier') {\n\t\t\t\t\t\t\tpaths.push({\n\t\t\t\t\t\t\t\tnode: element.argument,\n\t\t\t\t\t\t\t\tis_rest: true,\n\t\t\t\t\t\t\t\thas_default_value,\n\t\t\t\t\t\t\t\texpression: rest_expression,\n\t\t\t\t\t\t\t\tupdate_expression: rest_expression\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_extract_paths(\n\t\t\t\t\t\t\t\tpaths,\n\t\t\t\t\t\t\t\tinserts,\n\t\t\t\t\t\t\t\telement.argument,\n\t\t\t\t\t\t\t\trest_expression,\n\t\t\t\t\t\t\t\trest_expression,\n\t\t\t\t\t\t\t\thas_default_value\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst array_expression = b.member(id, b.literal(i), true);\n\n\t\t\t\t\t\t_extract_paths(\n\t\t\t\t\t\t\tpaths,\n\t\t\t\t\t\t\tinserts,\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\tarray_expression,\n\t\t\t\t\t\t\tarray_expression,\n\t\t\t\t\t\t\thas_default_value\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'AssignmentPattern': {\n\t\t\tconst fallback_expression = build_fallback(expression, param.right);\n\n\t\t\tif (param.left.type === 'Identifier') {\n\t\t\t\tpaths.push({\n\t\t\t\t\tnode: param.left,\n\t\t\t\t\tis_rest: false,\n\t\t\t\t\thas_default_value: true,\n\t\t\t\t\texpression: fallback_expression,\n\t\t\t\t\tupdate_expression\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t_extract_paths(paths, inserts, param.left, fallback_expression, update_expression, true);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn paths;\n}\n\n/**\n * Like `path.at(x)`, but skips over `TSNonNullExpression` and `TSAsExpression` nodes and eases assertions a bit\n * by removing the `| undefined` from the resulting type.\n *\n * @template {AST.SvelteNode} T\n * @param {T[]} path\n * @param {number} at\n */\nexport function get_parent(path, at) {\n\tlet node = path.at(at);\n\t// @ts-expect-error\n\tif (node.type === 'TSNonNullExpression' || node.type === 'TSAsExpression') {\n\t\treturn /** @type {T} */ (path.at(at < 0 ? at - 1 : at + 1));\n\t}\n\treturn /** @type {T} */ (node);\n}\n\n/**\n * Returns `true` if the expression is an identifier, a literal, a function expression,\n * or a logical expression that only contains simple expressions. Used to determine whether\n * something needs to be treated as though accessing it could have side-effects (i.e.\n * reading signals prematurely)\n * @param {ESTree.Expression} node\n * @returns {boolean}\n */\nexport function is_simple_expression(node) {\n\tif (\n\t\tnode.type === 'Literal' ||\n\t\tnode.type === 'Identifier' ||\n\t\tnode.type === 'ArrowFunctionExpression' ||\n\t\tnode.type === 'FunctionExpression'\n\t) {\n\t\treturn true;\n\t}\n\n\tif (node.type === 'ConditionalExpression') {\n\t\treturn (\n\t\t\tis_simple_expression(node.test) &&\n\t\t\tis_simple_expression(node.consequent) &&\n\t\t\tis_simple_expression(node.alternate)\n\t\t);\n\t}\n\n\tif (node.type === 'BinaryExpression' || node.type === 'LogicalExpression') {\n\t\treturn (\n\t\t\tnode.left.type !== 'PrivateIdentifier' &&\n\t\t\tis_simple_expression(node.left) &&\n\t\t\tis_simple_expression(node.right)\n\t\t);\n\t}\n\n\treturn false;\n}\n\n/**\n * @template {ESTree.SimpleCallExpression | ESTree.MemberExpression} T\n * @param {ESTree.ChainExpression & { expression : T } | T} node\n * @returns {T}\n */\nexport function unwrap_optional(node) {\n\treturn node.type === 'ChainExpression' ? node.expression : node;\n}\n\n/**\n * @param {ESTree.Expression | ESTree.Pattern} expression\n * @returns {boolean}\n */\nexport function is_expression_async(expression) {\n\tswitch (expression.type) {\n\t\tcase 'AwaitExpression': {\n\t\t\treturn true;\n\t\t}\n\t\tcase 'ArrayPattern': {\n\t\t\treturn expression.elements.some((element) => element && is_expression_async(element));\n\t\t}\n\t\tcase 'ArrayExpression': {\n\t\t\treturn expression.elements.some((element) => {\n\t\t\t\tif (!element) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (element.type === 'SpreadElement') {\n\t\t\t\t\treturn is_expression_async(element.argument);\n\t\t\t\t} else {\n\t\t\t\t\treturn is_expression_async(element);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tcase 'AssignmentPattern':\n\t\tcase 'AssignmentExpression':\n\t\tcase 'BinaryExpression':\n\t\tcase 'LogicalExpression': {\n\t\t\treturn (\n\t\t\t\t(expression.left.type !== 'PrivateIdentifier' && is_expression_async(expression.left)) ||\n\t\t\t\tis_expression_async(expression.right)\n\t\t\t);\n\t\t}\n\t\tcase 'CallExpression':\n\t\tcase 'NewExpression': {\n\t\t\treturn (\n\t\t\t\t(expression.callee.type !== 'Super' && is_expression_async(expression.callee)) ||\n\t\t\t\texpression.arguments.some((element) => {\n\t\t\t\t\tif (element.type === 'SpreadElement') {\n\t\t\t\t\t\treturn is_expression_async(element.argument);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn is_expression_async(element);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t\tcase 'ChainExpression': {\n\t\t\treturn is_expression_async(expression.expression);\n\t\t}\n\t\tcase 'ConditionalExpression': {\n\t\t\treturn (\n\t\t\t\tis_expression_async(expression.test) ||\n\t\t\t\tis_expression_async(expression.alternate) ||\n\t\t\t\tis_expression_async(expression.consequent)\n\t\t\t);\n\t\t}\n\t\tcase 'ImportExpression': {\n\t\t\treturn is_expression_async(expression.source);\n\t\t}\n\t\tcase 'MemberExpression': {\n\t\t\treturn (\n\t\t\t\t(expression.object.type !== 'Super' && is_expression_async(expression.object)) ||\n\t\t\t\t(expression.property.type !== 'PrivateIdentifier' &&\n\t\t\t\t\tis_expression_async(expression.property))\n\t\t\t);\n\t\t}\n\t\tcase 'ObjectPattern':\n\t\tcase 'ObjectExpression': {\n\t\t\treturn expression.properties.some((property) => {\n\t\t\t\tif (property.type === 'SpreadElement') {\n\t\t\t\t\treturn is_expression_async(property.argument);\n\t\t\t\t} else if (property.type === 'Property') {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(property.key.type !== 'PrivateIdentifier' && is_expression_async(property.key)) ||\n\t\t\t\t\t\tis_expression_async(property.value)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tcase 'RestElement': {\n\t\t\treturn is_expression_async(expression.argument);\n\t\t}\n\t\tcase 'SequenceExpression':\n\t\tcase 'TemplateLiteral': {\n\t\t\treturn expression.expressions.some((subexpression) => is_expression_async(subexpression));\n\t\t}\n\t\tcase 'TaggedTemplateExpression': {\n\t\t\treturn is_expression_async(expression.tag) || is_expression_async(expression.quasi);\n\t\t}\n\t\tcase 'UnaryExpression':\n\t\tcase 'UpdateExpression': {\n\t\t\treturn is_expression_async(expression.argument);\n\t\t}\n\t\tcase 'YieldExpression': {\n\t\t\treturn expression.argument ? is_expression_async(expression.argument) : false;\n\t\t}\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\n *\n * @param {ESTree.Expression} expression\n * @param {ESTree.Expression} fallback\n */\nexport function build_fallback(expression, fallback) {\n\tif (is_simple_expression(fallback)) {\n\t\treturn b.call('$.fallback', expression, fallback);\n\t}\n\n\tif (fallback.type === 'AwaitExpression' && is_simple_expression(fallback.argument)) {\n\t\treturn b.await(b.call('$.fallback', expression, fallback.argument));\n\t}\n\n\treturn is_expression_async(fallback)\n\t\t? b.await(b.call('$.fallback', expression, b.thunk(fallback, true), b.true))\n\t\t: b.call('$.fallback', expression, b.thunk(fallback), b.true);\n}\n\n/**\n * @param {ESTree.AssignmentOperator} operator\n * @param {ESTree.Identifier | ESTree.MemberExpression} left\n * @param {ESTree.Expression} right\n */\nexport function build_assignment_value(operator, left, right) {\n\treturn operator === '='\n\t\t? right\n\t\t: // turn something like x += 1 into x = x + 1\n\t\t\t['||=', '&&=', '??='].includes(operator)\n\t\t\t? b.logical(/** @type {ESTree.LogicalOperator} */ (operator.slice(0, -1)), left, right)\n\t\t\t: b.binary(/** @type {ESTree.BinaryOperator} */ (operator.slice(0, -1)), left, right);\n}\n\n/**\n * @param {ESTree.Node} node\n */\nexport function has_await_expression(node) {\n\tlet has_await = false;\n\n\twalk(node, null, {\n\t\tAwaitExpression(_node, context) {\n\t\t\thas_await = true;\n\t\t\tcontext.stop();\n\t\t},\n\t\t// don't traverse into these\n\t\tFunctionDeclaration() {},\n\t\tFunctionExpression() {},\n\t\tArrowFunctionExpression() {}\n\t});\n\n\treturn has_await;\n}\n\n/**\n * Turns `await ...` to `(await $.save(...))()`\n * @param {ESTree.Expression} expression\n */\nexport function save(expression) {\n\treturn b.call(b.await(b.call('$.save', expression)));\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/builders.js",
    "content": "/** @import * as ESTree from 'estree' */\nimport { walk } from 'zimmerframe';\nimport { regex_is_valid_identifier } from '../phases/patterns.js';\nimport { sanitize_template_string } from './sanitize_template_string.js';\nimport { has_await_expression } from './ast.js';\n\n/**\n * @param {Array<ESTree.Expression | ESTree.SpreadElement | null>} elements\n * @returns {ESTree.ArrayExpression}\n */\nexport function array(elements = []) {\n\treturn { type: 'ArrayExpression', elements };\n}\n\n/**\n * @param {Array<ESTree.Pattern | null>} elements\n * @returns {ESTree.ArrayPattern}\n */\nexport function array_pattern(elements) {\n\treturn { type: 'ArrayPattern', elements };\n}\n\n/**\n * @param {ESTree.Pattern} left\n * @param {ESTree.Expression} right\n * @returns {ESTree.AssignmentPattern}\n */\nexport function assignment_pattern(left, right) {\n\treturn { type: 'AssignmentPattern', left, right };\n}\n\n/**\n * @param {Array<ESTree.Pattern>} params\n * @param {ESTree.BlockStatement | ESTree.Expression} body\n * @param {boolean} async\n * @returns {ESTree.ArrowFunctionExpression}\n */\nexport function arrow(params, body, async = false) {\n\t// optimize `async () => await x()`, but not `async () => await x(await y)`\n\tif (async && body.type === 'AwaitExpression') {\n\t\tif (!has_await_expression(body.argument)) {\n\t\t\treturn arrow(params, body.argument);\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: 'ArrowFunctionExpression',\n\t\tparams,\n\t\tbody,\n\t\texpression: body.type !== 'BlockStatement',\n\t\tgenerator: false,\n\t\tasync\n\t};\n}\n\n/**\n * @param {ESTree.AssignmentOperator} operator\n * @param {ESTree.Pattern} left\n * @param {ESTree.Expression} right\n * @returns {ESTree.AssignmentExpression}\n */\nexport function assignment(operator, left, right) {\n\treturn { type: 'AssignmentExpression', operator, left, right };\n}\n\n/**\n * @param {ESTree.Expression} argument\n * @returns {ESTree.AwaitExpression}\n */\nfunction await_builder(argument) {\n\treturn { type: 'AwaitExpression', argument };\n}\n\n/**\n * @param {ESTree.BinaryOperator} operator\n * @param {ESTree.Expression} left\n * @param {ESTree.Expression} right\n * @returns {ESTree.BinaryExpression}\n */\nexport function binary(operator, left, right) {\n\treturn { type: 'BinaryExpression', operator, left, right };\n}\n\n/**\n * @param {ESTree.Statement[]} body\n * @returns {ESTree.BlockStatement}\n */\nexport function block(body) {\n\treturn { type: 'BlockStatement', body };\n}\n\n/**\n * @param {ESTree.Identifier | null} id\n * @param {ESTree.ClassBody} body\n * @param {ESTree.Expression | null} [superClass]\n * @param {ESTree.Decorator[]} [decorators]\n * @returns {ESTree.ClassExpression}\n */\nexport function class_expression(id, body, superClass, decorators = []) {\n\treturn { type: 'ClassExpression', body, superClass, decorators };\n}\n\n/**\n * @param {string} name\n * @param {ESTree.Statement} body\n * @returns {ESTree.LabeledStatement}\n */\nexport function labeled(name, body) {\n\treturn { type: 'LabeledStatement', label: id(name), body };\n}\n\n/**\n * @param {string | ESTree.Expression} callee\n * @param {...(ESTree.Expression | ESTree.SpreadElement | false | undefined | null)} args\n * @returns {ESTree.CallExpression}\n */\nexport function call(callee, ...args) {\n\tif (typeof callee === 'string') callee = id(callee);\n\targs = args.slice();\n\n\t// replacing missing arguments with `void(0)`, unless they're at the end in which case remove them\n\tlet i = args.length;\n\tlet popping = true;\n\twhile (i--) {\n\t\tif (!args[i]) {\n\t\t\tif (popping) {\n\t\t\t\targs.pop();\n\t\t\t} else {\n\t\t\t\targs[i] = void0;\n\t\t\t}\n\t\t} else {\n\t\t\tpopping = false;\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: 'CallExpression',\n\t\tcallee,\n\t\targuments: /** @type {Array<ESTree.Expression | ESTree.SpreadElement>} */ (args),\n\t\toptional: false\n\t};\n}\n\n/**\n * @param {string | ESTree.Expression} callee\n * @param {...ESTree.Expression} args\n * @returns {ESTree.ChainExpression}\n */\nexport function maybe_call(callee, ...args) {\n\tconst expression = /** @type {ESTree.SimpleCallExpression} */ (call(callee, ...args));\n\texpression.optional = true;\n\n\treturn {\n\t\ttype: 'ChainExpression',\n\t\texpression\n\t};\n}\n\n/**\n * @param {ESTree.UnaryOperator} operator\n * @param {ESTree.Expression} argument\n * @returns {ESTree.UnaryExpression}\n */\nexport function unary(operator, argument) {\n\treturn { type: 'UnaryExpression', argument, operator, prefix: true };\n}\n\nexport const void0 = unary('void', literal(0));\n\n/**\n * @param {ESTree.Expression} test\n * @param {ESTree.Expression} consequent\n * @param {ESTree.Expression} alternate\n * @returns {ESTree.ConditionalExpression}\n */\nexport function conditional(test, consequent, alternate) {\n\treturn { type: 'ConditionalExpression', test, consequent, alternate };\n}\n\n/**\n * @param {ESTree.LogicalOperator} operator\n * @param {ESTree.Expression} left\n * @param {ESTree.Expression} right\n * @returns {ESTree.LogicalExpression}\n */\nexport function logical(operator, left, right) {\n\treturn { type: 'LogicalExpression', operator, left, right };\n}\n\n/**\n * @param {ESTree.VariableDeclaration['kind']} kind\n * @param {ESTree.VariableDeclarator[]} declarations\n * @returns {ESTree.VariableDeclaration}\n */\nexport function declaration(kind, declarations) {\n\treturn {\n\t\ttype: 'VariableDeclaration',\n\t\tkind,\n\t\tdeclarations\n\t};\n}\n\n/**\n * @param {ESTree.Pattern | string} pattern\n * @param {ESTree.Expression | null} [init]\n * @returns {ESTree.VariableDeclarator}\n */\nexport function declarator(pattern, init) {\n\tif (typeof pattern === 'string') pattern = id(pattern);\n\treturn { type: 'VariableDeclarator', id: pattern, init };\n}\n\n/** @type {ESTree.EmptyStatement} */\nexport const empty = {\n\ttype: 'EmptyStatement'\n};\n\n/**\n * @param {ESTree.Expression | ESTree.MaybeNamedClassDeclaration | ESTree.MaybeNamedFunctionDeclaration} declaration\n * @returns {ESTree.ExportDefaultDeclaration}\n */\nexport function export_default(declaration) {\n\treturn { type: 'ExportDefaultDeclaration', declaration };\n}\n\n/**\n * @param {ESTree.VariableDeclaration | ESTree.Pattern} left\n * @param {ESTree.Expression} right\n * @param {ESTree.Statement} body\n * @param {boolean} [_await]\n * @returns {ESTree.ForOfStatement}\n */\nexport function for_of(left, right, body, _await = false) {\n\treturn {\n\t\ttype: 'ForOfStatement',\n\t\tleft,\n\t\tright,\n\t\tbody,\n\t\tawait: _await\n\t};\n}\n\n/**\n * @param {ESTree.Identifier} id\n * @param {ESTree.Pattern[]} params\n * @param {ESTree.BlockStatement} body\n * @param {boolean} async\n * @returns {ESTree.FunctionDeclaration}\n */\nexport function function_declaration(id, params, body, async = false) {\n\treturn {\n\t\ttype: 'FunctionDeclaration',\n\t\tid,\n\t\tparams,\n\t\tbody,\n\t\tgenerator: false,\n\t\tasync\n\t};\n}\n\n/**\n * @param {string} name\n * @param {ESTree.Statement[]} body\n * @returns {ESTree.Property & { value: ESTree.FunctionExpression}}}\n */\nexport function get(name, body) {\n\treturn prop('get', key(name), function_builder(null, [], block(body)));\n}\n\n/**\n * @param {string} name\n * @param {ESTree.SourceLocation | null} [loc]\n * @returns {ESTree.Identifier}\n */\nexport function id(name, loc) {\n\tconst node = /** @type {ESTree.Identifier} */ ({ type: 'Identifier', name });\n\tif (loc) node.loc = loc;\n\n\treturn node;\n}\n\n/**\n * @param {string} name\n * @returns {ESTree.PrivateIdentifier}\n */\nexport function private_id(name) {\n\treturn { type: 'PrivateIdentifier', name };\n}\n\n/**\n * @param {string} local\n * @returns {ESTree.ImportNamespaceSpecifier}\n */\nfunction import_namespace(local) {\n\treturn {\n\t\ttype: 'ImportNamespaceSpecifier',\n\t\tlocal: id(local)\n\t};\n}\n\n/**\n * @param {string} name\n * @param {ESTree.Expression} value\n * @returns {ESTree.Property}\n */\nexport function init(name, value) {\n\treturn prop('init', key(name), value);\n}\n\n/**\n * @param {string | boolean | null | number | RegExp} value\n * @returns {ESTree.Literal}\n */\nexport function literal(value) {\n\t// @ts-expect-error we don't want to muck around with bigint here\n\treturn { type: 'Literal', value };\n}\n\n/**\n * @param {ESTree.Expression | ESTree.Super} object\n * @param {string | ESTree.Expression | ESTree.PrivateIdentifier} property\n * @param {boolean} computed\n * @param {boolean} optional\n * @returns {ESTree.MemberExpression}\n */\nexport function member(object, property, computed = false, optional = false) {\n\tif (typeof property === 'string') {\n\t\tproperty = id(property);\n\t}\n\n\treturn { type: 'MemberExpression', object, property, computed, optional };\n}\n\n/**\n * @param {string} path\n * @returns {ESTree.Identifier | ESTree.MemberExpression}\n */\nexport function member_id(path) {\n\tconst parts = path.split('.');\n\n\t/** @type {ESTree.Identifier | ESTree.MemberExpression} */\n\tlet expression = id(parts[0]);\n\n\tfor (let i = 1; i < parts.length; i += 1) {\n\t\texpression = member(expression, id(parts[i]));\n\t}\n\treturn expression;\n}\n\n/**\n * @param {Array<ESTree.Property | ESTree.SpreadElement>} properties\n * @returns {ESTree.ObjectExpression}\n */\nexport function object(properties) {\n\treturn { type: 'ObjectExpression', properties };\n}\n\n/**\n * @param {Array<ESTree.RestElement | ESTree.AssignmentProperty | ESTree.Property>} properties\n * @returns {ESTree.ObjectPattern}\n */\nexport function object_pattern(properties) {\n\t// @ts-expect-error the types appear to be wrong\n\treturn { type: 'ObjectPattern', properties };\n}\n\n/**\n * @template {ESTree.Expression} Value\n * @param {'init' | 'get' | 'set'} kind\n * @param {ESTree.Expression} key\n * @param {Value} value\n * @param {boolean} computed\n * @returns {ESTree.Property & { value: Value }}\n */\nexport function prop(kind, key, value, computed = false) {\n\treturn { type: 'Property', kind, key, value, method: false, shorthand: false, computed };\n}\n\n/**\n * @param {ESTree.Expression | ESTree.PrivateIdentifier} key\n * @param {ESTree.Expression | null | undefined} value\n * @param {boolean} computed\n * @param {boolean} is_static\n * @returns {ESTree.PropertyDefinition}\n */\nexport function prop_def(key, value, computed = false, is_static = false) {\n\treturn {\n\t\ttype: 'PropertyDefinition',\n\t\tdecorators: [],\n\t\tkey,\n\t\tvalue,\n\t\tcomputed,\n\t\tstatic: is_static\n\t};\n}\n\n/**\n * @param {string} cooked\n * @param {boolean} tail\n * @returns {ESTree.TemplateElement}\n */\nexport function quasi(cooked, tail = false) {\n\tconst raw = sanitize_template_string(cooked);\n\treturn { type: 'TemplateElement', value: { raw, cooked }, tail };\n}\n\n/**\n * @param {ESTree.Pattern} argument\n * @returns {ESTree.RestElement}\n */\nexport function rest(argument) {\n\treturn { type: 'RestElement', argument };\n}\n\n/**\n * @param {ESTree.Expression[]} expressions\n * @returns {ESTree.SequenceExpression}\n */\nexport function sequence(expressions) {\n\treturn { type: 'SequenceExpression', expressions };\n}\n\n/**\n * @param {string} name\n * @param {ESTree.Statement[]} body\n * @returns {ESTree.Property & { value: ESTree.FunctionExpression}}\n */\nexport function set(name, body) {\n\treturn prop('set', key(name), function_builder(null, [id('$$value')], block(body)));\n}\n\n/**\n * @param {ESTree.Expression} argument\n * @returns {ESTree.SpreadElement}\n */\nexport function spread(argument) {\n\treturn { type: 'SpreadElement', argument };\n}\n\n/**\n * @param {ESTree.Expression} expression\n * @returns {ESTree.ExpressionStatement}\n */\nexport function stmt(expression) {\n\treturn { type: 'ExpressionStatement', expression };\n}\n\n/**\n * @param {ESTree.TemplateElement[]} elements\n * @param {ESTree.Expression[]} expressions\n * @returns {ESTree.TemplateLiteral}\n */\nexport function template(elements, expressions) {\n\treturn { type: 'TemplateLiteral', quasis: elements, expressions };\n}\n\n/**\n * @param {ESTree.Expression | ESTree.BlockStatement} expression\n * @param {boolean} [async]\n * @returns {ESTree.Expression}\n */\nexport function thunk(expression, async = false) {\n\treturn unthunk(arrow([], expression, async));\n}\n\n/**\n * Replace \"(arg) => func(arg)\" to \"func\"\n * @param {ESTree.ArrowFunctionExpression} expression\n * @returns {ESTree.Expression}\n */\nexport function unthunk(expression) {\n\tif (\n\t\texpression.async === false &&\n\t\texpression.body.type === 'CallExpression' &&\n\t\texpression.body.callee.type === 'Identifier' &&\n\t\texpression.params.length === expression.body.arguments.length &&\n\t\texpression.params.every((param, index) => {\n\t\t\tconst arg = /** @type {ESTree.SimpleCallExpression} */ (expression.body).arguments[index];\n\t\t\treturn param.type === 'Identifier' && arg.type === 'Identifier' && param.name === arg.name;\n\t\t})\n\t) {\n\t\treturn expression.body.callee;\n\t}\n\treturn expression;\n}\n\n/**\n *\n * @param {string | ESTree.Expression} expression\n * @param  {...ESTree.Expression} args\n * @returns {ESTree.NewExpression}\n */\nfunction new_builder(expression, ...args) {\n\tif (typeof expression === 'string') expression = id(expression);\n\n\treturn {\n\t\tcallee: expression,\n\t\targuments: args,\n\t\ttype: 'NewExpression'\n\t};\n}\n\n/**\n * @param {ESTree.UpdateOperator} operator\n * @param {ESTree.Expression} argument\n * @param {boolean} prefix\n * @returns {ESTree.UpdateExpression}\n */\nexport function update(operator, argument, prefix = false) {\n\treturn { type: 'UpdateExpression', operator, argument, prefix };\n}\n\n/**\n * @param {ESTree.Expression} test\n * @param {ESTree.Statement} body\n * @returns {ESTree.DoWhileStatement}\n */\nexport function do_while(test, body) {\n\treturn { type: 'DoWhileStatement', test, body };\n}\n\nconst true_instance = literal(true);\nconst false_instance = literal(false);\nconst null_instance = literal(null);\n\n/** @type {ESTree.DebuggerStatement} */\nconst debugger_builder = {\n\ttype: 'DebuggerStatement'\n};\n\n/** @type {ESTree.ThisExpression} */\nconst this_instance = {\n\ttype: 'ThisExpression'\n};\n\n/**\n * @param {string | ESTree.Pattern} pattern\n * @param {ESTree.Expression | null} [init]\n * @returns {ESTree.VariableDeclaration}\n */\nfunction let_builder(pattern, init) {\n\treturn declaration('let', [declarator(pattern, init)]);\n}\n\n/**\n * @param {string | ESTree.Pattern} pattern\n * @param {ESTree.Expression | null} init\n * @returns {ESTree.VariableDeclaration}\n */\nfunction const_builder(pattern, init) {\n\treturn declaration('const', [declarator(pattern, init)]);\n}\n\n/**\n * @param {string | ESTree.Pattern} pattern\n * @param {ESTree.Expression | null} [init]\n * @returns {ESTree.VariableDeclaration}\n */\nfunction var_builder(pattern, init) {\n\treturn declaration('var', [declarator(pattern, init)]);\n}\n\n/**\n *\n * @param {ESTree.VariableDeclaration | ESTree.Expression | null} init\n * @param {ESTree.Expression} test\n * @param {ESTree.Expression} update\n * @param {ESTree.Statement} body\n * @returns {ESTree.ForStatement}\n */\nfunction for_builder(init, test, update, body) {\n\treturn { type: 'ForStatement', init, test, update, body };\n}\n\n/**\n *\n * @param {'constructor' | 'method' | 'get' | 'set'} kind\n * @param {ESTree.Expression | ESTree.PrivateIdentifier} key\n * @param {ESTree.Pattern[]} params\n * @param {ESTree.Statement[]} body\n * @param {boolean} computed\n * @param {boolean} is_static\n * @returns {ESTree.MethodDefinition}\n */\nexport function method(kind, key, params, body, computed = false, is_static = false) {\n\treturn {\n\t\ttype: 'MethodDefinition',\n\t\tdecorators: [],\n\t\tkey,\n\t\tkind,\n\t\tvalue: function_builder(null, params, block(body)),\n\t\tcomputed,\n\t\tstatic: is_static\n\t};\n}\n\n/**\n *\n * @param {ESTree.Identifier | null} id\n * @param {ESTree.Pattern[]} params\n * @param {ESTree.BlockStatement} body\n * @returns {ESTree.FunctionExpression}\n */\nfunction function_builder(id, params, body, async = false) {\n\treturn {\n\t\ttype: 'FunctionExpression',\n\t\tid,\n\t\tparams,\n\t\tbody,\n\t\tgenerator: false,\n\t\tasync\n\t};\n}\n\n/**\n * @param {ESTree.Expression} test\n * @param {ESTree.Statement} consequent\n * @param {ESTree.Statement} [alternate]\n * @returns {ESTree.IfStatement}\n */\nfunction if_builder(test, consequent, alternate) {\n\treturn { type: 'IfStatement', test, consequent, alternate };\n}\n\n/**\n * @param {string} as\n * @param {string} source\n * @returns {ESTree.ImportDeclaration}\n */\nexport function import_all(as, source) {\n\treturn {\n\t\ttype: 'ImportDeclaration',\n\t\tattributes: [],\n\t\tsource: literal(source),\n\t\tspecifiers: [import_namespace(as)]\n\t};\n}\n\n/**\n * @param {Array<[string, string]>} parts\n * @param {string} source\n * @returns {ESTree.ImportDeclaration}\n */\nexport function imports(parts, source) {\n\treturn {\n\t\ttype: 'ImportDeclaration',\n\t\tattributes: [],\n\t\tsource: literal(source),\n\t\tspecifiers: parts.map((p) => ({\n\t\t\ttype: 'ImportSpecifier',\n\t\t\timported: id(p[0]),\n\t\t\tlocal: id(p[1])\n\t\t}))\n\t};\n}\n\n/**\n * @param {ESTree.Expression | null} argument\n * @returns {ESTree.ReturnStatement}\n */\nfunction return_builder(argument = null) {\n\treturn { type: 'ReturnStatement', argument };\n}\n\n/**\n * @param {string} str\n * @returns {ESTree.ThrowStatement}\n */\nexport function throw_error(str) {\n\treturn {\n\t\ttype: 'ThrowStatement',\n\t\targument: new_builder('Error', literal(str))\n\t};\n}\n\nexport {\n\tawait_builder as await,\n\tlet_builder as let,\n\tconst_builder as const,\n\tvar_builder as var,\n\ttrue_instance as true,\n\tfalse_instance as false,\n\tfor_builder as for,\n\tfunction_builder as function,\n\treturn_builder as return,\n\tif_builder as if,\n\tthis_instance as this,\n\tnull_instance as null,\n\tdebugger_builder as debugger\n};\n\n/**\n * @param {string} name\n * @returns {ESTree.Expression}\n */\nexport function key(name) {\n\treturn regex_is_valid_identifier.test(name) ? id(name) : literal(name);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/compile_diagnostic.js",
    "content": "/** @import { Location } from 'locate-character' */\nimport * as state from '../state.js';\n\nconst regex_tabs = /^\\t+/;\n\n/**\n * @param {string} str\n */\nfunction tabs_to_spaces(str) {\n\treturn str.replace(regex_tabs, (match) => match.split('\\t').join('  '));\n}\n\n/**\n * @param {number} line\n * @param {number} column\n */\nfunction get_code_frame(line, column) {\n\tconst lines = state.source_lines;\n\tconst frame_start = Math.max(0, line - 2);\n\tconst frame_end = Math.min(line + 3, lines.length);\n\tconst digits = String(frame_end + 1).length;\n\treturn lines\n\t\t.slice(frame_start, frame_end)\n\t\t.map((str, i) => {\n\t\t\tconst is_error_line = frame_start + i === line;\n\t\t\tconst line_num = String(i + frame_start + 1).padStart(digits, ' ');\n\t\t\tif (is_error_line) {\n\t\t\t\tconst indicator =\n\t\t\t\t\t' '.repeat(digits + 2 + tabs_to_spaces(str.slice(0, column)).length) + '^';\n\t\t\t\treturn `${line_num}: ${tabs_to_spaces(str)}\\n${indicator}`;\n\t\t\t}\n\t\t\treturn `${line_num}: ${tabs_to_spaces(str)}`;\n\t\t})\n\t\t.join('\\n');\n}\n\n/**\n * @typedef {{\n * \tcode: string;\n * \tmessage: string;\n *  stack?: string;\n * \tfilename?: string;\n * \tstart?: Location;\n * \tend?: Location;\n * \tposition?: [number, number];\n * \tframe?: string;\n * }} ICompileDiagnostic\n */\n\n/** @implements {ICompileDiagnostic} */\nexport class CompileDiagnostic {\n\tname = 'CompileDiagnostic';\n\n\t/**\n\t * @param {string} code\n\t * @param {string} message\n\t * @param {[number, number] | undefined} position\n\t */\n\tconstructor(code, message, position) {\n\t\tthis.code = code;\n\t\tthis.message = message;\n\n\t\tif (state.filename !== state.UNKNOWN_FILENAME) {\n\t\t\tthis.filename = state.filename;\n\t\t}\n\n\t\tif (position) {\n\t\t\tthis.position = position;\n\t\t\tthis.start = state.locator(position[0]);\n\t\t\tthis.end = state.locator(position[1]);\n\t\t\tif (this.start && this.end) {\n\t\t\t\tthis.frame = get_code_frame(this.start.line - 1, this.end.column);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoString() {\n\t\tlet out = `${this.code}: ${this.message}`;\n\n\t\tif (this.filename) {\n\t\t\tout += `\\n${this.filename}`;\n\n\t\t\tif (this.start) {\n\t\t\t\tout += `:${this.start.line}:${this.start.column}`;\n\t\t\t}\n\t\t}\n\n\t\tif (this.frame) {\n\t\t\tout += `\\n${this.frame}`;\n\t\t}\n\n\t\treturn out;\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tfilename: this.filename,\n\t\t\tstart: this.start,\n\t\t\tend: this.end,\n\t\t\tposition: this.position,\n\t\t\tframe: this.frame\n\t\t};\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/extract_svelte_ignore.js",
    "content": "import { IGNORABLE_RUNTIME_WARNINGS } from '../../constants.js';\nimport fuzzymatch from '../phases/1-parse/utils/fuzzymatch.js';\nimport * as w from '../warnings.js';\n\nconst regex_svelte_ignore = /^\\s*svelte-ignore\\s/;\n\n/** @type {Record<string, string>} Map of legacy code -> new code */\nconst replacements = {\n\t'non-top-level-reactive-declaration': 'reactive_declaration_invalid_placement',\n\t'module-script-reactive-declaration': 'reactive_declaration_module_script',\n\t'empty-block': 'block_empty',\n\t'avoid-is': 'attribute_avoid_is',\n\t'invalid-html-attribute': 'attribute_invalid_property_name',\n\t'a11y-structure': 'a11y_figcaption_parent',\n\t'illegal-attribute-character': 'attribute_illegal_colon',\n\t'invalid-rest-eachblock-binding': 'bind_invalid_each_rest',\n\t'unused-export-let': 'export_let_unused'\n};\n\nconst codes = w.codes.concat(IGNORABLE_RUNTIME_WARNINGS);\n\n/**\n * @param {number} offset\n * @param {string} text\n * @param {boolean} runes\n * @returns {string[]}\n */\nexport function extract_svelte_ignore(offset, text, runes) {\n\tconst match = regex_svelte_ignore.exec(text);\n\tif (!match) return [];\n\n\tlet length = match[0].length;\n\toffset += length;\n\n\t/** @type {string[]} */\n\tconst ignores = [];\n\n\tif (runes) {\n\t\t// Warnings have to be separated by commas, everything after is interpreted as prose\n\t\tfor (const match of text.slice(length).matchAll(/([\\w$-]+)(,)?/gm)) {\n\t\t\tconst code = match[1];\n\n\t\t\tif (codes.includes(code)) {\n\t\t\t\tignores.push(code);\n\t\t\t} else {\n\t\t\t\tconst replacement = replacements[code] ?? code.replace(/-/g, '_');\n\n\t\t\t\t// The type cast is for some reason necessary to pass the type check in CI\n\t\t\t\tconst start = offset + /** @type {number} */ (match.index);\n\t\t\t\tconst end = start + code.length;\n\n\t\t\t\tif (codes.includes(replacement)) {\n\t\t\t\t\tw.legacy_code({ start, end }, code, replacement);\n\t\t\t\t} else {\n\t\t\t\t\tconst suggestion = fuzzymatch(code, codes);\n\t\t\t\t\tw.unknown_code({ start, end }, code, suggestion);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!match[2]) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// Non-runes mode: lax parsing, backwards compat with old codes\n\t\tfor (const match of text.slice(length).matchAll(/[\\w$-]+/gm)) {\n\t\t\tconst code = match[0];\n\n\t\t\tignores.push(code);\n\n\t\t\tif (!codes.includes(code)) {\n\t\t\t\tconst replacement = replacements[code] ?? code.replace(/-/g, '_');\n\n\t\t\t\tif (codes.includes(replacement)) {\n\t\t\t\t\tignores.push(replacement);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ignores;\n}\n\n/**\n * Replaces legacy svelte-ignore codes with new codes.\n * @param {string} text\n * @returns {string}\n */\nexport function migrate_svelte_ignore(text) {\n\tconst match = regex_svelte_ignore.exec(text);\n\tif (!match) return text;\n\n\tconst length = match[0].length;\n\treturn (\n\t\ttext.substring(0, length) +\n\t\ttext.substring(length).replace(/\\w+-\\w+(-\\w+)*/g, (code, _, idx) => {\n\t\t\tlet replacement = replacements[code] ?? code.replace(/-/g, '_');\n\t\t\tif (/\\w+-\\w+/.test(text.substring(length + idx + code.length))) {\n\t\t\t\treplacement += ',';\n\t\t\t}\n\t\t\treturn replacement;\n\t\t})\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/mapped_code.js",
    "content": "/** @import { ValidatedCompileOptions } from '#compiler' */\n/** @import { Processed } from '../preprocess/public.js' */\n/** @import { SourceMap } from 'magic-string' */\n/** @import { Source } from '../preprocess/private.js' */\n/** @import { DecodedSourceMap, SourceMapSegment, RawSourceMap } from '@jridgewell/remapping' */\nimport remapping from '@jridgewell/remapping';\nimport { push_array } from './push_array.js';\n\n/**\n * @param {string} s\n */\nfunction last_line_length(s) {\n\treturn s.length - s.lastIndexOf('\\n') - 1;\n}\n// mutate map in-place\n\n/**\n * @param {DecodedSourceMap} map\n * @param {{ line: number; column: number; }} offset\n * @param {number} source_index\n */\nexport function sourcemap_add_offset(map, offset, source_index) {\n\tif (map.mappings.length == 0) return;\n\tfor (let line = 0; line < map.mappings.length; line++) {\n\t\tconst segment_list = map.mappings[line];\n\t\tfor (let segment = 0; segment < segment_list.length; segment++) {\n\t\t\tconst seg = segment_list[segment];\n\t\t\t// shift only segments that belong to component source file\n\t\t\tif (seg[1] === source_index) {\n\t\t\t\t// also ensures that seg.length >= 4\n\t\t\t\t// shift column if it points at the first line\n\t\t\t\tif (seg[2] === 0) {\n\t\t\t\t\t/** @type {any} */ (seg[3]) += offset.column;\n\t\t\t\t}\n\t\t\t\t// shift line\n\t\t\t\t/** @type {any} */ (seg[2]) += offset.line;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @template T\n * @param {T[]} this_table\n * @param {T[]} other_table\n * @returns {[T[], number[], boolean, boolean]}\n */\nfunction merge_tables(this_table, other_table) {\n\tconst new_table = this_table.slice();\n\tconst idx_map = [];\n\tother_table = other_table || [];\n\tlet val_changed = false;\n\tfor (const [other_idx, other_val] of other_table.entries()) {\n\t\tconst this_idx = this_table.indexOf(other_val);\n\t\tif (this_idx >= 0) {\n\t\t\tidx_map[other_idx] = this_idx;\n\t\t} else {\n\t\t\tconst new_idx = new_table.length;\n\t\t\tnew_table[new_idx] = other_val;\n\t\t\tidx_map[other_idx] = new_idx;\n\t\t\tval_changed = true;\n\t\t}\n\t}\n\tlet idx_changed = val_changed;\n\tif (val_changed) {\n\t\tif (idx_map.find((val, idx) => val != idx) === undefined) {\n\t\t\t// idx_map is identity map [0, 1, 2, 3, 4, ....]\n\t\t\tidx_changed = false;\n\t\t}\n\t}\n\treturn [new_table, idx_map, val_changed, idx_changed];\n}\nconst regex_line_token = /([^\\w\\s]|\\s+)/g;\n/** */\nexport class MappedCode {\n\t/**\n\t * @type {string}\n\t */\n\tstring = /** @type {any} */ (undefined);\n\n\t/**\n\t * @type {DecodedSourceMap}\n\t */\n\tmap = /** @type {any} */ (undefined);\n\n\t/**\n\t * @param {string} string\n\t * @param {DecodedSourceMap | null} map\n\t */\n\tconstructor(string = '', map = null) {\n\t\tthis.string = string;\n\t\tif (map) {\n\t\t\tthis.map = map;\n\t\t} else {\n\t\t\tthis.map = {\n\t\t\t\tversion: 3,\n\t\t\t\tmappings: [],\n\t\t\t\tsources: [],\n\t\t\t\tnames: []\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t * concat in-place (mutable), return this (chainable)\n\t * will also mutate the `other` object\n\t * @param {MappedCode} other\n\t * @returns {MappedCode}\n\t */\n\tconcat(other) {\n\t\t// noop: if one is empty, return the other\n\t\tif (other.string == '') return this;\n\t\tif (this.string == '') {\n\t\t\tthis.string = other.string;\n\t\t\tthis.map = other.map;\n\t\t\treturn this;\n\t\t}\n\t\t// compute last line length before mutating\n\t\tconst column_offset = last_line_length(this.string);\n\t\tthis.string += other.string;\n\t\tconst m1 = this.map;\n\t\tconst m2 = other.map;\n\t\tif (m2.mappings.length == 0) return this;\n\t\t// combine sources and names\n\t\tconst [sources, new_source_idx, sources_changed, sources_idx_changed] = merge_tables(\n\t\t\tm1.sources,\n\t\t\tm2.sources\n\t\t);\n\t\tconst [names, new_name_idx, names_changed, names_idx_changed] = merge_tables(\n\t\t\tm1.names,\n\t\t\tm2.names\n\t\t);\n\t\tif (sources_changed) m1.sources = sources;\n\t\tif (names_changed) m1.names = names;\n\t\t// unswitched loops are faster\n\t\tif (sources_idx_changed && names_idx_changed) {\n\t\t\tfor (let line = 0; line < m2.mappings.length; line++) {\n\t\t\t\tconst segment_list = m2.mappings[line];\n\t\t\t\tfor (let segment = 0; segment < segment_list.length; segment++) {\n\t\t\t\t\tconst seg = segment_list[segment];\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (seg[1] >= 0) seg[1] = new_source_idx[seg[1]];\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (seg[4] >= 0) seg[4] = new_name_idx[seg[4]];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (sources_idx_changed) {\n\t\t\tfor (let line = 0; line < m2.mappings.length; line++) {\n\t\t\t\tconst segment_list = m2.mappings[line];\n\t\t\t\tfor (let segment = 0; segment < segment_list.length; segment++) {\n\t\t\t\t\tconst seg = segment_list[segment];\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (seg[1] >= 0) seg[1] = new_source_idx[seg[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (names_idx_changed) {\n\t\t\tfor (let line = 0; line < m2.mappings.length; line++) {\n\t\t\t\tconst segment_list = m2.mappings[line];\n\t\t\t\tfor (let segment = 0; segment < segment_list.length; segment++) {\n\t\t\t\t\tconst seg = segment_list[segment];\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (seg[4] >= 0) seg[4] = new_name_idx[seg[4]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// combine the mappings\n\t\t// combine\n\t\t// 1. last line of first map\n\t\t// 2. first line of second map\n\t\t// columns of 2 must be shifted\n\t\tif (m2.mappings.length > 0 && column_offset > 0) {\n\t\t\tconst first_line = m2.mappings[0];\n\t\t\tfor (let i = 0; i < first_line.length; i++) {\n\t\t\t\tfirst_line[i][0] += column_offset;\n\t\t\t}\n\t\t}\n\t\t// combine last line + first line\n\t\tpush_array(\n\t\t\tm1.mappings[m1.mappings.length - 1],\n\t\t\t/** @type {SourceMapSegment[]} */ (m2.mappings.shift())\n\t\t);\n\t\t// append other lines\n\t\tpush_array(m1.mappings, m2.mappings);\n\t\treturn this;\n\t}\n\n\t/**\n\t * @static\n\t * @param {string} string\n\t * @param {DecodedSourceMap} [map]\n\t * @returns {MappedCode}\n\t */\n\tstatic from_processed(string, map) {\n\t\tconst line_count = string.split('\\n').length;\n\t\tif (map) {\n\t\t\t// ensure that count of source map mappings lines\n\t\t\t// is equal to count of generated code lines\n\t\t\t// (some tools may produce less)\n\t\t\tconst missing_lines = line_count - map.mappings.length;\n\t\t\tfor (let i = 0; i < missing_lines; i++) {\n\t\t\t\tmap.mappings.push([]);\n\t\t\t}\n\t\t\treturn new MappedCode(string, map);\n\t\t}\n\t\tif (string == '') return new MappedCode();\n\t\tmap = { version: 3, names: [], sources: [], mappings: [] };\n\t\t// add empty SourceMapSegment[] for every line\n\t\tfor (let i = 0; i < line_count; i++) map.mappings.push([]);\n\t\treturn new MappedCode(string, map);\n\t}\n\n\t/**\n\t * @static\n\t * @param {Source} opts\n\t * @returns {MappedCode}\n\t */\n\tstatic from_source({ source, file_basename, get_location }) {\n\t\t/**\n\t\t * @type {{ line: number; column: number; }}\n\t\t */\n\t\tlet offset = get_location(0);\n\t\tif (!offset) offset = { line: 0, column: 0 };\n\n\t\t/**\n\t\t * @type {DecodedSourceMap}\n\t\t */\n\t\tconst map = { version: 3, names: [], sources: [file_basename], mappings: [] };\n\t\tif (source == '') return new MappedCode(source, map);\n\t\t// we create a high resolution identity map here,\n\t\t// we know that it will eventually be merged with svelte's map,\n\t\t// at which stage the resolution will decrease.\n\t\tconst line_list = source.split('\\n');\n\t\tfor (let line = 0; line < line_list.length; line++) {\n\t\t\tmap.mappings.push([]);\n\t\t\tconst token_list = line_list[line].split(regex_line_token);\n\t\t\tfor (let token = 0, column = 0; token < token_list.length; token++) {\n\t\t\t\tif (token_list[token] == '') continue;\n\t\t\t\tmap.mappings[line].push([column, 0, offset.line + line, column]);\n\t\t\t\tcolumn += token_list[token].length;\n\t\t\t}\n\t\t}\n\t\t// shift columns in first line\n\t\tconst segment_list = map.mappings[0];\n\t\tfor (let segment = 0; segment < segment_list.length; segment++) {\n\t\t\t// @ts-ignore\n\t\t\tsegment_list[segment][3] += offset.column;\n\t\t}\n\t\treturn new MappedCode(source, map);\n\t}\n}\n\n// browser vs node.js\nconst b64enc =\n\ttypeof window !== 'undefined' && typeof btoa === 'function'\n\t\t? /** @param {string} str */ (str) => btoa(unescape(encodeURIComponent(str)))\n\t\t: /** @param {string} str */ (str) => Buffer.from(str).toString('base64');\nconst b64dec =\n\ttypeof window !== 'undefined' && typeof atob === 'function'\n\t\t? atob\n\t\t: /** @param {any} a */ (a) => Buffer.from(a, 'base64').toString();\n\n/**\n * @param {string} filename Basename of the input file\n * @param {Array<DecodedSourceMap | RawSourceMap>} sourcemap_list\n */\nexport function combine_sourcemaps(filename, sourcemap_list) {\n\tif (sourcemap_list.length == 0) return null;\n\tlet map_idx = 1;\n\tconst map =\n\t\tsourcemap_list.slice(0, -1).find((m) => m.sources.length !== 1) === undefined\n\t\t\t? remapping(\n\t\t\t\t\t// use array interface\n\t\t\t\t\t// only the oldest sourcemap can have multiple sources\n\t\t\t\t\tsourcemap_list,\n\t\t\t\t\t() => null,\n\t\t\t\t\ttrue // skip optional field `sourcesContent`\n\t\t\t\t)\n\t\t\t: remapping(\n\t\t\t\t\t// use loader interface\n\t\t\t\t\tsourcemap_list[0], // last map\n\t\t\t\t\t(sourcefile) => {\n\t\t\t\t\t\t// TODO the equality check assumes that the preprocessor map has the input file as a relative path in sources,\n\t\t\t\t\t\t// e.g. when the input file is `src/foo/bar.svelte`, then sources is expected to contain just `bar.svelte`.\n\t\t\t\t\t\t// Therefore filename also needs to be the basename of the path. This feels brittle, investigate how we can\n\t\t\t\t\t\t// harden this (without breaking other tooling that assumes this behavior).\n\t\t\t\t\t\tif (sourcefile === filename && sourcemap_list[map_idx]) {\n\t\t\t\t\t\t\treturn sourcemap_list[map_idx++]; // idx 1, 2, ...\n\t\t\t\t\t\t\t// bundle file = branch node\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null; // source file = leaf node\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttrue\n\t\t\t\t);\n\tif (!map.file) delete map.file; // skip optional field `file`\n\t// When source maps are combined and the leading map is empty, sources is not set.\n\t// Add the filename to the empty array in this case.\n\t// Further improvements to remapping may help address this as well https://github.com/ampproject/remapping/issues/116\n\tif (!map.sources.length) map.sources = [filename];\n\treturn map;\n}\n\n/**\n * @param {string} filename\n * @param {SourceMap} svelte_map\n * @param {string | DecodedSourceMap | RawSourceMap} preprocessor_map_input\n * @returns {SourceMap}\n */\nfunction apply_preprocessor_sourcemap(filename, svelte_map, preprocessor_map_input) {\n\tif (!svelte_map || !preprocessor_map_input) return svelte_map;\n\tconst preprocessor_map =\n\t\ttypeof preprocessor_map_input === 'string'\n\t\t\t? JSON.parse(preprocessor_map_input)\n\t\t\t: preprocessor_map_input;\n\tconst result_map = combine_sourcemaps(filename, [svelte_map, preprocessor_map]);\n\t// Svelte expects a SourceMap which includes toUrl and toString. Instead of wrapping our output in a class,\n\t// we just tack on the extra properties.\n\tObject.defineProperties(result_map, {\n\t\ttoString: {\n\t\t\tenumerable: false,\n\t\t\tvalue: function toString() {\n\t\t\t\treturn JSON.stringify(this);\n\t\t\t}\n\t\t},\n\t\ttoUrl: {\n\t\t\tenumerable: false,\n\t\t\tvalue: function toUrl() {\n\t\t\t\treturn 'data:application/json;charset=utf-8;base64,' + b64enc(this.toString());\n\t\t\t}\n\t\t}\n\t});\n\treturn /** @type {any} */ (result_map);\n}\nconst regex_data_uri = /data:(?:application|text)\\/json;(?:charset[:=]\\S+?;)?base64,(\\S*)/;\n// parse attached sourcemap in processed.code\n\n/**\n * @param {Processed} processed\n * @param {'script' | 'style'} tag_name\n * @returns {void}\n */\nexport function parse_attached_sourcemap(processed, tag_name) {\n\tconst r_in = '[#@]\\\\s*sourceMappingURL\\\\s*=\\\\s*(\\\\S*)';\n\tconst regex =\n\t\ttag_name == 'script'\n\t\t\t? new RegExp('(?://' + r_in + ')|(?:/\\\\*' + r_in + '\\\\s*\\\\*/)$')\n\t\t\t: new RegExp('/\\\\*' + r_in + '\\\\s*\\\\*/$');\n\n\t/**\n\t * @param {any} message\n\t */\n\tfunction log_warning(message) {\n\t\t// code_start: help to find preprocessor\n\t\tconst code_start =\n\t\t\tprocessed.code.length < 100 ? processed.code : processed.code.slice(0, 100) + ' [...]';\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(`warning: ${message}. processed.code = ${JSON.stringify(code_start)}`);\n\t}\n\tprocessed.code = processed.code.replace(regex, (_, match1, match2) => {\n\t\tconst map_url = tag_name == 'script' ? match1 || match2 : match1;\n\t\tconst map_data = (map_url.match(regex_data_uri) || [])[1];\n\t\tif (map_data) {\n\t\t\t// sourceMappingURL is data URL\n\t\t\tif (processed.map) {\n\t\t\t\tlog_warning(\n\t\t\t\t\t'Not implemented. ' +\n\t\t\t\t\t\t'Found sourcemap in both processed.code and processed.map. ' +\n\t\t\t\t\t\t'Please update your preprocessor to return only one sourcemap.'\n\t\t\t\t);\n\t\t\t\t// ignore attached sourcemap\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tprocessed.map = b64dec(map_data); // use attached sourcemap\n\t\t\treturn ''; // remove from processed.code\n\t\t}\n\t\t// sourceMappingURL is path or URL\n\t\tif (!processed.map) {\n\t\t\tlog_warning(\n\t\t\t\t`Found sourcemap path ${JSON.stringify(\n\t\t\t\t\tmap_url\n\t\t\t\t)} in processed.code, but no sourcemap data. ` +\n\t\t\t\t\t'Please update your preprocessor to return sourcemap data directly.'\n\t\t\t);\n\t\t}\n\t\t// ignore sourcemap path\n\t\treturn ''; // remove from processed.code\n\t});\n}\n\n/**\n * @param {{ code: string, map: SourceMap}} result\n * @param {ValidatedCompileOptions} options\n * @param {string} source_name\n */\nexport function merge_with_preprocessor_map(result, options, source_name) {\n\tif (options.sourcemap) {\n\t\tconst file_basename = get_basename(options.filename);\n\t\t// The preprocessor map is expected to contain `sources: [basename_of_filename]`, but our own\n\t\t// map may contain a different file name. Patch our map beforehand to align sources so merging\n\t\t// with the preprocessor map works correctly.\n\t\tresult.map.sources = [file_basename];\n\t\tObject.assign(\n\t\t\tresult.map,\n\t\t\tapply_preprocessor_sourcemap(\n\t\t\t\tfile_basename,\n\t\t\t\tresult.map,\n\t\t\t\t/** @type {any} */ (options.sourcemap)\n\t\t\t)\n\t\t);\n\t\t// After applying the preprocessor map, we need to do the inverse and make the sources\n\t\t// relative to the input file again in case the output code is in a different directory.\n\t\tif (file_basename !== source_name) {\n\t\t\tresult.map.sources = result.map.sources.map(\n\t\t\t\t/** @param {string} source */ (source) => get_relative_path(source_name, source)\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * @param {string} from\n * @param {string} to\n */\nfunction get_relative_path(from, to) {\n\t// Don't use node's utils here to ensure the compiler is usable in a browser environment\n\tconst from_parts = from.split(/[/\\\\]/);\n\tconst to_parts = to.split(/[/\\\\]/);\n\tfrom_parts.pop(); // get dirname\n\twhile (from_parts[0] === to_parts[0]) {\n\t\tfrom_parts.shift();\n\t\tto_parts.shift();\n\t}\n\tif (from_parts.length) {\n\t\tlet i = from_parts.length;\n\t\twhile (i--) from_parts[i] = '..';\n\t}\n\treturn from_parts.concat(to_parts).join('/');\n}\n\n/**\n * Like node's `basename`, but doesn't use it to ensure the compiler is usable in a browser environment\n * @param {string} filename\n */\nexport function get_basename(filename) {\n\treturn /** @type {string} */ (filename.split(/[/\\\\]/).pop());\n}\n\n/**\n * @param {string} filename\n * @param {string | undefined} output_filename\n * @param {string} fallback\n */\nexport function get_source_name(filename, output_filename, fallback) {\n\treturn output_filename ? get_relative_path(output_filename, filename) : get_basename(filename);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/push_array.js",
    "content": "/**\n * Pushes all `items` into `array` using `push`, therefore mutating the array.\n * We do this for memory and perf reasons, and because `array.push(...items)` would\n * run into a \"max call stack size exceeded\" error with too many items (~65k).\n * @template T\n * @param {T[]} array\n * @param {T[]} items\n */\nexport function push_array(array, items) {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tarray.push(items[i]);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/sanitize_template_string.js",
    "content": "/**\n * @param {string} str\n * @returns {string}\n */\nexport function sanitize_template_string(str) {\n\treturn str.replace(/(`|\\${|\\\\)/g, '\\\\$1');\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/slot.js",
    "content": "/** @import { AST } from '#compiler' */\nimport { is_element_node } from '../phases/nodes.js';\nimport { is_text_attribute } from './ast.js';\n\n/**\n * @param {AST.SvelteNode} node\n */\nexport function determine_slot(node) {\n\tif (!is_element_node(node)) return null;\n\n\tfor (const attribute of node.attributes) {\n\t\tif (attribute.type !== 'Attribute') continue;\n\t\tif (attribute.name !== 'slot') continue;\n\t\tif (!is_text_attribute(attribute)) continue;\n\n\t\treturn /** @type {string} */ (attribute.value[0].data);\n\t}\n\n\treturn null;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/utils/string.js",
    "content": "/**\n * @param {string[]} strings\n * @param {string} conjunction\n */\nexport function list(strings, conjunction = 'or') {\n\tif (strings.length === 1) return strings[0];\n\tif (strings.length === 2) return `${strings[0]} ${conjunction} ${strings[1]}`;\n\treturn `${strings.slice(0, -1).join(', ')} ${conjunction} ${strings[strings.length - 1]}`;\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/validate-options.js",
    "content": "/** @import { ModuleCompileOptions, ValidatedModuleCompileOptions, CompileOptions, ValidatedCompileOptions } from '#compiler' */\nimport * as e from './errors.js';\nimport * as w from './warnings.js';\n\n/**\n * @template [Input=any]\n * @template [Output=Input]\n * @typedef {(input: Input, keypath: string) => Required<Output>} Validator\n */\n\nconst common_options = {\n\tfilename: string('(unknown)'),\n\n\t// default to process.cwd() where it exists to replicate svelte4 behavior (and make Deno work with this as well)\n\t// see https://github.com/sveltejs/svelte/blob/b62fc8c8fd2640c9b99168f01b9d958cb2f7574f/packages/svelte/src/compiler/compile/Component.js#L211\n\t/* eslint-disable */\n\trootDir: string(\n\t\ttypeof process !== 'undefined'\n\t\t\t? process.cwd?.()\n\t\t\t: // @ts-expect-error\n\t\t\t\ttypeof Deno !== 'undefined'\n\t\t\t\t? // @ts-expect-error\n\t\t\t\t\tDeno.cwd()\n\t\t\t\t: undefined\n\t),\n\t/* eslint-enable */\n\n\tdev: boolean(false),\n\n\tgenerate: validator('client', (input, keypath) => {\n\t\tif (input === 'dom' || input === 'ssr') {\n\t\t\twarn_once(w.options_renamed_ssr_dom);\n\t\t\treturn input === 'dom' ? 'client' : 'server';\n\t\t}\n\n\t\t// TODO deprecate `false` in favour of `analyze`/`analyzeModule` https://github.com/sveltejs/svelte-octane/issues/655\n\t\tif (input !== 'client' && input !== 'server' && input !== false) {\n\t\t\tthrow_error(`${keypath} must be \"client\", \"server\" or false`);\n\t\t}\n\n\t\treturn input;\n\t}),\n\n\twarningFilter: fun(() => true),\n\n\texperimental: object({\n\t\tasync: boolean(false)\n\t})\n};\n\nconst component_options = {\n\taccessors: deprecate(w.options_deprecated_accessors, boolean(false)),\n\n\t/** @type {Validator<'injected' | 'external' | ((options: { filename: string }) => 'injected' | 'external'), (options: { filename: string }) => 'injected' | 'external'>} */\n\tcss: parametric(\n\t\t/** @type {(options: { filename: string }) => 'injected' | 'external'} */ (() => 'external'),\n\t\t(input) => {\n\t\t\tif (input === true || input === false) {\n\t\t\t\tthrow_error(\n\t\t\t\t\t'The boolean options have been removed from the css option. Use \"external\" instead of false and \"injected\" instead of true'\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input === 'none') {\n\t\t\t\tthrow_error(\n\t\t\t\t\t'css: \"none\" is no longer a valid option. If this was crucial for you, please open an issue on GitHub with your use case.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (input !== 'external' && input !== 'injected') {\n\t\t\t\tthrow_error(`css should be either \"external\" (default, recommended) or \"injected\"`);\n\t\t\t}\n\n\t\t\treturn /** @type {'external' | 'injected'} */ (input);\n\t\t}\n\t),\n\n\tcssHash: fun(({ css, filename, hash }) => {\n\t\treturn `svelte-${hash(filename === '(unknown)' ? css : filename ?? css)}`;\n\t}),\n\n\t// TODO this is a sourcemap option, would be good to put under a sourcemap namespace\n\tcssOutputFilename: string(undefined),\n\n\t/** @type {Validator<boolean | ((options: { filename: string }) => boolean), (options: { filename: string }) => boolean>} */\n\tcustomElement: parametric(\n\t\t/** @type {(options: { filename: string }) => boolean} */ (() => false),\n\t\t(input, keypath) => {\n\t\t\tif (typeof input !== 'boolean') {\n\t\t\t\tthrow_error(`${keypath} should be true or false`);\n\t\t\t}\n\n\t\t\treturn /** @type {boolean} */ (input);\n\t\t}\n\t),\n\n\tdiscloseVersion: boolean(true),\n\n\timmutable: deprecate(w.options_deprecated_immutable, boolean(false)),\n\n\tlegacy: removed(\n\t\t'The legacy option has been removed. If you are using this because of legacy.componentApi, use compatibility.componentApi instead'\n\t),\n\n\tcompatibility: object({\n\t\tcomponentApi: list([4, 5], 5)\n\t}),\n\n\tloopGuardTimeout: warn_removed(w.options_removed_loop_guard_timeout),\n\n\tname: string(undefined),\n\n\tnamespace: list(['html', 'mathml', 'svg']),\n\n\tmodernAst: boolean(false),\n\n\toutputFilename: string(undefined),\n\n\tpreserveComments: boolean(false),\n\n\tfragments: list(['html', 'tree']),\n\n\tpreserveWhitespace: boolean(false),\n\n\t/** @type {Validator<boolean | undefined | (() => boolean | undefined), () => boolean | undefined>} */\n\trunes: parametric(() => /** @type {boolean | undefined} */ (undefined)),\n\n\thmr: boolean(false),\n\n\tsourcemap: validator(undefined, (input) => {\n\t\t// Source maps can take on a variety of values, including string, JSON, map objects from magic-string and source-map,\n\t\t// so there's no good way to check type validity here\n\t\treturn input;\n\t}),\n\n\tenableSourcemap: warn_removed(w.options_removed_enable_sourcemap),\n\n\thydratable: warn_removed(w.options_removed_hydratable),\n\n\tformat: removed(\n\t\t'The format option has been removed in Svelte 4, the compiler only outputs ESM now. Remove \"format\" from your compiler options. ' +\n\t\t\t'If you did not set this yourself, bump the version of your bundler plugin (vite-plugin-svelte/rollup-plugin-svelte/svelte-loader)'\n\t),\n\n\ttag: removed(\n\t\t'The tag option has been removed in Svelte 5. Use `<svelte:options customElement=\"tag-name\" />` inside the component instead. ' +\n\t\t\t'If that does not solve your use case, please open an issue on GitHub with details.'\n\t),\n\n\tsveltePath: removed(\n\t\t'The sveltePath option has been removed in Svelte 5. ' +\n\t\t\t'If this option was crucial for you, please open an issue on GitHub with your use case.'\n\t),\n\n\t// These two were primarily created for svelte-preprocess (https://github.com/sveltejs/svelte/pull/6194),\n\t// but with new TypeScript compilation modes strictly separating types it's not necessary anymore\n\terrorMode: removed(\n\t\t'The errorMode option has been removed. If you are using this through svelte-preprocess with TypeScript, ' +\n\t\t\t'use the https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax setting instead'\n\t),\n\n\tvarsReport: removed(\n\t\t'The vars option has been removed. If you are using this through svelte-preprocess with TypeScript, ' +\n\t\t\t'use the https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax setting instead'\n\t)\n};\n\nexport const validate_module_options =\n\t/** @type {Validator<ModuleCompileOptions, ValidatedModuleCompileOptions>} */ (\n\t\tobject({\n\t\t\t...common_options,\n\t\t\t...Object.fromEntries(Object.keys(component_options).map((key) => [key, () => {}]))\n\t\t})\n\t);\n\nexport const validate_component_options =\n\t/** @type {Validator<CompileOptions, ValidatedCompileOptions>} */ (\n\t\tobject({\n\t\t\t...common_options,\n\t\t\t...component_options\n\t\t})\n\t);\n\n/**\n * @param {string} msg\n * @returns {Validator}\n */\nfunction removed(msg) {\n\treturn (input) => {\n\t\tif (input !== undefined) {\n\t\t\te.options_removed(null, msg);\n\t\t}\n\t\treturn /** @type {any} */ (undefined);\n\t};\n}\n\nconst warned = new Set();\n\n/** @param {(node: null) => void} fn */\nfunction warn_once(fn) {\n\tif (!warned.has(fn)) {\n\t\twarned.add(fn);\n\t\tfn(null);\n\t}\n}\n\n/**\n * @param {(node: null) => void} fn\n * @returns {Validator}\n */\nfunction warn_removed(fn) {\n\treturn (input) => {\n\t\tif (input !== undefined) warn_once(fn);\n\t\treturn /** @type {any} */ (undefined);\n\t};\n}\n\n/**\n * @param {(node: null) => void} fn\n * @param {Validator} validator\n * @returns {Validator}\n */\nfunction deprecate(fn, validator) {\n\treturn (input, keypath) => {\n\t\tif (input !== undefined) warn_once(fn);\n\t\treturn validator(input, keypath);\n\t};\n}\n\n/**\n * @param {Record<string, Validator>} children\n * @param {boolean} [allow_unknown]\n * @returns {Validator}\n */\nfunction object(children, allow_unknown = false) {\n\treturn (input, keypath) => {\n\t\t/** @type {Record<string, any>} */\n\t\tconst output = {};\n\n\t\tif ((input && typeof input !== 'object') || Array.isArray(input)) {\n\t\t\tthrow_error(`${keypath} should be an object`);\n\t\t}\n\n\t\tfor (const key in input) {\n\t\t\tif (!(key in children)) {\n\t\t\t\tif (allow_unknown) {\n\t\t\t\t\toutput[key] = input[key];\n\t\t\t\t} else {\n\t\t\t\t\te.options_unrecognised(null, `${keypath ? `${keypath}.${key}` : key}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const key in children) {\n\t\t\tconst validator = children[key];\n\t\t\toutput[key] = validator(input && input[key], keypath ? `${keypath}.${key}` : key);\n\t\t}\n\n\t\treturn output;\n\t};\n}\n\n/**\n * @param {any} fallback\n * @param {(value: any, keypath: string) => any} fn\n * @returns {Validator}\n */\nfunction validator(fallback, fn) {\n\treturn (input, keypath) => {\n\t\treturn input === undefined ? fallback : fn(input, keypath);\n\t};\n}\n\n/**\n * @param {string | undefined} fallback\n * @param {boolean} allow_empty\n * @returns {Validator}\n */\nfunction string(fallback, allow_empty = true) {\n\treturn validator(fallback, (input, keypath) => {\n\t\tif (typeof input !== 'string') {\n\t\t\tthrow_error(`${keypath} should be a string, if specified`);\n\t\t}\n\n\t\tif (!allow_empty && input === '') {\n\t\t\tthrow_error(`${keypath} cannot be empty`);\n\t\t}\n\n\t\treturn input;\n\t});\n}\n\n/**\n * @param {boolean | undefined} fallback\n * @returns {Validator}\n */\nfunction boolean(fallback) {\n\treturn validator(fallback, (input, keypath) => {\n\t\tif (typeof input !== 'boolean') {\n\t\t\tthrow_error(`${keypath} should be true or false, if specified`);\n\t\t}\n\t\treturn input;\n\t});\n}\n\n/**\n * @param {Array<boolean | string | number>} options\n * @returns {Validator}\n */\nfunction list(options, fallback = options[0]) {\n\treturn validator(fallback, (input, keypath) => {\n\t\tif (!options.includes(input)) {\n\t\t\t// prettier-ignore\n\t\t\tconst msg = options.length > 2\n\t\t\t\t? `${keypath} should be one of ${options.slice(0, -1).map(input => `\"${input}\"`).join(', ')} or \"${options[options.length - 1]}\"`\n\t\t\t\t: `${keypath} should be either \"${options[0]}\" or \"${options[1]}\"`;\n\n\t\t\tthrow_error(msg);\n\t\t}\n\t\treturn input;\n\t});\n}\n\n/**\n * @param {(...args: any) => any} fallback\n * @returns {Validator}\n */\nfunction fun(fallback) {\n\treturn validator(fallback, (input, keypath) => {\n\t\tif (typeof input !== 'function') {\n\t\t\tthrow_error(`${keypath} should be a function, if specified`);\n\t\t}\n\t\treturn input;\n\t});\n}\n\n/**\n * @template {(...args: any[]) => any} F\n * @param {F} fallback\n * @param {(value: unknown, keypath: string) => ReturnType<F>} [normalize]\n * @returns {Validator}\n */\nfunction parametric(fallback, normalize = (value) => /** @type {ReturnType<F>} */ (value)) {\n\treturn validator(fallback, (input, keypath) => {\n\t\tif (typeof input === 'function') {\n\t\t\t/** @type {(...args: Parameters<F>) => ReturnType<F>} */\n\t\t\tconst normalized = (...args) => normalize(input(...args), keypath);\n\n\t\t\treturn /** @type {F} */ (/** @type {unknown} */ (normalized));\n\t\t}\n\n\t\t/** @type {(...args: Parameters<F>) => ReturnType<F>} */\n\t\tconst normalized = (..._args) => normalize(input, keypath);\n\n\t\treturn /** @type {F} */ (/** @type {unknown} */ (normalized));\n\t});\n}\n\n/** @param {string} msg */\nfunction throw_error(msg) {\n\te.options_invalid_value(null, msg);\n}\n"
  },
  {
    "path": "packages/svelte/src/compiler/warnings.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { warnings, ignore_stack, ignore_map, warning_filter } from './state.js';\nimport { CompileDiagnostic } from './utils/compile_diagnostic.js';\n\n/** @typedef {{ start?: number, end?: number }} NodeLike */\nclass InternalCompileWarning extends CompileDiagnostic {\n\tname = 'CompileWarning';\n\n\t/**\n\t * @param {string} code\n\t * @param {string} message\n\t * @param {[number, number] | undefined} position\n\t */\n\tconstructor(code, message, position) {\n\t\tsuper(code, message, position);\n\t}\n}\n\n/**\n * @param {null | NodeLike} node\n * @param {string} code\n * @param {string} message\n */\nfunction w(node, code, message) {\n\tlet stack = ignore_stack;\n\n\tif (node) {\n\t\tstack = ignore_map.get(node) ?? ignore_stack;\n\t}\n\n\tif (stack && stack.at(-1)?.has(code)) return;\n\n\tconst warning = new InternalCompileWarning(code, message, node && node.start !== undefined ? [node.start, node.end ?? node.start] : undefined);\n\n\tif (!warning_filter(warning)) return;\n\n\twarnings.push(warning);\n}\n\nexport const codes = [\n\t'a11y_accesskey',\n\t'a11y_aria_activedescendant_has_tabindex',\n\t'a11y_aria_attributes',\n\t'a11y_autocomplete_valid',\n\t'a11y_autofocus',\n\t'a11y_click_events_have_key_events',\n\t'a11y_consider_explicit_label',\n\t'a11y_distracting_elements',\n\t'a11y_figcaption_index',\n\t'a11y_figcaption_parent',\n\t'a11y_hidden',\n\t'a11y_img_redundant_alt',\n\t'a11y_incorrect_aria_attribute_type',\n\t'a11y_incorrect_aria_attribute_type_boolean',\n\t'a11y_incorrect_aria_attribute_type_id',\n\t'a11y_incorrect_aria_attribute_type_idlist',\n\t'a11y_incorrect_aria_attribute_type_integer',\n\t'a11y_incorrect_aria_attribute_type_token',\n\t'a11y_incorrect_aria_attribute_type_tokenlist',\n\t'a11y_incorrect_aria_attribute_type_tristate',\n\t'a11y_interactive_supports_focus',\n\t'a11y_invalid_attribute',\n\t'a11y_label_has_associated_control',\n\t'a11y_media_has_caption',\n\t'a11y_misplaced_role',\n\t'a11y_misplaced_scope',\n\t'a11y_missing_attribute',\n\t'a11y_missing_content',\n\t'a11y_mouse_events_have_key_events',\n\t'a11y_no_abstract_role',\n\t'a11y_no_interactive_element_to_noninteractive_role',\n\t'a11y_no_noninteractive_element_interactions',\n\t'a11y_no_noninteractive_element_to_interactive_role',\n\t'a11y_no_noninteractive_tabindex',\n\t'a11y_no_redundant_roles',\n\t'a11y_no_static_element_interactions',\n\t'a11y_positive_tabindex',\n\t'a11y_role_has_required_aria_props',\n\t'a11y_role_supports_aria_props',\n\t'a11y_role_supports_aria_props_implicit',\n\t'a11y_unknown_aria_attribute',\n\t'a11y_unknown_role',\n\t'bidirectional_control_characters',\n\t'legacy_code',\n\t'unknown_code',\n\t'options_deprecated_accessors',\n\t'options_deprecated_immutable',\n\t'options_missing_custom_element',\n\t'options_removed_enable_sourcemap',\n\t'options_removed_hydratable',\n\t'options_removed_loop_guard_timeout',\n\t'options_renamed_ssr_dom',\n\t'custom_element_props_identifier',\n\t'export_let_unused',\n\t'legacy_component_creation',\n\t'non_reactive_update',\n\t'perf_avoid_inline_class',\n\t'perf_avoid_nested_class',\n\t'reactive_declaration_invalid_placement',\n\t'reactive_declaration_module_script_dependency',\n\t'state_referenced_locally',\n\t'store_rune_conflict',\n\t'css_unused_selector',\n\t'attribute_avoid_is',\n\t'attribute_global_event_reference',\n\t'attribute_illegal_colon',\n\t'attribute_invalid_property_name',\n\t'attribute_quoted',\n\t'bind_invalid_each_rest',\n\t'block_empty',\n\t'component_name_lowercase',\n\t'element_implicitly_closed',\n\t'element_invalid_self_closing_tag',\n\t'event_directive_deprecated',\n\t'node_invalid_placement_ssr',\n\t'script_context_deprecated',\n\t'script_unknown_attribute',\n\t'slot_element_deprecated',\n\t'svelte_component_deprecated',\n\t'svelte_element_invalid_this',\n\t'svelte_self_deprecated'\n];\n\n/**\n * Avoid using accesskey\n * @param {null | NodeLike} node\n */\nexport function a11y_accesskey(node) {\n\tw(node, 'a11y_accesskey', `Avoid using accesskey\\nhttps://svelte.dev/e/a11y_accesskey`);\n}\n\n/**\n * An element with an aria-activedescendant attribute should have a tabindex value\n * @param {null | NodeLike} node\n */\nexport function a11y_aria_activedescendant_has_tabindex(node) {\n\tw(node, 'a11y_aria_activedescendant_has_tabindex', `An element with an aria-activedescendant attribute should have a tabindex value\\nhttps://svelte.dev/e/a11y_aria_activedescendant_has_tabindex`);\n}\n\n/**\n * `<%name%>` should not have aria-* attributes\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function a11y_aria_attributes(node, name) {\n\tw(node, 'a11y_aria_attributes', `\\`<${name}>\\` should not have aria-* attributes\\nhttps://svelte.dev/e/a11y_aria_attributes`);\n}\n\n/**\n * '%value%' is an invalid value for 'autocomplete' on `<input type=\"%type%\">`\n * @param {null | NodeLike} node\n * @param {string} value\n * @param {string} type\n */\nexport function a11y_autocomplete_valid(node, value, type) {\n\tw(node, 'a11y_autocomplete_valid', `'${value}' is an invalid value for 'autocomplete' on \\`<input type=\"${type}\">\\`\\nhttps://svelte.dev/e/a11y_autocomplete_valid`);\n}\n\n/**\n * Avoid using autofocus\n * @param {null | NodeLike} node\n */\nexport function a11y_autofocus(node) {\n\tw(node, 'a11y_autofocus', `Avoid using autofocus\\nhttps://svelte.dev/e/a11y_autofocus`);\n}\n\n/**\n * Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\"button\">` or `<a>` might be more appropriate\n * @param {null | NodeLike} node\n */\nexport function a11y_click_events_have_key_events(node) {\n\tw(node, 'a11y_click_events_have_key_events', `Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as \\`<button type=\"button\">\\` or \\`<a>\\` might be more appropriate\\nhttps://svelte.dev/e/a11y_click_events_have_key_events`);\n}\n\n/**\n * Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\n * @param {null | NodeLike} node\n */\nexport function a11y_consider_explicit_label(node) {\n\tw(node, 'a11y_consider_explicit_label', `Buttons and links should either contain text or have an \\`aria-label\\`, \\`aria-labelledby\\` or \\`title\\` attribute\\nhttps://svelte.dev/e/a11y_consider_explicit_label`);\n}\n\n/**\n * Avoid `<%name%>` elements\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function a11y_distracting_elements(node, name) {\n\tw(node, 'a11y_distracting_elements', `Avoid \\`<${name}>\\` elements\\nhttps://svelte.dev/e/a11y_distracting_elements`);\n}\n\n/**\n * `<figcaption>` must be first or last child of `<figure>`\n * @param {null | NodeLike} node\n */\nexport function a11y_figcaption_index(node) {\n\tw(node, 'a11y_figcaption_index', `\\`<figcaption>\\` must be first or last child of \\`<figure>\\`\\nhttps://svelte.dev/e/a11y_figcaption_index`);\n}\n\n/**\n * `<figcaption>` must be an immediate child of `<figure>`\n * @param {null | NodeLike} node\n */\nexport function a11y_figcaption_parent(node) {\n\tw(node, 'a11y_figcaption_parent', `\\`<figcaption>\\` must be an immediate child of \\`<figure>\\`\\nhttps://svelte.dev/e/a11y_figcaption_parent`);\n}\n\n/**\n * `<%name%>` element should not be hidden\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function a11y_hidden(node, name) {\n\tw(node, 'a11y_hidden', `\\`<${name}>\\` element should not be hidden\\nhttps://svelte.dev/e/a11y_hidden`);\n}\n\n/**\n * Screenreaders already announce `<img>` elements as an image\n * @param {null | NodeLike} node\n */\nexport function a11y_img_redundant_alt(node) {\n\tw(node, 'a11y_img_redundant_alt', `Screenreaders already announce \\`<img>\\` elements as an image\\nhttps://svelte.dev/e/a11y_img_redundant_alt`);\n}\n\n/**\n * The value of '%attribute%' must be a %type%\n * @param {null | NodeLike} node\n * @param {string} attribute\n * @param {string} type\n */\nexport function a11y_incorrect_aria_attribute_type(node, attribute, type) {\n\tw(node, 'a11y_incorrect_aria_attribute_type', `The value of '${attribute}' must be a ${type}\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type`);\n}\n\n/**\n * The value of '%attribute%' must be either 'true' or 'false'. It cannot be empty\n * @param {null | NodeLike} node\n * @param {string} attribute\n */\nexport function a11y_incorrect_aria_attribute_type_boolean(node, attribute) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_boolean', `The value of '${attribute}' must be either 'true' or 'false'. It cannot be empty\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_boolean`);\n}\n\n/**\n * The value of '%attribute%' must be a string that represents a DOM element ID\n * @param {null | NodeLike} node\n * @param {string} attribute\n */\nexport function a11y_incorrect_aria_attribute_type_id(node, attribute) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_id', `The value of '${attribute}' must be a string that represents a DOM element ID\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_id`);\n}\n\n/**\n * The value of '%attribute%' must be a space-separated list of strings that represent DOM element IDs\n * @param {null | NodeLike} node\n * @param {string} attribute\n */\nexport function a11y_incorrect_aria_attribute_type_idlist(node, attribute) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_idlist', `The value of '${attribute}' must be a space-separated list of strings that represent DOM element IDs\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_idlist`);\n}\n\n/**\n * The value of '%attribute%' must be an integer\n * @param {null | NodeLike} node\n * @param {string} attribute\n */\nexport function a11y_incorrect_aria_attribute_type_integer(node, attribute) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_integer', `The value of '${attribute}' must be an integer\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_integer`);\n}\n\n/**\n * The value of '%attribute%' must be exactly one of %values%\n * @param {null | NodeLike} node\n * @param {string} attribute\n * @param {string} values\n */\nexport function a11y_incorrect_aria_attribute_type_token(node, attribute, values) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_token', `The value of '${attribute}' must be exactly one of ${values}\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_token`);\n}\n\n/**\n * The value of '%attribute%' must be a space-separated list of one or more of %values%\n * @param {null | NodeLike} node\n * @param {string} attribute\n * @param {string} values\n */\nexport function a11y_incorrect_aria_attribute_type_tokenlist(node, attribute, values) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_tokenlist', `The value of '${attribute}' must be a space-separated list of one or more of ${values}\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_tokenlist`);\n}\n\n/**\n * The value of '%attribute%' must be exactly one of true, false, or mixed\n * @param {null | NodeLike} node\n * @param {string} attribute\n */\nexport function a11y_incorrect_aria_attribute_type_tristate(node, attribute) {\n\tw(node, 'a11y_incorrect_aria_attribute_type_tristate', `The value of '${attribute}' must be exactly one of true, false, or mixed\\nhttps://svelte.dev/e/a11y_incorrect_aria_attribute_type_tristate`);\n}\n\n/**\n * Elements with the '%role%' interactive role must have a tabindex value\n * @param {null | NodeLike} node\n * @param {string} role\n */\nexport function a11y_interactive_supports_focus(node, role) {\n\tw(node, 'a11y_interactive_supports_focus', `Elements with the '${role}' interactive role must have a tabindex value\\nhttps://svelte.dev/e/a11y_interactive_supports_focus`);\n}\n\n/**\n * '%href_value%' is not a valid %href_attribute% attribute\n * @param {null | NodeLike} node\n * @param {string} href_value\n * @param {string} href_attribute\n */\nexport function a11y_invalid_attribute(node, href_value, href_attribute) {\n\tw(node, 'a11y_invalid_attribute', `'${href_value}' is not a valid ${href_attribute} attribute\\nhttps://svelte.dev/e/a11y_invalid_attribute`);\n}\n\n/**\n * A form label must be associated with a control\n * @param {null | NodeLike} node\n */\nexport function a11y_label_has_associated_control(node) {\n\tw(node, 'a11y_label_has_associated_control', `A form label must be associated with a control\\nhttps://svelte.dev/e/a11y_label_has_associated_control`);\n}\n\n/**\n * `<video>` elements must have a `<track kind=\"captions\">`\n * @param {null | NodeLike} node\n */\nexport function a11y_media_has_caption(node) {\n\tw(node, 'a11y_media_has_caption', `\\`<video>\\` elements must have a \\`<track kind=\"captions\">\\`\\nhttps://svelte.dev/e/a11y_media_has_caption`);\n}\n\n/**\n * `<%name%>` should not have role attribute\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function a11y_misplaced_role(node, name) {\n\tw(node, 'a11y_misplaced_role', `\\`<${name}>\\` should not have role attribute\\nhttps://svelte.dev/e/a11y_misplaced_role`);\n}\n\n/**\n * The scope attribute should only be used with `<th>` elements\n * @param {null | NodeLike} node\n */\nexport function a11y_misplaced_scope(node) {\n\tw(node, 'a11y_misplaced_scope', `The scope attribute should only be used with \\`<th>\\` elements\\nhttps://svelte.dev/e/a11y_misplaced_scope`);\n}\n\n/**\n * `<%name%>` element should have %article% %sequence% attribute\n * @param {null | NodeLike} node\n * @param {string} name\n * @param {string} article\n * @param {string} sequence\n */\nexport function a11y_missing_attribute(node, name, article, sequence) {\n\tw(node, 'a11y_missing_attribute', `\\`<${name}>\\` element should have ${article} ${sequence} attribute\\nhttps://svelte.dev/e/a11y_missing_attribute`);\n}\n\n/**\n * `<%name%>` element should contain text\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function a11y_missing_content(node, name) {\n\tw(node, 'a11y_missing_content', `\\`<${name}>\\` element should contain text\\nhttps://svelte.dev/e/a11y_missing_content`);\n}\n\n/**\n * '%event%' event must be accompanied by '%accompanied_by%' event\n * @param {null | NodeLike} node\n * @param {string} event\n * @param {string} accompanied_by\n */\nexport function a11y_mouse_events_have_key_events(node, event, accompanied_by) {\n\tw(node, 'a11y_mouse_events_have_key_events', `'${event}' event must be accompanied by '${accompanied_by}' event\\nhttps://svelte.dev/e/a11y_mouse_events_have_key_events`);\n}\n\n/**\n * Abstract role '%role%' is forbidden\n * @param {null | NodeLike} node\n * @param {string} role\n */\nexport function a11y_no_abstract_role(node, role) {\n\tw(node, 'a11y_no_abstract_role', `Abstract role '${role}' is forbidden\\nhttps://svelte.dev/e/a11y_no_abstract_role`);\n}\n\n/**\n * `<%element%>` cannot have role '%role%'\n * @param {null | NodeLike} node\n * @param {string} element\n * @param {string} role\n */\nexport function a11y_no_interactive_element_to_noninteractive_role(node, element, role) {\n\tw(node, 'a11y_no_interactive_element_to_noninteractive_role', `\\`<${element}>\\` cannot have role '${role}'\\nhttps://svelte.dev/e/a11y_no_interactive_element_to_noninteractive_role`);\n}\n\n/**\n * Non-interactive element `<%element%>` should not be assigned mouse or keyboard event listeners\n * @param {null | NodeLike} node\n * @param {string} element\n */\nexport function a11y_no_noninteractive_element_interactions(node, element) {\n\tw(node, 'a11y_no_noninteractive_element_interactions', `Non-interactive element \\`<${element}>\\` should not be assigned mouse or keyboard event listeners\\nhttps://svelte.dev/e/a11y_no_noninteractive_element_interactions`);\n}\n\n/**\n * Non-interactive element `<%element%>` cannot have interactive role '%role%'\n * @param {null | NodeLike} node\n * @param {string} element\n * @param {string} role\n */\nexport function a11y_no_noninteractive_element_to_interactive_role(node, element, role) {\n\tw(node, 'a11y_no_noninteractive_element_to_interactive_role', `Non-interactive element \\`<${element}>\\` cannot have interactive role '${role}'\\nhttps://svelte.dev/e/a11y_no_noninteractive_element_to_interactive_role`);\n}\n\n/**\n * noninteractive element cannot have nonnegative tabIndex value\n * @param {null | NodeLike} node\n */\nexport function a11y_no_noninteractive_tabindex(node) {\n\tw(node, 'a11y_no_noninteractive_tabindex', `noninteractive element cannot have nonnegative tabIndex value\\nhttps://svelte.dev/e/a11y_no_noninteractive_tabindex`);\n}\n\n/**\n * Redundant role '%role%'\n * @param {null | NodeLike} node\n * @param {string} role\n */\nexport function a11y_no_redundant_roles(node, role) {\n\tw(node, 'a11y_no_redundant_roles', `Redundant role '${role}'\\nhttps://svelte.dev/e/a11y_no_redundant_roles`);\n}\n\n/**\n * `<%element%>` with a %handler% handler must have an ARIA role\n * @param {null | NodeLike} node\n * @param {string} element\n * @param {string} handler\n */\nexport function a11y_no_static_element_interactions(node, element, handler) {\n\tw(node, 'a11y_no_static_element_interactions', `\\`<${element}>\\` with a ${handler} handler must have an ARIA role\\nhttps://svelte.dev/e/a11y_no_static_element_interactions`);\n}\n\n/**\n * Avoid tabindex values above zero\n * @param {null | NodeLike} node\n */\nexport function a11y_positive_tabindex(node) {\n\tw(node, 'a11y_positive_tabindex', `Avoid tabindex values above zero\\nhttps://svelte.dev/e/a11y_positive_tabindex`);\n}\n\n/**\n * Elements with the ARIA role \"%role%\" must have the following attributes defined: %props%\n * @param {null | NodeLike} node\n * @param {string} role\n * @param {string} props\n */\nexport function a11y_role_has_required_aria_props(node, role, props) {\n\tw(node, 'a11y_role_has_required_aria_props', `Elements with the ARIA role \"${role}\" must have the following attributes defined: ${props}\\nhttps://svelte.dev/e/a11y_role_has_required_aria_props`);\n}\n\n/**\n * The attribute '%attribute%' is not supported by the role '%role%'\n * @param {null | NodeLike} node\n * @param {string} attribute\n * @param {string} role\n */\nexport function a11y_role_supports_aria_props(node, attribute, role) {\n\tw(node, 'a11y_role_supports_aria_props', `The attribute '${attribute}' is not supported by the role '${role}'\\nhttps://svelte.dev/e/a11y_role_supports_aria_props`);\n}\n\n/**\n * The attribute '%attribute%' is not supported by the role '%role%'. This role is implicit on the element `<%name%>`\n * @param {null | NodeLike} node\n * @param {string} attribute\n * @param {string} role\n * @param {string} name\n */\nexport function a11y_role_supports_aria_props_implicit(node, attribute, role, name) {\n\tw(node, 'a11y_role_supports_aria_props_implicit', `The attribute '${attribute}' is not supported by the role '${role}'. This role is implicit on the element \\`<${name}>\\`\\nhttps://svelte.dev/e/a11y_role_supports_aria_props_implicit`);\n}\n\n/**\n * Unknown aria attribute 'aria-%attribute%'. Did you mean '%suggestion%'?\n * @param {null | NodeLike} node\n * @param {string} attribute\n * @param {string | undefined | null} [suggestion]\n */\nexport function a11y_unknown_aria_attribute(node, attribute, suggestion) {\n\tw(node, 'a11y_unknown_aria_attribute', `${suggestion\n\t\t? `Unknown aria attribute 'aria-${attribute}'. Did you mean '${suggestion}'?`\n\t\t: `Unknown aria attribute 'aria-${attribute}'`}\\nhttps://svelte.dev/e/a11y_unknown_aria_attribute`);\n}\n\n/**\n * Unknown role '%role%'. Did you mean '%suggestion%'?\n * @param {null | NodeLike} node\n * @param {string} role\n * @param {string | undefined | null} [suggestion]\n */\nexport function a11y_unknown_role(node, role, suggestion) {\n\tw(node, 'a11y_unknown_role', `${suggestion\n\t\t? `Unknown role '${role}'. Did you mean '${suggestion}'?`\n\t\t: `Unknown role '${role}'`}\\nhttps://svelte.dev/e/a11y_unknown_role`);\n}\n\n/**\n * A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\n * @param {null | NodeLike} node\n */\nexport function bidirectional_control_characters(node) {\n\tw(node, 'bidirectional_control_characters', `A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\\nhttps://svelte.dev/e/bidirectional_control_characters`);\n}\n\n/**\n * `%code%` is no longer valid — please use `%suggestion%` instead\n * @param {null | NodeLike} node\n * @param {string} code\n * @param {string} suggestion\n */\nexport function legacy_code(node, code, suggestion) {\n\tw(node, 'legacy_code', `\\`${code}\\` is no longer valid — please use \\`${suggestion}\\` instead\\nhttps://svelte.dev/e/legacy_code`);\n}\n\n/**\n * `%code%` is not a recognised code (did you mean `%suggestion%`?)\n * @param {null | NodeLike} node\n * @param {string} code\n * @param {string | undefined | null} [suggestion]\n */\nexport function unknown_code(node, code, suggestion) {\n\tw(node, 'unknown_code', `${suggestion\n\t\t? `\\`${code}\\` is not a recognised code (did you mean \\`${suggestion}\\`?)`\n\t\t: `\\`${code}\\` is not a recognised code`}\\nhttps://svelte.dev/e/unknown_code`);\n}\n\n/**\n * The `accessors` option has been deprecated. It will have no effect in runes mode\n * @param {null | NodeLike} node\n */\nexport function options_deprecated_accessors(node) {\n\tw(node, 'options_deprecated_accessors', `The \\`accessors\\` option has been deprecated. It will have no effect in runes mode\\nhttps://svelte.dev/e/options_deprecated_accessors`);\n}\n\n/**\n * The `immutable` option has been deprecated. It will have no effect in runes mode\n * @param {null | NodeLike} node\n */\nexport function options_deprecated_immutable(node) {\n\tw(node, 'options_deprecated_immutable', `The \\`immutable\\` option has been deprecated. It will have no effect in runes mode\\nhttps://svelte.dev/e/options_deprecated_immutable`);\n}\n\n/**\n * The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\n * @param {null | NodeLike} node\n */\nexport function options_missing_custom_element(node) {\n\tw(node, 'options_missing_custom_element', `The \\`customElement\\` option is used when generating a custom element. Did you forget the \\`customElement: true\\` compile option?\\nhttps://svelte.dev/e/options_missing_custom_element`);\n}\n\n/**\n * The `enableSourcemap` option has been removed. Source maps are always generated now, and tooling can choose to ignore them\n * @param {null | NodeLike} node\n */\nexport function options_removed_enable_sourcemap(node) {\n\tw(node, 'options_removed_enable_sourcemap', `The \\`enableSourcemap\\` option has been removed. Source maps are always generated now, and tooling can choose to ignore them\\nhttps://svelte.dev/e/options_removed_enable_sourcemap`);\n}\n\n/**\n * The `hydratable` option has been removed. Svelte components are always hydratable now\n * @param {null | NodeLike} node\n */\nexport function options_removed_hydratable(node) {\n\tw(node, 'options_removed_hydratable', `The \\`hydratable\\` option has been removed. Svelte components are always hydratable now\\nhttps://svelte.dev/e/options_removed_hydratable`);\n}\n\n/**\n * The `loopGuardTimeout` option has been removed\n * @param {null | NodeLike} node\n */\nexport function options_removed_loop_guard_timeout(node) {\n\tw(node, 'options_removed_loop_guard_timeout', `The \\`loopGuardTimeout\\` option has been removed\\nhttps://svelte.dev/e/options_removed_loop_guard_timeout`);\n}\n\n/**\n * `generate: \"dom\"` and `generate: \"ssr\"` options have been renamed to \"client\" and \"server\" respectively\n * @param {null | NodeLike} node\n */\nexport function options_renamed_ssr_dom(node) {\n\tw(node, 'options_renamed_ssr_dom', `\\`generate: \"dom\"\\` and \\`generate: \"ssr\"\\` options have been renamed to \"client\" and \"server\" respectively\\nhttps://svelte.dev/e/options_renamed_ssr_dom`);\n}\n\n/**\n * Using a rest element or a non-destructured declaration with `$props()` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the `customElement.props` option.\n * @param {null | NodeLike} node\n */\nexport function custom_element_props_identifier(node) {\n\tw(node, 'custom_element_props_identifier', `Using a rest element or a non-destructured declaration with \\`$props()\\` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the \\`customElement.props\\` option.\\nhttps://svelte.dev/e/custom_element_props_identifier`);\n}\n\n/**\n * Component has unused export property '%name%'. If it is for external reference only, please consider using `export const %name%`\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function export_let_unused(node, name) {\n\tw(node, 'export_let_unused', `Component has unused export property '${name}'. If it is for external reference only, please consider using \\`export const ${name}\\`\\nhttps://svelte.dev/e/export_let_unused`);\n}\n\n/**\n * Svelte 5 components are no longer classes. Instantiate them using `mount` or `hydrate` (imported from 'svelte') instead.\n * @param {null | NodeLike} node\n */\nexport function legacy_component_creation(node) {\n\tw(node, 'legacy_component_creation', `Svelte 5 components are no longer classes. Instantiate them using \\`mount\\` or \\`hydrate\\` (imported from 'svelte') instead.\\nhttps://svelte.dev/e/legacy_component_creation`);\n}\n\n/**\n * `%name%` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function non_reactive_update(node, name) {\n\tw(node, 'non_reactive_update', `\\`${name}\\` is updated, but is not declared with \\`$state(...)\\`. Changing its value will not correctly trigger updates\\nhttps://svelte.dev/e/non_reactive_update`);\n}\n\n/**\n * Avoid 'new class' — instead, declare the class at the top level scope\n * @param {null | NodeLike} node\n */\nexport function perf_avoid_inline_class(node) {\n\tw(node, 'perf_avoid_inline_class', `Avoid 'new class' — instead, declare the class at the top level scope\\nhttps://svelte.dev/e/perf_avoid_inline_class`);\n}\n\n/**\n * Avoid declaring classes below the top level scope\n * @param {null | NodeLike} node\n */\nexport function perf_avoid_nested_class(node) {\n\tw(node, 'perf_avoid_nested_class', `Avoid declaring classes below the top level scope\\nhttps://svelte.dev/e/perf_avoid_nested_class`);\n}\n\n/**\n * Reactive declarations only exist at the top level of the instance script\n * @param {null | NodeLike} node\n */\nexport function reactive_declaration_invalid_placement(node) {\n\tw(node, 'reactive_declaration_invalid_placement', `Reactive declarations only exist at the top level of the instance script\\nhttps://svelte.dev/e/reactive_declaration_invalid_placement`);\n}\n\n/**\n * Reassignments of module-level declarations will not cause reactive statements to update\n * @param {null | NodeLike} node\n */\nexport function reactive_declaration_module_script_dependency(node) {\n\tw(node, 'reactive_declaration_module_script_dependency', `Reassignments of module-level declarations will not cause reactive statements to update\\nhttps://svelte.dev/e/reactive_declaration_module_script_dependency`);\n}\n\n/**\n * This reference only captures the initial value of `%name%`. Did you mean to reference it inside a %type% instead?\n * @param {null | NodeLike} node\n * @param {string} name\n * @param {string} type\n */\nexport function state_referenced_locally(node, name, type) {\n\tw(node, 'state_referenced_locally', `This reference only captures the initial value of \\`${name}\\`. Did you mean to reference it inside a ${type} instead?\\nhttps://svelte.dev/e/state_referenced_locally`);\n}\n\n/**\n * It looks like you're using the `$%name%` rune, but there is a local binding called `%name%`. Referencing a local variable with a `$` prefix will create a store subscription. Please rename `%name%` to avoid the ambiguity\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function store_rune_conflict(node, name) {\n\tw(node, 'store_rune_conflict', `It looks like you're using the \\`$${name}\\` rune, but there is a local binding called \\`${name}\\`. Referencing a local variable with a \\`$\\` prefix will create a store subscription. Please rename \\`${name}\\` to avoid the ambiguity\\nhttps://svelte.dev/e/store_rune_conflict`);\n}\n\n/**\n * Unused CSS selector \"%name%\"\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function css_unused_selector(node, name) {\n\tw(node, 'css_unused_selector', `Unused CSS selector \"${name}\"\\nhttps://svelte.dev/e/css_unused_selector`);\n}\n\n/**\n * The \"is\" attribute is not supported cross-browser and should be avoided\n * @param {null | NodeLike} node\n */\nexport function attribute_avoid_is(node) {\n\tw(node, 'attribute_avoid_is', `The \"is\" attribute is not supported cross-browser and should be avoided\\nhttps://svelte.dev/e/attribute_avoid_is`);\n}\n\n/**\n * You are referencing `globalThis.%name%`. Did you forget to declare a variable with that name?\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function attribute_global_event_reference(node, name) {\n\tw(node, 'attribute_global_event_reference', `You are referencing \\`globalThis.${name}\\`. Did you forget to declare a variable with that name?\\nhttps://svelte.dev/e/attribute_global_event_reference`);\n}\n\n/**\n * Attributes should not contain ':' characters to prevent ambiguity with Svelte directives\n * @param {null | NodeLike} node\n */\nexport function attribute_illegal_colon(node) {\n\tw(node, 'attribute_illegal_colon', `Attributes should not contain ':' characters to prevent ambiguity with Svelte directives\\nhttps://svelte.dev/e/attribute_illegal_colon`);\n}\n\n/**\n * '%wrong%' is not a valid HTML attribute. Did you mean '%right%'?\n * @param {null | NodeLike} node\n * @param {string} wrong\n * @param {string} right\n */\nexport function attribute_invalid_property_name(node, wrong, right) {\n\tw(node, 'attribute_invalid_property_name', `'${wrong}' is not a valid HTML attribute. Did you mean '${right}'?\\nhttps://svelte.dev/e/attribute_invalid_property_name`);\n}\n\n/**\n * Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\n * @param {null | NodeLike} node\n */\nexport function attribute_quoted(node) {\n\tw(node, 'attribute_quoted', `Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\\nhttps://svelte.dev/e/attribute_quoted`);\n}\n\n/**\n * The rest operator (...) will create a new object and binding '%name%' with the original object will not work\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function bind_invalid_each_rest(node, name) {\n\tw(node, 'bind_invalid_each_rest', `The rest operator (...) will create a new object and binding '${name}' with the original object will not work\\nhttps://svelte.dev/e/bind_invalid_each_rest`);\n}\n\n/**\n * Empty block\n * @param {null | NodeLike} node\n */\nexport function block_empty(node) {\n\tw(node, 'block_empty', `Empty block\\nhttps://svelte.dev/e/block_empty`);\n}\n\n/**\n * `<%name%>` will be treated as an HTML element unless it begins with a capital letter\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function component_name_lowercase(node, name) {\n\tw(node, 'component_name_lowercase', `\\`<${name}>\\` will be treated as an HTML element unless it begins with a capital letter\\nhttps://svelte.dev/e/component_name_lowercase`);\n}\n\n/**\n * This element is implicitly closed by the following `%tag%`, which can cause an unexpected DOM structure. Add an explicit `%closing%` to avoid surprises.\n * @param {null | NodeLike} node\n * @param {string} tag\n * @param {string} closing\n */\nexport function element_implicitly_closed(node, tag, closing) {\n\tw(node, 'element_implicitly_closed', `This element is implicitly closed by the following \\`${tag}\\`, which can cause an unexpected DOM structure. Add an explicit \\`${closing}\\` to avoid surprises.\\nhttps://svelte.dev/e/element_implicitly_closed`);\n}\n\n/**\n * Self-closing HTML tags for non-void elements are ambiguous — use `<%name% ...></%name%>` rather than `<%name% ... />`\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function element_invalid_self_closing_tag(node, name) {\n\tw(node, 'element_invalid_self_closing_tag', `Self-closing HTML tags for non-void elements are ambiguous — use \\`<${name} ...></${name}>\\` rather than \\`<${name} ... />\\`\\nhttps://svelte.dev/e/element_invalid_self_closing_tag`);\n}\n\n/**\n * Using `on:%name%` to listen to the %name% event is deprecated. Use the event attribute `on%name%` instead\n * @param {null | NodeLike} node\n * @param {string} name\n */\nexport function event_directive_deprecated(node, name) {\n\tw(node, 'event_directive_deprecated', `Using \\`on:${name}\\` to listen to the ${name} event is deprecated. Use the event attribute \\`on${name}\\` instead\\nhttps://svelte.dev/e/event_directive_deprecated`);\n}\n\n/**\n * %message%. When rendering this component on the server, the resulting HTML will be modified by the browser (by moving, removing, or inserting elements), likely resulting in a `hydration_mismatch` warning\n * @param {null | NodeLike} node\n * @param {string} message\n */\nexport function node_invalid_placement_ssr(node, message) {\n\tw(node, 'node_invalid_placement_ssr', `${message}. When rendering this component on the server, the resulting HTML will be modified by the browser (by moving, removing, or inserting elements), likely resulting in a \\`hydration_mismatch\\` warning\\nhttps://svelte.dev/e/node_invalid_placement_ssr`);\n}\n\n/**\n * `context=\"module\"` is deprecated, use the `module` attribute instead\n * @param {null | NodeLike} node\n */\nexport function script_context_deprecated(node) {\n\tw(node, 'script_context_deprecated', `\\`context=\"module\"\\` is deprecated, use the \\`module\\` attribute instead\\nhttps://svelte.dev/e/script_context_deprecated`);\n}\n\n/**\n * Unrecognized attribute — should be one of `generics`, `lang` or `module`. If this exists for a preprocessor, ensure that the preprocessor removes it\n * @param {null | NodeLike} node\n */\nexport function script_unknown_attribute(node) {\n\tw(node, 'script_unknown_attribute', `Unrecognized attribute — should be one of \\`generics\\`, \\`lang\\` or \\`module\\`. If this exists for a preprocessor, ensure that the preprocessor removes it\\nhttps://svelte.dev/e/script_unknown_attribute`);\n}\n\n/**\n * Using `<slot>` to render parent content is deprecated. Use `{@render ...}` tags instead\n * @param {null | NodeLike} node\n */\nexport function slot_element_deprecated(node) {\n\tw(node, 'slot_element_deprecated', `Using \\`<slot>\\` to render parent content is deprecated. Use \\`{@render ...}\\` tags instead\\nhttps://svelte.dev/e/slot_element_deprecated`);\n}\n\n/**\n * `<svelte:component>` is deprecated in runes mode — components are dynamic by default\n * @param {null | NodeLike} node\n */\nexport function svelte_component_deprecated(node) {\n\tw(node, 'svelte_component_deprecated', `\\`<svelte:component>\\` is deprecated in runes mode — components are dynamic by default\\nhttps://svelte.dev/e/svelte_component_deprecated`);\n}\n\n/**\n * `this` should be an `{expression}`. Using a string attribute value will cause an error in future versions of Svelte\n * @param {null | NodeLike} node\n */\nexport function svelte_element_invalid_this(node) {\n\tw(node, 'svelte_element_invalid_this', `\\`this\\` should be an \\`{expression}\\`. Using a string attribute value will cause an error in future versions of Svelte\\nhttps://svelte.dev/e/svelte_element_invalid_this`);\n}\n\n/**\n * `<svelte:self>` is deprecated — use self-imports (e.g. `import %name% from './%basename%'`) instead\n * @param {null | NodeLike} node\n * @param {string} name\n * @param {string} basename\n */\nexport function svelte_self_deprecated(node, name, basename) {\n\tw(node, 'svelte_self_deprecated', `\\`<svelte:self>\\` is deprecated — use self-imports (e.g. \\`import ${name} from './${basename}'\\`) instead\\nhttps://svelte.dev/e/svelte_self_deprecated`);\n}"
  },
  {
    "path": "packages/svelte/src/constants.js",
    "content": "export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\n/** used to indicate that a boundary's `failed` snippet was rendered on the server */\nexport const HYDRATION_START_FAILED = '[?';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n"
  },
  {
    "path": "packages/svelte/src/easing/index.js",
    "content": "/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function linear(t) {\n\treturn t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t\t: t < c\n\t\t\t\t? ca * t2 - cb * t + cc\n\t\t\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n"
  },
  {
    "path": "packages/svelte/src/escaping.js",
    "content": "const ATTR_REGEX = /[&\"<]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\n/**\n * @template V\n * @param {V} value\n * @param {boolean} [is_attr]\n */\nexport function escape_html(value, is_attr) {\n\tconst str = String(value ?? '');\n\n\tconst pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n\tpattern.lastIndex = 0;\n\n\tlet escaped = '';\n\tlet last = 0;\n\n\twhile (pattern.test(str)) {\n\t\tconst i = pattern.lastIndex - 1;\n\t\tconst ch = str[i];\n\t\tescaped += str.substring(last, i) + (ch === '&' ? '&amp;' : ch === '\"' ? '&quot;' : '&lt;');\n\t\tlast = i + 1;\n\t}\n\n\treturn escaped + str.substring(last);\n}\n"
  },
  {
    "path": "packages/svelte/src/events/index.js",
    "content": "export { on } from '../internal/client/dom/elements/events.js';\n"
  },
  {
    "path": "packages/svelte/src/events/public.d.ts",
    "content": "// Once https://github.com/microsoft/TypeScript/issues/59980 is fixed we can put these overloads into the JSDoc comments of the `on` function\n\n/**\n * Attaches an event handler to the window and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n */\nexport function on<Type extends keyof WindowEventMap>(\n\twindow: Window,\n\ttype: Type,\n\thandler: (this: Window, event: WindowEventMap[Type] & { currentTarget: Window }) => any,\n\toptions?: AddEventListenerOptions | undefined\n): () => void;\n/**\n * Attaches an event handler to the document and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n */\nexport function on<Type extends keyof DocumentEventMap>(\n\tdocument: Document,\n\ttype: Type,\n\thandler: (this: Document, event: DocumentEventMap[Type] & { currentTarget: Document }) => any,\n\toptions?: AddEventListenerOptions | undefined\n): () => void;\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n */\nexport function on<Element extends HTMLElement, Type extends keyof HTMLElementEventMap>(\n\telement: Element,\n\ttype: Type,\n\thandler: (this: Element, event: HTMLElementEventMap[Type] & { currentTarget: Element }) => any,\n\toptions?: AddEventListenerOptions | undefined\n): () => void;\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n */\nexport function on<Element extends MediaQueryList, Type extends keyof MediaQueryListEventMap>(\n\telement: Element,\n\ttype: Type,\n\thandler: (this: Element, event: MediaQueryListEventMap[Type] & { currentTarget: Element }) => any,\n\toptions?: AddEventListenerOptions | undefined\n): () => void;\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n */\nexport function on(\n\telement: EventTarget,\n\ttype: string,\n\thandler: EventListener,\n\toptions?: AddEventListenerOptions | undefined\n): () => void;\n"
  },
  {
    "path": "packages/svelte/src/html-tree-validation.js",
    "content": "/**\n * Map of elements that have certain elements that are not allowed inside them, in the sense that they will auto-close the parent/ancestor element.\n * Theoretically one could take advantage of it but most of the time it will just result in confusing behavior and break when SSR'd.\n * There are more elements that are invalid inside other elements, but they're not auto-closed and so don't break SSR and are therefore not listed here.\n * @type {Record<string, { direct: string[]} | { descendant: string[]; reset_by?: string[] }>}\n */\nconst autoclosing_children = {\n\t// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\n\tli: { direct: ['li'] },\n\t// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt#technical_summary\n\tdt: { descendant: ['dt', 'dd'], reset_by: ['dl'] },\n\tdd: { descendant: ['dt', 'dd'], reset_by: ['dl'] },\n\tp: {\n\t\tdescendant: [\n\t\t\t'address',\n\t\t\t'article',\n\t\t\t'aside',\n\t\t\t'blockquote',\n\t\t\t'div',\n\t\t\t'dl',\n\t\t\t'fieldset',\n\t\t\t'footer',\n\t\t\t'form',\n\t\t\t'h1',\n\t\t\t'h2',\n\t\t\t'h3',\n\t\t\t'h4',\n\t\t\t'h5',\n\t\t\t'h6',\n\t\t\t'header',\n\t\t\t'hgroup',\n\t\t\t'hr',\n\t\t\t'main',\n\t\t\t'menu',\n\t\t\t'nav',\n\t\t\t'ol',\n\t\t\t'p',\n\t\t\t'pre',\n\t\t\t'section',\n\t\t\t'table',\n\t\t\t'ul'\n\t\t]\n\t},\n\trt: { descendant: ['rt', 'rp'] },\n\trp: { descendant: ['rt', 'rp'] },\n\toptgroup: { descendant: ['optgroup'] },\n\toption: { descendant: ['option', 'optgroup'] },\n\tthead: { direct: ['tbody', 'tfoot'] },\n\ttbody: { direct: ['tbody', 'tfoot'] },\n\ttfoot: { direct: ['tbody'] },\n\ttr: { direct: ['tr', 'tbody'] },\n\ttd: { direct: ['td', 'th', 'tr'] },\n\tth: { direct: ['td', 'th', 'tr'] }\n};\n\n/**\n * Returns true if the tag is either the last in the list of siblings and will be autoclosed,\n * or not allowed inside the parent tag such that it will auto-close it. The latter results\n * in the browser repairing the HTML, which will likely result in an error during hydration.\n * @param {string} current\n * @param {string} [next]\n */\nexport function closing_tag_omitted(current, next) {\n\tconst disallowed = autoclosing_children[current];\n\tif (disallowed) {\n\t\tif (\n\t\t\t!next ||\n\t\t\t('direct' in disallowed ? disallowed.direct : disallowed.descendant).includes(next)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Map of elements that have certain elements that are not allowed inside them, in the sense that the browser will somehow repair the HTML.\n * There are more elements that are invalid inside other elements, but they're not repaired and so don't break SSR and are therefore not listed here.\n * @type {Record<string, { direct: string[]} | { descendant: string[]; reset_by?: string[]; only?: string[] } | { only: string[] }>}\n */\nconst disallowed_children = {\n\t...autoclosing_children,\n\t// Strictly speaking, seeing an <option> doesn't mean we're in a <select>, but we assume it here\n\t// option or optgroup does not have an `only` restriction because newer browsers support rich HTML content\n\t// inside option elements. For older browsers, hydration will handle the mismatch.\n\tform: { descendant: ['form'] },\n\ta: { descendant: ['a'] },\n\tbutton: { descendant: ['button'] },\n\th1: { descendant: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\th2: { descendant: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\th3: { descendant: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\th4: { descendant: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\th5: { descendant: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\th6: { descendant: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n\t// No special behavior since these rules fall back to \"in body\" mode for\n\t// all except special table nodes which cause bad parsing behavior anyway.\n\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n\ttr: { only: ['th', 'td', 'style', 'script', 'template'] },\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\ttbody: { only: ['tr', 'style', 'script', 'template'] },\n\tthead: { only: ['tr', 'style', 'script', 'template'] },\n\ttfoot: { only: ['tr', 'style', 'script', 'template'] },\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\tcolgroup: { only: ['col', 'template'] },\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\ttable: {\n\t\tonly: ['caption', 'colgroup', 'tbody', 'thead', 'tfoot', 'style', 'script', 'template']\n\t},\n\t// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\thead: {\n\t\tonly: [\n\t\t\t'base',\n\t\t\t'basefont',\n\t\t\t'bgsound',\n\t\t\t'link',\n\t\t\t'meta',\n\t\t\t'title',\n\t\t\t'noscript',\n\t\t\t'noframes',\n\t\t\t'style',\n\t\t\t'script',\n\t\t\t'template'\n\t\t]\n\t},\n\t// https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\thtml: { only: ['head', 'body', 'frameset'] },\n\tframeset: { only: ['frame'] },\n\t'#document': { only: ['html'] }\n};\n\n/**\n * Returns an error message if the tag is not allowed inside the ancestor tag (which is grandparent and above) such that it will result\n * in the browser repairing the HTML, which will likely result in an error during hydration.\n * @param {string} child_tag\n * @param {string[]} ancestors All nodes starting with the parent, up until the ancestor, which means two entries minimum\n * @param {string} [child_loc]\n * @param {string} [ancestor_loc]\n * @returns {string | null}\n */\nexport function is_tag_valid_with_ancestor(child_tag, ancestors, child_loc, ancestor_loc) {\n\tif (child_tag.includes('-')) return null; // custom elements can be anything\n\n\tconst ancestor_tag = ancestors[ancestors.length - 1];\n\tconst disallowed = disallowed_children[ancestor_tag];\n\tif (!disallowed) return null;\n\n\tif ('reset_by' in disallowed && disallowed.reset_by) {\n\t\tfor (let i = ancestors.length - 2; i >= 0; i--) {\n\t\t\tconst ancestor = ancestors[i];\n\t\t\tif (ancestor.includes('-')) return null; // custom elements can be anything\n\n\t\t\t// A reset means that forbidden descendants are allowed again\n\t\t\tif (disallowed.reset_by.includes(ancestors[i])) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ('descendant' in disallowed && disallowed.descendant.includes(child_tag)) {\n\t\tconst child = child_loc ? `\\`<${child_tag}>\\` (${child_loc})` : `\\`<${child_tag}>\\``;\n\t\tconst ancestor = ancestor_loc\n\t\t\t? `\\`<${ancestor_tag}>\\` (${ancestor_loc})`\n\t\t\t: `\\`<${ancestor_tag}>\\``;\n\n\t\treturn `${child} cannot be a descendant of ${ancestor}`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Returns an error message if the tag is not allowed inside the parent tag such that it will result\n * in the browser repairing the HTML, which will likely result in an error during hydration.\n * @param {string} child_tag\n * @param {string} parent_tag\n * @param {string} [child_loc]\n * @param {string} [parent_loc]\n * @returns {string | null}\n */\nexport function is_tag_valid_with_parent(child_tag, parent_tag, child_loc, parent_loc) {\n\tif (child_tag.includes('-') || parent_tag?.includes('-')) return null; // custom elements can be anything\n\n\tif (parent_tag === 'template') return null; // no errors or warning should be thrown in immediate children of template tags\n\n\tconst disallowed = disallowed_children[parent_tag];\n\n\tconst child = child_loc ? `\\`<${child_tag}>\\` (${child_loc})` : `\\`<${child_tag}>\\``;\n\tconst parent = parent_loc ? `\\`<${parent_tag}>\\` (${parent_loc})` : `\\`<${parent_tag}>\\``;\n\n\tif (disallowed) {\n\t\tif ('direct' in disallowed && disallowed.direct.includes(child_tag)) {\n\t\t\treturn `${child} cannot be a direct child of ${parent}`;\n\t\t}\n\n\t\tif ('descendant' in disallowed && disallowed.descendant.includes(child_tag)) {\n\t\t\treturn `${child} cannot be a child of ${parent}`;\n\t\t}\n\n\t\tif ('only' in disallowed && disallowed.only) {\n\t\t\tif (disallowed.only.includes(child_tag)) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn `${child} cannot be a child of ${parent}. \\`<${parent_tag}>\\` only allows these children: ${disallowed.only.map((d) => `\\`<${d}>\\``).join(', ')}`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// These tags are only valid with a few parents that have special child\n\t// parsing rules - if we're down here, then none of those matched and\n\t// so we allow it only if we don't know what the parent is, as all other\n\t// cases are invalid (and we only get into this function if we know the parent).\n\tswitch (child_tag) {\n\t\tcase 'body':\n\t\tcase 'caption':\n\t\tcase 'col':\n\t\tcase 'colgroup':\n\t\tcase 'frameset':\n\t\tcase 'frame':\n\t\tcase 'head':\n\t\tcase 'html':\n\t\t\treturn `${child} cannot be a child of ${parent}`;\n\t\tcase 'thead':\n\t\tcase 'tbody':\n\t\tcase 'tfoot':\n\t\t\treturn `${child} must be the child of a \\`<table>\\`, not a ${parent}`;\n\t\tcase 'td':\n\t\tcase 'th':\n\t\t\treturn `${child} must be the child of a \\`<tr>\\`, not a ${parent}`;\n\t\tcase 'tr':\n\t\t\treturn `\\`<tr>\\` must be the child of a \\`<thead>\\`, \\`<tbody>\\`, or \\`<tfoot>\\`, not a ${parent}`;\n\t}\n\n\treturn null;\n}\n"
  },
  {
    "path": "packages/svelte/src/index-client.js",
    "content": "/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: null; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n"
  },
  {
    "path": "packages/svelte/src/index-server.js",
    "content": "/** @import { SSRContext } from '#server' */\n/** @import { Renderer } from './internal/server/renderer.js' */\nimport { ssr_context } from './internal/server/context.js';\nimport { noop } from './internal/shared/utils.js';\nimport * as e from './internal/server/errors.js';\n\n/** @param {() => void} fn */\nexport function onDestroy(fn) {\n\t/** @type {Renderer} */ (/** @type {SSRContext} */ (ssr_context).r).on_destroy(fn);\n}\n\nexport {\n\tnoop as beforeUpdate,\n\tnoop as afterUpdate,\n\tnoop as onMount,\n\tnoop as flushSync,\n\trun as untrack\n} from './internal/shared/utils.js';\n\nexport function createEventDispatcher() {\n\treturn noop;\n}\n\nexport function mount() {\n\te.lifecycle_function_unavailable('mount');\n}\n\nexport function hydrate() {\n\te.lifecycle_function_unavailable('hydrate');\n}\n\nexport function unmount() {\n\te.lifecycle_function_unavailable('unmount');\n}\n\nexport function fork() {\n\te.lifecycle_function_unavailable('fork');\n}\n\nexport async function tick() {}\n\nexport async function settled() {}\n\nexport { getAbortSignal } from './internal/server/abort-signal.js';\n\nexport {\n\tcreateContext,\n\tgetAllContexts,\n\tgetContext,\n\thasContext,\n\tsetContext\n} from './internal/server/context.js';\n\nexport { hydratable } from './internal/server/hydratable.js';\n\nexport { createRawSnippet } from './internal/server/blocks/snippet.js';\n"
  },
  {
    "path": "packages/svelte/src/index.d.ts",
    "content": "// This should contain all the public interfaces (not all of them are actually importable, check current Svelte for which ones are).\n\nimport './ambient.js';\n\n/**\n * @deprecated In Svelte 4, components are classes. In Svelte 5, they are functions.\n * Use `mount` instead to instantiate components.\n * See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n * for more info.\n */\nexport interface ComponentConstructorOptions<\n\tProps extends Record<string, any> = Record<string, any>\n> {\n\ttarget: Element | Document | ShadowRoot;\n\tanchor?: Element;\n\tprops?: Props;\n\tcontext?: Map<any, any>;\n\thydrate?: boolean;\n\tintro?: boolean;\n\trecover?: boolean;\n\tsync?: boolean;\n\tidPrefix?: string;\n\t$$inline?: boolean;\n\ttransformError?: (error: unknown) => unknown;\n}\n\n/**\n * Utility type for ensuring backwards compatibility on a type level that if there's a default slot, add 'children' to the props\n */\ntype Properties<Props, Slots> = Props &\n\t(Slots extends { default: any }\n\t\t? // This is unfortunate because it means \"accepts no props\" turns into \"accepts any prop\"\n\t\t\t// but the alternative is non-fixable type errors because of the way TypeScript index\n\t\t\t// signatures work (they will always take precedence and make an impossible-to-satisfy children type).\n\t\t\tProps extends Record<string, never>\n\t\t\t? any\n\t\t\t: { children?: any }\n\t\t: {});\n\n/**\n * This was the base class for Svelte components in Svelte 4. Svelte 5+ components\n * are completely different under the hood. For typing, use `Component` instead.\n * To instantiate components, use `mount` instead.\n * See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more info.\n */\nexport class SvelteComponent<\n\tProps extends Record<string, any> = Record<string, any>,\n\tEvents extends Record<string, any> = any,\n\tSlots extends Record<string, any> = any\n> {\n\t/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */\n\tstatic element?: typeof HTMLElement;\n\n\t[prop: string]: any;\n\t/**\n\t * @deprecated This constructor only exists when using the `asClassComponent` compatibility helper, which\n\t * is a stop-gap solution. Migrate towards using `mount` instead. See\n\t * [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more info.\n\t */\n\tconstructor(options: ComponentConstructorOptions<Properties<Props, Slots>>);\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t */\n\t$$prop_def: Props; // Without Properties: unnecessary, causes type bugs\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t */\n\t$$events_def: Events;\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t */\n\t$$slot_def: Slots;\n\t/**\n\t * For type checking capabilities only.\n\t * Does not exist at runtime.\n\t * ### DO NOT USE!\n\t */\n\t$$bindings?: string;\n\n\t/**\n\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t * for more info.\n\t */\n\t$destroy(): void;\n\n\t/**\n\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t * for more info.\n\t */\n\t$on<K extends Extract<keyof Events, string>>(\n\t\ttype: K,\n\t\tcallback: (e: Events[K]) => void\n\t): () => void;\n\n\t/**\n\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t * for more info.\n\t */\n\t$set(props: Partial<Props>): void;\n}\n\ndeclare const brand: unique symbol;\ntype Brand<B> = { [brand]: B };\ntype Branded<T, B> = T & Brand<B>;\n\n/**\n * Internal implementation details that vary between environments\n */\nexport type ComponentInternals = Branded<{}, 'ComponentInternals'>;\n\n/**\n * Can be used to create strongly typed Svelte components.\n *\n * #### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import type { Component } from 'svelte';\n * export declare const MyComponent: Component<{ foo: string }> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n */\nexport interface Component<\n\tProps extends Record<string, any> = {},\n\tExports extends Record<string, any> = {},\n\tBindings extends keyof Props | '' = string\n> {\n\t/**\n\t * @param internal An internal object used by Svelte. Do not use or modify.\n\t * @param props The props passed to the component.\n\t */\n\t(\n\t\tthis: void,\n\t\tinternals: ComponentInternals,\n\t\tprops: Props\n\t): {\n\t\t/**\n\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t * for more info.\n\t\t */\n\t\t$on?(type: string, callback: (e: any) => void): () => void;\n\t\t/**\n\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t * for more info.\n\t\t */\n\t\t$set?(props: Partial<Props>): void;\n\t} & Exports;\n\t/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */\n\telement?: typeof HTMLElement;\n\t/** Does not exist at runtime, for typing capabilities only. DO NOT USE */\n\tz_$$bindings?: Bindings;\n}\n\n/**\n * @deprecated Use `Component` instead. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.\n */\nexport class SvelteComponentTyped<\n\tProps extends Record<string, any> = Record<string, any>,\n\tEvents extends Record<string, any> = any,\n\tSlots extends Record<string, any> = any\n> extends SvelteComponent<Props, Events, Slots> {}\n\n/**\n * @deprecated The new `Component` type does not have a dedicated Events type. Use `ComponentProps` instead.\n *\n * @description\n * Convenience type to get the events the given component expects. Example:\n * ```html\n * <script lang=\"ts\">\n *    import type { ComponentEvents } from 'svelte';\n *    import Component from './Component.svelte';\n *\n *    function handleCloseEvent(event: ComponentEvents<Component>['close']) {\n *       console.log(event.detail);\n *    }\n * </script>\n *\n * <Component on:close={handleCloseEvent} />\n * ```\n */\nexport type ComponentEvents<Comp extends SvelteComponent> =\n\tComp extends SvelteComponent<any, infer Events> ? Events : never;\n\n/**\n * Convenience type to get the props the given component expects.\n *\n * Example: Ensure a variable contains the props expected by `MyComponent`:\n *\n * ```ts\n * import type { ComponentProps } from 'svelte';\n * import MyComponent from './MyComponent.svelte';\n *\n * // Errors if these aren't the correct props expected by MyComponent.\n * const props: ComponentProps<typeof MyComponent> = { foo: 'bar' };\n * ```\n *\n * > [!NOTE] In Svelte 4, you would do `ComponentProps<MyComponent>` because `MyComponent` was a class.\n *\n * Example: A generic function that accepts some component and infers the type of its props:\n *\n * ```ts\n * import type { Component, ComponentProps } from 'svelte';\n * import MyComponent from './MyComponent.svelte';\n *\n * function withProps<TComponent extends Component<any>>(\n * \tcomponent: TComponent,\n * \tprops: ComponentProps<TComponent>\n * ) {};\n *\n * // Errors if the second argument is not the correct props expected by the component in the first argument.\n * withProps(MyComponent, { foo: 'bar' });\n * ```\n */\nexport type ComponentProps<Comp extends SvelteComponent | Component<any, any>> =\n\tComp extends SvelteComponent<infer Props>\n\t\t? Props\n\t\t: Comp extends Component<infer Props, any>\n\t\t\t? Props\n\t\t\t: never;\n\n/**\n * @deprecated This type is obsolete when working with the new `Component` type.\n *\n * @description\n * Convenience type to get the type of a Svelte component. Useful for example in combination with\n * dynamic components using `<svelte:component>`.\n *\n * Example:\n * ```html\n * <script lang=\"ts\">\n * \timport type { ComponentType, SvelteComponent } from 'svelte';\n * \timport Component1 from './Component1.svelte';\n * \timport Component2 from './Component2.svelte';\n *\n * \tconst component: ComponentType = someLogic() ? Component1 : Component2;\n * \tconst componentOfCertainSubType: ComponentType<SvelteComponent<{ needsThisProp: string }>> = someLogic() ? Component1 : Component2;\n * </script>\n *\n * <svelte:component this={component} />\n * <svelte:component this={componentOfCertainSubType} needsThisProp=\"hello\" />\n * ```\n */\nexport type ComponentType<Comp extends SvelteComponent = SvelteComponent> = (new (\n\toptions: ComponentConstructorOptions<\n\t\tComp extends SvelteComponent<infer Props> ? Props : Record<string, any>\n\t>\n) => Comp) & {\n\t/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */\n\telement?: typeof HTMLElement;\n};\n\ndeclare const SnippetReturn: unique symbol;\n\n// Use an interface instead of a type, makes for better intellisense info because the type is named in more situations.\n/**\n * The type of a `#snippet` block. You can use it to (for example) express that your component expects a snippet of a certain type:\n * ```ts\n * let { banner }: { banner: Snippet<[{ text: string }]> } = $props();\n * ```\n * You can only call a snippet through the `{@render ...}` tag.\n *\n * See the [snippet documentation](https://svelte.dev/docs/svelte/snippet) for more info.\n *\n * @template Parameters the parameters that the snippet expects (if any) as a tuple.\n */\nexport interface Snippet<Parameters extends unknown[] = []> {\n\t(\n\t\tthis: void,\n\t\t// this conditional allows tuples but not arrays. Arrays would indicate a\n\t\t// rest parameter type, which is not supported. If rest parameters are added\n\t\t// in the future, the condition can be removed.\n\t\t...args: number extends Parameters['length'] ? never : Parameters\n\t): {\n\t\t'{@render ...} must be called with a Snippet': \"import type { Snippet } from 'svelte'\";\n\t} & typeof SnippetReturn;\n}\n\ninterface DispatchOptions {\n\tcancelable?: boolean;\n}\n\nexport interface EventDispatcher<EventMap extends Record<string, any>> {\n\t// Implementation notes:\n\t// - undefined extends X instead of X extends undefined makes this work better with both strict and nonstrict mode\n\t// - | null | undefined is added for convenience, as they are equivalent for the custom event constructor (both result in a null detail)\n\t<Type extends keyof EventMap>(\n\t\t...args: null extends EventMap[Type]\n\t\t\t? [type: Type, parameter?: EventMap[Type] | null | undefined, options?: DispatchOptions]\n\t\t\t: undefined extends EventMap[Type]\n\t\t\t\t? [type: Type, parameter?: EventMap[Type] | null | undefined, options?: DispatchOptions]\n\t\t\t\t: [type: Type, parameter: EventMap[Type], options?: DispatchOptions]\n\t): boolean;\n}\n\n/**\n * Defines the options accepted by the `mount()` function.\n */\nexport type MountOptions<Props extends Record<string, any> = Record<string, any>> = {\n\t/**\n\t * Target element where the component will be mounted.\n\t */\n\ttarget: Document | Element | ShadowRoot;\n\t/**\n\t * Optional node inside `target`. When specified, it is used to render the component immediately before it.\n\t */\n\tanchor?: Node;\n\t/**\n\t * Allows the specification of events.\n\t * @deprecated Use callback props instead.\n\t */\n\tevents?: Record<string, (e: any) => any>;\n\t/**\n\t * Can be accessed via `getContext()` at the component level.\n\t */\n\tcontext?: Map<any, any>;\n\t/**\n\t * Whether or not to play transitions on initial render.\n\t * @default true\n\t */\n\tintro?: boolean;\n\t/**\n\t * A function that transforms errors caught by error boundaries before they are passed to the `failed` snippet.\n\t * Defaults to the identity function.\n\t */\n\ttransformError?: (error: unknown) => unknown | Promise<unknown>;\n} & ({} extends Props\n\t? {\n\t\t\t/**\n\t\t\t * Component properties.\n\t\t\t */\n\t\t\tprops?: Props;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Component properties.\n\t\t\t */\n\t\t\tprops: Props;\n\t\t});\n\n/**\n * Represents work that is happening off-screen, such as data being preloaded\n * in anticipation of the user navigating\n * @since 5.42\n */\nexport interface Fork {\n\t/**\n\t * Commit the fork. The promise will resolve once the state change has been applied\n\t */\n\tcommit(): Promise<void>;\n\t/**\n\t * Discard the fork\n\t */\n\tdiscard(): void;\n}\n\nexport * from './index-client.js';\n"
  },
  {
    "path": "packages/svelte/src/internal/client/constants.js",
    "content": "// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\n/** Set once a reaction has run for the first time */\nexport const REACTION_RAN = 1 << 15;\n/** Effect is in the process of getting destroyed. Can be observed in child teardown functions */\nexport const DESTROYING = 1 << 25;\n\n// Flags exclusive to effects\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags exclusive to deriveds\n/**\n * Tells that we marked this derived and its reactions as visited during the \"mark as (maybe) dirty\"-phase.\n * Will be lifted during execution of the derived and during checking its dirty state (both are necessary\n * because a derived might be checked but not executed).\n */\nexport const WAS_MARKED = 1 << 16;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const IS_XHTML =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\t!!globalThis.document?.contentType &&\n\t/* @__PURE__ */ globalThis.document.contentType.includes('xml');\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n"
  },
  {
    "path": "packages/svelte/src/internal/client/context.js",
    "content": "/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n *   <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if no parent component called `set`.\n *\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tr: /** @type {Effect} */ (active_effect),\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcontext.i = true;\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/assign.js",
    "content": "import { STATE_SYMBOL } from '#client/constants';\nimport { sanitize_location } from '../../../utils.js';\nimport { untrack } from '../runtime.js';\nimport * as w from '../warnings.js';\n\n/**\n *\n * @param {any} a\n * @param {any} b\n * @param {string} property\n * @param {string} location\n */\nfunction compare(a, b, property, location) {\n\tif (a !== b && typeof b === 'object' && STATE_SYMBOL in b) {\n\t\tw.assignment_value_stale(property, /** @type {string} */ (sanitize_location(location)));\n\t}\n\n\treturn a;\n}\n\n/**\n * @param {any} object\n * @param {string} property\n * @param {string} operator\n * @param {any} rhs\n * @param {string} location\n */\nexport function assign(object, property, operator, rhs, location) {\n\treturn compare(\n\t\toperator === '='\n\t\t\t? (object[property] = rhs)\n\t\t\t: operator === '&&='\n\t\t\t\t? (object[property] &&= rhs())\n\t\t\t\t: operator === '||='\n\t\t\t\t\t? (object[property] ||= rhs())\n\t\t\t\t\t: operator === '??='\n\t\t\t\t\t\t? (object[property] ??= rhs())\n\t\t\t\t\t\t: null,\n\t\tuntrack(() => object[property]),\n\t\tproperty,\n\t\tlocation\n\t);\n}\n\n/**\n * @param {any} object\n * @param {string} property\n * @param {string} operator\n * @param {any} rhs\n * @param {string} location\n */\nexport async function assign_async(object, property, operator, rhs, location) {\n\treturn compare(\n\t\toperator === '='\n\t\t\t? (object[property] = await rhs)\n\t\t\t: operator === '&&='\n\t\t\t\t? (object[property] &&= await rhs())\n\t\t\t\t: operator === '||='\n\t\t\t\t\t? (object[property] ||= await rhs())\n\t\t\t\t\t: operator === '??='\n\t\t\t\t\t\t? (object[property] ??= await rhs())\n\t\t\t\t\t\t: null,\n\t\tuntrack(() => object[property]),\n\t\tproperty,\n\t\tlocation\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/console-log.js",
    "content": "import { STATE_SYMBOL } from '#client/constants';\nimport { snapshot } from '../../shared/clone.js';\nimport * as w from '../warnings.js';\nimport { untrack } from '../runtime.js';\n\n/**\n * @param {string} method\n * @param  {...any} objects\n */\nexport function log_if_contains_state(method, ...objects) {\n\tuntrack(() => {\n\t\ttry {\n\t\t\tlet has_state = false;\n\t\t\tconst transformed = [];\n\n\t\t\tfor (const obj of objects) {\n\t\t\t\tif (obj && typeof obj === 'object' && STATE_SYMBOL in obj) {\n\t\t\t\t\ttransformed.push(snapshot(obj, true));\n\t\t\t\t\thas_state = true;\n\t\t\t\t} else {\n\t\t\t\t\ttransformed.push(obj);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (has_state) {\n\t\t\t\tw.console_log_state(method);\n\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log('%c[snapshot]', 'color: grey', ...transformed);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Errors can occur when trying to snapshot objects with getters that throw or non-enumerable properties.\n\t\t}\n\t});\n\n\treturn objects;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/css.js",
    "content": "/** @type {Map<String, Set<HTMLStyleElement>>} */\nvar all_styles = new Map();\n\n/**\n * @param {String} hash\n * @param {HTMLStyleElement} style\n */\nexport function register_style(hash, style) {\n\tvar styles = all_styles.get(hash);\n\n\tif (!styles) {\n\t\tstyles = new Set();\n\t\tall_styles.set(hash, styles);\n\t}\n\n\tstyles.add(style);\n}\n\n/**\n * @param {String} hash\n */\nexport function cleanup_styles(hash) {\n\tvar styles = all_styles.get(hash);\n\tif (!styles) return;\n\n\tfor (const style of styles) {\n\t\tstyle.remove();\n\t}\n\n\tall_styles.delete(hash);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/debug.js",
    "content": "/** @import { Derived, Effect, Value } from '#client' */\n\nimport {\n\tBLOCK_EFFECT,\n\tBOUNDARY_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tCONNECTED,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tDESTROYED,\n\tINERT,\n\tMAYBE_DIRTY,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tWAS_MARKED,\n\tMANAGED_EFFECT\n} from '#client/constants';\nimport { snapshot } from '../../shared/clone.js';\nimport { untrack } from '../runtime.js';\n\n/**\n *\n * @param {Effect} effect\n */\nexport function root(effect) {\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t}\n\n\treturn effect;\n}\n\n/**\n *\n * @param {Effect} effect\n * @param {boolean} append_effect\n * @returns {string}\n */\nfunction effect_label(effect, append_effect = false) {\n\tconst flags = effect.f;\n\n\tlet label = `(unknown ${append_effect ? 'effect' : ''})`;\n\n\tif ((flags & ROOT_EFFECT) !== 0) {\n\t\tlabel = 'root';\n\t} else if ((flags & BOUNDARY_EFFECT) !== 0) {\n\t\tlabel = 'boundary';\n\t} else if ((flags & BLOCK_EFFECT) !== 0) {\n\t\tlabel = 'block';\n\t} else if ((flags & MANAGED_EFFECT) !== 0) {\n\t\tlabel = 'managed';\n\t} else if ((flags & ASYNC) !== 0) {\n\t\tlabel = 'async';\n\t} else if ((flags & BRANCH_EFFECT) !== 0) {\n\t\tlabel = 'branch';\n\t} else if ((flags & RENDER_EFFECT) !== 0) {\n\t\tlabel = 'render effect';\n\t} else if ((flags & EFFECT) !== 0) {\n\t\tlabel = 'effect';\n\t}\n\n\tif (append_effect && !label.endsWith('effect')) {\n\t\tlabel += ' effect';\n\t}\n\n\treturn label;\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect[]} highlighted\n */\nexport function log_effect_tree(effect, highlighted = [], depth = 0, is_reachable = true) {\n\tconst flags = effect.f;\n\tlet label = effect_label(effect);\n\n\tlet status =\n\t\t(flags & CLEAN) !== 0 ? 'clean' : (flags & MAYBE_DIRTY) !== 0 ? 'maybe dirty' : 'dirty';\n\n\tlet styles = [`font-weight: ${status === 'clean' ? 'normal' : 'bold'}`];\n\n\tif (status !== 'clean' && !is_reachable) {\n\t\tlabel = `⚠️ ${label}`;\n\t\tstyles.push(`color: red`);\n\t}\n\n\tif ((flags & INERT) !== 0) {\n\t\tstyles.push('font-style: italic');\n\t}\n\n\tif (highlighted.includes(effect)) {\n\t\tstyles.push('background-color: yellow');\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.group(`%c${label} (${status})`, styles.join('; '));\n\n\tif (depth === 0) {\n\t\tconst callsite = new Error().stack\n\t\t\t?.split('\\n')[2]\n\t\t\t.replace(/\\s+at (?: \\w+\\(?)?(.+)\\)?/, (m, $1) => $1.replace(/\\?[^:]+/, ''));\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(callsite);\n\t} else {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupCollapsed(`%cfn`, `font-weight: normal`);\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(effect.fn);\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\tif (effect.deps !== null) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupCollapsed('%cdeps', 'font-weight: normal');\n\n\t\tfor (const dep of effect.deps) {\n\t\t\tlog_dep(dep);\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\tif (effect.nodes) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(effect.nodes.start);\n\n\t\tif (effect.nodes.start !== effect.nodes.end) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(effect.nodes.end);\n\t\t}\n\t}\n\n\tvar child_is_reachable = is_reachable && ((flags & BRANCH_EFFECT) === 0 || (flags & CLEAN) === 0);\n\n\tlet child = effect.first;\n\twhile (child !== null) {\n\t\tlog_effect_tree(child, highlighted, depth + 1, child_is_reachable);\n\t\tchild = child.next;\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n *\n * @param {Value} dep\n */\nfunction log_dep(dep) {\n\tif ((dep.f & DERIVED) !== 0) {\n\t\tconst derived = /** @type {Derived} */ (dep);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupCollapsed(\n\t\t\t`%c$derived %c${dep.label ?? '<unknown>'}`,\n\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t'font-weight: normal',\n\t\t\tuntrack(() => snapshot(derived.v))\n\t\t);\n\n\t\tif (derived.deps) {\n\t\t\tfor (const d of derived.deps) {\n\t\t\t\tlog_dep(d);\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t} else {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`%c$state %c${dep.label ?? '<unknown>'}`,\n\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t'font-weight: normal',\n\t\t\tuntrack(() => snapshot(dep.v))\n\t\t);\n\t}\n}\n\n/**\n * Logs all reactions of a source or derived transitively\n * @param {Derived | Value} signal\n */\nexport function log_reactions(signal) {\n\t/** @type {Set<Derived | Value>} */\n\tconst visited = new Set();\n\n\t/**\n\t * Returns an array of flag names that are set on the given flags bitmask\n\t * @param {number} flags\n\t * @returns {string[]}\n\t */\n\tfunction get_derived_flag_names(flags) {\n\t\t/** @type {string[]} */\n\t\tconst names = [];\n\n\t\tif ((flags & CLEAN) !== 0) names.push('CLEAN');\n\t\tif ((flags & DIRTY) !== 0) names.push('DIRTY');\n\t\tif ((flags & MAYBE_DIRTY) !== 0) names.push('MAYBE_DIRTY');\n\t\tif ((flags & CONNECTED) !== 0) names.push('CONNECTED');\n\t\tif ((flags & WAS_MARKED) !== 0) names.push('WAS_MARKED');\n\t\tif ((flags & INERT) !== 0) names.push('INERT');\n\t\tif ((flags & DESTROYED) !== 0) names.push('DESTROYED');\n\n\t\treturn names;\n\t}\n\n\t/**\n\t * @param {Derived | Value} d\n\t * @param {number} depth\n\t */\n\tfunction log_derived(d, depth) {\n\t\tconst flags = d.f;\n\t\tconst flag_names = get_derived_flag_names(flags);\n\t\tconst flags_str = flag_names.length > 0 ? `(${flag_names.join(', ')})` : '(no flags)';\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.group(\n\t\t\t`%c${flags & DERIVED ? '$derived' : '$state'} %c${d.label ?? '<unknown>'} %c${flags_str}`,\n\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t'font-weight: normal; color: inherit',\n\t\t\t'font-weight: normal; color: gray'\n\t\t);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(untrack(() => snapshot(d.v)));\n\n\t\tif ('fn' in d) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('%cfn:', 'font-weight: bold', d.fn);\n\t\t}\n\n\t\tif (d.reactions !== null && d.reactions.length > 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group('%creactions', 'font-weight: bold');\n\n\t\t\tfor (const reaction of d.reactions) {\n\t\t\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\t\t\tconst derived_reaction = /** @type {Derived} */ (reaction);\n\n\t\t\t\t\tif (visited.has(derived_reaction)) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`%c$derived %c${derived_reaction.label ?? '<unknown>'} %c(already seen)`,\n\t\t\t\t\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t\t\t\t\t'font-weight: normal; color: inherit',\n\t\t\t\t\t\t\t'font-weight: bold; color: orange'\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisited.add(derived_reaction);\n\t\t\t\t\t\tlog_derived(derived_reaction, depth + 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// It's an effect\n\t\t\t\t\tconst label = effect_label(/** @type {Effect} */ (reaction), true);\n\t\t\t\t\tconst status = (flags & MAYBE_DIRTY) !== 0 ? 'maybe dirty' : 'dirty';\n\n\t\t\t\t\t// Collect parent statuses\n\t\t\t\t\t/** @type {string[]} */\n\t\t\t\t\tconst parent_statuses = [];\n\t\t\t\t\tlet show = false;\n\t\t\t\t\tlet current = /** @type {Effect} */ (reaction).parent;\n\t\t\t\t\twhile (current !== null) {\n\t\t\t\t\t\tconst parent_flags = current.f;\n\t\t\t\t\t\tif ((parent_flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\t\t\t\tconst parent_status = (parent_flags & CLEAN) !== 0 ? 'clean' : 'not clean';\n\t\t\t\t\t\t\tif (parent_status === 'clean' && parent_statuses.includes('not clean')) show = true;\n\t\t\t\t\t\t\tparent_statuses.push(parent_status);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!current.parent) break;\n\t\t\t\t\t\tcurrent = current.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if reaction is reachable from root\n\t\t\t\t\tconst seen_effects = new Set();\n\t\t\t\t\tlet reachable = false;\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Effect | null} effect\n\t\t\t\t\t */\n\t\t\t\t\tfunction check_reachable(effect) {\n\t\t\t\t\t\tif (effect === null || reachable) return;\n\t\t\t\t\t\tif (effect === reaction) {\n\t\t\t\t\t\t\treachable = true;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (effect.f & DESTROYED) return;\n\t\t\t\t\t\tif (seen_effects.has(effect)) {\n\t\t\t\t\t\t\tthrow new Error('');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tseen_effects.add(effect);\n\t\t\t\t\t\tlet child = effect.first;\n\t\t\t\t\t\twhile (child !== null) {\n\t\t\t\t\t\t\tcheck_reachable(child);\n\t\t\t\t\t\t\tchild = child.next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (current) check_reachable(current);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`%c⚠️ Circular reference detected in effect tree`,\n\t\t\t\t\t\t\t'font-weight: bold; color: red',\n\t\t\t\t\t\t\tseen_effects\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!reachable) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`%c⚠️ Effect is NOT reachable from its parent chain`,\n\t\t\t\t\t\t\t'font-weight: bold; color: red'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst parent_status_str = show ? ` (${parent_statuses.join(', ')})` : '';\n\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`%c${label} (${status})${parent_status_str}`,\n\t\t\t\t\t\t`font-weight: bold; color: ${parent_status_str ? 'red' : 'green'}`,\n\t\t\t\t\t\treaction\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('%cno reactions', 'font-style: italic; color: gray');\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.group(`%cDerived Reactions Graph`, 'font-weight: bold; color: purple');\n\n\tvisited.add(signal);\n\tlog_derived(signal, 0);\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n * Traverses an effect tree and logs branches where a non-clean branch exists below a clean branch\n * @param {Effect} effect\n */\nexport function log_inconsistent_branches(effect) {\n\tconst root_effect = root(effect);\n\n\t/**\n\t * @typedef {{\n\t *   effect: Effect,\n\t *   status: 'clean' | 'maybe dirty' | 'dirty',\n\t *   parent_clean: boolean,\n\t *   children: BranchInfo[]\n\t * }} BranchInfo\n\t */\n\n\t/**\n\t * Collects branch effects from the tree\n\t * @param {Effect} eff\n\t * @param {boolean} parent_clean - whether any ancestor branch is clean\n\t * @returns {BranchInfo[]}\n\t */\n\tfunction collect_branches(eff, parent_clean) {\n\t\t/** @type {BranchInfo[]} */\n\t\tconst branches = [];\n\t\tconst flags = eff.f;\n\t\tconst is_branch = (flags & BRANCH_EFFECT) !== 0;\n\n\t\tif (is_branch) {\n\t\t\tconst status =\n\t\t\t\t(flags & CLEAN) !== 0 ? 'clean' : (flags & MAYBE_DIRTY) !== 0 ? 'maybe dirty' : 'dirty';\n\n\t\t\t/** @type {BranchInfo[]} */\n\t\t\tconst child_branches = [];\n\n\t\t\tlet child = eff.first;\n\t\t\twhile (child !== null) {\n\t\t\t\tchild_branches.push(...collect_branches(child, status === 'clean'));\n\t\t\t\tchild = child.next;\n\t\t\t}\n\n\t\t\tbranches.push({\n\t\t\t\teffect: eff,\n\t\t\t\tstatus,\n\t\t\t\tparent_clean,\n\t\t\t\tchildren: child_branches\n\t\t\t});\n\t\t} else {\n\t\t\t// Not a branch, continue traversing\n\t\t\tlet child = eff.first;\n\t\t\twhile (child !== null) {\n\t\t\t\tbranches.push(...collect_branches(child, parent_clean));\n\t\t\t\tchild = child.next;\n\t\t\t}\n\t\t}\n\n\t\treturn branches;\n\t}\n\n\t/**\n\t * Checks if a branch tree contains any inconsistencies (non-clean below clean)\n\t * @param {BranchInfo} branch\n\t * @param {boolean} ancestor_clean\n\t * @returns {boolean}\n\t */\n\tfunction has_inconsistency(branch, ancestor_clean) {\n\t\tconst is_inconsistent = ancestor_clean && branch.status !== 'clean';\n\t\tif (is_inconsistent) return true;\n\n\t\tconst new_ancestor_clean = ancestor_clean || branch.status === 'clean';\n\t\tfor (const child of branch.children) {\n\t\t\tif (has_inconsistency(child, new_ancestor_clean)) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Logs a branch and its children, but only if there are inconsistencies\n\t * @param {BranchInfo} branch\n\t * @param {boolean} ancestor_clean\n\t * @param {number} depth\n\t */\n\tfunction log_branch(branch, ancestor_clean, depth) {\n\t\tconst is_inconsistent = ancestor_clean && branch.status !== 'clean';\n\t\tconst new_ancestor_clean = ancestor_clean || branch.status === 'clean';\n\n\t\t// Only log if this branch or any descendant has an inconsistency\n\t\tif (!has_inconsistency(branch, ancestor_clean) && !is_inconsistent) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst style = is_inconsistent\n\t\t\t? 'font-weight: bold; color: red'\n\t\t\t: branch.status === 'clean'\n\t\t\t\t? 'font-weight: normal; color: green'\n\t\t\t\t: 'font-weight: bold; color: orange';\n\n\t\tconst warning = is_inconsistent ? ' ⚠️ INCONSISTENT' : '';\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.group(`%cbranch (${branch.status})${warning}`, style);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log('%ceffect:', 'font-weight: bold', branch.effect);\n\n\t\tif (branch.effect.fn) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('%cfn:', 'font-weight: bold', branch.effect.fn);\n\t\t}\n\n\t\tif (branch.effect.deps !== null) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupCollapsed('%cdeps', 'font-weight: normal');\n\t\t\tfor (const dep of branch.effect.deps) {\n\t\t\t\tlog_dep(dep);\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\tif (is_inconsistent) {\n\t\t\tlog_effect_tree(branch.effect);\n\t\t} else if (branch.children.length > 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group('%cchild branches', 'font-weight: bold');\n\t\t\tfor (const child of branch.children) {\n\t\t\t\tlog_branch(child, new_ancestor_clean, depth + 1);\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\tconst branches = collect_branches(root_effect, false);\n\n\t// Check if there are any inconsistencies at all\n\tlet has_any_inconsistency = false;\n\tfor (const branch of branches) {\n\t\tif (has_inconsistency(branch, false)) {\n\t\t\thas_any_inconsistency = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!has_any_inconsistency) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log('%cNo inconsistent branches found', 'font-weight: bold; color: green');\n\t\treturn;\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.group(`%cInconsistent Branches (non-clean below clean)`, 'font-weight: bold; color: red');\n\n\tfor (const branch of branches) {\n\t\tlog_branch(branch, false, 0);\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n\n\treturn true;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/elements.js",
    "content": "/** @import { SourceLocation } from '#client' */\nimport { COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE } from '#client/constants';\nimport { HYDRATION_END, HYDRATION_START } from '../../../constants.js';\nimport { hydrating } from '../dom/hydration.js';\nimport { dev_stack } from '../context.js';\n\n/**\n * @param {any} fn\n * @param {string} filename\n * @param {SourceLocation[]} locations\n * @returns {any}\n */\nexport function add_locations(fn, filename, locations) {\n\treturn (/** @type {any[]} */ ...args) => {\n\t\tconst dom = fn(...args);\n\n\t\tvar node = hydrating ? dom : dom.nodeType === DOCUMENT_FRAGMENT_NODE ? dom.firstChild : dom;\n\t\tassign_locations(node, filename, locations);\n\n\t\treturn dom;\n\t};\n}\n\n/**\n * @param {Element} element\n * @param {string} filename\n * @param {SourceLocation} location\n */\nfunction assign_location(element, filename, location) {\n\t// @ts-expect-error\n\telement.__svelte_meta = {\n\t\tparent: dev_stack,\n\t\tloc: { file: filename, line: location[0], column: location[1] }\n\t};\n\n\tif (location[2]) {\n\t\tassign_locations(element.firstChild, filename, location[2]);\n\t}\n}\n\n/**\n * @param {Node | null} node\n * @param {string} filename\n * @param {SourceLocation[]} locations\n */\nfunction assign_locations(node, filename, locations) {\n\tvar i = 0;\n\tvar depth = 0;\n\n\twhile (node && i < locations.length) {\n\t\tif (hydrating && node.nodeType === COMMENT_NODE) {\n\t\t\tvar comment = /** @type {Comment} */ (node);\n\t\t\tif (comment.data[0] === HYDRATION_START) depth += 1;\n\t\t\telse if (comment.data[0] === HYDRATION_END) depth -= 1;\n\t\t}\n\n\t\tif (depth === 0 && node.nodeType === ELEMENT_NODE) {\n\t\t\tassign_location(/** @type {Element} */ (node), filename, locations[i++]);\n\t\t}\n\n\t\tnode = node.nextSibling;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/equality.js",
    "content": "import * as w from '../warnings.js';\nimport { get_proxied_value } from '../proxy.js';\n\nexport function init_array_prototype_warnings() {\n\tconst array_prototype = Array.prototype;\n\t// The REPL ends up here over and over, and this prevents it from adding more and more patches\n\t// of the same kind to the prototype, which would slow down everything over time.\n\t// @ts-expect-error\n\tconst cleanup = Array.__svelte_cleanup;\n\tif (cleanup) {\n\t\tcleanup();\n\t}\n\n\tconst { indexOf, lastIndexOf, includes } = array_prototype;\n\n\tarray_prototype.indexOf = function (item, from_index) {\n\t\tconst index = indexOf.call(this, item, from_index);\n\n\t\tif (index === -1) {\n\t\t\tfor (let i = from_index ?? 0; i < this.length; i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.indexOf(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t};\n\n\tarray_prototype.lastIndexOf = function (item, from_index) {\n\t\t// we need to specify this.length - 1 because it's probably using something like\n\t\t// `arguments` inside so passing undefined is different from not passing anything\n\t\tconst index = lastIndexOf.call(this, item, from_index ?? this.length - 1);\n\n\t\tif (index === -1) {\n\t\t\tfor (let i = 0; i <= (from_index ?? this.length - 1); i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.lastIndexOf(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t};\n\n\tarray_prototype.includes = function (item, from_index) {\n\t\tconst has = includes.call(this, item, from_index);\n\n\t\tif (!has) {\n\t\t\tfor (let i = 0; i < this.length; i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.includes(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn has;\n\t};\n\n\t// @ts-expect-error\n\tArray.__svelte_cleanup = () => {\n\t\tarray_prototype.indexOf = indexOf;\n\t\tarray_prototype.lastIndexOf = lastIndexOf;\n\t\tarray_prototype.includes = includes;\n\t};\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {boolean} equal\n * @returns {boolean}\n */\nexport function strict_equals(a, b, equal = true) {\n\t// try-catch needed because this tries to read properties of `a` and `b`,\n\t// which could be disallowed for example in a secure context\n\ttry {\n\t\tif ((a === b) !== (get_proxied_value(a) === get_proxied_value(b))) {\n\t\t\tw.state_proxy_equality_mismatch(equal ? '===' : '!==');\n\t\t}\n\t} catch {}\n\n\treturn (a === b) === equal;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {boolean} equal\n * @returns {boolean}\n */\nexport function equals(a, b, equal = true) {\n\tif ((a == b) !== (get_proxied_value(a) == get_proxied_value(b))) {\n\t\tw.state_proxy_equality_mismatch(equal ? '==' : '!=');\n\t}\n\n\treturn (a == b) === equal;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/hmr.js",
    "content": "/** @import { Effect, TemplateNode } from '#client' */\nimport { FILENAME, HMR } from '../../../constants.js';\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { hydrate_node, hydrating } from '../dom/hydration.js';\nimport { block, branch, destroy_effect } from '../reactivity/effects.js';\nimport { set, source } from '../reactivity/sources.js';\nimport { set_should_intro } from '../render.js';\nimport { active_effect, get } from '../runtime.js';\n\n/**\n * @template {(anchor: Comment, props: any) => any} Component\n * @param {Component} fn\n */\nexport function hmr(fn) {\n\tconst current = source(fn);\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {any} props\n\t */\n\tfunction wrapper(anchor, props) {\n\t\tlet component = {};\n\t\tlet instance = {};\n\n\t\t/** @type {Effect} */\n\t\tlet effect;\n\n\t\tlet ran = false;\n\n\t\tblock(() => {\n\t\t\tif (component === (component = get(current))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (effect) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfor (var k in instance) delete instance[k];\n\t\t\t\tdestroy_effect(effect);\n\t\t\t}\n\n\t\t\teffect = branch(() => {\n\t\t\t\t// when the component is invalidated, replace it without transitions\n\t\t\t\tif (ran) set_should_intro(false);\n\n\t\t\t\t// preserve getters/setters\n\t\t\t\tvar result =\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tnew.target ? new component(anchor, props) : component(anchor, props);\n\t\t\t\t// a component is not guaranteed to return something and we can't invoke getOwnPropertyDescriptors on undefined\n\t\t\t\tif (result) {\n\t\t\t\t\tObject.defineProperties(instance, Object.getOwnPropertyDescriptors(result));\n\t\t\t\t}\n\n\t\t\t\tif (ran) set_should_intro(true);\n\t\t\t});\n\n\t\t\t// Forward the nodes from the inner effect to the outer active effect which would\n\t\t\t// get them if the HMR wrapper wasn't there. Do this inside the block not outside\n\t\t\t// so that HMR updates to the component will also update the nodes on the active effect.\n\t\t\t/** @type {Effect} */ (active_effect).nodes = effect.nodes;\n\t\t}, EFFECT_TRANSPARENT);\n\n\t\tran = true;\n\n\t\tif (hydrating) {\n\t\t\tanchor = hydrate_node;\n\t\t}\n\n\t\treturn instance;\n\t}\n\n\t// @ts-expect-error\n\twrapper[FILENAME] = fn[FILENAME];\n\n\t// @ts-ignore\n\twrapper[HMR] = {\n\t\tfn,\n\t\tcurrent,\n\t\tupdate: (/** @type {any} */ incoming) => {\n\t\t\t// This logic ensures that the first version of the component is the one\n\t\t\t// whose update function and therefore block effect is preserved across updates.\n\t\t\t// If we don't do this dance and instead just use `incoming` as the new component\n\t\t\t// and then update, we'll create an ever-growing stack of block effects.\n\n\t\t\t// Trigger the original block effect\n\t\t\tset(wrapper[HMR].current, incoming[HMR].fn);\n\n\t\t\t// Replace the incoming source with the original one\n\t\t\tincoming[HMR].current = wrapper[HMR].current;\n\t\t}\n\t};\n\n\treturn wrapper;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/inspect.js",
    "content": "import { UNINITIALIZED } from '../../../constants.js';\nimport { snapshot } from '../../shared/clone.js';\nimport { eager_effect, render_effect, validate_effect } from '../reactivity/effects.js';\nimport { untrack } from '../runtime.js';\nimport { get_error } from '../../shared/dev.js';\n\n/**\n * @param {() => any[]} get_value\n * @param {Function} inspector\n * @param {boolean} show_stack\n */\nexport function inspect(get_value, inspector, show_stack = false) {\n\tvalidate_effect('$inspect');\n\n\tlet initial = true;\n\tlet error = /** @type {any} */ (UNINITIALIZED);\n\n\t// Inspect effects runs synchronously so that we can capture useful\n\t// stack traces. As a consequence, reading the value might result\n\t// in an error (an `$inspect(object.property)` will run before the\n\t// `{#if object}...{/if}` that contains it)\n\teager_effect(() => {\n\t\ttry {\n\t\t\tvar value = get_value();\n\t\t} catch (e) {\n\t\t\terror = e;\n\t\t\treturn;\n\t\t}\n\n\t\tvar snap = snapshot(value, true, true);\n\t\tuntrack(() => {\n\t\t\tif (show_stack) {\n\t\t\t\tinspector(...snap);\n\n\t\t\t\tif (!initial) {\n\t\t\t\t\tconst stack = get_error('$inspect(...)');\n\t\t\t\t\tif (stack) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.groupCollapsed('stack trace');\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(stack);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.groupEnd();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinspector(initial ? 'init' : 'update', ...snap);\n\t\t\t}\n\t\t});\n\n\t\tinitial = false;\n\t});\n\n\t// If an error occurs, we store it (along with its stack trace).\n\t// If the render effect subsequently runs, we log the error,\n\t// but if it doesn't run it's because the `$inspect` was\n\t// destroyed, meaning we don't need to bother\n\trender_effect(() => {\n\t\ttry {\n\t\t\t// call `get_value` so that this runs alongside the inspect effect\n\t\t\tget_value();\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\n\t\tif (error !== UNINITIALIZED) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t\terror = UNINITIALIZED;\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/legacy.js",
    "content": "import * as e from '../errors.js';\nimport { component_context } from '../context.js';\nimport { FILENAME } from '../../../constants.js';\n\n/** @param {Function & { [FILENAME]: string }} target */\nexport function check_target(target) {\n\tif (target) {\n\t\te.component_api_invalid_new(target[FILENAME] ?? 'a component', target.name);\n\t}\n}\n\nexport function legacy_api() {\n\tconst component = component_context?.function;\n\n\t/** @param {string} method */\n\tfunction error(method) {\n\t\te.component_api_changed(method, component[FILENAME]);\n\t}\n\n\treturn {\n\t\t$destroy: () => error('$destroy()'),\n\t\t$on: () => error('$on(...)'),\n\t\t$set: () => error('$set(...)')\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/ownership.js",
    "content": "/** @typedef {{ file: string, line: number, column: number }} Location */\n\nimport { get_descriptor } from '../../shared/utils.js';\nimport { LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { FILENAME } from '../../../constants.js';\nimport { component_context } from '../context.js';\nimport * as w from '../warnings.js';\nimport { sanitize_location } from '../../../utils.js';\n\n/**\n * Sets up a validator that\n * - traverses the path of a prop to find out if it is allowed to be mutated\n * - checks that the binding chain is not interrupted\n * @param {Record<string, any>} props\n */\nexport function create_ownership_validator(props) {\n\tconst component = component_context?.function;\n\tconst parent = component_context?.p?.function;\n\n\treturn {\n\t\t/**\n\t\t * @param {string} prop\n\t\t * @param {any[]} path\n\t\t * @param {any} result\n\t\t * @param {number} line\n\t\t * @param {number} column\n\t\t */\n\t\tmutation: (prop, path, result, line, column) => {\n\t\t\tconst name = path[0];\n\t\t\tif (is_bound_or_unset(props, name) || !parent) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t/** @type {any} */\n\t\t\tlet value = props;\n\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tvalue = value[path[i]];\n\t\t\t\tif (!value?.[STATE_SYMBOL]) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst location = sanitize_location(`${component[FILENAME]}:${line}:${column}`);\n\n\t\t\tw.ownership_invalid_mutation(name, location, prop, parent[FILENAME]);\n\n\t\t\treturn result;\n\t\t},\n\t\t/**\n\t\t * @param {any} key\n\t\t * @param {any} child_component\n\t\t * @param {() => any} value\n\t\t */\n\t\tbinding: (key, child_component, value) => {\n\t\t\tif (!is_bound_or_unset(props, key) && parent && value()?.[STATE_SYMBOL]) {\n\t\t\t\tw.ownership_invalid_binding(\n\t\t\t\t\tcomponent[FILENAME],\n\t\t\t\t\tkey,\n\t\t\t\t\tchild_component[FILENAME],\n\t\t\t\t\tparent[FILENAME]\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Record<string, any>} props\n * @param {string} prop_name\n */\nfunction is_bound_or_unset(props, prop_name) {\n\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t// or `createClassComponent(Component, props)`\n\tconst is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\treturn (\n\t\t!!get_descriptor(props, prop_name)?.set ||\n\t\t(is_entry_props && prop_name in props) ||\n\t\t!(prop_name in props)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/tracing.js",
    "content": "/** @import { Derived, Reaction, Value } from '#client' */\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { snapshot } from '../../shared/clone.js';\nimport { DERIVED, ASYNC, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { effect_tracking } from '../reactivity/effects.js';\nimport { active_reaction, untrack } from '../runtime.js';\n\n/**\n * @typedef {{\n *   traces: Error[];\n * }} TraceEntry\n */\n\n/** @type {{ reaction: Reaction | null, entries: Map<Value, TraceEntry> } | null} */\nexport let tracing_expressions = null;\n\n/**\n * @param {Value} signal\n * @param {TraceEntry} [entry]\n */\nfunction log_entry(signal, entry) {\n\tconst value = signal.v;\n\n\tif (value === UNINITIALIZED) {\n\t\treturn;\n\t}\n\n\tconst type = get_type(signal);\n\tconst current_reaction = /** @type {Reaction} */ (active_reaction);\n\tconst dirty = signal.wv > current_reaction.wv || current_reaction.wv === 0;\n\tconst style = dirty\n\t\t? 'color: CornflowerBlue; font-weight: bold'\n\t\t: 'color: grey; font-weight: normal';\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupCollapsed(\n\t\tsignal.label ? `%c${type}%c ${signal.label}` : `%c${type}%c`,\n\t\tstyle,\n\t\tdirty ? 'font-weight: normal' : style,\n\t\ttypeof value === 'object' && value !== null && STATE_SYMBOL in value\n\t\t\t? snapshot(value, true)\n\t\t\t: value\n\t);\n\n\tif (type === '$derived') {\n\t\tconst deps = new Set(/** @type {Derived} */ (signal).deps);\n\t\tfor (const dep of deps) {\n\t\t\tlog_entry(dep);\n\t\t}\n\t}\n\n\tif (signal.created) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(signal.created);\n\t}\n\n\tif (dirty && signal.updated) {\n\t\tfor (const updated of signal.updated.values()) {\n\t\t\tif (updated.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(updated.error);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (entry) {\n\t\tfor (var trace of entry.traces) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(trace);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n * @param {Value} signal\n * @returns {'$state' | '$derived' | 'store'}\n */\nfunction get_type(signal) {\n\tif ((signal.f & (DERIVED | ASYNC)) !== 0) return '$derived';\n\treturn signal.label?.startsWith('$') ? 'store' : '$state';\n}\n\n/**\n * @template T\n * @param {() => string} label\n * @param {() => T} fn\n */\nexport function trace(label, fn) {\n\tvar previously_tracing_expressions = tracing_expressions;\n\n\ttry {\n\t\ttracing_expressions = { entries: new Map(), reaction: active_reaction };\n\n\t\tvar start = performance.now();\n\t\tvar value = fn();\n\t\tvar time = (performance.now() - start).toFixed(2);\n\n\t\tvar prefix = untrack(label);\n\n\t\tif (!effect_tracking()) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`${prefix} %cran outside of an effect (${time}ms)`, 'color: grey');\n\t\t} else if (tracing_expressions.entries.size === 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`${prefix} %cno reactive dependencies (${time}ms)`, 'color: grey');\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group(`${prefix} %c(${time}ms)`, 'color: grey');\n\n\t\t\tvar entries = tracing_expressions.entries;\n\n\t\t\tuntrack(() => {\n\t\t\t\tfor (const [signal, traces] of entries) {\n\t\t\t\t\tlog_entry(signal, traces);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttracing_expressions = null;\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\treturn value;\n\t} finally {\n\t\ttracing_expressions = previously_tracing_expressions;\n\t}\n}\n\n/**\n * @param {Value} source\n * @param {string} label\n */\nexport function tag(source, label) {\n\tsource.label = label;\n\ttag_proxy(source.v, label);\n\n\treturn source;\n}\n\n/**\n * @param {unknown} value\n * @param {string} label\n */\nexport function tag_proxy(value, label) {\n\t// @ts-expect-error\n\tvalue?.[PROXY_PATH_SYMBOL]?.(label);\n\treturn value;\n}\n\n/**\n * @param {unknown} value\n */\nexport function label(value) {\n\tif (typeof value === 'symbol') return `Symbol(${value.description})`;\n\tif (typeof value === 'function') return '<function>';\n\tif (typeof value === 'object' && value) return '<object>';\n\treturn String(value);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dev/validation.js",
    "content": "import * as e from '../errors.js';\n/**\n * @param {Node} anchor\n * @param {...(()=>any)[]} args\n */\nexport function validate_snippet_args(anchor, ...args) {\n\tif (typeof anchor !== 'object' || !(anchor instanceof Node)) {\n\t\te.invalid_snippet_arguments();\n\t}\n\n\tfor (let arg of args) {\n\t\tif (typeof arg !== 'function') {\n\t\t\te.invalid_snippet_arguments();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/async.js",
    "content": "/** @import { Blocker, TemplateNode, Value } from '#client' */\nimport { flatten, increment_pending } from '../../reactivity/async.js';\nimport { get } from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\n\n/**\n * @param {TemplateNode} node\n * @param {Blocker[]} blockers\n * @param {Array<() => Promise<any>>} expressions\n * @param {(anchor: TemplateNode, ...deriveds: Value[]) => void} fn\n */\nexport function async(node, blockers = [], expressions = [], fn) {\n\tvar was_hydrating = hydrating;\n\tvar end = null;\n\n\tif (was_hydrating) {\n\t\thydrate_next();\n\t\tend = skip_nodes(false);\n\t}\n\n\tif (expressions.length === 0 && blockers.every((b) => b.settled)) {\n\t\tfn(node);\n\n\t\t// This is necessary because it is not guaranteed that the render function will\n\t\t// advance the hydration node to $.async's end marker: it may stop at an inner\n\t\t// block's end marker (in case of an inner if block for example), but it also may\n\t\t// stop at the correct $.async end marker (in case of component child) - hence\n\t\t// we can't just use hydrate_next()\n\t\t// TODO this feels indicative of a bug elsewhere; ideally we wouldn't need\n\t\t// to double-traverse in the already-resolved case\n\t\tif (was_hydrating) {\n\t\t\tset_hydrate_node(end);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tconst decrement_pending = increment_pending();\n\n\tif (was_hydrating) {\n\t\tvar previous_hydrate_node = hydrate_node;\n\t\tset_hydrate_node(end);\n\t}\n\n\tflatten(blockers, [], expressions, (values) => {\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\tset_hydrate_node(previous_hydrate_node);\n\t\t}\n\n\t\ttry {\n\t\t\t// get values eagerly to avoid creating blocks if they reject\n\t\t\tfor (const d of values) get(d);\n\n\t\t\tfn(node, ...values);\n\t\t} finally {\n\t\t\tif (was_hydrating) {\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tdecrement_pending();\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/await.js",
    "content": "/** @import { Source, TemplateNode } from '#client' */\nimport { is_promise } from '../../../shared/utils.js';\nimport { block } from '../../reactivity/effects.js';\nimport { internal_set, mutable_source, source } from '../../reactivity/sources.js';\nimport {\n\thydrate_next,\n\thydrating,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { HYDRATION_START_ELSE, UNINITIALIZED } from '../../../../constants.js';\nimport { is_runes } from '../../context.js';\nimport { Batch, current_batch, flushSync, is_flushing_sync } from '../../reactivity/batch.js';\nimport { BranchManager } from './branches.js';\nimport { capture, unset_context } from '../../reactivity/async.js';\n\nconst PENDING = 0;\nconst THEN = 1;\nconst CATCH = 2;\n\n/** @typedef {typeof PENDING | typeof THEN | typeof CATCH} AwaitState */\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {(() => any)} get_input\n * @param {null | ((anchor: Node) => void)} pending_fn\n * @param {null | ((anchor: Node, value: Source<V>) => void)} then_fn\n * @param {null | ((anchor: Node, error: unknown) => void)} catch_fn\n * @returns {void}\n */\nexport function await_block(node, get_input, pending_fn, then_fn, catch_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar runes = is_runes();\n\n\tvar v = /** @type {V} */ (UNINITIALIZED);\n\tvar value = runes ? source(v) : mutable_source(v, false, false);\n\tvar error = runes ? source(v) : mutable_source(v, false, false);\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t// we null out `current_batch` because otherwise `save(...)` will incorrectly restore it —\n\t\t// the batch will already have been committed by the time it resolves\n\t\tbatch.deactivate();\n\t\tvar input = get_input();\n\t\tbatch.activate();\n\n\t\tvar destroyed = false;\n\n\t\t/** Whether or not there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\t// @ts-ignore coercing `node` to a `Comment` causes TypeScript and Prettier to fight\n\t\tlet mismatch = hydrating && is_promise(input) === (node.data === HYDRATION_START_ELSE);\n\n\t\tif (mismatch) {\n\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t\tset_hydrating(false);\n\t\t}\n\n\t\tif (is_promise(input)) {\n\t\t\tvar restore = capture();\n\t\t\tvar resolved = false;\n\n\t\t\t/**\n\t\t\t * @param {() => void} fn\n\t\t\t */\n\t\t\tconst resolve = (fn) => {\n\t\t\t\tif (destroyed) return;\n\n\t\t\t\tresolved = true;\n\t\t\t\t// We don't want to restore the previous batch here; {#await} blocks don't follow the async logic\n\t\t\t\t// we have elsewhere, instead pending/resolve/fail states are each their own batch so to speak.\n\t\t\t\trestore(false);\n\t\t\t\t// Make sure we have a batch, since the branch manager expects one to exist\n\t\t\t\tBatch.ensure();\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t// `restore()` could set `hydrating` to `true`, which we very much\n\t\t\t\t\t// don't want — we want to restore everything _except_ this\n\t\t\t\t\tset_hydrating(false);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tfn();\n\t\t\t\t} finally {\n\t\t\t\t\tunset_context(false);\n\n\t\t\t\t\t// without this, the DOM does not update until two ticks after the promise\n\t\t\t\t\t// resolves, which is unexpected behaviour (and somewhat irksome to test)\n\t\t\t\t\tif (!is_flushing_sync) flushSync();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tinput.then(\n\t\t\t\t(v) => {\n\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\tinternal_set(value, v);\n\t\t\t\t\t\tbranches.ensure(THEN, then_fn && ((target) => then_fn(target, value)));\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(e) => {\n\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\tinternal_set(error, e);\n\t\t\t\t\t\tbranches.ensure(CATCH, catch_fn && ((target) => catch_fn(target, error)));\n\n\t\t\t\t\t\tif (!catch_fn) {\n\t\t\t\t\t\t\t// Rethrow the error if no catch block exists\n\t\t\t\t\t\t\tthrow error.v;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (hydrating) {\n\t\t\t\tbranches.ensure(PENDING, pending_fn);\n\t\t\t} else {\n\t\t\t\t// Wait a microtask before checking if we should show the pending state as\n\t\t\t\t// the promise might have resolved by then\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\t\tbranches.ensure(PENDING, pending_fn);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tinternal_set(value, input);\n\t\t\tbranches.ensure(THEN, then_fn && ((target) => then_fn(target, value)));\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\treturn () => {\n\t\t\tdestroyed = true;\n\t\t};\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/boundary.js",
    "content": "/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { HYDRATION_START_ELSE, HYDRATION_START_FAILED } from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, current_batch, schedule_effect } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\nimport { set_signal_status } from '../../reactivity/status.js';\n\n/**\n * @typedef {{\n * \t onerror?: (error: unknown, reset: () => void) => void;\n *   failed?: (anchor: Node, error: () => unknown, reset: () => () => void) => void;\n *   pending?: (anchor: Node) => void;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @param {((error: unknown) => unknown) | undefined} [transform_error]\n * @returns {void}\n */\nexport function boundary(node, props, children, transform_error) {\n\tnew Boundary(node, props, children, transform_error);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/**\n\t * API-level transformError transform function. Transforms errors before they reach the `failed` snippet.\n\t * Inherited from parent boundary, or defaults to identity.\n\t * @type {(error: unknown) => unknown}\n\t */\n\ttransform_error;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t * @param {((error: unknown) => unknown) | undefined} [transform_error]\n\t */\n\tconstructor(node, props, children, transform_error) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\n\t\tthis.#children = (anchor) => {\n\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\teffect.b = this;\n\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\tchildren(anchor);\n\t\t};\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\t// Inherit transform_error from parent boundary, or use the provided one, or default to identity\n\t\tthis.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);\n\n\t\tthis.#effect = block(() => {\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment = /** @type {Comment} */ (this.#hydrate_open);\n\t\t\t\thydrate_next();\n\n\t\t\t\tconst server_rendered_pending = comment.data === HYDRATION_START_ELSE;\n\t\t\t\tconst server_rendered_failed = comment.data.startsWith(HYDRATION_START_FAILED);\n\n\t\t\t\tif (server_rendered_failed) {\n\t\t\t\t\t// Server rendered the failed snippet - hydrate it.\n\t\t\t\t\t// The serialized error is embedded in the comment: <!--[?<json>-->\n\t\t\t\t\tconst serialized_error = JSON.parse(comment.data.slice(HYDRATION_START_FAILED.length));\n\t\t\t\t\tthis.#hydrate_failed_content(serialized_error);\n\t\t\t\t} else if (server_rendered_pending) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.#render();\n\t\t\t}\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error The deserialized error from the server's hydration comment\n\t */\n\t#hydrate_failed_content(error) {\n\t\tconst failed = this.#props.failed;\n\t\tif (!failed) return;\n\n\t\tthis.#failed_effect = branch(() => {\n\t\t\tfailed(\n\t\t\t\tthis.#anchor,\n\t\t\t\t() => error,\n\t\t\t\t() => () => {}\n\t\t\t);\n\t\t});\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.is_pending = true;\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\tvar anchor = create_text();\n\n\t\t\tfragment.append(anchor);\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count === 0) {\n\t\t\t\tthis.#anchor.before(fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t});\n\t}\n\n\t#render() {\n\t\ttry {\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\t\t\tthis.#pending_count = 0;\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tthis.#main_effect = branch(() => {\n\t\t\t\tthis.#children(this.#anchor);\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\t\tmove_effect(this.#main_effect, fragment);\n\n\t\t\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t\t} else {\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#resolve(batch) {\n\t\tthis.is_pending = false;\n\n\t\t// any effects that were previously deferred should be transferred\n\t\t// to the batch, which will flush in the next microtask\n\t\tbatch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\tBatch.ensure();\n\t\t\treturn fn();\n\t\t} catch (e) {\n\t\t\thandle_error(e);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\t#update_pending_count(d, batch) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d, batch);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.#resolve(batch);\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\tupdate_pending_count(d, batch) {\n\t\tthis.#update_pending_count(d, batch);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (!onerror && !failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.#run(() => {\n\t\t\t\tthis.#render();\n\t\t\t});\n\t\t};\n\n\t\t/** @param {unknown} transformed_error */\n\t\tconst handle_error_result = (transformed_error) => {\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tonerror?.(transformed_error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (error) {\n\t\t\t\tinvoke_error_boundary(error, this.#effect && this.#effect.parent);\n\t\t\t}\n\n\t\t\tif (failed) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\t// errors in `failed` snippets cause the boundary to error again\n\t\t\t\t\t\t\t// TODO Svelte 6: revisit this decision, most likely better to go to parent boundary instead\n\t\t\t\t\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\t\t\t\t\teffect.b = this;\n\t\t\t\t\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => transformed_error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\t// Run the error through the API-level transformError transform (e.g. SvelteKit's handleError)\n\t\t\t/** @type {unknown} */\n\t\t\tvar result;\n\t\t\ttry {\n\t\t\t\tresult = this.transform_error(error);\n\t\t\t} catch (e) {\n\t\t\t\tinvoke_error_boundary(e, this.#effect && this.#effect.parent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult !== null &&\n\t\t\t\ttypeof result === 'object' &&\n\t\t\t\ttypeof (/** @type {any} */ (result).then) === 'function'\n\t\t\t) {\n\t\t\t\t// transformError returned a Promise — wait for it\n\t\t\t\t/** @type {any} */ (result).then(\n\t\t\t\t\thandle_error_result,\n\t\t\t\t\t/** @param {unknown} e */\n\t\t\t\t\t(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Synchronous result — handle immediately\n\t\t\t\thandle_error_result(result);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/branches.js",
    "content": "/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#commit = (batch) => {\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t//    or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit(batch);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/css-props.js",
    "content": "import { render_effect } from '../../reactivity/effects.js';\nimport { hydrating, set_hydrate_node } from '../hydration.js';\nimport { get_first_child } from '../operations.js';\n\n/**\n * @param {HTMLDivElement | SVGGElement} element\n * @param {() => Record<string, string>} get_styles\n * @returns {void}\n */\nexport function css_props(element, get_styles) {\n\tif (hydrating) {\n\t\tset_hydrate_node(get_first_child(element));\n\t}\n\n\trender_effect(() => {\n\t\tvar styles = get_styles();\n\n\t\tfor (var key in styles) {\n\t\t\tvar value = styles[key];\n\n\t\t\tif (value) {\n\t\t\t\telement.style.setProperty(key, value);\n\t\t\t} else {\n\t\t\t\telement.style.removeProperty(key);\n\t\t\t}\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/each.js",
    "content": "/** @import { EachItem, EachOutroGroup, EachState, Effect, EffectNodes, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tshould_defer_append\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { BRANCH_EFFECT, COMMENT_NODE, DESTROYED, EFFECT_OFFSCREEN, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport * as e from '../../errors.js';\n\n// When making substantive changes to this file, validate them with the each block stress test:\n// https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b\n// This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, to_destroy, controlled_anchor) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = to_destroy.length;\n\n\t/** @type {EachOutroGroup} */\n\tvar group;\n\tvar remaining = to_destroy.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tlet effect = to_destroy[i];\n\n\t\tpause_effect(\n\t\t\teffect,\n\t\t\t() => {\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\t\tgroup.done.add(effect);\n\n\t\t\t\t\tif (group.pending.size === 0) {\n\t\t\t\t\t\tvar groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);\n\n\t\t\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\t\t\tgroups.delete(group);\n\n\t\t\t\t\t\tif (groups.size === 0) {\n\t\t\t\t\t\t\tstate.outrogroups = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremaining -= 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t}\n\n\tif (remaining === 0) {\n\t\t// If we're in a controlled each block (i.e. the block is the only child of an\n\t\t// element), and we are removing all items, _and_ there are no out transitions,\n\t\t// we can use the fast path — emptying the element and replacing the anchor\n\t\tvar fast_path = transitions.length === 0 && controlled_anchor !== null;\n\n\t\tif (fast_path) {\n\t\t\tvar anchor = /** @type {Element} */ (controlled_anchor);\n\t\t\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\n\t\t\tclear_text_content(parent_node);\n\t\t\tparent_node.append(anchor);\n\n\t\t\tstate.items.clear();\n\t\t}\n\n\t\tdestroy_effects(state, to_destroy, !fast_path);\n\t} else {\n\t\tgroup = {\n\t\t\tpending: new Set(to_destroy),\n\t\t\tdone: new Set()\n\t\t};\n\n\t\t(state.outrogroups ??= new Set()).add(group);\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {boolean} remove_dom\n */\nfunction destroy_effects(state, to_destroy, remove_dom = true) {\n\t/** @type {Set<Effect> | undefined} */\n\tvar preserved_effects;\n\n\t// The loop-in-a-loop isn't ideal, but we should only hit this in relatively rare cases\n\tif (state.pending.size > 0) {\n\t\tpreserved_effects = new Set();\n\n\t\tfor (const keys of state.pending.values()) {\n\t\t\tfor (const key of keys) {\n\t\t\t\tpreserved_effects.add(/** @type {EachItem} */ (state.items.get(key)).e);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < to_destroy.length; i++) {\n\t\tvar e = to_destroy[i];\n\n\t\tif (preserved_effects?.has(e)) {\n\t\t\te.f |= EFFECT_OFFSCREEN;\n\n\t\t\tconst fragment = document.createDocumentFragment();\n\t\t\tmove_effect(e, fragment);\n\t\t} else {\n\t\t\tdestroy_effect(to_destroy[i], remove_dom);\n\t\t}\n\t}\n}\n\n/** @type {TemplateNode} */\nvar offscreen_anchor;\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {Map<any, EachItem>} */\n\tvar items = new Map();\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(get_first_child(parent_node))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\t// TODO: ideally we could use derived for runes mode but because of the ability\n\t// to use a store which can be mutated, we can't do that here as mutating a store\n\t// will still result in the collection array being the same from the store\n\tvar each_array = derived_safe_equal(() => {\n\t\tvar collection = get_collection();\n\n\t\treturn is_array(collection) ? collection : collection == null ? [] : array_from(collection);\n\t});\n\n\t/** @type {V[]} */\n\tvar array;\n\n\t/** @type {Map<Batch, Set<any>>} */\n\tvar pending = new Map();\n\n\tvar first_run = true;\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction commit(batch) {\n\t\tif ((state.effect.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tstate.pending.delete(batch);\n\n\t\tstate.fallback = fallback;\n\t\treconcile(state, array, anchor, flags, get_key);\n\n\t\tif (fallback !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif ((fallback.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback.f ^= EFFECT_OFFSCREEN;\n\t\t\t\t\tmove(fallback, null, anchor);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\t// TODO only null out if no pending batch needs it,\n\t\t\t\t\t// otherwise re-add `fallback.fragment` and move the\n\t\t\t\t\t// effect into it\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction discard(batch) {\n\t\tstate.pending.delete(batch);\n\t}\n\n\tvar effect = block(() => {\n\t\tarray = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tvar keys = new Set();\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tfor (var index = 0; index < length; index += 1) {\n\t\t\tif (\n\t\t\t\thydrating &&\n\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t) {\n\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\tmismatch = true;\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tvar value = array[index];\n\t\t\tvar key = get_key(value, index);\n\n\t\t\tif (DEV) {\n\t\t\t\t// Check that the key function is idempotent (returns the same value when called twice)\n\t\t\t\tvar key_again = get_key(value, index);\n\t\t\t\tif (key !== key_again) {\n\t\t\t\t\te.each_key_volatile(String(index), String(key), String(key_again));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar item = first_run ? null : items.get(key);\n\n\t\t\tif (item) {\n\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\tif (item.v) internal_set(item.v, value);\n\t\t\t\tif (item.i) internal_set(item.i, index);\n\n\t\t\t\tif (defer) {\n\t\t\t\t\tbatch.unskip_effect(item.e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = create_item(\n\t\t\t\t\titems,\n\t\t\t\t\tfirst_run ? anchor : (offscreen_anchor ??= create_text()),\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\n\t\t\t\tif (!first_run) {\n\t\t\t\t\titem.e.f |= EFFECT_OFFSCREEN;\n\t\t\t\t}\n\n\t\t\t\titems.set(key, item);\n\t\t\t}\n\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tif (length === 0 && fallback_fn && !fallback) {\n\t\t\tif (first_run) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t} else {\n\t\t\t\tfallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));\n\t\t\t\tfallback.f |= EFFECT_OFFSCREEN;\n\t\t\t}\n\t\t}\n\n\t\tif (length > keys.size) {\n\t\t\tif (DEV) {\n\t\t\t\tvalidate_each_keys(array, get_key);\n\t\t\t} else {\n\t\t\t\t// in prod, the additional information isn't printed, so don't bother computing it\n\t\t\t\te.each_key_duplicate('', '', '');\n\t\t\t}\n\t\t}\n\n\t\t// remove excess nodes\n\t\tif (hydrating && length > 0) {\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tif (!first_run) {\n\t\t\tpending.set(batch, keys);\n\n\t\t\tif (defer) {\n\t\t\t\tfor (const [key, item] of items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skip_effect(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.oncommit(commit);\n\t\t\t\tbatch.ondiscard(discard);\n\t\t\t} else {\n\t\t\t\tcommit(batch);\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget(each_array);\n\t});\n\n\t/** @type {EachState} */\n\tvar state = { effect, flags, items, pending, outrogroups: null, fallback };\n\n\tfirst_run = false;\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect\n * @param {Effect | null} effect\n * @returns {Effect | null}\n */\nfunction skip_to_branch(effect) {\n\twhile (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {\n\t\teffect = effect.next;\n\t}\n\treturn effect;\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {EachState} state\n * @param {Array<V>} array\n * @param {Element | Comment | Text} anchor\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @returns {void}\n */\nfunction reconcile(state, array, anchor, flags, get_key) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar current = skip_to_branch(state.effect.first);\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar seen;\n\n\t/** @type {Effect | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar to_animate;\n\n\t/** @type {Effect[]} */\n\tvar matched = [];\n\n\t/** @type {Effect[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {Effect | undefined} */\n\tvar effect;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\t\t// offscreen == coming in now, no animation in that case,\n\t\t\t// else this would happen https://github.com/sveltejs/svelte/issues/17181\n\t\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\teffect.nodes?.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(effect);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\n\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\tif (state.outrogroups !== null) {\n\t\t\tfor (const group of state.outrogroups) {\n\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\tgroup.done.delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & INERT) !== 0) {\n\t\t\tresume_effect(effect);\n\t\t\tif (is_animated) {\n\t\t\t\teffect.nodes?.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) !== 0) {\n\t\t\teffect.f ^= EFFECT_OFFSCREEN;\n\n\t\t\tif (effect === current) {\n\t\t\t\tmove(effect, null, anchor);\n\t\t\t} else {\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tif (effect === state.effect.last) {\n\t\t\t\t\tstate.effect.last = effect.prev;\n\t\t\t\t}\n\n\t\t\t\tif (effect.prev) effect.prev.next = effect.next;\n\t\t\t\tif (effect.next) effect.next.prev = effect.prev;\n\t\t\t\tlink(state, prev, effect);\n\t\t\t\tlink(state, effect, next);\n\n\t\t\t\tmove(effect, next, anchor);\n\t\t\t\tprev = effect;\n\n\t\t\t\tmatched = [];\n\t\t\t\tstashed = [];\n\n\t\t\t\tcurrent = skip_to_branch(prev.next);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (effect !== current) {\n\t\t\tif (seen !== undefined && seen.has(effect)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(effect);\n\t\t\t\t\tmove(effect, current, anchor);\n\n\t\t\t\t\tlink(state, effect.prev, effect.next);\n\t\t\t\t\tlink(state, effect, prev === null ? state.effect.first : prev.next);\n\t\t\t\t\tlink(state, prev, effect);\n\n\t\t\t\t\tprev = effect;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current !== effect) {\n\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = skip_to_branch(current.next);\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\tmatched.push(effect);\n\t\t}\n\n\t\tprev = effect;\n\t\tcurrent = skip_to_branch(effect.next);\n\t}\n\n\tif (state.outrogroups !== null) {\n\t\tfor (const group of state.outrogroups) {\n\t\t\tif (group.pending.size === 0) {\n\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\tstate.outrogroups?.delete(group);\n\t\t\t}\n\t\t}\n\n\t\tif (state.outrogroups.size === 0) {\n\t\t\tstate.outrogroups = null;\n\t\t}\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\t/** @type {Effect[]} */\n\t\tvar to_destroy = [];\n\n\t\tif (seen !== undefined) {\n\t\t\tfor (effect of seen) {\n\t\t\t\tif ((effect.f & INERT) === 0) {\n\t\t\t\t\tto_destroy.push(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif ((current.f & INERT) === 0 && current !== state.fallback) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\n\t\t\tcurrent = skip_to_branch(current.next);\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (effect of to_animate) {\n\t\t\t\teffect.nodes?.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @template V\n * @param {Map<any, EachItem>} items\n * @param {Node} anchor\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @returns {EachItem}\n */\nfunction create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {\n\tvar v =\n\t\t(flags & EACH_ITEM_REACTIVE) !== 0\n\t\t\t? (flags & EACH_ITEM_IMMUTABLE) === 0\n\t\t\t\t? mutable_source(value, false, false)\n\t\t\t\t: source(value)\n\t\t\t: null;\n\n\tvar i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;\n\n\tif (DEV && v) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\tv.trace = () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[i?.v ?? index];\n\t\t};\n\t}\n\n\treturn {\n\t\tv,\n\t\ti,\n\t\te: branch(() => {\n\t\t\trender_fn(anchor, v ?? value, i ?? index, get_collection);\n\n\t\t\treturn () => {\n\t\t\t\titems.delete(key);\n\t\t\t};\n\t\t})\n\t};\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(effect, next, anchor) {\n\tif (!effect.nodes) return;\n\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\tvar dest =\n\t\tnext && (next.f & EFFECT_OFFSCREEN) === 0\n\t\t\t? /** @type {EffectNodes} */ (next.nodes).start\n\t\t\t: anchor;\n\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\n\t\tif (node === end) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect | null} prev\n * @param {Effect | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.effect.first = next;\n\t} else {\n\t\tprev.next = next;\n\t}\n\n\tif (next === null) {\n\t\tstate.effect.last = prev;\n\t} else {\n\t\tnext.prev = prev;\n\t}\n}\n\n/**\n * @param {Array<any>} array\n * @param {(item: any, index: number) => string} key_fn\n * @returns {void}\n */\nfunction validate_each_keys(array, key_fn) {\n\tconst keys = new Map();\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst key = key_fn(array[i], i);\n\n\t\tif (keys.has(key)) {\n\t\t\tconst a = String(keys.get(key));\n\t\t\tconst b = String(i);\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet k = String(key);\n\t\t\tif (k.startsWith('[object ')) k = null;\n\n\t\t\te.each_key_duplicate(a, b, k);\n\t\t}\n\n\t\tkeys.set(key, i);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/html.js",
    "content": "/** @import { Effect, TemplateNode } from '#client' */\n/** @import {} from 'trusted-types' */\nimport {\n\tFILENAME,\n\tHYDRATION_ERROR,\n\tNAMESPACE_SVG,\n\tNAMESPACE_MATHML\n} from '../../../../constants.js';\nimport { remove_effect_dom, template_effect } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from '../hydration.js';\n\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport { hash, sanitize_location } from '../../../../utils.js';\nimport { DEV } from 'esm-env';\nimport { dev_current_component_function } from '../../context.js';\nimport { create_element, get_first_child, get_next_sibling } from '../operations.js';\nimport { active_effect } from '../../runtime.js';\nimport { COMMENT_NODE } from '#client/constants';\n\n/**\n * @param {Element} element\n * @param {string | null} server_hash\n * @param {string | TrustedHTML} value\n */\nfunction check_hash(element, server_hash, value) {\n\tif (!server_hash || server_hash === hash(String(value ?? ''))) return;\n\n\tlet location;\n\n\t// @ts-expect-error\n\tconst loc = element.__svelte_meta?.loc;\n\tif (loc) {\n\t\tlocation = `near ${loc.file}:${loc.line}:${loc.column}`;\n\t} else if (dev_current_component_function?.[FILENAME]) {\n\t\tlocation = `in ${dev_current_component_function[FILENAME]}`;\n\t}\n\n\tw.hydration_html_changed(sanitize_location(location));\n}\n\n/**\n * @param {Element | Text | Comment} node\n * @param {() => string | TrustedHTML} get_value\n * @param {boolean} [is_controlled]\n * @param {boolean} [svg]\n * @param {boolean} [mathml]\n * @param {boolean} [skip_warning]\n * @returns {void}\n */\nexport function html(\n\tnode,\n\tget_value,\n\tis_controlled = false,\n\tsvg = false,\n\tmathml = false,\n\tskip_warning = false\n) {\n\tvar anchor = node;\n\n\t/** @type {string | TrustedHTML} */\n\tvar value = '';\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tif (hydrating) {\n\t\t\tanchor = set_hydrate_node(get_first_child(parent_node));\n\t\t}\n\t}\n\n\ttemplate_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (value === (value = get_value() ?? '')) {\n\t\t\tif (hydrating) hydrate_next();\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_controlled && !hydrating) {\n\t\t\t// When @html is the only child, use innerHTML directly.\n\t\t\t// This also handles contenteditable, where the user may delete the anchor comment.\n\t\t\teffect.nodes = null;\n\t\t\tparent_node.innerHTML = /** @type {string} */ (value);\n\n\t\t\tif (value !== '') {\n\t\t\t\tassign_nodes(\n\t\t\t\t\t/** @type {TemplateNode} */ (get_first_child(parent_node)),\n\t\t\t\t\t/** @type {TemplateNode} */ (parent_node.lastChild)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (effect.nodes !== null) {\n\t\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\t\teffect.nodes = null;\n\t\t}\n\n\t\tif (value === '') return;\n\n\t\tif (hydrating) {\n\t\t\t// We're deliberately not trying to repair mismatches between server and client,\n\t\t\t// as it's costly and error-prone (and it's an edge case to have a mismatch anyway)\n\t\t\tvar hash = /** @type {Comment} */ (hydrate_node).data;\n\n\t\t\t/** @type {TemplateNode | null} */\n\t\t\tvar next = hydrate_next();\n\t\t\tvar last = next;\n\n\t\t\twhile (\n\t\t\t\tnext !== null &&\n\t\t\t\t(next.nodeType !== COMMENT_NODE || /** @type {Comment} */ (next).data !== '')\n\t\t\t) {\n\t\t\t\tlast = next;\n\t\t\t\tnext = get_next_sibling(next);\n\t\t\t}\n\n\t\t\tif (next === null) {\n\t\t\t\tw.hydration_mismatch();\n\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t}\n\n\t\t\tif (DEV && !skip_warning) {\n\t\t\t\tcheck_hash(/** @type {Element} */ (next.parentNode), hash, value);\n\t\t\t}\n\n\t\t\tassign_nodes(hydrate_node, last);\n\t\t\tanchor = set_hydrate_node(next);\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't use create_fragment_with_script_from_html here because that would mean script tags are executed.\n\t\t// @html is basically `.innerHTML = ...` and that doesn't execute scripts either due to security reasons.\n\t\t// Use a <template>, <svg>, or <math> wrapper depending on context. If value is a TrustedHTML object,\n\t\t// it will be assigned directly to innerHTML without coercion — this allows {@html policy.createHTML(...)} to work.\n\t\tvar ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : undefined;\n\t\tvar wrapper = /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ (\n\t\t\tcreate_element(svg ? 'svg' : mathml ? 'math' : 'template', ns)\n\t\t);\n\t\twrapper.innerHTML = /** @type {any} */ (value);\n\n\t\t/** @type {DocumentFragment | Element} */\n\t\tvar node = svg || mathml ? wrapper : /** @type {HTMLTemplateElement} */ (wrapper).content;\n\n\t\tassign_nodes(\n\t\t\t/** @type {TemplateNode} */ (get_first_child(node)),\n\t\t\t/** @type {TemplateNode} */ (node.lastChild)\n\t\t);\n\n\t\tif (svg || mathml) {\n\t\t\twhile (get_first_child(node)) {\n\t\t\t\tanchor.before(/** @type {TemplateNode} */ (get_first_child(node)));\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.before(node);\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/if.js",
    "content": "/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating,\n\thydrate_node\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, key?: number | false) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\t/** @type {TemplateNode | undefined} */\n\tvar marker;\n\tif (hydrating) {\n\t\tmarker = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {number | false} key\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(key, fn) {\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (marker));\n\n\t\t\t// \"[n\" = branch n, \"[-1\" = else\n\t\t\tif (key !== parseInt(data.substring(1))) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(key, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(key, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, key = 0) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(key, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(-1, null);\n\t\t}\n\t}, flags);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/key.js",
    "content": "/** @import { TemplateNode } from '#client' */\nimport { is_runes } from '../../context.js';\nimport { block } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrating } from '../hydration.js';\nimport { BranchManager } from './branches.js';\n\nconst NAN = Symbol('NaN');\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {() => V} get_key\n * @param {(anchor: Node) => TemplateNode | void} render_fn\n * @returns {void}\n */\nexport function key(node, get_key, render_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tvar legacy = !is_runes();\n\n\tblock(() => {\n\t\tvar key = get_key();\n\n\t\t// NaN !== NaN, hence we do this workaround to not trigger remounts unnecessarily\n\t\tif (key !== key) {\n\t\t\tkey = /** @type {any} */ (NAN);\n\t\t}\n\n\t\t// key blocks in Svelte <5 had stupid semantics\n\t\tif (legacy && key !== null && typeof key === 'object') {\n\t\t\tkey = /** @type {V} */ ({});\n\t\t}\n\n\t\tbranches.ensure(key, render_fn);\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/slot.js",
    "content": "import { hydrate_next, hydrating } from '../hydration.js';\n\n/**\n * @param {Comment} anchor\n * @param {Record<string, any>} $$props\n * @param {string} name\n * @param {Record<string, unknown>} slot_props\n * @param {null | ((anchor: Comment) => void)} fallback_fn\n */\nexport function slot(anchor, $$props, name, slot_props, fallback_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar slot_fn = $$props.$$slots?.[name];\n\t// Interop: Can use snippets to fill slots\n\tvar is_interop = false;\n\tif (slot_fn === true) {\n\t\tslot_fn = $$props[name === 'default' ? 'children' : name];\n\t\tis_interop = true;\n\t}\n\n\tif (slot_fn === undefined) {\n\t\tif (fallback_fn !== null) {\n\t\t\tfallback_fn(anchor);\n\t\t}\n\t} else {\n\t\tslot_fn(anchor, is_interop ? () => slot_props : slot_props);\n\t}\n}\n\n/**\n * @param {Record<string, any>} props\n * @returns {Record<string, boolean>}\n */\nexport function sanitize_slots(props) {\n\t/** @type {Record<string, boolean>} */\n\tconst sanitized = {};\n\tif (props.children) sanitized.default = true;\n\tfor (const key in props.$$slots) {\n\t\tsanitized[key] = true;\n\t}\n\treturn sanitized;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/snippet.js",
    "content": "/** @import { Snippet } from 'svelte' */\n/** @import { TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport {\n\tdev_current_component_function,\n\tset_dev_current_component_function\n} from '../../context.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport * as e from '../../errors.js';\nimport { DEV } from 'esm-env';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { prevent_snippet_stringification } from '../../../shared/validate.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @template {(node: TemplateNode, ...args: any[]) => void} SnippetFn\n * @param {TemplateNode} node\n * @param {() => SnippetFn | null | undefined} get_snippet\n * @param {(() => any)[]} args\n * @returns {void}\n */\nexport function snippet(node, get_snippet, ...args) {\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tconst snippet = get_snippet() ?? null;\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tbranches.ensure(snippet, snippet && ((anchor) => snippet(anchor, ...args)));\n\t}, EFFECT_TRANSPARENT);\n}\n\n/**\n * In development, wrap the snippet function so that it passes validation, and so that the\n * correct component context is set for ownership checks\n * @param {any} component\n * @param {(node: TemplateNode, ...args: any[]) => void} fn\n */\nexport function wrap_snippet(component, fn) {\n\tconst snippet = (/** @type {TemplateNode} */ node, /** @type {any[]} */ ...args) => {\n\t\tvar previous_component_function = dev_current_component_function;\n\t\tset_dev_current_component_function(component);\n\n\t\ttry {\n\t\t\treturn fn(node, ...args);\n\t\t} finally {\n\t\t\tset_dev_current_component_function(previous_component_function);\n\t\t}\n\t};\n\n\tprevent_snippet_stringification(snippet);\n\n\treturn snippet;\n}\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n *   render: () => string\n *   setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {\n\t\tvar snippet = fn(...params);\n\n\t\t/** @type {Element} */\n\t\tvar element;\n\n\t\tif (hydrating) {\n\t\t\telement = /** @type {Element} */ (hydrate_node);\n\t\t\thydrate_next();\n\t\t} else {\n\t\t\tvar html = snippet.render().trim();\n\t\t\tvar fragment = create_fragment_from_html(html);\n\t\t\telement = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (DEV && (get_next_sibling(element) !== null || element.nodeType !== ELEMENT_NODE)) {\n\t\t\t\tw.invalid_raw_snippet_render();\n\t\t\t}\n\n\t\t\tanchor.before(element);\n\t\t}\n\n\t\tconst result = snippet.setup?.(element);\n\t\tassign_nodes(element, element);\n\n\t\tif (typeof result === 'function') {\n\t\t\tteardown(result);\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/svelte-component.js",
    "content": "/** @import { TemplateNode, Dom } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { block } from '../../reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\nimport { BranchManager } from './branches.js';\nimport { HYDRATION_START, HYDRATION_START_ELSE } from '../../../../constants.js';\n\n/**\n * @template P\n * @template {(props: P) => void} C\n * @param {TemplateNode} node\n * @param {() => C} get_component\n * @param {(anchor: TemplateNode, component: C) => Dom | void} render_fn\n * @returns {void}\n */\nexport function component(node, get_component, render_fn) {\n\t/** @type {TemplateNode | undefined} */\n\tvar hydration_start_node;\n\n\tif (hydrating) {\n\t\thydration_start_node = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar component = get_component() ?? null;\n\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (hydration_start_node));\n\n\t\t\tvar server_had_component = data === HYDRATION_START;\n\t\t\tvar client_has_component = component !== null;\n\n\t\t\tif (server_had_component !== client_has_component) {\n\t\t\t\t// Hydration mismatch: skip the server-rendered nodes and render fresh\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t}, EFFECT_TRANSPARENT);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/svelte-element.js",
    "content": "/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\nimport { FILENAME, NAMESPACE_SVG } from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { create_element, create_text, get_first_child } from '../operations.js';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport { set_should_intro } from '../../render.js';\nimport { active_effect } from '../../runtime.js';\nimport { component_context, dev_stack } from '../../context.js';\nimport { DEV } from 'esm-env';\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { assign_nodes } from '../template.js';\nimport { is_raw_text_element } from '../../../../utils.js';\nimport { BranchManager } from './branches.js';\nimport { set_animation_effect_override } from '../elements/transitions.js';\n\n/**\n * @param {Comment | Element} node\n * @param {() => string} get_tag\n * @param {boolean} is_svg\n * @param {undefined | ((element: Element, anchor: Node | null) => void)} render_fn,\n * @param {undefined | (() => string)} get_namespace\n * @param {undefined | [number, number]} location\n * @returns {void}\n */\nexport function element(node, get_tag, is_svg, render_fn, get_namespace, location) {\n\tlet was_hydrating = hydrating;\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar filename = DEV && location && component_context?.function[FILENAME];\n\n\t/** @type {null | Element} */\n\tvar element = null;\n\n\tif (hydrating && hydrate_node.nodeType === ELEMENT_NODE) {\n\t\telement = /** @type {Element} */ (hydrate_node);\n\t\thydrate_next();\n\t}\n\n\tvar anchor = /** @type {TemplateNode} */ (hydrating ? hydrate_node : node);\n\n\t/**\n\t * We track this so we can set it when changing the element, allowing any\n\t * `animate:` directive to bind itself to the correct block\n\t */\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\tvar branches = new BranchManager(anchor, false);\n\n\tblock(() => {\n\t\tconst next_tag = get_tag() || null;\n\t\tvar ns = get_namespace\n\t\t\t? get_namespace()\n\t\t\t: is_svg || next_tag === 'svg'\n\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t: undefined;\n\n\t\tif (next_tag === null) {\n\t\t\tbranches.ensure(null, null);\n\t\t\tset_should_intro(true);\n\t\t\treturn;\n\t\t}\n\n\t\tbranches.ensure(next_tag, (anchor) => {\n\t\t\tif (next_tag) {\n\t\t\t\telement = hydrating ? /** @type {Element} */ (element) : create_element(next_tag, ns);\n\n\t\t\t\tif (DEV && location) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\telement.__svelte_meta = {\n\t\t\t\t\t\tparent: dev_stack,\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tfile: filename,\n\t\t\t\t\t\t\tline: location[0],\n\t\t\t\t\t\t\tcolumn: location[1]\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tassign_nodes(element, element);\n\n\t\t\t\tif (render_fn) {\n\t\t\t\t\tif (hydrating && is_raw_text_element(next_tag)) {\n\t\t\t\t\t\t// prevent hydration glitches\n\t\t\t\t\t\telement.append(document.createComment(''));\n\t\t\t\t\t}\n\n\t\t\t\t\t// If hydrating, use the existing ssr comment as the anchor so that the\n\t\t\t\t\t// inner open and close methods can pick up the existing nodes correctly\n\t\t\t\t\tvar child_anchor = hydrating\n\t\t\t\t\t\t? get_first_child(element)\n\t\t\t\t\t\t: element.appendChild(create_text());\n\n\t\t\t\t\tif (hydrating) {\n\t\t\t\t\t\tif (child_anchor === null) {\n\t\t\t\t\t\t\tset_hydrating(false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tset_hydrate_node(child_anchor);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tset_animation_effect_override(parent_effect);\n\n\t\t\t\t\t// `child_anchor` is undefined if this is a void element, but we still\n\t\t\t\t\t// need to call `render_fn` in order to run actions etc. If the element\n\t\t\t\t\t// contains children, it's a user error (which is warned on elsewhere)\n\t\t\t\t\t// and the DOM will be silently discarded\n\t\t\t\t\trender_fn(element, child_anchor);\n\n\t\t\t\t\tset_animation_effect_override(null);\n\t\t\t\t}\n\n\t\t\t\t// we do this after calling `render_fn` so that child effects don't override `nodes.end`\n\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = element;\n\n\t\t\t\tanchor.before(element);\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t}\n\t\t});\n\n\t\t// revert to the default state after the effect has been created\n\t\tset_should_intro(true);\n\n\t\treturn () => {\n\t\t\tif (next_tag) {\n\t\t\t\t// if we're in this callback because we're re-running the effect,\n\t\t\t\t// disable intros (unless no element is currently displayed)\n\t\t\t\tset_should_intro(false);\n\t\t\t}\n\t\t};\n\t}, EFFECT_TRANSPARENT);\n\n\tteardown(() => {\n\t\tset_should_intro(true);\n\t});\n\n\tif (was_hydrating) {\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(anchor);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/blocks/svelte-head.js",
    "content": "/** @import { TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from '../hydration.js';\nimport { create_text, get_first_child, get_next_sibling } from '../operations.js';\nimport { block } from '../../reactivity/effects.js';\nimport { COMMENT_NODE, EFFECT_PRESERVED, HEAD_EFFECT } from '#client/constants';\n\n/**\n * @param {string} hash\n * @param {(anchor: Node) => void} render_fn\n * @returns {void}\n */\nexport function head(hash, render_fn) {\n\t// The head function may be called after the first hydration pass and ssr comment nodes may still be present,\n\t// therefore we need to skip that when we detect that we're not in hydration mode.\n\tlet previous_hydrate_node = null;\n\tlet was_hydrating = hydrating;\n\n\t/** @type {Comment | Text} */\n\tvar anchor;\n\n\tif (hydrating) {\n\t\tprevious_hydrate_node = hydrate_node;\n\n\t\tvar head_anchor = get_first_child(document.head);\n\n\t\t// There might be multiple head blocks in our app, and they could have been\n\t\t// rendered in an arbitrary order — find one corresponding to this component\n\t\twhile (\n\t\t\thead_anchor !== null &&\n\t\t\t(head_anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (head_anchor).data !== hash)\n\t\t) {\n\t\t\thead_anchor = get_next_sibling(head_anchor);\n\t\t}\n\n\t\t// If we can't find an opening hydration marker, skip hydration (this can happen\n\t\t// if a framework rendered body but not head content)\n\t\tif (head_anchor === null) {\n\t\t\tset_hydrating(false);\n\t\t} else {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_next_sibling(head_anchor));\n\t\t\thead_anchor.remove(); // in case this component is repeated\n\n\t\t\tset_hydrate_node(start);\n\t\t}\n\t}\n\n\tif (!hydrating) {\n\t\tanchor = document.head.appendChild(create_text());\n\t}\n\n\ttry {\n\t\t// normally a branch is the child of a block and would have the EFFECT_PRESERVED flag,\n\t\t// but since head blocks don't necessarily only have direct branch children we add it on the block itself\n\t\tblock(() => render_fn(anchor), HEAD_EFFECT | EFFECT_PRESERVED);\n\t} finally {\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (previous_hydrate_node));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/css.js",
    "content": "import { DEV } from 'esm-env';\nimport { register_style } from '../dev/css.js';\nimport { effect } from '../reactivity/effects.js';\nimport { create_element } from './operations.js';\n\n/**\n * @param {Node} anchor\n * @param {{ hash: string, code: string }} css\n */\nexport function append_styles(anchor, css) {\n\t// Use `queue_micro_task` to ensure `anchor` is in the DOM, otherwise getRootNode() will yield wrong results\n\teffect(() => {\n\t\tvar root = anchor.getRootNode();\n\n\t\tvar target = /** @type {ShadowRoot} */ (root).host\n\t\t\t? /** @type {ShadowRoot} */ (root)\n\t\t\t: /** @type {Document} */ (root).head ?? /** @type {Document} */ (root.ownerDocument).head;\n\n\t\t// Always querying the DOM is roughly the same perf as additionally checking for presence in a map first assuming\n\t\t// that you'll get cache hits half of the time, so we just always query the dom for simplicity and code savings.\n\t\tif (!target.querySelector('#' + css.hash)) {\n\t\t\tconst style = create_element('style');\n\t\t\tstyle.id = css.hash;\n\t\t\tstyle.textContent = css.code;\n\n\t\t\ttarget.appendChild(style);\n\n\t\t\tif (DEV) {\n\t\t\t\tregister_style(css.hash, style);\n\t\t\t}\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/actions.js",
    "content": "/** @import { ActionPayload } from '#client' */\nimport { effect, render_effect } from '../../reactivity/effects.js';\nimport { safe_not_equal } from '../../reactivity/equality.js';\nimport { deep_read_state, untrack } from '../../runtime.js';\n\n/**\n * @template P\n * @param {Element} dom\n * @param {(dom: Element, value?: P) => ActionPayload<P>} action\n * @param {() => P} [get_value]\n * @returns {void}\n */\nexport function action(dom, action, get_value) {\n\teffect(() => {\n\t\tvar payload = untrack(() => action(dom, get_value?.()) || {});\n\n\t\tif (get_value && payload?.update) {\n\t\t\tvar inited = false;\n\t\t\t/** @type {P} */\n\t\t\tvar prev = /** @type {any} */ ({}); // initialize with something so it's never equal on first run\n\n\t\t\trender_effect(() => {\n\t\t\t\tvar value = get_value();\n\n\t\t\t\t// Action's update method is coarse-grained, i.e. when anything in the passed value changes, update.\n\t\t\t\t// This works in legacy mode because of mutable_source being updated as a whole, but when using $state\n\t\t\t\t// together with actions and mutation, it wouldn't notice the change without a deep read.\n\t\t\t\tdeep_read_state(value);\n\n\t\t\t\tif (inited && safe_not_equal(prev, value)) {\n\t\t\t\t\tprev = value;\n\t\t\t\t\t/** @type {Function} */ (payload.update)(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinited = true;\n\t\t}\n\n\t\tif (payload?.destroy) {\n\t\t\treturn () => /** @type {Function} */ (payload.destroy)();\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/attachments.js",
    "content": "/** @import { Effect } from '#client' */\nimport { branch, effect, destroy_effect, managed } from '../../reactivity/effects.js';\n\n// TODO in 6.0 or 7.0, when we remove legacy mode, we can simplify this by\n// getting rid of the block/branch stuff and just letting the effect rip.\n// see https://github.com/sveltejs/svelte/pull/15962\n\n/**\n * @param {Element} node\n * @param {() => (node: Element) => void} get_fn\n */\nexport function attach(node, get_fn) {\n\t/** @type {false | undefined | ((node: Element) => void)} */\n\tvar fn = undefined;\n\n\t/** @type {Effect | null} */\n\tvar e;\n\n\tmanaged(() => {\n\t\tif (fn !== (fn = get_fn())) {\n\t\t\tif (e) {\n\t\t\t\tdestroy_effect(e);\n\t\t\t\te = null;\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\te = branch(() => {\n\t\t\t\t\teffect(() => /** @type {(node: Element) => void} */ (fn)(node));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/attributes.js",
    "content": "/** @import { Blocker, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate, delegated, event, event_symbol } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport { IS_XHTML, LOADING_ATTR_SYMBOL } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { branch, destroy_effect, effect, managed } from '../../reactivity/effects.js';\nimport { init_select, select_option } from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\nconst LINK_TAG = IS_XHTML ? 'link' : 'LINK';\nconst INPUT_TAG = IS_XHTML ? 'input' : 'INPUT';\nconst OPTION_TAG = IS_XHTML ? 'option' : 'OPTION';\nconst SELECT_TAG = IS_XHTML ? 'select' : 'SELECT';\nconst PROGRESS_TAG = IS_XHTML ? 'progress' : 'PROGRESS';\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t// @ts-expect-error\n\tinput.__on_r = remove_defaults;\n\tqueue_micro_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === LINK_TAG)\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.getAttribute('is') || node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.getAttribute('is') || node.nodeName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) {\n\t\tvar input = /** @type {HTMLInputElement} */ (element);\n\t\tvar attribute = input.type === 'checkbox' ? 'defaultChecked' : 'defaultValue';\n\n\t\tif (!(attribute in next)) {\n\t\t\tremove_input_defaults(input);\n\t\t}\n\t}\n\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.nodeName === OPTION_TAG;\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t} else if (css_hash || next[CLASS]) {\n\t\tnext.class = null; /* force call to set_class() */\n\t}\n\n\tif (next[STYLE]) {\n\t\tnext.style ??= null; /* force call to set_style() */\n\t}\n\n\tvar setters = get_setters(element);\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'class') {\n\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'style') {\n\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\n\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar is_delegated = can_delegate_event(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!is_delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (is_delegated) {\n\t\t\t\tdelegated(event_name, element, value);\n\t\t\t\tdelegate([event_name]);\n\t\t\t} else if (value != null) {\n\t\t\t\t/**\n\t\t\t\t * @this {any}\n\t\t\t\t * @param {Event} evt\n\t\t\t\t */\n\t\t\t\tfunction handle(evt) {\n\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t}\n\n\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t}\n\t\t} else if (key === 'style') {\n\t\t\t// avoid using the setter\n\t\t\tset_attribute(element, key, value);\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\telement.value = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t\t// remove it from attributes's cache\n\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(true);\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === SELECT_TAG;\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\n\n\t\t\tif (inited && is_select && 'value' in next) {\n\t\t\t\tselect_option(/** @type {HTMLSelectElement} */ (element), next.value);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tselect_option(select, /** @type {Record<string | symbol, any>} */ (prev).value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t// @ts-expect-error\n\t\telement.__attributes ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/document.js",
    "content": "import { listen } from './shared.js';\n\n/**\n * @param {(activeElement: Element | null) => void} update\n * @returns {void}\n */\nexport function bind_active_element(update) {\n\tlisten(document, ['focusin', 'focusout'], (event) => {\n\t\tif (event && event.type === 'focusout' && /** @type {FocusEvent} */ (event).relatedTarget) {\n\t\t\t// The tests still pass if we remove this, because of JSDOM limitations, but it is necessary\n\t\t\t// to avoid temporarily resetting to `document.body`\n\t\t\treturn;\n\t\t}\n\n\t\tupdate(document.activeElement);\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/input.js",
    "content": "/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { tick, untrack } from '../../../runtime.js';\nimport { is_runes } from '../../../context.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', async (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\n\t\t// Because `{#each ...}` blocks work by updating sources inside the flush,\n\t\t// we need to wait a tick before checking to see if we should forcibly\n\t\t// update the input and reset the selection state\n\t\tawait tick();\n\n\t\t// Respect any validation in accessors\n\t\tif (value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\t\t\tvar length = input.value.length;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tvar new_length = input.value.length;\n\t\t\t\t// If cursor was at end and new input is longer, move cursor to new end\n\t\t\t\tif (start === end && end === length && new_length > length) {\n\t\t\t\t\tinput.selectionStart = new_length;\n\t\t\t\t\tinput.selectionEnd = new_length;\n\t\t\t\t} else {\n\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\tinput.selectionEnd = Math.min(end, new_length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (input === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Never rewrite the contents of a focused input. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the input:\n\t\t\t//\n\t\t\t// <input bind:value={query}>\n\t\t\t// <p>{await find(query)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\t/** @type {Set<V>} */\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\thydrating &&\n\t\tinput.files\n\t) {\n\t\tset(input.files);\n\t}\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/media.js",
    "content": "import { render_effect, effect, teardown } from '../../../reactivity/effects.js';\nimport { listen } from './shared.js';\n\n/** @param {TimeRanges} ranges */\nfunction time_ranges_to_array(ranges) {\n\tvar array = [];\n\n\tfor (var i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => number | undefined} get\n * @param {(value: number) => void} set\n * @returns {void}\n */\nexport function bind_current_time(media, get, set = get) {\n\t/** @type {number} */\n\tvar raf_id;\n\t/** @type {number} */\n\tvar value;\n\n\t// Ideally, listening to timeupdate would be enough, but it fires too infrequently for the currentTime\n\t// binding, which is why we use a raf loop, too. We additionally still listen to timeupdate because\n\t// the user could be scrubbing through the video using the native controls when the media is paused.\n\tvar callback = () => {\n\t\tcancelAnimationFrame(raf_id);\n\n\t\tif (!media.paused) {\n\t\t\traf_id = requestAnimationFrame(callback);\n\t\t}\n\n\t\tvar next_value = media.currentTime;\n\t\tif (value !== next_value) {\n\t\t\tset((value = next_value));\n\t\t}\n\t};\n\n\traf_id = requestAnimationFrame(callback);\n\tmedia.addEventListener('timeupdate', callback);\n\n\trender_effect(() => {\n\t\tvar next_value = Number(get());\n\n\t\tif (value !== next_value && !isNaN(/** @type {any} */ (next_value))) {\n\t\t\tmedia.currentTime = value = next_value;\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tcancelAnimationFrame(raf_id);\n\t\tmedia.removeEventListener('timeupdate', callback);\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(array: Array<{ start: number; end: number }>) => void} set\n */\nexport function bind_buffered(media, set) {\n\t/** @type {{ start: number; end: number; }[]} */\n\tvar current;\n\n\t// `buffered` can update without emitting any event, so we check it on various events.\n\t// By specs, `buffered` always returns a new object, so we have to compare deeply.\n\tlisten(media, ['loadedmetadata', 'progress', 'timeupdate', 'seeking'], () => {\n\t\tvar ranges = media.buffered;\n\n\t\tif (\n\t\t\t!current ||\n\t\t\tcurrent.length !== ranges.length ||\n\t\t\tcurrent.some((range, i) => ranges.start(i) !== range.start || ranges.end(i) !== range.end)\n\t\t) {\n\t\t\tcurrent = time_ranges_to_array(ranges);\n\t\t\tset(current);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(array: Array<{ start: number; end: number }>) => void} set\n */\nexport function bind_seekable(media, set) {\n\tlisten(media, ['loadedmetadata'], () => set(time_ranges_to_array(media.seekable)));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(array: Array<{ start: number; end: number }>) => void} set\n */\nexport function bind_played(media, set) {\n\tlisten(media, ['timeupdate'], () => set(time_ranges_to_array(media.played)));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(seeking: boolean) => void} set\n */\nexport function bind_seeking(media, set) {\n\tlisten(media, ['seeking', 'seeked'], () => set(media.seeking));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(seeking: boolean) => void} set\n */\nexport function bind_ended(media, set) {\n\tlisten(media, ['timeupdate', 'ended'], () => set(media.ended));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(ready_state: number) => void} set\n */\nexport function bind_ready_state(media, set) {\n\tlisten(\n\t\tmedia,\n\t\t['loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'emptied'],\n\t\t() => set(media.readyState)\n\t);\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => number | undefined} get\n * @param {(playback_rate: number) => void} set\n */\nexport function bind_playback_rate(media, get, set = get) {\n\t// Needs to happen after element is inserted into the dom (which is guaranteed by using effect),\n\t// else playback will be set back to 1 by the browser\n\teffect(() => {\n\t\tvar value = Number(get());\n\n\t\tif (value !== media.playbackRate && !isNaN(value)) {\n\t\t\tmedia.playbackRate = value;\n\t\t}\n\t});\n\n\t// Start listening to ratechange events after the element is inserted into the dom,\n\t// else playback will be set to 1 by the browser\n\teffect(() => {\n\t\tlisten(media, ['ratechange'], () => {\n\t\t\tset(media.playbackRate);\n\t\t});\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => boolean | undefined} get\n * @param {(paused: boolean) => void} set\n */\nexport function bind_paused(media, get, set = get) {\n\tvar paused = get();\n\n\tvar update = () => {\n\t\tif (paused !== media.paused) {\n\t\t\tset((paused = media.paused));\n\t\t}\n\t};\n\n\t// If someone switches the src while media is playing, the player will pause.\n\t// Listen to the canplay event to get notified of this situation.\n\tlisten(media, ['play', 'pause', 'canplay'], update, paused == null);\n\n\t// Needs to be an effect to ensure media element is mounted: else, if paused is `false` (i.e. should play right away)\n\t// a \"The play() request was interrupted by a new load request\" error would be thrown because the resource isn't loaded yet.\n\teffect(() => {\n\t\tif ((paused = !!get()) !== media.paused) {\n\t\t\tif (paused) {\n\t\t\t\tmedia.pause();\n\t\t\t} else {\n\t\t\t\tmedia.play().catch((error) => {\n\t\t\t\t\tset((paused = true));\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => number | undefined} get\n * @param {(volume: number) => void} set\n */\nexport function bind_volume(media, get, set = get) {\n\tvar callback = () => {\n\t\tset(media.volume);\n\t};\n\n\tif (get() == null) {\n\t\tcallback();\n\t}\n\n\tlisten(media, ['volumechange'], callback, false);\n\n\trender_effect(() => {\n\t\tvar value = Number(get());\n\n\t\tif (value !== media.volume && !isNaN(value)) {\n\t\t\tmedia.volume = value;\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => boolean | undefined} get\n * @param {(muted: boolean) => void} set\n */\nexport function bind_muted(media, get, set = get) {\n\tvar callback = () => {\n\t\tset(media.muted);\n\t};\n\n\tif (get() == null) {\n\t\tcallback();\n\t}\n\n\tlisten(media, ['volumechange'], callback, false);\n\n\trender_effect(() => {\n\t\tvar value = !!get();\n\n\t\tif (media.muted !== value) media.muted = value;\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/navigator.js",
    "content": "import { listen } from './shared.js';\n\n/**\n * @param {(online: boolean) => void} update\n * @returns {void}\n */\nexport function bind_online(update) {\n\tlisten(window, ['online', 'offline'], () => {\n\t\tupdate(navigator.onLine);\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/props.js",
    "content": "import { teardown } from '../../../reactivity/effects.js';\nimport { get_descriptor } from '../../../../shared/utils.js';\n\n/**\n * Makes an `export`ed (non-prop) variable available on the `$$props` object\n * so that consumers can do `bind:x` on the component.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} prop\n * @param {V} value\n * @returns {void}\n */\nexport function bind_prop(props, prop, value) {\n\tvar desc = get_descriptor(props, prop);\n\n\tif (desc && desc.set) {\n\t\tprops[prop] = value;\n\t\tteardown(() => {\n\t\t\tprops[prop] = null;\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/select.js",
    "content": "import { effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport { is } from '../../../proxy.js';\nimport { is_array } from '../../../../shared/utils.js';\nimport * as w from '../../../warnings.js';\nimport { Batch, current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * Selects the correct option(s) (depending on whether this is a multiple select)\n * @template V\n * @param {HTMLSelectElement} select\n * @param {V} value\n * @param {boolean} mounting\n */\nexport function select_option(select, value, mounting = false) {\n\tif (select.multiple) {\n\t\t// If value is null or undefined, keep the selection as is\n\t\tif (value == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If not an array, warn and keep the selection as is\n\t\tif (!is_array(value)) {\n\t\t\treturn w.select_multiple_invalid_value();\n\t\t}\n\n\t\t// Otherwise, update the selection\n\t\tfor (var option of select.options) {\n\t\t\toption.selected = value.includes(get_option_value(option));\n\t\t}\n\n\t\treturn;\n\t}\n\n\tfor (option of select.options) {\n\t\tvar option_value = get_option_value(option);\n\t\tif (is(option_value, value)) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * Selects the correct option(s) if `value` is given,\n * and then sets up a mutation observer to sync the\n * current selection to the dom when it changes. Such\n * changes could for example occur when options are\n * inside an `#each` block.\n * @param {HTMLSelectElement} select\n */\nexport function init_select(select) {\n\tvar observer = new MutationObserver(() => {\n\t\t// @ts-ignore\n\t\tselect_option(select, select.__value);\n\t\t// Deliberately don't update the potential binding value,\n\t\t// the model should be preserved unless explicitly changed\n\t});\n\n\tobserver.observe(select, {\n\t\t// Listen to option element changes\n\t\tchildList: true,\n\t\tsubtree: true, // because of <optgroup>\n\t\t// Listen to option element value attribute changes\n\t\t// (doesn't get notified of select value changes,\n\t\t// because that property is not reflected as an attribute)\n\t\tattributes: true,\n\t\tattributeFilter: ['value']\n\t});\n\n\tteardown(() => {\n\t\tobserver.disconnect();\n\t});\n}\n\n/**\n * @param {HTMLSelectElement} select\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_select_value(select, get, set = get) {\n\tvar batches = new WeakSet();\n\tvar mounting = true;\n\n\tlisten_to_event_and_reset_event(select, 'change', (is_reset) => {\n\t\tvar query = is_reset ? '[selected]' : ':checked';\n\t\t/** @type {unknown} */\n\t\tvar value;\n\n\t\tif (select.multiple) {\n\t\t\tvalue = [].map.call(select.querySelectorAll(query), get_option_value);\n\t\t} else {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option =\n\t\t\t\tselect.querySelector(query) ??\n\t\t\t\t// will fall back to first non-disabled option if no option is selected\n\t\t\t\tselect.querySelector('option:not([disabled])');\n\t\t\tvalue = selected_option && get_option_value(selected_option);\n\t\t}\n\n\t\tset(value);\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t});\n\n\t// Needs to be an effect, not a render_effect, so that in case of each loops the logic runs after the each block has updated\n\teffect(() => {\n\t\tvar value = get();\n\n\t\tif (select === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Don't update the <select> if it is focused. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the select:\n\t\t\t//\n\t\t\t// <select bind:value={selected}>...</select>\n\t\t\t// <p>{await find(selected)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tselect_option(select, value, mounting);\n\n\t\t// Mounting and value undefined -> take selection from dom\n\t\tif (mounting && value === undefined) {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option = select.querySelector(':checked');\n\t\t\tif (selected_option !== null) {\n\t\t\t\tvalue = get_option_value(selected_option);\n\t\t\t\tset(value);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\t\tmounting = false;\n\t});\n\n\tinit_select(select);\n}\n\n/** @param {HTMLOptionElement} option */\nfunction get_option_value(option) {\n\t// __value only exists if the <option> has a value attribute\n\tif ('__value' in option) {\n\t\treturn option.__value;\n\t} else {\n\t\treturn option.value;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/shared.js",
    "content": "import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/size.js",
    "content": "import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t))\n\t\t);\n\t}\n}\n\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/this.js",
    "content": "/** @import { ComponentContext, Effect } from '#client' */\nimport { DESTROYING, STATE_SYMBOL } from '#client/constants';\nimport { component_context } from '../../../context.js';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../../runtime.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\tvar component_effect = /** @type {ComponentContext} */ (component_context).r;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullify the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// When the bind:this effect is destroyed, we go up the effect parent chain until we find the last parent effect that is destroyed,\n\t\t\t// or the effect containing the component bind:this is in (whichever comes first). That way we can time the nulling of the binding\n\t\t\t// as close to user/developer expectation as possible.\n\t\t\t// TODO Svelte 6: Decide if we want to keep this logic or just always null the binding in the component effect's teardown\n\t\t\t// (which would be simpler, but less intuitive in some cases, and breaks the `ondestroy-before-cleanup` test)\n\t\t\tlet p = parent;\n\t\t\twhile (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) {\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\tconst teardown = () => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst original_teardown = p.teardown;\n\t\t\tp.teardown = () => {\n\t\t\t\tteardown();\n\t\t\t\toriginal_teardown?.();\n\t\t\t};\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/universal.js",
    "content": "import { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen } from './shared.js';\n\n/**\n * @param {'innerHTML' | 'textContent' | 'innerText'} property\n * @param {HTMLElement} element\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_content_editable(property, element, get, set = get) {\n\telement.addEventListener('input', () => {\n\t\t// @ts-ignore\n\t\tset(element[property]);\n\t});\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\tif (element[property] !== value) {\n\t\t\tif (value == null) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar non_null_value = element[property];\n\t\t\t\tset(non_null_value);\n\t\t\t} else {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[property] = value + '';\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * @param {string} property\n * @param {string} event_name\n * @param {Element} element\n * @param {(value: unknown) => void} set\n * @param {() => unknown} [get]\n * @returns {void}\n */\nexport function bind_property(property, event_name, element, set, get) {\n\tvar handler = () => {\n\t\t// @ts-ignore\n\t\tset(element[property]);\n\t};\n\n\telement.addEventListener(event_name, handler);\n\n\tif (get) {\n\t\trender_effect(() => {\n\t\t\t// @ts-ignore\n\t\t\telement[property] = get();\n\t\t});\n\t} else {\n\t\thandler();\n\t}\n\n\t// @ts-ignore\n\tif (element === document.body || element === window || element === document) {\n\t\tteardown(() => {\n\t\t\telement.removeEventListener(event_name, handler);\n\t\t});\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_focused(element, set) {\n\tlisten(element, ['focus', 'blur'], () => {\n\t\tset(element === document.activeElement);\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/bindings/window.js",
    "content": "import { effect, render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen, without_reactive_context } from './shared.js';\n\n/**\n * @param {'x' | 'y'} type\n * @param {() => number} get\n * @param {(value: number) => void} set\n * @returns {void}\n */\nexport function bind_window_scroll(type, get, set = get) {\n\tvar is_scrolling_x = type === 'x';\n\n\tvar target_handler = () =>\n\t\twithout_reactive_context(() => {\n\t\t\tscrolling = true;\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(clear, 100); // TODO use scrollend event if supported (or when supported everywhere?)\n\n\t\t\tset(window[is_scrolling_x ? 'scrollX' : 'scrollY']);\n\t\t});\n\n\taddEventListener('scroll', target_handler, {\n\t\tpassive: true\n\t});\n\n\tvar scrolling = false;\n\n\t/** @type {ReturnType<typeof setTimeout>} */\n\tvar timeout;\n\tvar clear = () => {\n\t\tscrolling = false;\n\t};\n\tvar first = true;\n\n\trender_effect(() => {\n\t\tvar latest_value = get();\n\t\t// Don't scroll to the initial value for accessibility reasons\n\t\tif (first) {\n\t\t\tfirst = false;\n\t\t} else if (!scrolling && latest_value != null) {\n\t\t\tscrolling = true;\n\t\t\tclearTimeout(timeout);\n\t\t\tif (is_scrolling_x) {\n\t\t\t\tscrollTo(latest_value, window.scrollY);\n\t\t\t} else {\n\t\t\t\tscrollTo(window.scrollX, latest_value);\n\t\t\t}\n\t\t\ttimeout = setTimeout(clear, 100);\n\t\t}\n\t});\n\n\t// Browsers don't fire the scroll event for the initial scroll position when scroll style isn't set to smooth\n\teffect(target_handler);\n\n\tteardown(() => {\n\t\tremoveEventListener('scroll', target_handler);\n\t});\n}\n\n/**\n * @param {'innerWidth' | 'innerHeight' | 'outerWidth' | 'outerHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_window_size(type, set) {\n\tlisten(window, ['resize'], () => without_reactive_context(() => set(window[type])));\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/class.js",
    "content": "import { to_class } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev = dom.__className;\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/custom-element.js",
    "content": "import { createClassComponent } from '../../../../legacy/legacy-client.js';\nimport { effect_root, render_effect } from '../../reactivity/effects.js';\nimport { append } from '../template.js';\nimport { define_property, get_descriptor, object_keys } from '../../../shared/utils.js';\nimport { create_element } from '../operations.js';\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n\n/** @type {any} */\nlet SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** @type {any} The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** @type {Record<string, any>} Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\t\t/** @type {any} The managed render effect for reflecting attributes */\n\t\t$$me;\n\t\t/** @type {ShadowRoot | null} The ShadowRoot of the custom element */\n\t\t$$shadowRoot = null;\n\n\t\t/**\n\t\t * @param {*} $$componentCtor\n\t\t * @param {*} $$slots\n\t\t * @param {ShadowRootInit | undefined} shadow_root_init\n\t\t */\n\t\tconstructor($$componentCtor, $$slots, shadow_root_init) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\n\t\t\tif (shadow_root_init) {\n\t\t\t\t// We need to store the reference to shadow root, because `closed` shadow root cannot be\n\t\t\t\t// accessed with `this.shadowRoot`.\n\t\t\t\tthis.$$shadowRoot = this.attachShadow(shadow_root_init);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t/** @param {string} name */\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Element} anchor\n\t\t\t\t\t */\n\t\t\t\t\treturn (anchor) => {\n\t\t\t\t\t\tconst slot = create_element('slot');\n\t\t\t\t\t\tif (name !== 'default') slot.name = name;\n\n\t\t\t\t\t\tappend(anchor, slot);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t/** @type {Record<string, any>} */\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\tif (name === 'default' && !this.$$d.children) {\n\t\t\t\t\t\t\tthis.$$d.children = create_slot(name);\n\t\t\t\t\t\t\t$$slots.default = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$slots[name] = create_slot(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = createClassComponent({\n\t\t\t\t\tcomponent: this.$$ctor,\n\t\t\t\t\ttarget: this.$$shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$host: this\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tthis.$$me = effect_root(() => {\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\t\tfor (const key of object_keys(this.$$c)) {\n\t\t\t\t\t\t\tif (!this.$$p_d[key]?.reflect) continue;\n\t\t\t\t\t\t\tthis.$$d[key] = this.$$c[key];\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.$$r = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\n\t\t/**\n\t\t * @param {string} attr\n\t\t * @param {string} _oldValue\n\t\t * @param {string} newValue\n\t\t */\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$me();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * @param {string} attribute_name\n\t\t */\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tobject_keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction get_custom_elements_slots(element) {\n\t/** @type {Record<string, true>} */\n\tconst result = {};\n\telement.childNodes.forEach((node) => {\n\t\tresult[/** @type {Element} node */ (node).slot || 'default'] = true;\n\t});\n\treturn result;\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {any} Component  A Svelte component function\n * @param {Record<string, CustomElementPropDefinition>} props_definition  The props to observe\n * @param {string[]} slots  The slots to create\n * @param {string[]} exports  Explicitly exported values, other than props\n * @param {ShadowRootInit | undefined} shadow_root_init  Options passed to shadow DOM constructor\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\texports,\n\tshadow_root_init,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, shadow_root_init);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn object_keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tobject_keys(props_definition).forEach((prop) => {\n\t\tdefine_property(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tvar component = this.$$c;\n\n\t\t\t\tif (component) {\n\t\t\t\t\t// // If the instance has an accessor, use that instead\n\t\t\t\t\tvar setter = get_descriptor(component, prop)?.get;\n\n\t\t\t\t\tif (setter) {\n\t\t\t\t\t\tcomponent[prop] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomponent.$set({ [prop]: value });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\texports.forEach((property) => {\n\t\tdefine_property(Class.prototype, property, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[property];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ Class;\n\treturn Class;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/customizable-select.js",
    "content": "import { hydrating, reset, set_hydrate_node, set_hydrating } from '../hydration.js';\nimport { create_comment, create_element } from '../operations.js';\nimport { create_trusted_html } from '../reconciler.js';\nimport { attach } from './attachments.js';\n\n/** @type {boolean | null} */\nlet supported = null;\n\n/**\n * Checks if the browser supports rich HTML content inside `<option>` elements.\n * Modern browsers preserve HTML elements inside options, while older browsers\n * strip them during parsing, leaving only text content.\n * @returns {boolean}\n */\nfunction is_supported() {\n\tif (supported === null) {\n\t\tvar select = create_element('select');\n\t\tselect.innerHTML = create_trusted_html('<option><span>t</span></option>');\n\t\tsupported = /** @type {Element} */ (select.firstChild)?.firstChild?.nodeType === 1;\n\t}\n\n\treturn supported;\n}\n\n/**\n *\n * @param {HTMLElement} element\n * @param {(new_element: HTMLElement) => void} update_element\n */\nexport function selectedcontent(element, update_element) {\n\t// if it's not supported no need for special logic\n\tif (!is_supported()) return;\n\n\t// we use the attach function directly just to make sure is executed when is mounted to the dom\n\tattach(element, () => () => {\n\t\tconst select = element.closest('select');\n\t\tif (!select) return;\n\n\t\tconst observer = new MutationObserver((entries) => {\n\t\t\tvar selected = false;\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.target === element) {\n\t\t\t\t\t// the `<selectedcontent>` already changed, no need to replace it\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// if the changes doesn't include the selected `<option>` we don't need to do anything\n\t\t\t\tselected ||= !!entry.target.parentElement?.closest('option')?.selected;\n\t\t\t}\n\n\t\t\tif (selected) {\n\t\t\t\t// replace the `<selectedcontent>` with a clone\n\t\t\t\telement.replaceWith((element = /** @type {HTMLElement} */ (element.cloneNode(true))));\n\t\t\t\tupdate_element(element);\n\t\t\t}\n\t\t});\n\n\t\tobserver.observe(select, {\n\t\t\tchildList: true,\n\t\t\tcharacterData: true,\n\t\t\tsubtree: true\n\t\t});\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t});\n}\n\n/**\n * Handles rich HTML content inside `<option>`, `<optgroup>`, or `<select>` elements with browser-specific branching.\n * Modern browsers preserve HTML inside options, while older browsers strip it to text only.\n *\n * @param {HTMLOptionElement | HTMLOptGroupElement | HTMLSelectElement} element The element to process\n * @param {() => void} rich_fn Function to process rich HTML content (modern browsers)\n */\nexport function customizable_select(element, rich_fn) {\n\tvar was_hydrating = hydrating;\n\n\tif (!is_supported()) {\n\t\tset_hydrating(false);\n\t\telement.textContent = '';\n\t\telement.append(create_comment(''));\n\t}\n\n\ttry {\n\t\trich_fn();\n\t} finally {\n\t\tif (was_hydrating) {\n\t\t\tif (hydrating) {\n\t\t\t\treset(element);\n\t\t\t} else {\n\t\t\t\tset_hydrating(true);\n\t\t\t\tset_hydrate_node(element);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/events.js",
    "content": "import { teardown } from '../../reactivity/effects.js';\nimport { define_property } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * Used on elements, as a map of event type -> event handler,\n * and on events themselves to track which element handled an event\n */\nexport const event_symbol = Symbol('events');\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {Element} element\n * @param {EventListener} [handler]\n * @returns {void}\n */\nexport function delegated(event_name, element, handler) {\n\t// @ts-expect-error\n\t(element[event_symbol] ??= {})[event_name] = handler;\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check `event_symbol` to skip all nodes below it in case this is a\n\t// parent of the `event_symbol` node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event[event_symbol];\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent[event_symbol] = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_symbol]?.[event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent[event_symbol] = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/misc.js",
    "content": "import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\te.__on_r?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/style.js",
    "content": "import { to_style } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\t// @ts-expect-error\n\tvar prev = dom.__style;\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\tdom.__style = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/elements/transitions.js",
    "content": "/** @import { AnimateFn, Animation, AnimationConfig, EachItem, Effect, EffectNodes, TransitionFn, TransitionManager } from '#client' */\nimport { noop, is_function } from '../../../shared/utils.js';\nimport { effect } from '../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../runtime.js';\nimport { loop } from '../../loop.js';\nimport { should_intro } from '../../render.js';\nimport { TRANSITION_GLOBAL, TRANSITION_IN, TRANSITION_OUT } from '../../../../constants.js';\nimport { BLOCK_EFFECT, REACTION_RAN, EFFECT_TRANSPARENT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * @param {Element} element\n * @param {'introstart' | 'introend' | 'outrostart' | 'outroend'} type\n * @returns {void}\n */\nfunction dispatch_event(element, type) {\n\twithout_reactive_context(() => {\n\t\telement.dispatchEvent(new CustomEvent(type));\n\t});\n}\n\n/**\n * Converts a property to the camel-case format expected by Element.animate(), KeyframeEffect(), and KeyframeEffect.setKeyframes().\n * @param {string} style\n * @returns {string}\n */\nfunction css_property_to_camelcase(style) {\n\t// in compliance with spec\n\tif (style === 'float') return 'cssFloat';\n\tif (style === 'offset') return 'cssOffset';\n\n\t// do not rename custom @properties\n\tif (style.startsWith('--')) return style;\n\n\tconst parts = style.split('-');\n\tif (parts.length === 1) return parts[0];\n\treturn (\n\t\tparts[0] +\n\t\tparts\n\t\t\t.slice(1)\n\t\t\t.map(/** @param {any} word */ (word) => word[0].toUpperCase() + word.slice(1))\n\t\t\t.join('')\n\t);\n}\n\n/**\n * @param {string} css\n * @returns {Keyframe}\n */\nfunction css_to_keyframe(css) {\n\t/** @type {Keyframe} */\n\tconst keyframe = {};\n\tconst parts = css.split(';');\n\tfor (const part of parts) {\n\t\tconst [property, value] = part.split(':');\n\t\tif (!property || value === undefined) break;\n\n\t\tconst formatted_property = css_property_to_camelcase(property.trim());\n\t\tkeyframe[formatted_property] = value.trim();\n\t}\n\treturn keyframe;\n}\n\n/** @param {number} t */\nconst linear = (t) => t;\n\n/** @type {Effect | null} */\nlet animation_effect_override = null;\n\n/** @param {Effect | null} v */\nexport function set_animation_effect_override(v) {\n\tanimation_effect_override = v;\n}\n\n/**\n * Called inside keyed `{#each ...}` blocks (as `$.animation(...)`). This creates an animation manager\n * and attaches it to the block, so that moves can be animated following reconciliation.\n * @template P\n * @param {Element} element\n * @param {() => AnimateFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n */\nexport function animation(element, get_fn, get_params) {\n\tvar effect = animation_effect_override ?? /** @type {Effect} */ (active_effect);\n\tvar nodes = /** @type {EffectNodes} */ (effect.nodes);\n\n\t/** @type {DOMRect} */\n\tvar from;\n\n\t/** @type {DOMRect} */\n\tvar to;\n\n\t/** @type {Animation | undefined} */\n\tvar animation;\n\n\t/** @type {null | { position: string, width: string, height: string, transform: string }} */\n\tvar original_styles = null;\n\n\tnodes.a ??= {\n\t\telement,\n\t\tmeasure() {\n\t\t\tfrom = this.element.getBoundingClientRect();\n\t\t},\n\t\tapply() {\n\t\t\tanimation?.abort();\n\n\t\t\tto = this.element.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tfrom.left !== to.left ||\n\t\t\t\tfrom.right !== to.right ||\n\t\t\t\tfrom.top !== to.top ||\n\t\t\t\tfrom.bottom !== to.bottom\n\t\t\t) {\n\t\t\t\tconst options = get_fn()(this.element, { from, to }, get_params?.());\n\n\t\t\t\tanimation = animate(this.element, options, undefined, 1, () => {\n\t\t\t\t\tanimation?.abort();\n\t\t\t\t\tanimation = undefined;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tfix() {\n\t\t\t// If an animation is already running, transforming the element is likely to fail,\n\t\t\t// because the styles applied by the animation take precedence. In the case of crossfade,\n\t\t\t// that means the `translate(...)` of the crossfade transition overrules the `translate(...)`\n\t\t\t// we would apply below, leading to the element jumping somewhere to the top left.\n\t\t\tif (element.getAnimations().length) return;\n\n\t\t\t// It's important to destructure these to get fixed values - the object itself has getters,\n\t\t\t// and changing the style to 'absolute' can for example influence the width.\n\t\t\tvar { position, width, height } = getComputedStyle(element);\n\n\t\t\tif (position !== 'absolute' && position !== 'fixed') {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\toriginal_styles = {\n\t\t\t\t\tposition: style.position,\n\t\t\t\t\twidth: style.width,\n\t\t\t\t\theight: style.height,\n\t\t\t\t\ttransform: style.transform\n\t\t\t\t};\n\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.height = height;\n\t\t\t\tvar to = element.getBoundingClientRect();\n\n\t\t\t\tif (from.left !== to.left || from.top !== to.top) {\n\t\t\t\t\tvar transform = `translate(${from.left - to.left}px, ${from.top - to.top}px)`;\n\t\t\t\t\tstyle.transform = style.transform ? `${style.transform} ${transform}` : transform;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tunfix() {\n\t\t\tif (original_styles) {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\tstyle.position = original_styles.position;\n\t\t\t\tstyle.width = original_styles.width;\n\t\t\t\tstyle.height = original_styles.height;\n\t\t\t\tstyle.transform = original_styles.transform;\n\t\t\t}\n\t\t}\n\t};\n\n\t// in the case of a `<svelte:element>`, it's possible for `$.animation(...)` to be called\n\t// when an animation manager already exists, if the tag changes. in that case, we need to\n\t// swap out the element rather than creating a new manager, in case it happened at the same\n\t// moment as a reconciliation\n\tnodes.a.element = element;\n}\n\n/**\n * Called inside block effects as `$.transition(...)`. This creates a transition manager and\n * attaches it to the current effect — later, inside `pause_effect` and `resume_effect`, we\n * use this to create `intro` and `outro` transitions.\n * @template P\n * @param {number} flags\n * @param {HTMLElement} element\n * @param {() => TransitionFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n * @returns {void}\n */\nexport function transition(flags, element, get_fn, get_params) {\n\tvar is_intro = (flags & TRANSITION_IN) !== 0;\n\tvar is_outro = (flags & TRANSITION_OUT) !== 0;\n\tvar is_both = is_intro && is_outro;\n\tvar is_global = (flags & TRANSITION_GLOBAL) !== 0;\n\n\t/** @type {'in' | 'out' | 'both'} */\n\tvar direction = is_both ? 'both' : is_intro ? 'in' : 'out';\n\n\t/** @type {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig) | undefined} */\n\tvar current_options;\n\n\tvar inert = element.inert;\n\n\t/**\n\t * The default overflow style, stashed so we can revert changes during the transition\n\t * that are necessary to work around a Safari <18 bug\n\t * TODO 6.0 remove this, if older versions of Safari have died out enough\n\t */\n\tvar overflow = element.style.overflow;\n\n\t/** @type {Animation | undefined} */\n\tvar intro;\n\n\t/** @type {Animation | undefined} */\n\tvar outro;\n\n\tfunction get_options() {\n\t\treturn without_reactive_context(() => {\n\t\t\t// If a transition is still ongoing, we use the existing options rather than generating\n\t\t\t// new ones. This ensures that reversible transitions reverse smoothly, rather than\n\t\t\t// jumping to a new spot because (for example) a different `duration` was used\n\t\t\treturn (current_options ??= get_fn()(element, get_params?.() ?? /** @type {P} */ ({}), {\n\t\t\t\tdirection\n\t\t\t}));\n\t\t});\n\t}\n\n\t/** @type {TransitionManager} */\n\tvar transition = {\n\t\tis_global,\n\t\tin() {\n\t\t\telement.inert = inert;\n\n\t\t\tif (!is_intro) {\n\t\t\t\toutro?.abort();\n\t\t\t\toutro?.reset?.();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!is_outro) {\n\t\t\t\t// if we intro then outro then intro again, we want to abort the first intro,\n\t\t\t\t// if it's not a bidirectional transition\n\t\t\t\tintro?.abort();\n\t\t\t}\n\n\t\t\tintro = animate(element, get_options(), outro, 1, () => {\n\t\t\t\tdispatch_event(element, 'introend');\n\n\t\t\t\t// Ensure we cancel the animation to prevent leaking\n\t\t\t\tintro?.abort();\n\t\t\t\tintro = current_options = undefined;\n\n\t\t\t\telement.style.overflow = overflow;\n\t\t\t});\n\t\t},\n\t\tout(fn) {\n\t\t\tif (!is_outro) {\n\t\t\t\tfn?.();\n\t\t\t\tcurrent_options = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.inert = true;\n\n\t\t\toutro = animate(element, get_options(), intro, 0, () => {\n\t\t\t\tdispatch_event(element, 'outroend');\n\t\t\t\tfn?.();\n\t\t\t});\n\t\t},\n\t\tstop: () => {\n\t\t\tintro?.abort();\n\t\t\toutro?.abort();\n\t\t}\n\t};\n\n\tvar e = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t(e.nodes.t ??= []).push(transition);\n\n\t// if this is a local transition, we only want to run it if the parent (branch) effect's\n\t// parent (block) effect is where the state change happened. we can determine that by\n\t// looking at whether the block effect is currently initializing\n\tif (is_intro && should_intro) {\n\t\tvar run = is_global;\n\n\t\tif (!run) {\n\t\t\tvar block = /** @type {Effect | null} */ (e.parent);\n\n\t\t\t// skip over transparent blocks (e.g. snippets, else-if blocks)\n\t\t\twhile (block && (block.f & EFFECT_TRANSPARENT) !== 0) {\n\t\t\t\twhile ((block = block.parent)) {\n\t\t\t\t\tif ((block.f & BLOCK_EFFECT) !== 0) break;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trun = !block || (block.f & REACTION_RAN) !== 0;\n\t\t}\n\n\t\tif (run) {\n\t\t\teffect(() => {\n\t\t\t\tuntrack(() => transition.in());\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Animates an element, according to the provided configuration\n * @param {Element} element\n * @param {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig)} options\n * @param {Animation | undefined} counterpart The corresponding intro/outro to this outro/intro\n * @param {number} t2 The target `t` value — `1` for intro, `0` for outro\n * @param {(() => void)} on_finish Called after successfully completing the animation\n * @returns {Animation}\n */\nfunction animate(element, options, counterpart, t2, on_finish) {\n\tvar is_intro = t2 === 1;\n\n\tif (is_function(options)) {\n\t\t// In the case of a deferred transition (such as `crossfade`), `option` will be\n\t\t// a function rather than an `AnimationConfig`. We need to call this function\n\t\t// once the DOM has been updated...\n\t\t/** @type {Animation} */\n\t\tvar a;\n\t\tvar aborted = false;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (aborted) return;\n\t\t\tvar o = options({ direction: is_intro ? 'in' : 'out' });\n\t\t\ta = animate(element, o, counterpart, t2, on_finish);\n\t\t});\n\n\t\t// ...but we want to do so without using `async`/`await` everywhere, so\n\t\t// we return a facade that allows everything to remain synchronous\n\t\treturn {\n\t\t\tabort: () => {\n\t\t\t\taborted = true;\n\t\t\t\ta?.abort();\n\t\t\t},\n\t\t\tdeactivate: () => a.deactivate(),\n\t\t\treset: () => a.reset(),\n\t\t\tt: () => a.t()\n\t\t};\n\t}\n\n\tcounterpart?.deactivate();\n\n\tif (!options?.duration && !options?.delay) {\n\t\tdispatch_event(element, is_intro ? 'introstart' : 'outrostart');\n\t\ton_finish();\n\n\t\treturn {\n\t\t\tabort: noop,\n\t\t\tdeactivate: noop,\n\t\t\treset: noop,\n\t\t\tt: () => t2\n\t\t};\n\t}\n\n\tconst { delay = 0, css, tick, easing = linear } = options;\n\n\tvar keyframes = [];\n\n\tif (is_intro && counterpart === undefined) {\n\t\tif (tick) {\n\t\t\ttick(0, 1); // TODO put in nested effect, to avoid interleaved reads/writes?\n\t\t}\n\n\t\tif (css) {\n\t\t\tvar styles = css_to_keyframe(css(0, 1));\n\t\t\tkeyframes.push(styles, styles);\n\t\t}\n\t}\n\n\tvar get_t = () => 1 - t2;\n\n\t// create a dummy animation that lasts as long as the delay (but with whatever devtools\n\t// multiplier is in effect). in the common case that it is `0`, we keep it anyway so that\n\t// the CSS keyframes aren't created until the DOM is updated\n\t//\n\t// fill forwards to prevent the element from rendering without styles applied\n\t// see https://github.com/sveltejs/svelte/issues/14732\n\tvar animation = element.animate(keyframes, { duration: delay, fill: 'forwards' });\n\n\tanimation.onfinish = () => {\n\t\t// remove dummy animation from the stack to prevent conflict with main animation\n\t\tanimation.cancel();\n\n\t\tdispatch_event(element, is_intro ? 'introstart' : 'outrostart');\n\n\t\t// for bidirectional transitions, we start from the current position,\n\t\t// rather than doing a full intro/outro\n\t\tvar t1 = counterpart?.t() ?? 1 - t2;\n\t\tcounterpart?.abort();\n\n\t\tvar delta = t2 - t1;\n\t\tvar duration = /** @type {number} */ (options.duration) * Math.abs(delta);\n\t\tvar keyframes = [];\n\n\t\tif (duration > 0) {\n\t\t\t/**\n\t\t\t * Whether or not the CSS includes `overflow: hidden`, in which case we need to\n\t\t\t * add it as an inline style to work around a Safari <18 bug\n\t\t\t * TODO 6.0 remove this, if possible\n\t\t\t */\n\t\t\tvar needs_overflow_hidden = false;\n\n\t\t\tif (css) {\n\t\t\t\tvar n = Math.ceil(duration / (1000 / 60)); // `n` must be an integer, or we risk missing the `t2` value\n\n\t\t\t\tfor (var i = 0; i <= n; i += 1) {\n\t\t\t\t\tvar t = t1 + delta * easing(i / n);\n\t\t\t\t\tvar styles = css_to_keyframe(css(t, 1 - t));\n\t\t\t\t\tkeyframes.push(styles);\n\n\t\t\t\t\tneeds_overflow_hidden ||= styles.overflow === 'hidden';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (needs_overflow_hidden) {\n\t\t\t\t/** @type {HTMLElement} */ (element).style.overflow = 'hidden';\n\t\t\t}\n\n\t\t\tget_t = () => {\n\t\t\t\tvar time = /** @type {number} */ (\n\t\t\t\t\t/** @type {globalThis.Animation} */ (animation).currentTime\n\t\t\t\t);\n\n\t\t\t\treturn t1 + delta * easing(time / duration);\n\t\t\t};\n\n\t\t\tif (tick) {\n\t\t\t\tloop(() => {\n\t\t\t\t\tif (animation.playState !== 'running') return false;\n\n\t\t\t\t\tvar t = get_t();\n\t\t\t\t\ttick(t, 1 - t);\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tanimation = element.animate(keyframes, { duration, fill: 'forwards' });\n\n\t\tanimation.onfinish = () => {\n\t\t\tget_t = () => t2;\n\t\t\ttick?.(t2, 1 - t2);\n\t\t\ton_finish();\n\t\t};\n\t};\n\n\treturn {\n\t\tabort: () => {\n\t\t\tif (animation) {\n\t\t\t\tanimation.cancel();\n\t\t\t\t// This prevents memory leaks in Chromium\n\t\t\t\tanimation.effect = null;\n\t\t\t\t// This prevents onfinish to be launched after cancel(),\n\t\t\t\t// which can happen in some rare cases\n\t\t\t\t// see https://github.com/sveltejs/svelte/issues/13681\n\t\t\t\tanimation.onfinish = noop;\n\t\t\t}\n\t\t},\n\t\tdeactivate: () => {\n\t\t\ton_finish = noop;\n\t\t},\n\t\treset: () => {\n\t\t\tif (t2 === 0) {\n\t\t\t\ttick?.(1, 0);\n\t\t\t}\n\t\t},\n\t\tt: () => get_t()\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/hydration.js",
    "content": "/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode | null} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(get_next_sibling(hydrate_node));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Skips or removes (depending on {@link remove}) all nodes starting at `hydrate_node` up until the next hydration end comment\n * @param {boolean} remove\n */\nexport function skip_nodes(remove = true) {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (\n\t\t\t\tdata === HYDRATION_START ||\n\t\t\t\tdata === HYDRATION_START_ELSE ||\n\t\t\t\t// \"[1\", \"[2\", etc. for if blocks\n\t\t\t\t(data[0] === '[' && !isNaN(Number(data.slice(1))))\n\t\t\t) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tif (remove) node.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/legacy/event-modifiers.js",
    "content": "import { noop } from '../../../shared/utils.js';\nimport { user_pre_effect } from '../../reactivity/effects.js';\nimport { on } from '../elements/events.js';\n\n/**\n * Substitute for the `trusted` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function trusted(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tif (event.isTrusted) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `self` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function self(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\t// @ts-ignore\n\t\tif (event.target === this) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `stopPropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopPropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `once` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function once(fn) {\n\tvar ran = false;\n\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `stopImmediatePropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopImmediatePropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `preventDefault` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function preventDefault(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `passive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function passive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: true\n\t\t});\n\t});\n}\n\n/**\n * Substitute for the `nonpassive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function nonpassive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: false\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/legacy/lifecycle.js",
    "content": "/** @import { ComponentContextLegacy } from '#client' */\nimport { run, run_all } from '../../../shared/utils.js';\nimport { component_context } from '../../context.js';\nimport { derived } from '../../reactivity/deriveds.js';\nimport { user_pre_effect, user_effect } from '../../reactivity/effects.js';\nimport { deep_read_state, get, untrack } from '../../runtime.js';\n\n/**\n * Legacy-mode only: Call `onMount` callbacks and set up `beforeUpdate`/`afterUpdate` effects\n * @param {boolean} [immutable]\n */\nexport function init(immutable = false) {\n\tconst context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\tconst callbacks = context.l.u;\n\tif (!callbacks) return;\n\n\tlet props = () => deep_read_state(context.s);\n\n\tif (immutable) {\n\t\tlet version = 0;\n\t\tlet prev = /** @type {Record<string, any>} */ ({});\n\n\t\t// In legacy immutable mode, before/afterUpdate only fire if the object identity of a prop changes\n\t\tconst d = derived(() => {\n\t\t\tlet changed = false;\n\t\t\tconst props = context.s;\n\t\t\tfor (const key in props) {\n\t\t\t\tif (props[key] !== prev[key]) {\n\t\t\t\t\tprev[key] = props[key];\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (changed) version++;\n\t\t\treturn version;\n\t\t});\n\n\t\tprops = () => get(d);\n\t}\n\n\t// beforeUpdate\n\tif (callbacks.b.length) {\n\t\tuser_pre_effect(() => {\n\t\t\tobserve_all(context, props);\n\t\t\trun_all(callbacks.b);\n\t\t});\n\t}\n\n\t// onMount (must run before afterUpdate)\n\tuser_effect(() => {\n\t\tconst fns = untrack(() => callbacks.m.map(run));\n\t\treturn () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tif (typeof fn === 'function') {\n\t\t\t\t\tfn();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// afterUpdate\n\tif (callbacks.a.length) {\n\t\tuser_effect(() => {\n\t\t\tobserve_all(context, props);\n\t\t\trun_all(callbacks.a);\n\t\t});\n\t}\n}\n\n/**\n * Invoke the getter of all signals associated with a component\n * so they can be registered to the effect this function is called in.\n * @param {ComponentContextLegacy} context\n * @param {(() => void)} props\n */\nfunction observe_all(context, props) {\n\tif (context.l.s) {\n\t\tfor (const signal of context.l.s) get(signal);\n\t}\n\n\tprops();\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/legacy/misc.js",
    "content": "import { set, source } from '../../reactivity/sources.js';\nimport { get } from '../../runtime.js';\nimport { is_array } from '../../../shared/utils.js';\n\n/**\n * Under some circumstances, imports may be reactive in legacy mode. In that case,\n * they should be using `reactive_import` as part of the transformation\n * @param {() => any} fn\n */\nexport function reactive_import(fn) {\n\tvar s = source(0);\n\n\treturn function () {\n\t\tif (arguments.length === 1) {\n\t\t\tset(s, get(s) + 1);\n\t\t\treturn arguments[0];\n\t\t} else {\n\t\t\tget(s);\n\t\t\treturn fn();\n\t\t}\n\t};\n}\n\n/**\n * @this {any}\n * @param {Record<string, unknown>} $$props\n * @param {Event} event\n * @returns {void}\n */\nexport function bubble_event($$props, event) {\n\tvar events = /** @type {Record<string, Function[] | Function>} */ ($$props.$$events)?.[\n\t\tevent.type\n\t];\n\n\tvar callbacks = is_array(events) ? events.slice() : events == null ? [] : [events];\n\n\tfor (var fn of callbacks) {\n\t\t// Preserve \"this\" context\n\t\tfn.call(this, event);\n\t}\n}\n\n/**\n * Used to simulate `$on` on a component instance when `compatibility.componentApi === 4`\n * @param {Record<string, any>} $$props\n * @param {string} event_name\n * @param {Function} event_callback\n */\nexport function add_legacy_event_listener($$props, event_name, event_callback) {\n\t$$props.$$events ||= {};\n\t$$props.$$events[event_name] ||= [];\n\t$$props.$$events[event_name].push(event_callback);\n}\n\n/**\n * Used to simulate `$set` on a component instance when `compatibility.componentApi === 4`.\n * Needs component accessors so that it can call the setter of the prop. Therefore doesn't\n * work for updating props in `$$props` or `$$restProps`.\n * @this {Record<string, any>}\n * @param {Record<string, any>} $$new_props\n */\nexport function update_legacy_props($$new_props) {\n\tfor (var key in $$new_props) {\n\t\tif (key in this) {\n\t\t\tthis[key] = $$new_props[key];\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/operations.js",
    "content": "/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, REACTION_RAN } from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\nimport { NAMESPACE_HTML } from '../../../constants.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (next_sibling_getter.call(node));\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = get_first_child(hydrate_node);\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn next_sibling;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & REACTION_RAN) !== 0;\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap | string} T\n * @param {T} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element}\n */\nexport function create_element(tag, namespace, is) {\n\tlet options = is ? { is } : undefined;\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tdocument.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)\n\t);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/reconciler.js",
    "content": "import { create_element } from './operations.js';\n\nconst policy =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\tglobalThis?.window?.trustedTypes &&\n\t/* @__PURE__ */ globalThis.window.trustedTypes.createPolicy('svelte-trusted-html', {\n\t\t/** @param {string} html */\n\t\tcreateHTML: (html) => {\n\t\t\treturn html;\n\t\t}\n\t});\n\n/** @param {string} html */\nexport function create_trusted_html(html) {\n\treturn /** @type {string} */ (policy?.createHTML(html) ?? html);\n}\n\n/**\n * @param {string} html\n */\nexport function create_fragment_from_html(html) {\n\tvar elem = create_element('template');\n\telem.innerHTML = create_trusted_html(html.replaceAll('<!>', '<!---->')); // XHTML compliance\n\treturn elem.content;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/task.js",
    "content": "import { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/template.js",
    "content": "/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport {\n\tCOMMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE,\n\tIS_XHTML,\n\tREACTION_RAN,\n\tTEXT_NODE\n} from '#client/constants';\n\nconst TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';\nconst SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {TemplateNode} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.nodeName === TEMPLATE_TAG\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.nodeName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).nodeName === SCRIPT_TAG\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = create_element('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes.start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes.end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\n */\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & REACTION_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`$`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/dom/types.d.ts",
    "content": "export type TemplateStructure =\n\t| string\n\t| undefined\n\t| [string, Record<string, string> | undefined, ...TemplateStructure[]];\n"
  },
  {
    "path": "packages/svelte/src/internal/client/error-handling.js",
    "content": "/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, REACTION_RAN, EFFECT } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\t// if the error occurred while creating this subtree, we let it\n\t// bubble up until it hits a boundary that can handle it, unless\n\t// it's an $effect in which case it doesn't run immediately\n\tif ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {\n\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\tapply_adjustments(error);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// otherwise we bubble up the effect tree ourselves\n\tinvoke_error_boundary(error, effect);\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\tif ((effect.f & REACTION_RAN) === 0) {\n\t\t\t\t// we are still creating the boundary effect\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (DEV && error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? '  ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/errors.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport *  from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n * @param {string} index\n * @param {string} a\n * @param {string} b\n * @returns {never}\n */\nexport function each_key_volatile(index, a, b) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_volatile\\nKeyed each block has key that is not idempotent — the key for item at index ${index} was \\`${a}\\` but is now \\`${b}\\`. Keys must be the same each time for a given item\\nhttps://svelte.dev/e/each_key_volatile`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_volatile`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}"
  },
  {
    "path": "packages/svelte/src/internal/client/hydratable.js",
    "content": "import { async_mode_flag } from '../flags/index.js';\nimport { hydrating } from './dom/hydration.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { DEV } from 'esm-env';\n\n/**\n * @template T\n * @param {string} key\n * @param {() => T} fn\n * @returns {T}\n */\nexport function hydratable(key, fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('hydratable');\n\t}\n\n\tif (hydrating) {\n\t\tconst store = window.__svelte?.h;\n\n\t\tif (store?.has(key)) {\n\t\t\treturn /** @type {T} */ (store.get(key));\n\t\t}\n\n\t\tif (DEV) {\n\t\t\te.hydratable_missing_but_required(key);\n\t\t} else {\n\t\t\tw.hydratable_missing_but_expected(key);\n\t\t}\n\t}\n\n\treturn fn();\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/index.js",
    "content": "export { createAttachmentKey as attachment } from '../../attachments/index.js';\nexport { FILENAME, HMR, NAMESPACE_SVG } from '../../constants.js';\nexport { push, pop, add_svelte_meta } from './context.js';\nexport { assign, assign_async } from './dev/assign.js';\nexport { cleanup_styles } from './dev/css.js';\nexport { add_locations } from './dev/elements.js';\nexport { hmr } from './dev/hmr.js';\nexport { create_ownership_validator } from './dev/ownership.js';\nexport { check_target, legacy_api } from './dev/legacy.js';\nexport { trace, tag, tag_proxy } from './dev/tracing.js';\nexport { inspect } from './dev/inspect.js';\nexport { async } from './dom/blocks/async.js';\nexport { validate_snippet_args } from './dev/validation.js';\nexport { await_block as await } from './dom/blocks/await.js';\nexport { if_block as if } from './dom/blocks/if.js';\nexport { key } from './dom/blocks/key.js';\nexport { css_props } from './dom/blocks/css-props.js';\nexport { index, each } from './dom/blocks/each.js';\nexport { html } from './dom/blocks/html.js';\nexport { sanitize_slots, slot } from './dom/blocks/slot.js';\nexport { snippet, wrap_snippet } from './dom/blocks/snippet.js';\nexport { component } from './dom/blocks/svelte-component.js';\nexport { element } from './dom/blocks/svelte-element.js';\nexport { head } from './dom/blocks/svelte-head.js';\nexport { append_styles } from './dom/css.js';\nexport { action } from './dom/elements/actions.js';\nexport { attach } from './dom/elements/attachments.js';\nexport {\n\tremove_input_defaults,\n\tset_attribute,\n\tattribute_effect,\n\tset_custom_element_data,\n\tset_xlink_attribute,\n\tset_value,\n\tset_checked,\n\tset_selected,\n\tset_default_checked,\n\tset_default_value,\n\tCLASS,\n\tSTYLE\n} from './dom/elements/attributes.js';\nexport { set_class } from './dom/elements/class.js';\nexport { apply, event, delegated, delegate, replay_events } from './dom/elements/events.js';\nexport { autofocus, remove_textarea_child } from './dom/elements/misc.js';\nexport { customizable_select, selectedcontent } from './dom/elements/customizable-select.js';\nexport { set_style } from './dom/elements/style.js';\nexport { animation, transition } from './dom/elements/transitions.js';\nexport { bind_active_element } from './dom/elements/bindings/document.js';\nexport { bind_checked, bind_files, bind_group, bind_value } from './dom/elements/bindings/input.js';\nexport {\n\tbind_buffered,\n\tbind_current_time,\n\tbind_ended,\n\tbind_muted,\n\tbind_paused,\n\tbind_playback_rate,\n\tbind_played,\n\tbind_ready_state,\n\tbind_seekable,\n\tbind_seeking,\n\tbind_volume\n} from './dom/elements/bindings/media.js';\nexport { bind_online } from './dom/elements/bindings/navigator.js';\nexport { bind_prop } from './dom/elements/bindings/props.js';\nexport { bind_select_value, init_select, select_option } from './dom/elements/bindings/select.js';\nexport { bind_element_size, bind_resize_observer } from './dom/elements/bindings/size.js';\nexport { bind_this } from './dom/elements/bindings/this.js';\nexport {\n\tbind_content_editable,\n\tbind_property,\n\tbind_focused\n} from './dom/elements/bindings/universal.js';\nexport { bind_window_scroll, bind_window_size } from './dom/elements/bindings/window.js';\nexport { hydrate_template, next, reset } from './dom/hydration.js';\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted\n} from './dom/legacy/event-modifiers.js';\nexport { init } from './dom/legacy/lifecycle.js';\nexport {\n\tadd_legacy_event_listener,\n\tbubble_event,\n\treactive_import,\n\tupdate_legacy_props\n} from './dom/legacy/misc.js';\nexport {\n\tappend,\n\tcomment,\n\tfrom_html,\n\tfrom_mathml,\n\tfrom_svg,\n\tfrom_tree,\n\ttext,\n\tprops_id,\n\twith_script\n} from './dom/template.js';\nexport {\n\tfor_await_track_reactivity_loss,\n\trun,\n\tsave,\n\ttrack_reactivity_loss,\n\trun_after_blockers,\n\twait\n} from './reactivity/async.js';\nexport { eager, flushSync as flush } from './reactivity/batch.js';\nexport {\n\tasync_derived,\n\tuser_derived as derived,\n\tderived_safe_equal\n} from './reactivity/deriveds.js';\nexport {\n\taborted,\n\teffect_tracking,\n\teffect_root,\n\tlegacy_pre_effect,\n\tlegacy_pre_effect_reset,\n\trender_effect,\n\ttemplate_effect,\n\tdeferred_template_effect,\n\teffect,\n\tuser_effect,\n\tuser_pre_effect\n} from './reactivity/effects.js';\nexport { mutable_source, mutate, set, state, update, update_pre } from './reactivity/sources.js';\nexport {\n\tprop,\n\trest_props,\n\tlegacy_rest_props,\n\tspread_props,\n\tupdate_pre_prop,\n\tupdate_prop\n} from './reactivity/props.js';\nexport {\n\tinvalidate_store,\n\tstore_mutate,\n\tsetup_stores,\n\tstore_get,\n\tstore_set,\n\tstore_unsub,\n\tupdate_pre_store,\n\tupdate_store,\n\tmark_store_binding\n} from './reactivity/store.js';\nexport { boundary, pending } from './dom/blocks/boundary.js';\nexport { invalidate_inner_signals } from './legacy.js';\nexport { set_text } from './render.js';\nexport {\n\tget,\n\tsafe_get,\n\ttick,\n\tuntrack,\n\tdeep_read,\n\tdeep_read_state,\n\tactive_effect\n} from './runtime.js';\nexport { validate_binding } from './validate.js';\nexport { raf } from './timing.js';\nexport { proxy } from './proxy.js';\nexport { create_custom_element } from './dom/elements/custom-element.js';\nexport {\n\tchild,\n\tfirst_child,\n\tsibling,\n\t$window as window,\n\t$document as document\n} from './dom/operations.js';\nexport { attr, clsx } from '../shared/attributes.js';\nexport { snapshot } from '../shared/clone.js';\nexport { noop, fallback, to_array, exclude_from_object } from '../shared/utils.js';\nexport {\n\tinvalid_default_snippet,\n\tvalidate_dynamic_element_tag,\n\tvalidate_store,\n\tvalidate_void_dynamic_element,\n\tprevent_snippet_stringification\n} from '../shared/validate.js';\nexport { strict_equals, equals } from './dev/equality.js';\nexport { log_if_contains_state } from './dev/console-log.js';\nexport { invoke_error_boundary } from './error-handling.js';\n"
  },
  {
    "path": "packages/svelte/src/internal/client/legacy.js",
    "content": "/** @import { Value } from '#client' */\nimport { internal_set } from './reactivity/sources.js';\nimport { untrack } from './runtime.js';\n\n/**\n * @type {Set<Value> | null}\n * @deprecated\n */\nexport let captured_signals = null;\n\n/**\n * Capture an array of all the signals that are read when `fn` is called\n * @template T\n * @param {() => T} fn\n */\nfunction capture_signals(fn) {\n\tvar previous_captured_signals = captured_signals;\n\n\ttry {\n\t\tcaptured_signals = new Set();\n\n\t\tuntrack(fn);\n\n\t\tif (previous_captured_signals !== null) {\n\t\t\tfor (var signal of captured_signals) {\n\t\t\t\tprevious_captured_signals.add(signal);\n\t\t\t}\n\t\t}\n\n\t\treturn captured_signals;\n\t} finally {\n\t\tcaptured_signals = previous_captured_signals;\n\t}\n}\n\n/**\n * Invokes a function and captures all signals that are read during the invocation,\n * then invalidates them.\n * @param {() => any} fn\n * @deprecated\n */\nexport function invalidate_inner_signals(fn) {\n\tfor (var signal of capture_signals(fn)) {\n\t\tinternal_set(signal, signal.v);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/loop.js",
    "content": "/** @import { TaskCallback, Task, TaskEntry } from '#client' */\nimport { raf } from './timing.js';\n\n// TODO move this into timing.js where it probably belongs\n\n/**\n * @returns {void}\n */\nfunction run_tasks() {\n\t// use `raf.now()` instead of the `requestAnimationFrame` callback argument, because\n\t// otherwise things can get wonky https://github.com/sveltejs/svelte/pull/14541\n\tconst now = raf.now();\n\n\traf.tasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\traf.tasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\n\tif (raf.tasks.size !== 0) {\n\t\traf.tick(run_tasks);\n\t}\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {TaskCallback} callback\n * @returns {Task}\n */\nexport function loop(callback) {\n\t/** @type {TaskEntry} */\n\tlet task;\n\n\tif (raf.tasks.size === 0) {\n\t\traf.tick(run_tasks);\n\t}\n\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\traf.tasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\traf.tasks.delete(task);\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/proxy.js",
    "content": "/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_eager_effects,\n\tset_eager_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_error('created at') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\twith_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create an uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/proxy.test.ts",
    "content": "import { proxy } from './proxy';\nimport { assert, test } from 'vitest';\n\ntest('does not mutate the original object', () => {\n\tconst original = { x: 1 };\n\tconst state = proxy(original);\n\n\tstate.x = 2;\n\n\tassert.equal(original.x, 1);\n\tassert.equal(state.x, 2);\n});\n\ntest('preserves getters', () => {\n\tlet count = 0;\n\tconst original = {\n\t\tcount: 0,\n\t\tget x() {\n\t\t\tthis.count += 1;\n\t\t\tcount += 1;\n\t\t\treturn 42;\n\t\t}\n\t};\n\n\tconst state = proxy(original);\n\n\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\tstate.x;\n\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\tstate.x;\n\n\tassert.equal(original.count, 0);\n\tassert.equal(count, 2);\n\tassert.equal(state.count, 2);\n});\n\ntest('defines a property', () => {\n\tconst original = { y: 0 };\n\tconst state = proxy<any>(original);\n\n\tlet value = 0;\n\n\tObject.defineProperty(state, 'x', {\n\t\tvalue: 1\n\t});\n\tObject.defineProperty(state, 'y', {\n\t\tvalue: 1\n\t});\n\n\tassert.equal(state.x, 1);\n\tassert.deepEqual(Object.getOwnPropertyDescriptor(state, 'x'), {\n\t\tconfigurable: true,\n\t\twritable: true,\n\t\tvalue: 1,\n\t\tenumerable: true\n\t});\n\n\tassert.ok(!('x' in original));\n\tassert.deepEqual(Object.getOwnPropertyDescriptor(original, 'y'), {\n\t\tconfigurable: true,\n\t\twritable: true,\n\t\tvalue: 0,\n\t\tenumerable: true\n\t});\n\n\tassert.throws(\n\t\t() =>\n\t\t\tObject.defineProperty(state, 'x', {\n\t\t\t\tget: () => value,\n\t\t\t\tset: (v) => (value = v)\n\t\t\t}),\n\t\t/state_descriptors_fixed/\n\t);\n});\n\ntest('does not re-proxy proxies', () => {\n\tconst inner = proxy({ count: 0 });\n\tconst outer = proxy({ inner });\n\n\tassert.equal(inner.count, 0);\n\tassert.equal(outer.inner.count, 0);\n\n\tinner.count += 1;\n\n\tassert.equal(inner.count, 1);\n\tassert.equal(outer.inner.count, 1);\n});\n\ntest('deletes a property', () => {\n\tconst state = proxy({ a: 1, b: 2 } as { a?: number; b?: number; c?: number });\n\n\tdelete state.a;\n\tassert.equal(JSON.stringify(state), '{\"b\":2}');\n\tdelete state.a;\n\n\t// deleting a non-existent property should succeed\n\tdelete state.c;\n});\n\ntest('handles array.push', () => {\n\tconst original = [1, 2, 3];\n\tconst state = proxy(original);\n\n\tstate.push(4);\n\tassert.deepEqual(original.length, 3);\n\tassert.deepEqual(original, [1, 2, 3]);\n\tassert.deepEqual(state.length, 4);\n\tassert.deepEqual(state, [1, 2, 3, 4]);\n});\n\ntest('handles array mutation', () => {\n\tconst original = [1, 2, 3];\n\tconst state = proxy(original);\n\n\tstate[3] = 4;\n\tassert.deepEqual(original.length, 3);\n\tassert.deepEqual(original, [1, 2, 3]);\n\tassert.deepEqual(state.length, 4);\n\tassert.deepEqual(state, [1, 2, 3, 4]);\n});\n\ntest('handles array length mutation', () => {\n\tconst original = [1, 2, 3];\n\tconst state = proxy(original);\n\n\tstate.length = 0;\n\tassert.deepEqual(original.length, 3);\n\tassert.deepEqual(original, [1, 2, 3]);\n\tassert.deepEqual(original[0], 1);\n\tassert.deepEqual(state.length, 0);\n\tassert.deepEqual(state, []);\n\tassert.deepEqual(state[0], undefined);\n});\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/async.js",
    "content": "/** @import { Blocker, Effect, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\treactivity_loss_tracker,\n\tderived,\n\tderived_safe_equal,\n\tset_reactivity_loss_tracker\n} from './deriveds.js';\nimport { aborted } from './effects.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(sync.map(d));\n\t\treturn;\n\t}\n\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/** @param {Value[]} values */\n\tfunction finish(values) {\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn(values);\n\t\t} catch (error) {\n\t\t\tif ((parent.f & DESTROYED) === 0) {\n\t\t\t\tinvoke_error_boundary(error, parent);\n\t\t\t}\n\t\t}\n\n\t\tunset_context();\n\t}\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish(sync.map(d)));\n\t\treturn;\n\t}\n\n\tvar decrement_pending = increment_pending();\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then((result) => finish([...sync.map(d), ...result]))\n\t\t\t.catch((error) => invoke_error_boundary(error, parent))\n\t\t\t.finally(() => decrement_pending());\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(() => {\n\t\t\trestore();\n\t\t\trun();\n\t\t\tunset_context();\n\t\t});\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nexport function capture() {\n\tvar previous_effect = /** @type {Effect} */ (active_effect);\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = /** @type {Batch} */ (current_batch);\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\n\t\tif (activate_batch && (previous_effect.f & DESTROYED) === 0) {\n\t\t\t// TODO we only need optional chaining here because `{#await ...}` blocks\n\t\t\t// are anomalous. Once we retire them we can get rid of it\n\t\t\tprevious_batch?.activate();\n\t\t\tprevious_batch?.apply();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t\tset_dev_stack(previous_dev_stack);\n\t\t}\n\t};\n}\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_async_effect = reactivity_loss_tracker;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_reactivity_loss_tracker(previous_async_effect);\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t/** Whether the completion of the iterator was \"normal\", meaning it wasn't ended via `break` or a similar method */\n\tlet normal_completion = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tnormal_completion = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield value;\n\t\t}\n\t} finally {\n\t\t// If the iterator had an abrupt completion and `return` is defined on the iterator, call it and return the value\n\t\tif (!normal_completion && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context(deactivate_batch = true) {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\tif (deactivate_batch) current_batch?.deactivate();\n\n\tif (DEV) {\n\t\tset_reactivity_loss_tracker(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tconst decrement_pending = increment_pending();\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t\tunset_context();\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\tif (errored) {\n\t\t\t\t\tthrow errored.error;\n\t\t\t\t}\n\n\t\t\t\tif (aborted(active)) {\n\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t}\n\n\t\t\t\trestore();\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\t\t\tunset_context();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(() => decrement_pending());\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n\n/**\n * @returns {(skip?: boolean) => void}\n */\nexport function increment_pending() {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tvar boundary = /** @type {Boundary} */ (effect.b);\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = boundary.is_rendered();\n\n\tboundary.update_pending_count(1, batch);\n\tbatch.increment(blocking, effect);\n\n\treturn (skip = false) => {\n\t\tboundary.update_pending_count(-1, batch);\n\t\tbatch.decrement(blocking, effect, skip);\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/batch.js",
    "content": "/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tMAYBE_DIRTY,\n\tDERIVED,\n\tEAGER_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\nimport { legacy_is_updating_store } from './store.js';\nimport { invariant } from '../../shared/dev.js';\nimport { log_effect_tree } from '../dev/debug.js';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nexport let is_flushing_sync = false;\nlet is_processing = false;\n\n/**\n * During traversal, this is an array. Newly created effects are (if not immediately\n * executed) pushed to this array, rather than going through the scheduling\n * rigamarole that would cause another turn of the flush loop.\n * @type {Effect[] | null}\n */\nexport let collected_effects = null;\n\n/**\n * An array of effects that are marked during traversal as a result of a `set`\n * (not `internal_set`) call. These will be added to the next batch and\n * trigger another `batch.process()`\n * @type {Effect[] | null}\n * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n */\nexport let legacy_updates = null;\n\nvar flush_count = 0;\nvar source_stacks = DEV ? new Set() : null;\n\nlet uid = 1;\n\nexport class Batch {\n\tid = uid++;\n\n\t/**\n\t * The current values of any signals that are updated in this batch.\n\t * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Value, [any, boolean]>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Value, any>}\n\t */\n\tprevious = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_callbacks = new Set();\n\n\t/**\n\t * Async effects that are currently in flight\n\t * @type {Map<Effect, number>}\n\t */\n\t#pending = new Map();\n\n\t/**\n\t * Async effects that are currently in flight, _not_ inside a pending boundary\n\t * @type {Map<Effect, number>}\n\t */\n\t#blocking_pending = new Map();\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * The root effects that need to be flushed\n\t * @type {Effect[]}\n\t */\n\t#roots = [];\n\n\t/**\n\t * Effects created while this batch was active.\n\t * @type {Effect[]}\n\t */\n\t#new_effects = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A map of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`.\n\t * The value contains child effects that were dirty/maybe_dirty before being reset,\n\t * so they can be rescheduled if the branch survives.\n\t * @type {Map<Effect, { d: Effect[], m: Effect[] }>}\n\t */\n\t#skipped_branches = new Map();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\t/** @type {Set<Batch>} */\n\t#blockers = new Set();\n\n\t#is_deferred() {\n\t\treturn this.is_fork || this.#blocking_pending.size > 0;\n\t}\n\n\t#is_blocked() {\n\t\tfor (const batch of this.#blockers) {\n\t\t\tfor (const effect of batch.#blocking_pending.keys()) {\n\t\t\t\tvar skipped = false;\n\t\t\t\tvar e = effect;\n\n\t\t\t\twhile (e.parent !== null) {\n\t\t\t\t\tif (this.#skipped_branches.has(e)) {\n\t\t\t\t\t\tskipped = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\te = e.parent;\n\t\t\t\t}\n\n\t\t\t\tif (!skipped) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add an effect to the #skipped_branches map and reset its children\n\t * @param {Effect} effect\n\t */\n\tskip_effect(effect) {\n\t\tif (!this.#skipped_branches.has(effect)) {\n\t\t\tthis.#skipped_branches.set(effect, { d: [], m: [] });\n\t\t}\n\t}\n\n\t/**\n\t * Remove an effect from the #skipped_branches map and reschedule\n\t * any tracked dirty/maybe_dirty child effects\n\t * @param {Effect} effect\n\t */\n\tunskip_effect(effect) {\n\t\tvar tracked = this.#skipped_branches.get(effect);\n\t\tif (tracked) {\n\t\t\tthis.#skipped_branches.delete(effect);\n\n\t\t\tfor (var e of tracked.d) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\n\t\t\tfor (e of tracked.m) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\t\t}\n\t}\n\n\t#process() {\n\t\tif (flush_count++ > 1000) {\n\t\t\tbatches.delete(this);\n\t\t\tinfinite_loop_guard();\n\t\t}\n\n\t\t// we only reschedule previously-deferred effects if we expect\n\t\t// to be able to run them after processing the batch\n\t\tif (!this.#is_deferred()) {\n\t\t\tfor (const e of this.#dirty_effects) {\n\t\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\n\t\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tconst roots = this.#roots;\n\t\tthis.#roots = [];\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = (collected_effects = []);\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\t/**\n\t\t * @type {Effect[]}\n\t\t * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n\t\t */\n\t\tvar updates = (legacy_updates = []);\n\n\t\tfor (const root of roots) {\n\t\t\ttry {\n\t\t\t\tthis.#traverse(root, effects, render_effects);\n\t\t\t} catch (e) {\n\t\t\t\treset_all(root);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\t// any writes should take effect in a subsequent batch\n\t\tcurrent_batch = null;\n\n\t\tif (updates.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\t\t\tfor (const e of updates) {\n\t\t\t\tbatch.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tcollected_effects = null;\n\t\tlegacy_updates = null;\n\n\t\tif (this.#is_deferred() || this.#is_blocked()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const [e, t] of this.#skipped_branches) {\n\t\t\t\treset_branch(e, t);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.#pending.size === 0) {\n\t\t\t\tbatches.delete(this);\n\t\t\t}\n\n\t\t\t// clear effects. Those that are still needed will be rescheduled through unskipping the skipped branches.\n\t\t\tthis.#dirty_effects.clear();\n\t\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t\t// append/remove branches\n\t\t\tfor (const fn of this.#commit_callbacks) fn(this);\n\t\t\tthis.#commit_callbacks.clear();\n\n\t\t\tprevious_batch = this;\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\t\t\tprevious_batch = null;\n\n\t\t\tthis.#deferred?.resolve();\n\t\t}\n\n\t\tvar next_batch = /** @type {Batch | null} */ (/** @type {unknown} */ (current_batch));\n\n\t\t// Edge case: During traversal new branches might create effects that run immediately and set state,\n\t\t// causing an effect and therefore a root to be scheduled again. We need to traverse the current batch\n\t\t// once more in that case - most of the time this will just clean up dirty branches.\n\t\tif (this.#roots.length > 0) {\n\t\t\tconst batch = (next_batch ??= this);\n\t\t\tbatch.#roots.push(...this.#roots.filter((r) => !batch.#roots.includes(r)));\n\t\t}\n\n\t\tif (next_batch !== null) {\n\t\t\tbatches.add(next_batch);\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of this.current.keys()) {\n\t\t\t\t\t/** @type {Set<Source>} */ (source_stacks).add(source);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext_batch.#process();\n\t\t}\n\n\t\tif (!batches.has(this)) {\n\t\t\tthis.#commit();\n\t\t}\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse(root, effects, render_effects) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (effect !== null) {\n\t\t\t\tvar next = effect.next;\n\n\t\t\t\tif (next !== null) {\n\t\t\t\t\teffect = next;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\teffect = effect.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Value} source\n\t * @param {any} old_value\n\t * @param {boolean} [is_derived]\n\t */\n\tcapture(source, old_value, is_derived = false) {\n\t\tif (old_value !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, old_value);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, [source.v, is_derived]);\n\t\t\tbatch_values?.set(source, source.v);\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\tvar source_stacks = DEV ? new Set() : null;\n\n\t\ttry {\n\t\t\tis_processing = true;\n\t\t\tcurrent_batch = this;\n\n\t\t\tthis.#process();\n\t\t} finally {\n\t\t\tflush_count = 0;\n\t\t\tlast_scheduled_effect = null;\n\t\t\tcollected_effects = null;\n\t\t\tlegacy_updates = null;\n\t\t\tis_processing = false;\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = null;\n\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of /** @type {Set<Source>} */ (source_stacks)) {\n\t\t\t\t\tsource.updated = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\n\t\tbatches.delete(this);\n\t}\n\n\t/**\n\t * @param {Effect} effect\n\t */\n\tregister_created_effect(effect) {\n\t\tthis.#new_effects.push(effect);\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tfor (const batch of batches) {\n\t\t\tvar is_earlier = batch.id < this.id;\n\n\t\t\t/** @type {Source[]} */\n\t\t\tvar sources = [];\n\n\t\t\tfor (const [source, [value, is_derived]] of this.current) {\n\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\tvar batch_value = /** @type {[any, boolean]} */ (batch.current.get(source))[0]; // faster than destructuring\n\n\t\t\t\t\tif (is_earlier && value !== batch_value) {\n\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\tbatch.current.set(source, [value, is_derived]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsources.push(source);\n\t\t\t}\n\n\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches\n\t\t\tvar others = [...batch.current.keys()].filter((s) => !this.current.has(s));\n\n\t\t\tif (others.length === 0) {\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\t// this batch is now obsolete and can be discarded\n\t\t\t\t\tbatch.discard();\n\t\t\t\t}\n\t\t\t} else if (sources.length > 0) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tinvariant(batch.#roots.length === 0, 'Batch has scheduled roots');\n\t\t\t\t}\n\n\t\t\t\tbatch.activate();\n\n\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\tvar marked = new Set();\n\n\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\tvar checked = new Map();\n\n\t\t\t\tfor (var source of sources) {\n\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t}\n\n\t\t\t\tchecked = new Map();\n\t\t\t\tvar current_unequal = [...batch.current.keys()].filter((c) =>\n\t\t\t\t\tthis.current.has(c) ? /** @type {[any, boolean]} */ (this.current.get(c))[0] !== c : true\n\t\t\t\t);\n\n\t\t\t\tfor (const effect of this.#new_effects) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(effect.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 &&\n\t\t\t\t\t\tdepends_on(effect, current_unequal, checked)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ((effect.f & (ASYNC | BLOCK_EFFECT)) !== 0) {\n\t\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\t\tbatch.schedule(effect);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbatch.#dirty_effects.add(effect);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Only apply and traverse when we know we triggered async work with marking the effects\n\t\t\t\tif (batch.#roots.length > 0) {\n\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\tfor (var root of batch.#roots) {\n\t\t\t\t\t\tbatch.#traverse(root, [], []);\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.#roots = [];\n\t\t\t\t}\n\n\t\t\t\tbatch.deactivate();\n\t\t\t}\n\t\t}\n\n\t\tfor (const batch of batches) {\n\t\t\tif (batch.#blockers.has(this)) {\n\t\t\t\tbatch.#blockers.delete(this);\n\n\t\t\t\tif (batch.#blockers.size === 0 && !batch.#is_deferred()) {\n\t\t\t\t\tbatch.activate();\n\t\t\t\t\tbatch.#process();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tincrement(blocking, effect) {\n\t\tlet pending_count = this.#pending.get(effect) ?? 0;\n\t\tthis.#pending.set(effect, pending_count + 1);\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count + 1);\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t * @param {boolean} skip - whether to skip updates (because this is triggered by a stale reaction)\n\t */\n\tdecrement(blocking, effect, skip) {\n\t\tlet pending_count = this.#pending.get(effect) ?? 0;\n\n\t\tif (pending_count === 1) {\n\t\t\tthis.#pending.delete(effect);\n\t\t} else {\n\t\t\tthis.#pending.set(effect, pending_count - 1);\n\t\t}\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\n\t\t\tif (blocking_pending_count === 1) {\n\t\t\t\tthis.#blocking_pending.delete(effect);\n\t\t\t} else {\n\t\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#decrement_queued || skip) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\t\t\tthis.flush();\n\t\t});\n\t}\n\n\t/**\n\t * @param {Set<Effect>} dirty_effects\n\t * @param {Set<Effect>} maybe_dirty_effects\n\t */\n\ttransfer_effects(dirty_effects, maybe_dirty_effects) {\n\t\tfor (const e of dirty_effects) {\n\t\t\tthis.#dirty_effects.add(e);\n\t\t}\n\n\t\tfor (const e of maybe_dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.add(e);\n\t\t}\n\n\t\tdirty_effects.clear();\n\t\tmaybe_dirty_effects.clear();\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\n\t\t\tif (!is_processing) {\n\t\t\t\tbatches.add(current_batch);\n\n\t\t\t\tif (!is_flushing_sync) {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbatch.flush();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && batches.size === 1)) {\n\t\t\tbatch_values = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map();\n\t\tfor (const [source, [value]] of this.current) {\n\t\t\tbatch_values.set(source, value);\n\t\t}\n\n\t\t// ...and undo changes belonging to other batches unless they block this one\n\t\tfor (const batch of batches) {\n\t\t\tif (batch === this || batch.is_fork) continue;\n\n\t\t\t// A batch is blocked on an earlier batch if it overlaps with the earlier batch's changes but is not a superset\n\t\t\tvar intersects = false;\n\t\t\tvar differs = false;\n\n\t\t\tif (batch.id < this.id) {\n\t\t\t\tfor (const [source, [, is_derived]] of batch.current) {\n\t\t\t\t\t// Derived values don't partake in the blocking mechanism, because a derived could\n\t\t\t\t\t// be triggered in one batch already but not the other one yet, causing a false-positive\n\t\t\t\t\tif (is_derived) continue;\n\n\t\t\t\t\tintersects ||= this.current.has(source);\n\t\t\t\t\tdiffers ||= !this.current.has(source);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (intersects && differs) {\n\t\t\t\tthis.#blockers.add(batch);\n\t\t\t} else {\n\t\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\t\tbatch_values.set(source, previous);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Effect} effect\n\t */\n\tschedule(effect) {\n\t\tlast_scheduled_effect = effect;\n\n\t\t// defer render effects inside a pending boundary\n\t\t// TODO the `REACTION_RAN` check is only necessary because of legacy `$:` effects AFAICT — we can remove later\n\t\tif (\n\t\t\teffect.b?.is_pending &&\n\t\t\t(effect.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 &&\n\t\t\t(effect.f & REACTION_RAN) === 0\n\t\t) {\n\t\t\teffect.b.defer_effect(effect);\n\t\t\treturn;\n\t\t}\n\n\t\tvar e = effect;\n\n\t\twhile (e.parent !== null) {\n\t\t\te = e.parent;\n\t\t\tvar flags = e.f;\n\n\t\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t\t// updated an internal source, or because a branch is being unskipped,\n\t\t\t// bail out or we'll cause a second flush\n\t\t\tif (collected_effects !== null && e === active_effect) {\n\t\t\t\tif (async_mode_flag) return;\n\n\t\t\t\t// in sync mode, render effects run during traversal. in an extreme edge case\n\t\t\t\t// — namely that we're setting a value inside a derived read during traversal —\n\t\t\t\t// they can be made dirty after they have already been visited, in which\n\t\t\t\t// case we shouldn't bail out. we also shouldn't bail out if we're\n\t\t\t\t// updating a store inside a `$:`, since this might invalidate\n\t\t\t\t// effects that were already visited\n\t\t\t\tif (\n\t\t\t\t\t(active_reaction === null || (active_reaction.f & DERIVED) === 0) &&\n\t\t\t\t\t!legacy_is_updating_store\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\tif ((flags & CLEAN) === 0) {\n\t\t\t\t\t// branch is already dirty, bail\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.f ^= CLEAN;\n\t\t\t}\n\t\t}\n\n\t\tthis.#roots.push(e);\n\t}\n}\n\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tif (current_batch !== null && !current_batch.is_fork) {\n\t\t\t\tcurrent_batch.flush();\n\t\t\t}\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (current_batch === null) {\n\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t}\n\n\t\t\tcurrent_batch.flush();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\tif (DEV) {\n\t\tvar updates = new Map();\n\n\t\tfor (const source of /** @type {Batch} */ (current_batch).current.keys()) {\n\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\tif (!entry) {\n\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t}\n\n\t\t\t\tentry.count += update.count;\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of updates.values()) {\n\t\t\tif (update.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(update.error);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = new Set();\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (\n\t\t\t\teffect.deps === null &&\n\t\t\t\teffect.first === null &&\n\t\t\t\teffect.nodes === null &&\n\t\t\t\teffect.teardown === null &&\n\t\t\t\teffect.ac === null\n\t\t\t) {\n\t\t\t\t// remove this effect from the graph\n\t\t\t\tunlink_effect(effect);\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function schedule_effect(effect) {\n\t/** @type {Batch} */ (current_batch).schedule(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\ttry {\n\t\tflushSync(() => {\n\t\t\tfor (const version of eager_versions) {\n\t\t\t\tupdate(version);\n\t\t\t}\n\t\t});\n\t} finally {\n\t\teager_versions = [];\n\t}\n}\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar version = source(0);\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later. Tracks dirty and maybe_dirty\n * effects so they can be rescheduled if the branch survives.\n * @param {Effect} effect\n * @param {{ d: Effect[], m: Effect[] }} tracked\n */\nfunction reset_branch(effect, tracked) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tif ((effect.f & DIRTY) !== 0) {\n\t\ttracked.d.push(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\ttracked.m.push(effect);\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e, tracked);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Mark an entire effect tree clean following an error\n * @param {Effect} effect\n */\nfunction reset_all(effect) {\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_all(e);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tflushSync(fn);\n\n\t// revert state changes\n\tfor (var [source, value] of batch.previous) {\n\t\tsource.v = value;\n\t}\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batches.has(batch)) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, [value]] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.flush();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batches.has(batch)) {\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tbatches.clear();\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/deriveds.js",
    "content": "/** @import { Derived, Effect, Source } from '#client' */\n/** @import { Batch } from './batch.js'; */\n/** @import { Boundary } from '../dom/blocks/boundary.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tWAS_MARKED,\n\tDESTROYED,\n\tCLEAN,\n\tREACTION_RAN\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect,\n\tupdate_effect,\n\tremove_reactions\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport {\n\tasync_effect,\n\tdestroy_effect,\n\tdestroy_effect_children,\n\teffect_tracking,\n\tteardown\n} from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch } from './batch.js';\nimport { increment_pending, unset_context } from './async.js';\nimport { deferred, includes, noop } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/**\n * This allows us to track 'reactivity loss' that occurs when signals\n * are read after a non-context-restoring `await`. Dev-only\n * @type {{ effect: Effect, warned: boolean } | null}\n */\nexport let reactivity_loss_tracker = null;\n\n/** @param {{ effect: Effect, warned: boolean } | null} v */\nexport function set_reactivity_loss_tracker(v) {\n\treactivity_loss_tracker = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, label, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Map<Batch, ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Map();\n\n\tasync_effect(() => {\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = {\n\t\t\t\teffect: /** @type {Effect} */ (active_effect),\n\t\t\t\twarned: false\n\t\t\t};\n\t\t}\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn()).then(d.resolve, d.reject).finally(unset_context);\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = null;\n\t\t}\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\t// we only increment the batch's pending state for updates, not creation, otherwise\n\t\t\t// we will decrement to zero before the work that depends on this promise (e.g. a\n\t\t\t// template effect) has initialized, causing the batch to resolve prematurely\n\t\t\tif ((effect.f & REACTION_RAN) !== 0) {\n\t\t\t\tvar decrement_pending = increment_pending();\n\t\t\t}\n\n\t\t\tif (/** @type {Boundary} */ (parent.b).is_rendered()) {\n\t\t\t\tdeferreds.get(batch)?.reject(STALE_REACTION);\n\t\t\t\tdeferreds.delete(batch); // delete to ensure correct order in Map iteration below\n\t\t\t} else {\n\t\t\t\t// While the boundary is still showing pending, a new run supersedes all older in-flight runs\n\t\t\t\t// for this async expression. Cancel eagerly so resolution cannot commit stale values.\n\t\t\t\tfor (const d of deferreds.values()) {\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\t\t\t\tdeferreds.clear();\n\t\t\t}\n\n\t\t\tdeferreds.set(batch, d);\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tif (DEV) {\n\t\t\t\treactivity_loss_tracker = null;\n\t\t\t}\n\n\t\t\tif (decrement_pending) {\n\t\t\t\t// don't trigger an update if we're only here because\n\t\t\t\t// the promise was superseded before it could resolve\n\t\t\t\tvar skip = error === STALE_REACTION;\n\t\t\t\tdecrement_pending(skip);\n\t\t\t}\n\n\t\t\tif (error === STALE_REACTION || (effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\tinternal_set(signal, error);\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\n\t\t\t\t// All prior async derived runs are now stale\n\t\t\t\tfor (const [b, d] of deferreds) {\n\t\t\t\t\tdeferreds.delete(b);\n\t\t\t\t\tif (b === batch) break;\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.deactivate();\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds.values()) {\n\t\t\td.reject(STALE_REACTION);\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tif (!async_mode_flag) push_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\t// The original parent effect might've been destroyed but the derived\n\t\t\t// is used elsewhere now - do not return the destroyed effect in that case\n\t\t\treturn (parent.f & DESTROYED) === 0 ? /** @type {Effect} */ (parent) : null;\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar old_value = derived.v;\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tderived.v = value;\n\t\t\tcurrent_batch?.capture(derived, old_value, true);\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function freeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect has a teardown function or abort signal, call it\n\t\tif (e.teardown || e.ac) {\n\t\t\te.teardown?.();\n\t\t\te.ac?.abort(STALE_REACTION);\n\n\t\t\t// make it a noop so it doesn't get called again if the derived\n\t\t\t// is unfrozen. we don't set it to `null`, because the existence\n\t\t\t// of a teardown function is what determines whether the\n\t\t\t// effect runs again during unfreezing\n\t\t\te.teardown = noop;\n\t\t\te.ac = null;\n\n\t\t\tremove_reactions(e, 0);\n\t\t\tdestroy_effect_children(e);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function unfreeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect was previously frozen — indicated by the presence\n\t\t// of a teardown function — unfreeze it\n\t\tif (e.teardown) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/effects.js",
    "content": "/** @import { Blocker, ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tuntrack,\n\tuntracking,\n\tset_active_effect\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tREACTION_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT,\n\tDESTROYING\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, collected_effects, current_batch } from './batch.js';\nimport { flatten, increment_pending } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @returns {Effect}\n */\nfunction create_effect(type, fn) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes: null,\n\t\tf: type | DIRTY | CONNECTED,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tcurrent_batch?.register_created_effect(effect);\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\tif ((type & EFFECT) !== 0) {\n\t\tif (collected_effects !== null) {\n\t\t\t// created during traversal — collect and run afterwards\n\t\t\tcollected_effects.push(effect);\n\t\t} else {\n\t\t\t// schedule for later\n\t\t\tBatch.ensure().schedule(effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// if an effect doesn't need to be kept in the tree (because it\n\t\t// won't re-run, has no DOM, and has no teardown etc)\n\t\t// then we skip it and go to its child (if any)\n\t\tif (\n\t\t\te.deps === null &&\n\t\t\te.teardown === null &&\n\t\t\te.nodes === null &&\n\t\t\te.first === e.last && // either `null`, or a singular child\n\t\t\t(e.f & EFFECT_PRESERVED) === 0\n\t\t) {\n\t\t\te = e.first;\n\t\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(e);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & REACTION_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t// here, we lie: by setting `active_effect` to be the parent branch, any writes\n\t\t// that happen inside `fn` will _not_ cause an unnecessary reschedule, because\n\t\t// the affected effects will be children of `active_effect`. this is safe\n\t\t// because these effects are known to run in the correct order\n\t\ttry {\n\t\t\tset_active_effect(effect.parent);\n\t\t\tuntrack(fn);\n\t\t} finally {\n\t\t\tset_active_effect(effect);\n\t\t}\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0 && effect.deps !== null) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => fn(...values.map(get)));\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tif (async.length > 0 || blockers.length > 0) {\n\t\tvar decrement_pending = increment_pending();\n\t}\n\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)));\n\n\t\tif (decrement_pending) {\n\t\t\tdecrement_pending();\n\t\t}\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes !== null &&\n\t\teffect.nodes.end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\tremoved = true;\n\t}\n\n\tset_signal_status(effect, DESTROYING);\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\teffect.f ^= DESTROYING;\n\teffect.f |= DESTROYED;\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes =\n\t\teffect.ac =\n\t\teffect.b =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent =\n\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tBatch.ensure().schedule(effect); // Assumption: This happens during the commit phase of the batch, causing another flush, but it's safe\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/equality.js",
    "content": "/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/props.js",
    "content": "/** @import { Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\nimport { effect, render_effect } from './effects.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tlet setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\t/** @type {V} */\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (people could access props in a timeout)\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/sources.js",
    "content": "/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC,\n\tWAS_MARKED,\n\tCONNECTED\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { includes } from '../../shared/utils.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\teager_block_effects,\n\tschedule_effect,\n\tlegacy_updates\n} from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<any>} */\nexport let eager_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_error('created at');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !includes.call(current_sources, source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value, legacy_updates);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {Effect[] | null} [updated_during_traversal]\n * @returns {V}\n */\nexport function internal_set(source, value, updated_during_traversal = null) {\n\tif (!source.equals(value)) {\n\t\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tconst derived = /** @type {Derived} */ (source);\n\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(derived);\n\t\t\t}\n\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tif (batch_values === null) {\n\t\t\t\tupdate_derived_status(derived);\n\t\t\t}\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tmark_reactions(source, DIRTY, updated_during_traversal);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tif (is_dirty(effect)) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\t// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @param {Effect[] | null} updated_during_traversal\n * @returns {void}\n */\nfunction mark_reactions(signal, status, updated_during_traversal) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & EAGER_EFFECT) !== 0) {\n\t\t\teager_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\n\t\t\tif ((flags & WAS_MARKED) === 0) {\n\t\t\t\t// Only connected deriveds can be reliably unmarked right away\n\t\t\t\tif (flags & CONNECTED) {\n\t\t\t\t\treaction.f |= WAS_MARKED;\n\t\t\t\t}\n\n\t\t\t\tmark_reactions(derived, MAYBE_DIRTY, updated_during_traversal);\n\t\t\t}\n\t\t} else if (not_dirty) {\n\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(effect);\n\t\t\t}\n\n\t\t\tif (updated_during_traversal !== null) {\n\t\t\t\tupdated_during_traversal.push(effect);\n\t\t\t} else {\n\t\t\t\tschedule_effect(effect);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/status.js",
    "content": "/** @import { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/store.js",
    "content": "/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { get as get_store } from '../../../store/shared/index.js';\nimport { define_property, noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\nimport { DEV } from 'esm-env';\n\n/**\n * We set this to `true` when updating a store so that we correctly\n * schedule effects if the update takes place inside a `$:` effect\n */\nexport let legacy_is_updating_store = false;\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\nlet IS_UNMOUNTED = Symbol();\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (DEV) {\n\t\tentry.source.label = store_name;\n\t}\n\n\t// if the component that setup this is already unmounted we don't want to register a subscription\n\tif (entry.store !== store && !(IS_UNMOUNTED in stores)) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\t// if the component that setup this stores is already unmounted the source will be out of sync\n\t// so we just use the `get` for the stores, less performant but it avoids to create a memory leak\n\t// and it will keep the value consistent\n\tif (store && IS_UNMOUNTED in stores) {\n\t\treturn get_store(store);\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {[StoreReferencesContainer, ()=>void]}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tfunction cleanup() {\n\t\tteardown(() => {\n\t\t\tfor (var store_name in stores) {\n\t\t\t\tconst ref = stores[store_name];\n\t\t\t\tref.unsubscribe();\n\t\t\t}\n\t\t\tdefine_property(stores, IS_UNMOUNTED, {\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t});\n\t}\n\n\treturn [stores, cleanup];\n}\n\n/**\n * @param {Store<V>} store\n * @param {V} value\n * @template V\n */\nfunction update_with_flag(store, value) {\n\tlegacy_is_updating_store = true;\n\n\ttry {\n\t\tstore.set(value);\n\t} finally {\n\t\tlegacy_is_updating_store = false;\n\t}\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store  the store to update\n * @param {any} expression  the expression that mutates the store\n * @param {V} new_value  the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tupdate_with_flag(store, new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tupdate_with_flag(store, store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/types.d.ts",
    "content": "import type {\n\tAnimationManager,\n\tComponentContext,\n\tDevStackEntry,\n\tEquals,\n\tTemplateNode,\n\tTransitionManager\n} from '#client';\nimport type { Boundary } from '../dom/blocks/boundary';\n\nexport interface Signal {\n\t/** Flags bitmask */\n\tf: number;\n\t/** Write version */\n\twv: number;\n}\n\nexport interface Value<V = unknown> extends Signal {\n\t/** Equality function */\n\tequals: Equals;\n\t/** Signals that read from this signal */\n\treactions: null | Reaction[];\n\t/** Read version */\n\trv: number;\n\t/** The latest value for this signal */\n\tv: V;\n\n\t// dev-only\n\t/** A label (e.g. the `foo` in `let foo = $state(...)`) used for `$inspect.trace()` */\n\tlabel?: string;\n\t/** An error with a stack trace showing when the source was created */\n\tcreated?: Error | null;\n\t/** An map of errors with stack traces showing when the source was updated, keyed by the stack trace */\n\tupdated?: Map<string, { error: Error; count: number }> | null;\n\t/**\n\t * Whether or not the source was set while running an effect — if so, we need to\n\t * increment the write version so that it shows up as dirty when the effect re-runs\n\t */\n\tset_during_effect?: boolean;\n\t/** A function that retrieves the underlying source, used for each block item signals */\n\ttrace?: null | (() => void);\n}\n\nexport interface Reaction extends Signal {\n\t/** The associated component context */\n\tctx: null | ComponentContext;\n\t/** The reaction function */\n\tfn: null | Function;\n\t/** Signals that this signal reads from */\n\tdeps: null | Value[];\n\t/** An AbortController that aborts when the signal is destroyed */\n\tac: null | AbortController;\n}\n\nexport interface Derived<V = unknown> extends Value<V>, Reaction {\n\t/** The derived function */\n\tfn: () => V;\n\t/** Effects created inside this signal. Used to destroy those effects when the derived reruns or is cleaned up */\n\teffects: null | Effect[];\n\t/** Parent effect or derived */\n\tparent: Effect | Derived | null;\n}\n\nexport interface EffectNodes {\n\tstart: TemplateNode;\n\tend: TemplateNode | null;\n\t/** $.animation */\n\ta: AnimationManager | null;\n\t/** $.transition */\n\tt: TransitionManager[] | null;\n}\n\nexport interface Effect extends Reaction {\n\t/**\n\t * Branch effects store their start/end nodes so that they can be\n\t * removed when the effect is destroyed, or moved when an `each`\n\t * block is reconciled. In the case of a single text/element node,\n\t * `start` and `end` will be the same.\n\t */\n\tnodes: null | EffectNodes;\n\t/** The effect function */\n\tfn: null | (() => void | (() => void));\n\t/** The teardown function returned from the effect function */\n\tteardown: null | (() => void);\n\t/** Next sibling child effect created inside the parent signal */\n\tprev: null | Effect;\n\t/** Next sibling child effect created inside the parent signal */\n\tnext: null | Effect;\n\t/** First child effect created inside this signal */\n\tfirst: null | Effect;\n\t/** Last child effect created inside this signal */\n\tlast: null | Effect;\n\t/** Parent effect */\n\tparent: Effect | null;\n\t/** The boundary this effect belongs to */\n\tb: Boundary | null;\n\t/** Dev only */\n\tcomponent_function?: any;\n\t/** Dev only. Only set for certain block effects. Contains a reference to the stack that represents the render tree */\n\tdev_stack?: DevStackEntry | null;\n}\n\nexport type Source<V = unknown> = Value<V>;\n\nexport type MaybeSource<T = unknown> = T | Source<T>;\n\nexport interface Blocker {\n\tpromise: Promise<any>;\n\tsettled: boolean;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/reactivity/utils.js",
    "content": "/** @import { Derived, Effect, Value } from '#client' */\nimport { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Value[] | null} deps\n */\nfunction clear_marked(deps) {\n\tif (deps === null) return;\n\n\tfor (const dep of deps) {\n\t\tif ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdep.f ^= WAS_MARKED;\n\n\t\tclear_marked(/** @type {Derived} */ (dep).deps);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// Since we're not executing these effects now, we need to clear any WAS_MARKED flags\n\t// so that other batches can correctly reach these effects during their own traversal\n\tclear_marked(effect.deps);\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/render.js",
    "content": "/** @import { ComponentContext, Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE, STATE_SYMBOL } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? `${value}` : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = `${str}`;\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = get_first_child(target);\n\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = get_next_sibling(anchor);\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tset_hydrating(false);\n\n\t\treturn /**  @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occurred above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t}\n}\n\n/** @type {Map<EventTarget, Map<string, number>>} */\nconst listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(\n\tComponent,\n\t{ target, anchor, props = {}, events, context, intro = true, transformError }\n) {\n\tinit_operations();\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tif (context) ctx.c = context;\n\n\t\t\t\tif (events) {\n\t\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpop();\n\t\t\t},\n\t\t\ttransformError\n\t\t);\n\n\t\t// Setup event delegation _after_ component is mounted - if an error would happen during mount, it would otherwise not be cleaned up\n\t\t/** @type {Set<string>} */\n\t\tvar registered_events = new Set();\n\n\t\t/** @param {Array<string>} events */\n\t\tvar event_handle = (events) => {\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tvar event_name = events[i];\n\n\t\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\t\tregistered_events.add(event_name);\n\n\t\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t\t// Add the event listener to both the container and the document.\n\t\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t\t// the outer content stops propagation of the event.\n\t\t\t\t//\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = listeners.get(node);\n\n\t\t\t\t\tif (counts === undefined) {\n\t\t\t\t\t\tcounts = new Map();\n\t\t\t\t\t\tlisteners.set(node, counts);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar count = counts.get(event_name);\n\n\t\t\t\t\tif (count === undefined) {\n\t\t\t\t\t\tnode.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\t\t\tcounts.set(event_name, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tevent_handle(array_from(all_registered_events));\n\t\troot_event_handles.add(event_handle);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = /** @type {Map<string, number>} */ (listeners.get(node));\n\t\t\t\t\tvar count = /** @type {number} */ (counts.get(event_name));\n\n\t\t\t\t\tif (--count == 0) {\n\t\t\t\t\t\tnode.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\t\tcounts.delete(event_name);\n\n\t\t\t\t\t\tif (counts.size === 0) {\n\t\t\t\t\t\t\tlisteners.delete(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tif (STATE_SYMBOL in component) {\n\t\t\tw.state_proxy_unmount();\n\t\t} else {\n\t\t\tw.lifecycle_double_unmount();\n\t\t}\n\t}\n\n\treturn Promise.resolve();\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/runtime.js",
    "content": "/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tWAS_MARKED,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\treactivity_loss_tracker,\n\texecute_derived,\n\tfreeze_derived_effects,\n\trecent_async_deriveds,\n\tunfreeze_derived_effects,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tschedule_effect\n} from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\nimport * as w from './warnings.js';\n\nlet is_updating_effect = false;\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif (flags & DERIVED) {\n\t\treaction.f &= ~WAS_MARKED;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources !== null && includes.call(current_sources, signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\treaction.f |= REACTION_RAN;\n\t\tvar deps = reaction.deps;\n\n\t\t// Don't remove reactions during fork;\n\t\t// they must remain for when fork is discarded\n\t\tvar is_fork = current_batch?.is_fork;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tif (!is_fork) {\n\t\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\t}\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!is_fork && deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected and remove the mark flag, as it cannot be reliably removed otherwise\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t}\n\n\t\tupdate_derived_status(derived);\n\n\t\t// freeze any effects inside this derived\n\t\tfreeze_derived_effects(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tremove_reactions(derived, 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = true;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// we're adding a dependency outside the init/update cycle\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!includes.call(reactions, active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\tif (\n\t\t\t!untracking &&\n\t\t\treactivity_loss_tracker &&\n\t\t\t!reactivity_loss_tracker.warned &&\n\t\t\t(reactivity_loss_tracker.effect.f & REACTION_IS_UPDATING) === 0\n\t\t) {\n\t\t\treactivity_loss_tracker.warned = true;\n\n\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\tvar trace = get_error('traced at');\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tif (trace) console.warn(trace);\n\t\t}\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\ttrace = get_error('traced at');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t// connect disconnected deriveds if we are reading them inside an effect,\n\t\t// or inside another derived that is already connected\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(is_updating_effect || (active_reaction.f & CONNECTED) !== 0);\n\n\t\tvar is_new = (derived.f & REACTION_RAN) === 0;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\tunfreeze_derived_effects(derived);\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tderived.f |= CONNECTED;\n\n\tif (derived.deps === null) return;\n\n\tfor (const dep of derived.deps) {\n\t\t(dep.reactions ??= []).push(derived);\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\tunfreeze_derived_effects(/** @type {Derived} */ (dep));\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n *   // this will run when `data` changes, but not when `time` changes\n *   save(data, {\n *     timestamp: untrack(() => time)\n *   });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/timing.js",
    "content": "/** @import { Raf } from '#client' */\nimport { noop } from '../shared/utils.js';\n\nimport { BROWSER } from 'esm-env';\n\nconst now = BROWSER ? () => performance.now() : () => Date.now();\n\n/** @type {Raf} */\nexport const raf = {\n\t// don't access requestAnimationFrame eagerly outside method\n\t// this allows basic testing of user code without JSDOM\n\t// bunder will eval and remove ternary when the user's app is built\n\ttick: /** @param {any} _ */ (_) => (BROWSER ? requestAnimationFrame : noop)(_),\n\tnow: () => now(),\n\ttasks: new Set()\n};\n"
  },
  {
    "path": "packages/svelte/src/internal/client/types.d.ts",
    "content": "import type { Store } from '#shared';\nimport { STATE_SYMBOL } from './constants.js';\nimport type { Batch } from './reactivity/batch.js';\nimport type { Effect, Source, Value } from './reactivity/types.js';\n\ndeclare global {\n\tinterface Window {\n\t\t__svelte?: {\n\t\t\t/** hydratables */\n\t\t\th?: Map<string, unknown>;\n\t\t};\n\t}\n}\n\ntype EventCallback = (event: Event) => boolean;\nexport type EventCallbackMap = Record<string, EventCallback | EventCallback[]>;\n\n// For all the core internal objects, we use single-character property strings.\n// This not only reduces code-size and parsing, but it also improves the performance\n// when the JS VM JITs the code.\n\nexport type ComponentContext = {\n\t/** parent */\n\tp: null | ComponentContext;\n\t/** context */\n\tc: null | Map<unknown, unknown>;\n\t/** deferred effects */\n\te: null | Array<() => void | (() => void)>;\n\t/** True if initialized, i.e. pop() ran */\n\ti: boolean;\n\t/**\n\t * props — needed for legacy mode lifecycle functions, and for `createEventDispatcher`\n\t * @deprecated remove in 6.0\n\t */\n\ts: Record<string, unknown>;\n\t/**\n\t * exports (and props, if `accessors: true`) — needed for `createEventDispatcher`\n\t * @deprecated remove in 6.0\n\t */\n\tx: Record<string, any> | null;\n\t/**\n\t * The parent effect of this component\n\t * TODO 6.0 this is used to control `bind:this` timing that might change,\n\t * in which case we can remove this property\n\t */\n\tr: Effect;\n\t/**\n\t * legacy stuff\n\t * @deprecated remove in 6.0\n\t */\n\tl: null | {\n\t\t/** local signals (needed for beforeUpdate/afterUpdate) */\n\t\ts: null | Source[];\n\t\t/** update_callbacks */\n\t\tu: null | {\n\t\t\t/** afterUpdate callbacks */\n\t\t\ta: Array<() => void>;\n\t\t\t/** beforeUpdate callbacks */\n\t\t\tb: Array<() => void>;\n\t\t\t/** onMount callbacks */\n\t\t\tm: Array<() => any>;\n\t\t};\n\t\t/** `$:` statements */\n\t\t$: any[];\n\t};\n\t/**\n\t * dev mode only: the component function\n\t */\n\tfunction?: any;\n};\n\nexport type ComponentContextLegacy = ComponentContext & {\n\tl: NonNullable<ComponentContext['l']>;\n};\n\nexport type Equals = (this: Value, value: unknown) => boolean;\n\nexport type TemplateNode = Text | Element | Comment;\n\nexport type Dom = TemplateNode | TemplateNode[];\n\nexport type EachOutroGroup = {\n\tpending: Set<Effect>;\n\tdone: Set<Effect>;\n};\n\nexport type EachState = {\n\t/** the each block effect */\n\teffect: Effect;\n\t/** flags */\n\tflags: number;\n\t/** a key -> item lookup */\n\titems: Map<any, EachItem>;\n\t/** a batch -> keys lookup of all keys that are still needed */\n\tpending: Map<Batch, Set<any>>;\n\t/** all outro groups that this item is a part of */\n\toutrogroups: Set<EachOutroGroup> | null;\n\t/** `{:else}` effect */\n\tfallback: Effect | null;\n};\n\nexport type EachItem = {\n\t/** value */\n\tv: Source<any> | null;\n\t/** index */\n\ti: Source<number> | null;\n\t/** effect */\n\te: Effect;\n};\n\nexport interface TransitionManager {\n\t/** Whether the `global` modifier was used (i.e. `transition:fade|global`) */\n\tis_global: boolean;\n\t/** Called inside `resume_effect` */\n\tin: () => void;\n\t/** Called inside `pause_effect` */\n\tout: (callback?: () => void) => void;\n\t/** Called inside `destroy_effect` */\n\tstop: () => void;\n}\n\nexport interface AnimationManager {\n\t/** An element with an `animate:` directive */\n\telement: Element;\n\t/** Called during keyed each block reconciliation, before updates */\n\tmeasure: () => void;\n\t/** Called during keyed each block reconciliation, after updates — this triggers the animation */\n\tapply: () => void;\n\t/** Fix the element position, so that siblings can move to the correct destination */\n\tfix: () => void;\n\t/** Unfix the element position if the outro is aborted */\n\tunfix: () => void;\n}\n\nexport interface Animation {\n\t/** Abort the animation */\n\tabort: () => void;\n\t/** Allow the animation to continue running, but remove any callback. This prevents the removal of an outroing block if the corresponding intro has a `delay` */\n\tdeactivate: () => void;\n\t/** Resets an animation to its starting state, if it uses `tick`. Exposed as a separate method so that an aborted `out:` can still reset even if the `outro` had already completed */\n\treset: () => void;\n\t/** Get the `t` value (between `0` and `1`) of the animation, so that its counterpart can start from the right place */\n\tt: () => number;\n}\n\nexport type TransitionFn<P> = (\n\telement: Element,\n\tprops: P,\n\toptions: { direction?: 'in' | 'out' | 'both' }\n) => AnimationConfig | ((options: { direction?: 'in' | 'out' }) => AnimationConfig);\n\nexport type AnimateFn<P> = (\n\telement: Element,\n\trects: { from: DOMRect; to: DOMRect },\n\tprops: P\n) => AnimationConfig;\n\nexport type AnimationConfig = {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: (t: number) => number;\n\tcss?: (t: number, u: number) => string;\n\ttick?: (t: number, u: number) => string;\n};\n\nexport type StoreReferencesContainer = Record<\n\tstring,\n\t{\n\t\tstore: Store<any> | null;\n\t\tunsubscribe: Function;\n\t\tsource: Source<any>;\n\t}\n>;\n\nexport type ActionPayload<P> = { destroy?: () => void; update?: (value: P) => void };\n\nexport type Raf = {\n\t/** Alias for `requestAnimationFrame`, exposed in such a way that we can override in tests */\n\ttick: (callback: (time: DOMHighResTimeStamp) => void) => any;\n\t/** Alias for `performance.now()`, exposed in such a way that we can override in tests */\n\tnow: () => number;\n\t/** A set of tasks that will run to completion, unless aborted */\n\ttasks: Set<TaskEntry>;\n};\n\nexport interface Task {\n\tabort(): void;\n\tpromise: Promise<void>;\n}\n\nexport type TaskCallback = (now: number) => boolean | void;\n\nexport type TaskEntry = { c: TaskCallback; f: () => void };\n\nexport type ProxyStateObject<T = Record<string | symbol, any>> = T & {\n\t[STATE_SYMBOL]: T;\n};\n\nexport type SourceLocation =\n\t| [line: number, column: number]\n\t| [line: number, column: number, SourceLocation[]];\n\nexport interface DevStackEntry {\n\tfile: string;\n\ttype: 'component' | 'if' | 'each' | 'await' | 'key' | 'render';\n\tline: number;\n\tcolumn: number;\n\tparent: DevStackEntry | null;\n\tcomponentTag?: string;\n}\n\nexport * from './reactivity/types';\n"
  },
  {
    "path": "packages/svelte/src/internal/client/validate.js",
    "content": "/** @import { Blocker } from '#client' */\nimport { dev_current_component_function } from './context.js';\nimport { FILENAME } from '../../constants.js';\nimport { render_effect } from './reactivity/effects.js';\nimport * as w from './warnings.js';\nimport { capture_store_binding } from './reactivity/store.js';\nimport { run_after_blockers } from './reactivity/async.js';\n\n/**\n * @param {string} binding\n * @param {Blocker[]} blockers\n * @param {() => Record<string, any>} get_object\n * @param {() => string} get_property\n * @param {number} line\n * @param {number} column\n */\nexport function validate_binding(binding, blockers, get_object, get_property, line, column) {\n\trun_after_blockers(blockers, () => {\n\t\tvar warned = false;\n\n\t\tvar filename = dev_current_component_function?.[FILENAME];\n\n\t\trender_effect(() => {\n\t\t\tif (warned) return;\n\n\t\t\tvar [object, is_store_sub] = capture_store_binding(get_object);\n\n\t\t\tif (is_store_sub) return;\n\n\t\t\tvar property = get_property();\n\n\t\t\tvar ran = false;\n\n\t\t\t// by making the (possibly false, but it would be an extreme edge case) assumption\n\t\t\t// that a getter has a corresponding setter, we can determine if a property is\n\t\t\t// reactive by seeing if this effect has dependencies\n\t\t\tvar effect = render_effect(() => {\n\t\t\t\tif (ran) return;\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\t\tobject[property];\n\t\t\t});\n\n\t\t\tran = true;\n\n\t\t\tif (effect.deps === null) {\n\t\t\t\tvar location = `${filename}:${line}:${column}`;\n\t\t\t\tw.binding_property_non_reactive(binding, location);\n\n\t\t\t\twarned = true;\n\t\t\t}\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/client/warnings.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}"
  },
  {
    "path": "packages/svelte/src/internal/disclose-version.js",
    "content": "import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/flags/async.js",
    "content": "import { enable_async_mode_flag } from './index.js';\n\nenable_async_mode_flag();\n"
  },
  {
    "path": "packages/svelte/src/internal/flags/index.js",
    "content": "/** True if experimental.async=true */\nexport let async_mode_flag = false;\n/** True if we're not certain that we only have Svelte 5 code in the compilation */\nexport let legacy_mode_flag = false;\n/** True if $inspect.trace is used */\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/flags/legacy.js",
    "content": "import { enable_legacy_mode_flag } from './index.js';\n\nenable_legacy_mode_flag();\n"
  },
  {
    "path": "packages/svelte/src/internal/flags/tracing.js",
    "content": "import { enable_tracing_mode_flag } from './index.js';\n\nenable_tracing_mode_flag();\n"
  },
  {
    "path": "packages/svelte/src/internal/index.js",
    "content": "// TODO we may, on a best-effort basis, reimplement some of the legacy private APIs here so that certain libraries continue to work. Those APIs will be marked as deprecated (and should noisily warn the user) and will be removed in a future version of Svelte.\n\nthrow new Error(\n\t`Your application, or one of its dependencies, imported from 'svelte/internal', which was a private module used by Svelte 4 components that no longer exists in Svelte 5. It is not intended to be public API. If you're a library author and you used 'svelte/internal' deliberately, please raise an issue on https://github.com/sveltejs/svelte/issues detailing your use case.`\n);\n"
  },
  {
    "path": "packages/svelte/src/internal/server/abort-signal.js",
    "content": "import { STALE_REACTION } from '#client/constants';\n\n/** @type {AbortController | null} */\nlet controller = null;\n\nexport function abort() {\n\tcontroller?.abort(STALE_REACTION);\n\tcontroller = null;\n}\n\nexport function getAbortSignal() {\n\treturn (controller ??= new AbortController()).signal;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/blocks/html.js",
    "content": "import { DEV } from 'esm-env';\nimport { hash } from '../../../utils.js';\n\n/**\n * @param {string} value\n */\nexport function html(value) {\n\tvar html = String(value ?? '');\n\tvar open = DEV ? `<!--${hash(html)}-->` : '<!---->';\n\treturn open + html + '<!---->';\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/blocks/snippet.js",
    "content": "/** @import { Snippet } from 'svelte' */\n/** @import { Renderer } from '../renderer' */\n/** @import { Getters } from '#shared' */\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n *   render: () => string\n *   setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {Renderer} */ renderer, /** @type {Params} */ ...args) => {\n\t\tvar getters = /** @type {Getters<Params>} */ (args.map((value) => () => value));\n\t\trenderer.push(\n\t\t\tfn(...getters)\n\t\t\t\t.render()\n\t\t\t\t.trim()\n\t\t);\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/context.js",
    "content": "/** @import { SSRContext } from '#server' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\n\n/** @type {SSRContext | null} */\nexport var ssr_context = null;\n\n/** @param {SSRContext | null} v */\nexport function set_ssr_context(v) {\n\tssr_context = v;\n}\n\n/**\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\n}\n\n/**\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\n\treturn result;\n}\n\n/**\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_or_init_context_map('setContext').set(key, context);\n\treturn context;\n}\n\n/**\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_or_init_context_map('hasContext').has(key);\n}\n\n/** @returns {Map<any, any>} */\nexport function getAllContexts() {\n\treturn get_or_init_context_map('getAllContexts');\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (ssr_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (ssr_context.c ??= new Map(get_parent_context(ssr_context) || undefined));\n}\n\n/**\n * @param {Function} [fn]\n */\nexport function push(fn) {\n\tssr_context = { p: ssr_context, c: null, r: null };\n\n\tif (DEV) {\n\t\tssr_context.function = fn;\n\t\tssr_context.element = ssr_context.p?.element;\n\t}\n}\n\nexport function pop() {\n\tssr_context = /** @type {SSRContext} */ (ssr_context).p;\n}\n\n/**\n * @param {SSRContext} ssr_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(ssr_context) {\n\tlet parent = ssr_context.p;\n\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\n\treturn null;\n}\n\n/**\n * Wraps an `await` expression in such a way that the component context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b()` becomes `(await $.save(a))() + b()`, meaning `b()` will have access\n * to the context of its component.\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar previous_context = ssr_context;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tssr_context = previous_context;\n\t\treturn value;\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/crypto.js",
    "content": "import { BROWSER } from 'esm-env';\n\nlet text_encoder;\n// TODO - remove this and use global `crypto` when we drop Node 18\nlet crypto;\n\n/** @param {string} module_name */\nconst obfuscated_import = (module_name) => import(/* @vite-ignore */ module_name);\n\n/** @param {string} data */\nexport async function sha256(data) {\n\ttext_encoder ??= new TextEncoder();\n\n\t// @ts-expect-error\n\tcrypto ??= globalThis.crypto?.subtle?.digest\n\t\t? globalThis.crypto\n\t\t: // @ts-ignore - we don't install node types in the prod build\n\t\t\t// don't use import('node:crypto') directly because static analysers will think we rely on node when we don't\n\t\t\t(await obfuscated_import('node:crypto')).webcrypto;\n\n\tconst hash_buffer = await crypto.subtle.digest('SHA-256', text_encoder.encode(data));\n\n\treturn base64_encode(hash_buffer);\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nexport function base64_encode(bytes) {\n\t// Using `Buffer` is faster than iterating\n\t// @ts-ignore\n\tif (!BROWSER && globalThis.Buffer) {\n\t\t// @ts-ignore\n\t\treturn globalThis.Buffer.from(bytes).toString('base64');\n\t}\n\n\tlet binary = '';\n\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbinary += String.fromCharCode(bytes[i]);\n\t}\n\n\treturn btoa(binary);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/crypto.test.ts",
    "content": "import { assert, test } from 'vitest';\nimport { sha256 } from './crypto.js';\n\nconst inputs = [\n\t['hello world', 'uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek='],\n\t['', '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='],\n\t['abcd', 'iNQmb9TmM40TuEX88olXnSCciXgjuSF9o+Fhk28DFYk='],\n\t['the quick brown fox jumps over the lazy dog', 'Bcbgjx2f2voDFH/Lj4LxJMdtL3Dj2Ynciq2159dFC+w='],\n\t['工欲善其事，必先利其器', 'oPOthkQ1c5BbPpvrr5WlUBJPyD5e6JeVdWcqBs9zvjA=']\n];\n\ntest.each(inputs)('sha256(\"%s\")', async (input, expected) => {\n\tconst actual = await sha256(input);\n\tassert.equal(actual, expected);\n});\n"
  },
  {
    "path": "packages/svelte/src/internal/server/dev.js",
    "content": "/** @import { SSRContext } from '#server' */\nimport { FILENAME } from '../../constants.js';\nimport {\n\tis_tag_valid_with_ancestor,\n\tis_tag_valid_with_parent\n} from '../../html-tree-validation.js';\nimport { get_stack } from '../shared/dev.js';\nimport { set_ssr_context, ssr_context } from './context.js';\nimport * as e from './errors.js';\nimport { Renderer } from './renderer.js';\n\n// TODO move this\n/**\n * @typedef {{\n * \ttag: string;\n * \tparent: undefined | Element;\n *  filename: undefined | string;\n *  line: number;\n *  column: number;\n * }} Element\n */\n\n/**\n * This is exported so that it can be cleared between tests\n * @type {Set<string>}\n */\nexport let seen;\n\n/**\n * @param {Renderer} renderer\n * @param {string} message\n */\nfunction print_error(renderer, message) {\n\tmessage =\n\t\t`node_invalid_placement_ssr: ${message}\\n\\n` +\n\t\t'This can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.';\n\n\tif ((seen ??= new Set()).has(message)) return;\n\tseen.add(message);\n\n\t// eslint-disable-next-line no-console\n\tconsole.error(message);\n\trenderer.head((r) =>\n\t\tr.push(\n\t\t\t// ensure that `</script>` can't leak in to the script contents\n\t\t\t`<script>console.error(${JSON.stringify(message).replaceAll('</', '<\\\\u002f')})</script>`\n\t\t)\n\t);\n}\n\n/**\n * @param {Renderer} renderer\n * @param {string} tag\n * @param {number} line\n * @param {number} column\n */\nexport function push_element(renderer, tag, line, column) {\n\tvar context = /** @type {SSRContext} */ (ssr_context);\n\tvar filename = context.function[FILENAME];\n\tvar parent = context.element;\n\tvar element = { tag, parent, filename, line, column };\n\n\tif (parent !== undefined) {\n\t\tvar ancestor = parent.parent;\n\t\tvar ancestors = [parent.tag];\n\n\t\tconst child_loc = filename ? `${filename}:${line}:${column}` : undefined;\n\t\tconst parent_loc = parent.filename\n\t\t\t? `${parent.filename}:${parent.line}:${parent.column}`\n\t\t\t: undefined;\n\n\t\tconst message = is_tag_valid_with_parent(tag, parent.tag, child_loc, parent_loc);\n\t\tif (message) print_error(renderer, message);\n\n\t\twhile (ancestor != null) {\n\t\t\tancestors.push(ancestor.tag);\n\t\t\tconst ancestor_loc = ancestor.filename\n\t\t\t\t? `${ancestor.filename}:${ancestor.line}:${ancestor.column}`\n\t\t\t\t: undefined;\n\n\t\t\tconst message = is_tag_valid_with_ancestor(tag, ancestors, child_loc, ancestor_loc);\n\t\t\tif (message) print_error(renderer, message);\n\n\t\t\tancestor = ancestor.parent;\n\t\t}\n\t}\n\n\tset_ssr_context({ ...context, p: context, element });\n}\n\nexport function pop_element() {\n\tset_ssr_context(/** @type {SSRContext} */ (ssr_context).p);\n}\n\n/**\n * @param {Renderer} renderer\n */\nexport function validate_snippet_args(renderer) {\n\tif (\n\t\ttypeof renderer !== 'object' ||\n\t\t// for some reason typescript consider the type of renderer as never after the first instanceof\n\t\t!(renderer instanceof Renderer)\n\t) {\n\t\te.invalid_snippet_arguments();\n\t}\n}\n\nexport function get_user_code_location() {\n\tconst stack = get_stack();\n\n\treturn stack\n\t\t.filter((line) => line.trim().startsWith('at '))\n\t\t.map((line) => line.replace(/\\((.*):\\d+:\\d+\\)$/, (_, file) => `(${file})`))\n\t\t.join('\\n');\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/errors.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nexport *  from '../shared/errors.js';\n\n/**\n * The node API `AsyncLocalStorage` is not available, but is required to use async server rendering.\n * @returns {never}\n */\nexport function async_local_storage_unavailable() {\n\tconst error = new Error(`async_local_storage_unavailable\\nThe node API \\`AsyncLocalStorage\\` is not available, but is required to use async server rendering.\\nhttps://svelte.dev/e/async_local_storage_unavailable`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * Encountered asynchronous work while rendering synchronously.\n * @returns {never}\n */\nexport function await_invalid() {\n\tconst error = new Error(`await_invalid\\nEncountered asynchronous work while rendering synchronously.\\nhttps://svelte.dev/e/await_invalid`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * `<svelte:element this=\"%tag%\">` is not a valid element name — the element will not be rendered\n * @param {string} tag\n * @returns {never}\n */\nexport function dynamic_element_invalid_tag(tag) {\n\tconst error = new Error(`dynamic_element_invalid_tag\\n\\`<svelte:element this=\"${tag}\">\\` is not a valid element name — the element will not be rendered\\nhttps://svelte.dev/e/dynamic_element_invalid_tag`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * The `html` property of server render results has been deprecated. Use `body` instead.\n * @returns {never}\n */\nexport function html_deprecated() {\n\tconst error = new Error(`html_deprecated\\nThe \\`html\\` property of server render results has been deprecated. Use \\`body\\` instead.\\nhttps://svelte.dev/e/html_deprecated`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * Attempted to set `hydratable` with key `%key%` twice with different values.\n * \n * %stack%\n * @param {string} key\n * @param {string} stack\n * @returns {never}\n */\nexport function hydratable_clobbering(key, stack) {\n\tconst error = new Error(`hydratable_clobbering\\nAttempted to set \\`hydratable\\` with key \\`${key}\\` twice with different values.\n\n${stack}\\nhttps://svelte.dev/e/hydratable_clobbering`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * Failed to serialize `hydratable` data for key `%key%`.\n * \n * `hydratable` can serialize anything [`uneval` from `devalue`](https://npmjs.com/package/uneval) can, plus Promises.\n * \n * Cause:\n * %stack%\n * @param {string} key\n * @param {string} stack\n * @returns {never}\n */\nexport function hydratable_serialization_failed(key, stack) {\n\tconst error = new Error(`hydratable_serialization_failed\\nFailed to serialize \\`hydratable\\` data for key \\`${key}\\`.\n\n\\`hydratable\\` can serialize anything [\\`uneval\\` from \\`devalue\\`](https://npmjs.com/package/uneval) can, plus Promises.\n\nCause:\n${stack}\\nhttps://svelte.dev/e/hydratable_serialization_failed`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously.\n * @returns {never}\n */\nexport function invalid_csp() {\n\tconst error = new Error(`invalid_csp\\n\\`csp.nonce\\` was set while \\`csp.hash\\` was \\`true\\`. These options cannot be used simultaneously.\\nhttps://svelte.dev/e/invalid_csp`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * The `idPrefix` option cannot include `--`.\n * @returns {never}\n */\nexport function invalid_id_prefix() {\n\tconst error = new Error(`invalid_id_prefix\\nThe \\`idPrefix\\` option cannot include \\`--\\`.\\nhttps://svelte.dev/e/invalid_id_prefix`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * `%name%(...)` is not available on the server\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_function_unavailable(name) {\n\tconst error = new Error(`lifecycle_function_unavailable\\n\\`${name}(...)\\` is not available on the server\\nhttps://svelte.dev/e/lifecycle_function_unavailable`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}\n\n/**\n * Could not resolve `render` context.\n * @returns {never}\n */\nexport function server_context_required() {\n\tconst error = new Error(`server_context_required\\nCould not resolve \\`render\\` context.\\nhttps://svelte.dev/e/server_context_required`);\n\n\terror.name = 'Svelte error';\n\n\tthrow error;\n}"
  },
  {
    "path": "packages/svelte/src/internal/server/hydratable.js",
    "content": "/** @import { HydratableLookupEntry } from '#server' */\nimport { async_mode_flag } from '../flags/index.js';\nimport { get_render_context } from './render-context.js';\nimport * as e from './errors.js';\nimport * as devalue from 'devalue';\nimport { get_stack } from '../shared/dev.js';\nimport { DEV } from 'esm-env';\nimport { get_user_code_location } from './dev.js';\n\n/**\n * @template T\n * @param {string} key\n * @param {() => T} fn\n * @returns {T}\n */\nexport function hydratable(key, fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('hydratable');\n\t}\n\n\tconst { hydratable } = get_render_context();\n\n\tlet entry = hydratable.lookup.get(key);\n\n\tif (entry !== undefined) {\n\t\tif (DEV) {\n\t\t\tconst comparison = compare(key, entry, encode(key, fn()));\n\t\t\tcomparison.catch(() => {});\n\t\t\thydratable.comparisons.push(comparison);\n\t\t}\n\n\t\treturn /** @type {T} */ (entry.value);\n\t}\n\n\tconst value = fn();\n\n\tentry = encode(key, value, hydratable.unresolved_promises);\n\thydratable.lookup.set(key, entry);\n\n\treturn value;\n}\n\n/**\n * @param {string} key\n * @param {any} value\n * @param {Map<Promise<any>, string>} [unresolved]\n */\nfunction encode(key, value, unresolved) {\n\t/** @type {HydratableLookupEntry} */\n\tconst entry = { value, serialized: '' };\n\n\tif (DEV) {\n\t\tentry.stack = get_user_code_location();\n\t}\n\n\tlet uid = 1;\n\n\tentry.serialized = devalue.uneval(entry.value, (value, uneval) => {\n\t\tif (is_promise(value)) {\n\t\t\t// we serialize promises as `\"${i}\"`, because it's impossible for that string\n\t\t\t// to occur 'naturally' (since the quote marks would have to be escaped)\n\t\t\t// this placeholder is returned synchronously from `uneval`, which includes it in the\n\t\t\t// serialized string. Later (at least one microtask from now), when `p.then` runs, it'll\n\t\t\t// be replaced.\n\t\t\tconst placeholder = `\"${uid++}\"`;\n\t\t\tconst p = value\n\t\t\t\t.then((v) => {\n\t\t\t\t\tentry.serialized = entry.serialized.replace(placeholder, `r(${uneval(v)})`);\n\t\t\t\t})\n\t\t\t\t.catch((devalue_error) =>\n\t\t\t\t\te.hydratable_serialization_failed(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tserialization_stack(entry.stack, devalue_error?.stack)\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\tunresolved?.set(p, key);\n\t\t\t// prevent unhandled rejections from crashing the server, track which promises are still resolving when render is complete\n\t\t\tp.catch(() => {}).finally(() => unresolved?.delete(p));\n\n\t\t\t(entry.promises ??= []).push(p);\n\t\t\treturn placeholder;\n\t\t}\n\t});\n\n\treturn entry;\n}\n\n/**\n * @param {any} value\n * @returns {value is Promise<any>}\n */\nfunction is_promise(value) {\n\t// we use this check rather than `instanceof Promise`\n\t// because it works cross-realm\n\treturn Object.prototype.toString.call(value) === '[object Promise]';\n}\n\n/**\n * @param {string} key\n * @param {HydratableLookupEntry} a\n * @param {HydratableLookupEntry} b\n */\nasync function compare(key, a, b) {\n\t// note: these need to be loops (as opposed to Promise.all) because\n\t// additional promises can get pushed to them while we're awaiting\n\t// an earlier one\n\tfor (const p of a?.promises ?? []) {\n\t\tawait p;\n\t}\n\n\tfor (const p of b?.promises ?? []) {\n\t\tawait p;\n\t}\n\n\tif (a.serialized !== b.serialized) {\n\t\tconst a_stack = /** @type {string} */ (a.stack);\n\t\tconst b_stack = /** @type {string} */ (b.stack);\n\n\t\tconst stack =\n\t\t\ta_stack === b_stack\n\t\t\t\t? `Occurred at:\\n${a_stack}`\n\t\t\t\t: `First occurrence at:\\n${a_stack}\\n\\nSecond occurrence at:\\n${b_stack}`;\n\n\t\te.hydratable_clobbering(key, stack);\n\t}\n}\n\n/**\n * @param {string | undefined} root_stack\n * @param {string | undefined} uneval_stack\n */\nfunction serialization_stack(root_stack, uneval_stack) {\n\tlet out = '';\n\tif (root_stack) {\n\t\tout += root_stack + '\\n';\n\t}\n\tif (uneval_stack) {\n\t\tout += 'Caused by:\\n' + uneval_stack + '\\n';\n\t}\n\treturn out || '<missing stack trace>';\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/hydration.js",
    "content": "import { HYDRATION_END, HYDRATION_START, HYDRATION_START_ELSE } from '../../constants.js';\n\nexport const BLOCK_OPEN = `<!--${HYDRATION_START}-->`;\nexport const BLOCK_OPEN_ELSE = `<!--${HYDRATION_START_ELSE}-->`;\nexport const BLOCK_CLOSE = `<!--${HYDRATION_END}-->`;\nexport const EMPTY_COMMENT = `<!---->`;\n"
  },
  {
    "path": "packages/svelte/src/internal/server/index.js",
    "content": "/** @import { ComponentType, SvelteComponent, Component } from 'svelte' */\n/** @import { Csp, RenderOutput } from '#server' */\n/** @import { Store } from '#shared' */\nexport { FILENAME, HMR } from '../../constants.js';\nimport { attr, clsx, to_class, to_style } from '../shared/attributes.js';\nimport { is_promise, noop } from '../shared/utils.js';\nimport { subscribe_to_store } from '../../store/utils.js';\nimport {\n\tUNINITIALIZED,\n\tELEMENT_PRESERVE_ATTRIBUTE_CASE,\n\tELEMENT_IS_NAMESPACED,\n\tELEMENT_IS_INPUT\n} from '../../constants.js';\nimport { escape_html } from '../../escaping.js';\nimport { DEV } from 'esm-env';\nimport { EMPTY_COMMENT, BLOCK_OPEN, BLOCK_OPEN_ELSE } from './hydration.js';\nimport { validate_store } from '../shared/validate.js';\nimport {\n\tis_boolean_attribute,\n\tis_raw_text_element,\n\tis_void,\n\tREGEX_VALID_TAG_NAME\n} from '../../utils.js';\nimport { Renderer } from './renderer.js';\nimport * as e from './errors.js';\nimport { ssr_context } from './context.js';\n\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nconst INVALID_ATTR_NAME_CHAR_REGEX =\n\t/[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n\n/**\n * @param {Renderer} renderer\n * @param {string} tag\n * @param {() => void} attributes_fn\n * @param {() => void} children_fn\n * @returns {void}\n */\nexport function element(renderer, tag, attributes_fn = noop, children_fn = noop) {\n\trenderer.push('<!---->');\n\n\tif (tag) {\n\t\tif (!REGEX_VALID_TAG_NAME.test(tag)) {\n\t\t\te.dynamic_element_invalid_tag(tag);\n\t\t}\n\t\trenderer.push(`<${tag}`);\n\t\tattributes_fn();\n\t\trenderer.push(`>`);\n\n\t\tif (!is_void(tag)) {\n\t\t\tchildren_fn();\n\t\t\tif (!is_raw_text_element(tag)) {\n\t\t\t\trenderer.push(EMPTY_COMMENT);\n\t\t\t}\n\t\t\trenderer.push(`</${tag}>`);\n\t\t}\n\t}\n\n\trenderer.push('<!---->');\n}\n\n/**\n * Only available on the server and when compiling with the `server` option.\n * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.\n * @template {Record<string, any>} Props\n * @param {Component<Props> | ComponentType<SvelteComponent<Props>>} component\n * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp; transformError?: (error: unknown) => unknown }} [options]\n * @returns {RenderOutput}\n */\nexport function render(component, options = {}) {\n\tif (options.csp?.hash && options.csp.nonce) {\n\t\te.invalid_csp();\n\t}\n\treturn Renderer.render(/** @type {Component<Props>} */ (component), options);\n}\n\n/**\n * @param {string} hash\n * @param {Renderer} renderer\n * @param {(renderer: Renderer) => Promise<void> | void} fn\n * @returns {void}\n */\nexport function head(hash, renderer, fn) {\n\trenderer.head((renderer) => {\n\t\trenderer.push(`<!--${hash}-->`);\n\t\trenderer.child(fn);\n\t\trenderer.push(EMPTY_COMMENT);\n\t});\n}\n\n/**\n * @param {Renderer} renderer\n * @param {boolean} is_html\n * @param {Record<string, string>} props\n * @param {() => void} component\n * @param {boolean} dynamic\n * @returns {void}\n */\nexport function css_props(renderer, is_html, props, component, dynamic = false) {\n\tconst styles = style_object_to_string(props);\n\n\tif (is_html) {\n\t\trenderer.push(`<svelte-css-wrapper style=\"display: contents; ${styles}\">`);\n\t} else {\n\t\trenderer.push(`<g style=\"${styles}\">`);\n\t}\n\n\tcomponent();\n\n\tif (!dynamic) {\n\t\trenderer.push('<!---->');\n\t}\n\n\tif (is_html) {\n\t\trenderer.push('</svelte-css-wrapper>');\n\t} else {\n\t\trenderer.push('</g>');\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} attrs\n * @param {string} [css_hash]\n * @param {Record<string, boolean>} [classes]\n * @param {Record<string, string>} [styles]\n * @param {number} [flags]\n * @returns {string}\n */\nexport function attributes(attrs, css_hash, classes, styles, flags = 0) {\n\tif (styles) {\n\t\tattrs.style = to_style(attrs.style, styles);\n\t}\n\n\tif (attrs.class) {\n\t\tattrs.class = clsx(attrs.class);\n\t}\n\n\tif (css_hash || classes) {\n\t\tattrs.class = to_class(attrs.class, css_hash, classes);\n\t}\n\n\tlet attr_str = '';\n\tlet name;\n\n\tconst is_html = (flags & ELEMENT_IS_NAMESPACED) === 0;\n\tconst lowercase = (flags & ELEMENT_PRESERVE_ATTRIBUTE_CASE) === 0;\n\tconst is_input = (flags & ELEMENT_IS_INPUT) !== 0;\n\n\tfor (name of Object.keys(attrs)) {\n\t\t// omit functions, internal svelte properties and invalid attribute names\n\t\tif (typeof attrs[name] === 'function') continue;\n\t\tif (name[0] === '$' && name[1] === '$') continue; // faster than name.startsWith('$$')\n\t\tif (INVALID_ATTR_NAME_CHAR_REGEX.test(name)) continue;\n\n\t\tvar value = attrs[name];\n\t\tvar lower = name.toLowerCase();\n\n\t\tif (lowercase) name = lower;\n\n\t\t// omit event handler attributes\n\t\tif (lower.length > 2 && lower.startsWith('on')) continue;\n\n\t\tif (is_input) {\n\t\t\tif (name === 'defaultvalue' || name === 'defaultchecked') {\n\t\t\t\tname = name === 'defaultvalue' ? 'value' : 'checked';\n\t\t\t\tif (attrs[name]) continue;\n\t\t\t}\n\t\t}\n\n\t\tattr_str += attr(name, value, is_html && is_boolean_attribute(name));\n\t}\n\n\treturn attr_str;\n}\n\n/**\n * @param {Record<string, unknown>[]} props\n * @returns {Record<string, unknown>}\n */\nexport function spread_props(props) {\n\t/** @type {Record<string, unknown>} */\n\tconst merged_props = {};\n\tlet key;\n\n\tfor (let i = 0; i < props.length; i++) {\n\t\tconst obj = props[i];\n\t\tif (obj == null) continue;\n\t\tfor (key of Object.keys(obj)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(obj, key);\n\t\t\tif (desc) {\n\t\t\t\tObject.defineProperty(merged_props, key, desc);\n\t\t\t} else {\n\t\t\t\tmerged_props[key] = obj[key];\n\t\t\t}\n\t\t}\n\t}\n\treturn merged_props;\n}\n\n/**\n * @param {unknown} value\n * @returns {string}\n */\nexport function stringify(value) {\n\treturn typeof value === 'string' ? value : value == null ? '' : value + '';\n}\n\n/** @param {Record<string, string>} style_object */\nfunction style_object_to_string(style_object) {\n\treturn Object.keys(style_object)\n\t\t.filter(/** @param {any} key */ (key) => style_object[key] != null && style_object[key] !== '')\n\t\t.map(/** @param {any} key */ (key) => `${key}: ${escape_html(style_object[key], true)};`)\n\t\t.join(' ');\n}\n\n/**\n * @param {any} value\n * @param {string | undefined} [hash]\n * @param {Record<string, boolean>} [directives]\n */\nexport function attr_class(value, hash, directives) {\n\tvar result = to_class(value, hash, directives);\n\treturn result ? ` class=\"${escape_html(result, true)}\"` : '';\n}\n\n/**\n * @param {any} value\n * @param {Record<string,any>|[Record<string,any>,Record<string,any>]} [directives]\n */\nexport function attr_style(value, directives) {\n\tvar result = to_style(value, directives);\n\treturn result ? ` style=\"${escape_html(result, true)}\"` : '';\n}\n\n/**\n * @template V\n * @param {Record<string, [any, any, any]>} store_values\n * @param {string} store_name\n * @param {Store<V> | null | undefined} store\n * @returns {V}\n */\nexport function store_get(store_values, store_name, store) {\n\tif (DEV) {\n\t\tvalidate_store(store, store_name.slice(1));\n\t}\n\n\t// it could be that someone eagerly updates the store in the instance script, so\n\t// we should only reuse the store value in the template\n\tif (store_name in store_values && store_values[store_name][0] === store) {\n\t\treturn store_values[store_name][2];\n\t}\n\n\tstore_values[store_name]?.[1](); // if store was switched, unsubscribe from old store\n\tstore_values[store_name] = [store, null, undefined];\n\tconst unsub = subscribe_to_store(\n\t\tstore,\n\t\t/** @param {any} v */ (v) => (store_values[store_name][2] = v)\n\t);\n\tstore_values[store_name][1] = unsub;\n\treturn store_values[store_name][2];\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * Updates a store with a new value.\n * @template V\n * @param {Record<string, [any, any, any]>} store_values\n * @param {string} store_name\n * @param {Store<V>} store\n * @param {any} expression\n */\nexport function store_mutate(store_values, store_name, store, expression) {\n\tstore_set(store, store_get(store_values, store_name, store));\n\treturn expression;\n}\n\n/**\n * @param {Record<string, [any, any, any]>} store_values\n * @param {string} store_name\n * @param {Store<number>} store\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store_values, store_name, store, d = 1) {\n\tlet store_value = store_get(store_values, store_name, store);\n\tstore.set(store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Record<string, [any, any, any]>} store_values\n * @param {string} store_name\n * @param {Store<number>} store\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store_pre(store_values, store_name, store, d = 1) {\n\tconst value = store_get(store_values, store_name, store) + d;\n\tstore.set(value);\n\treturn value;\n}\n\n/** @param {Record<string, [any, any, any]>} store_values */\nexport function unsubscribe_stores(store_values) {\n\tfor (const store_name of Object.keys(store_values)) {\n\t\tstore_values[store_name][1]();\n\t}\n}\n\n/**\n * @param {Renderer} renderer\n * @param {Record<string, any>} $$props\n * @param {string} name\n * @param {Record<string, unknown>} slot_props\n * @param {null | (() => void)} fallback_fn\n * @returns {void}\n */\nexport function slot(renderer, $$props, name, slot_props, fallback_fn) {\n\tvar slot_fn = $$props.$$slots?.[name];\n\t// Interop: Can use snippets to fill slots\n\tif (slot_fn === true) {\n\t\tslot_fn = $$props[name === 'default' ? 'children' : name];\n\t}\n\n\tif (slot_fn !== undefined) {\n\t\tslot_fn(renderer, slot_props);\n\t} else {\n\t\tfallback_fn?.();\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} rest\n * @returns {Record<string, unknown>}\n */\nexport function rest_props(props, rest) {\n\t/** @type {Record<string, unknown>} */\n\tconst rest_props = {};\n\tlet key;\n\tfor (key of Object.keys(props)) {\n\t\tif (!rest.includes(key)) {\n\t\t\trest_props[key] = props[key];\n\t\t}\n\t}\n\treturn rest_props;\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @returns {Record<string, unknown>}\n */\nexport function sanitize_props(props) {\n\tconst { children, $$slots, ...sanitized } = props;\n\treturn sanitized;\n}\n\n/**\n * @param {Record<string, any>} props\n * @returns {Record<string, boolean>}\n */\nexport function sanitize_slots(props) {\n\t/** @type {Record<string, boolean>} */\n\tconst sanitized = {};\n\tif (props.children) sanitized.default = true;\n\tfor (const key of Object.keys(props.$$slots || {})) {\n\t\tsanitized[key] = true;\n\t}\n\treturn sanitized;\n}\n\n/**\n * Legacy mode: If the prop has a fallback and is bound in the\n * parent component, propagate the fallback value upwards.\n * @param {Record<string, unknown>} props_parent\n * @param {Record<string, unknown>} props_now\n */\nexport function bind_props(props_parent, props_now) {\n\tfor (const key of Object.keys(props_now)) {\n\t\tconst initial_value = props_parent[key];\n\t\tconst value = props_now[key];\n\t\tif (\n\t\t\tinitial_value === undefined &&\n\t\t\tvalue !== undefined &&\n\t\t\tObject.getOwnPropertyDescriptor(props_parent, key)?.set\n\t\t) {\n\t\t\tprops_parent[key] = value;\n\t\t}\n\t}\n}\n\n/**\n * @template V\n * @param {Renderer} renderer\n * @param {Promise<V>} promise\n * @param {null | (() => void)} pending_fn\n * @param {(value: V) => void} then_fn\n * @returns {void}\n */\nfunction await_block(renderer, promise, pending_fn, then_fn) {\n\tif (is_promise(promise)) {\n\t\trenderer.push(BLOCK_OPEN);\n\t\tpromise.then(null, noop);\n\t\tif (pending_fn !== null) {\n\t\t\tpending_fn();\n\t\t}\n\t} else if (then_fn !== null) {\n\t\trenderer.push(BLOCK_OPEN_ELSE);\n\t\tthen_fn(promise);\n\t}\n}\n\nexport { await_block as await };\n\n/** @param {any} array_like_or_iterator */\nexport function ensure_array_like(array_like_or_iterator) {\n\tif (array_like_or_iterator) {\n\t\treturn array_like_or_iterator.length !== undefined\n\t\t\t? array_like_or_iterator\n\t\t\t: Array.from(array_like_or_iterator);\n\t}\n\treturn [];\n}\n\n/**\n * @template V\n * @param {() => V} get_value\n */\nexport function once(get_value) {\n\tlet value = /** @type {V} */ (UNINITIALIZED);\n\treturn () => {\n\t\tif (value === UNINITIALIZED) {\n\t\t\tvalue = get_value();\n\t\t}\n\t\treturn value;\n\t};\n}\n\n/**\n * Create an unique ID\n * @param {Renderer} renderer\n * @returns {string}\n */\nexport function props_id(renderer) {\n\tconst uid = renderer.global.uid();\n\trenderer.push('<!--$' + uid + '-->');\n\treturn uid;\n}\n\nexport { attr, clsx };\n\nexport { html } from './blocks/html.js';\n\nexport { save } from './context.js';\n\nexport { push_element, pop_element, validate_snippet_args } from './dev.js';\n\nexport { snapshot } from '../shared/clone.js';\n\nexport { fallback, to_array, exclude_from_object } from '../shared/utils.js';\n\nexport {\n\tinvalid_default_snippet,\n\tvalidate_dynamic_element_tag,\n\tvalidate_void_dynamic_element,\n\tprevent_snippet_stringification\n} from '../shared/validate.js';\n\nexport { escape_html as escape };\n\n/**\n * @template T\n * @param {()=>T} fn\n * @returns {(new_value?: T) => (T | void)}\n */\nexport function derived(fn) {\n\t// deriveds created during render are memoized,\n\t// deriveds created outside (e.g. SvelteKit `page` stuff) are not\n\tconst get_value = ssr_context === null ? fn : once(fn);\n\n\t/** @type {T | undefined} */\n\tlet updated_value;\n\n\treturn function (new_value) {\n\t\tif (arguments.length === 0) {\n\t\t\treturn updated_value ?? get_value();\n\t\t}\n\n\t\tupdated_value = new_value;\n\t\treturn updated_value;\n\t};\n}\n\n/**\n * @template {number | bigint} T\n * @param {(value?: T) => T} derived\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_derived(derived, d = 1) {\n\tconst value = derived();\n\tlet increase = typeof value === 'bigint' ? BigInt(d) : d;\n\t// for some reason TS is mad even if T is always number or bigint\n\tderived(value + /** @type {*} */ (increase));\n\treturn value;\n}\n\n/**\n * @template {number | bigint} T\n * @param {(value?: T) => T} derived\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_derived_pre(derived, d = 1) {\n\tconst old_value = derived();\n\tlet increase = typeof old_value === 'bigint' ? BigInt(d) : d;\n\t// for some reason TS is mad even if T is always number or bigint\n\tconst value = old_value + /** @type {*} */ (increase);\n\tderived(value);\n\treturn value;\n}\n\n/**\n * @template T\n * @param {()=>T} fn\n */\nexport function async_derived(fn) {\n\treturn Promise.resolve(fn()).then((value) => {\n\t\treturn () => value;\n\t});\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/render-context.js",
    "content": "// @ts-ignore -- we don't include node types in the production build\n/** @import { AsyncLocalStorage } from 'node:async_hooks' */\n/** @import { RenderContext } from '#server' */\n\nimport { deferred, noop } from '../shared/utils.js';\nimport * as e from './errors.js';\n\n/** @type {Promise<void> | null} */\nlet current_render = null;\n\n/** @type {RenderContext | null} */\nlet context = null;\n\n/** @returns {RenderContext} */\nexport function get_render_context() {\n\tconst store = context ?? als?.getStore();\n\n\tif (!store) {\n\t\te.server_context_required();\n\t}\n\n\treturn store;\n}\n\n/**\n * @template T\n * @param {() => Promise<T>} fn\n * @returns {Promise<T>}\n */\nexport async function with_render_context(fn) {\n\tcontext = {\n\t\thydratable: {\n\t\t\tlookup: new Map(),\n\t\t\tcomparisons: [],\n\t\t\tunresolved_promises: new Map()\n\t\t}\n\t};\n\n\tif (in_webcontainer()) {\n\t\tconst { promise, resolve } = deferred();\n\t\tconst previous_render = current_render;\n\t\tcurrent_render = promise;\n\t\tawait previous_render;\n\t\treturn fn().finally(resolve);\n\t}\n\n\ttry {\n\t\tif (als === null) {\n\t\t\te.async_local_storage_unavailable();\n\t\t}\n\t\treturn als.run(context, fn);\n\t} finally {\n\t\tcontext = null;\n\t}\n}\n\n/** @type {AsyncLocalStorage<RenderContext | null> | null} */\nlet als = null;\n/** @type {Promise<void> | null} */\nlet als_import = null;\n\n/**\n *\n * @returns {Promise<void>}\n */\nexport function init_render_context() {\n\t// It's important the right side of this assignment can run a maximum of one time\n\t// otherwise it's possible for a very, very well-timed race condition to assign to `als`\n\t// at the beginning of a render, and then another render to assign to it again, which causes\n\t// the first render's second half to use a new instance of `als` which doesn't have its\n\t// context anymore.\n\t// @ts-ignore -- we don't include node types in the production build\n\tals_import ??= import('node:async_hooks')\n\t\t.then((hooks) => {\n\t\t\tals = new hooks.AsyncLocalStorage();\n\t\t})\n\t\t.then(noop, noop);\n\treturn als_import;\n}\n\n// this has to be a function because rollup won't treeshake it if it's a constant\nfunction in_webcontainer() {\n\t// @ts-ignore -- this will fail when we run typecheck because we exclude node types\n\t// eslint-disable-next-line n/prefer-global/process\n\treturn !!globalThis.process?.versions?.webcontainer;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/renderer.js",
    "content": "/** @import { Component } from 'svelte' */\n/** @import { Csp, HydratableContext, RenderOutput, SSRContext, SyncRenderOutput, Sha256Source } from './types.js' */\n/** @import { MaybePromise } from '#shared' */\nimport { async_mode_flag } from '../flags/index.js';\nimport { abort } from './abort-signal.js';\nimport { pop, push, set_ssr_context, ssr_context } from './context.js';\nimport * as e from './errors.js';\nimport * as w from './warnings.js';\nimport { BLOCK_CLOSE, BLOCK_OPEN } from './hydration.js';\nimport { HYDRATION_START_FAILED } from '../../constants.js';\nimport { attributes } from './index.js';\nimport { get_render_context, with_render_context, init_render_context } from './render-context.js';\nimport { sha256 } from './crypto.js';\nimport * as devalue from 'devalue';\nimport { has_own_property, noop } from '../shared/utils.js';\nimport { escape_html } from '../../escaping.js';\n\n/** @typedef {'head' | 'body'} RendererType */\n/** @typedef {{ [key in RendererType]: string }} AccumulatedContent */\n\n/**\n * @typedef {string | Renderer} RendererItem\n */\n\n/**\n * Renderers are basically a tree of `string | Renderer`s, where each `Renderer` in the tree represents\n * work that may or may not have completed. A renderer can be {@link collect}ed to aggregate the\n * content from itself and all of its children, but this will throw if any of the children are\n * performing asynchronous work. To asynchronously collect a renderer, just `await` it.\n *\n * The `string` values within a renderer are always associated with the {@link type} of that renderer. To switch types,\n * call {@link child} with a different `type` argument.\n */\nexport class Renderer {\n\t/**\n\t * The contents of the renderer.\n\t * @type {RendererItem[]}\n\t */\n\t#out = [];\n\n\t/**\n\t * Any `onDestroy` callbacks registered during execution of this renderer.\n\t * @type {(() => void)[] | undefined}\n\t */\n\t#on_destroy = undefined;\n\n\t/**\n\t * Whether this renderer is a component body.\n\t * @type {boolean}\n\t */\n\t#is_component_body = false;\n\n\t/**\n\t * If set, this renderer is an error boundary. When async collection\n\t * of the children fails, the failed snippet is rendered instead.\n\t * @type {{\n\t * \tfailed: (renderer: Renderer, error: unknown, reset: () => void) => void;\n\t * \ttransformError: (error: unknown) => unknown;\n\t * \tcontext: SSRContext | null;\n\t * } | null}\n\t */\n\t#boundary = null;\n\n\t/**\n\t * The type of string content that this renderer is accumulating.\n\t * @type {RendererType}\n\t */\n\ttype;\n\n\t/** @type {Renderer | undefined} */\n\t#parent;\n\n\t/**\n\t * Asynchronous work associated with this renderer\n\t * @type {Promise<void> | undefined}\n\t */\n\tpromise = undefined;\n\n\t/**\n\t * State which is associated with the content tree as a whole.\n\t * It will be re-exposed, uncopied, on all children.\n\t * @type {SSRState}\n\t * @readonly\n\t */\n\tglobal;\n\n\t/**\n\t * State that is local to the branch it is declared in.\n\t * It will be shallow-copied to all children.\n\t *\n\t * @type {{ select_value: string | undefined }}\n\t */\n\tlocal;\n\n\t/**\n\t * @param {SSRState} global\n\t * @param {Renderer | undefined} [parent]\n\t */\n\tconstructor(global, parent) {\n\t\tthis.#parent = parent;\n\n\t\tthis.global = global;\n\t\tthis.local = parent ? { ...parent.local } : { select_value: undefined };\n\t\tthis.type = parent ? parent.type : 'body';\n\t}\n\n\t/**\n\t * @param {(renderer: Renderer) => void} fn\n\t */\n\thead(fn) {\n\t\tconst head = new Renderer(this.global, this);\n\t\thead.type = 'head';\n\n\t\tthis.#out.push(head);\n\t\thead.child(fn);\n\t}\n\n\t/**\n\t * @param {Array<Promise<void>>} blockers\n\t * @param {(renderer: Renderer) => void} fn\n\t */\n\tasync_block(blockers, fn) {\n\t\tthis.#out.push(BLOCK_OPEN);\n\t\tthis.async(blockers, fn);\n\t\tthis.#out.push(BLOCK_CLOSE);\n\t}\n\n\t/**\n\t * @param {Array<Promise<void>>} blockers\n\t * @param {(renderer: Renderer) => void} fn\n\t */\n\tasync(blockers, fn) {\n\t\tlet callback = fn;\n\n\t\tif (blockers.length > 0) {\n\t\t\tconst context = ssr_context;\n\n\t\t\tcallback = (renderer) => {\n\t\t\t\treturn Promise.all(blockers).then(() => {\n\t\t\t\t\tconst previous_context = ssr_context;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tset_ssr_context(context);\n\t\t\t\t\t\treturn fn(renderer);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tset_ssr_context(previous_context);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tthis.child(callback);\n\t}\n\n\t/**\n\t * @param {Array<() => void>} thunks\n\t */\n\trun(thunks) {\n\t\tconst context = ssr_context;\n\n\t\tlet promise = Promise.resolve(thunks[0]());\n\t\tconst promises = [promise];\n\n\t\tfor (const fn of thunks.slice(1)) {\n\t\t\tpromise = promise.then(() => {\n\t\t\t\tconst previous_context = ssr_context;\n\t\t\t\tset_ssr_context(context);\n\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tset_ssr_context(previous_context);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tpromises.push(promise);\n\t\t}\n\n\t\t// prevent unhandled rejections, and attach the promise to the renderer instance\n\t\t// so that rejections correctly cause rendering to fail\n\t\tpromise.catch(noop);\n\t\tthis.promise = promise;\n\n\t\treturn promises;\n\t}\n\n\t/**\n\t * @param {(renderer: Renderer) => MaybePromise<void>} fn\n\t */\n\tchild_block(fn) {\n\t\tthis.#out.push(BLOCK_OPEN);\n\t\tthis.child(fn);\n\t\tthis.#out.push(BLOCK_CLOSE);\n\t}\n\n\t/**\n\t * Create a child renderer. The child renderer inherits the state from the parent,\n\t * but has its own content.\n\t * @param {(renderer: Renderer) => MaybePromise<void>} fn\n\t */\n\tchild(fn) {\n\t\tconst child = new Renderer(this.global, this);\n\t\tthis.#out.push(child);\n\n\t\tconst parent = ssr_context;\n\n\t\tset_ssr_context({\n\t\t\t...ssr_context,\n\t\t\tp: parent,\n\t\t\tc: null,\n\t\t\tr: child\n\t\t});\n\n\t\tconst result = fn(child);\n\n\t\tset_ssr_context(parent);\n\n\t\tif (result instanceof Promise) {\n\t\t\t// catch to avoid unhandled promise rejections - we'll end up throwing in `collect_async` if something fails\n\t\t\tresult.catch(noop);\n\t\t\tresult.finally(() => set_ssr_context(null)).catch(noop);\n\n\t\t\tif (child.global.mode === 'sync') {\n\t\t\t\te.await_invalid();\n\t\t\t}\n\n\t\t\tchild.promise = result;\n\t\t}\n\n\t\treturn child;\n\t}\n\n\t/**\n\t * Render children inside an error boundary. If the children throw and the API-level\n\t * `transformError` transform handles the error (doesn't re-throw), the `failed` snippet is\n\t * rendered instead. Otherwise the error propagates.\n\t *\n\t * @param {{ failed?: (renderer: Renderer, error: unknown, reset: () => void) => void }} props\n\t * @param {(renderer: Renderer) => MaybePromise<void>} children_fn\n\t */\n\tboundary(props, children_fn) {\n\t\t// Create a child renderer for the boundary content.\n\t\t// Mark it as a boundary so that #collect_content_async can catch\n\t\t// errors from nested async children and render the failed snippet.\n\t\tconst child = new Renderer(this.global, this);\n\t\tthis.#out.push(child);\n\n\t\tconst parent_context = ssr_context;\n\n\t\tif (props.failed) {\n\t\t\tchild.#boundary = {\n\t\t\t\tfailed: props.failed,\n\t\t\t\ttransformError: this.global.transformError,\n\t\t\t\tcontext: parent_context\n\t\t\t};\n\t\t}\n\n\t\tset_ssr_context({\n\t\t\t...ssr_context,\n\t\t\tp: parent_context,\n\t\t\tc: null,\n\t\t\tr: child\n\t\t});\n\n\t\ttry {\n\t\t\tconst result = children_fn(child);\n\n\t\t\tset_ssr_context(parent_context);\n\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tif (child.global.mode === 'sync') {\n\t\t\t\t\te.await_invalid();\n\t\t\t\t}\n\t\t\t\tresult.catch(noop);\n\t\t\t\tchild.promise = result;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// synchronous errors are handled here, async errors will be handled in #collect_content_async\n\t\t\tset_ssr_context(parent_context);\n\n\t\t\tconst failed_snippet = props.failed;\n\n\t\t\tif (!failed_snippet) throw error;\n\n\t\t\tconst result = this.global.transformError(error);\n\n\t\t\tchild.#out.length = 0;\n\t\t\tchild.#boundary = null;\n\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tif (this.global.mode === 'sync') {\n\t\t\t\t\te.await_invalid();\n\t\t\t\t}\n\n\t\t\t\tchild.promise = /** @type {Promise<unknown>} */ (result).then((transformed) => {\n\t\t\t\t\tset_ssr_context(parent_context);\n\t\t\t\t\tchild.#out.push(Renderer.#serialize_failed_boundary(transformed));\n\t\t\t\t\tfailed_snippet(child, transformed, noop);\n\t\t\t\t\tchild.#out.push(BLOCK_CLOSE);\n\t\t\t\t});\n\t\t\t\tchild.promise.catch(noop);\n\t\t\t} else {\n\t\t\t\tchild.#out.push(Renderer.#serialize_failed_boundary(result));\n\t\t\t\tfailed_snippet(child, result, noop);\n\t\t\t\tchild.#out.push(BLOCK_CLOSE);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Create a component renderer. The component renderer inherits the state from the parent,\n\t * but has its own content. It is treated as an ordering boundary for ondestroy callbacks.\n\t * @param {(renderer: Renderer) => MaybePromise<void>} fn\n\t * @param {Function} [component_fn]\n\t * @returns {void}\n\t */\n\tcomponent(fn, component_fn) {\n\t\tpush(component_fn);\n\t\tconst child = this.child(fn);\n\t\tchild.#is_component_body = true;\n\t\tpop();\n\t}\n\n\t/**\n\t * @param {Record<string, any>} attrs\n\t * @param {(renderer: Renderer) => void} fn\n\t * @param {string | undefined} [css_hash]\n\t * @param {Record<string, boolean> | undefined} [classes]\n\t * @param {Record<string, string> | undefined} [styles]\n\t * @param {number | undefined} [flags]\n\t * @param {boolean | undefined} [is_rich]\n\t * @returns {void}\n\t */\n\tselect(attrs, fn, css_hash, classes, styles, flags, is_rich) {\n\t\tconst { value, ...select_attrs } = attrs;\n\n\t\tthis.push(`<select${attributes(select_attrs, css_hash, classes, styles, flags)}>`);\n\t\tthis.child((renderer) => {\n\t\t\trenderer.local.select_value = value;\n\t\t\tfn(renderer);\n\t\t});\n\t\tthis.push(`${is_rich ? '<!>' : ''}</select>`);\n\t}\n\n\t/**\n\t * @param {Record<string, any>} attrs\n\t * @param {string | number | boolean | ((renderer: Renderer) => void)} body\n\t * @param {string | undefined} [css_hash]\n\t * @param {Record<string, boolean> | undefined} [classes]\n\t * @param {Record<string, string> | undefined} [styles]\n\t * @param {number | undefined} [flags]\n\t * @param {boolean | undefined} [is_rich]\n\t */\n\toption(attrs, body, css_hash, classes, styles, flags, is_rich) {\n\t\tthis.#out.push(`<option${attributes(attrs, css_hash, classes, styles, flags)}`);\n\n\t\t/**\n\t\t * @param {Renderer} renderer\n\t\t * @param {any} value\n\t\t * @param {{ head?: string, body: any }} content\n\t\t */\n\t\tconst close = (renderer, value, { head, body }) => {\n\t\t\tif (has_own_property.call(attrs, 'value')) {\n\t\t\t\tvalue = attrs.value;\n\t\t\t}\n\n\t\t\tif (value === this.local.select_value) {\n\t\t\t\trenderer.#out.push(' selected=\"\"');\n\t\t\t}\n\n\t\t\trenderer.#out.push(`>${body}${is_rich ? '<!>' : ''}</option>`);\n\n\t\t\t// super edge case, but may as well handle it\n\t\t\tif (head) {\n\t\t\t\trenderer.head((child) => child.push(head));\n\t\t\t}\n\t\t};\n\n\t\tif (typeof body === 'function') {\n\t\t\tthis.child((renderer) => {\n\t\t\t\tconst r = new Renderer(this.global, this);\n\t\t\t\tbody(r);\n\n\t\t\t\tif (this.global.mode === 'async') {\n\t\t\t\t\treturn r.#collect_content_async().then((content) => {\n\t\t\t\t\t\tclose(renderer, content.body.replaceAll('<!---->', ''), content);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst content = r.#collect_content();\n\t\t\t\t\tclose(renderer, content.body.replaceAll('<!---->', ''), content);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tclose(this, body, { body: escape_html(body) });\n\t\t}\n\t}\n\n\t/**\n\t * @param {(renderer: Renderer) => void} fn\n\t */\n\ttitle(fn) {\n\t\tconst path = this.get_path();\n\n\t\t/** @param {string} head */\n\t\tconst close = (head) => {\n\t\t\tthis.global.set_title(head, path);\n\t\t};\n\n\t\tthis.child((renderer) => {\n\t\t\tconst r = new Renderer(renderer.global, renderer);\n\t\t\tfn(r);\n\n\t\t\tif (renderer.global.mode === 'async') {\n\t\t\t\treturn r.#collect_content_async().then((content) => {\n\t\t\t\t\tclose(content.head);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst content = r.#collect_content();\n\t\t\t\tclose(content.head);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @param {string | (() => Promise<string>)} content\n\t */\n\tpush(content) {\n\t\tif (typeof content === 'function') {\n\t\t\tthis.child(async (renderer) => renderer.push(await content()));\n\t\t} else {\n\t\t\tthis.#out.push(content);\n\t\t}\n\t}\n\n\t/**\n\t * @param {() => void} fn\n\t */\n\ton_destroy(fn) {\n\t\t(this.#on_destroy ??= []).push(fn);\n\t}\n\n\t/**\n\t * @returns {number[]}\n\t */\n\tget_path() {\n\t\treturn this.#parent ? [...this.#parent.get_path(), this.#parent.#out.indexOf(this)] : [];\n\t}\n\n\t/**\n\t * @deprecated this is needed for legacy component bindings\n\t */\n\tcopy() {\n\t\tconst copy = new Renderer(this.global, this.#parent);\n\t\tcopy.#out = this.#out.map((item) => (item instanceof Renderer ? item.copy() : item));\n\t\tcopy.promise = this.promise;\n\t\treturn copy;\n\t}\n\n\t/**\n\t * @param {Renderer} other\n\t * @deprecated this is needed for legacy component bindings\n\t */\n\tsubsume(other) {\n\t\tif (this.global.mode !== other.global.mode) {\n\t\t\tthrow new Error(\n\t\t\t\t\"invariant: A renderer cannot switch modes. If you're seeing this, there's a compiler bug. File an issue!\"\n\t\t\t);\n\t\t}\n\n\t\tthis.local = other.local;\n\t\tthis.#out = other.#out.map((item, i) => {\n\t\t\tconst current = this.#out[i];\n\n\t\t\tif (current instanceof Renderer && item instanceof Renderer) {\n\t\t\t\tcurrent.subsume(item);\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\treturn item;\n\t\t});\n\t\tthis.promise = other.promise;\n\t\tthis.type = other.type;\n\t}\n\n\tget length() {\n\t\treturn this.#out.length;\n\t}\n\n\t/**\n\t * Creates the hydration comment that marks the start of a failed boundary.\n\t * The error is JSON-serialized and embedded inside an HTML comment for the client\n\t * to parse during hydration. The JSON is escaped to prevent `-->` or `<!--` sequences\n\t * from breaking out of the comment (XSS). Uses unicode escapes which `JSON.parse()`\n\t * handles transparently.\n\t * @param {unknown} error\n\t * @returns {string}\n\t */\n\tstatic #serialize_failed_boundary(error) {\n\t\tvar json = JSON.stringify(error);\n\t\tvar escaped = json.replace(/>/g, '\\\\u003e').replace(/</g, '\\\\u003c');\n\t\treturn `<!--${HYDRATION_START_FAILED}${escaped}-->`;\n\t}\n\n\t/**\n\t * Only available on the server and when compiling with the `server` option.\n\t * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.\n\t * @template {Record<string, any>} Props\n\t * @param {Component<Props>} component\n\t * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} [options]\n\t * @returns {RenderOutput}\n\t */\n\tstatic render(component, options = {}) {\n\t\t/** @type {AccumulatedContent | undefined} */\n\t\tlet sync;\n\t\t/** @type {Promise<AccumulatedContent & { hashes: { script: Sha256Source[] } }> | undefined} */\n\t\tlet async;\n\n\t\tconst result = /** @type {RenderOutput} */ ({});\n\t\t// making these properties non-enumerable so that console.logging\n\t\t// doesn't trigger a sync render\n\t\tObject.defineProperties(result, {\n\t\t\thtml: {\n\t\t\t\tget: () => {\n\t\t\t\t\treturn (sync ??= Renderer.#render(component, options)).body;\n\t\t\t\t}\n\t\t\t},\n\t\t\thead: {\n\t\t\t\tget: () => {\n\t\t\t\t\treturn (sync ??= Renderer.#render(component, options)).head;\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tget: () => {\n\t\t\t\t\treturn (sync ??= Renderer.#render(component, options)).body;\n\t\t\t\t}\n\t\t\t},\n\t\t\thashes: {\n\t\t\t\tvalue: {\n\t\t\t\t\tscript: ''\n\t\t\t\t}\n\t\t\t},\n\t\t\tthen: {\n\t\t\t\tvalue:\n\t\t\t\t\t/**\n\t\t\t\t\t * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function.\n\t\t\t\t\t *\n\t\t\t\t\t * @template TResult1\n\t\t\t\t\t * @template [TResult2=never]\n\t\t\t\t\t * @param { (value: SyncRenderOutput) => TResult1 } onfulfilled\n\t\t\t\t\t * @param { (reason: unknown) => TResult2 } onrejected\n\t\t\t\t\t */\n\t\t\t\t\t(onfulfilled, onrejected) => {\n\t\t\t\t\t\tif (!async_mode_flag) {\n\t\t\t\t\t\t\tconst result = (sync ??= Renderer.#render(component, options));\n\t\t\t\t\t\t\tconst user_result = onfulfilled({\n\t\t\t\t\t\t\t\thead: result.head,\n\t\t\t\t\t\t\t\tbody: result.body,\n\t\t\t\t\t\t\t\thtml: result.body,\n\t\t\t\t\t\t\t\thashes: { script: [] }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn Promise.resolve(user_result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tasync ??= init_render_context().then(() =>\n\t\t\t\t\t\t\twith_render_context(() => Renderer.#render_async(component, options))\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn async.then((result) => {\n\t\t\t\t\t\t\tObject.defineProperty(result, 'html', {\n\t\t\t\t\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\t\t\t\t\tget: () => {\n\t\t\t\t\t\t\t\t\te.html_deprecated();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn onfulfilled(/** @type {SyncRenderOutput} */ (result));\n\t\t\t\t\t\t}, onrejected);\n\t\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Collect all of the `onDestroy` callbacks registered during rendering. In an async context, this is only safe to call\n\t * after awaiting `collect_async`.\n\t *\n\t * Child renderers are \"porous\" and don't affect execution order, but component body renderers\n\t * create ordering boundaries. Within a renderer, callbacks run in order until hitting a component boundary.\n\t * @returns {Iterable<() => void>}\n\t */\n\t*#collect_on_destroy() {\n\t\tfor (const component of this.#traverse_components()) {\n\t\t\tyield* component.#collect_ondestroy();\n\t\t}\n\t}\n\n\t/**\n\t * Performs a depth-first search of renderers, yielding the deepest components first, then additional components as we backtrack up the tree.\n\t * @returns {Iterable<Renderer>}\n\t */\n\t*#traverse_components() {\n\t\tfor (const child of this.#out) {\n\t\t\tif (typeof child !== 'string') {\n\t\t\t\tyield* child.#traverse_components();\n\t\t\t}\n\t\t}\n\t\tif (this.#is_component_body) {\n\t\t\tyield this;\n\t\t}\n\t}\n\n\t/**\n\t * @returns {Iterable<() => void>}\n\t */\n\t*#collect_ondestroy() {\n\t\tif (this.#on_destroy) {\n\t\t\tfor (const fn of this.#on_destroy) {\n\t\t\t\tyield fn;\n\t\t\t}\n\t\t}\n\t\tfor (const child of this.#out) {\n\t\t\tif (child instanceof Renderer && !child.#is_component_body) {\n\t\t\t\tyield* child.#collect_ondestroy();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render a component. Throws if any of the children are performing asynchronous work.\n\t *\n\t * @template {Record<string, any>} Props\n\t * @param {Component<Props>} component\n\t * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string }} options\n\t * @returns {AccumulatedContent}\n\t */\n\tstatic #render(component, options) {\n\t\tvar previous_context = ssr_context;\n\t\ttry {\n\t\t\tconst renderer = Renderer.#open_render('sync', component, options);\n\n\t\t\tconst content = renderer.#collect_content();\n\t\t\treturn Renderer.#close_render(content, renderer);\n\t\t} finally {\n\t\t\tabort();\n\t\t\tset_ssr_context(previous_context);\n\t\t}\n\t}\n\n\t/**\n\t * Render a component.\n\t *\n\t * @template {Record<string, any>} Props\n\t * @param {Component<Props>} component\n\t * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} options\n\t * @returns {Promise<AccumulatedContent & { hashes: { script: Sha256Source[] } }>}\n\t */\n\tstatic async #render_async(component, options) {\n\t\tconst previous_context = ssr_context;\n\n\t\ttry {\n\t\t\tconst renderer = Renderer.#open_render('async', component, options);\n\t\t\tconst content = await renderer.#collect_content_async();\n\t\t\tconst hydratables = await renderer.#collect_hydratables();\n\t\t\tif (hydratables !== null) {\n\t\t\t\tcontent.head = hydratables + content.head;\n\t\t\t}\n\t\t\treturn Renderer.#close_render(content, renderer);\n\t\t} finally {\n\t\t\tset_ssr_context(previous_context);\n\t\t\tabort();\n\t\t}\n\t}\n\n\t/**\n\t * Collect all of the code from the `out` array and return it as a string, or a promise resolving to a string.\n\t * @param {AccumulatedContent} content\n\t * @returns {AccumulatedContent}\n\t */\n\t#collect_content(content = { head: '', body: '' }) {\n\t\tfor (const item of this.#out) {\n\t\t\tif (typeof item === 'string') {\n\t\t\t\tcontent[this.type] += item;\n\t\t\t} else if (item instanceof Renderer) {\n\t\t\t\titem.#collect_content(content);\n\t\t\t}\n\t\t}\n\n\t\treturn content;\n\t}\n\n\t/**\n\t * Collect all of the code from the `out` array and return it as a string.\n\t * @param {AccumulatedContent} content\n\t * @returns {Promise<AccumulatedContent>}\n\t */\n\tasync #collect_content_async(content = { head: '', body: '' }) {\n\t\tawait this.promise;\n\n\t\t// no danger to sequentially awaiting stuff in here; all of the work is already kicked off\n\t\tfor (const item of this.#out) {\n\t\t\tif (typeof item === 'string') {\n\t\t\t\tcontent[this.type] += item;\n\t\t\t} else if (item instanceof Renderer) {\n\t\t\t\tif (item.#boundary) {\n\t\t\t\t\t// This renderer is an error boundary - collect into a separate\n\t\t\t\t\t// accumulator so we can discard partial content on error\n\t\t\t\t\t/** @type {AccumulatedContent} */\n\t\t\t\t\tconst boundary_content = { head: '', body: '' };\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait item.#collect_content_async(boundary_content);\n\t\t\t\t\t\t// Success - merge into the main content\n\t\t\t\t\t\tcontent.head += boundary_content.head;\n\t\t\t\t\t\tcontent.body += boundary_content.body;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst { context, failed, transformError } = item.#boundary;\n\n\t\t\t\t\t\tset_ssr_context(context);\n\t\t\t\t\t\tlet transformed = await transformError(error);\n\n\t\t\t\t\t\t// Render the failed snippet instead of the partial children content\n\t\t\t\t\t\tconst failed_renderer = new Renderer(item.global, item);\n\t\t\t\t\t\tfailed_renderer.type = item.type;\n\t\t\t\t\t\tfailed_renderer.#out.push(Renderer.#serialize_failed_boundary(transformed));\n\t\t\t\t\t\tfailed(failed_renderer, transformed, noop);\n\t\t\t\t\t\tfailed_renderer.#out.push(BLOCK_CLOSE);\n\t\t\t\t\t\tawait failed_renderer.#collect_content_async(content);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait item.#collect_content_async(content);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn content;\n\t}\n\n\tasync #collect_hydratables() {\n\t\tconst ctx = get_render_context().hydratable;\n\n\t\tfor (const [_, key] of ctx.unresolved_promises) {\n\t\t\t// this is a problem -- it means we've finished the render but we're still waiting on a promise to resolve so we can\n\t\t\t// serialize it, so we're blocking the response on useless content.\n\t\t\tw.unresolved_hydratable(key, ctx.lookup.get(key)?.stack ?? '<missing stack trace>');\n\t\t}\n\n\t\tfor (const comparison of ctx.comparisons) {\n\t\t\t// these reject if there's a mismatch\n\t\t\tawait comparison;\n\t\t}\n\n\t\treturn await this.#hydratable_block(ctx);\n\t}\n\n\t/**\n\t * @template {Record<string, any>} Props\n\t * @param {'sync' | 'async'} mode\n\t * @param {import('svelte').Component<Props>} component\n\t * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp; transformError?: (error: unknown) => unknown }} options\n\t * @returns {Renderer}\n\t */\n\tstatic #open_render(mode, component, options) {\n\t\tif (options.idPrefix?.includes('--')) {\n\t\t\te.invalid_id_prefix();\n\t\t}\n\n\t\tvar previous_context = ssr_context;\n\n\t\ttry {\n\t\t\tconst renderer = new Renderer(\n\t\t\t\tnew SSRState(\n\t\t\t\t\tmode,\n\t\t\t\t\toptions.idPrefix ? options.idPrefix + '-' : '',\n\t\t\t\t\toptions.csp,\n\t\t\t\t\toptions.transformError\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t/** @type {SSRContext} */\n\t\t\tconst context = { p: null, c: options.context ?? null, r: renderer };\n\t\t\tset_ssr_context(context);\n\n\t\t\trenderer.push(BLOCK_OPEN);\n\t\t\t// @ts-expect-error\n\t\t\tcomponent(renderer, options.props ?? {});\n\t\t\trenderer.push(BLOCK_CLOSE);\n\n\t\t\treturn renderer;\n\t\t} finally {\n\t\t\tset_ssr_context(previous_context);\n\t\t}\n\t}\n\n\t/**\n\t * @param {AccumulatedContent} content\n\t * @param {Renderer} renderer\n\t * @returns {AccumulatedContent & { hashes: { script: Sha256Source[] } }}\n\t */\n\tstatic #close_render(content, renderer) {\n\t\tfor (const cleanup of renderer.#collect_on_destroy()) {\n\t\t\tcleanup();\n\t\t}\n\n\t\tlet head = content.head + renderer.global.get_title();\n\t\tlet body = content.body;\n\n\t\tfor (const { hash, code } of renderer.global.css) {\n\t\t\thead += `<style id=\"${hash}\">${code}</style>`;\n\t\t}\n\n\t\treturn {\n\t\t\thead,\n\t\t\tbody,\n\t\t\thashes: {\n\t\t\t\tscript: renderer.global.csp.script_hashes\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * @param {HydratableContext} ctx\n\t */\n\tasync #hydratable_block(ctx) {\n\t\tif (ctx.lookup.size === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet entries = [];\n\t\tlet has_promises = false;\n\n\t\tfor (const [k, v] of ctx.lookup) {\n\t\t\tif (v.promises) {\n\t\t\t\thas_promises = true;\n\t\t\t\tfor (const p of v.promises) await p;\n\t\t\t}\n\n\t\t\tentries.push(`[${devalue.uneval(k)},${v.serialized}]`);\n\t\t}\n\n\t\tlet prelude = `const h = (window.__svelte ??= {}).h ??= new Map();`;\n\n\t\tif (has_promises) {\n\t\t\tprelude = `const r = (v) => Promise.resolve(v);\n\t\t\t\t${prelude}`;\n\t\t}\n\n\t\tconst body = `\n\t\t\t{\n\t\t\t\t${prelude}\n\n\t\t\t\tfor (const [k, v] of [\n\t\t\t\t\t${entries.join(',\\n\\t\\t\\t\\t\\t')}\n\t\t\t\t]) {\n\t\t\t\t\th.set(k, v);\n\t\t\t\t}\n\t\t\t}\n\t\t`;\n\n\t\tlet csp_attr = '';\n\t\tif (this.global.csp.nonce) {\n\t\t\tcsp_attr = ` nonce=\"${this.global.csp.nonce}\"`;\n\t\t} else if (this.global.csp.hash) {\n\t\t\t// note to future selves: this doesn't need to be optimized with a Map<body, hash>\n\t\t\t// because the it's impossible for identical data to occur multiple times in a single render\n\t\t\t// (this would require the same hydratable key:value pair to be serialized multiple times)\n\t\t\tconst hash = await sha256(body);\n\t\t\tthis.global.csp.script_hashes.push(`sha256-${hash}`);\n\t\t}\n\n\t\treturn `\\n\\t\\t<script${csp_attr}>${body}</script>`;\n\t}\n}\n\nexport class SSRState {\n\t/** @readonly @type {Csp & { script_hashes: Sha256Source[] }} */\n\tcsp;\n\n\t/** @readonly @type {'sync' | 'async'} */\n\tmode;\n\n\t/** @readonly @type {() => string} */\n\tuid;\n\n\t/** @readonly @type {Set<{ hash: string; code: string }>} */\n\tcss = new Set();\n\n\t/**\n\t * `transformError` passed to `render`. Called when an error boundary catches an error.\n\t * Throws by default if unset in `render`.\n\t * @type {(error: unknown) => unknown}\n\t */\n\ttransformError;\n\n\t/** @type {{ path: number[], value: string }} */\n\t#title = { path: [], value: '' };\n\n\t/**\n\t * @param {'sync' | 'async'} mode\n\t * @param {string} id_prefix\n\t * @param {Csp} csp\n\t * @param {((error: unknown) => unknown) | undefined} [transformError]\n\t */\n\tconstructor(mode, id_prefix = '', csp = { hash: false }, transformError) {\n\t\tthis.mode = mode;\n\t\tthis.csp = { ...csp, script_hashes: [] };\n\n\t\tthis.transformError =\n\t\t\ttransformError ??\n\t\t\t((error) => {\n\t\t\t\tthrow error;\n\t\t\t});\n\n\t\tlet uid = 1;\n\t\tthis.uid = () => `${id_prefix}s${uid++}`;\n\t}\n\n\tget_title() {\n\t\treturn this.#title.value;\n\t}\n\n\t/**\n\t * Performs a depth-first (lexicographic) comparison using the path. Rejects sets\n\t * from earlier than or equal to the current value.\n\t * @param {string} value\n\t * @param {number[]} path\n\t */\n\tset_title(value, path) {\n\t\tconst current = this.#title.path;\n\n\t\tlet i = 0;\n\t\tlet l = Math.min(path.length, current.length);\n\n\t\t// skip identical prefixes - [1, 2, 3, ...] === [1, 2, 3, ...]\n\t\twhile (i < l && path[i] === current[i]) i += 1;\n\n\t\tif (path[i] === undefined) return;\n\n\t\t// replace title if\n\t\t// - incoming path is longer - [7, 8, 9] > [7, 8]\n\t\t// - incoming path is later  - [7, 8, 9] > [7, 8, 8]\n\t\tif (current[i] === undefined || path[i] > current[i]) {\n\t\t\tthis.#title.path = path;\n\t\t\tthis.#title.value = value;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/server/renderer.test.ts",
    "content": "import { afterAll, beforeAll, describe, expect, test } from 'vitest';\nimport { Renderer, SSRState } from './renderer.js';\nimport type { Component } from 'svelte';\nimport { disable_async_mode_flag, enable_async_mode_flag } from '../flags/index.js';\n\ntest('collects synchronous body content by default', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.push('a');\n\t\trenderer.child(($$renderer) => {\n\t\t\t$$renderer.push('b');\n\t\t});\n\t\trenderer.push('c');\n\t};\n\n\tconst { head, body } = Renderer.render(component as unknown as Component);\n\texpect(head).toBe('');\n\texpect(body).toBe('<!--[-->abc<!--]-->');\n});\n\ntest('child type switches content area (head vs body)', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.push('a');\n\t\trenderer.head(($$renderer) => {\n\t\t\t$$renderer.push('<title>T</title>');\n\t\t});\n\t\trenderer.push('b');\n\t};\n\n\tconst { head, body } = Renderer.render(component as unknown as Component);\n\texpect(head).toBe('<title>T</title>');\n\texpect(body).toBe('<!--[-->ab<!--]-->');\n});\n\ntest('child inherits parent type when not specified', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.head((renderer) => {\n\t\t\trenderer.push('<meta name=\"x\"/>');\n\t\t\trenderer.child((renderer) => {\n\t\t\t\trenderer.push('<style>/* css */</style>');\n\t\t\t});\n\t\t});\n\t};\n\n\tconst { head, body } = Renderer.render(component as unknown as Component);\n\texpect(body).toBe('<!--[--><!--]-->');\n\texpect(head).toBe('<meta name=\"x\"/><style>/* css */</style>');\n});\n\ntest('get_path returns the path indexes to a renderer', () => {\n\tconst root = new Renderer(new SSRState('sync'));\n\tlet child_a: InstanceType<typeof Renderer> | undefined;\n\tlet child_b: InstanceType<typeof Renderer> | undefined;\n\tlet child_b_0: InstanceType<typeof Renderer> | undefined;\n\n\troot.child(($$renderer) => {\n\t\tchild_a = $$renderer;\n\t\t$$renderer.push('A');\n\t});\n\troot.child(($$renderer) => {\n\t\tchild_b = $$renderer;\n\t\t$$renderer.child(($$inner) => {\n\t\t\tchild_b_0 = $$inner;\n\t\t\t$$inner.push('B0');\n\t\t});\n\t\t$$renderer.push('B1');\n\t});\n\n\texpect(child_a!.get_path()).toEqual([0]);\n\texpect(child_b!.get_path()).toEqual([1]);\n\texpect(child_b_0!.get_path()).toEqual([1, 0]);\n});\n\ntest('creating an async child in a sync context throws', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.push('a');\n\t\trenderer.child(async ($$renderer) => {\n\t\t\tawait Promise.resolve();\n\t\t\t$$renderer.push('x');\n\t\t});\n\t};\n\n\texpect(() => Renderer.render(component as unknown as Component).head).toThrow('await_invalid');\n\texpect(() => Renderer.render(component as unknown as Component).html).toThrow('await_invalid');\n\texpect(() => Renderer.render(component as unknown as Component).body).toThrow('await_invalid');\n});\n\ntest('local state is shallow-copied to children', () => {\n\tconst root = new Renderer(new SSRState('sync'));\n\troot.local.select_value = 'A';\n\tlet child: InstanceType<typeof Renderer> | undefined;\n\troot.child(($$renderer) => {\n\t\tchild = $$renderer;\n\t});\n\n\texpect(child!.local.select_value).toBe('A');\n\tchild!.local.select_value = 'B';\n\texpect(root.local.select_value).toBe('A');\n});\n\ntest('subsume replaces tree content and state from other', () => {\n\tconst a = new Renderer(new SSRState('async'));\n\ta.type = 'head';\n\n\ta.push('<meta />');\n\ta.local.select_value = 'A';\n\n\tconst b = new Renderer(new SSRState('async'));\n\tb.child(async ($$renderer) => {\n\t\tawait Promise.resolve();\n\t\t$$renderer.push('body');\n\t});\n\tb.global.css.add({ hash: 'h', code: 'c' });\n\tb.global.set_title('Title', [1]);\n\tb.local.select_value = 'B';\n\tb.promise = Promise.resolve();\n\n\ta.subsume(b);\n\n\texpect(a.type).toBe('body');\n\texpect(a.local.select_value).toBe('B');\n\texpect(a.promise).toBe(b.promise);\n});\n\ntest('subsume refuses to switch modes', () => {\n\tconst a = new Renderer(new SSRState('sync'));\n\ta.type = 'head';\n\n\ta.push('<meta />');\n\ta.local.select_value = 'A';\n\n\tconst b = new Renderer(new SSRState('async'));\n\tb.child(async ($$renderer) => {\n\t\tawait Promise.resolve();\n\t\t$$renderer.push('body');\n\t});\n\tb.global.css.add({ hash: 'h', code: 'c' });\n\tb.global.set_title('Title', [1]);\n\tb.local.select_value = 'B';\n\tb.promise = Promise.resolve();\n\n\texpect(() => a.subsume(b)).toThrow(\n\t\t\"invariant: A renderer cannot switch modes. If you're seeing this, there's a compiler bug. File an issue!\"\n\t);\n});\n\ntest('SSRState uid generator uses prefix', () => {\n\tconst state = new SSRState('sync', 'id-');\n\texpect(state.uid()).toBe('id-s1');\n});\n\ntest('SSRState title ordering favors later lexicographic paths', () => {\n\tconst state = new SSRState('sync');\n\n\tstate.set_title('A', [1]);\n\texpect(state.get_title()).toBe('A');\n\n\t// equal path -> unchanged\n\tstate.set_title('B', [1]);\n\texpect(state.get_title()).toBe('A');\n\n\t// earlier -> unchanged\n\tstate.set_title('C', [0, 9]);\n\texpect(state.get_title()).toBe('A');\n\n\t// later -> update\n\tstate.set_title('D', [2]);\n\texpect(state.get_title()).toBe('D');\n\n\t// longer but same prefix -> update\n\tstate.set_title('E', [2, 0]);\n\texpect(state.get_title()).toBe('E');\n\n\t// shorter (earlier) than current with same prefix -> unchanged\n\tstate.set_title('F', [2]);\n\texpect(state.get_title()).toBe('E');\n});\n\ntest('selects an option with an explicit value', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.select({ value: 2 }, (renderer) => {\n\t\t\trenderer.option({ value: 1 }, (renderer) => renderer.push('one'));\n\t\t\trenderer.option({ value: 2 }, (renderer) => renderer.push('two'));\n\t\t\trenderer.option({ value: 3 }, (renderer) => renderer.push('three'));\n\t\t});\n\t};\n\n\tconst { head, body } = Renderer.render(component as unknown as Component);\n\texpect(head).toBe('');\n\texpect(body).toBe(\n\t\t'<!--[--><select><option value=\"1\">one</option><option value=\"2\" selected=\"\">two</option><option value=\"3\">three</option></select><!--]-->'\n\t);\n});\n\ntest('selects an option with an implicit value', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.select({ value: 'two' }, (renderer) => {\n\t\t\trenderer.option({}, (renderer) => renderer.push('one'));\n\t\t\trenderer.option({}, (renderer) => renderer.push('two'));\n\t\t\trenderer.option({}, (renderer) => renderer.push('three'));\n\t\t});\n\t};\n\n\tconst { head, body } = Renderer.render(component as unknown as Component);\n\texpect(head).toBe('');\n\texpect(body).toBe(\n\t\t'<!--[--><select><option>one</option><option selected=\"\">two</option><option>three</option></select><!--]-->'\n\t);\n});\n\ntest('select merges scoped css hash with static class', () => {\n\tconst component = (renderer: Renderer) => {\n\t\trenderer.select(\n\t\t\t{ class: 'foo', value: 'foo' },\n\t\t\t(renderer) => {\n\t\t\t\trenderer.option({ value: 'foo' }, (renderer) => renderer.push('foo'));\n\t\t\t},\n\t\t\t'svelte-hash'\n\t\t);\n\t};\n\n\tconst { head, body } = Renderer.render(component as unknown as Component);\n\texpect(head).toBe('');\n\texpect(body).toBe(\n\t\t'<!--[--><select class=\"foo svelte-hash\"><option value=\"foo\" selected=\"\">foo</option></select><!--]-->'\n\t);\n});\n\ndescribe('boundary hydration comment escaping', () => {\n\tconst failed_snippet = (renderer: Renderer, error: unknown) => {\n\t\trenderer.push(`<p>${(error as { message: string }).message}</p>`);\n\t};\n\n\tconst transform = (error: unknown) => ({ message: (error as Error).message });\n\n\tconst payloads = [\n\t\t{\n\t\t\tname: 'escapes -->',\n\t\t\tinput: '--><img src=x onerror=alert(1)><!--',\n\t\t\texpected: '{\"message\":\"--\\\\u003e\\\\u003cimg src=x onerror=alert(1)\\\\u003e\\\\u003c!--\"}'\n\t\t},\n\t\t{\n\t\t\tname: 'escapes <!--',\n\t\t\tinput: '<!--<script>alert(1)</script>',\n\t\t\texpected: '{\"message\":\"\\\\u003c!--\\\\u003cscript\\\\u003ealert(1)\\\\u003c/script\\\\u003e\"}'\n\t\t},\n\t\t{ name: 'escapes <!-->', input: '<!-->', expected: '{\"message\":\"\\\\u003c!--\\\\u003e\"}' },\n\t\t{ name: 'escapes <!--->', input: '<!--->', expected: '{\"message\":\"\\\\u003c!---\\\\u003e\"}' },\n\t\t{\n\t\t\tname: 'escapes multiple -->',\n\t\t\tinput: '-->one-->two-->',\n\t\t\texpected: '{\"message\":\"--\\\\u003eone--\\\\u003etwo--\\\\u003e\"}'\n\t\t},\n\t\t{ name: 'escapes --->', input: '--->', expected: '{\"message\":\"---\\\\u003e\"}' },\n\t\t{ name: 'no double-encoding', input: '--\\\\u003e', expected: '{\"message\":\"--\\\\\\\\u003e\"}' },\n\t\t{\n\t\t\tname: 'the terrifying special pointy boy',\n\t\t\tinput: '--!>ooh, what an exotic closing comment tag',\n\t\t\texpected: '{\"message\":\"--!\\\\u003eooh, what an exotic closing comment tag\"}'\n\t\t}\n\t];\n\n\ttype RenderFn = (input: string) => Promise<string> | string;\n\n\tconst paths: Array<{ path: string; async: boolean; render: RenderFn }> = [\n\t\t{\n\t\t\tpath: 'sync children, sync transformError',\n\t\t\tasync: false,\n\t\t\trender: (input) => {\n\t\t\t\tconst component = (renderer: Renderer) => {\n\t\t\t\t\trenderer.boundary({ failed: failed_snippet }, () => {\n\t\t\t\t\t\tthrow new Error(input);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\treturn Renderer.render(\n\t\t\t\t\tcomponent as unknown as Component,\n\t\t\t\t\t{ transformError: transform } as any\n\t\t\t\t).body;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: 'sync children, async transformError',\n\t\t\tasync: true,\n\t\t\trender: async (input) => {\n\t\t\t\tconst component = (renderer: Renderer) => {\n\t\t\t\t\trenderer.boundary({ failed: failed_snippet }, () => {\n\t\t\t\t\t\tthrow new Error(input);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\tawait Renderer.render(\n\t\t\t\t\t\tcomponent as unknown as Component,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransformError: (error: unknown) => Promise.resolve(transform(error))\n\t\t\t\t\t\t} as any\n\t\t\t\t\t)\n\t\t\t\t).body;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: 'async children throw',\n\t\t\tasync: true,\n\t\t\trender: async (input) => {\n\t\t\t\tconst component = (renderer: Renderer) => {\n\t\t\t\t\trenderer.boundary({ failed: failed_snippet }, async () => {\n\t\t\t\t\t\tawait Promise.resolve();\n\t\t\t\t\t\tthrow new Error(input);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\tawait Renderer.render(\n\t\t\t\t\t\tcomponent as unknown as Component,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransformError: transform\n\t\t\t\t\t\t} as any\n\t\t\t\t\t)\n\t\t\t\t).body;\n\t\t\t}\n\t\t}\n\t];\n\n\tdescribe.each(paths)('$path', ({ async: needs_async, render }) => {\n\t\tif (needs_async) {\n\t\t\tbeforeAll(() => enable_async_mode_flag());\n\t\t\tafterAll(() => disable_async_mode_flag());\n\t\t}\n\n\t\ttest.each(payloads)('$name', async ({ input, expected }) => {\n\t\t\tconst body = await render(input);\n\n\t\t\t// Extract the content between <!--[? and the first -->\n\t\t\t// If escaping is broken, an unescaped --> in the JSON will truncate\n\t\t\t// the match and the content won't equal the expected escaped JSON.\n\t\t\tconst match = body.match(/<!--\\[\\?(.+?)-->/);\n\t\t\texpect(match, 'expected a hydration comment in output').toBeTruthy();\n\t\t\texpect(match![1]).toBe(expected);\n\t\t});\n\t});\n});\n\ndescribe('async', () => {\n\tbeforeAll(() => {\n\t\tenable_async_mode_flag();\n\t});\n\n\tafterAll(() => {\n\t\tdisable_async_mode_flag();\n\t});\n\n\ttest('awaiting renderer gets async content', async () => {\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.push('1');\n\t\t\trenderer.child(async ($$renderer) => {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\t$$renderer.push('2');\n\t\t\t});\n\t\t\trenderer.push('3');\n\t\t};\n\n\t\tconst result = await Renderer.render(component as unknown as Component);\n\t\texpect(result.head).toBe('');\n\t\texpect(result.body).toBe('<!--[-->123<!--]-->');\n\t\texpect(() => result.html).toThrow('html_deprecated');\n\t});\n\n\ttest('push accepts async functions in async context', async () => {\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.push('a');\n\t\t\trenderer.push(async () => {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\treturn 'b';\n\t\t\t});\n\t\t\trenderer.push('c');\n\t\t};\n\n\t\tconst { head, body } = await Renderer.render(component as unknown as Component);\n\t\texpect(head).toBe('');\n\t\texpect(body).toBe('<!--[-->abc<!--]-->');\n\t});\n\n\ttest('push handles async functions with different timing', async () => {\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.push(async () => {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\treturn 'fast';\n\t\t\t});\n\t\t\trenderer.push(async () => {\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10));\n\t\t\t\treturn 'slow';\n\t\t\t});\n\t\t\trenderer.push('sync');\n\t\t};\n\n\t\tconst { head, body } = await Renderer.render(component as unknown as Component);\n\t\texpect(head).toBe('');\n\t\texpect(body).toBe('<!--[-->fastslowsync<!--]-->');\n\t});\n\n\ttest('push async functions work with head content type', async () => {\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.head(($$renderer) => {\n\t\t\t\t$$renderer.push(async () => {\n\t\t\t\t\tawait Promise.resolve();\n\t\t\t\t\treturn '<title>Async Title</title>';\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst { head, body } = await Renderer.render(component as unknown as Component);\n\t\texpect(body).toBe('<!--[--><!--]-->');\n\t\texpect(head).toBe('<title>Async Title</title>');\n\t});\n\n\ttest('push async functions can be mixed with child renderers', async () => {\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.push('start-');\n\t\t\trenderer.push(async () => {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\treturn 'async-';\n\t\t\t});\n\t\t\trenderer.child(($$renderer) => {\n\t\t\t\t$$renderer.push('child-');\n\t\t\t});\n\t\t\trenderer.push('-end');\n\t\t};\n\n\t\tconst { head, body } = await Renderer.render(component as unknown as Component);\n\t\texpect(head).toBe('');\n\t\texpect(body).toBe('<!--[-->start-async-child--end<!--]-->');\n\t});\n\n\ttest('push async functions are not supported in sync context', () => {\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.push('a');\n\t\t\trenderer.push(() => Promise.resolve('b'));\n\t\t};\n\n\t\texpect(() => Renderer.render(component as unknown as Component).body).toThrow('await_invalid');\n\t\texpect(() => Renderer.render(component as unknown as Component).html).toThrow('await_invalid');\n\t\texpect(() => Renderer.render(component as unknown as Component).head).toThrow('await_invalid');\n\t});\n\n\ttest('on_destroy yields callbacks in the correct order', async () => {\n\t\tconst destroyed: string[] = [];\n\t\tconst component = (renderer: Renderer) => {\n\t\t\trenderer.component((renderer) => {\n\t\t\t\trenderer.on_destroy(() => destroyed.push('a'));\n\t\t\t\t// children should not alter relative order\n\t\t\t\trenderer.child(async (renderer) => {\n\t\t\t\t\tawait Promise.resolve();\n\t\t\t\t\trenderer.on_destroy(() => destroyed.push('b'));\n\t\t\t\t\trenderer.on_destroy(() => destroyed.push('b*'));\n\t\t\t\t});\n\t\t\t\t// but child components should\n\t\t\t\trenderer.component((renderer) => {\n\t\t\t\t\trenderer.on_destroy(() => destroyed.push('c'));\n\t\t\t\t});\n\t\t\t\trenderer.child((renderer) => {\n\t\t\t\t\trenderer.on_destroy(() => destroyed.push('d'));\n\t\t\t\t});\n\t\t\t\trenderer.component((renderer) => {\n\t\t\t\t\trenderer.on_destroy(() => destroyed.push('e'));\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tawait Renderer.render(component as unknown as Component);\n\t\texpect(destroyed).toEqual(['c', 'e', 'a', 'b', 'b*', 'd']);\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/src/internal/server/types.d.ts",
    "content": "import type { MaybePromise } from '#shared';\nimport type { Element } from './dev';\nimport type { Renderer } from './renderer';\n\nexport interface SSRContext {\n\t/** parent */\n\tp: null | SSRContext;\n\t/** component context */\n\tc: null | Map<unknown, unknown>;\n\t/** renderer */\n\tr: null | Renderer;\n\t/** dev mode only: the current component function */\n\tfunction?: any;\n\t/** dev mode only: the current element */\n\telement?: Element;\n}\n\nexport type Csp = { nonce?: string; hash?: boolean };\n\nexport interface HydratableLookupEntry {\n\tvalue: unknown;\n\tserialized: string;\n\tpromises?: Array<Promise<void>>;\n\t/** dev-only */\n\tstack?: string;\n}\n\nexport interface HydratableContext {\n\tlookup: Map<string, HydratableLookupEntry>;\n\tcomparisons: Promise<void>[];\n\tunresolved_promises: Map<Promise<string>, string>;\n}\n\nexport interface RenderContext {\n\thydratable: HydratableContext;\n}\n\nexport type Sha256Source = `sha256-${string}`;\n\nexport interface SyncRenderOutput {\n\t/** HTML that goes into the `<head>` */\n\thead: string;\n\t/** @deprecated use `body` instead */\n\thtml: string;\n\t/** HTML that goes somewhere into the `<body>` */\n\tbody: string;\n\thashes: {\n\t\tscript: Sha256Source[];\n\t};\n}\n\nexport type RenderOutput = SyncRenderOutput & PromiseLike<SyncRenderOutput>;\n"
  },
  {
    "path": "packages/svelte/src/internal/server/warnings.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * A `hydratable` value with key `%key%` was created, but at least part of it was not used during the render.\n * \n * The `hydratable` was initialized in:\n * %stack%\n * @param {string} key\n * @param {string} stack\n */\nexport function unresolved_hydratable(key, stack) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] unresolved_hydratable\\n%cA \\`hydratable\\` value with key \\`${key}\\` was created, but at least part of it was not used during the render.\n\nThe \\`hydratable\\` was initialized in:\n${stack}\\nhttps://svelte.dev/e/unresolved_hydratable`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/unresolved_hydratable`);\n\t}\n}"
  },
  {
    "path": "packages/svelte/src/internal/shared/attributes.js",
    "content": "import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\nimport { has_own_property } from './utils.js';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized =\n\t\t(has_own_property.call(replacements, name) && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? `=\"\"` : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param  {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key of Object.keys(directives)) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key of Object.keys(styles)) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/clone.js",
    "content": "/** @import { Snapshot } from './types' */\nimport { DEV } from 'esm-env';\nimport * as w from './warnings.js';\nimport { get_prototype_of, is_array, object_prototype } from './utils.js';\n\n/**\n * In dev, we keep track of which properties could not be cloned. In prod\n * we don't bother, but we keep a dummy array around so that the\n * signature stays the same\n * @type {string[]}\n */\nconst empty = [];\n\n/**\n * @template T\n * @param {T} value\n * @param {boolean} [skip_warning]\n * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nexport function snapshot(value, skip_warning = false, no_tojson = false) {\n\tif (DEV && !skip_warning) {\n\t\t/** @type {string[]} */\n\t\tconst paths = [];\n\n\t\tconst copy = clone(value, new Map(), '', paths, null, no_tojson);\n\t\tif (paths.length === 1 && paths[0] === '') {\n\t\t\t// value could not be cloned\n\t\t\tw.state_snapshot_uncloneable();\n\t\t} else if (paths.length > 0) {\n\t\t\t// some properties could not be cloned\n\t\t\tconst slice = paths.length > 10 ? paths.slice(0, 7) : paths.slice(0, 10);\n\t\t\tconst excess = paths.length - slice.length;\n\n\t\t\tlet uncloned = slice.map((path) => `- <value>${path}`).join('\\n');\n\t\t\tif (excess > 0) uncloned += `\\n- ...and ${excess} more`;\n\n\t\t\tw.state_snapshot_uncloneable(uncloned);\n\t\t}\n\n\t\treturn copy;\n\t}\n\n\treturn clone(value, new Map(), '', empty, null, no_tojson);\n}\n\n/**\n * @template T\n * @param {T} value\n * @param {Map<T, Snapshot<T>>} cloned\n * @param {string} path\n * @param {string[]} paths\n * @param {null | T} [original] The original value, if `value` was produced from a `toJSON` call\n * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nfunction clone(value, cloned, path, paths, original = null, no_tojson = false) {\n\tif (typeof value === 'object' && value !== null) {\n\t\tvar unwrapped = cloned.get(value);\n\t\tif (unwrapped !== undefined) return unwrapped;\n\n\t\tif (value instanceof Map) return /** @type {Snapshot<T>} */ (new Map(value));\n\t\tif (value instanceof Set) return /** @type {Snapshot<T>} */ (new Set(value));\n\n\t\tif (is_array(value)) {\n\t\t\tvar copy = /** @type {Snapshot<any>} */ (Array(value.length));\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < value.length; i += 1) {\n\t\t\t\tvar element = value[i];\n\t\t\t\tif (i in value) {\n\t\t\t\t\tcopy[i] = clone(element, cloned, DEV ? `${path}[${i}]` : path, paths, null, no_tojson);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (get_prototype_of(value) === object_prototype) {\n\t\t\t/** @type {Snapshot<any>} */\n\t\t\tcopy = {};\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var key of Object.keys(value)) {\n\t\t\t\tcopy[key] = clone(\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tvalue[key],\n\t\t\t\t\tcloned,\n\t\t\t\t\tDEV ? `${path}.${key}` : path,\n\t\t\t\t\tpaths,\n\t\t\t\t\tnull,\n\t\t\t\t\tno_tojson\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t\t}\n\n\t\tif (typeof (/** @type {T & { toJSON?: any } } */ (value).toJSON) === 'function' && !no_tojson) {\n\t\t\treturn clone(\n\t\t\t\t/** @type {T & { toJSON(): any } } */ (value).toJSON(),\n\t\t\t\tcloned,\n\t\t\t\tDEV ? `${path}.toJSON()` : path,\n\t\t\t\tpaths,\n\t\t\t\t// Associate the instance with the toJSON clone\n\t\t\t\tvalue\n\t\t\t);\n\t\t}\n\t}\n\n\tif (value instanceof EventTarget) {\n\t\t// can't be cloned\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n\n\ttry {\n\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t} catch (e) {\n\t\tif (DEV) {\n\t\t\tpaths.push(path);\n\t\t}\n\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/clone.test.ts",
    "content": "import { snapshot } from './clone';\nimport { assert, test } from 'vitest';\nimport { proxy } from '../client/proxy';\n\nfunction capture_warnings() {\n\tconst warnings: string[] = [];\n\n\t// eslint-disable-next-line no-console\n\tconst warn = console.warn;\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn = (message) => warnings.push(message);\n\n\treturn () => {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn = warn;\n\t\treturn warnings;\n\t};\n}\n\ntest('primitive', () => {\n\tassert.equal(42, snapshot(42));\n});\n\ntest('array', () => {\n\tconst array = [1, 2, 3];\n\tconst copy = snapshot(array);\n\n\tassert.deepEqual(copy, array);\n\tassert.notEqual(copy, array);\n});\n\ntest('object', () => {\n\tconst object = { a: 1, b: 2, c: 3 };\n\tconst copy = snapshot(object);\n\n\tassert.deepEqual(copy, object);\n\tassert.notEqual(copy, object);\n});\n\ntest('proxied state', () => {\n\tconst object = proxy({\n\t\ta: {\n\t\t\tb: {\n\t\t\t\tc: 1\n\t\t\t}\n\t\t}\n\t});\n\n\tconst copy = snapshot(object);\n\n\tassert.deepEqual(copy, object);\n\tassert.notEqual(copy, object);\n\n\tobject.a.b.c = 2;\n\tassert.equal(copy.a.b.c, 1);\n});\n\ntest('cycles', () => {\n\tconst object: { self?: any } = {};\n\tobject.self = object;\n\tconst copy = snapshot(object);\n\n\tassert.equal(copy.self, copy);\n});\n\ntest('class with state field', () => {\n\tclass Foo {\n\t\tx = 1;\n\t\t#y = 2;\n\n\t\tget y() {\n\t\t\treturn this.#y;\n\t\t}\n\t}\n\n\tconst copy = snapshot(new Foo());\n\n\t// @ts-expect-error I can't figure out a way to exclude prototype properties\n\tassert.deepEqual(copy, { x: 1 });\n});\n\ntest('class with toJSON', () => {\n\tclass Foo {\n\t\tx = 1;\n\t\t#y = 2;\n\n\t\tget y() {\n\t\t\treturn this.#y;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn {\n\t\t\t\tx: this.x,\n\t\t\t\ty: this.y\n\t\t\t};\n\t\t}\n\t}\n\n\tconst copy = snapshot(new Foo());\n\n\tassert.deepEqual(copy, { x: 1, y: 2 });\n});\n\ntest('reactive class', () => {\n\tclass SvelteMap<T, U> extends Map<T, U> {\n\t\tconstructor(init?: Iterable<[T, U]>) {\n\t\t\tsuper(init);\n\t\t}\n\t}\n\n\tconst map = new SvelteMap([[1, 2]]);\n\tconst copy = snapshot(map);\n\n\tassert.ok(copy instanceof Map);\n\tassert.notOk(copy instanceof SvelteMap);\n\n\tassert.equal(copy.get(1), 2);\n});\n\ntest('uncloneable value', () => {\n\tconst fn = () => {};\n\n\tconst warnings = capture_warnings();\n\tconst copy = snapshot(fn);\n\n\tassert.equal(fn, copy);\n\tassert.deepEqual(warnings(), [\n\t\t'%c[svelte] state_snapshot_uncloneable\\n%cValue cannot be cloned with `$state.snapshot` — the original value was returned\\nhttps://svelte.dev/e/state_snapshot_uncloneable'\n\t]);\n});\n\ntest('uncloneable properties', () => {\n\tconst object = {\n\t\ta: () => {},\n\t\tb: () => {},\n\t\tc: [() => {}, () => {}, () => {}, () => {}, () => {}, () => {}, () => {}, () => {}]\n\t};\n\n\tconst warnings = capture_warnings();\n\tconst copy = snapshot(object);\n\n\tassert.notEqual(object, copy);\n\tassert.equal(object.a, copy.a);\n\tassert.equal(object.b, copy.b);\n\n\tassert.notEqual(object.c, copy.c);\n\tassert.equal(object.c[0], copy.c[0]);\n\n\tassert.deepEqual(warnings(), [\n\t\t`%c[svelte] state_snapshot_uncloneable\n%cThe following properties cannot be cloned with \\`$state.snapshot\\` — the return value contains the originals:\n\n- <value>.a\n- <value>.b\n- <value>.c[0]\n- <value>.c[1]\n- <value>.c[2]\n- <value>.c[3]\n- <value>.c[4]\n- <value>.c[5]\n- <value>.c[6]\n- <value>.c[7]\nhttps://svelte.dev/e/state_snapshot_uncloneable`\n\t]);\n});\n\ntest('many uncloneable properties', () => {\n\tconst array = Array.from({ length: 100 }, () => () => {});\n\n\tconst warnings = capture_warnings();\n\tsnapshot(array);\n\n\tassert.deepEqual(warnings(), [\n\t\t`%c[svelte] state_snapshot_uncloneable\n%cThe following properties cannot be cloned with \\`$state.snapshot\\` — the return value contains the originals:\n\n- <value>[0]\n- <value>[1]\n- <value>[2]\n- <value>[3]\n- <value>[4]\n- <value>[5]\n- <value>[6]\n- ...and 93 more\nhttps://svelte.dev/e/state_snapshot_uncloneable`\n\t]);\n});\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/dev.js",
    "content": "import { DEV } from 'esm-env';\nimport { define_property } from './utils.js';\nimport * as e from './errors.js';\n\n/**\n * @param {string} label\n * @returns {Error & { stack: string } | null}\n */\nexport function get_error(label) {\n\tconst error = new Error();\n\tconst stack = get_stack();\n\n\tif (stack.length === 0) {\n\t\treturn null;\n\t}\n\n\tstack.unshift('\\n');\n\n\tdefine_property(error, 'stack', {\n\t\tvalue: stack.join('\\n')\n\t});\n\n\tdefine_property(error, 'name', {\n\t\tvalue: label\n\t});\n\n\treturn /** @type {Error & { stack: string }} */ (error);\n}\n\n/**\n * @returns {string[]}\n */\nexport function get_stack() {\n\t// @ts-ignore - doesn't exist everywhere\n\tconst limit = Error.stackTraceLimit;\n\t// @ts-ignore - doesn't exist everywhere\n\tError.stackTraceLimit = Infinity;\n\tconst stack = new Error().stack;\n\t// @ts-ignore - doesn't exist everywhere\n\tError.stackTraceLimit = limit;\n\n\tif (!stack) return [];\n\n\tconst lines = stack.split('\\n');\n\tconst new_lines = [];\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i];\n\t\tconst posixified = line.replaceAll('\\\\', '/');\n\n\t\tif (line.trim() === 'Error') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line.includes('validate_each_keys')) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (posixified.includes('svelte/src/internal') || posixified.includes('node_modules/.vite')) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnew_lines.push(line);\n\t}\n\n\treturn new_lines;\n}\n\n/**\n * @param {boolean} condition\n * @param {string} message\n */\nexport function invariant(condition, message) {\n\tif (!DEV) {\n\t\tthrow new Error('invariant(...) was not guarded by if (DEV)');\n\t}\n\n\tif (!condition) e.invariant_violation(message);\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/errors.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n * @param {string} message\n * @returns {never}\n */\nexport function invariant_violation(message) {\n\tif (DEV) {\n\t\tconst error = new Error(`invariant_violation\\nAn invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"${message}\"\\nhttps://svelte.dev/e/invariant_violation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invariant_violation`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Context was not set in a parent component\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in a parent component\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}"
  },
  {
    "path": "packages/svelte/src/internal/shared/types.d.ts",
    "content": "export type Store<V> = {\n\tsubscribe: (run: (value: V) => void) => () => void;\n\tset(value: V): void;\n};\n\nexport type Getters<T> = {\n\t[K in keyof T]: () => T[K];\n};\n\nexport type Snapshot<T> = ReturnType<typeof $state.snapshot<T>>;\n\nexport type MaybePromise<T> = T | Promise<T>;\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/utils.js",
    "content": "// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var includes = Array.prototype.includes;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\nexport var has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template [T=void]\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/validate.js",
    "content": "import { is_void } from '../../utils.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\n\nexport { invalid_default_snippet } from './errors.js';\n\n/**\n * @param {() => string} tag_fn\n * @returns {void}\n */\nexport function validate_void_dynamic_element(tag_fn) {\n\tconst tag = tag_fn();\n\tif (tag && is_void(tag)) {\n\t\tw.dynamic_void_element_content(tag);\n\t}\n}\n\n/** @param {() => unknown} tag_fn */\nexport function validate_dynamic_element_tag(tag_fn) {\n\tconst tag = tag_fn();\n\tconst is_string = typeof tag === 'string';\n\tif (tag && !is_string) {\n\t\te.svelte_element_invalid_this_value();\n\t}\n}\n\n/**\n * @param {any} store\n * @param {string} name\n */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\te.store_invalid_shape(name);\n\t}\n}\n\n/**\n * @template {(...args: any[]) => unknown} T\n * @param {T} fn\n */\nexport function prevent_snippet_stringification(fn) {\n\tfn.toString = () => {\n\t\te.snippet_without_render_tag();\n\t\treturn '';\n\t};\n\treturn fn;\n}\n"
  },
  {
    "path": "packages/svelte/src/internal/shared/warnings.js",
    "content": "/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * `<svelte:element this=\"%tag%\">` is a void element — it cannot have content\n * @param {string} tag\n */\nexport function dynamic_void_element_content(tag) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] dynamic_void_element_content\\n%c\\`<svelte:element this=\"${tag}\">\\` is a void element — it cannot have content\\nhttps://svelte.dev/e/dynamic_void_element_content`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/dynamic_void_element_content`);\n\t}\n}\n\n/**\n * The following properties cannot be cloned with `$state.snapshot` — the return value contains the originals:\n * \n * %properties%\n * @param {string | undefined | null} [properties]\n */\nexport function state_snapshot_uncloneable(properties) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] state_snapshot_uncloneable\\n%c${properties\n\t\t\t\t? `The following properties cannot be cloned with \\`$state.snapshot\\` — the return value contains the originals:\n\n${properties}`\n\t\t\t\t: 'Value cannot be cloned with `$state.snapshot` — the original value was returned'}\\nhttps://svelte.dev/e/state_snapshot_uncloneable`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_snapshot_uncloneable`);\n\t}\n}"
  },
  {
    "path": "packages/svelte/src/internal/types.d.ts",
    "content": "/** Anything except a function */\nexport type NotFunction<T> = T extends Function ? never : T;\n"
  },
  {
    "path": "packages/svelte/src/legacy/legacy-client.js",
    "content": "/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */\nimport { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.js';\nimport { user_pre_effect } from '../internal/client/reactivity/effects.js';\nimport { mutable_source, set } from '../internal/client/reactivity/sources.js';\nimport { hydrate, mount, unmount } from '../internal/client/render.js';\nimport { active_effect, get } from '../internal/client/runtime.js';\nimport { flushSync } from '../internal/client/reactivity/batch.js';\nimport { define_property, is_array } from '../internal/shared/utils.js';\nimport * as e from '../internal/client/errors.js';\nimport * as w from '../internal/client/warnings.js';\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../constants.js';\nimport { component_context, dev_current_component_function } from '../internal/client/context.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\nimport { set_signal_status } from '../internal/client/reactivity/status.js';\n\n/**\n * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {ComponentConstructorOptions<Props> & {\n * \tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n * }} options\n * @returns {SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function createClassComponent(options) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn new Svelte4Component(options);\n}\n\n/**\n * Takes the component function and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots> | Component<Props>} component\n * @returns {ComponentType<SvelteComponent<Props, Events, Slots> & Exports>}\n */\nexport function asClassComponent(component) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn class extends Svelte4Component {\n\t\t/** @param {any} options */\n\t\tconstructor(options) {\n\t\t\tsuper({\n\t\t\t\tcomponent,\n\t\t\t\t...options\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Support using the component as both a class and function during the transition period\n * @typedef  {{new (o: ComponentConstructorOptions): SvelteComponent;(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;}} LegacyComponentType\n */\n\nclass Svelte4Component {\n\t/** @type {any} */\n\t#events;\n\n\t/** @type {Record<string, any>} */\n\t#instance;\n\n\t/**\n\t * @param {ComponentConstructorOptions & {\n\t *  component: any;\n\t * }} options\n\t */\n\tconstructor(options) {\n\t\tvar sources = new Map();\n\n\t\t/**\n\t\t * @param {string | symbol} key\n\t\t * @param {unknown} value\n\t\t */\n\t\tvar add_source = (key, value) => {\n\t\t\tvar s = mutable_source(value, false, false);\n\t\t\tsources.set(key, s);\n\t\t\treturn s;\n\t\t};\n\n\t\t// Replicate coarse-grained props through a proxy that has a version source for\n\t\t// each property, which is incremented on updates to the property itself. Do not\n\t\t// use our $state proxy because that one has fine-grained reactivity.\n\t\tconst props = new Proxy(\n\t\t\t{ ...(options.props || {}), $$events: {} },\n\t\t\t{\n\t\t\t\tget(target, prop) {\n\t\t\t\t\treturn get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\t// Necessary to not throw \"invalid binding\" validation errors on the component side\n\t\t\t\t\tif (prop === LEGACY_PROPS) return true;\n\n\t\t\t\t\tget(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tset(sources.get(prop) ?? add_source(prop, value), value);\n\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.#instance = (options.hydrate ? hydrate : mount)(options.component, {\n\t\t\ttarget: options.target,\n\t\t\tanchor: options.anchor,\n\t\t\tprops,\n\t\t\tcontext: options.context,\n\t\t\tintro: options.intro ?? false,\n\t\t\trecover: options.recover,\n\t\t\ttransformError: options.transformError\n\t\t});\n\n\t\t// We don't flushSync for custom element wrappers or if the user doesn't want it,\n\t\t// or if we're in async mode since `flushSync()` will fail\n\t\tif (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {\n\t\t\tflushSync();\n\t\t}\n\n\t\tthis.#events = props.$$events;\n\n\t\tfor (const key of Object.keys(this.#instance)) {\n\t\t\tif (key === '$set' || key === '$destroy' || key === '$on') continue;\n\t\t\tdefine_property(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#instance[key];\n\t\t\t\t},\n\t\t\t\t/** @param {any} value */\n\t\t\t\tset(value) {\n\t\t\t\t\tthis.#instance[key] = value;\n\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\n\t\tthis.#instance.$set = /** @param {Record<string, any>} next */ (next) => {\n\t\t\tObject.assign(props, next);\n\t\t};\n\n\t\tthis.#instance.$destroy = () => {\n\t\t\tunmount(this.#instance);\n\t\t};\n\t}\n\n\t/** @param {Record<string, any>} props */\n\t$set(props) {\n\t\tthis.#instance.$set(props);\n\t}\n\n\t/**\n\t * @param {string} event\n\t * @param {(...args: any[]) => any} callback\n\t * @returns {any}\n\t */\n\t$on(event, callback) {\n\t\tthis.#events[event] = this.#events[event] || [];\n\n\t\t/** @param {any[]} args */\n\t\tconst cb = (...args) => callback.call(this, ...args);\n\t\tthis.#events[event].push(cb);\n\t\treturn () => {\n\t\t\tthis.#events[event] = this.#events[event].filter(/** @param {any} fn */ (fn) => fn !== cb);\n\t\t};\n\t}\n\n\t$destroy() {\n\t\tthis.#instance.$destroy();\n\t}\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tuser_pre_effect(() => {\n\t\tfn();\n\t\tvar effect = /** @type {import('#client').Effect} */ (active_effect);\n\t\t// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour\n\t\tif ((effect.f & DIRTY) !== 0) {\n\t\t\tlet filename = \"a file (we can't know which one)\";\n\t\t\tif (DEV) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfilename = dev_current_component_function?.[FILENAME] ?? filename;\n\t\t\t}\n\t\t\tw.legacy_recursive_reactive_block(filename);\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\t});\n}\n\n/**\n * Function to mimic the multiple listeners available in svelte 4\n * @deprecated\n * @param {EventListener[]} handlers\n * @returns {EventListener}\n */\nexport function handlers(...handlers) {\n\treturn function (event) {\n\t\tconst { stopImmediatePropagation } = event;\n\t\tlet stopped = false;\n\n\t\tevent.stopImmediatePropagation = () => {\n\t\t\tstopped = true;\n\t\t\tstopImmediatePropagation.call(event);\n\t\t};\n\n\t\tconst errors = [];\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error `this` is not typed\n\t\t\t\thandler?.call(this, event);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\n\t\t\tif (stopped) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n */\nexport function createBubbler() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createBubbler');\n\t}\n\n\treturn (/**@type {string}*/ type) => (/**@type {Event}*/ event) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted,\n\tpassive,\n\tnonpassive\n} from '../internal/client/dom/legacy/event-modifiers.js';\n"
  },
  {
    "path": "packages/svelte/src/legacy/legacy-server.js",
    "content": "/** @import { SvelteComponent } from '../index.js' */\n/** @import { Csp } from '#server' */\nimport { asClassComponent as as_class_component, createClassComponent } from './legacy-client.js';\nimport { render } from '../internal/server/index.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\n\n// By having this as a separate entry point for server environments, we save the client bundle from having to include the server runtime\n\nexport { createClassComponent };\n\n/** @typedef {{ head: string, html: string, css: { code: string, map: null }; hashes?: { script: `sha256-${string}`[] } }} LegacyRenderResult */\n\n/**\n * Takes a Svelte 5 component and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots>} component\n * @returns {typeof SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function asClassComponent(component) {\n\tconst component_constructor = as_class_component(component);\n\t/** @type {(props?: {}, opts?: { $$slots?: {}; context?: Map<any, any>; csp?: Csp; transformError?: (error: unknown) => unknown }) => LegacyRenderResult & PromiseLike<LegacyRenderResult> } */\n\tconst _render = (props, { context, csp, transformError } = {}) => {\n\t\t// @ts-expect-error the typings are off, but this will work if the component is compiled in SSR mode\n\t\tconst result = render(component, { props, context, csp, transformError });\n\n\t\tconst munged = Object.defineProperties(\n\t\t\t/** @type {LegacyRenderResult & PromiseLike<LegacyRenderResult>} */ ({}),\n\t\t\t{\n\t\t\t\tcss: {\n\t\t\t\t\tvalue: { code: '', map: null }\n\t\t\t\t},\n\t\t\t\thead: {\n\t\t\t\t\tget: () => result.head\n\t\t\t\t},\n\t\t\t\thtml: {\n\t\t\t\t\tget: () => result.body\n\t\t\t\t},\n\t\t\t\tthen: {\n\t\t\t\t\t/**\n\t\t\t\t\t * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function.\n\t\t\t\t\t *\n\t\t\t\t\t * @template TResult1\n\t\t\t\t\t * @template [TResult2=never]\n\t\t\t\t\t * @param { (value: LegacyRenderResult) => TResult1 } onfulfilled\n\t\t\t\t\t * @param { (reason: unknown) => TResult2 } onrejected\n\t\t\t\t\t */\n\t\t\t\t\tvalue: (onfulfilled, onrejected) => {\n\t\t\t\t\t\tif (!async_mode_flag) {\n\t\t\t\t\t\t\tconst user_result = onfulfilled({\n\t\t\t\t\t\t\t\tcss: munged.css,\n\t\t\t\t\t\t\t\thead: munged.head,\n\t\t\t\t\t\t\t\thtml: munged.html\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn Promise.resolve(user_result);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn result.then((result) => {\n\t\t\t\t\t\t\treturn onfulfilled({\n\t\t\t\t\t\t\t\tcss: munged.css,\n\t\t\t\t\t\t\t\thead: result.head,\n\t\t\t\t\t\t\t\thtml: result.body,\n\t\t\t\t\t\t\t\thashes: result.hashes\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, onrejected);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn munged;\n\t};\n\n\t// @ts-expect-error this is present for SSR\n\tcomponent_constructor.render = _render;\n\n\t// @ts-ignore\n\treturn component_constructor;\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tfn();\n}\n\nconst noop = () => {};\n\n// event stuff, no need to worry about it for SSR but needs to be there or it will crash\nexport {\n\tnoop as handlers,\n\tnoop as createBubbler,\n\tnoop as once,\n\tnoop as preventDefault,\n\tnoop as self,\n\tnoop as stopImmediatePropagation,\n\tnoop as stopPropagation,\n\tnoop as trusted,\n\tnoop as passive,\n\tnoop as nonpassive\n};\n"
  },
  {
    "path": "packages/svelte/src/motion/index.js",
    "content": "import { MediaQuery } from 'svelte/reactivity';\n\nexport * from './spring.js';\nexport * from './tweened.js';\n\n/**\n * A [media query](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery) that matches if the user [prefers reduced motion](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion).\n *\n * ```svelte\n * <script>\n * \timport { prefersReducedMotion } from 'svelte/motion';\n * \timport { fly } from 'svelte/transition';\n *\n * \tlet visible = $state(false);\n * </script>\n *\n * <button onclick={() => visible = !visible}>\n * \ttoggle\n * </button>\n *\n * {#if visible}\n * \t<p transition:fly={{ y: prefersReducedMotion.current ? 0 : 200 }}>\n * \t\tflies in, unless the user prefers reduced motion\n * \t</p>\n * {/if}\n * ```\n * @type {MediaQuery}\n * @since 5.7.0\n */\nexport const prefersReducedMotion = /*@__PURE__*/ new MediaQuery(\n\t'(prefers-reduced-motion: reduce)'\n);\n"
  },
  {
    "path": "packages/svelte/src/motion/private.d.ts",
    "content": "export interface TickContext {\n\tinv_mass: number;\n\tdt: number;\n\topts: {\n\t\tstiffness: number;\n\t\tdamping: number;\n\t\tprecision: number;\n\t};\n\tsettled: boolean;\n}\n"
  },
  {
    "path": "packages/svelte/src/motion/public.d.ts",
    "content": "import { Readable, type Unsubscriber } from '../store/public.js';\n\nexport interface SpringOptions {\n\tstiffness?: number;\n\tdamping?: number;\n\tprecision?: number;\n}\n\nexport interface SpringUpdateOptions {\n\t/**\n\t * @deprecated Only use this for the spring store; does nothing when set on the Spring class\n\t */\n\thard?: any;\n\t/**\n\t * @deprecated Only use this for the spring store; does nothing when set on the Spring class\n\t */\n\tsoft?: string | number | boolean;\n\t/**\n\t * Only use this for the Spring class; does nothing when set on the spring store\n\t */\n\tinstant?: boolean;\n\t/**\n\t * Only use this for the Spring class; does nothing when set on the spring store\n\t */\n\tpreserveMomentum?: number;\n}\n\nexport type Updater<T> = (target_value: T, value: T) => T;\n\nexport interface TweenOptions<T> {\n\tdelay?: number;\n\tduration?: number | ((from: T, to: T) => number);\n\teasing?: (t: number) => number;\n\tinterpolate?: (a: T, b: T) => (t: number) => T;\n}\n\n// TODO we do declaration merging here in order to not have a breaking change (renaming the Spring interface)\n// this means both the Spring class and the Spring interface are merged into one with some things only\n// existing on one side. In Svelte 6, remove the type definition and move the jsdoc onto the class in spring.js\n\nexport interface Spring<T> extends Readable<T> {\n\tset(new_value: T, opts?: SpringUpdateOptions): Promise<void>;\n\t/**\n\t * @deprecated Only exists on the legacy `spring` store, not the `Spring` class\n\t */\n\tupdate: (fn: Updater<T>, opts?: SpringUpdateOptions) => Promise<void>;\n\t/**\n\t * @deprecated Only exists on the legacy `spring` store, not the `Spring` class\n\t */\n\tsubscribe(fn: (value: T) => void): Unsubscriber;\n\tprecision: number;\n\tdamping: number;\n\tstiffness: number;\n}\n\n/**\n * A wrapper for a value that behaves in a spring-like fashion. Changes to `spring.target` will cause `spring.current` to\n * move towards it over time, taking account of the `spring.stiffness` and `spring.damping` parameters.\n *\n * ```svelte\n * <script>\n * \timport { Spring } from 'svelte/motion';\n *\n * \tconst spring = new Spring(0);\n * </script>\n *\n * <input type=\"range\" bind:value={spring.target} />\n * <input type=\"range\" bind:value={spring.current} disabled />\n * ```\n * @since 5.8.0\n */\nexport class Spring<T> {\n\tconstructor(value: T, options?: SpringOptions);\n\n\t/**\n\t * Create a spring whose value is bound to the return value of `fn`. This must be called\n\t * inside an effect root (for example, during component initialisation).\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { Spring } from 'svelte/motion';\n\t *\n\t * \tlet { number } = $props();\n\t *\n\t * \tconst spring = Spring.of(() => number);\n\t * </script>\n\t * ```\n\t */\n\tstatic of<U>(fn: () => U, options?: SpringOptions): Spring<U>;\n\n\t/**\n\t * Sets `spring.target` to `value` and returns a `Promise` that resolves if and when `spring.current` catches up to it.\n\t *\n\t * If `options.instant` is `true`, `spring.current` immediately matches `spring.target`.\n\t *\n\t * If `options.preserveMomentum` is provided, the spring will continue on its current trajectory for\n\t * the specified number of milliseconds. This is useful for things like 'fling' gestures.\n\t */\n\tset(value: T, options?: SpringUpdateOptions): Promise<void>;\n\n\tdamping: number;\n\tprecision: number;\n\tstiffness: number;\n\t/**\n\t * The end value of the spring.\n\t * This property only exists on the `Spring` class, not the legacy `spring` store.\n\t */\n\ttarget: T;\n\t/**\n\t * The current value of the spring.\n\t * This property only exists on the `Spring` class, not the legacy `spring` store.\n\t */\n\tget current(): T;\n}\n\nexport interface Tweened<T> extends Readable<T> {\n\tset(value: T, opts?: TweenOptions<T>): Promise<void>;\n\tupdate(updater: Updater<T>, opts?: TweenOptions<T>): Promise<void>;\n}\n\nexport { prefersReducedMotion, spring, tweened, Tween } from './index.js';\n"
  },
  {
    "path": "packages/svelte/src/motion/spring.js",
    "content": "/** @import { Task } from '#client' */\n/** @import { TickContext } from './private.js' */\n/** @import { Spring as SpringStore, SpringOptions, SpringUpdateOptions } from './public.js' */\nimport { writable } from '../store/shared/index.js';\nimport { loop } from '../internal/client/loop.js';\nimport { raf } from '../internal/client/timing.js';\nimport { is_date } from './utils.js';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { render_effect } from '../internal/client/reactivity/effects.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { deferred, noop } from '../internal/shared/utils.js';\nimport { DEV } from 'esm-env';\n\n/**\n * @template T\n * @param {TickContext} ctx\n * @param {T} last_value\n * @param {T} current_value\n * @param {T} target_value\n * @returns {T}\n */\nfunction tick_spring(ctx, last_value, current_value, target_value) {\n\tif (typeof current_value === 'number' || is_date(current_value)) {\n\t\t// @ts-ignore\n\t\tconst delta = target_value - current_value;\n\t\t// @ts-ignore\n\t\tconst velocity = (current_value - last_value) / (ctx.dt || 1 / 60); // guard div by 0\n\t\tconst spring = ctx.opts.stiffness * delta;\n\t\tconst damper = ctx.opts.damping * velocity;\n\t\tconst acceleration = (spring - damper) * ctx.inv_mass;\n\t\tconst d = (velocity + acceleration) * ctx.dt;\n\t\tif (Math.abs(d) < ctx.opts.precision && Math.abs(delta) < ctx.opts.precision) {\n\t\t\treturn target_value; // settled\n\t\t} else {\n\t\t\tctx.settled = false; // signal loop to keep ticking\n\t\t\t// @ts-ignore\n\t\t\treturn is_date(current_value) ? new Date(current_value.getTime() + d) : current_value + d;\n\t\t}\n\t} else if (Array.isArray(current_value)) {\n\t\t// @ts-ignore\n\t\treturn current_value.map((_, i) =>\n\t\t\t// @ts-ignore\n\t\t\ttick_spring(ctx, last_value[i], current_value[i], target_value[i])\n\t\t);\n\t} else if (typeof current_value === 'object') {\n\t\tconst next_value = {};\n\t\tfor (const k in current_value) {\n\t\t\t// @ts-ignore\n\t\t\tnext_value[k] = tick_spring(ctx, last_value[k], current_value[k], target_value[k]);\n\t\t}\n\t\t// @ts-ignore\n\t\treturn next_value;\n\t} else {\n\t\tthrow new Error(`Cannot spring ${typeof current_value} values`);\n\t}\n}\n\n/**\n * The spring function in Svelte creates a store whose value is animated, with a motion that simulates the behavior of a spring. This means when the value changes, instead of transitioning at a steady rate, it \"bounces\" like a spring would, depending on the physics parameters provided. This adds a level of realism to the transitions and can enhance the user experience.\n *\n * @deprecated Use [`Spring`](https://svelte.dev/docs/svelte/svelte-motion#Spring) instead\n * @template [T=any]\n * @param {T} [value]\n * @param {SpringOptions} [opts]\n * @returns {SpringStore<T>}\n */\nexport function spring(value, opts = {}) {\n\tconst store = writable(value);\n\tconst { stiffness = 0.15, damping = 0.8, precision = 0.01 } = opts;\n\t/** @type {number} */\n\tlet last_time;\n\t/** @type {Task | null} */\n\tlet task;\n\t/** @type {object} */\n\tlet current_token;\n\n\tlet last_value = /** @type {T} */ (value);\n\tlet target_value = /** @type {T | undefined} */ (value);\n\n\tlet inv_mass = 1;\n\tlet inv_mass_recovery_rate = 0;\n\tlet cancel_task = false;\n\t/**\n\t * @param {T} new_value\n\t * @param {SpringUpdateOptions} opts\n\t * @returns {Promise<void>}\n\t */\n\tfunction set(new_value, opts = {}) {\n\t\ttarget_value = new_value;\n\t\tconst token = (current_token = {});\n\t\tif (value == null || opts.hard || (spring.stiffness >= 1 && spring.damping >= 1)) {\n\t\t\tcancel_task = true; // cancel any running animation\n\t\t\tlast_time = raf.now();\n\t\t\tlast_value = new_value;\n\t\t\tstore.set((value = target_value));\n\t\t\treturn Promise.resolve();\n\t\t} else if (opts.soft) {\n\t\t\tconst rate = opts.soft === true ? 0.5 : +opts.soft;\n\t\t\tinv_mass_recovery_rate = 1 / (rate * 60);\n\t\t\tinv_mass = 0; // infinite mass, unaffected by spring forces\n\t\t}\n\t\tif (!task) {\n\t\t\tlast_time = raf.now();\n\t\t\tcancel_task = false;\n\t\t\ttask = loop((now) => {\n\t\t\t\tif (cancel_task) {\n\t\t\t\t\tcancel_task = false;\n\t\t\t\t\ttask = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tinv_mass = Math.min(inv_mass + inv_mass_recovery_rate, 1);\n\n\t\t\t\t// clamp elapsed time to 1/30th of a second, so that longer pauses\n\t\t\t\t// (blocked thread or inactive tab) don't cause the spring to go haywire\n\t\t\t\tconst elapsed = Math.min(now - last_time, 1000 / 30);\n\n\t\t\t\t/** @type {TickContext} */\n\t\t\t\tconst ctx = {\n\t\t\t\t\tinv_mass,\n\t\t\t\t\topts: spring,\n\t\t\t\t\tsettled: true,\n\t\t\t\t\tdt: (elapsed * 60) / 1000\n\t\t\t\t};\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst next_value = tick_spring(ctx, last_value, value, target_value);\n\t\t\t\tlast_time = now;\n\t\t\t\tlast_value = /** @type {T} */ (value);\n\t\t\t\tstore.set((value = /** @type {T} */ (next_value)));\n\t\t\t\tif (ctx.settled) {\n\t\t\t\t\ttask = null;\n\t\t\t\t}\n\t\t\t\treturn !ctx.settled;\n\t\t\t});\n\t\t}\n\t\treturn new Promise((fulfil) => {\n\t\t\t/** @type {Task} */ (task).promise.then(() => {\n\t\t\t\tif (token === current_token) fulfil();\n\t\t\t});\n\t\t});\n\t}\n\t/** @type {SpringStore<T>} */\n\t// @ts-expect-error - class-only properties are missing\n\tconst spring = {\n\t\tset,\n\t\tupdate: (fn, opts) => set(fn(/** @type {T} */ (target_value), /** @type {T} */ (value)), opts),\n\t\tsubscribe: store.subscribe,\n\t\tstiffness,\n\t\tdamping,\n\t\tprecision\n\t};\n\treturn spring;\n}\n\n/**\n * A wrapper for a value that behaves in a spring-like fashion. Changes to `spring.target` will cause `spring.current` to\n * move towards it over time, taking account of the `spring.stiffness` and `spring.damping` parameters.\n *\n * ```svelte\n * <script>\n * \timport { Spring } from 'svelte/motion';\n *\n * \tconst spring = new Spring(0);\n * </script>\n *\n * <input type=\"range\" bind:value={spring.target} />\n * <input type=\"range\" bind:value={spring.current} disabled />\n * ```\n * @template T\n * @since 5.8.0\n */\nexport class Spring {\n\t#stiffness = state(0.15);\n\t#damping = state(0.8);\n\t#precision = state(0.01);\n\n\t#current;\n\t#target;\n\n\t#last_value = /** @type {T} */ (undefined);\n\t#last_time = 0;\n\n\t#inverse_mass = 1;\n\t#momentum = 0;\n\n\t/** @type {import('../internal/client/types').Task | null} */\n\t#task = null;\n\n\t/** @type {ReturnType<typeof deferred> | null} */\n\t#deferred = null;\n\n\t/**\n\t * @param {T} value\n\t * @param {SpringOptions} [options]\n\t */\n\tconstructor(value, options = {}) {\n\t\tthis.#current = DEV ? tag(state(value), 'Spring.current') : state(value);\n\t\tthis.#target = DEV ? tag(state(value), 'Spring.target') : state(value);\n\n\t\tif (typeof options.stiffness === 'number') this.#stiffness.v = clamp(options.stiffness, 0, 1);\n\t\tif (typeof options.damping === 'number') this.#damping.v = clamp(options.damping, 0, 1);\n\t\tif (typeof options.precision === 'number') this.#precision.v = options.precision;\n\n\t\tif (DEV) {\n\t\t\ttag(this.#stiffness, 'Spring.stiffness');\n\t\t\ttag(this.#damping, 'Spring.damping');\n\t\t\ttag(this.#precision, 'Spring.precision');\n\t\t\ttag(this.#current, 'Spring.current');\n\t\t\ttag(this.#target, 'Spring.target');\n\t\t}\n\t}\n\n\t/**\n\t * Create a spring whose value is bound to the return value of `fn`. This must be called\n\t * inside an effect root (for example, during component initialisation).\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { Spring } from 'svelte/motion';\n\t *\n\t * \tlet { number } = $props();\n\t *\n\t * \tconst spring = Spring.of(() => number);\n\t * </script>\n\t * ```\n\t * @template U\n\t * @param {() => U} fn\n\t * @param {SpringOptions} [options]\n\t */\n\tstatic of(fn, options) {\n\t\tconst spring = new Spring(fn(), options);\n\n\t\trender_effect(() => {\n\t\t\tspring.set(fn());\n\t\t});\n\n\t\treturn spring;\n\t}\n\n\t/** @param {T} value */\n\t#update(value) {\n\t\tset(this.#target, value);\n\n\t\tthis.#current.v ??= value;\n\t\tthis.#last_value ??= this.#current.v;\n\n\t\tif (!this.#task) {\n\t\t\tthis.#last_time = raf.now();\n\n\t\t\tvar inv_mass_recovery_rate = 1000 / (this.#momentum * 60);\n\n\t\t\tthis.#task ??= loop((now) => {\n\t\t\t\tthis.#inverse_mass = Math.min(this.#inverse_mass + inv_mass_recovery_rate, 1);\n\n\t\t\t\t// clamp elapsed time to 1/30th of a second, so that longer pauses\n\t\t\t\t// (blocked thread or inactive tab) don't cause the spring to go haywire\n\t\t\t\tconst elapsed = Math.min(now - this.#last_time, 1000 / 30);\n\n\t\t\t\t/** @type {import('./private').TickContext} */\n\t\t\t\tconst ctx = {\n\t\t\t\t\tinv_mass: this.#inverse_mass,\n\t\t\t\t\topts: {\n\t\t\t\t\t\tstiffness: this.#stiffness.v,\n\t\t\t\t\t\tdamping: this.#damping.v,\n\t\t\t\t\t\tprecision: this.#precision.v\n\t\t\t\t\t},\n\t\t\t\t\tsettled: true,\n\t\t\t\t\tdt: (elapsed * 60) / 1000\n\t\t\t\t};\n\n\t\t\t\tvar next = tick_spring(ctx, this.#last_value, this.#current.v, this.#target.v);\n\t\t\t\tthis.#last_value = this.#current.v;\n\t\t\t\tthis.#last_time = now;\n\t\t\t\tset(this.#current, next);\n\n\t\t\t\tif (ctx.settled) {\n\t\t\t\t\tthis.#task = null;\n\t\t\t\t}\n\n\t\t\t\treturn !ctx.settled;\n\t\t\t});\n\t\t}\n\n\t\treturn this.#task.promise;\n\t}\n\n\t/**\n\t * Sets `spring.target` to `value` and returns a `Promise` that resolves if and when `spring.current` catches up to it.\n\t *\n\t * If `options.instant` is `true`, `spring.current` immediately matches `spring.target`.\n\t *\n\t * If `options.preserveMomentum` is provided, the spring will continue on its current trajectory for\n\t * the specified number of milliseconds. This is useful for things like 'fling' gestures.\n\t *\n\t * @param {T} value\n\t * @param {SpringUpdateOptions} [options]\n\t */\n\tset(value, options) {\n\t\tthis.#deferred?.reject(new Error('Aborted'));\n\n\t\tif (options?.instant || this.#current.v === undefined) {\n\t\t\tthis.#task?.abort();\n\t\t\tthis.#task = null;\n\t\t\tset(this.#current, set(this.#target, value));\n\t\t\tthis.#last_value = value;\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tif (options?.preserveMomentum) {\n\t\t\tthis.#inverse_mass = 0;\n\t\t\tthis.#momentum = options.preserveMomentum;\n\t\t}\n\n\t\tvar d = (this.#deferred = deferred());\n\t\td.promise.catch(noop);\n\n\t\tthis.#update(value).then(() => {\n\t\t\tif (d !== this.#deferred) return;\n\t\t\td.resolve(undefined);\n\t\t});\n\n\t\treturn d.promise;\n\t}\n\n\tget current() {\n\t\treturn get(this.#current);\n\t}\n\n\tget damping() {\n\t\treturn get(this.#damping);\n\t}\n\n\tset damping(v) {\n\t\tset(this.#damping, clamp(v, 0, 1));\n\t}\n\n\tget precision() {\n\t\treturn get(this.#precision);\n\t}\n\n\tset precision(v) {\n\t\tset(this.#precision, v);\n\t}\n\n\tget stiffness() {\n\t\treturn get(this.#stiffness);\n\t}\n\n\tset stiffness(v) {\n\t\tset(this.#stiffness, clamp(v, 0, 1));\n\t}\n\n\tget target() {\n\t\treturn get(this.#target);\n\t}\n\n\tset target(v) {\n\t\tthis.set(v);\n\t}\n}\n\n/**\n * @param {number} n\n * @param {number} min\n * @param {number} max\n */\nfunction clamp(n, min, max) {\n\treturn Math.max(min, Math.min(max, n));\n}\n"
  },
  {
    "path": "packages/svelte/src/motion/tweened.js",
    "content": "/** @import { Task } from '../internal/client/types' */\n/** @import { Tweened, TweenOptions } from './public' */\nimport { writable } from '../store/shared/index.js';\nimport { raf } from '../internal/client/timing.js';\nimport { loop } from '../internal/client/loop.js';\nimport { linear } from '../easing/index.js';\nimport { is_date } from './utils.js';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get, render_effect } from 'svelte/internal/client';\nimport { DEV } from 'esm-env';\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {(t: number) => T}\n */\nfunction get_interpolator(a, b) {\n\tif (a === b || a !== a) return () => a;\n\n\tconst type = typeof a;\n\tif (type !== typeof b || Array.isArray(a) !== Array.isArray(b)) {\n\t\tthrow new Error('Cannot interpolate values of different type');\n\t}\n\n\tif (Array.isArray(a)) {\n\t\tconst arr = /** @type {Array<any>} */ (b).map((bi, i) => {\n\t\t\treturn get_interpolator(/** @type {Array<any>} */ (a)[i], bi);\n\t\t});\n\n\t\t// @ts-ignore\n\t\treturn (t) => arr.map((fn) => fn(t));\n\t}\n\n\tif (type === 'object') {\n\t\tif (!a || !b) {\n\t\t\tthrow new Error('Object cannot be null');\n\t\t}\n\n\t\tif (is_date(a) && is_date(b)) {\n\t\t\tconst an = a.getTime();\n\t\t\tconst bn = b.getTime();\n\t\t\tconst delta = bn - an;\n\n\t\t\t// @ts-ignore\n\t\t\treturn (t) => new Date(an + t * delta);\n\t\t}\n\n\t\tconst keys = Object.keys(b);\n\n\t\t/** @type {Record<string, (t: number) => T>} */\n\t\tconst interpolators = {};\n\t\tkeys.forEach((key) => {\n\t\t\t// @ts-ignore\n\t\t\tinterpolators[key] = get_interpolator(a[key], b[key]);\n\t\t});\n\n\t\t// @ts-ignore\n\t\treturn (t) => {\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tconst result = {};\n\t\t\tkeys.forEach((key) => {\n\t\t\t\tresult[key] = interpolators[key](t);\n\t\t\t});\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tif (type === 'number') {\n\t\tconst delta = /** @type {number} */ (b) - /** @type {number} */ (a);\n\t\t// @ts-ignore\n\t\treturn (t) => a + t * delta;\n\t}\n\n\t// for non-numeric values, snap to the final value immediately\n\treturn () => b;\n}\n\n/**\n * A tweened store in Svelte is a special type of store that provides smooth transitions between state values over time.\n *\n * @deprecated Use [`Tween`](https://svelte.dev/docs/svelte/svelte-motion#Tween) instead\n * @template T\n * @param {T} [value]\n * @param {TweenOptions<T>} [defaults]\n * @returns {Tweened<T>}\n */\nexport function tweened(value, defaults = {}) {\n\tconst store = writable(value);\n\t/** @type {Task} */\n\tlet task;\n\tlet target_value = value;\n\t/**\n\t * @param {T} new_value\n\t * @param {TweenOptions<T>} [opts]\n\t */\n\tfunction set(new_value, opts) {\n\t\ttarget_value = new_value;\n\n\t\tif (value == null) {\n\t\t\tstore.set((value = new_value));\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\t/** @type {Task | null} */\n\t\tlet previous_task = task;\n\n\t\tlet started = false;\n\t\tlet {\n\t\t\tdelay = 0,\n\t\t\tduration = 400,\n\t\t\teasing = linear,\n\t\t\tinterpolate = get_interpolator\n\t\t} = { ...defaults, ...opts };\n\n\t\tif (duration === 0) {\n\t\t\tif (previous_task) {\n\t\t\t\tprevious_task.abort();\n\t\t\t\tprevious_task = null;\n\t\t\t}\n\t\t\tstore.set((value = target_value));\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst start = raf.now() + delay;\n\n\t\t/** @type {(t: number) => T} */\n\t\tlet fn;\n\t\ttask = loop((now) => {\n\t\t\tif (now < start) return true;\n\t\t\tif (!started) {\n\t\t\t\tfn = interpolate(/** @type {any} */ (value), new_value);\n\t\t\t\tif (typeof duration === 'function')\n\t\t\t\t\tduration = duration(/** @type {any} */ (value), new_value);\n\t\t\t\tstarted = true;\n\t\t\t}\n\t\t\tif (previous_task) {\n\t\t\t\tprevious_task.abort();\n\t\t\t\tprevious_task = null;\n\t\t\t}\n\t\t\tconst elapsed = now - start;\n\t\t\tif (elapsed > /** @type {number} */ (duration)) {\n\t\t\t\tstore.set((value = new_value));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// @ts-ignore\n\t\t\tstore.set((value = fn(easing(elapsed / duration))));\n\t\t\treturn true;\n\t\t});\n\t\treturn task.promise;\n\t}\n\treturn {\n\t\tset,\n\t\tupdate: (fn, opts) =>\n\t\t\tset(fn(/** @type {any} */ (target_value), /** @type {any} */ (value)), opts),\n\t\tsubscribe: store.subscribe\n\t};\n}\n\n/**\n * A wrapper for a value that tweens smoothly to its target value. Changes to `tween.target` will cause `tween.current` to\n * move towards it over time, taking account of the `delay`, `duration` and `easing` options.\n *\n * ```svelte\n * <script>\n * \timport { Tween } from 'svelte/motion';\n *\n * \tconst tween = new Tween(0);\n * </script>\n *\n * <input type=\"range\" bind:value={tween.target} />\n * <input type=\"range\" bind:value={tween.current} disabled />\n * ```\n * @template T\n * @since 5.8.0\n */\nexport class Tween {\n\t#current;\n\t#target;\n\n\t/** @type {TweenOptions<T>} */\n\t#defaults;\n\n\t/** @type {import('../internal/client/types').Task | null} */\n\t#task = null;\n\n\t/**\n\t * @param {T} value\n\t * @param {TweenOptions<T>} options\n\t */\n\tconstructor(value, options = {}) {\n\t\tthis.#current = state(value);\n\t\tthis.#target = state(value);\n\t\tthis.#defaults = options;\n\n\t\tif (DEV) {\n\t\t\ttag(this.#current, 'Tween.current');\n\t\t\ttag(this.#target, 'Tween.target');\n\t\t}\n\t}\n\n\t/**\n\t * Create a tween whose value is bound to the return value of `fn`. This must be called\n\t * inside an effect root (for example, during component initialisation).\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { Tween } from 'svelte/motion';\n\t *\n\t * \tlet { number } = $props();\n\t *\n\t * \tconst tween = Tween.of(() => number);\n\t * </script>\n\t * ```\n\t * @template U\n\t * @param {() => U} fn\n\t * @param {TweenOptions<U>} [options]\n\t */\n\tstatic of(fn, options) {\n\t\tconst tween = new Tween(fn(), options);\n\n\t\trender_effect(() => {\n\t\t\ttween.set(fn());\n\t\t});\n\n\t\treturn tween;\n\t}\n\n\t/**\n\t * Sets `tween.target` to `value` and returns a `Promise` that resolves if and when `tween.current` catches up to it.\n\t *\n\t * If `options` are provided, they will override the tween's defaults.\n\t * @param {T} value\n\t * @param {TweenOptions<T>} [options]\n\t * @returns\n\t */\n\tset(value, options) {\n\t\tset(this.#target, value);\n\n\t\tlet {\n\t\t\tdelay = 0,\n\t\t\tduration = 400,\n\t\t\teasing = linear,\n\t\t\tinterpolate = get_interpolator\n\t\t} = { ...this.#defaults, ...options };\n\n\t\tif (duration === 0) {\n\t\t\tthis.#task?.abort();\n\t\t\tset(this.#current, value);\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst start = raf.now() + delay;\n\n\t\t/** @type {(t: number) => T} */\n\t\tlet fn;\n\t\tlet started = false;\n\t\tlet previous_task = this.#task;\n\n\t\tthis.#task = loop((now) => {\n\t\t\tif (now < start) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!started) {\n\t\t\t\tstarted = true;\n\n\t\t\t\tconst prev = this.#current.v;\n\n\t\t\t\tfn = interpolate(prev, value);\n\n\t\t\t\tif (typeof duration === 'function') {\n\t\t\t\t\tduration = duration(prev, value);\n\t\t\t\t}\n\n\t\t\t\tprevious_task?.abort();\n\t\t\t}\n\n\t\t\tconst elapsed = now - start;\n\n\t\t\tif (elapsed > /** @type {number} */ (duration)) {\n\t\t\t\tset(this.#current, value);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tset(this.#current, fn(easing(elapsed / /** @type {number} */ (duration))));\n\t\t\treturn true;\n\t\t});\n\n\t\treturn this.#task.promise;\n\t}\n\n\tget current() {\n\t\treturn get(this.#current);\n\t}\n\n\tget target() {\n\t\treturn get(this.#target);\n\t}\n\n\tset target(v) {\n\t\tthis.set(v);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/motion/utils.js",
    "content": "/**\n * @param {any} obj\n * @returns {obj is Date}\n */\nexport function is_date(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Date]';\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/create-subscriber.js",
    "content": "import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/date.js",
    "content": "/** @import { Source } from '#client' */\nimport { derived } from '../internal/client/index.js';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { active_reaction, get, set_active_reaction } from '../internal/client/runtime.js';\nimport { DEV } from 'esm-env';\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object.\n * Reading the date (whether with methods like `date.getTime()` or `date.toString()`, or via things like [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))\n * in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated when the value of the date changes.\n *\n * ```svelte\n * <script>\n * \timport { SvelteDate } from 'svelte/reactivity';\n *\n * \tconst date = new SvelteDate();\n *\n * \tconst formatter = new Intl.DateTimeFormat(undefined, {\n * \t  hour: 'numeric',\n * \t  minute: 'numeric',\n * \t  second: 'numeric'\n * \t});\n *\n * \t$effect(() => {\n * \t\tconst interval = setInterval(() => {\n * \t\t\tdate.setTime(Date.now());\n * \t\t}, 1000);\n *\n * \t\treturn () => {\n * \t\t\tclearInterval(interval);\n * \t\t};\n * \t});\n * </script>\n *\n * <p>The time is {formatter.format(date)}</p>\n * ```\n */\nexport class SvelteDate extends Date {\n\t#time = state(super.getTime());\n\n\t/** @type {Map<keyof Date, Source<unknown>>} */\n\t#deriveds = new Map();\n\n\t#reaction = active_reaction;\n\n\t/** @param {any[]} params */\n\tconstructor(...params) {\n\t\t// @ts-ignore\n\t\tsuper(...params);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#time, 'SvelteDate.#time');\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteDate.prototype;\n\t\tvar date_proto = Date.prototype;\n\n\t\tvar methods = /** @type {Array<keyof Date & string>} */ (\n\t\t\tObject.getOwnPropertyNames(date_proto)\n\t\t);\n\n\t\tfor (const method of methods) {\n\t\t\tif (method.startsWith('get') || method.startsWith('to') || method === 'valueOf') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tproto[method] = function (...args) {\n\t\t\t\t\t// don't memoize if there are arguments\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (args.length > 0) {\n\t\t\t\t\t\tget(this.#time);\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\treturn date_proto[method].apply(this, args);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar d = this.#deriveds.get(method);\n\n\t\t\t\t\tif (d === undefined) {\n\t\t\t\t\t\t// lazily create the derived, but as though it were being\n\t\t\t\t\t\t// created at the same time as the class instance\n\t\t\t\t\t\tconst reaction = active_reaction;\n\t\t\t\t\t\tset_active_reaction(this.#reaction);\n\n\t\t\t\t\t\td = derived(() => {\n\t\t\t\t\t\t\tget(this.#time);\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn date_proto[method].apply(this, args);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tthis.#deriveds.set(method, d);\n\n\t\t\t\t\t\tset_active_reaction(reaction);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn get(d);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (method.startsWith('set')) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tproto[method] = function (...args) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tvar result = date_proto[method].apply(this, args);\n\t\t\t\t\tset(this.#time, date_proto.getTime.call(this));\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/date.test.ts",
    "content": "import { render_effect, effect_root } from '../internal/client/reactivity/effects.js';\nimport { flushSync } from '../index-client.js';\nimport { SvelteDate } from './date.js';\nimport { assert, test } from 'vitest';\nimport { derived, get } from 'svelte/internal/client';\n\nconst initial_date = new Date(2023, 0, 2, 0, 0, 0, 0);\nconst a = new Date(2024, 1, 3, 1, 1, 1, 1);\nconst b = new Date(2025, 2, 4, 2, 2, 2, 2);\nconst c = new Date(2026, 3, 5, 3, 3, 3, 3);\n\ntest('date.setDate and date.setUTCDate', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getDate());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCDate());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setDate(a.getDate());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setDate(date.getDate() + 1);\n\t});\n\n\tflushSync(() => {\n\t\tdate.setDate(date.getDate()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCDate(date.getUTCDate() + 1);\n\t});\n\n\t// Date/UTCDate may vary on some timezones\n\tconst date_plus_zero = new Date(initial_date);\n\tdate_plus_zero.setDate(a.getDate());\n\tconst date_plus_one = new Date(initial_date);\n\tdate_plus_one.setDate(a.getDate() + 1);\n\tconst date_plus_two = new Date(initial_date);\n\tdate_plus_two.setDate(a.getDate() + 2);\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getDate(),\n\t\tinitial_date.getUTCDate(),\n\t\tdate_plus_zero.getDate(),\n\t\tdate_plus_zero.getUTCDate(),\n\t\tdate_plus_one.getDate(),\n\t\tdate_plus_one.getUTCDate(),\n\t\tdate_plus_two.getDate(),\n\t\tdate_plus_two.getUTCDate()\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setFullYear and date.setUTCFullYear', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getFullYear());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCFullYear());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setFullYear(a.getFullYear());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setFullYear(b.getFullYear());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setFullYear(b.getFullYear()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCFullYear(c.getUTCFullYear());\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getFullYear(),\n\t\tinitial_date.getUTCFullYear(),\n\t\ta.getFullYear(),\n\t\ta.getUTCFullYear(),\n\t\tb.getFullYear(),\n\t\tb.getUTCFullYear(),\n\t\tc.getFullYear(),\n\t\tc.getUTCFullYear()\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setHours and date.setUTCHours', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getHours() % 24);\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCHours() % 24);\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setHours(a.getHours());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setHours(date.getHours() + 1);\n\t});\n\n\tflushSync(() => {\n\t\tdate.setHours(date.getHours()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCHours(date.getUTCHours() + 1);\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getHours(),\n\t\tinitial_date.getUTCHours(),\n\t\ta.getHours() % 24,\n\t\ta.getUTCHours() % 24,\n\t\t(a.getHours() + 1) % 24,\n\t\t(a.getUTCHours() + 1) % 24,\n\t\t(a.getHours() + 2) % 24,\n\t\t(a.getUTCHours() + 2) % 24\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setMilliseconds and date.setUTCMilliseconds', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getMilliseconds());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCMilliseconds());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMilliseconds(a.getMilliseconds());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMilliseconds(b.getMilliseconds());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMilliseconds(b.getMilliseconds()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCMilliseconds(c.getUTCMilliseconds());\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getMilliseconds(),\n\t\tinitial_date.getUTCMilliseconds(),\n\t\ta.getMilliseconds(),\n\t\ta.getUTCMilliseconds(),\n\t\tb.getMilliseconds(),\n\t\tb.getUTCMilliseconds(),\n\t\tc.getMilliseconds(),\n\t\tc.getUTCMilliseconds()\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setMinutes and date.setUTCMinutes', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getMinutes());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCMinutes());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMinutes(a.getMinutes());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMinutes(b.getMinutes());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMinutes(b.getMinutes()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCMinutes(c.getUTCMinutes());\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getMinutes(),\n\t\tinitial_date.getUTCMinutes(),\n\t\ta.getMinutes(),\n\t\ta.getUTCMinutes(),\n\t\tb.getMinutes(),\n\t\tb.getUTCMinutes(),\n\t\tc.getMinutes(),\n\t\tc.getUTCMinutes()\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setMonth and date.setUTCMonth', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getMonth());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCMonth());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMonth(a.getMonth());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMonth(b.getMonth());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMonth(b.getMonth()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCMonth(c.getUTCMonth());\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getMonth(),\n\t\tinitial_date.getUTCMonth(),\n\t\ta.getMonth(),\n\t\ta.getUTCMonth(),\n\t\tb.getMonth(),\n\t\tb.getUTCMonth(),\n\t\tc.getMonth(),\n\t\tc.getUTCMonth()\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setSeconds and date.setUTCSeconds', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getSeconds());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getUTCSeconds());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setSeconds(a.getSeconds());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setSeconds(b.getSeconds());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setSeconds(b.getSeconds()); // no change expected\n\t});\n\n\tflushSync(() => {\n\t\tdate.setUTCSeconds(c.getUTCSeconds());\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getSeconds(),\n\t\tinitial_date.getUTCSeconds(),\n\t\ta.getSeconds(),\n\t\ta.getUTCSeconds(),\n\t\tb.getSeconds(),\n\t\tb.getUTCSeconds(),\n\t\tc.getSeconds(),\n\t\tc.getUTCSeconds()\n\t]);\n\n\tcleanup();\n});\n\ntest('date.setTime', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getTime());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setTime(a.getTime());\n\t});\n\n\tflushSync(() => {\n\t\tdate.setTime(b.getTime());\n\t});\n\n\tflushSync(() => {\n\t\t// nothing should happen here\n\t\tdate.setTime(b.getTime());\n\t});\n\n\tassert.deepEqual(log, [initial_date.getTime(), a.getTime(), b.getTime()]);\n\n\tcleanup();\n});\n\ntest('date.setYear', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\t// @ts-expect-error\n\tif (!date.setYear) {\n\t\treturn;\n\t}\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\t// @ts-expect-error\n\t\t\tlog.push(date.getYear());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\t// @ts-expect-error\n\t\tdate.setYear(22);\n\t});\n\n\tflushSync(() => {\n\t\t// @ts-expect-error\n\t\tdate.setYear(23);\n\t});\n\n\tflushSync(() => {\n\t\t// nothing should happen here\n\t\t// @ts-expect-error\n\t\tdate.setYear(23);\n\t});\n\n\t// @ts-expect-error\n\tassert.deepEqual(log, [initial_date.getYear(), 22, 23]);\n\n\tcleanup();\n});\n\ntest('date.setSeconds - edge cases', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getSeconds());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getMinutes());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setSeconds(60);\n\t});\n\n\tflushSync(() => {\n\t\tdate.setSeconds(61);\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getSeconds(),\n\t\tinitial_date.getMinutes(),\n\t\tinitial_date.getMinutes() + 1,\n\t\tinitial_date.getSeconds() + 1,\n\t\tinitial_date.getMinutes() + 2\n\t]);\n\n\tcleanup();\n});\n\ntest('Date propagated changes', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getSeconds());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getMonth());\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.getFullYear());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tdate.setMonth(13);\n\t});\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.getSeconds(),\n\t\tinitial_date.getMonth(),\n\t\tinitial_date.getFullYear(),\n\t\t1,\n\t\t2024\n\t]);\n\n\tcleanup();\n});\n\ntest('Date fine grained tests', () => {\n\tconst date = new SvelteDate(initial_date);\n\n\tlet changes: Record<string, boolean> = {\n\t\tgetFullYear: true,\n\t\tgetUTCFullYear: true,\n\t\tgetMonth: true,\n\t\tgetUTCMonth: true,\n\t\tgetDate: true,\n\t\tgetUTCDate: true,\n\t\tgetDay: true,\n\t\tgetUTCDay: true,\n\t\tgetHours: true,\n\t\tgetUTCHours: true,\n\t\tgetMinutes: true,\n\t\tgetUTCMinutes: true,\n\t\tgetSeconds: true,\n\t\tgetUTCSeconds: true,\n\t\tgetMilliseconds: true,\n\t\tgetUTCMilliseconds: true,\n\t\tgetTime: true,\n\t\ttoISOString: true,\n\t\ttoJSON: true,\n\t\ttoUTCString: true,\n\t\ttoString: true,\n\t\ttoLocaleString: true\n\t};\n\tlet test_description: string = '';\n\n\tconst expect_all_changes_to_be_false = () => {\n\t\tfor (const key of Object.keys(changes) as Array<keyof typeof Date>) {\n\t\t\tassert.equal(changes[key], false, `${test_description}: effect for ${key} was not fired`);\n\t\t}\n\t};\n\n\tconst cleanup = effect_root(() => {\n\t\tfor (const key of Object.keys(changes)) {\n\t\t\trender_effect(() => {\n\t\t\t\t// @ts-ignore\n\t\t\t\tdate[key]();\n\t\t\t\tassert.equal(changes[key], true, `${test_description}: for ${key}`);\n\t\t\t\tchanges[key] = false;\n\t\t\t});\n\t\t}\n\t});\n\n\tflushSync(() => {\n\t\texpect_all_changes_to_be_false();\n\t\tchanges = {\n\t\t\t...changes,\n\t\t\tgetFullYear: true,\n\t\t\tgetUTCFullYear: true,\n\t\t\tgetMonth: true,\n\t\t\tgetUTCMonth: true,\n\t\t\tgetDay: true,\n\t\t\tgetUTCDay: true,\n\t\t\tgetTime: true,\n\t\t\ttoISOString: true,\n\t\t\ttoJSON: true,\n\t\t\ttoUTCString: true,\n\t\t\ttoString: true,\n\t\t\ttoLocaleString: true\n\t\t};\n\t\ttest_description = 'changing setFullYear that will cause month/day change as well';\n\t\tdate.setFullYear(initial_date.getFullYear() + 1, initial_date.getMonth() + 1);\n\t});\n\n\tflushSync(() => {\n\t\texpect_all_changes_to_be_false();\n\t\tchanges = {\n\t\t\t...changes,\n\t\t\tgetDate: true,\n\t\t\tgetUTCDate: true,\n\t\t\tgetDay: true,\n\t\t\tgetUTCDay: true,\n\t\t\tgetHours: true,\n\t\t\tgetUTCHours: true,\n\t\t\tgetMinutes: true,\n\t\t\tgetUTCMinutes: true,\n\t\t\tgetSeconds: true,\n\t\t\tgetUTCSeconds: true,\n\t\t\tgetMilliseconds: true,\n\t\t\tgetUTCMilliseconds: true,\n\t\t\tgetTime: true,\n\t\t\ttoISOString: true,\n\t\t\ttoJSON: true,\n\t\t\ttoUTCString: true,\n\t\t\ttoString: true,\n\t\t\ttoLocaleString: true\n\t\t};\n\t\ttest_description = 'changing seconds that will change day/hour/minutes/seconds/milliseconds';\n\t\tdate.setSeconds(61 * 60 * 25 + 1, 10);\n\t});\n\n\tflushSync(() => {\n\t\texpect_all_changes_to_be_false();\n\t\tchanges = {\n\t\t\t...changes,\n\t\t\tgetMonth: true,\n\t\t\tgetUTCMonth: true,\n\t\t\tgetDay: true,\n\t\t\tgetUTCDay: true,\n\t\t\tgetMilliseconds: true,\n\t\t\tgetUTCMilliseconds: true,\n\t\t\tgetTime: true,\n\t\t\ttoISOString: true,\n\t\t\ttoJSON: true,\n\t\t\ttoUTCString: true,\n\t\t\ttoString: true,\n\t\t\ttoLocaleString: true\n\t\t};\n\t\ttest_description = 'changing month';\n\t\tdate.setMonth(date.getMonth() + 1);\n\t});\n\n\tcleanup();\n});\n\ntest('Date.toLocaleString', () => {\n\tconst date = new SvelteDate(initial_date);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.toLocaleString(undefined, { month: 'long', year: 'numeric' }));\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(date.toLocaleString(undefined, { month: 'long' }));\n\t\t});\n\t});\n\n\tflushSync();\n\n\tassert.deepEqual(log, [\n\t\tinitial_date.toLocaleString(undefined, { month: 'long', year: 'numeric' }),\n\t\tinitial_date.toLocaleString(undefined, { month: 'long' })\n\t]);\n\n\tcleanup();\n});\n\ntest('Date.valueOf', () => {\n\tconst date = new SvelteDate(initial_date);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(date.valueOf());\n\t\t});\n\t});\n\n\tflushSync();\n\n\tassert.deepEqual(log, [initial_date.valueOf()]);\n\n\tflushSync(() => {\n\t\tdate.setTime(date.getTime() + 10);\n\t});\n\n\tassert.deepEqual(log, [initial_date.valueOf(), new Date(initial_date.getTime() + 10).valueOf()]);\n\n\tcleanup();\n});\n\ntest('Date.instanceOf', () => {\n\tassert.equal(new SvelteDate() instanceof Date, true);\n});\n\ntest('Date methods invoked for the first time in a derived', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\tconst months = derived(() => {\n\t\t\treturn date.getMonth();\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(get(months));\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tdate.setMonth(date.getMonth() + 1);\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tdate.setMonth(date.getMonth() + 1);\n\t\t});\n\t});\n\n\tassert.deepEqual(log, [0, 1, 2]);\n\n\tcleanup();\n});\n\ntest('Date methods shared between deriveds', () => {\n\tconst date = new SvelteDate(initial_date);\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\tconst year = derived(() => {\n\t\t\treturn date.getFullYear();\n\t\t});\n\t\tconst year2 = derived(() => {\n\t\t\treturn date.getTime(), date.getFullYear();\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(get(year) + '/' + get(year2).toString());\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tdate.setFullYear(date.getFullYear() + 1);\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tdate.setFullYear(date.getFullYear() + 1);\n\t\t});\n\t});\n\n\tassert.deepEqual(log, ['2023/2023', '2024/2024', '2025/2025']);\n\n\tcleanup();\n});\n"
  },
  {
    "path": "packages/svelte/src/reactivity/index-client.js",
    "content": "export { SvelteDate } from './date.js';\nexport { SvelteSet } from './set.js';\nexport { SvelteMap } from './map.js';\nexport { SvelteURL } from './url.js';\nexport { SvelteURLSearchParams } from './url-search-params.js';\nexport { MediaQuery } from './media-query.js';\nexport { createSubscriber } from './create-subscriber.js';\n"
  },
  {
    "path": "packages/svelte/src/reactivity/index-server.js",
    "content": "export const SvelteDate = globalThis.Date;\nexport const SvelteSet = globalThis.Set;\nexport const SvelteMap = globalThis.Map;\nexport const SvelteURL = globalThis.URL;\nexport const SvelteURLSearchParams = globalThis.URLSearchParams;\n\nexport class MediaQuery {\n\tcurrent;\n\t/**\n\t * @param {string} query\n\t * @param {boolean} [matches]\n\t */\n\tconstructor(query, matches = false) {\n\t\tthis.current = matches;\n\t}\n}\n\n/**\n * @param {any} _\n */\nexport function createSubscriber(_) {\n\treturn () => {};\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/map.js",
    "content": "/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { set, source, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\n/**\n * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.\n * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the map is updated.\n *\n * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteMap } from 'svelte/reactivity';\n * \timport { result } from './game.js';\n *\n * \tlet board = new SvelteMap();\n * \tlet player = $state('x');\n * \tlet winner = $derived(result(board));\n *\n * \tfunction reset() {\n * \t\tplayer = 'x';\n * \t\tboard.clear();\n * \t}\n * </script>\n *\n * <div class=\"board\">\n * \t{#each Array(9), i}\n * \t\t<button\n * \t\t\tdisabled={board.has(i) || winner}\n * \t\t\tonclick={() => {\n * \t\t\t\tboard.set(i, player);\n * \t\t\t\tplayer = player === 'x' ? 'o' : 'x';\n * \t\t\t}}\n * \t\t>{board.get(i)}</button>\n * \t{/each}\n * </div>\n *\n * {#if winner}\n * \t<p>{winner} wins!</p>\n * \t<button onclick={reset}>reset</button>\n * {:else}\n * \t<p>{player} is next</p>\n * {/if}\n * ```\n *\n * @template K\n * @template V\n * @extends {Map<K, V>}\n */\nexport class SvelteMap extends Map {\n\t/** @type {Map<K, Source<number>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<readonly [K, V]> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Map(value);\n\n\t\t\ttag(this.#version, 'SvelteMap version');\n\t\t\ttag(this.#size, 'SvelteMap.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var [key, v] of value) {\n\t\t\t\tsuper.set(key, v);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteMap instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t/** @param {K} key */\n\thas(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn\n\t * @param {any} [this_arg]\n\t */\n\tforEach(callbackfn, this_arg) {\n\t\tthis.#read_all();\n\t\tsuper.forEach(callbackfn, this_arg);\n\t}\n\n\t/** @param {K} key */\n\tget(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn super.get(key);\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @param {V} value\n\t * */\n\tset(key, value) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar prev_res = super.get(key);\n\t\tvar res = super.set(key, value);\n\t\tvar version = this.#version;\n\n\t\tif (s === undefined) {\n\t\t\ts = this.#source(0);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t}\n\n\t\t\tsources.set(key, s);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(version);\n\t\t} else if (prev_res !== value) {\n\t\t\tincrement(s);\n\n\t\t\t// if not every reaction of s is a reaction of version we need to also include version\n\t\t\tvar v_reactions = version.reactions === null ? null : new Set(version.reactions);\n\t\t\tvar needs_version_increase =\n\t\t\t\tv_reactions === null ||\n\t\t\t\t!s.reactions?.every((r) =>\n\t\t\t\t\t/** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)\n\t\t\t\t);\n\t\t\tif (needs_version_increase) {\n\t\t\t\tincrement(version);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/** @param {K} key */\n\tdelete(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar res = super.delete(key);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(key);\n\t\t\tset(s, -1);\n\t\t}\n\n\t\tif (res) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\t\tset(this.#size, 0);\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, -1);\n\t\t}\n\t\tincrement(this.#version);\n\t\tsources.clear();\n\t}\n\n\t#read_all() {\n\t\tget(this.#version);\n\n\t\tvar sources = this.#sources;\n\t\tif (this.#size.v !== sources.size) {\n\t\t\tfor (var key of super.keys()) {\n\t\t\t\tif (!sources.has(key)) {\n\t\t\t\t\tvar s = this.#source(0);\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.set(key, s);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ([, s] of this.#sources) {\n\t\t\tget(s);\n\t\t}\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\tvalues() {\n\t\tthis.#read_all();\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tthis.#read_all();\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#size);\n\t\treturn super.size;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/map.test.ts",
    "content": "import { render_effect, effect_root } from '../internal/client/reactivity/effects.js';\nimport { flushSync } from '../index-client.js';\nimport { SvelteMap } from './map.js';\nimport { assert, test } from 'vitest';\n\ntest('map.values()', () => {\n\tconst map = new SvelteMap([\n\t\t[1, 1],\n\t\t[2, 2],\n\t\t[3, 3],\n\t\t[4, 4],\n\t\t[5, 5]\n\t]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(map.size);\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(map.has(3));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(Array.from(map.values()));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tmap.delete(3);\n\t});\n\n\tflushSync(() => {\n\t\tmap.clear();\n\t});\n\n\tflushSync(() => {\n\t\tmap.set(3, 3);\n\t});\n\n\tflushSync(() => {\n\t\tmap.set(3, 4);\n\t});\n\n\tassert.deepEqual(log, [\n\t\t5,\n\t\ttrue,\n\t\t[1, 2, 3, 4, 5],\n\t\t4,\n\t\tfalse,\n\t\t[1, 2, 4, 5],\n\t\t0,\n\t\tfalse,\n\t\t[],\n\t\t1,\n\t\ttrue,\n\t\t[3],\n\t\ttrue,\n\t\t[4]\n\t]);\n\n\tcleanup();\n});\n\ntest('map.get(...)', () => {\n\tconst map = new SvelteMap([\n\t\t[1, 1],\n\t\t[2, 2],\n\t\t[3, 3]\n\t]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push('get 1', map.get(1));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('get 2', map.get(2));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('get 3', map.get(3));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tmap.delete(2);\n\t});\n\n\tflushSync(() => {\n\t\tmap.set(2, 2);\n\t});\n\n\tassert.deepEqual(log, ['get 1', 1, 'get 2', 2, 'get 3', 3, 'get 2', undefined, 'get 2', 2]);\n\n\tcleanup();\n});\n\ntest('map.has(...)', () => {\n\tconst map = new SvelteMap([\n\t\t[1, 1],\n\t\t[2, 2],\n\t\t[3, 3]\n\t]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push('has 1', map.has(1));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('has 2', map.has(2));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('has 3', map.has(3));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tmap.delete(2);\n\t});\n\n\tflushSync(() => {\n\t\tmap.set(2, 2);\n\t});\n\n\tassert.deepEqual(log, [\n\t\t'has 1',\n\t\ttrue,\n\t\t'has 2',\n\t\ttrue,\n\t\t'has 3',\n\t\ttrue,\n\t\t'has 2',\n\t\tfalse,\n\t\t'has 2',\n\t\ttrue\n\t]);\n\n\tcleanup();\n});\n\ntest('map.forEach(...)', () => {\n\tconst map = new SvelteMap([\n\t\t[1, 1],\n\t\t[2, 2],\n\t\t[3, 3]\n\t]);\n\n\tconst log: any = [];\n\tconst this_arg = {};\n\n\tmap.forEach(function (this: unknown, ...args) {\n\t\tlog.push([...args, this]);\n\t}, this_arg);\n\n\tassert.deepEqual(log, [\n\t\t[1, 1, map, this_arg],\n\t\t[2, 2, map, this_arg],\n\t\t[3, 3, map, this_arg]\n\t]);\n});\n\ntest('map.delete(...)', () => {\n\tconst map = new SvelteMap([\n\t\t[1, 1],\n\t\t[2, 2],\n\t\t[3, 3]\n\t]);\n\n\tassert.equal(map.delete(3), true);\n\tassert.equal(map.delete(3), false);\n\n\tassert.deepEqual(Array.from(map.values()), [1, 2]);\n});\n\ntest('map handling of undefined values', () => {\n\tconst map = new SvelteMap();\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\tmap.set(1, undefined);\n\n\t\trender_effect(() => {\n\t\t\tlog.push(map.get(1));\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tmap.delete(1);\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tmap.set(1, 1);\n\t\t});\n\t});\n\n\tassert.deepEqual(log, [undefined, undefined, 1]);\n\n\tcleanup();\n});\n\ntest('map.has() and map.get() with undefined values', () => {\n\tconst map = new SvelteMap<string, undefined | string>([['foo', undefined]]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push('has', map.has('foo'));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('get', map.get('foo'));\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tmap.delete('foo');\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tmap.set('bar', undefined);\n\t\t});\n\t});\n\n\tassert.deepEqual(log, [\n\t\t'has',\n\t\ttrue,\n\t\t'get',\n\t\tundefined,\n\t\t'has',\n\t\tfalse,\n\t\t'get',\n\t\tundefined,\n\t\t// set('bar') bumps version, causing has('foo')/get('foo') effects to re-run\n\t\t'has',\n\t\tfalse,\n\t\t'get',\n\t\tundefined\n\t]);\n\n\tassert.equal(map.has('bar'), true);\n\tassert.equal(map.get('bar'), undefined);\n\n\tcleanup();\n});\n\ntest('map.delete() triggers size reactivity for keys without per-key sources', () => {\n\tconst map = new SvelteMap([\n\t\t[1, 'a'],\n\t\t[2, 'b']\n\t]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(map.size);\n\t\t});\n\n\t\t// delete key 2 which was never individually read (no per-key source)\n\t\tflushSync(() => {\n\t\t\tmap.delete(2);\n\t\t});\n\t});\n\n\tassert.deepEqual(log, [2, 1]);\n\n\tcleanup();\n});\n\ntest('not invoking reactivity when value is not in the map after changes', () => {\n\tconst map = new SvelteMap([[1, 1]]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(map.get(1));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(map.get(2));\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tmap.delete(1);\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tmap.set(1, 1);\n\t\t});\n\t});\n\n\tassert.deepEqual(log, [1, undefined, undefined, undefined, 1, undefined]);\n\n\tcleanup();\n});\n\ntest('Map.instanceOf', () => {\n\tassert.equal(new SvelteMap() instanceof Map, true);\n});\n"
  },
  {
    "path": "packages/svelte/src/reactivity/media-query.js",
    "content": "import { on } from '../events/index.js';\nimport { ReactiveValue } from './reactive-value.js';\n\nconst parenthesis_regex = /\\(.+\\)/;\n\n// these keywords are valid media queries but they need to be without parenthesis\n//\n// eg: new MediaQuery('screen')\n//\n// however because of the auto-parenthesis logic in the constructor since there's no parenthesis\n// in the media query they'll be surrounded by parenthesis\n//\n// however we can check if the media query is only composed of these keywords\n// and skip the auto-parenthesis\n//\n// https://github.com/sveltejs/svelte/issues/15930\nconst non_parenthesized_keywords = new Set(['all', 'print', 'screen', 'and', 'or', 'not', 'only']);\n\n/**\n * Creates a media query and provides a `current` property that reflects whether or not it matches.\n *\n * Use it carefully — during server-side rendering, there is no way to know what the correct value should be, potentially causing content to change upon hydration.\n * If you can use the media query in CSS to achieve the same effect, do that.\n *\n * ```svelte\n * <script>\n * \timport { MediaQuery } from 'svelte/reactivity';\n *\n * \tconst large = new MediaQuery('min-width: 800px');\n * </script>\n *\n * <h1>{large.current ? 'large screen' : 'small screen'}</h1>\n * ```\n * @extends {ReactiveValue<boolean>}\n * @since 5.7.0\n */\nexport class MediaQuery extends ReactiveValue {\n\t/**\n\t * @param {string} query A media query string\n\t * @param {boolean} [fallback] Fallback value for the server\n\t */\n\tconstructor(query, fallback) {\n\t\tlet final_query =\n\t\t\tparenthesis_regex.test(query) ||\n\t\t\t// we need to use `some` here because technically this `window.matchMedia('random,screen')` still returns true\n\t\t\tquery.split(/[\\s,]+/).some((keyword) => non_parenthesized_keywords.has(keyword.trim()))\n\t\t\t\t? query\n\t\t\t\t: `(${query})`;\n\t\tconst q = window.matchMedia(final_query);\n\t\tsuper(\n\t\t\t() => q.matches,\n\t\t\t(update) => on(q, 'change', update)\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/reactive-value.js",
    "content": "import { createSubscriber } from './create-subscriber.js';\n\n/**\n * @template T\n */\nexport class ReactiveValue {\n\t#fn;\n\t#subscribe;\n\n\t/**\n\t *\n\t * @param {() => T} fn\n\t * @param {(update: () => void) => void} onsubscribe\n\t */\n\tconstructor(fn, onsubscribe) {\n\t\tthis.#fn = fn;\n\t\tthis.#subscribe = createSubscriber(onsubscribe);\n\t}\n\n\tget current() {\n\t\tthis.#subscribe();\n\t\treturn this.#fn();\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/set.js",
    "content": "/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { source, set, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\nvar read_methods = ['forEach', 'isDisjointFrom', 'isSubsetOf', 'isSupersetOf'];\nvar set_like_methods = ['difference', 'intersection', 'symmetricDifference', 'union'];\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) object.\n * Reading contents of the set (by iterating, or by reading `set.size` or calling `set.has(...)` as in the [example](https://svelte.dev/playground/53438b51194b4882bcc18cddf9f96f15) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the set is updated.\n *\n * Note that values in a reactive set are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteSet } from 'svelte/reactivity';\n * \tlet monkeys = new SvelteSet();\n *\n * \tfunction toggle(monkey) {\n * \t\tif (monkeys.has(monkey)) {\n * \t\t\tmonkeys.delete(monkey);\n * \t\t} else {\n * \t\t\tmonkeys.add(monkey);\n * \t\t}\n * \t}\n * </script>\n *\n * {#each ['🙈', '🙉', '🙊'] as monkey}\n * \t<button onclick={() => toggle(monkey)}>{monkey}</button>\n * {/each}\n *\n * <button onclick={() => monkeys.clear()}>clear</button>\n *\n * {#if monkeys.has('🙈')}<p>see no evil</p>{/if}\n * {#if monkeys.has('🙉')}<p>hear no evil</p>{/if}\n * {#if monkeys.has('🙊')}<p>speak no evil</p>{/if}\n * ```\n *\n * @template T\n * @extends {Set<T>}\n */\nexport class SvelteSet extends Set {\n\t/** @type {Map<T, Source<boolean>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<T> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Set(value);\n\n\t\t\ttag(this.#version, 'SvelteSet version');\n\t\t\ttag(this.#size, 'SvelteSet.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var element of value) {\n\t\t\t\tsuper.add(element);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteSet instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t// We init as part of the first instance so that we can treeshake this class\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteSet.prototype;\n\t\tvar set_proto = Set.prototype;\n\n\t\tfor (const method of read_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn set_proto[method].apply(this, v);\n\t\t\t};\n\t\t}\n\n\t\tfor (const method of set_like_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar set = /** @type {Set<T>} */ (set_proto[method].apply(this, v));\n\t\t\t\treturn new SvelteSet(set);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @param {T} value */\n\thas(value) {\n\t\tvar has = super.has(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s === undefined) {\n\t\t\tif (!has) {\n\t\t\t\t// If the value doesn't exist, track the version in case it's added later\n\t\t\t\t// but don't create sources willy-nilly to track all possible values\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ts = this.#source(true);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteSet has(${label(value)})`);\n\t\t\t}\n\n\t\t\tsources.set(value, s);\n\t\t}\n\n\t\tget(s);\n\t\treturn has;\n\t}\n\n\t/** @param {T} value */\n\tadd(value) {\n\t\tif (!super.has(value)) {\n\t\t\tsuper.add(value);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @param {T} value */\n\tdelete(value) {\n\t\tvar deleted = super.delete(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(value);\n\t\t\tset(s, false);\n\t\t}\n\n\t\tif (deleted) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn deleted;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, false);\n\t\t}\n\n\t\tsources.clear();\n\t\tset(this.#size, 0);\n\t\tincrement(this.#version);\n\t}\n\n\tkeys() {\n\t\treturn this.values();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.keys();\n\t}\n\n\tget size() {\n\t\treturn get(this.#size);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/set.test.ts",
    "content": "import { render_effect, effect_root } from '../internal/client/reactivity/effects.js';\nimport { flushSync } from '../index-client.js';\nimport { SvelteSet } from './set.js';\nimport { assert, test } from 'vitest';\n\ntest('set.values()', () => {\n\tconst set = new SvelteSet([1, 2, 3, 4, 5]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(set.size);\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(set.has(3));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push(Array.from(set));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tset.delete(3);\n\t});\n\n\tflushSync(() => {\n\t\tset.clear();\n\t});\n\n\tassert.deepEqual(log, [5, true, [1, 2, 3, 4, 5], 4, false, [1, 2, 4, 5], 0, false, []]);\n\n\tcleanup();\n});\n\ntest('set.has(...)', () => {\n\tconst set = new SvelteSet([1, 2, 3]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push('has 1', set.has(1));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('has 2', set.has(2));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('has 3', set.has(3));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tset.delete(2);\n\t});\n\n\tflushSync(() => {\n\t\tset.add(2);\n\t});\n\n\tassert.deepEqual(log, [\n\t\t'has 1',\n\t\ttrue,\n\t\t'has 2',\n\t\ttrue,\n\t\t'has 3',\n\t\ttrue,\n\t\t'has 2',\n\t\tfalse,\n\t\t'has 2',\n\t\ttrue\n\t]);\n\n\tcleanup();\n});\n\ntest('set.delete(...)', () => {\n\tconst set = new SvelteSet([1, 2, 3]);\n\n\tassert.equal(set.delete(3), true);\n\tassert.equal(set.delete(3), false);\n\n\tassert.deepEqual(Array.from(set.values()), [1, 2]);\n});\n\ntest('set.forEach()', () => {\n\tconst set = new SvelteSet([1, 2, 3, 4, 5]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tset.forEach((v) => log.push(v));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tset.add(6);\n\t});\n\n\tassert.deepEqual(log, [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6]);\n\n\tcleanup();\n});\n\ntest('not invoking reactivity when value is not in the set after changes', () => {\n\tconst set = new SvelteSet([1, 2]);\n\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push('has 1', set.has(1));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('has 2', set.has(2));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push('has 3', set.has(3));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tset.delete(2);\n\t});\n\n\tflushSync(() => {\n\t\tset.add(2);\n\t});\n\n\tassert.deepEqual(log, [\n\t\t'has 1',\n\t\ttrue,\n\t\t'has 2',\n\t\ttrue,\n\t\t'has 3',\n\t\tfalse,\n\t\t'has 2',\n\t\tfalse,\n\t\t'has 3',\n\t\tfalse,\n\t\t'has 2',\n\t\ttrue,\n\t\t'has 3',\n\t\tfalse\n\t]);\n\n\tcleanup();\n});\n\ntest('Set.instanceOf', () => {\n\tassert.equal(new SvelteSet() instanceof Set, true);\n});\n"
  },
  {
    "path": "packages/svelte/src/reactivity/url-search-params.js",
    "content": "import { DEV } from 'esm-env';\nimport { state, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { get_current_url } from './url.js';\n\nexport const REPLACE = Symbol();\n\n/**\n * A reactive version of the built-in [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object.\n * Reading its contents (by iterating, or by calling `params.get(...)` or `params.getAll(...)` as in the [example](https://svelte.dev/playground/b3926c86c5384bab9f2cf993bc08c1c8) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the params are updated.\n *\n * ```svelte\n * <script>\n * \timport { SvelteURLSearchParams } from 'svelte/reactivity';\n *\n * \tconst params = new SvelteURLSearchParams('message=hello');\n *\n * \tlet key = $state('key');\n * \tlet value = $state('value');\n * </script>\n *\n * <input bind:value={key} />\n * <input bind:value={value} />\n * <button onclick={() => params.append(key, value)}>append</button>\n *\n * <p>?{params.toString()}</p>\n *\n * {#each params as [key, value]}\n * \t<p>{key}: {value}</p>\n * {/each}\n * ```\n */\nexport class SvelteURLSearchParams extends URLSearchParams {\n\t#version = DEV ? tag(state(0), 'SvelteURLSearchParams version') : state(0);\n\t#url = get_current_url();\n\n\t#updating = false;\n\n\t#update_url() {\n\t\tif (!this.#url || this.#updating) return;\n\t\tthis.#updating = true;\n\n\t\tconst search = this.toString();\n\t\tthis.#url.search = search && `?${search}`;\n\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {URLSearchParams} params\n\t * @internal\n\t */\n\t[REPLACE](params) {\n\t\tif (this.#updating) return;\n\t\tthis.#updating = true;\n\n\t\tfor (const key of [...super.keys()]) {\n\t\t\tsuper.delete(key);\n\t\t}\n\n\t\tfor (const [key, value] of params) {\n\t\t\tsuper.append(key, value);\n\t\t}\n\n\t\tincrement(this.#version);\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tappend(name, value) {\n\t\tsuper.append(name, value);\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {void}\n\t */\n\tdelete(name, value) {\n\t\tvar has_value = super.has(name, value);\n\t\tsuper.delete(name, value);\n\t\tif (has_value) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string|null}\n\t */\n\tget(name) {\n\t\tget(this.#version);\n\t\treturn super.get(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string[]}\n\t */\n\tgetAll(name) {\n\t\tget(this.#version);\n\t\treturn super.getAll(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {boolean}\n\t */\n\thas(name, value) {\n\t\tget(this.#version);\n\t\treturn super.has(name, value);\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tset(name, value) {\n\t\tvar previous = super.getAll(name).join('');\n\t\tsuper.set(name, value);\n\t\t// can't use has(name, value), because for something like https://svelte.dev?foo=1&bar=2&foo=3\n\t\t// if you set `foo` to 1, then foo=3 gets deleted whilst `has(\"foo\", \"1\")` returns true\n\t\tif (previous !== super.getAll(name).join('')) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\tsort() {\n\t\tsuper.sort();\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\ttoString() {\n\t\tget(this.#version);\n\t\treturn super.toString();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#version);\n\t\treturn super.size;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/url-search-params.test.ts",
    "content": "import { render_effect, effect_root } from '../internal/client/reactivity/effects.js';\nimport { flushSync } from '../index-client.js';\nimport { assert, test } from 'vitest';\nimport { SvelteURLSearchParams } from './url-search-params';\n\ntest('new URLSearchParams', () => {\n\tconst params = new SvelteURLSearchParams('a=b');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.toString());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'c');\n\t});\n\n\tflushSync(() => {\n\t\t// nothing should happen here\n\t\tparams.set('a', 'c');\n\t});\n\n\tassert.deepEqual(log, ['a=b', 'a=c']);\n\n\tcleanup();\n});\n\ntest('URLSearchParams.set', () => {\n\tconst params = new SvelteURLSearchParams();\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.toString());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'b');\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'c');\n\t});\n\n\tflushSync(() => {\n\t\t// nothing should happen here\n\t\tparams.set('a', 'c');\n\t});\n\n\tassert.deepEqual(log, ['', 'a=b', 'a=c']);\n\n\tcleanup();\n});\n\ntest('URLSearchParams.append', () => {\n\tconst params = new SvelteURLSearchParams();\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.toString());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.append('a', 'b');\n\t});\n\n\tflushSync(() => {\n\t\t// nothing should happen here\n\t\tparams.set('a', 'b');\n\t});\n\n\tflushSync(() => {\n\t\tparams.append('a', 'c');\n\t});\n\n\tassert.deepEqual(log, ['', 'a=b', 'a=b&a=c']);\n\n\tcleanup();\n});\n\ntest('URLSearchParams.delete', () => {\n\tconst params = new SvelteURLSearchParams('a=b&c=d');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.toString());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.delete('a');\n\t});\n\n\tflushSync(() => {\n\t\t// nothing should happen here\n\t\tparams.delete('a');\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'b');\n\t});\n\n\tassert.deepEqual(log, ['a=b&c=d', 'c=d', 'c=d&a=b']);\n\n\tcleanup();\n});\n\ntest('URLSearchParams.get', () => {\n\tconst params = new SvelteURLSearchParams('a=b&c=d');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.get('a'));\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(params.get('c'));\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(params.get('e'));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'b');\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'new-b');\n\t});\n\n\tflushSync(() => {\n\t\tparams.delete('a');\n\t});\n\n\tassert.deepEqual(log, ['b', 'd', null, 'new-b', 'd', null, null, 'd', null]);\n\n\tcleanup();\n});\n\ntest('URLSearchParams.getAll', () => {\n\tconst params = new SvelteURLSearchParams('a=b&c=d');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.getAll('a'));\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push(params.getAll('q'));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.append('a', 'b1');\n\t});\n\n\tflushSync(() => {\n\t\tparams.append('q', 'z');\n\t});\n\n\tassert.deepEqual(log, [\n\t\t// initial\n\t\t['b'],\n\t\t[],\n\t\t// first flush\n\t\t['b', 'b1'],\n\t\t[],\n\t\t// second flush\n\t\t['b', 'b1'],\n\t\t['z']\n\t]);\n\n\tcleanup();\n});\n\ntest('URLSearchParams.toString', () => {\n\tconst params = new SvelteURLSearchParams();\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(params.toString());\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\tparams.set('a', 'b');\n\t});\n\n\tflushSync(() => {\n\t\tparams.append('a', 'c');\n\t});\n\n\tassert.deepEqual(log, ['', 'a=b', 'a=b&a=c']);\n\n\tcleanup();\n});\n\ntest('SvelteURLSearchParams instanceof URLSearchParams', () => {\n\tassert.ok(new SvelteURLSearchParams() instanceof URLSearchParams);\n});\n"
  },
  {
    "path": "packages/svelte/src/reactivity/url.js",
    "content": "import { DEV } from 'esm-env';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { REPLACE, SvelteURLSearchParams } from './url-search-params.js';\n\n/** @type {SvelteURL | null} */\nlet current_url = null;\n\nexport function get_current_url() {\n\t// ideally we'd just export `current_url` directly, but it seems Vitest doesn't respect live bindings\n\treturn current_url;\n}\n\n/**\n * A reactive version of the built-in [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) object.\n * Reading properties of the URL (such as `url.href` or `url.pathname`) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the URL changes.\n *\n * The `searchParams` property is an instance of [SvelteURLSearchParams](https://svelte.dev/docs/svelte/svelte-reactivity#SvelteURLSearchParams).\n *\n * [Example](https://svelte.dev/playground/5a694758901b448c83dc40dc31c71f2a):\n *\n * ```svelte\n * <script>\n * \timport { SvelteURL } from 'svelte/reactivity';\n *\n * \tconst url = new SvelteURL('https://example.com/path');\n * </script>\n *\n * <!-- changes to these... -->\n * <input bind:value={url.protocol} />\n * <input bind:value={url.hostname} />\n * <input bind:value={url.pathname} />\n *\n * <hr />\n *\n * <!-- will update `href` and vice versa -->\n * <input bind:value={url.href} size=\"65\" />\n * ```\n */\nexport class SvelteURL extends URL {\n\t#protocol = state(super.protocol);\n\t#username = state(super.username);\n\t#password = state(super.password);\n\t#hostname = state(super.hostname);\n\t#port = state(super.port);\n\t#pathname = state(super.pathname);\n\t#hash = state(super.hash);\n\t#search = state(super.search);\n\t#searchParams;\n\n\t/**\n\t * @param {string | URL} url\n\t * @param {string | URL} [base]\n\t */\n\tconstructor(url, base) {\n\t\turl = new URL(url, base);\n\t\tsuper(url);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#protocol, 'SvelteURL.protocol');\n\t\t\ttag(this.#username, 'SvelteURL.username');\n\t\t\ttag(this.#password, 'SvelteURL.password');\n\t\t\ttag(this.#hostname, 'SvelteURL.hostname');\n\t\t\ttag(this.#port, 'SvelteURL.port');\n\t\t\ttag(this.#pathname, 'SvelteURL.pathname');\n\t\t\ttag(this.#hash, 'SvelteURL.hash');\n\t\t\ttag(this.#search, 'SvelteURL.search');\n\t\t}\n\n\t\tcurrent_url = this;\n\t\tthis.#searchParams = new SvelteURLSearchParams(url.searchParams);\n\t\tcurrent_url = null;\n\t}\n\n\tget hash() {\n\t\treturn get(this.#hash);\n\t}\n\n\tset hash(value) {\n\t\tsuper.hash = value;\n\t\tset(this.#hash, super.hash);\n\t}\n\n\tget host() {\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.host;\n\t}\n\n\tset host(value) {\n\t\tsuper.host = value;\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t}\n\n\tget hostname() {\n\t\treturn get(this.#hostname);\n\t}\n\n\tset hostname(value) {\n\t\tsuper.hostname = value;\n\t\tset(this.#hostname, super.hostname);\n\t}\n\n\tget href() {\n\t\tget(this.#protocol);\n\t\tget(this.#username);\n\t\tget(this.#password);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\tget(this.#pathname);\n\t\tget(this.#hash);\n\t\tget(this.#search);\n\t\treturn super.href;\n\t}\n\n\tset href(value) {\n\t\tsuper.href = value;\n\t\tset(this.#protocol, super.protocol);\n\t\tset(this.#username, super.username);\n\t\tset(this.#password, super.password);\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t\tset(this.#pathname, super.pathname);\n\t\tset(this.#hash, super.hash);\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget password() {\n\t\treturn get(this.#password);\n\t}\n\n\tset password(value) {\n\t\tsuper.password = value;\n\t\tset(this.#password, super.password);\n\t}\n\n\tget pathname() {\n\t\treturn get(this.#pathname);\n\t}\n\n\tset pathname(value) {\n\t\tsuper.pathname = value;\n\t\tset(this.#pathname, super.pathname);\n\t}\n\n\tget port() {\n\t\treturn get(this.#port);\n\t}\n\n\tset port(value) {\n\t\tsuper.port = value;\n\t\tset(this.#port, super.port);\n\t}\n\n\tget protocol() {\n\t\treturn get(this.#protocol);\n\t}\n\n\tset protocol(value) {\n\t\tsuper.protocol = value;\n\t\tset(this.#protocol, super.protocol);\n\t}\n\n\tget search() {\n\t\treturn get(this.#search);\n\t}\n\n\tset search(value) {\n\t\tsuper.search = value;\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget username() {\n\t\treturn get(this.#username);\n\t}\n\n\tset username(value) {\n\t\tsuper.username = value;\n\t\tset(this.#username, super.username);\n\t}\n\n\tget origin() {\n\t\tget(this.#protocol);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.origin;\n\t}\n\n\tget searchParams() {\n\t\treturn this.#searchParams;\n\t}\n\n\ttoString() {\n\t\treturn this.href;\n\t}\n\n\ttoJSON() {\n\t\treturn this.href;\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/src/reactivity/url.test.ts",
    "content": "import { render_effect, effect_root } from '../internal/client/reactivity/effects.js';\nimport { flushSync } from '../index-client.js';\nimport { SvelteURL } from './url.js';\nimport { assert, test } from 'vitest';\n\ntest('url.hash', () => {\n\tconst url = new SvelteURL('https://svelte.dev');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(url.hash);\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\turl.hash = 'abc';\n\t});\n\n\tflushSync(() => {\n\t\turl.href = 'https://svelte.dev/a/b/c#def';\n\t});\n\n\tflushSync(() => {\n\t\t// does not affect hash\n\t\turl.pathname = 'e/f';\n\t});\n\n\tassert.deepEqual(log, ['', '#abc', '#def']);\n\n\tcleanup();\n});\n\ntest('url.href', () => {\n\tconst url = new SvelteURL('https://svelte.dev?foo=bar&t=123');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(url.href);\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\turl.search = '?q=kit&foo=baz';\n\t});\n\n\tflushSync(() => {\n\t\t// changes from searchParams should be synced to URL instance as well\n\t\turl.searchParams.append('foo', 'qux');\n\t});\n\n\tflushSync(() => {\n\t\turl.searchParams.delete('foo');\n\t});\n\n\tflushSync(() => {\n\t\turl.searchParams.set('love', 'svelte5');\n\t});\n\n\tassert.deepEqual(log, [\n\t\t'https://svelte.dev/?foo=bar&t=123',\n\t\t'https://svelte.dev/?q=kit&foo=baz',\n\t\t'https://svelte.dev/?q=kit&foo=baz&foo=qux',\n\t\t'https://svelte.dev/?q=kit',\n\t\t'https://svelte.dev/?q=kit&love=svelte5'\n\t]);\n\n\tcleanup();\n});\n\ntest('url.searchParams', () => {\n\tconst url = new SvelteURL('https://svelte.dev?foo=bar&t=123');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push('search: ' + url.search);\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push('foo: ' + url.searchParams.get('foo'));\n\t\t});\n\t\trender_effect(() => {\n\t\t\tlog.push('q: ' + url.searchParams.has('q'));\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\turl.search = '?q=kit&foo=baz';\n\t});\n\n\tflushSync(() => {\n\t\turl.searchParams.append('foo', 'qux');\n\t});\n\n\tflushSync(() => {\n\t\turl.searchParams.delete('foo');\n\t});\n\n\tassert.deepEqual(log, [\n\t\t'search: ?foo=bar&t=123',\n\t\t'foo: bar',\n\t\t'q: false',\n\t\t'search: ?q=kit&foo=baz',\n\t\t'foo: baz',\n\t\t'q: true',\n\t\t'search: ?q=kit&foo=baz&foo=qux',\n\t\t'foo: baz',\n\t\t'q: true',\n\t\t'search: ?q=kit',\n\t\t'foo: null',\n\t\t'q: true'\n\t]);\n\n\tcleanup();\n});\n\ntest('url.search normalizes value', () => {\n\tconst url = new SvelteURL('https://svelte.dev');\n\tconst log: any = [];\n\n\tconst cleanup = effect_root(() => {\n\t\trender_effect(() => {\n\t\t\tlog.push(url.search);\n\t\t});\n\t});\n\n\tflushSync(() => {\n\t\t// setting without ? prefix — URL normalizes to \"?foo=bar\"\n\t\turl.search = 'foo=bar';\n\t});\n\n\tflushSync(() => {\n\t\turl.search = '?baz=qux';\n\t});\n\n\tflushSync(() => {\n\t\t// lone \"?\" is normalized to \"\"\n\t\turl.search = '?';\n\t});\n\n\tassert.deepEqual(log, ['', '?foo=bar', '?baz=qux', '']);\n\n\tcleanup();\n});\n\ntest('SvelteURL instanceof URL', () => {\n\tassert.ok(new SvelteURL('https://svelte.dev') instanceof URL);\n});\n"
  },
  {
    "path": "packages/svelte/src/reactivity/window/index.js",
    "content": "import { BROWSER, DEV } from 'esm-env';\nimport { on } from '../../events/index.js';\nimport { ReactiveValue } from '../reactive-value.js';\nimport { get } from '../../internal/client/index.js';\nimport { set, source } from '../../internal/client/reactivity/sources.js';\nimport { tag } from '../../internal/client/dev/tracing.js';\n\n/**\n * `scrollX.current` is a reactive view of `window.scrollX`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const scrollX = new ReactiveValue(\n\tBROWSER ? () => window.scrollX : () => undefined,\n\t(update) => on(window, 'scroll', update)\n);\n\n/**\n * `scrollY.current` is a reactive view of `window.scrollY`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const scrollY = new ReactiveValue(\n\tBROWSER ? () => window.scrollY : () => undefined,\n\t(update) => on(window, 'scroll', update)\n);\n\n/**\n * `innerWidth.current` is a reactive view of `window.innerWidth`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const innerWidth = new ReactiveValue(\n\tBROWSER ? () => window.innerWidth : () => undefined,\n\t(update) => on(window, 'resize', update)\n);\n\n/**\n * `innerHeight.current` is a reactive view of `window.innerHeight`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const innerHeight = new ReactiveValue(\n\tBROWSER ? () => window.innerHeight : () => undefined,\n\t(update) => on(window, 'resize', update)\n);\n\n/**\n * `outerWidth.current` is a reactive view of `window.outerWidth`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const outerWidth = new ReactiveValue(\n\tBROWSER ? () => window.outerWidth : () => undefined,\n\t(update) => on(window, 'resize', update)\n);\n\n/**\n * `outerHeight.current` is a reactive view of `window.outerHeight`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const outerHeight = new ReactiveValue(\n\tBROWSER ? () => window.outerHeight : () => undefined,\n\t(update) => on(window, 'resize', update)\n);\n\n/**\n * `screenLeft.current` is a reactive view of `window.screenLeft`. It is updated inside a `requestAnimationFrame` callback. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const screenLeft = new ReactiveValue(\n\tBROWSER ? () => window.screenLeft : () => undefined,\n\t(update) => {\n\t\tlet value = window.screenLeft;\n\n\t\tlet frame = requestAnimationFrame(function check() {\n\t\t\tframe = requestAnimationFrame(check);\n\n\t\t\tif (value !== (value = window.screenLeft)) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frame);\n\t\t};\n\t}\n);\n\n/**\n * `screenTop.current` is a reactive view of `window.screenTop`. It is updated inside a `requestAnimationFrame` callback. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const screenTop = new ReactiveValue(\n\tBROWSER ? () => window.screenTop : () => undefined,\n\t(update) => {\n\t\tlet value = window.screenTop;\n\n\t\tlet frame = requestAnimationFrame(function check() {\n\t\t\tframe = requestAnimationFrame(check);\n\n\t\t\tif (value !== (value = window.screenTop)) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frame);\n\t\t};\n\t}\n);\n\n/**\n * `online.current` is a reactive view of `navigator.onLine`. On the server it is `undefined`.\n * @since 5.11.0\n */\nexport const online = new ReactiveValue(\n\tBROWSER ? () => navigator.onLine : () => undefined,\n\t(update) => {\n\t\tconst unsub_online = on(window, 'online', update);\n\t\tconst unsub_offline = on(window, 'offline', update);\n\t\treturn () => {\n\t\t\tunsub_online();\n\t\t\tunsub_offline();\n\t\t};\n\t}\n);\n\n/**\n * `devicePixelRatio.current` is a reactive view of `window.devicePixelRatio`. On the server it is `undefined`.\n * Note that behaviour differs between browsers — on Chrome it will respond to the current zoom level,\n * on Firefox and Safari it won't.\n * @type {{ get current(): number | undefined }}\n * @since 5.11.0\n */\nexport const devicePixelRatio = /* @__PURE__ */ new (class DevicePixelRatio {\n\t#dpr = source(BROWSER ? window.devicePixelRatio : undefined);\n\n\t#update() {\n\t\tconst off = on(\n\t\t\twindow.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`),\n\t\t\t'change',\n\t\t\t() => {\n\t\t\t\tset(this.#dpr, window.devicePixelRatio);\n\n\t\t\t\toff();\n\t\t\t\tthis.#update();\n\t\t\t}\n\t\t);\n\t}\n\n\tconstructor() {\n\t\tif (BROWSER) {\n\t\t\tthis.#update();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\ttag(this.#dpr, 'window.devicePixelRatio');\n\t\t}\n\t}\n\n\tget current() {\n\t\tget(this.#dpr);\n\t\treturn BROWSER ? window.devicePixelRatio : undefined;\n\t}\n})();\n"
  },
  {
    "path": "packages/svelte/src/server/index.d.ts",
    "content": "import type { Csp, RenderOutput } from '#server';\nimport type { ComponentProps, Component, SvelteComponent, ComponentType } from 'svelte';\n\n/**\n * Only available on the server and when compiling with the `server` option.\n * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.\n */\nexport function render<\n\tComp extends SvelteComponent<any> | Component<any>,\n\tProps extends ComponentProps<Comp> = ComponentProps<Comp>\n>(\n\t...args: {} extends Props\n\t\t? [\n\t\t\t\tcomponent: Comp extends SvelteComponent<any> ? ComponentType<Comp> : Comp,\n\t\t\t\toptions?: {\n\t\t\t\t\tprops?: Omit<Props, '$$slots' | '$$events'>;\n\t\t\t\t\tcontext?: Map<any, any>;\n\t\t\t\t\tidPrefix?: string;\n\t\t\t\t\tcsp?: Csp;\n\t\t\t\t\ttransformError?: (error: unknown) => unknown | Promise<unknown>;\n\t\t\t\t}\n\t\t\t]\n\t\t: [\n\t\t\t\tcomponent: Comp extends SvelteComponent<any> ? ComponentType<Comp> : Comp,\n\t\t\t\toptions: {\n\t\t\t\t\tprops: Omit<Props, '$$slots' | '$$events'>;\n\t\t\t\t\tcontext?: Map<any, any>;\n\t\t\t\t\tidPrefix?: string;\n\t\t\t\t\tcsp?: Csp;\n\t\t\t\t\ttransformError?: (error: unknown) => unknown | Promise<unknown>;\n\t\t\t\t}\n\t\t\t]\n): RenderOutput;\n"
  },
  {
    "path": "packages/svelte/src/server/index.js",
    "content": "export { render } from '../internal/server/index.js';\n"
  },
  {
    "path": "packages/svelte/src/store/index-client.js",
    "content": "/** @import { Readable, Writable } from './public.js' */\nimport {\n\teffect_root,\n\teffect_tracking,\n\trender_effect\n} from '../internal/client/reactivity/effects.js';\nimport { get, writable } from './shared/index.js';\nimport { createSubscriber } from '../reactivity/create-subscriber.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../internal/client/runtime.js';\n\nexport { derived, get, readable, readonly, writable } from './shared/index.js';\n\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @param {(v: V) => void} set\n * @returns {Writable<V>}\n */\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @returns {Readable<V>}\n */\n/**\n * Create a store from a function that returns state, and (to make a writable store), an\n * optional second function that sets state.\n *\n * ```ts\n * import { toStore } from 'svelte/store';\n *\n * let count = $state(0);\n *\n * const store = toStore(() => count, (v) => (count = v));\n * ```\n * @template V\n * @param {() => V} get\n * @param {(v: V) => void} [set]\n * @returns {Writable<V> | Readable<V>}\n */\nexport function toStore(get, set) {\n\tvar effect = active_effect;\n\tvar reaction = active_reaction;\n\tvar init_value = get();\n\n\tconst store = writable(init_value, (set) => {\n\t\t// If the value has changed before we call subscribe, then\n\t\t// we need to treat the value as already having run\n\t\tvar ran = init_value !== get();\n\n\t\t// TODO do we need a different implementation on the server?\n\t\tvar teardown;\n\t\t// Apply the reaction and effect at the time of toStore being called\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_effect = active_effect;\n\t\tset_active_reaction(reaction);\n\t\tset_active_effect(effect);\n\n\t\ttry {\n\t\t\tteardown = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tconst value = get();\n\t\t\t\t\tif (ran) set(value);\n\t\t\t\t});\n\t\t\t});\n\t\t} finally {\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_active_effect(previous_effect);\n\t\t}\n\n\t\tran = true;\n\n\t\treturn teardown;\n\t});\n\n\tif (set) {\n\t\treturn {\n\t\t\tset,\n\t\t\tupdate: (fn) => set(fn(get())),\n\t\t\tsubscribe: store.subscribe\n\t\t};\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe\n\t};\n}\n\n/**\n * @template V\n * @overload\n * @param {Writable<V>} store\n * @returns {{ current: V }}\n */\n/**\n * @template V\n * @overload\n * @param {Readable<V>} store\n * @returns {{ readonly current: V }}\n */\n/**\n * Convert a store to an object with a reactive `current` property. If `store`\n * is a readable store, `current` will be a readonly property.\n *\n * ```ts\n * import { fromStore, get, writable } from 'svelte/store';\n *\n * const store = writable(0);\n *\n * const count = fromStore(store);\n *\n * count.current; // 0;\n * store.set(1);\n * count.current; // 1\n *\n * count.current += 1;\n * get(store); // 2\n * ```\n * @template V\n * @param {Writable<V> | Readable<V>} store\n */\nexport function fromStore(store) {\n\tlet value = /** @type {V} */ (undefined);\n\n\tconst subscribe = createSubscriber((update) => {\n\t\tlet ran = false;\n\n\t\tconst unsubscribe = store.subscribe((v) => {\n\t\t\tvalue = v;\n\t\t\tif (ran) update();\n\t\t});\n\n\t\tran = true;\n\n\t\treturn unsubscribe;\n\t});\n\n\tfunction current() {\n\t\tif (effect_tracking()) {\n\t\t\tsubscribe();\n\t\t\treturn value;\n\t\t}\n\n\t\treturn get(store);\n\t}\n\n\tif ('set' in store) {\n\t\treturn {\n\t\t\tget current() {\n\t\t\t\treturn current();\n\t\t\t},\n\t\t\tset current(v) {\n\t\t\t\tstore.set(v);\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tget current() {\n\t\t\treturn current();\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/store/index-server.js",
    "content": "/** @import { Readable, Writable } from './public.js' */\nimport { get, writable } from './shared/index.js';\n\nexport { derived, get, readable, readonly, writable } from './shared/index.js';\n\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @param {(v: V) => void} set\n * @returns {Writable<V>}\n */\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @returns {Readable<V>}\n */\n/**\n * Create a store from a function that returns state, and (to make a writable store), an\n * optional second function that sets state.\n *\n * ```ts\n * import { toStore } from 'svelte/store';\n *\n * let count = $state(0);\n *\n * const store = toStore(() => count, (v) => (count = v));\n * ```\n * @template V\n * @param {() => V} get\n * @param {(v: V) => void} [set]\n * @returns {Writable<V> | Readable<V>}\n */\nexport function toStore(get, set) {\n\tconst store = writable(get());\n\n\tif (set) {\n\t\treturn {\n\t\t\tset,\n\t\t\tupdate: (fn) => set(fn(get())),\n\t\t\tsubscribe: store.subscribe\n\t\t};\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe\n\t};\n}\n\n/**\n * @template V\n * @overload\n * @param {Writable<V>} store\n * @returns {{ current: V }}\n */\n/**\n * @template V\n * @overload\n * @param {Readable<V>} store\n * @returns {{ readonly current: V }}\n */\n/**\n * Convert a store to an object with a reactive `current` property. If `store`\n * is a readable store, `current` will be a readonly property.\n *\n * ```ts\n * import { fromStore, get, writable } from 'svelte/store';\n *\n * const store = writable(0);\n *\n * const count = fromStore(store);\n *\n * count.current; // 0;\n * store.set(1);\n * count.current; // 1\n *\n * count.current += 1;\n * get(store); // 2\n * ```\n * @template V\n * @param {Writable<V> | Readable<V>} store\n */\nexport function fromStore(store) {\n\tif ('set' in store) {\n\t\treturn {\n\t\t\tget current() {\n\t\t\t\treturn get(store);\n\t\t\t},\n\t\t\tset current(v) {\n\t\t\t\tstore.set(v);\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tget current() {\n\t\t\treturn get(store);\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/src/store/private.d.ts",
    "content": "import { Readable, Subscriber } from './public.js';\n\n/** Pair of subscriber and invalidator. */\ntype SubscribeInvalidateTuple<T> = [Subscriber<T>, () => void];\n\n/** One or more `Readable`s. */\ntype Stores = Readable<any> | [Readable<any>, ...Array<Readable<any>>] | Array<Readable<any>>;\n\n/** One or more values from `Readable` stores. */\ntype StoresValues<T> =\n\tT extends Readable<infer U> ? U : { [K in keyof T]: T[K] extends Readable<infer U> ? U : never };\n\nexport { SubscribeInvalidateTuple, Stores, StoresValues };\n"
  },
  {
    "path": "packages/svelte/src/store/public.d.ts",
    "content": "/** Callback to inform of a value updates. */\nexport type Subscriber<T> = (value: T) => void;\n\n/** Unsubscribes from value updates. */\nexport type Unsubscriber = () => void;\n\n/** Callback to update a value. */\nexport type Updater<T> = (value: T) => T;\n\n/**\n * Start and stop notification callbacks.\n * This function is called when the first subscriber subscribes.\n *\n * @param {(value: T) => void} set Function that sets the value of the store.\n * @param {(value: Updater<T>) => void} update Function that sets the value of the store after passing the current value to the update function.\n * @returns {void | (() => void)} Optionally, a cleanup function that is called when the last remaining\n * subscriber unsubscribes.\n */\nexport type StartStopNotifier<T> = (\n\tset: (value: T) => void,\n\tupdate: (fn: Updater<T>) => void\n) => void | (() => void);\n\n/** Readable interface for subscribing. */\nexport interface Readable<T> {\n\t/**\n\t * Subscribe on value changes.\n\t * @param run subscription callback\n\t * @param invalidate cleanup callback\n\t */\n\tsubscribe(this: void, run: Subscriber<T>, invalidate?: () => void): Unsubscriber;\n}\n\n/** Writable interface for both updating and subscribing. */\nexport interface Writable<T> extends Readable<T> {\n\t/**\n\t * Set value and inform subscribers.\n\t * @param value to set\n\t */\n\tset(this: void, value: T): void;\n\n\t/**\n\t * Update value using callback and inform subscribers.\n\t * @param updater callback\n\t */\n\tupdate(this: void, updater: Updater<T>): void;\n}\n\nexport * from './index-client.js';\n"
  },
  {
    "path": "packages/svelte/src/store/shared/index.js",
    "content": "/** @import { Readable, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable } from '../public.js' */\n/** @import { Stores, StoresValues, SubscribeInvalidateTuple } from '../private.js' */\nimport { noop, run_all } from '../../internal/shared/utils.js';\nimport { safe_not_equal } from '../../internal/client/reactivity/equality.js';\nimport { subscribe_to_store } from '../utils.js';\n\n/**\n * @type {Array<SubscribeInvalidateTuple<any> | any>}\n */\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {Unsubscriber | null} */\n\tlet stop = null;\n\n\t/** @type {Set<SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\n\t/**\n\t * @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(/** @type {T} */ (value)));\n\t}\n\n\t/**\n\t * @param {Subscriber<T>} run\n\t * @param {() => void} [invalidate]\n\t * @returns {Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(/** @type {T} */ (value));\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>) => T} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * @template {Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\t/** @type {T[]} */\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = typeof result === 'function' ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe_to_store(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * @template T\n * @param {Readable<T>} store  - store to make readonly\n * @returns {Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\t// @ts-expect-error TODO i suspect the bind is unnecessary\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * @template T\n * @param {Readable<T>} store\n * @returns {T}\n */\nexport function get(store) {\n\tlet value;\n\tsubscribe_to_store(store, (_) => (value = _))();\n\t// @ts-expect-error\n\treturn value;\n}\n"
  },
  {
    "path": "packages/svelte/src/store/utils.js",
    "content": "/** @import { Readable } from './public' */\nimport { untrack } from '../internal/client/runtime.js';\nimport { noop } from '../internal/shared/utils.js';\n\n/**\n * @template T\n * @param {Readable<T> | null | undefined} store\n * @param {(value: T) => void} run\n * @param {(value: T) => void} [invalidate]\n * @returns {() => void}\n */\nexport function subscribe_to_store(store, run, invalidate) {\n\tif (store == null) {\n\t\t// @ts-expect-error\n\t\trun(undefined);\n\n\t\t// @ts-expect-error\n\t\tif (invalidate) invalidate(undefined);\n\n\t\treturn noop;\n\t}\n\n\t// Svelte store takes a private second argument\n\t// StartStopNotifier could mutate state, and we want to silence the corresponding validation error\n\tconst unsub = untrack(() =>\n\t\tstore.subscribe(\n\t\t\trun,\n\t\t\t// @ts-expect-error\n\t\t\tinvalidate\n\t\t)\n\t);\n\n\t// Also support RxJS\n\t// @ts-expect-error TODO fix this in the types?\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n"
  },
  {
    "path": "packages/svelte/src/transition/index.js",
    "content": "/** @import { BlurParams, CrossfadeParams, DrawParams, FadeParams, FlyParams, ScaleParams, SlideParams, TransitionConfig } from './public' */\n\nimport { DEV } from 'esm-env';\nimport * as w from '../internal/client/warnings.js';\n\n/** @param {number} x */\nconst linear = (x) => x;\n\n/** @param {number} t */\nfunction cubic_out(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nfunction cubic_in_out(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nfunction split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * @param {Element} node\n * @param {BlurParams} [params]\n * @returns {TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_in_out, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * @param {Element} node\n * @param {FadeParams} [params]\n * @returns {TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * @param {Element} node\n * @param {FlyParams} [params]\n * @returns {TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_out, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [x_value, x_unit] = split_css_unit(x);\n\tconst [y_value, y_unit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x_value}${x_unit}, ${(1 - t) * y_value}${y_unit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\nvar slide_warning = false;\n\n/**\n * Slides an element in and out.\n *\n * @param {Element} node\n * @param {SlideParams} [params]\n * @returns {TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubic_out, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\n\tif (DEV && !slide_warning && /(contents|inline|table)/.test(style.display)) {\n\t\tslide_warning = true;\n\t\tPromise.resolve().then(() => (slide_warning = false));\n\t\tw.transition_slide_display(style.display);\n\t}\n\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => /** @type {'Left' | 'Right' | 'Top' | 'Bottom'} */ (`${e[0].toUpperCase()}${e.slice(1)}`)\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;` +\n\t\t\t`min-${primary_property}: 0`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from the provided values, passed as parameters, to an element's current (default) values. `out` transitions animate from an element's default values to the provided values.\n *\n * @param {Element} node\n * @param {ScaleParams} [params]\n * @returns {TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_out, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {DrawParams} [params]\n * @returns {TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubic_in_out } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nfunction assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs/svelte/transition) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * @param {CrossfadeParams & {\n * \tfallback?: (node: Element, params: CrossfadeParams, intro: boolean) => TransitionConfig;\n * }} params\n * @returns {[(node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig, (node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {CrossfadeParams} params\n\t * @returns {TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = /** @param {number} d */ (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubic_out\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: typeof duration === 'function' ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t   opacity: ${t * opacity};\n\t\t\t   transform-origin: top left;\n\t\t\t   transform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\t\t\tt + (1 - t) * dh\n\t\t\t\t\t});\n\t\t   `\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\t// @ts-expect-error TODO improve typings (are the public types wrong?)\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(/** @type {Element} */ (other_node), node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n"
  },
  {
    "path": "packages/svelte/src/transition/public.d.ts",
    "content": "export type EasingFunction = (t: number) => number;\n\nexport interface TransitionConfig {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: EasingFunction;\n\tcss?: (t: number, u: number) => string;\n\ttick?: (t: number, u: number) => void;\n}\n\nexport interface BlurParams {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: EasingFunction;\n\tamount?: number | string;\n\topacity?: number;\n}\n\nexport interface FadeParams {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: EasingFunction;\n}\n\nexport interface FlyParams {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: EasingFunction;\n\tx?: number | string;\n\ty?: number | string;\n\topacity?: number;\n}\n\nexport interface SlideParams {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: EasingFunction;\n\taxis?: 'x' | 'y';\n}\n\nexport interface ScaleParams {\n\tdelay?: number;\n\tduration?: number;\n\teasing?: EasingFunction;\n\tstart?: number;\n\topacity?: number;\n}\n\nexport interface DrawParams {\n\tdelay?: number;\n\tspeed?: number;\n\tduration?: number | ((len: number) => number);\n\teasing?: EasingFunction;\n}\n\nexport interface CrossfadeParams {\n\tdelay?: number;\n\tduration?: number | ((len: number) => number);\n\teasing?: EasingFunction;\n}\n\nexport * from './index.js';\n"
  },
  {
    "path": "packages/svelte/src/utils.js",
    "content": "const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function can_delegate_event(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nconst RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n// Matches valid HTML/SVG/MathML element names and custom element names.\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n//\n// Standard elements: ASCII alpha start, followed by ASCII alphanumerics.\n// Custom elements: ASCII alpha start, followed by any mix of PCENChar (which\n// includes ASCII alphanumerics, `-`, `.`, `_`, and specified Unicode ranges),\n// with at least one hyphen required somewhere after the first character.\n//\n// Rejects strings containing whitespace, quotes, angle brackets, slashes, equals,\n// or other characters that could break out of a tag-name token and enable markup injection.\nexport const REGEX_VALID_TAG_NAME =\n\t/^[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9.\\-_\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u{10000}-\\u{EFFFF}]+)*$/u;\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n"
  },
  {
    "path": "packages/svelte/src/version.js",
    "content": "// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.55.1';\nexport const PUBLIC_VERSION = '5';\n"
  },
  {
    "path": "packages/svelte/svelte-html.d.ts",
    "content": "/// <reference lib=\"dom\" />\n// This file is deliberately not exposed through the exports map.\n// It's meant to be loaded directly by the Svelte language server\n/* eslint-disable @typescript-eslint/no-empty-interface */\n\nimport * as svelteElements from './elements.js';\n\n/**\n * @internal do not use\n */\ntype HTMLProps<Property extends string, Override> = Omit<\n\timport('./elements.js').SvelteHTMLElements[Property],\n\tkeyof Override\n> &\n\tOverride;\n\ndeclare global {\n\t/**\n\t * This namespace does not exist in the runtime, it is only used for typings\n\t */\n\tnamespace svelteHTML {\n\t\t// Every namespace eligible for use needs to implement the following two functions\n\t\t/**\n\t\t * @internal do not use\n\t\t */\n\t\tfunction mapElementTag<K extends keyof ElementTagNameMap>(tag: K): ElementTagNameMap[K];\n\t\tfunction mapElementTag<K extends keyof SVGElementTagNameMap>(tag: K): SVGElementTagNameMap[K];\n\t\tfunction mapElementTag(tag: any): any; // needs to be any because used in context of <svelte:element>\n\n\t\t/**\n\t\t * @internal do not use\n\t\t */\n\t\tfunction createElement<Elements extends IntrinsicElements, Key extends keyof Elements>(\n\t\t\t// \"undefined | null\" because of <svelte:element>\n\t\t\telement: Key | undefined | null,\n\t\t\tattrs: string extends Key ? svelteElements.HTMLAttributes<any> : Elements[Key]\n\t\t): Key extends keyof ElementTagNameMap\n\t\t\t? ElementTagNameMap[Key]\n\t\t\t: Key extends keyof SVGElementTagNameMap\n\t\t\t\t? SVGElementTagNameMap[Key]\n\t\t\t\t: any;\n\t\tfunction createElement<Elements extends IntrinsicElements, Key extends keyof Elements, T>(\n\t\t\t// \"undefined | null\" because of <svelte:element>\n\t\t\telement: Key | undefined | null,\n\t\t\tattrsEnhancers: T,\n\t\t\tattrs: (string extends Key ? svelteElements.HTMLAttributes<any> : Elements[Key]) & T\n\t\t): Key extends keyof ElementTagNameMap\n\t\t\t? ElementTagNameMap[Key]\n\t\t\t: Key extends keyof SVGElementTagNameMap\n\t\t\t\t? SVGElementTagNameMap[Key]\n\t\t\t\t: any;\n\n\t\t// TODO remove HTMLAttributes/SVGAttributes/IntrinsicElements in Svelte 6\n\t\t// For backwards-compatibility and ease-of-use, in case someone enhanced the typings from import('svelte/elements').HTMLAttributes/SVGAttributes\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tinterface HTMLAttributes<T extends EventTarget = any> {}\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tinterface SVGAttributes<T extends EventTarget = any> {}\n\n\t\t/**\n\t\t * Avoid using this interface directly. Instead use the `SvelteHTMLElements` interface exported by `svelte/elements`\n\t\t * This should only be used if you need to extend the interface with custom elements\n\t\t */\n\t\tinterface IntrinsicElements extends svelteElements.SvelteHTMLElements {\n\t\t\ta: HTMLProps<'a', HTMLAttributes>;\n\t\t\tabbr: HTMLProps<'abbr', HTMLAttributes>;\n\t\t\taddress: HTMLProps<'address', HTMLAttributes>;\n\t\t\tarea: HTMLProps<'area', HTMLAttributes>;\n\t\t\tarticle: HTMLProps<'article', HTMLAttributes>;\n\t\t\taside: HTMLProps<'aside', HTMLAttributes>;\n\t\t\taudio: HTMLProps<'audio', HTMLAttributes>;\n\t\t\tb: HTMLProps<'b', HTMLAttributes>;\n\t\t\tbase: HTMLProps<'base', HTMLAttributes>;\n\t\t\tbdi: HTMLProps<'bdi', HTMLAttributes>;\n\t\t\tbdo: HTMLProps<'bdo', HTMLAttributes>;\n\t\t\tbig: HTMLProps<'big', HTMLAttributes>;\n\t\t\tblockquote: HTMLProps<'blockquote', HTMLAttributes>;\n\t\t\tbody: HTMLProps<'body', HTMLAttributes>;\n\t\t\tbr: HTMLProps<'br', HTMLAttributes>;\n\t\t\tbutton: HTMLProps<'button', HTMLAttributes>;\n\t\t\tcanvas: HTMLProps<'canvas', HTMLAttributes>;\n\t\t\tcaption: HTMLProps<'caption', HTMLAttributes>;\n\t\t\tcite: HTMLProps<'cite', HTMLAttributes>;\n\t\t\tcode: HTMLProps<'code', HTMLAttributes>;\n\t\t\tcol: HTMLProps<'col', HTMLAttributes>;\n\t\t\tcolgroup: HTMLProps<'colgroup', HTMLAttributes>;\n\t\t\tdata: HTMLProps<'data', HTMLAttributes>;\n\t\t\tdatalist: HTMLProps<'datalist', HTMLAttributes>;\n\t\t\tdd: HTMLProps<'dd', HTMLAttributes>;\n\t\t\tdel: HTMLProps<'del', HTMLAttributes>;\n\t\t\tdetails: HTMLProps<'details', HTMLAttributes>;\n\t\t\tdfn: HTMLProps<'dfn', HTMLAttributes>;\n\t\t\tdialog: HTMLProps<'dialog', HTMLAttributes>;\n\t\t\tdiv: HTMLProps<'div', HTMLAttributes>;\n\t\t\tdl: HTMLProps<'dl', HTMLAttributes>;\n\t\t\tdt: HTMLProps<'dt', HTMLAttributes>;\n\t\t\tem: HTMLProps<'em', HTMLAttributes>;\n\t\t\tembed: HTMLProps<'embed', HTMLAttributes>;\n\t\t\tfieldset: HTMLProps<'fieldset', HTMLAttributes>;\n\t\t\tfigcaption: HTMLProps<'figcaption', HTMLAttributes>;\n\t\t\tfigure: HTMLProps<'figure', HTMLAttributes>;\n\t\t\tfooter: HTMLProps<'footer', HTMLAttributes>;\n\t\t\tform: HTMLProps<'form', HTMLAttributes>;\n\t\t\th1: HTMLProps<'h1', HTMLAttributes>;\n\t\t\th2: HTMLProps<'h2', HTMLAttributes>;\n\t\t\th3: HTMLProps<'h3', HTMLAttributes>;\n\t\t\th4: HTMLProps<'h4', HTMLAttributes>;\n\t\t\th5: HTMLProps<'h5', HTMLAttributes>;\n\t\t\th6: HTMLProps<'h6', HTMLAttributes>;\n\t\t\thead: HTMLProps<'head', HTMLAttributes>;\n\t\t\theader: HTMLProps<'header', HTMLAttributes>;\n\t\t\thgroup: HTMLProps<'hgroup', HTMLAttributes>;\n\t\t\thr: HTMLProps<'hr', HTMLAttributes>;\n\t\t\thtml: HTMLProps<'html', HTMLAttributes>;\n\t\t\ti: HTMLProps<'i', HTMLAttributes>;\n\t\t\tiframe: HTMLProps<'iframe', HTMLAttributes>;\n\t\t\timg: HTMLProps<'img', HTMLAttributes>;\n\t\t\tinput: HTMLProps<'input', HTMLAttributes>;\n\t\t\tins: HTMLProps<'ins', HTMLAttributes>;\n\t\t\tkbd: HTMLProps<'kbd', HTMLAttributes>;\n\t\t\tkeygen: HTMLProps<'keygen', HTMLAttributes>;\n\t\t\tlabel: HTMLProps<'label', HTMLAttributes>;\n\t\t\tlegend: HTMLProps<'legend', HTMLAttributes>;\n\t\t\tli: HTMLProps<'li', HTMLAttributes>;\n\t\t\tlink: HTMLProps<'link', HTMLAttributes>;\n\t\t\tmain: HTMLProps<'main', HTMLAttributes>;\n\t\t\tmap: HTMLProps<'map', HTMLAttributes>;\n\t\t\tmark: HTMLProps<'mark', HTMLAttributes>;\n\t\t\tmenu: HTMLProps<'menu', HTMLAttributes>;\n\t\t\tmenuitem: HTMLProps<'menuitem', HTMLAttributes>;\n\t\t\tmeta: HTMLProps<'meta', HTMLAttributes>;\n\t\t\tmeter: HTMLProps<'meter', HTMLAttributes>;\n\t\t\tnav: HTMLProps<'nav', HTMLAttributes>;\n\t\t\tnoscript: HTMLProps<'noscript', HTMLAttributes>;\n\t\t\tobject: HTMLProps<'object', HTMLAttributes>;\n\t\t\tol: HTMLProps<'ol', HTMLAttributes>;\n\t\t\toptgroup: HTMLProps<'optgroup', HTMLAttributes>;\n\t\t\toption: HTMLProps<'option', HTMLAttributes>;\n\t\t\toutput: HTMLProps<'output', HTMLAttributes>;\n\t\t\tp: HTMLProps<'p', HTMLAttributes>;\n\t\t\tparam: HTMLProps<'param', HTMLAttributes>;\n\t\t\tpicture: HTMLProps<'picture', HTMLAttributes>;\n\t\t\tpre: HTMLProps<'pre', HTMLAttributes>;\n\t\t\tprogress: HTMLProps<'progress', HTMLAttributes>;\n\t\t\tq: HTMLProps<'q', HTMLAttributes>;\n\t\t\trp: HTMLProps<'rp', HTMLAttributes>;\n\t\t\trt: HTMLProps<'rt', HTMLAttributes>;\n\t\t\truby: HTMLProps<'ruby', HTMLAttributes>;\n\t\t\ts: HTMLProps<'s', HTMLAttributes>;\n\t\t\tsamp: HTMLProps<'samp', HTMLAttributes>;\n\t\t\tslot: HTMLProps<'slot', HTMLAttributes>;\n\t\t\tscript: HTMLProps<'script', HTMLAttributes>;\n\t\t\tsection: HTMLProps<'section', HTMLAttributes>;\n\t\t\tselect: HTMLProps<'select', HTMLAttributes>;\n\t\t\tsmall: HTMLProps<'small', HTMLAttributes>;\n\t\t\tsource: HTMLProps<'source', HTMLAttributes>;\n\t\t\tspan: HTMLProps<'span', HTMLAttributes>;\n\t\t\tstrong: HTMLProps<'strong', HTMLAttributes>;\n\t\t\tstyle: HTMLProps<'style', HTMLAttributes>;\n\t\t\tsub: HTMLProps<'sub', HTMLAttributes>;\n\t\t\tsummary: HTMLProps<'summary', HTMLAttributes>;\n\t\t\tsup: HTMLProps<'sup', HTMLAttributes>;\n\t\t\ttable: HTMLProps<'table', HTMLAttributes>;\n\t\t\ttemplate: HTMLProps<'template', HTMLAttributes>;\n\t\t\ttbody: HTMLProps<'tbody', HTMLAttributes>;\n\t\t\ttd: HTMLProps<'td', HTMLAttributes>;\n\t\t\ttextarea: HTMLProps<'textarea', HTMLAttributes>;\n\t\t\ttfoot: HTMLProps<'tfoot', HTMLAttributes>;\n\t\t\tth: HTMLProps<'th', HTMLAttributes>;\n\t\t\tthead: HTMLProps<'thead', HTMLAttributes>;\n\t\t\ttime: HTMLProps<'time', HTMLAttributes>;\n\t\t\ttitle: HTMLProps<'title', HTMLAttributes>;\n\t\t\ttr: HTMLProps<'tr', HTMLAttributes>;\n\t\t\ttrack: HTMLProps<'track', HTMLAttributes>;\n\t\t\tu: HTMLProps<'u', HTMLAttributes>;\n\t\t\tul: HTMLProps<'ul', HTMLAttributes>;\n\t\t\tvar: HTMLProps<'var', HTMLAttributes>;\n\t\t\tvideo: HTMLProps<'video', HTMLAttributes>;\n\t\t\twbr: HTMLProps<'wbr', HTMLAttributes>;\n\t\t\twebview: HTMLProps<'webview', HTMLAttributes>;\n\t\t\t// SVG\n\t\t\tsvg: HTMLProps<'svg', SVGAttributes>;\n\n\t\t\tanimate: HTMLProps<'animate', SVGAttributes>;\n\t\t\tanimateMotion: HTMLProps<'animateMotion', SVGAttributes>;\n\t\t\tanimateTransform: HTMLProps<'animateTransform', SVGAttributes>;\n\t\t\tcircle: HTMLProps<'circle', SVGAttributes>;\n\t\t\tclipPath: HTMLProps<'clipPath', SVGAttributes>;\n\t\t\tdefs: HTMLProps<'defs', SVGAttributes>;\n\t\t\tdesc: HTMLProps<'desc', SVGAttributes>;\n\t\t\tellipse: HTMLProps<'ellipse', SVGAttributes>;\n\t\t\tfeBlend: HTMLProps<'feBlend', SVGAttributes>;\n\t\t\tfeColorMatrix: HTMLProps<'feColorMatrix', SVGAttributes>;\n\t\t\tfeComponentTransfer: HTMLProps<'feComponentTransfer', SVGAttributes>;\n\t\t\tfeComposite: HTMLProps<'feComposite', SVGAttributes>;\n\t\t\tfeConvolveMatrix: HTMLProps<'feConvolveMatrix', SVGAttributes>;\n\t\t\tfeDiffuseLighting: HTMLProps<'feDiffuseLighting', SVGAttributes>;\n\t\t\tfeDisplacementMap: HTMLProps<'feDisplacementMap', SVGAttributes>;\n\t\t\tfeDistantLight: HTMLProps<'feDistantLight', SVGAttributes>;\n\t\t\tfeDropShadow: HTMLProps<'feDropShadow', SVGAttributes>;\n\t\t\tfeFlood: HTMLProps<'feFlood', SVGAttributes>;\n\t\t\tfeFuncA: HTMLProps<'feFuncA', SVGAttributes>;\n\t\t\tfeFuncB: HTMLProps<'feFuncB', SVGAttributes>;\n\t\t\tfeFuncG: HTMLProps<'feFuncG', SVGAttributes>;\n\t\t\tfeFuncR: HTMLProps<'feFuncR', SVGAttributes>;\n\t\t\tfeGaussianBlur: HTMLProps<'feGaussianBlur', SVGAttributes>;\n\t\t\tfeImage: HTMLProps<'feImage', SVGAttributes>;\n\t\t\tfeMerge: HTMLProps<'feMerge', SVGAttributes>;\n\t\t\tfeMergeNode: HTMLProps<'feMergeNode', SVGAttributes>;\n\t\t\tfeMorphology: HTMLProps<'feMorphology', SVGAttributes>;\n\t\t\tfeOffset: HTMLProps<'feOffset', SVGAttributes>;\n\t\t\tfePointLight: HTMLProps<'fePointLight', SVGAttributes>;\n\t\t\tfeSpecularLighting: HTMLProps<'feSpecularLighting', SVGAttributes>;\n\t\t\tfeSpotLight: HTMLProps<'feSpotLight', SVGAttributes>;\n\t\t\tfeTile: HTMLProps<'feTile', SVGAttributes>;\n\t\t\tfeTurbulence: HTMLProps<'feTurbulence', SVGAttributes>;\n\t\t\tfilter: HTMLProps<'filter', SVGAttributes>;\n\t\t\tforeignObject: HTMLProps<'foreignObject', SVGAttributes>;\n\t\t\tg: HTMLProps<'g', SVGAttributes>;\n\t\t\timage: HTMLProps<'image', SVGAttributes>;\n\t\t\tline: HTMLProps<'line', SVGAttributes>;\n\t\t\tlinearGradient: HTMLProps<'linearGradient', SVGAttributes>;\n\t\t\tmarker: HTMLProps<'marker', SVGAttributes>;\n\t\t\tmask: HTMLProps<'mask', SVGAttributes>;\n\t\t\tmetadata: HTMLProps<'metadata', SVGAttributes>;\n\t\t\tmpath: HTMLProps<'mpath', SVGAttributes>;\n\t\t\tpath: HTMLProps<'path', SVGAttributes>;\n\t\t\tpattern: HTMLProps<'pattern', SVGAttributes>;\n\t\t\tpolygon: HTMLProps<'polygon', SVGAttributes>;\n\t\t\tpolyline: HTMLProps<'polyline', SVGAttributes>;\n\t\t\tradialGradient: HTMLProps<'radialGradient', SVGAttributes>;\n\t\t\trect: HTMLProps<'rect', SVGAttributes>;\n\t\t\tstop: HTMLProps<'stop', SVGAttributes>;\n\t\t\tswitch: HTMLProps<'switch', SVGAttributes>;\n\t\t\tsymbol: HTMLProps<'symbol', SVGAttributes>;\n\t\t\ttext: HTMLProps<'text', SVGAttributes>;\n\t\t\ttextPath: HTMLProps<'textPath', SVGAttributes>;\n\t\t\ttspan: HTMLProps<'tspan', SVGAttributes>;\n\t\t\tuse: HTMLProps<'use', SVGAttributes>;\n\t\t\tview: HTMLProps<'view', SVGAttributes>;\n\n\t\t\t[name: string]: { [name: string]: any };\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/.gitignore",
    "content": "*.map\n/*/samples/_\n/runtime-legacy/shards\n/runtime-runes/shards\n_actual*.*\n_output\n"
  },
  {
    "path": "packages/svelte/tests/README.md",
    "content": "# Test repo\n\nThis repo tries to migrate as many tests from the current Svelte project over to test against the new compiler/runtime.\n\n## Differences to the old test suite\n\n- `compiler` options are different currently, a wrapper function in `helpers.js` was added and call sites rerouted to that\n- regex in the loader was adjusted, a `$` was added to the `import * as ..` regex (because the new runtime does `import * as $ from ..` for the runtime)\n- `vitest.config.js` was altered: `resolve-svelte` plugin also aliases `svelte` (the current runtime import) and `test.dir` was adjusted because the monorepo structure is different (compiler/runtime are separate packages here currently)\n- new runtime does not expose things like raf etc, which were used in some tests (runtime for example; for transition/animation tests). These are commented out for now\n- when changing an attribute, the JSDOM does not reflect the value immediately anymore because the runtime does update the DOM in after a tick, not synchronously - this results in many tests needing additional `await Promise.resolve()` lines\n\n## Breaking changes\n\n- Order of list insertions has changed: It's now back to front because that's faster\n- Slight timing differences mean that things may fire less in some cases (behavior should be unaffected though) - see `component-binding-each-remount-unkeyed` for an example\n- It's currently possible to create infinite loops with `$:` invoking each other\n- Fallback value is now set on all `undefined` values, not just on the first one\n- CSS is no longer minified. Unused styles are instead commented out\n- `:global(...)` compound selectors (e.g. `.foo:global(.bar)` or `:global(.foo).bar`) are no longer permitted. These are nonsensical and don't do anything useful in Svelte 4 — better to just get rid of them\n- transitions: when one element fades out and a new one (which is on the same element but another instance of it) fades in at the same time, the new one is now below the old one (was above before)\n- transitions: now wait one tick before they start playing to align with web animations API\n\n## TODOs\n\n- the new runtime does not expose named exports such as `svelte/store` yet, so can't test those\n- event `this` context is not preserved due to event delegation etc. Problem? Or necessary/ok breaking change?\n- order of operations should be preserved: first all attribute setters (spread props, static props) in order, then mutation directives (actions, bindings) in order, then style/class directives in order\n\n## Tests that succeeded but need a closer look\n\n- `$$slot` was modified to succeed, see TODOs inside for more info\n- `await-component-oncreate` needs to `await Promise.resolve()` because `onMount` runs async, too. Is this ok?\n- `component-slot-fallback-2` has one check commented out, because store subscriptions are deduplicated at the runtime level now. Should this be seen as a breaking change? If yes, ok?\n\n## Tests that are not copied over yet\n\n- everything except runtime is missing so far\n- animation tests within runtime folder were not copied over\n- `beforeUpdate`/`afterUpdate` tests\n"
  },
  {
    "path": "packages/svelte/tests/animation-helpers.js",
    "content": "import { flushSync } from 'svelte';\nimport { raf as svelte_raf } from 'svelte/internal/client';\nimport { queue_micro_task } from '../src/internal/client/dom/task.js';\n\nexport const raf = {\n\t/** @type {Set<Animation>} */\n\tanimations: new Set(),\n\t/** @type {Set<(n: number) => void>} */\n\tticks: new Set(),\n\ttick,\n\ttime: 0,\n\treset() {\n\t\tthis.time = 0;\n\t\tthis.animations.clear();\n\t\tthis.ticks.clear();\n\n\t\tsvelte_raf.tick = (f) => {\n\t\t\traf.ticks.add(f);\n\t\t};\n\t\tsvelte_raf.now = () => raf.time;\n\t\tsvelte_raf.tasks.clear();\n\t}\n};\n\n/**\n * @param {number} time\n */\nfunction tick(time) {\n\traf.time = time;\n\tflushSync();\n\tfor (const animation of raf.animations) {\n\t\tanimation._update();\n\t}\n\tfor (const tick of raf.ticks) {\n\t\ttick(raf.time);\n\t}\n}\n\nclass Animation {\n\t#keyframes;\n\t#duration;\n\t#delay;\n\n\t#offset = raf.time;\n\n\t/** @type {Function} */\n\t#onfinish = () => {};\n\n\t/** @type {Function} */\n\t#oncancel = () => {};\n\n\ttarget;\n\tcurrentTime = 0;\n\tstartTime = 0;\n\tplayState = 'running';\n\n\t/**\n\t * @param {HTMLElement} target\n\t * @param {Keyframe[] | PropertyIndexedKeyframes | null} keyframes\n\t * @param {number | KeyframeAnimationOptions | undefined} options\n\t */\n\tconstructor(target, keyframes, options) {\n\t\tthis.target = target;\n\t\tthis.#keyframes = Array.isArray(keyframes) ? keyframes : [];\n\t\tif (typeof options === 'number') {\n\t\t\tthis.#duration = options;\n\t\t\tthis.#delay = 0;\n\t\t} else {\n\t\t\tconst { duration = 0, delay = 0 } = options ?? {};\n\t\t\tif (typeof duration === 'object') {\n\t\t\t\tthis.#duration = 0;\n\t\t\t} else {\n\t\t\t\tthis.#duration = Math.round(+duration);\n\t\t\t}\n\t\t\tthis.#delay = delay;\n\t\t}\n\n\t\tthis._update();\n\t}\n\n\t_update() {\n\t\tthis.currentTime = raf.time - this.#offset - this.#delay;\n\t\tif (this.currentTime < 0) return;\n\n\t\tconst target_frame = this.currentTime / this.#duration;\n\t\tthis.#apply_keyframe(target_frame);\n\n\t\tif (this.currentTime >= this.#duration) {\n\t\t\tthis.#onfinish();\n\t\t\traf.animations.delete(this);\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} t\n\t */\n\t#apply_keyframe(t) {\n\t\tconst n = Math.min(1, Math.max(0, t)) * (this.#keyframes.length - 1);\n\n\t\tconst lower = this.#keyframes[Math.floor(n)];\n\t\tconst upper = this.#keyframes[Math.ceil(n)];\n\n\t\tlet frame = lower;\n\t\tif (lower !== upper) {\n\t\t\tframe = {};\n\n\t\t\tfor (const key in lower) {\n\t\t\t\tframe[key] = interpolate(\n\t\t\t\t\t/** @type {string} */ (lower[key]),\n\t\t\t\t\t/** @type {string} */ (upper[key]),\n\t\t\t\t\tn % 1\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (let prop in frame) {\n\t\t\t// @ts-ignore\n\t\t\tthis.target.style[prop] = frame[prop];\n\t\t}\n\n\t\tif (this.currentTime >= this.#duration) {\n\t\t\tthis.currentTime = this.#duration;\n\t\t\tfor (let prop in frame) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.target.style[prop] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tcancel() {\n\t\tif (this.currentTime > 0 && this.currentTime < this.#duration) {\n\t\t\tthis.#apply_keyframe(0);\n\t\t}\n\t\t// @ts-ignore\n\t\tthis.currentTime = null;\n\t\t// @ts-ignore\n\t\tthis.startTime = null;\n\n\t\tthis.playState = 'idle';\n\t\tthis.#oncancel();\n\t\traf.animations.delete(this);\n\t}\n\n\t/** @param {() => {}} fn */\n\tset onfinish(fn) {\n\t\tif (this.#duration === 0) {\n\t\t\tqueue_micro_task(fn);\n\t\t} else {\n\t\t\tthis.#onfinish = () => {\n\t\t\t\tfn();\n\t\t\t\tthis.#onfinish = () => {};\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @param {() => {}} fn */\n\tset oncancel(fn) {\n\t\tthis.#oncancel = () => {\n\t\t\tfn();\n\t\t\tthis.#oncancel = () => {};\n\t\t};\n\t}\n}\n\n/**\n * @param {string} a\n * @param {string} b\n * @param {number} p\n */\nfunction interpolate(a, b, p) {\n\tif (a === b) return a;\n\n\tconst fallback = p < 0.5 ? a : b;\n\n\tconst a_match = a.match(/[\\d.]+|[^\\d.]+/g);\n\tconst b_match = b.match(/[\\d.]+|[^\\d.]+/g);\n\n\tif (!a_match || !b_match) return fallback;\n\tif (a_match.length !== b_match.length) return fallback;\n\n\tlet result = '';\n\n\tfor (let i = 0; i < a_match.length; i += 2) {\n\t\tconst a_num = parseFloat(a_match[i]);\n\t\tconst b_num = parseFloat(b_match[i]);\n\t\tresult += a_num + (b_num - a_num) * p;\n\n\t\tif (a_match[i + 1] !== b_match[i + 1]) {\n\t\t\t// bail\n\t\t\treturn fallback;\n\t\t}\n\n\t\tresult += a_match[i + 1] ?? '';\n\t}\n\n\treturn result;\n}\n\n/**\n * @param {Keyframe[]} keyframes\n * @param {{duration: number, delay: number}} options\n * @returns {globalThis.Animation}\n */\n// @ts-ignore\nHTMLElement.prototype.animate = function (keyframes, options) {\n\tconst animation = new Animation(this, keyframes, options);\n\traf.animations.add(animation);\n\t// @ts-ignore\n\treturn animation;\n};\n\n// @ts-ignore\nHTMLElement.prototype.getAnimations = function () {\n\treturn Array.from(raf.animations).filter((animation) => animation.target === this);\n};\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_attribute_value',\n\t\tmessage: 'Expected attribute value',\n\t\tposition: [12, 12]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-empty/main.svelte",
    "content": "<div class= ></div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-sequence-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_invalid_sequence_expression',\n\t\tmessage:\n\t\t\t'Comma-separated expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses',\n\t\tposition: [163, 170]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-sequence-expression/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\tlet { x, y, z } = $props();\n</script>\n\n<!-- allowed -->\n<Child foo={(x, y, z)} />\n\n<!-- not allowed -->\n<Child foo={x, y, z} />\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-sequence-expression-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_invalid_sequence_expression',\n\t\tmessage:\n\t\t\t'Comma-separated expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses',\n\t\tposition: [124, 131]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-sequence-expression-2/main.svelte",
    "content": "<script>\n\tlet { x, y, z } = $props();\n</script>\n\n<!-- allowed -->\n<span foo={(x, y, z)} />\n\n<!-- not allowed -->\n<span foo={x, y, z} />\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_duplicate',\n\t\tmessage: 'Attributes need to be unique',\n\t\tposition: [17, 28]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique/main.svelte",
    "content": "<div class='foo' class='bar'></div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_duplicate',\n\t\tmessage: 'Attributes need to be unique',\n\t\tposition: [17, 25]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-binding/main.svelte",
    "content": "<Widget foo={42} bind:foo/>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_duplicate',\n\t\tmessage: 'Attributes need to be unique',\n\t\tposition: [23, 40]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-class/main.svelte",
    "content": "<div class:cool={true} class:cool={true}></div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-shorthand/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_duplicate',\n\t\tmessage: 'Attributes need to be unique',\n\t\tposition: [17, 24]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-shorthand/main.svelte",
    "content": "<div title='foo' {title}></div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-style/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_duplicate',\n\t\tmessage: 'Attributes need to be unique',\n\t\tposition: [23, 42]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/attribute-unique-style/main.svelte",
    "content": "<div style:color=\"red\" style:color=\"green\"></div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/catch-before-closing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token {:else}',\n\t\tposition: [35, 35]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/catch-before-closing/main.svelte",
    "content": "{#await true}\n\t{#each foo as bar}\n{:catch f}\n{/await}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/catch-without-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_invalid_continuation_placement',\n\t\tmessage:\n\t\t\t'{:...} block is invalid at this position (did you forget to close the preceding element or block?)',\n\t\tposition: [1, 1]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/catch-without-await/main.svelte",
    "content": "{:catch theValue}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/class-state-field-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_placement',\n\t\tmessage:\n\t\t\t'`$state(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.',\n\t\tposition: [33, 41]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/class-state-field-static/main.svelte",
    "content": "<script>\n\tclass X {\n\t\tstatic x = $state();\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/comment-unclosed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token -->',\n\t\tposition: [24, 24]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/comment-unclosed/main.svelte",
    "content": "<!-- an unclosed comment"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-invalid-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'tag_invalid_name',\n\t\tmessage:\n\t\t\t'Expected a valid element or component name. Components must have a valid variable name or dot notation expression',\n\t\tposition: [71, 84]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-invalid-name/main.svelte",
    "content": "<!-- ok -->\n<Component />\n<Wunderschön />\n<Cæжαकン中 />\n\n<!-- error -->\n<Components[1] />\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_duplicate',\n\t\tmessage: \"Duplicate slot name 'foo' in <Nested>\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n</script>\n\n<!-- allowed in custom elements -->\n<c-e>\n    <c-e-item slot=\"allowed\"></c-e-item>\n    <c-e-item slot=\"allowed\"></c-e-item>\n</c-e>\n\n<Nested>\n\t<p slot=\"foo\">{value}</p>\n\t<p slot=\"foo\">{value}</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_duplicate',\n\t\tmessage: \"Duplicate slot name 'foo' in <Nested>\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-2/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"foo\">{value}</svelte:fragment>\n\t<svelte:fragment slot=\"foo\">{value}</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_duplicate',\n\t\tmessage: \"Duplicate slot name 'foo' in <Nested>\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-3/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"foo\">{value}</svelte:fragment>\n\t<p slot=\"foo\">{value}</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_default_duplicate',\n\t\tmessage: 'Found default slot content alongside an explicit slot=\"default\"'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-4/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"default\">value</svelte:fragment>\n\t<p>value</p>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-5/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_duplicate',\n\t\tmessage: \"Duplicate slot name 'foo' in <Nested>\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-5/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n\timport Inner from './irrelevant';\n</script>\n\n<Nested>\n\t<Inner slot=\"foo\">{value}</Inner>\n\t<Inner slot=\"foo\">{value}</Inner>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-6/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_duplicate',\n\t\tmessage: \"Duplicate slot name 'foo' in <Nested>\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-duplicate-error-6/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n\timport Inner from './irrelevant';\n</script>\n\n<Nested>\n\t<p slot=\"foo\">{value}</p>\n\t<Inner slot=\"foo\">{value}</Inner>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-nested-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_invalid_placement',\n\t\tmessage:\n\t\t\t\"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-nested-error/main.svelte",
    "content": "<script>\n\timport Nested from './irrelevant';\n</script>\n\n<Nested>\n\t<div slot=\"slot1\">\n\t\t<div slot=\"slot2\"></div>\n\t</div>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-nested-error-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_invalid_placement',\n\t\tmessage:\n\t\t\t\"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-nested-error-2/main.svelte",
    "content": "<script>\n  import Nested from './irrelevant';\n</script>\n\n<Nested>\n  <div slot=\"slot1\">\n    <div>\n      <div slot=\"slot2\"></div>\n    </div>\n  </div>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-nested-error-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_attribute_invalid_placement',\n\t\tmessage:\n\t\t\t\"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/component-slot-nested-error-3/main.svelte",
    "content": "<script>\n  import Nested from './irrelevant';\n</script>\n\n<Nested>\n  <div>\n    <div>\n      <div slot=\"slot2\"></div>\n    </div>\n  </div>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-cyclical/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'const_tag_cycle',\n\t\tmessage: 'Cyclical dependency detected: a → b → a',\n\t\tposition: [12, 26]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-cyclical/main.svelte",
    "content": "{#if true}\n\t{@const a = b}\n\t{@const b = a}\n\t<h1>hello {a}</h1>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-sequence/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'const_tag_invalid_expression',\n\t\tmessage: '{@const ...} must consist of a single variable declaration',\n\t\tposition: [75, 93]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-sequence/main.svelte",
    "content": "{#if true}\n\t{@const foo = ('bar', 'baz')}\n{/if}\n\n{#if true}\n\t{@const foo = 'foo', bar = 'bar'}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-snippet-invalid-reference-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync: true,\n\terror: {\n\t\tcode: 'const_tag_invalid_reference',\n\t\tmessage: 'The `{@const foo = ...}` declaration is not available in this snippet',\n\t\tposition: [376, 379]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-snippet-invalid-reference-1/main.svelte",
    "content": "<svelte:options runes />\n\n<!-- ok -->\n<svelte:boundary>\n\t{@const foo = 'bar'}\n\n\t{#snippet other()}\n\t\t{foo}\n\t{/snippet}\n\n\t{foo}\n\n\t<svelte:boundary>\n\t\t{#snippet failed()}\n\t\t\t{foo}\n\t\t{/snippet}\n\t</svelte:boundary>\n\n\t{#snippet failed()}\n\t\t{@const foo = 'bar'}\n\t\t{foo}\n\t{/snippet}\n</svelte:boundary>\n\n<!-- error -->\n<svelte:boundary>\n\t{@const foo = 'bar'}\n\n\t{#snippet failed()}\n\t\t{foo}\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-snippet-invalid-reference-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync: true,\n\terror: {\n\t\tcode: 'const_tag_invalid_reference',\n\t\tmessage: 'The `{@const foo = ...}` declaration is not available in this snippet',\n\t\tposition: [298, 301]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-snippet-invalid-reference-2/main.svelte",
    "content": "<svelte:options runes />\n\n<!-- ok -->\n<Component>\n\t{@const foo = 'bar'}\n\t{foo}\n\n\t<Component>\n\t\t{#snippet prop()}\n\t\t\t{foo}\n\t\t{/snippet}\n\t</Component>\n\n\t{#snippet prop()}\n\t\t{@const foo = 'bar'}\n\t\t{foo}\n\t{/snippet}\n</Component>\n\n<!-- error -->\n<Component>\n\t{@const foo = 'bar'}\n\n\t{#snippet prop()}\n\t\t{foo}\n\t{/snippet}\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_whitespace',\n\t\tmessage: 'Expected whitespace',\n\t\tposition: [19, 19]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/const-tag-whitespace/main.svelte",
    "content": "{#if true}\n\t{@constfoo = 'bar'}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_expected_identifier',\n\t\tmessage: 'Expected a valid CSS identifier',\n\t\tposition: [25, 25]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css/main.svelte",
    "content": "<style>\n\tthis is not css\n</style>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-combinator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_combinator',\n\t\tmessage: 'A `:global` selector cannot follow a `>` combinator',\n\t\tposition: [54, 63]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-combinator/main.svelte",
    "content": "<style>\n\t/* ok */\n\t.x :global {\n\t}\n\n\t/* not ok */\n\t.x > :global {\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-combinator-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_combinator',\n\t\tmessage: 'A `:global` selector cannot follow a `>` combinator',\n\t\tposition: [79, 88]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-combinator-2/main.svelte",
    "content": "<style>\n\t/* ok */\n\t.x :global.x p {\n\t}\n\t.x :global > p {\n\t}\n\n\t/* not ok */\n\t.x > :global p {\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-declaration/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_declaration',\n\t\tmessage: 'A top-level `:global {...}` block can only contain rules, not declarations',\n\t\tposition: [109, 119]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-declaration/main.svelte",
    "content": "<style>\n\t/* ok */\n\t.x :global {\n\t\tcolor: red;\n\t}\n\n\t:global .y {\n\t\tcolor: red;\n\t}\n\n\t/* not ok */\n\t:global {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-in-pseudoclass/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_placement',\n\t\tmessage: 'A `:global` selector cannot be inside a pseudoclass',\n\t\tposition: [28, 35]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-in-pseudoclass/main.svelte",
    "content": "<style>\n\t/* invalid */\n\t:is(:global) { color: red }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-multiple-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_list',\n\t\tmessage:\n\t\t\t\"A `:global` selector cannot be part of a selector list with entries that don't contain `:global`\",\n\t\tposition: [232, 246]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-multiple-1/main.svelte",
    "content": "<style>\n\t/* valid */\n\t/* We gotta allow `:global x, :global y` and the likes because CSS preprocessors might generate that from e.g. `:global { x, y {...} }` */\n\t:global .x, :global .y {}\n\t.x :global, .y :global {}\n\n\t/* invalid */\n\t.x :global, .y {}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-multiple-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_list',\n\t\tmessage:\n\t\t\t\"A `:global` selector cannot be part of a selector list with entries that don't contain `:global`\",\n\t\tposition: [24, 43]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-block-multiple-2/main.svelte",
    "content": "<style>\n\t/* invalid */\n\t:global, :global .y {\n\t\tz { color: red }\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-modifier/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_modifier',\n\t\tmessage: 'A `:global` selector cannot modify an existing selector',\n\t\tposition: [70, 77]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-modifier/main.svelte",
    "content": "<style>\n\t/* ok */\n\tdiv :global.x {\n\t\tcolor: red;\n\t}\n\n\t/* not ok */\n\t.x:global {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-modifier-start-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_modifier_start',\n\t\tmessage: 'A `:global` selector can only be modified if it is a descendant of other selectors',\n\t\tposition: [75, 77]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-modifier-start-1/main.svelte",
    "content": "<style>\n\t/* ok */\n\tdiv :global.x {\n\t\tcolor: red;\n\t}\n\n\t/* not ok */\n\t:global.x {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-modifier-start-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_global_block_invalid_modifier_start',\n\t\tmessage: 'A `:global` selector can only be modified if it is a descendant of other selectors',\n\t\tposition: [147, 148]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-global-modifier-start-2/main.svelte",
    "content": "<style>\n\t/* ok */\n\tdiv :global {\n\t\t&.x {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\tdiv {\n\t\t:global {\n\t\t\t&.x {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* not ok */\n\t:global {\n\t\t&.x {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-nesting-selector-root/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_nesting_selector_invalid_placement',\n\t\tmessage:\n\t\t\t'Nesting selectors can only be used inside a rule or as the first selector inside a lone `:global(...)`',\n\t\tposition: [151, 152]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/css-nesting-selector-root/main.svelte",
    "content": "<style>\n\t/* valid */\n\t:global(&) {\n\t\tcolor: blue;\n\t}\n\t:global(& div) {\n\t\tcolor: blue;\n\t}\n\t:global(&) div {\n\t\tcolor: blue;\n\t}\n\t/* error */\n\t:global(div &) {\n\t\tcolor: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-declaration-legacy/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'dollar_binding_invalid',\n\t\tmessage: 'The $ name is reserved, and cannot be used for variables and imports',\n\t\tposition: [108, 109]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-declaration-legacy/main.svelte",
    "content": "<svelte:options runes={false} />\n\n<script>\n\tfunction ok($) {}\n\tfunction ok2() {\n\t\tlet $;\n\t}\n\n\t// error\n\tlet $;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-declaration-runes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'dollar_binding_invalid',\n\t\tmessage: 'The $ name is reserved, and cannot be used for variables and imports'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-declaration-runes/main.svelte",
    "content": "<svelte:options runes />\n\n<script>\n\tlet $;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-declaration-runes-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'dollar_binding_invalid',\n\t\tmessage: 'The $ name is reserved, and cannot be used for variables and imports'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-declaration-runes-2/main.svelte",
    "content": "<svelte:options runes />\n\n<script>\n\tfunction ok($) {}\n\tfunction error() {\n\t\tlet $;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'global_reference_invalid',\n\t\tmessage:\n\t\t\t'`$` is an illegal variable name. To reference a global variable called `$`, use `globalThis.$`'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-global/main.svelte",
    "content": "<script>\n\tconsole.log($);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-global-js/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'global_reference_invalid',\n\t\tmessage:\n\t\t\t'`$` is an illegal variable name. To reference a global variable called `$`, use `globalThis.$`'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-global-js/main.svelte.js",
    "content": "console.log($);\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-import/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'dollar_binding_invalid',\n\t\tmessage: 'The $ name is reserved, and cannot be used for variables and imports'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dollar-binding-import/main.svelte",
    "content": "<script>\n\timport { $ } from './somewhere';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dynamic-element-binding-invalid/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'bind_invalid_target',\n\t\tmessage: '`bind:value` can only be used with `<input>`, `<textarea>`, `<select>`'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/dynamic-element-binding-invalid/main.svelte",
    "content": "<script>\n  const tag = \"div\";\n  let value;\n</script>\n\n<svelte:element this={tag} bind:value></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/each-key-without-as/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'each_key_without_as',\n\t\tmessage: 'An `{#each ...}` block without an `as` clause cannot have a key'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/each-key-without-as/main.svelte",
    "content": "<script>\n\tlet items = [{ id: 3 }, { id: 2 }, { id: 1 }];\n</script>\n\n{#each items, i (items[i].id)}\n\t<p>{items[i].id}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/effect-active-rune/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_renamed',\n\t\tmessage: '`$effect.active` is now `$effect.tracking`'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/effect-active-rune/main.svelte.js",
    "content": "$effect.active();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/element-invalid-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'tag_invalid_name',\n\t\tmessage:\n\t\t\t'Expected a valid element or component name. Components must have a valid variable name or dot notation expression',\n\t\tposition: [1, 8]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/element-invalid-name/main.svelte",
    "content": "<yes[no]></yes[no]>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-before-closing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_invalid_continuation_placement',\n\t\tmessage:\n\t\t\t'{:...} block is invalid at this position (did you forget to close the preceding element or block?)',\n\t\tposition: [18, 18]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-before-closing/main.svelte",
    "content": "{#if true}\n\t<li>\n{:else}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-before-closing-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token {:then ...} or {:catch ...}',\n\t\tposition: [24, 24]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-before-closing-2/main.svelte",
    "content": "{#if true}\n\t{#await p}\n{:else}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-before-closing-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_invalid_continuation_placement',\n\t\tmessage:\n\t\t\t'{:...} block is invalid at this position (did you forget to close the preceding element or block?)',\n\t\tposition: [6, 6]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-before-closing-3/main.svelte",
    "content": "<li>\n{:else}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-if-before-closing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token {:then ...} or {:catch ...}',\n\t\tposition: [26, 26]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-if-before-closing/main.svelte",
    "content": "{#if true}\n\t{#await foo}\n{:else if false}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-if-before-closing-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_invalid_continuation_placement',\n\t\tmessage:\n\t\t\t'{:...} block is invalid at this position (did you forget to close the preceding element or block?)',\n\t\tposition: [17, 17]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-if-before-closing-2/main.svelte",
    "content": "{#if true}\n\t<p>\n{:else if false}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-if-without-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token {:then ...} or {:catch ...}',\n\t\tposition: [27, 27]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/else-if-without-if/main.svelte",
    "content": "{#await foo}\n{:then bar}\n\t{:else if}\n{/await}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/empty-attribute-shorthand/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_empty_shorthand',\n\t\tmessage: 'Attribute shorthand cannot be empty',\n\t\tposition: [6, 6]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/empty-attribute-shorthand/main.svelte",
    "content": "<span {}></span>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/empty-classname-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'directive_missing_name',\n\t\tmessage: '`class:` name cannot be empty',\n\t\tposition: [4, 10]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/empty-classname-binding/main.svelte",
    "content": "<h1 class:={true}>Hello</h1>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/empty-directive-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'directive_missing_name',\n\t\tmessage: '`use:` name cannot be empty',\n\t\tposition: [4, 8]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/empty-directive-name/main.svelte",
    "content": "<h1 use:>Hello</h1>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-default-derived-state-indirect/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'derived_invalid_export',\n\t\tmessage:\n\t\t\t'Cannot export derived state from a module. To expose the current derived value, export a function returning its value',\n\t\tposition: [61, 83]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-default-derived-state-indirect/main.svelte.js",
    "content": "let count = $state(0);\n\nconst double = $derived(count * 2);\n\nexport default double;\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-default-state-indirect/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_export',\n\t\tmessage:\n\t\t\t\"Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\",\n\t\tposition: [93, 118]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-default-state-indirect/main.svelte.js",
    "content": "let primitive = $state('nope');\n\nexport function update_primitive() {\n\tprimitive = 'yep';\n}\n\nexport default primitive;\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-derived-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'derived_invalid_export',\n\t\tmessage:\n\t\t\t'Cannot export derived state from a module. To expose the current derived value, export a function returning its value',\n\t\tposition: [24, 66]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-derived-state/main.svelte.js",
    "content": "let count = $state(0);\n\nexport const double = $derived(count * 2);\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-derived-state-indirect/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'derived_invalid_export',\n\t\tmessage:\n\t\t\t'Cannot export derived state from a module. To expose the current derived value, export a function returning its value',\n\t\tposition: [70, 76]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-derived-state-indirect/main.svelte.js",
    "content": "let count = $state(0);\n\nconst double = $derived(count * 2);\n\nexport { double };\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-not-defined-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'export_undefined',\n\t\tmessage: '`blah` is not defined',\n\t\tposition: [26, 30]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-not-defined-module/main.svelte",
    "content": "<script module>\n\texport { blah };\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_export',\n\t\tmessage:\n\t\t\t\"Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\",\n\t\tposition: [46, 86]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-state/main.svelte.js",
    "content": "export const object = $state({\n\tok: true\n});\n\nexport const primitive = $state('nope');\n\nexport function update_object() {\n\tobject.ok = !object.ok;\n}\n\nexport function update_primitive() {\n\tprimitive = 'yep';\n}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-state-indirect/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_export',\n\t\tmessage:\n\t\t\t\"Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\",\n\t\tposition: [211, 220]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-state-indirect/main.svelte.js",
    "content": "const object = $state({\n\tok: true\n});\n\nlet primitive = $state('nope');\n\nexport function update_object() {\n\tobject.ok = !object.ok;\n}\n\nexport function update_primitive() {\n\tprimitive = 'yep';\n}\n\nexport { object, primitive };\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-state-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_export',\n\t\tmessage:\n\t\t\t\"Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\",\n\t\tposition: [66, 104]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/export-state-module/main.svelte",
    "content": "<script module>\n\texport const object = $state({\n\t\tok: true\n\t});\n\n\texport let primitive = $state('nope');\n\n\texport function update_object() {\n\t\tobject.ok = !object.ok;\n\t}\n\n\texport function update_primitive() {\n\t\tprimitive = 'yep';\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/illegal-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'js_parse_error',\n\t\tmessage: 'Assigning to rvalue',\n\t\tposition: [1, 1]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/illegal-expression/main.svelte",
    "content": "{42 = nope}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-arguments-usage/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'invalid_arguments_usage',\n\t\tmessage:\n\t\t\t'The arguments keyword cannot be used within the template or at the top level of a component'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-arguments-usage/main.svelte",
    "content": "<script>\n\targuments\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-rune-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_name',\n\t\tmessage: '`$effect.imnotarune` is not a valid rune'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-rune-name/main.svelte.js",
    "content": "$effect.imnotarune();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-rune-name-shadowed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_name',\n\t\tmessage: '`$state.foo` is not a valid rune'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-rune-name-shadowed/main.svelte.js",
    "content": "class State {\n\tvalue = $state.foo();\n}\n\nexport const state = new State();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-snippet-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'snippet_parameter_assignment',\n\t\tmessage: 'Cannot reassign or bind to snippet parameter'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-snippet-binding/main.svelte",
    "content": "{#snippet foo(value)}\n\t<input bind:value={value}>\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-snippet-mutation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'snippet_parameter_assignment',\n\t\tmessage: 'Cannot reassign or bind to snippet parameter'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/invalid-snippet-mutation/main.svelte",
    "content": "{#snippet foo(value)}\n\t<button onclick={() => value += 1}>click</button>\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/legacy-no-const-assignment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'constant_assignment',\n\t\tmessage: 'Cannot assign to constant'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/legacy-no-const-assignment/main.svelte",
    "content": "<script>\n\tconst a = createCounter();\n\ta += 1;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/legacy-no-const-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'constant_assignment',\n\t\tmessage: 'Cannot assign to constant'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/legacy-no-const-update/main.svelte",
    "content": "<script>\n\tconst a = createCounter();\n\ta++;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/malformed-snippet/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token }',\n\t\tposition: [20, 20]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/malformed-snippet/main.svelte",
    "content": "{#snippet children()hi{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/malformed-snippet-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token )',\n\t\tposition: [31, 31]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/malformed-snippet-2/main.svelte",
    "content": "{#snippet children(hi{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/multiple-styles/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'style_duplicate',\n\t\tmessage: 'A component can have a single top-level `<style>` element',\n\t\tposition: [58, 58]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/multiple-styles/main.svelte",
    "content": "<div>foo</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>\n\n<style>\n\tdiv {\n\t\tcolor: blue;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/options-children/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_meta_invalid_content',\n\t\tmessage: '<svelte:options> cannot have children',\n\t\tposition: [16, 24]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/options-children/main.svelte",
    "content": "<svelte:options>contents</svelte:options>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/raw-mustaches-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_whitespace',\n\t\tmessage: 'Expected whitespace',\n\t\tposition: [6, 6]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/raw-mustaches-whitespace/main.svelte",
    "content": "{@htmlfoo}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/render-tag-invalid-call/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'render_tag_invalid_call_expression',\n\t\tmessage: 'Calling a snippet function using apply, bind or call is not allowed'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/render-tag-invalid-call/main.svelte",
    "content": "{@render snippet.apply(null, [1, 2, 3])}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-before-after-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'runes_mode_invalid_import',\n\t\tmessage: 'beforeUpdate cannot be used in runes mode'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-before-after-update/main.svelte",
    "content": "<svelte:options runes />\n\n<script>\n\timport { beforeUpdate, afterUpdate } from 'svelte';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-bindable-not-called/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_missing_parentheses',\n\t\tmessage: 'Cannot use rune without parentheses'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-bindable-not-called/main.svelte",
    "content": "<script>\n\tlet { a = $bindable } = $props();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-duplicate-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'props_duplicate',\n\t\tmessage: 'Cannot use `$props()` more than once'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-duplicate-props/main.svelte",
    "content": "<script>\n\tconst { foo } = $props();\n\tconst { bar } = $props();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-export-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'legacy_export_invalid',\n\t\tmessage: 'Cannot use `export let` in runes mode — use `$props()` instead'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-export-let/main.svelte",
    "content": "<script module>\n    export let bar = ''; // check that it doesn't error here already\n</script>\n\n<script>\n    export let foo;\n    let x = $state(); // mark as runes mode\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-export-named-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_export',\n\t\tmessage:\n\t\t\t\"Cannot export state from a module if it is reassigned. Either export a function returning the state value or only mutate the state value's properties\",\n\t\tposition: [28, 53]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-export-named-state/main.svelte.js",
    "content": "export const x = $state(0);\nexport let y = $state(0);\ny = 1;\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-invalid-each-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'each_item_invalid_assignment',\n\t\tmessage:\n\t\t\t'Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. `array[i] = value` instead of `entry = value`, or `bind:value={array[i]}` instead of `bind:value={entry}`)'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-invalid-each-binding/main.svelte",
    "content": "<script>\n\tlet arr = $state([1,2,3]);\n</script>\n\n{#each arr as value}\n\t<input bind:value>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-invalid-each-binding-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'each_item_invalid_assignment',\n\t\tmessage:\n\t\t\t'Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. `array[i] = value` instead of `entry = value`, or `bind:value={array[i]}` instead of `bind:value={entry}`)'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-invalid-each-binding-this/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet array: Array<{ id: number; element: HTMLElement | null }> = $state([\n\t\t{ id: 1, element: null },\n\t\t{ id: 2, element: null },\n\t\t{ id: 3, element: null }\n\t]);\n</script>\n\n{#each array as { id, element } (id)}\n\t<input bind:this={element} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-invalid-each-mutation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'each_item_invalid_assignment',\n\t\tmessage:\n\t\t\t'Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. `array[i] = value` instead of `entry = value`, or `bind:value={array[i]}` instead of `bind:value={entry}`)'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-invalid-each-mutation/main.svelte",
    "content": "<script>\n\tlet arr = $state([1,2,3]);\n</script>\n\n{#each arr as value}\n\t<button onclick={() => value += 1}>click</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-module-store-subscription/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_subscription_module',\n\t\tmessage: 'Cannot reference store value outside a `.svelte` file'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-module-store-subscription/main.svelte.js",
    "content": "import { store } from 'somewhere';\n\nconsole.log($store);\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-const-assignment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'constant_assignment',\n\t\tmessage: 'Cannot assign to constant'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-const-assignment/main.svelte",
    "content": "<script>\n\tconst a = $state(0);\n\ta += 1;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-const-assignment/main.svelte.js",
    "content": "const a = $state(0);\na += 1;\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-const-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'constant_assignment',\n\t\tmessage: 'Cannot assign to constant'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-const-update/main.svelte",
    "content": "<script>\n\tconst a = $state(0);\n\ta++;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-rune-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_placement',\n\t\tmessage:\n\t\t\t'`$state(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-no-rune-each/main.svelte",
    "content": "<script>\n\tlet todos = $state([]);\n</script>\n\n\n{#each todos as $state(todo)}\n  {todo}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-props-illegal-name-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'props_illegal_name',\n\t\tmessage:\n\t\t\t'Declaring or accessing a prop starting with `$$` is illegal (they are reserved for Svelte internals)'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-props-illegal-name-1/main.svelte",
    "content": "<script>\n\tlet { $$slots: a } = $props();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-props-illegal-name-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'props_illegal_name',\n\t\tmessage:\n\t\t\t'Declaring or accessing a prop starting with `$$` is illegal (they are reserved for Svelte internals)'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-props-illegal-name-2/main.svelte",
    "content": "<script>\n\tlet props = $props();\n\tprops.$$slots;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-props-not-called/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_missing_parentheses',\n\t\tmessage: 'Cannot use rune without parentheses'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-props-not-called/main.svelte",
    "content": "<script>\n\tlet { a } = $props;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-bindable-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments_length',\n\t\tmessage: '`$bindable` must be called with zero or one arguments'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-bindable-args/main.svelte",
    "content": "<script>\n\tconst { foo = $bindable(1, 2) } = $props();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-bindable-placement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'bindable_invalid_location',\n\t\tmessage: '`$bindable()` can only be used inside a `$props()` declaration'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-bindable-placement/main.svelte",
    "content": "<script>\n\tconst { a = $bindable() } = $state();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-bindable-placement/main.svelte.js",
    "content": "const { a = $bindable() } = $state();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-derived-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments_length',\n\t\tmessage: '`$derived` must be called with exactly one argument'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-derived-args/main.svelte",
    "content": "<script>\n\tconst foo = $derived();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-derived-args/main.svelte.js",
    "content": "const foo = $derived();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-derived-placement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_placement',\n\t\tmessage:\n\t\t\t'`$derived(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-derived-placement/main.svelte",
    "content": "<script>\n\t$derived(1);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-derived-placement/main.svelte.js",
    "content": "$derived(1);\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-effect-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments_length',\n\t\tmessage: '`$effect` must be called with exactly one argument'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-effect-args/main.svelte",
    "content": "<script>\n\t$effect();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-effect-args/main.svelte.js",
    "content": "$effect();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-effect-placement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'effect_invalid_placement',\n\t\tmessage: '`$effect()` can only be used as an expression statement'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-effect-placement/main.svelte",
    "content": "<script>\n\tfunction a() {\n\t\treturn $effect(() => {});\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-effect-placement/main.svelte.js",
    "content": "function a() {\n\treturn $effect(() => {});\n}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-host-placement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'host_invalid_placement',\n\t\tmessage: '`$host()` can only be used inside custom element component instances'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-host-placement/main.svelte",
    "content": "<script>\n\t$host();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-host-placement/main.svelte.js",
    "content": "$host();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-props-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments',\n\t\tmessage: '`$props` cannot be called with arguments'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-props-args/main.svelte",
    "content": "<script>\n\tconst { foo } = $props(1);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-props-placement-instance/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'props_invalid_placement',\n\t\tmessage:\n\t\t\t'`$props()` can only be used at the top level of components as a variable declaration initializer'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-props-placement-instance/main.svelte",
    "content": "<script>\n\tfunction x() {\n\t\tconst { a } = $props();\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-props-placement-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'props_invalid_placement',\n\t\tmessage:\n\t\t\t'`$props()` can only be used at the top level of components as a variable declaration initializer'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-props-placement-module/main.svelte.js",
    "content": "const { a } = $props();\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments_length',\n\t\tmessage: '`$state` must be called with zero or one arguments'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-args/main.svelte",
    "content": "<script>\n\tconst foo = $state(1, 2, 3);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-args/main.svelte.js",
    "content": "const foo = $state(1, 2, 3);\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-placement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'state_invalid_placement',\n\t\tmessage:\n\t\t\t'`$state(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-placement/main.svelte",
    "content": "<script>\n\tfunction a(x) {}\n\ta($state(1));\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-placement/main.svelte.js",
    "content": "function a(x) {}\na($state(1));\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-raw-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments_length',\n\t\tmessage: '`$state.raw` must be called with zero or one arguments'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-raw-args/main.svelte",
    "content": "<script>\n\tconst foo = $state.raw(1, 2, 3);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-raw-args/main.svelte.js",
    "content": "const foo = $state.raw(1, 2, 3);\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-snapshot-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'rune_invalid_arguments_length',\n\t\tmessage: '`$state.snapshot` must be called with exactly one argument'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/runes-wrong-state-snapshot-args/main.svelte",
    "content": "<script>\n\tconst foo = $state.snapshot();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/script-unclosed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'element_unclosed',\n\t\tmessage: '`<script>` was left open',\n\t\tposition: [32, 32]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/script-unclosed/main.svelte",
    "content": "<script>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/script-unclosed-eof/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'unexpected_eof',\n\t\tmessage: 'Unexpected end of input',\n\t\tposition: [32, 32]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/script-unclosed-eof/main.svelte",
    "content": "<h1>Hello {name}!</h1>\n\n<script>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/self-reference/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_self_invalid_placement',\n\t\tmessage:\n\t\t\t'`<svelte:self>` components can only exist inside `{#if}` blocks, `{#each}` blocks, `{#snippet}` blocks or slots passed to components',\n\t\tposition: [0, 14]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/self-reference/main.svelte",
    "content": "<svelte:self/>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/slot-conflicting-with-render-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'slot_snippet_conflict',\n\t\tmessage:\n\t\t\t'Cannot use `<slot>` syntax and `{@render ...}` tags in the same component. Migrate towards `{@render ...}` tags completely',\n\t\tposition: [71, 84]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/slot-conflicting-with-render-tag/main.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n{@render children()}\n<slot></slot>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/snippet-children-conflict/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'snippet_conflict',\n\t\tmessage:\n\t\t\t'Cannot use explicit children snippet at the same time as implicit children content. Remove either the non-whitespace content or the children snippet block',\n\t\tposition: [320, 353]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/snippet-children-conflict/main.svelte",
    "content": "<!-- ok -->\n<Button>\n\thello\n</Button>\n<Button>\n\t{#snippet children()}hi{/snippet}\n</Button>\n<Button>\n\thello\n\t{#snippet foo()}x{/snippet}\n</Button>\n<Button>\n\t{#snippet children()}hi{/snippet}\n\t{#snippet foo()}x{/snippet}\n</Button>\n<div>\n\thello\n\t{#snippet children()}hi{/snippet}\n</div>\n\n<!-- invalid -->\n<Button>\n\thello\n\t{#snippet children()}hi{/snippet}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/snippet-invalid-export/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'snippet_invalid_export',\n\t\tmessage:\n\t\t\t'An exported snippet can only reference things declared in a `<script module>`, or other exportable snippets',\n\t\tposition: [26, 29]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/snippet-invalid-export/main.svelte",
    "content": "<script module>\n\texport { foo }\n</script>\n\n<script>\n\tlet x = 42;\n</script>\n\n{#snippet foo()}\n\t{x}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/snippet-rest-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'snippet_invalid_rest_parameter',\n\t\tmessage: 'Snippets do not support rest parameters; use an array instead',\n\t\tposition: [19, 26]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/snippet-rest-args/main.svelte",
    "content": "{#snippet children(...args)}\n\t{args}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-autosub-context-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_subscription',\n\t\tmessage: 'Cannot reference store value inside `<script module>`',\n\t\tposition: [154, 158]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-autosub-context-module/main.svelte",
    "content": "<script module>\n\t// this should be fine (state rune is not treated as a store)\n\tconst state = $state(0);\n\t// this is not\n\tconst foo = {};\n\tconst answer = $foo;\n</script>\n\n<script>\n\tlet state;\n</script>\n\n<p>{answer}</p>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-contextual/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_scoped_subscription',\n\t\tmessage: 'Cannot subscribe to stores that are not declared at the top level of the component'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-contextual/main.svelte",
    "content": "<script>\n\texport let todos;\n</script>\n\n{#each todos as todo}\n\t<label>\n\t\t<input type=checkbox on:change={e => todo.update(t => ({ done: e.target.checked, text: t.text }))}>\n\t\t{$todo.done ? '[done]' : '[todo]'} {$todo.text}\n\t</label>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-global-disallowed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'global_reference_invalid',\n\t\tmessage:\n\t\t\t'`$foo` is an illegal variable name. To reference a global variable called `$foo`, use `globalThis.$foo`'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-global-disallowed/main.svelte",
    "content": "<script>\n\t$foo();\n</script>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-prevent-user-declarations/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'dollar_prefix_invalid',\n\t\tmessage: 'The $ prefix is reserved, and cannot be used for variables and imports'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-prevent-user-declarations/main.svelte",
    "content": "<script>\n\texport let count;\n\tlet $count;\n</script>\n\n<button on:click=\"{() => count.update(n => n + 1)}\">count {$count}</button>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-shadow-scope/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_scoped_subscription',\n\t\tmessage: 'Cannot subscribe to stores that are not declared at the top level of the component'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-shadow-scope/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst store = writable();\n\n\tfunction foo() {\n\t\tlet store = 1;\n\t\t$store = 2;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-shadow-scope-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_scoped_subscription',\n\t\tmessage: 'Cannot subscribe to stores that are not declared at the top level of the component',\n\t\tposition: [142, 147]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-shadow-scope-2/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst user = writable(0);\n\tconst users = [];\n\t$: selected = users.find(user => user.id == $user);\n\n\t$: console.log($user);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-shadow-scope-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_scoped_subscription',\n\t\tmessage: 'Cannot subscribe to stores that are not declared at the top level of the component',\n\t\tposition: [167, 172]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-shadow-scope-3/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst user = writable(0);\n\tconst users = [];\n\n\t$: console.log($user);\n\t$: selected = users.find(user => user.id == $user);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-template-expression-scope/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'store_invalid_scoped_subscription',\n\t\tmessage: 'Cannot subscribe to stores that are not declared at the top level of the component'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/store-template-expression-scope/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst store = writable();\n</script>\n\n<button\n\ton:click={(store) => {\n\t\t$store = Math.random();\n\t}} />\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/style-unclosed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'css_expected_identifier',\n\t\tmessage: 'Expected a valid CSS identifier',\n\t\tposition: [9, 9]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/style-unclosed/main.svelte",
    "content": "<style>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/style-unclosed-eof/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token </style',\n\t\tposition: [31, 31]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/style-unclosed-eof/main.svelte",
    "content": "<h1>Hello {name}!</h1>\n\n<style>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/svelte-internal-import/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'import_svelte_internal_forbidden',\n\t\tmessage:\n\t\t\t\"Imports of `svelte/internal/*` are forbidden. It contains private runtime code which is subject to change without notice. If you're importing from `svelte/internal/*` to work around a limitation of Svelte, please open an issue at https://github.com/sveltejs/svelte and explain your use case\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/svelte-internal-import/main.svelte",
    "content": "<svelte:options runes={true} />\n\n<script>\n    import { something } from 'svelte/internal/client';\n</script>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/svelte-internal-import/main.svelte.js",
    "content": "import { something } from 'svelte/internal/server';\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/svelte-selfdestructive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_meta_invalid_tag',\n\t\tmessage:\n\t\t\t'Valid `<svelte:...>` tag names are svelte:head, svelte:options, svelte:window, svelte:document, svelte:body, svelte:element, svelte:component, svelte:self, svelte:fragment or svelte:boundary',\n\t\tposition: [10, 32]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/svelte-selfdestructive/main.svelte",
    "content": "{#if x}\n\t<svelte:selfdestructive x=\"{x - 1}\"/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/then-before-closing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_invalid_continuation_placement',\n\t\tmessage:\n\t\t\t'{:...} block is invalid at this position (did you forget to close the preceding element or block?)',\n\t\tposition: [21, 21]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/then-before-closing/main.svelte",
    "content": "{#await true}\n\t<li>\n{:then f}\n{/await}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/then-without-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_invalid_continuation_placement',\n\t\tmessage:\n\t\t\t'{:...} block is invalid at this position (did you forget to close the preceding element or block?)',\n\t\tposition: [1, 1]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/then-without-await/main.svelte",
    "content": "{:then theValue}\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unbalanced-curly-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_unquoted_sequence',\n\t\tmessage:\n\t\t\t'Attribute values containing `{...}` must be enclosed in quote marks, unless the value only contains the expression',\n\t\tposition: [101, 116]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unbalanced-curly-component/main.svelte",
    "content": "<svelte:options runes />\n<script>\n\timport Component from \"./Component.svelte\";\n</script>\n\n<Component onclick={true}} />"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unbalanced-curly-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'attribute_unquoted_sequence',\n\t\tmessage:\n\t\t\t'Attribute values containing `{...}` must be enclosed in quote marks, unless the value only contains the expression',\n\t\tposition: [34, 71]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unbalanced-curly-element/main.svelte",
    "content": "<svelte:options runes />\n<button\n\tonclick={() => console.log('hello')}}\n>\n\tclick\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unclosed-attribute-self-close-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'expected_token',\n\t\tmessage: 'Expected token }',\n\t\tposition: [19, 19]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unclosed-attribute-self-close-tag/main.svelte",
    "content": "<Component test={ />"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'element_unclosed',\n\t\tmessage: '`<div>` was left open',\n\t\tposition: [0, 1]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input/main.svelte",
    "content": "<div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'unexpected_eof',\n\t\tmessage: 'Unexpected end of input',\n\t\tposition: [2, 2]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input-b/main.svelte",
    "content": "<d"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input-c/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'unexpected_eof',\n\t\tmessage: 'Unexpected end of input',\n\t\tposition: [1, 1]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input-c/main.svelte",
    "content": "<"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input-d/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'block_unclosed',\n\t\tmessage: 'Block was left open',\n\t\tposition: [0, 1]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unexpected-end-of-input-d/main.svelte",
    "content": "{#if foo}\n\t<p>foo</p>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unmatched-closing-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'element_invalid_closing_tag',\n\t\tmessage: '`</div>` attempted to close an element that was not open',\n\t\tposition: [0, 0]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unmatched-closing-tag/main.svelte",
    "content": "</div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unmatched-closing-tag-autoclose/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'element_invalid_closing_tag_autoclosed',\n\t\tmessage:\n\t\t\t'`</p>` attempted to close element that was already automatically closed by `<pre>` (cannot nest `<pre>` inside `<p>`)',\n\t\tposition: [24, 24]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unmatched-closing-tag-autoclose/main.svelte",
    "content": "<p>\n\t<pre>pre tag</pre>\n</p>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unmatched-closing-tag-autoclose-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'element_invalid_closing_tag',\n\t\tmessage: '`</p>` attempted to close an element that was not open',\n\t\tposition: [38, 38]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/unmatched-closing-tag-autoclose-2/main.svelte",
    "content": "<div>\n\t<p>\n\t<pre>pre tag</pre>\n</div>\n</p>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/void-closing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'void_element_invalid_content',\n\t\tmessage: 'Void elements cannot have children or closing tags',\n\t\tposition: [23, 23]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/void-closing/main.svelte",
    "content": "<input>this is illegal!</input>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-children/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_meta_invalid_content',\n\t\tmessage: '<svelte:window> cannot have children',\n\t\tposition: [15, 23]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-children/main.svelte",
    "content": "<svelte:window>contents</svelte:window>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-duplicate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_meta_duplicate',\n\t\tmessage: 'A component can only have one `<svelte:window>` element',\n\t\tposition: [17, 17]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-duplicate/main.svelte",
    "content": "<svelte:window/>\n<svelte:window/>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-inside-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_meta_invalid_placement',\n\t\tmessage: '`<svelte:window>` tags cannot be inside elements or blocks',\n\t\tposition: [11, 11]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-inside-block/main.svelte",
    "content": "{#if foo}\n\t<svelte:window/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-inside-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: {\n\t\tcode: 'svelte_meta_invalid_placement',\n\t\tmessage: '`<svelte:window>` tags cannot be inside elements or blocks',\n\t\tposition: [7, 7]\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/samples/window-inside-element/main.svelte",
    "content": "<div>\n\t<svelte:window/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/compiler-errors/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert, expect, it } from 'vitest';\nimport { compile, compileModule, type CompileError } from 'svelte/compiler';\nimport { suite, type BaseTest } from '../suite';\nimport { read_file } from '../helpers.js';\n\ninterface CompilerErrorTest extends BaseTest {\n\tasync?: boolean;\n\terror: {\n\t\tcode: string;\n\t\tmessage: string;\n\t\tposition?: [number, number];\n\t};\n}\n\n/**\n * Remove the \"https://svelte.dev/e/...\" link\n */\nfunction strip_link(message: string) {\n\treturn message.slice(0, message.lastIndexOf('\\n'));\n}\n\nconst { test, run } = suite<CompilerErrorTest>((config, cwd) => {\n\tif (!fs.existsSync(`${cwd}/main.svelte`) && !fs.existsSync(`${cwd}/main.svelte.js`)) {\n\t\tthrow new Error('Expected main.svelte or main.svelte.js');\n\t}\n\n\tif (fs.existsSync(`${cwd}/main.svelte`)) {\n\t\tlet caught_error = false;\n\n\t\ttry {\n\t\t\tcompile(read_file(`${cwd}/main.svelte`), {\n\t\t\t\tgenerate: 'client',\n\t\t\t\texperimental: { async: config.async ?? false }\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconst error = e as CompileError;\n\n\t\t\tcaught_error = true;\n\n\t\t\texpect(error.code).toBe(config.error.code);\n\t\t\texpect(strip_link(error.message)).toBe(config.error.message);\n\n\t\t\tif (config.error.position) {\n\t\t\t\texpect(error.position).toEqual(config.error.position);\n\t\t\t}\n\t\t}\n\n\t\tif (!caught_error) {\n\t\t\tassert.fail('Expected an error');\n\t\t}\n\t}\n\n\tif (fs.existsSync(`${cwd}/main.svelte.js`)) {\n\t\tlet caught_error = false;\n\n\t\ttry {\n\t\t\tcompileModule(read_file(`${cwd}/main.svelte.js`), {\n\t\t\t\tgenerate: 'client'\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconst error = e as CompileError;\n\n\t\t\tcaught_error = true;\n\n\t\t\texpect(error.code).toEqual(config.error.code);\n\t\t\texpect(strip_link(error.message)).toEqual(config.error.message);\n\n\t\t\tif (config.error.position) {\n\t\t\t\texpect(error.position).toEqual(config.error.position);\n\t\t\t}\n\t\t}\n\n\t\tif (!caught_error) {\n\t\t\tassert.fail('Expected an error');\n\t\t}\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n\nit('resets the compiler state including filename', () => {\n\t// start with something that succeeds\n\tcompile('<div>hello</div>', { filename: 'foo.svelte' });\n\t// then try something that fails in the parsing stage\n\ttry {\n\t\tcompile('<p>hello<div>invalid</p>', { filename: 'bar.svelte' });\n\t\texpect.fail('Expected an error');\n\t} catch (e: any) {\n\t\texpect(e.toString()).toContain('bar.svelte');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/animations/expected.css",
    "content": "\n\t@keyframes svelte-xyz-a {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(2);\n\t\t}\n\t}\n\n\t@keyframes svelte-xyz-animation {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(2);\n\t\t}\n\t}\n\n\th1.svelte-xyz {\n\t\tanimation: 1s linear infinite svelte-xyz-a;\n\t\tanimation: svelte-xyz-a 1s linear infinite;\n\t\tanimation: 1s linear infinite svelte-xyz-a,svelte-xyz-animation 1s linear infinite;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/animations/input.svelte",
    "content": "<h1>test</h1>\n\n<style>\n\t@keyframes a {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(2);\n\t\t}\n\t}\n\n\t@keyframes animation {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(2);\n\t\t}\n\t}\n\n\th1 {\n\t\tanimation: 1s linear infinite a;\n\t\tanimation: a 1s linear infinite;\n\t\tanimation: 1s linear infinite a,animation 1s linear infinite;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/at-layer/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/at-layer/expected.css",
    "content": "\t@layer base, special;\n\n\t@layer special {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: rebeccapurple;\n\t\t}\n\t}\n\n\t@layer base {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/at-layer/input.svelte",
    "content": "<div>hello</div>\n\n<style>\n\t@layer base, special;\n\n\t@layer special {\n\t\tdiv {\n\t\t\tcolor: rebeccapurple;\n\t\t}\n\t}\n\n\t@layer base {\n\t\tdiv {\n\t\t\tcolor: green;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/at-rule-nested-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/at-rule-nested-class/expected.css",
    "content": "\n\t@starting-style {\n\t\t.card.svelte-xyz{\n\t\t\theight: 0;\n\t\t}\n\t}\t\n\t.card.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/at-rule-nested-class/input.svelte",
    "content": "<div class=\"card\"></div>\n\n<style>\n\t@starting-style {\n\t\t.card{\n\t\t\theight: 0;\n\t\t}\n\t}\t\n\t.card {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-bind/expected.css",
    "content": "\tdetails[open].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-bind/input.svelte",
    "content": "<script>\n\tlet open = false;\n</script>\n\n<details bind:open>Hello</details>\n\n<style>\n\tdetails[open] {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-case-sensitive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 44,\n\t\t\t\tcolumn: 14,\n\t\t\t\tline: 4\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"p[type=\\'B\\' s]\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 31,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 4\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-case-sensitive/expected.css",
    "content": "\t/* (unused) p[type='B' s] {\n\t\tcolor: red;\n\t}*/\n\n\tp[type='B' i].svelte-xyz {\n\t\tcolor: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-case-sensitive/input.svelte",
    "content": "<p type=\"b\">blue</p>\n\n<style>\n\tp[type='B' s] {\n\t\tcolor: red;\n\t}\n\n\tp[type='B' i] {\n\t\tcolor: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-details-open/expected.css",
    "content": "\tdetails[open].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-details-open/input.svelte",
    "content": "<details>Hello</details>\n\n<style>\n\tdetails[open] {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-dialog-open/expected.css",
    "content": "\tdialog[open].svelte-xyz {\n\t\tdisplay: grid;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-dialog-open/input.svelte",
    "content": "<dialog>Hello</dialog>\n\n<style>\n\tdialog[open] {\n\t\tdisplay: grid;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-html-case-insensitive/expected.css",
    "content": "\tform[method=\"get\"].svelte-xyz h1:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n\n\tform[method=\"post\"].svelte-xyz h1:where(.svelte-xyz) {\n\t\tcolor: blue;\n\t}\n\n\tinput[type=\"text\"].svelte-xyz {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-html-case-insensitive/expected.html",
    "content": "<form class=\"svelte-xyz\" method=\"GET\"><h1 class=\"svelte-xyz\">Hello</h1></form> <form class=\"svelte-xyz\" method=\"POST\"><h1 class=\"svelte-xyz\">World</h1></form> <input class=\"svelte-xyz\" type=\"Text\" />\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-html-case-insensitive/input.svelte",
    "content": "<form method=\"GET\">\n\t<h1>Hello</h1>\n</form>\n\n<form method=\"POST\">\n\t<h1>World</h1>\n</form>\n\n<input type=\"Text\" />\n\n<style>\n\tform[method=\"get\"] h1 {\n\t\tcolor: red;\n\t}\n\n\tform[method=\"post\"] h1 {\n\t\tcolor: blue;\n\t}\n\n\tinput[type=\"text\"] {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-matches-derictive/expected.css",
    "content": "\tspan[class].svelte-xyz { color: green }\n\tdiv[style].svelte-xyz { color: green }"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-matches-derictive/input.svelte",
    "content": "<span class:foo={true}></span>\n<div style:--foo=\"bar\"></div>\n\n<style>\n\tspan[class] { color: green }\n\tdiv[style] { color: green }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-only-name/expected.css",
    "content": "\t[foo].svelte-xyz {\n\t\tcolor: red;\n\t}\n\t[baz].svelte-xyz {\n\t\tcolor: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-only-name/input.svelte",
    "content": "<div foo='bar'></div>\n<div baz></div>\n\n<style>\n\t[foo] {\n\t\tcolor: red;\n\t}\n\t[baz] {\n\t\tcolor: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-unquoted/expected.css",
    "content": "\t[foo=bar].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-unquoted/input.svelte",
    "content": "<div foo='bar'></div>\n\n<style>\n\t[foo=bar] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-word-arbitrary-whitespace/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n\t[class~=\"bar\"].svelte-xyz {\n\t\tbackground: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/attribute-selector-word-arbitrary-whitespace/input.svelte",
    "content": "<div class=\"\nfoo\nbar\n\"></div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n\t[class~=\"bar\"] {\n\t\tbackground: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/basic/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/basic/input.svelte",
    "content": "<div>red</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/child-combinator/expected.css",
    "content": "  main.svelte-xyz button:where(.svelte-xyz) {\n    background-color: red;\n  }\n\n  main.svelte-xyz div:where(.svelte-xyz) > button:where(.svelte-xyz) {\n    background-color: blue;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/child-combinator/input.svelte",
    "content": "<style>\n  main button {\n    background-color: red;\n  }\n\n  main div > button {\n    background-color: blue;\n  }\n</style>\n<main>\n  <div>\n    <button type=\"submit\">Blue</button>\n  </div>\n</main>"
  },
  {
    "path": "packages/svelte/tests/css/samples/class-directive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".forth\"\\nhttps://svelte.dev/e/css_unused_selector',\n\t\t\tstart: {\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 190\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 8,\n\t\t\t\tcharacter: 196\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/class-directive/expected.css",
    "content": "\n  .zero.first.svelte-xyz { color: green }\n  .second.svelte-xyz { color: green }\n  .third.svelte-xyz { color: green }\n  /* (unused) .forth { color: red }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/class-directive/input.svelte",
    "content": "<div class=\"zero\" class:first={true}></div>\n<div class:second={true} class:third={true}></div>\n\n<style>\n  .zero.first { color: green }\n  .second { color: green }\n  .third { color: green }\n  .forth { color: red }\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-can-prune/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"\\nhttps://svelte.dev/e/css_unused_selector',\n\t\t\tstart: {\n\t\t\t\tline: 24,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 548\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 24,\n\t\t\t\tcolumn: 8,\n\t\t\t\tcharacter: 555\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-can-prune/expected.css",
    "content": "\n\t.used1.svelte-xyz { color: green; }\n\t.used2.svelte-xyz { color: green; }\n\t.used3.svelte-xyz { color: green; }\n\t.used4.svelte-xyz { color: green; }\n\t.used5.svelte-xyz { color: green; }\n\t.used6.svelte-xyz { color: green; }\n\t.used7.svelte-xyz { color: green; }\n\t.used8.svelte-xyz { color: green; }\n\t.used9.svelte-xyz { color: green; }\n\n\t/* (unused) .unused { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-can-prune/input.svelte",
    "content": "<script>\n\tlet condition = Math.random() < 0.5;\n</script>\n\n<p class={['used1']}></p>\n<p class={[{ used2: true }]}></p>\n<p class={{ used3: true }}></p>\n<p class={{ 'used4 used5': true }}></p>\n<p class={{ used6 }}></p>\n<p class={[condition ? 'used7' : 'used8']}></p>\n<p class={[condition && 'used9']}></p>\n\n<style>\n\t.used1 { color: green; }\n\t.used2 { color: green; }\n\t.used3 { color: green; }\n\t.used4 { color: green; }\n\t.used5 { color: green; }\n\t.used6 { color: green; }\n\t.used7 { color: green; }\n\t.used8 { color: green; }\n\t.used9 { color: green; }\n\n\t.unused { color: red; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-cannot-prune-1/expected.css",
    "content": "\n\t.x.svelte-xyz { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-cannot-prune-1/input.svelte",
    "content": "<h1 class={[foo]}>hello world</h1>\n\n<style>\n\t.x { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-cannot-prune-2/expected.css",
    "content": "\n\t.x.svelte-xyz { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-cannot-prune-2/input.svelte",
    "content": "<h1 class={{ foo: true, ...rest }}>hello world</h1>\n\n<style>\n\t.x { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-cannot-prune-3/expected.css",
    "content": "\n\t.x.svelte-xyz { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/clsx-cannot-prune-3/input.svelte",
    "content": "<h1 class={{ [foo]: true }}>hello world</h1>\n\n<style>\n\t.x { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/combinator-child/expected.css",
    "content": "\t.test.svelte-xyz > div:where(.svelte-xyz) {\n\t\tcolor: #0af;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/combinator-child/expected.html",
    "content": "<div class=\"test svelte-xyz\"><div class=\"svelte-xyz\">Testing...</div></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/combinator-child/input.svelte",
    "content": "<div class=\"test\">\n\t<div>\n\t\tTesting...\n\t</div>\n</div>\n\n<style>\n\t.test > div {\n\t\tcolor: #0af;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/comment-html/expected.css",
    "content": "\t<!-- /* comment */ -->\n\n\th1.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/comment-html/input.svelte",
    "content": "<h1>hello world</h1>\n\n<style>\n\t<!-- /* comment */ -->\n\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/comment-repeated/expected.css",
    "content": "\t/* comment 1 */\n\t/* comment 2 */\n\n\th1.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/comment-repeated/input.svelte",
    "content": "<h1>hello world</h1>\n\n<style>\n\t/* comment 1 */\n\t/* comment 2 */\n\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/comments-after-last-selector/expected.css",
    "content": "\n\t.foo.svelte-xyz,  /* some comment */\n\t.bar.svelte-xyz /* some other comment */\n\t{\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/comments-after-last-selector/input.svelte",
    "content": "<div class=\"foo\">foo</div>\n<div class=\"bar\">bar</div>\n\n<style>\n\t.foo,  /* some comment */\n\t.bar /* some other comment */\n\t{\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/container-query/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/container-query/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\tcontainer: test-container / inline-size;\n\t}\n\n  /* Most common container query statements. */\n\n\t@container (min-width: 400px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\n\t@container test-container (min-width: 410px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t@container test-container (width < 400px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: blue;\n\t\t}\n\t}\n\n\t@container test-container (0 <= width < 300px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: purple;\n\t\t}\n\t}\n\n\t@container not (width < 400px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: pink;\n\t\t}\n\t}\n\n\t@container (width > 400px) and (height > 400px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: lightgreen;\n\t\t}\n\t}\n\n\t@container (width > 400px) or (height > 400px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: lightblue;\n\t\t}\n\t}\n\n\t@container (width > 400px) and (width > 800px) or (orientation: portrait) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: salmon;\n\t\t}\n\t}\n\n\t@container style(color: blue) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: tan;\n\t\t}\n\t}\n\n\t@container test-container (min-width: calc(400px + 1px)) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t@container test-container (width < clamp(200px, 40%, 400px)) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: blue;\n\t\t}\n\t}\n\n\t@container test-container (calc(400px + 1px) <= width < calc(500px + 1px)) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: purple;\n\t\t}\n\t}\n\n\t@container style(--var: calc(400px + 1px)) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: sandybrown;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/container-query/input.svelte",
    "content": "<div>container query</div>\n\n<style>\n\tdiv {\n\t\tcontainer: test-container / inline-size;\n\t}\n\n  /* Most common container query statements. */\n\n\t@container (min-width: 400px) {\n\t\tdiv {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\n\t@container test-container (min-width: 410px) {\n\t\tdiv {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t@container test-container (width < 400px) {\n\t\tdiv {\n\t\t\tcolor: blue;\n\t\t}\n\t}\n\n\t@container test-container (0 <= width < 300px) {\n\t\tdiv {\n\t\t\tcolor: purple;\n\t\t}\n\t}\n\n\t@container not (width < 400px) {\n\t\tdiv {\n\t\t\tcolor: pink;\n\t\t}\n\t}\n\n\t@container (width > 400px) and (height > 400px) {\n\t\tdiv {\n\t\t\tcolor: lightgreen;\n\t\t}\n\t}\n\n\t@container (width > 400px) or (height > 400px) {\n\t\tdiv {\n\t\t\tcolor: lightblue;\n\t\t}\n\t}\n\n\t@container (width > 400px) and (width > 800px) or (orientation: portrait) {\n\t\tdiv {\n\t\t\tcolor: salmon;\n\t\t}\n\t}\n\n\t@container style(color: blue) {\n\t\tdiv {\n\t\t\tcolor: tan;\n\t\t}\n\t}\n\n\t@container test-container (min-width: calc(400px + 1px)) {\n\t\tdiv {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t@container test-container (width < clamp(200px, 40%, 400px)) {\n\t\tdiv {\n\t\t\tcolor: blue;\n\t\t}\n\t}\n\n\t@container test-container (calc(400px + 1px) <= width < calc(500px + 1px)) {\n\t\tdiv {\n\t\t\tcolor: purple;\n\t\t}\n\t}\n\n\t@container style(--var: calc(400px + 1px)) {\n\t\tdiv {\n\t\t\tcolor: sandybrown;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/css-prune-edge-cases/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".foob\"',\n\t\t\tstart: {\n\t\t\t\tline: 64,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1574\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 64,\n\t\t\t\tcolumn: 6,\n\t\t\t\tcharacter: 1579\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"main > article > div > section > span\"',\n\t\t\tstart: {\n\t\t\t\tline: 84,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 2196\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 84,\n\t\t\t\tcolumn: 38,\n\t\t\t\tcharacter: 2233\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"nav:has(button).primary\"',\n\t\t\tstart: {\n\t\t\t\tline: 95,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 2560\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 95,\n\t\t\t\tcolumn: 24,\n\t\t\t\tcharacter: 2583\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/css-prune-edge-cases/expected.css",
    "content": "\n\t/* === ~= word matching === */\n\n\t/* Should match: \"foo\" is a whole word in class=\"foo bar\" */\n\t.foo.svelte-xyz { color: green; }\n\n\t/* Should match: \"bar\" is a whole word in class=\"foo bar\" */\n\t.bar.svelte-xyz { color: green; }\n\n\t/* Should match: \"foobar\" is the whole class value */\n\t.foobar.svelte-xyz { color: green; }\n\n\t/* Should match: \"bar-foo\" is a whole word (hyphen not whitespace) */\n\t.bar-foo.svelte-xyz { color: green; }\n\n\t/* Should match: \"baz\" is a whole word in class=\"bar-foo baz\" */\n\t.baz.svelte-xyz { color: green; }\n\n\t/* Should NOT match: \"foob\" is not a word in any element's class */\n\t/* (unused) .foob { color: red; }*/\n\n\t/* Should NOT match: \"afoo\" is a word but \"foo-x\" is not \"foo\" */\n\t[class~=\"foo-x\"].svelte-xyz { color: green; }\n\n\t/* Attribute selector with ~= operator directly */\n\t[class~=\"afoo\"].svelte-xyz { color: green; }\n\n\t/* === Deep combinator chains (4+ levels) === */\n\n\t/* Should match: exact chain main > article > section > div > span */\n\tmain.svelte-xyz > article:where(.svelte-xyz) > section:where(.svelte-xyz) > div:where(.svelte-xyz) > span:where(.svelte-xyz) { color: green; }\n\n\t/* Should match: descendant chain */\n\tmain.svelte-xyz article:where(.svelte-xyz) section:where(.svelte-xyz) div:where(.svelte-xyz) span:where(.svelte-xyz) { color: green; }\n\n\t/* Should match: mixed combinators */\n\tmain.svelte-xyz > article:where(.svelte-xyz) section:where(.svelte-xyz) > div:where(.svelte-xyz) span:where(.svelte-xyz) { color: green; }\n\n\t/* Should NOT match: wrong nesting order */\n\t/* (unused) main > article > div > section > span { color: red; }*/\n\n\t/* === :has() combined with other selectors === */\n\n\t/* Should match: nav.primary has <a> descendant */\n\tnav:has(a:where(.svelte-xyz)).primary.svelte-xyz { color: green; }\n\n\t/* Should match: nav.secondary has <button> descendant */\n\tnav:has(button:where(.svelte-xyz)).secondary.svelte-xyz { color: green; }\n\n\t/* Should NOT match: nav.primary doesn't have <button> */\n\t/* (unused) nav:has(button).primary { color: red; }*/\n\n\t/* Multiple :has() on same element */\n\tmain.svelte-xyz:has(article:where(.svelte-xyz)):has(span:where(.svelte-xyz)) { color: green; }\n\n\t/* :has() with child combinator */\n\tmain.svelte-xyz:has(> article:where(.svelte-xyz)) { color: green; }\n\n\t/* === Escaped selectors === */\n\t.a\\-b.svelte-xyz { color: green; }\n\n\t/* === :is()/:where()/:not() with deep selectors === */\n\n\t/* :is() with matching selector */\n\theader.svelte-xyz :is(h1:where(.svelte-xyz)) { color: green; }\n\n\t/* :where() with matching selector */\n\tul.svelte-xyz :where(li:where(.svelte-xyz)) { color: green; }\n\n\t/* :not() — should match span since it's not a div */\n\tspan.svelte-xyz:not(div) { color: green; }\n\n\t/* :is() with deep combinator */\n\tul.svelte-xyz :is(li:where(.svelte-xyz) > span:where(.svelte-xyz)) { color: green; }\n\n\t/* :not() with class — p.a-b is :not(.unused) */\n\tp.svelte-xyz:not(.unused) { color: green; }\n\n\t/* Complex: :has() + :is() */\n\tul.svelte-xyz:has(li:where(.svelte-xyz)) :is(span:where(.svelte-xyz)) { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/css-prune-edge-cases/input.svelte",
    "content": "<!-- Edge cases for CSS pruning optimizations:\n  1. ~= word matching (indexOf vs split)\n  2. Deep combinator chains (index-based apply_selector)\n  3. :has() combined with other selectors (single-pass handling)\n  4. Escaped selectors (backslash skip optimization)\n  5. :is()/:where()/:not() with deep selectors\n-->\n\n<!-- ~= word matching edge cases -->\n<div class=\"foo bar\">word match</div>\n<div class=\"foobar\">substring only</div>\n<div class=\"bar-foo baz\">hyphen separated</div>\n<div class=\"afoo foo-x\">prefix substring</div>\n\n<!-- Deep combinator chains -->\n<main>\n\t<article>\n\t\t<section>\n\t\t\t<div>\n\t\t\t\t<span class=\"deep\">deep</span>\n\t\t\t</div>\n\t\t</section>\n\t</article>\n</main>\n\n<!-- :has() with class selectors -->\n<nav class=\"primary\">\n\t<a href=\"/\">link</a>\n</nav>\n<nav class=\"secondary\">\n\t<button>action</button>\n</nav>\n\n<!-- Escaped selectors -->\n<p class=\"a-b\">escaped</p>\n\n<!-- :is()/:where()/:not() with combinators -->\n<header>\n\t<h1>title</h1>\n</header>\n<ul>\n\t<li class=\"active\"><span>item</span></li>\n</ul>\n\n<style>\n\t/* === ~= word matching === */\n\n\t/* Should match: \"foo\" is a whole word in class=\"foo bar\" */\n\t.foo { color: green; }\n\n\t/* Should match: \"bar\" is a whole word in class=\"foo bar\" */\n\t.bar { color: green; }\n\n\t/* Should match: \"foobar\" is the whole class value */\n\t.foobar { color: green; }\n\n\t/* Should match: \"bar-foo\" is a whole word (hyphen not whitespace) */\n\t.bar-foo { color: green; }\n\n\t/* Should match: \"baz\" is a whole word in class=\"bar-foo baz\" */\n\t.baz { color: green; }\n\n\t/* Should NOT match: \"foob\" is not a word in any element's class */\n\t.foob { color: red; }\n\n\t/* Should NOT match: \"afoo\" is a word but \"foo-x\" is not \"foo\" */\n\t[class~=\"foo-x\"] { color: green; }\n\n\t/* Attribute selector with ~= operator directly */\n\t[class~=\"afoo\"] { color: green; }\n\n\t/* === Deep combinator chains (4+ levels) === */\n\n\t/* Should match: exact chain main > article > section > div > span */\n\tmain > article > section > div > span { color: green; }\n\n\t/* Should match: descendant chain */\n\tmain article section div span { color: green; }\n\n\t/* Should match: mixed combinators */\n\tmain > article section > div span { color: green; }\n\n\t/* Should NOT match: wrong nesting order */\n\tmain > article > div > section > span { color: red; }\n\n\t/* === :has() combined with other selectors === */\n\n\t/* Should match: nav.primary has <a> descendant */\n\tnav:has(a).primary { color: green; }\n\n\t/* Should match: nav.secondary has <button> descendant */\n\tnav:has(button).secondary { color: green; }\n\n\t/* Should NOT match: nav.primary doesn't have <button> */\n\tnav:has(button).primary { color: red; }\n\n\t/* Multiple :has() on same element */\n\tmain:has(article):has(span) { color: green; }\n\n\t/* :has() with child combinator */\n\tmain:has(> article) { color: green; }\n\n\t/* === Escaped selectors === */\n\t.a\\-b { color: green; }\n\n\t/* === :is()/:where()/:not() with deep selectors === */\n\n\t/* :is() with matching selector */\n\theader :is(h1) { color: green; }\n\n\t/* :where() with matching selector */\n\tul :where(li) { color: green; }\n\n\t/* :not() — should match span since it's not a div */\n\tspan:not(div) { color: green; }\n\n\t/* :is() with deep combinator */\n\tul :is(li > span) { color: green; }\n\n\t/* :not() with class — p.a-b is :not(.unused) */\n\tp:not(.unused) { color: green; }\n\n\t/* Complex: :has() + :is() */\n\tul:has(li) :is(span) { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/css-vars/expected.css",
    "content": "\t:root {\n\t\t--root-test: 20;\n\t}\n\tdiv.svelte-xyz {\n\t\t--test: 10;\n\t}\n\n\tdiv.svelte-xyz {\n\t\t--foo: ;\n\t\t--bar: !important;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/css-vars/input.svelte",
    "content": "<div></div>\n\n<style>\n\t:root {\n\t\t--root-test: 20;\n\t}\n\tdiv {\n\t\t--test: 10;\n\t}\n\n\tdiv {\n\t\t--foo: ;\n\t\t--bar: !important;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/custom-css-hash/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tfilename: 'src/components/FooSwitcher.svelte',\n\t\tcssHash({ hash, css, name, filename }) {\n\t\t\tconst minFilename = (filename ?? '')\n\t\t\t\t.split('/')\n\t\t\t\t.map((i) => i.charAt(0).toLowerCase())\n\t\t\t\t.join('');\n\t\t\treturn `sv-${name}-${minFilename}-${hash(css)}`;\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/custom-css-hash/expected.css",
    "content": "\tdiv.sv-FooSwitcher-scf-bzh57p {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/custom-css-hash/input.svelte",
    "content": "<div>red</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/descendant-selector-non-top-level-outer/expected.css",
    "content": "\tp.svelte-xyz span:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/descendant-selector-non-top-level-outer/expected.html",
    "content": "<div><p class=\"svelte-xyz\"><span class=\"svelte-xyz\">styled</span></p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/descendant-selector-non-top-level-outer/input.svelte",
    "content": "<div>\n\t<p>\n\t\t<span>styled</span>\n\t</p>\n</div>\n\n<style>\n\tp span {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/descendant-selector-unmatched/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 33,\n\t\t\t\tcolumn: 6,\n\t\t\t\tline: 6\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"x y z\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 28,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 6\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/descendant-selector-unmatched/expected.css",
    "content": "\n\t/* (unused) x y z {\n\t\tcolor: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/descendant-selector-unmatched/input.svelte",
    "content": "<x>\n\t<z></z>\n</x>\n\n<style>\n\tx y z {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/directive-special-character/expected.css",
    "content": "\t.foo\\:bar.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/directive-special-character/expected.html",
    "content": "<div class=\"svelte-xyz foo:bar\">Hello world</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/directive-special-character/input.svelte",
    "content": "<script>\n\tconst enabled = true;\n</script>\n\n<div class:foo:bar={enabled}>Hello world</div>\n\n<style>\n\t.foo\\:bar {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/double-hyphen/expected.css",
    "content": "\n\t.--foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/double-hyphen/input.svelte",
    "content": "<div class=\"--foo\"></div>\n\n<style>\n\t.--foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 81,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 7\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 88,\n\t\t\t\tcolumn: 8,\n\t\t\t\tline: 7\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element/expected.css",
    "content": "\t.used.svelte-xyz {\n\t\tcolor: red;\n\t}\n\t/* (unused) .unused {\n\t\tfont-style: italic;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element/expected.html",
    "content": "<div class=\"used svelte-xyz\"></div><!---->\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element/input.svelte",
    "content": "<svelte:element this={\"div\"} class=\"used\" />\n\n<style>\n\t.used {\n\t\tcolor: red;\n\t}\n\t.unused {\n\t\tfont-style: italic;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element-tag/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\tcolor: red;\n\t}\n\th2.svelte-xyz > p:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n\th2.svelte-xyz span:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n\th2.svelte-xyz > span:where(.svelte-xyz) > b:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n\th2.svelte-xyz span:where(.svelte-xyz) b:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n\th2.svelte-xyz b:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element-tag/expected.html",
    "content": "<div class=\"svelte-xyz\"></div>\n<h2 class=\"svelte-xyz\">\n\t<div class=\"svelte-xyz\"><b class=\"svelte-xyz\">text</b></div>\n</h2>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/dynamic-element-tag/input.svelte",
    "content": "<script>\n\texport let element = 'div';\n</script>\n\n<svelte:element this={element} />\n\n<h2>\n\t<svelte:element this={element}>\n\t\t<b>text</b>\n\t</svelte:element>\n</h2>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n\th2 > p {\n\t\tcolor: red;\n\t}\n\th2 span {\n\t\tcolor: red;\n\t}\n\th2 > span > b {\n\t\tcolor: red;\n\t}\n\th2 span b {\n\t\tcolor: red;\n\t}\n\th2 b {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".x\"',\n\t\t\tstart: {\n\t\t\t\tline: 4,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 31\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 4,\n\t\t\t\tcolumn: 3,\n\t\t\t\tcharacter: 33\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-class/expected.css",
    "content": "\t/* (unused) .x {\n\t\tcolor: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-class/input.svelte",
    "content": "<div class=\"\"></div>\n\n<style>\n\t.x {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-rule/expected.css",
    "content": "\t/* (empty) .foo {\n\t\t/* empty *\\/\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-rule/input.svelte",
    "content": "<div class='foo'></div>\n\n<style>\n\t.foo {\n\t\t/* empty */\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-rule-dev/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-rule-dev/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\t/* empty */\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/empty-rule-dev/input.svelte",
    "content": "<div class='foo'></div>\n\n<style>\n\t.foo {\n\t\t/* empty */\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"article ~ div\"',\n\t\t\tstart: { character: 275, column: 1, line: 12 },\n\t\t\tend: { character: 288, column: 14, line: 12 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span ~ article\"',\n\t\t\tstart: { character: 308, column: 1, line: 13 },\n\t\t\tend: { character: 322, column: 15, line: 13 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"b ~ article\"',\n\t\t\tstart: { character: 342, column: 1, line: 14 },\n\t\t\tend: { character: 353, column: 12, line: 14 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span ~ div\"',\n\t\t\tstart: { character: 373, column: 1, line: 15 },\n\t\t\tend: { character: 383, column: 11, line: 15 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator/expected.css",
    "content": "\tdiv.svelte-xyz ~ article:where(.svelte-xyz) { color: green; }\n\tspan.svelte-xyz ~ b:where(.svelte-xyz) { color: green; }\n\tdiv.svelte-xyz span:where(.svelte-xyz) ~ b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ article:where(.svelte-xyz) { color: green; }\n\tdiv.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\tarticle.svelte-xyz ~ details:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ details:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) article ~ div { color: green; }*/\n\t/* (unused) span ~ article { color: green; }*/\n\t/* (unused) b ~ article { color: green; }*/\n\t/* (unused) span ~ div { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator/expected.html",
    "content": "<div class=\"a svelte-xyz\">\n  <span class=\"svelte-xyz\"></span>\n  <b class=\"svelte-xyz\"></b>\n</div>\n<article class=\"b svelte-xyz\"></article>\n<p class=\"c svelte-xyz\"></p>\n<details class=\"d svelte-xyz\"></details>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator/input.svelte",
    "content": "<style>\n\tdiv ~ article { color: green; }\n\tspan ~ b { color: green; }\n\tdiv span ~ b { color: green; }\n\t.a ~ article { color: green; }\n\tdiv ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\tarticle ~ details { color: green; }\n\t.a ~ details { color: green; }\n\n\t/* no match */\n\tarticle ~ div { color: green; }\n\tspan ~ article { color: green; }\n\tb ~ article { color: green; }\n\tspan ~ div { color: green; }\n</style>\n\n<div class=\"a\">\n\t<span></span>\n\t<b></b>\n</div>\n<article class=\"b\"></article>\n<p class=\"c\"></p>\n<details class=\"d\"></details>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .c\"',\n\t\t\tstart: { character: 269, column: 1, line: 15 },\n\t\t\tend: { character: 276, column: 8, line: 15 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c ~ .d\"',\n\t\t\tstart: { character: 296, column: 1, line: 16 },\n\t\t\tend: { character: 303, column: 8, line: 16 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .d\"',\n\t\t\tstart: { character: 323, column: 1, line: 17 },\n\t\t\tend: { character: 330, column: 8, line: 17 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await/expected.css",
    "content": "\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b ~ .c { color: green; }*/\n\t/* (unused) .c ~ .d { color: green; }*/\n\t/* (unused) .b ~ .d { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b svelte-xyz\"></div>\n<div class=\"e svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await/input.svelte",
    "content": "<script>\n\tlet promise = Promise.resolve();\n</script>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.a ~ .d { color: green; }\n\t.b ~ .e { color: green; }\n\t.c ~ .e { color: green; }\n\t.d ~ .e { color: green; }\n\t.a ~ .e { color: green; }\n\n\t/* no match */\n\t.b ~ .c { color: green; }\n\t.c ~ .d { color: green; }\n\t.b ~ .d { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#await promise}\n\t<div class=\"b\"></div>\n{:then value}\n\t<div class=\"c\"></div>\n{:catch error}\n\t<div class=\"d\"></div>\n{/await}\n\n<div class=\"e\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await-not-exhaustive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await-not-exhaustive/expected.css",
    "content": "\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\n\t.b.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .e:where(.svelte-xyz) ~ .f:where(.svelte-xyz) ~ .h:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .d:where(.svelte-xyz) ~ .h:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await-not-exhaustive/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>\n<div class=\"f svelte-xyz\"></div>\n<div class=\"h svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-await-not-exhaustive/input.svelte",
    "content": "<script>\n\tlet promise = Promise.resolve();\n</script>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.a ~ .d { color: green; }\n\t.a ~ .e { color: green; }\n\t.a ~ .f { color: green; }\n\t.a ~ .g { color: green; }\n\t.a ~ .h { color: green; }\n\n\t.b ~ .d { color: green; }\n\t.c ~ .d { color: green; }\n\t.b ~ .e ~ .f ~ .h { color: green; }\n\t.b ~ .d ~ .h { color: green; }\n\t.c ~ .g { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#await promise then value}\n\t<div class=\"b\"></div>\n{:catch error}\n\t<div class=\"c\"></div>\n{/await}\n\n{#await promise}\n\t<div class=\"d\"></div>\n{:catch error}\n\t<div class=\"e\"></div>\n{/await}\n\n{#await promise}\n\t<div class=\"f\"></div>\n{:then error}\n\t<div class=\"g\"></div>\n{/await}\n\n<div class=\"h\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each/expected.css",
    "content": "\tdiv.svelte-xyz ~ span:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each/expected.html",
    "content": "<div class=\"svelte-xyz\"></div> <!----><span class=\"each svelte-xyz\"></span> <div class=\"each svelte-xyz\"></div> <span class=\"each svelte-xyz\"></span> <div class=\"each svelte-xyz\"></div> <span class=\"svelte-xyz\"></span>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each/input.svelte",
    "content": "<script>\n\tlet array = [1];\n</script>\n\n<style>\n\tdiv ~ span {\n\t\tcolor: green;\n\t}\n</style>\n\n<div></div>\n\n{#each array as item}\n\t<span class=\"each\"></span>\n\t<div class=\"each\"></div>\n\t<span class=\"each\"></span>\n\t<div class=\"each\"></div>\n{/each}\n\n<span></span>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-2/expected.css",
    "content": "\t/* boundary of each */\n\t.a.svelte-xyz ~ .b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t.c.svelte-xyz ~ .d:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* if array is empty */\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* if array has multiple items */\n\t.c.svelte-xyz ~ .b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* normal sibling */\n\t.b.svelte-xyz ~ .c:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-2/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div> <!----><div class=\"b svelte-xyz\"></div> <div class=\"c svelte-xyz\"></div> <div class=\"d svelte-xyz\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-2/input.svelte",
    "content": "<script>\n\tlet array = [1];\n</script>\n\n<style>\n\t/* boundary of each */\n\t.a ~ .b {\n\t\tcolor: green;\n\t}\n\t.c ~ .d {\n\t\tcolor: green;\n\t}\n\t/* if array is empty */\n\t.a ~ .d {\n\t\tcolor: green;\n\t}\n\t/* if array has multiple items */\n\t.c ~ .b {\n\t\tcolor: green;\n\t}\n\t/* normal sibling */\n\t.b ~ .c {\n\t\tcolor: green;\n\t}\n\t.a ~ .c {\n\t\tcolor: green;\n\t}\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as item}\n\t<div class=\"b\"></div>\n\t<div class=\"c\"></div>\n{/each}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .c\"',\n\t\t\tstart: { character: 198, column: 1, line: 13 },\n\t\t\tend: { character: 205, column: 8, line: 13 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else/expected.css",
    "content": "\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b ~ .c { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"c svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else/input.svelte",
    "content": "<script>\n\tlet array = [];\n</script>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.b ~ .d { color: green; }\n\t.c ~ .d { color: green; }\n\t.a ~ .d { color: green; }\n\n\t/* no match */\n\t.b ~ .c { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as item}\n\t<div class=\"b\"></div>\n{:else}\n\t<div class=\"c\"></div>\n{/each}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".e ~ .f\"',\n\t\t\tstart: { character: 812, column: 1, line: 35 },\n\t\t\tend: { character: 819, column: 8, line: 35 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else-nested/expected.css",
    "content": "\t.a.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz ~ .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .h:where(.svelte-xyz) ~ .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .i:where(.svelte-xyz) ~ .j:where(.svelte-xyz) { color: green; }\n\t.m.svelte-xyz ~ .m:where(.svelte-xyz) { color: green; }\n\t.m.svelte-xyz ~ .l:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz ~ .m:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .k:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz ~ .i:where(.svelte-xyz) { color: green; }\n\t.j.svelte-xyz ~ .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .h:where(.svelte-xyz) ~ .i:where(.svelte-xyz) ~ .j:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .e ~ .f { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else-nested/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"f svelte-xyz\"></div>\n<div class=\"k svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-else-nested/input.svelte",
    "content": "<script>\n\tlet array = [];\n</script>\n\n<style>\n\t.a ~ .e { color: green; }\n\t.a ~ .f { color: green; }\n\t.b ~ .c { color: green; }\n\t.b ~ .d { color: green; }\n\t.c ~ .e { color: green; }\n\t.c ~ .f { color: green; }\n\t.d ~ .e { color: green; }\n\t.d ~ .f { color: green; }\n\t.e ~ .e { color: green; }\n\t.i ~ .j { color: green; }\n\t.g ~ .h ~ .j { color: green; }\n\t.g ~ .i ~ .j { color: green; }\n\t.m ~ .m { color: green; }\n\t.m ~ .l { color: green; }\n\t.l ~ .m { color: green; }\n\t.a ~ .c { color: green; }\n\t.a ~ .g { color: green; }\n\t.b ~ .e { color: green; }\n\t.c ~ .g { color: green; }\n\t.c ~ .k { color: green; }\n\t.d ~ .d { color: green; }\n\t.g ~ .g { color: green; }\n\t.h ~ .h { color: green; }\n\t.i ~ .i { color: green; }\n\t.j ~ .j { color: green; }\n\t.g ~ .j { color: green; }\n\t.g ~ .h ~ .i ~ .j { color: green; }\n\n\t/* no match */\n\t.e ~ .f { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as a}\n\t<div class=\"b\"></div>\n\t{#each array as b}\n\t\t<div class=\"c\"></div>\n\t{:else}\n\t\t<div class=\"d\"></div>\n\t{/each}\n{/each}\n\n{#each array as c}\n\t{#each array as d}\n\t\t<div class=\"e\"></div>\n\t{/each}\n{:else}\n\t<div class=\"f\"></div>\n{/each}\n\n{#each array as x}\n\t<div class=\"g\"></div>\n\t{#each array as y}\n\t\t{#each array as z}\n\t\t\t<div class=\"h\"></div>\n\t\t{/each}\n\t{:else}\n\t\t<div class=\"i\"></div>\n\t{/each}\n\t<div class=\"j\"></div>\n{/each}\n\n<div class=\"k\"></div>\n\n{#each array as item}\n\t{#each array as item}\n\t\t<div class=\"l\"></div>\n\t{:else}\n\t\t<div class=\"m\"></div>\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-nested/expected.css",
    "content": "\t/* boundary of each */\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\n\t/* nested boundary of each */\n\t.j.svelte-xyz ~ .m:where(.svelte-xyz) { color: green; }\n\t.j.svelte-xyz ~ .n:where(.svelte-xyz) { color: green; }\n\t.j.svelte-xyz ~ .o:where(.svelte-xyz) { color: green; }\n\t.k.svelte-xyz ~ .m:where(.svelte-xyz) { color: green; }\n\t.k.svelte-xyz ~ .n:where(.svelte-xyz) { color: green; }\n\t.k.svelte-xyz ~ .o:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz ~ .m:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz ~ .n:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz ~ .o:where(.svelte-xyz) { color: green; }\n\n\t/* parent each */\n\t.d.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\n\t/* child each */\n\t.g.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\n\t/* wrap around */\n\t.f.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\n\t.h.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\n\t/* wrap around self */\n\t.d.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz ~ .i:where(.svelte-xyz) { color: green; }\n\n\t/* wrap around self ~ next */\n\t.e.svelte-xyz ~ .e:where(.svelte-xyz) ~ .f:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz ~ .e:where(.svelte-xyz) ~ .d:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz ~ .h:where(.svelte-xyz) ~ .i:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz ~ .h:where(.svelte-xyz) ~ .g:where(.svelte-xyz) { color: green; }\n\n\t/* general siblings */\n\t.a.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .i:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .h:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .i:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .f:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz ~ .i:where(.svelte-xyz) { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-nested/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b\"></div>\n<div class=\"c svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>\n<div class=\"e svelte-xyz\"></div>\n<div class=\"f svelte-xyz\"></div>\n<div class=\"g svelte-xyz\"></div>\n<div class=\"h svelte-xyz\"></div>\n<div class=\"i svelte-xyz\"></div>\n<div class=\"j svelte-xyz\"></div>\n<div class=\"k svelte-xyz\"></div>\n<div class=\"l svelte-xyz\"></div>\n<div class=\"m svelte-xyz\"></div>\n<div class=\"n svelte-xyz\"></div>\n<div class=\"o svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-each-nested/input.svelte",
    "content": "<script>\n\tlet array = [1];\n</script>\n\n<style>\n\t/* boundary of each */\n\t.a ~ .d { color: green; }\n\t.a ~ .e { color: green; }\n\t.a ~ .f { color: green; }\n\t.a ~ .g { color: green; }\n\t.c ~ .d { color: green; }\n\t.c ~ .e { color: green; }\n\t.c ~ .f { color: green; }\n\t.c ~ .g { color: green; }\n\n\t/* nested boundary of each */\n\t.j ~ .m { color: green; }\n\t.j ~ .n { color: green; }\n\t.j ~ .o { color: green; }\n\t.k ~ .m { color: green; }\n\t.k ~ .n { color: green; }\n\t.k ~ .o { color: green; }\n\t.l ~ .m { color: green; }\n\t.l ~ .n { color: green; }\n\t.l ~ .o { color: green; }\n\n\t/* parent each */\n\t.d ~ .e { color: green; }\n\t.e ~ .f { color: green; }\n\n\t/* child each */\n\t.g ~ .h { color: green; }\n\n\t/* wrap around */\n\t.f ~ .d { color: green; }\n\t.f ~ .e { color: green; }\n\t.f ~ .f { color: green; }\n\n\t.h ~ .g { color: green; }\n\t.i ~ .h { color: green; }\n\t.i ~ .g { color: green; }\n\n\t/* wrap around self */\n\t.d ~ .d { color: green; }\n\t.e ~ .e { color: green; }\n\t.f ~ .f { color: green; }\n\t.g ~ .g { color: green; }\n\t.h ~ .h { color: green; }\n\t.i ~ .i { color: green; }\n\n\t/* wrap around self ~ next */\n\t.e ~ .e ~ .f { color: green; }\n\t.e ~ .e ~ .d { color: green; }\n\t.h ~ .h ~ .i { color: green; }\n\t.h ~ .h ~ .g { color: green; }\n\n\t/* general siblings */\n\t.a ~ .h { color: green; }\n\t.a ~ .i { color: green; }\n\t.c ~ .h { color: green; }\n\t.c ~ .i { color: green; }\n\t.d ~ .f { color: green; }\n\t.d ~ .g { color: green; }\n\t.e ~ .g { color: green; }\n\t.g ~ .i { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as item}\n\t<div class=\"b\"></div>\n\t<div class=\"c\"></div>\n{/each}\n\n{#each array as item}\n\t{#each array as item}\n\t\t{#each array as item}\n\t\t\t<div class=\"d\"></div>\n\t\t{/each}\n\t\t<div class=\"e\"></div>\n\t{/each}\n\t<div class=\"f\"></div>\n{/each}\n\n{#each array as item}\n\t<div class=\"g\"></div>\n\t{#each array as item}\n\t\t<div class=\"h\"></div>\n\t\t{#each array as item}\n\t\t\t<div class=\"i\"></div>\n\t\t{/each}\n\t{/each}\n{/each}\n\n{#each array as item}\n\t<div class=\"j\"></div>\n\t{#each array as item}\n\t\t<div class=\"k\"></div>\n\t\t{#each array as item}\n\t\t\t<div class=\"l\"></div>\n\t\t{/each}\n\t{/each}\n{/each}\n\n{#each array as item}\n\t{#each array as item}\n\t\t{#each array as item}\n\t\t\t<div class=\"m\"></div>\n\t\t{/each}\n\t\t<div class=\"n\"></div>\n\t{/each}\n\t<div class=\"o\"></div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-former-element-in-slot/expected.css",
    "content": "  h1.svelte-xyz ~ p:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-former-element-in-slot/input.svelte",
    "content": "<slot>\n  <h1>Heading 1</h1>\n</slot>\n<span>Span 1</span>\n<span>Span 2</span>\n<p>Paragraph 2</p>\n\n<style>\n  h1 ~ p {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .c\"',\n\t\t\tstart: { character: 269, column: 1, line: 16 },\n\t\t\tend: { character: 276, column: 8, line: 16 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .d\"',\n\t\t\tstart: { character: 296, column: 1, line: 17 },\n\t\t\tend: { character: 303, column: 8, line: 17 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c ~ .d\"',\n\t\t\tstart: { character: 323, column: 1, line: 18 },\n\t\t\tend: { character: 330, column: 8, line: 18 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if/expected.css",
    "content": "\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b ~ .c { color: green; }*/\n\t/* (unused) .b ~ .d { color: green; }*/\n\t/* (unused) .c ~ .d { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b svelte-xyz\"></div>\n<div class=\"e svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if/input.svelte",
    "content": "<script>\n\tlet foo = true;\n\tlet bar = true;\n</script>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.a ~ .d { color: green; }\n\t.b ~ .e { color: green; }\n\t.c ~ .e { color: green; }\n\t.d ~ .e { color: green; }\n\t.a ~ .e { color: green; }\n\n\t/* no match */\n\t.b ~ .c { color: green; }\n\t.b ~ .d { color: green; }\n\t.c ~ .d { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#if foo}\n\t<div class=\"b\"></div>\n{:else if bar}\n\t<div class=\"c\"></div>\n{:else}\n\t<div class=\"d\"></div>\n{/if}\n\n<div class=\"e\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .c\"',\n\t\t\tstart: { character: 215, column: 1, line: 14 },\n\t\t\tend: { character: 222, column: 8, line: 14 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive/expected.css",
    "content": "\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b ~ .c { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive/input.svelte",
    "content": "<script>\n\tlet foo = true;\n\tlet bar = true;\n</script>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.a ~ .d { color: green; }\n\t.b ~ .d { color: green; }\n\t.c ~ .d { color: green; }\n\n\t/* no match */\n\t.b ~ .c { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#if foo}\n\t<div class=\"b\"></div>\n{:else if bar}\n\t<div class=\"c\"></div>\n{/if}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive-with-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .c\"',\n\t\t\tstart: { character: 319, column: 1, line: 18 },\n\t\t\tend: { character: 326, column: 8, line: 18 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive-with-each/expected.css",
    "content": "\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .d:where(.svelte-xyz) { color: green; }\n\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) ~ .c:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz ~ .c:where(.svelte-xyz) ~ .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) ~ .c:where(.svelte-xyz) ~ .d:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b ~ .c { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive-with-each/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"c svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-if-not-exhaustive-with-each/input.svelte",
    "content": "<script>\n\tlet foo = false;\n\tlet array = [1];\n</script>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.a ~ .d { color: green; }\n\t.b ~ .d { color: green; }\n\t.c ~ .d { color: green; }\n\n\t.a ~ .c ~ .c { color: green; }\n\t.c ~ .c ~ .d { color: green; }\n\t.a ~ .c ~ .c ~ .d { color: green; }\n\n\t/* no match */\n\t.b ~ .c { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#if foo}\n\t<div class=\"b\"></div>\n{:else}\n\t{#each array as item}\n\t\t<div class=\"c\"></div>\n\t{/each}\n{/if}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-key/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-key/expected.css",
    "content": "\n\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .c:where(.svelte-xyz) { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-key/input.svelte",
    "content": "<div class=\"a\"></div>\n\n{#key x}\n\t<div class=\"b\"></div>\n{/key}\n\n<div class=\"c\"></div>\n\n<style>\n\t.a ~ .b { color: green; }\n\t.a ~ .c { color: green; }\n\t.b ~ .c { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-nested-slots/expected.css",
    "content": "  h1.svelte-xyz ~ p:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-nested-slots/input.svelte",
    "content": "<slot>\n\t<slot>\n\t\t<h1>Heading 1</h1>\n\t</slot>\n</slot>\n<span>Span 1</span>\n<span>Span 2</span>\n<slot>\n\t<slot>\n\t\t<p>Paragraph 2</p>\n\t</slot>\n</slot>\n\n<style>\n  h1 ~ p {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-nested-slots-flattened/expected.css",
    "content": "  h1.svelte-xyz ~ p:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-nested-slots-flattened/input.svelte",
    "content": "<slot><slot><h1>Heading 1</h1></slot></slot><span>Span 1</span><span>Span 2</span><slot><slot><p>Paragraph 2</p></slot></slot>\n\n<style>\n  h1 ~ p {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-render-tag/expected.css",
    "content": "\n\th1.svelte-xyz ~ p:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-render-tag/input.svelte",
    "content": "{#snippet foo()}\n\t<p>this should be green</p>\n{/snippet}\n\n<h1>Hello</h1>\n\n{@render foo()}\n\n<style>\n\th1 ~ p {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-rendertag-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 479,\n\t\t\t\tcolumn: 19,\n\t\t\t\tline: 22\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \":global(.x) + .bar\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 461,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 22\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-rendertag-global/expected.css",
    "content": "\n\t.before.svelte-xyz + .foo:where(.svelte-xyz) { color: green; }\n\t.before.svelte-xyz ~ .foo:where(.svelte-xyz) { color: green; }\n\t.before.svelte-xyz ~ .bar:where(.svelte-xyz) { color: green; }\n\n\t.x + .foo.svelte-xyz { color: green; }\n\t.x + .foo.svelte-xyz span:where(.svelte-xyz) { color: green; }\n\t.x ~ .foo.svelte-xyz { color: green; }\n\t.x ~ .foo.svelte-xyz span:where(.svelte-xyz) { color: green; }\n\t.x ~ .bar.svelte-xyz { color: green; }\n\n\t/* no match */\n\t/* (unused) :global(.x) + .bar { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-rendertag-global/input.svelte",
    "content": "<div>\n\t<p class=\"before\">before</p>\n\t{@render children()}\n\t<p class=\"foo\">\n\t\t<span>foo</span>\n\t</p>\n\t<p class=\"bar\">bar</p>\n</div>\n\n<style>\n\t.before + .foo { color: green; }\n\t.before ~ .foo { color: green; }\n\t.before ~ .bar { color: green; }\n\n\t:global(.x) + .foo { color: green; }\n\t:global(.x) + .foo span { color: green; }\n\t:global(.x) ~ .foo { color: green; }\n\t:global(.x) ~ .foo span { color: green; }\n\t:global(.x) ~ .bar { color: green; }\n\n\t/* no match */\n\t:global(.x) + .bar { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-selects-slot-fallback/expected.css",
    "content": "  h1.svelte-xyz ~ p:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-selects-slot-fallback/input.svelte",
    "content": "<h1>Heading 1</h1>\n<span>Span 1</span>\n<span>Span 2</span>\n<slot>\n  <p>Paragraph 2</p>\n</slot>\n\n<style>\n  h1 ~ p {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .c\"',\n\t\t\tstart: { character: 191, column: 1, line: 13 },\n\t\t\tend: { character: 198, column: 8, line: 13 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c ~ .f\"',\n\t\t\tstart: { character: 216, column: 1, line: 14 },\n\t\t\tend: { character: 223, column: 8, line: 14 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b ~ .f\"',\n\t\t\tstart: { character: 241, column: 1, line: 15 },\n\t\t\tend: { character: 248, column: 8, line: 15 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slot/expected.css",
    "content": "\n\t.d.svelte-xyz ~ .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz ~ .b:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz ~ .g:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b ~ .c { color: red; }*/\n\t/* (unused) .c ~ .f { color: red; }*/\n\t/* (unused) .b ~ .f { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slot/input.svelte",
    "content": "<script>\n\tlet App;\n</script>\n\n<style>\n\t.d ~ .e { color: green; }\n\t.a ~ .g { color: green; }\n\t.a ~ .b { color: green; }\n\t.f ~ .g { color: green; }\n\t.b ~ .g { color: green; }\n\n\t/* no match */\n\t.b ~ .c { color: red; }\n\t.c ~ .f { color: red; }\n\t.b ~ .f { color: red; }\n</style>\n\n<div class=\"a\"></div>\n<App>\n\t<div class=\"b\" slot=\"a\"></div>\n\n\t<div class=\"c\" slot=\"b\">\n\t\t<div class=\"d\"></div>\n\t\t<div class=\"e\"></div>\n\t</div>\n\n\t<div class=\"f\" slot=\"c\"></div>\n</App>\n\n<div class=\"g\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slot-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 472,\n\t\t\t\tcolumn: 19,\n\t\t\t\tline: 22\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \":global(.x) + .bar\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 454,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 22\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slot-global/expected.css",
    "content": "\n\t.before.svelte-xyz + .foo:where(.svelte-xyz) { color: green; }\n\t.before.svelte-xyz ~ .foo:where(.svelte-xyz) { color: green; }\n\t.before.svelte-xyz ~ .bar:where(.svelte-xyz) { color: green; }\n\n\t.x + .foo.svelte-xyz { color: green; }\n\t.x + .foo.svelte-xyz span:where(.svelte-xyz) { color: green; }\n\t.x ~ .foo.svelte-xyz { color: green; }\n\t.x ~ .foo.svelte-xyz span:where(.svelte-xyz) { color: green; }\n\t.x ~ .bar.svelte-xyz { color: green; }\n\n\t/* no match */\n\t/* (unused) :global(.x) + .bar { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slot-global/input.svelte",
    "content": "<div>\n\t<p class=\"before\">before</p>\n\t<slot></slot>\n\t<p class=\"foo\">\n\t\t<span>foo</span>\n\t</p>\n\t<p class=\"bar\">bar</p>\n</div>\n\n<style>\n\t.before + .foo { color: green; }\n\t.before ~ .foo { color: green; }\n\t.before ~ .bar { color: green; }\n\n\t:global(.x) + .foo { color: green; }\n\t:global(.x) + .foo span { color: green; }\n\t:global(.x) ~ .foo { color: green; }\n\t:global(.x) ~ .foo span { color: green; }\n\t:global(.x) ~ .bar { color: green; }\n\n\t/* no match */\n\t:global(.x) + .bar { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slots-between/expected.css",
    "content": "\th1.svelte-xyz ~ span:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\n  h1.svelte-xyz ~ p:where(.svelte-xyz) {\n    color: red;\n  }\n\n\tspan.svelte-xyz ~ p:where(.svelte-xyz) {\n\t\tcolor: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-slots-between/input.svelte",
    "content": "<h1>Heading 1</h1>\n<slot>\n  <span>Span 1</span>\n</slot>\n<slot>\n  <span>Span 2</span>\n</slot>\n<p>Paragraph 2</p>\n\n<style>\n\th1 ~ span {\n\t\tcolor: green;\n\t}\n\n  h1 ~ p {\n    color: red;\n  }\n\n\tspan ~ p {\n\t\tcolor: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-star/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".not-match > * ~ *\"',\n\t\t\tstart: { character: 50, column: 1, line: 5 },\n\t\t\tend: { character: 68, column: 19, line: 5 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-star/expected.css",
    "content": "\t.match.svelte-xyz > :where(.svelte-xyz) ~ :where(.svelte-xyz) {\n\t\tmargin-left: 4px;\n\t}\n\t/* (unused) .not-match > * ~ * {\n\t\tmargin-left: 4px;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-star/expected.html",
    "content": "<div class=\"not-match\">\n  <div></div>\n</div>\n<div class=\"match svelte-xyz\">\n  <div class=\"svelte-xyz\"></div>\n  <div class=\"svelte-xyz\"></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-star/input.svelte",
    "content": "<style>\n\t.match > * ~ * {\n\t\tmargin-left: 4px;\n\t}\n\t.not-match > * ~ * {\n\t\tmargin-left: 4px;\n\t}\n</style>\n\n<div class=\"not-match\">\n\t<div></div>\n</div>\n\n<div class=\"match\">\n\t<div></div>\n\t<div></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 627,\n\t\t\t\tcolumn: 10,\n\t\t\t\tline: 32\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \".x + .bar\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 618,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 32\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/expected.css",
    "content": "\n\t.before.svelte-xyz + .foo:where(.svelte-xyz) { color: green; }\n\t.before.svelte-xyz ~ .foo:where(.svelte-xyz) { color: green; }\n\t.before.svelte-xyz ~ .bar:where(.svelte-xyz) { color: green; }\n\n\t.x.svelte-xyz + .foo:where(.svelte-xyz) { color: green; }\n\t.x.svelte-xyz + .foo:where(.svelte-xyz) span:where(.svelte-xyz) { color: green; }\n\t.x.svelte-xyz ~ .foo:where(.svelte-xyz) { color: green; }\n\t.x.svelte-xyz ~ .foo:where(.svelte-xyz) span:where(.svelte-xyz) { color: green; }\n\t.x.svelte-xyz ~ .bar:where(.svelte-xyz) { color: green; }\n\n\t.z.svelte-xyz + .z:where(.svelte-xyz) { color: green; }\n\t.z.svelte-xyz ~ .z:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .x + .bar { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/input.svelte",
    "content": "<script>\n\tlet tag = 'div'\n</script>\n\n<div>\n\t<p class=\"before\">before</p>\n\t<svelte:element class=\"x\" this={tag}></svelte:element>\n\t<p class=\"foo\">\n\t\t<span>foo</span>\n\t</p>\n\t<p class=\"bar\">bar</p>\n</div>\n{#each [1]}\n\t<svelte:element class=\"z\" this={tag}></svelte:element>\n{/each}\n\n<style>\n\t.before + .foo { color: green; }\n\t.before ~ .foo { color: green; }\n\t.before ~ .bar { color: green; }\n\n\t.x + .foo { color: green; }\n\t.x + .foo span { color: green; }\n\t.x ~ .foo { color: green; }\n\t.x ~ .foo span { color: green; }\n\t.x ~ .bar { color: green; }\n\n\t.z + .z { color: green; }\n\t.z ~ .z { color: green; }\n\n\t/* no match */\n\t.x + .bar { color: green; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thasGlobal: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global/expected.css",
    "content": "\tdiv {\n\t\tcolor: red;\n\t}\n\n\tdiv.foo {\n\t\tcolor: pink;\n\t}\n\n\t.foo {\n\t\tfont-weight: bold;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global/input.svelte",
    "content": "<div>red</div>\n<div class='foo'>bold/blue</div>\n\n<style>\n\t:global(div) {\n\t\tcolor: red;\n\t}\n\n\t:global(div.foo) {\n\t\tcolor: pink;\n\t}\n\n\t:global(.foo) {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused :global\"',\n\t\t\tstart: {\n\t\t\t\tline: 73,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 966\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 73,\n\t\t\t\tcolumn: 16,\n\t\t\t\tcharacter: 981\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"unused :global\"',\n\t\t\tstart: {\n\t\t\t\tline: 104,\n\t\t\t\tcolumn: 29,\n\t\t\t\tcharacter: 1272\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 104,\n\t\t\t\tcolumn: 43,\n\t\t\t\tcharacter: 1286\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-block/expected.css",
    "content": "\n\t/* :global {*/\n\t\t.x {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t.a, .selector, .list {\n\t\t\tcolor: green;\n\t\t}\n\t/*}*/\n\n\tdiv.svelte-xyz {\n\t\t.y {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t/* some css preprocessors de-nest :global blocks with a single child\n\t   (e.g turn `:global { div { ... } }` into `:global div { ... }`),\n\t   so we need to support it, too */\n\t div {\n\t\t.y {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv.svelte-xyz p {\n\t\t.y {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t/* `div { :global { &.x { ...} } }` is allowed ... */\n\tdiv.svelte-xyz {\n\t\t/* :global {*/\n\t\t\t&.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t/*}*/\n\t}\n\n\t/* ...which is equivalent to `div :global { &.x { ...} }` ... */\n\tdiv.svelte-xyz {\n\t\t&.x {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t/* ...so `div :global.x` must be, too ... */\n\tdiv.svelte-xyz.x {\n\t\tcolor: green;\n\t}\n\n\t/* ...and therefore `div { :global.x { ... }` as well */\n\tdiv.svelte-xyz {\n\t\t&.x {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv.svelte-xyz {\n\t\t&.x {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv.svelte-xyz:is(html.dark-mode *) {\n\t\tcolor: green;\n\t}\n\n\t/* (unused) .unused :global {\n\t\t.z {\n\t\t\tcolor: red;\n\t\t}\n\t}*/\n\t/* :global{*/\n\t\t.x{\n\t\t\tanimation: svelte-xyz-test 1s;\n\t\t}\n\n\t\t.y{\n\t\t\tanimation: test-in 1s;\n\t\t}\n\n\t\t@keyframes test-in{\n\t\t\tto{\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t/*}*/\n\n\t@keyframes svelte-xyz-test{\n\t\tto{\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t x,  y {\n\t\tcolor: green;\n\t}\n\n\tdiv.svelte-xyz, div.svelte-xyz y /* (unused) unused*/ {\n\t\tz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-block/input.svelte",
    "content": "<div>{@html whatever}</div>\n\n<style>\n\t:global {\n\t\t.x {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t.a, .selector, .list {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv :global {\n\t\t.y {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t/* some css preprocessors de-nest :global blocks with a single child\n\t   (e.g turn `:global { div { ... } }` into `:global div { ... }`),\n\t   so we need to support it, too */\n\t:global div {\n\t\t.y {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv :global p {\n\t\t.y {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t/* `div { :global { &.x { ...} } }` is allowed ... */\n\tdiv {\n\t\t:global {\n\t\t\t&.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* ...which is equivalent to `div :global { &.x { ...} }` ... */\n\tdiv :global {\n\t\t&.x {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t/* ...so `div :global.x` must be, too ... */\n\tdiv :global.x {\n\t\tcolor: green;\n\t}\n\n\t/* ...and therefore `div { :global.x { ... }` as well */\n\tdiv {\n\t\t:global.x {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv {\n\t\t& :global.x {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\tdiv :global:is(html.dark-mode *) {\n\t\tcolor: green;\n\t}\n\n\t.unused :global {\n\t\t.z {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\t:global{\n\t\t.x{\n\t\t\tanimation: test 1s;\n\t\t}\n\n\t\t.y{\n\t\t\tanimation: test-in 1s;\n\t\t}\n\n\t\t@keyframes test-in{\n\t\t\tto{\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n\n\t@keyframes test{\n\t\tto{\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t:global x, :global y {\n\t\tcolor: green;\n\t}\n\n\tdiv :global, div :global y, unused :global {\n\t\tz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-keyframes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thasGlobal: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-keyframes/expected.css",
    "content": "\t@keyframes why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t.animated.svelte-xyz {\n\t\tanimation: why 2s;\n\t}\n\n\t.also-animated.svelte-xyz {\n\t\tanimation: not-defined-here 2s;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-keyframes/input.svelte",
    "content": "<div class='animated'>animated</div>\n<div class='also-animated'>also animated</div>\n\n<style>\n\t@keyframes -global-why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t.animated {\n\t\tanimation: why 2s;\n\t}\n\n\t.also-animated {\n\t\tanimation: not-defined-here 2s;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-keyframes-with-no-elements/expected.css",
    "content": "\t@keyframes why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-keyframes-with-no-elements/input.svelte",
    "content": "<style>\n\t@keyframes -global-why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-local/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thasGlobal: false\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-local/expected.css",
    "content": "\n\tdiv.svelte-xyz .whatever {\n\t\tcolor: green;\n\t}\n\n\t.whatever div.svelte-xyz {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-local/input.svelte",
    "content": "<div>{@html whatever}</div>\n\n<style>\n\tdiv :global(.whatever) {\n\t\tcolor: green;\n\t}\n\n\t:global(.whatever) div {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-local-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thasGlobal: false\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-local-nested/expected.css",
    "content": "\n\tdiv.svelte-xyz {\n\t\t.whatever {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t.whatever {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-local-nested/input.svelte",
    "content": "<div>{@html whatever}</div>\n\n<style>\n\tdiv {\n\t\t:global(.whatever) {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\n\t:global(.whatever) {\n\t\tdiv {\n\t\t\tcolor: green;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-nested-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 19,\n\t\t\t\tcolumn: 3,\n\t\t\t\tcharacter: 204\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 19,\n\t\t\t\tcolumn: 10,\n\t\t\t\tcharacter: 211\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused :global\"',\n\t\t\tstart: {\n\t\t\t\tline: 34,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 332\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 34,\n\t\t\t\tcolumn: 17,\n\t\t\t\tcharacter: 347\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused :global(.z)\"',\n\t\t\tstart: {\n\t\t\t\tline: 40,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 386\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 40,\n\t\t\t\tcolumn: 21,\n\t\t\t\tcharacter: 405\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-nested-block/expected.css",
    "content": "\n\tdiv.svelte-xyz {\n\t\t/* :global {*/\n\t\t\t.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t/*}*/\n\n\t\t.x {\n\t\t\tcolor: green;\n\t\t\t&:hover {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t\t&div {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t\t/* (unused) .unused {\n\t\t\t\tcolor: red;\n\t\t\t}*/\n\t\t}\n\n\t\tp:where(.svelte-xyz) {\n\t\t\t.y {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\tp:where(.svelte-xyz) .y {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t/* (unused) .unused :global {\n\t\t\t.z {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}*/\n\n\t\t/* (unused) .unused :global(.z) {\n\t\t\tcolor: red;\n\t\t}*/\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-nested-block/input.svelte",
    "content": "<div><p>{@html whatever}</p></div>\n\n<style>\n\tdiv {\n\t\t:global {\n\t\t\t.x {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\t:global(.x) {\n\t\t\tcolor: green;\n\t\t\t&:hover {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t\t&div {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t\t.unused {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\n\t\tp :global {\n\t\t\t.y {\n\t\t\t\tcolor: green;\n\t\t\t}\n\t\t}\n\n\t\tp :global(.y) {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t.unused :global {\n\t\t\t.z {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\n\t\t.unused :global(.z) {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator/expected.css",
    "content": "\tdiv > div.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator/expected.html",
    "content": "<div class=\"svelte-xyz\">\n  <div class=\"svelte-xyz\"></div>\n</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator/input.svelte",
    "content": "<style>\n\t:global(div) > div {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<div></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator-2/expected.css",
    "content": "\ta > b > div.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator-2/expected.html",
    "content": "<div class=\"svelte-xyz\">\n  <div></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-child-combinator-2/input.svelte",
    "content": "<style>\n\t:global(a) > :global(b) > div {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<div></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-class/expected.css",
    "content": "\tdiv.svelte-xyz.blue {\n\t\tcolor: blue;\n\t}\n\tspan.blue.x.svelte-xyz {\n\t\tcolor: blue;\n\t}\n\tspan.x.svelte-xyz.bg {\n\t\tbackground: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-class/expected.html",
    "content": "<div class=\"svelte-xyz\">someone could programmatically add a class to this, so having global be part of a modifier is necessary</div>\n<span class=\"x svelte-xyz\">-</span>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-class/input.svelte",
    "content": "<div>someone could programmatically add a class to this, so having global be part of a modifier is necessary</div>\n<span class=\"x\">-</span>\n\n<style>\n\tdiv:global(.blue) {\n\t\tcolor: blue;\n\t}\n\tspan:global(.blue).x {\n\t\tcolor: blue;\n\t}\n\tspan.x:global(.bg) {\n\t\tbackground: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-data-attribute/expected.css",
    "content": "\t.foo.svelte-xyz[data-state='checked'] {\n\t\tbackground-color: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-data-attribute/input.svelte",
    "content": "<!-- an action or sth else could dynamically set the data-state -->\n<div class=\"foo\"></div>\n<style>\n\t.foo:global([data-state='checked']) {\n\t\tbackground-color: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-nesting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [],\n\n\thasGlobal: false\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-nesting/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\t&.class{\n\t\t\tcolor: green;\n\t\t}\n\t}\n\t* {\n\t\t&:hover .class.svelte-xyz {\n\t\t\tcolor: green;\n\t\t}\n\t}"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-nesting/expected.html",
    "content": "<div class=\"svelte-xyz\">\n</div>\n\n<div class=\"class svelte-xyz\">\n\tfoo\n</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-nesting/input.svelte",
    "content": "<style>\n\tdiv {\n\t\t&:global(.class){\n\t\t\tcolor: green;\n\t\t}\n\t}\n\t:global(*) {\n\t\t&:hover .class {\n\t\t\tcolor: green;\n\t\t}\n\t}\n</style>\n\n<div>\n</div>\n\n<div class=\"class\">\n\tfoo\n</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-root/expected.css",
    "content": "\n\t/* :global{*/\n\t\t:root{\n\t\t\t.use{\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\t/*}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-root/input.svelte",
    "content": "<style>\n\t:global{\n\t\t:root{\n\t\t\t.use{\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-unused-descendant/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(.foo) .bar\"',\n\t\t\tstart: { character: 9, column: 1, line: 2 },\n\t\t\tend: { character: 27, column: 19, line: 2 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-unused-descendant/expected.css",
    "content": "\t/* (unused) :global(.foo) .bar {\n\t\tcolor: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/global-with-unused-descendant/input.svelte",
    "content": "<style>\n\t:global(.foo) .bar {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/has/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused:has(y)\"',\n\t\t\tstart: {\n\t\t\t\tline: 41,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 378\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 41,\n\t\t\t\tcolumn: 15,\n\t\t\t\tcharacter: 392\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused:has(:global(y))\"',\n\t\t\tstart: {\n\t\t\t\tline: 44,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 413\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 44,\n\t\t\t\tcolumn: 24,\n\t\t\t\tcharacter: 436\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"x:has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 47,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 457\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 47,\n\t\t\t\tcolumn: 15,\n\t\t\t\tcharacter: 471\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(.foo):has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 50,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 492\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 50,\n\t\t\t\tcolumn: 27,\n\t\t\t\tcharacter: 518\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"x:has(y):has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 60,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 626\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 60,\n\t\t\t\tcolumn: 22,\n\t\t\t\tcharacter: 647\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 79,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 852\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 79,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 859\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused x:has(y)\"',\n\t\t\tstart: {\n\t\t\t\tline: 95,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1006\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 95,\n\t\t\t\tcolumn: 17,\n\t\t\t\tcharacter: 1022\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused:has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 98,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1043\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 98,\n\t\t\t\tcolumn: 21,\n\t\t\t\tcharacter: 1063\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"x:has(> z)\"',\n\t\t\tstart: {\n\t\t\t\tline: 108,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1163\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 108,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 1173\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"x:has(> d)\"',\n\t\t\tstart: {\n\t\t\t\tline: 111,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1194\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 111,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 1204\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"x:has(~ y)\"',\n\t\t\tstart: {\n\t\t\t\tline: 131,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1396\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 131,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 1406\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"d:has(+ f)\"',\n\t\t\tstart: {\n\t\t\t\tline: 141,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1494\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 141,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 1504\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"f:has(~ d)\"',\n\t\t\tstart: {\n\t\t\t\tline: 144,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1525\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 144,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 1535\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 152,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 1608\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 152,\n\t\t\t\tcolumn: 15,\n\t\t\t\tcharacter: 1621\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"&:has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 158,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 1679\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 158,\n\t\t\t\tcolumn: 16,\n\t\t\t\tcharacter: 1693\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(.foo):has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 166,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1763\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 166,\n\t\t\t\tcolumn: 27,\n\t\t\t\tcharacter: 1789\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h:has(> h > i)\"',\n\t\t\tstart: {\n\t\t\t\tline: 173,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 1848\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 173,\n\t\t\t\tcolumn: 15,\n\t\t\t\tcharacter: 1862\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/has/expected.css",
    "content": "\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(z:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(y) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(z) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(.foo) {\n\t\tcolor: green;\n\t}\n\t.foo:has(y.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\n\t/* (unused) .unused:has(y) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) .unused:has(:global(y)) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) x:has(.unused) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) :global(.foo):has(.unused) {\n\t\tcolor: red;\n\t}*/\n\n\tx.svelte-xyz:has(y:where(.svelte-xyz) /* (unused) .unused*/) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(y:where(.svelte-xyz), .foo) {\n\t\tcolor: green;\n\t}\n\t/* (unused) x:has(y):has(.unused) {\n\t\tcolor: red;\n\t}*/\n\tx.svelte-xyz:has(y:where(.svelte-xyz)):has(.foo) {\n\t\tcolor: green;\n\t}\n\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) z:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) {\n\t\tz:where(.svelte-xyz) {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) .foo {\n\t\tcolor: green;\n\t}\n\t/* (empty) x:has(y) {\n\t\t.unused {\n\t\t\tcolor: red;\n\t\t}\n\t}*/\n\n\tx.svelte-xyz y:where(.svelte-xyz):has(z:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz {\n\t\ty:where(.svelte-xyz):has(z:where(.svelte-xyz)) {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\t.foo x.svelte-xyz:has(y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\t/* (unused) .unused x:has(y) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) .unused:has(.unused),*/ x.svelte-xyz:has(y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\n\tx.svelte-xyz:has(> y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\ty.svelte-xyz:has(> d:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\t/* (unused) x:has(> z) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) x:has(> d) {\n\t\tcolor: red;\n\t}*/\n\tx.svelte-xyz > y:where(.svelte-xyz):has(z:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) z:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) + c:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\n\tx.svelte-xyz:has(+ c:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz:has(~ c:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\t/* (unused) x:has(~ y) {\n\t\tcolor: red;\n\t}*/\n\n\td.svelte-xyz:has(+ e:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\td.svelte-xyz:has(~ f:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\t/* (unused) d:has(+ f) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) f:has(~ d) {\n\t\tcolor: red;\n\t}*/\n\n\t.foo {\n\t\t.svelte-xyz:has(x:where(.svelte-xyz)) {\n\t\t\tcolor: green;\n\t\t}\n\t\t/* (unused) :has(.unused) {\n\t\t\tcolor: red;\n\t\t}*/\n\t\t&:has(x.svelte-xyz) {\n\t\t\tcolor: green;\n\t\t}\n\t\t/* (unused) &:has(.unused) {\n\t\t\tcolor: red;\n\t\t}*/\n\t}\n\n\t.foo:has(x.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* (unused) :global(.foo):has(.unused) {\n\t\tcolor: red;\n\t}*/\n\n\tg.svelte-xyz:has(> h:where(.svelte-xyz) > i:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\t/* (unused) h:has(> h > i) {\n\t\tcolor: red;\n\t}*/\n\tg.svelte-xyz:has(+ j:where(.svelte-xyz) > k:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}"
  },
  {
    "path": "packages/svelte/tests/css/samples/has/input.svelte",
    "content": "<x>\n\t<y>\n\t\t<z></z>\n\t\t{#if foo}\n\t\t\t<d></d>\n\t\t\t<e></e>\n\t\t\t<f></f>\n\t\t{/if}\n\t</y>\n</x>\n<c></c>\n<g>\n\t<h>\n\t\t<i></i>\n\t</h>\n</g>\n<j>\n\t<k></k>\n</j>\n\n<style>\n\tx:has(y) {\n\t\tcolor: green;\n\t}\n\tx:has(z) {\n\t\tcolor: green;\n\t}\n\tx:has(:global(y)) {\n\t\tcolor: green;\n\t}\n\tx:has(:global(z)) {\n\t\tcolor: green;\n\t}\n\tx:has(:global(.foo)) {\n\t\tcolor: green;\n\t}\n\t:global(.foo):has(y) {\n\t\tcolor: green;\n\t}\n\n\t.unused:has(y) {\n\t\tcolor: red;\n\t}\n\t.unused:has(:global(y)) {\n\t\tcolor: red;\n\t}\n\tx:has(.unused) {\n\t\tcolor: red;\n\t}\n\t:global(.foo):has(.unused) {\n\t\tcolor: red;\n\t}\n\n\tx:has(y, .unused) {\n\t\tcolor: green;\n\t}\n\tx:has(y, :global(.foo)) {\n\t\tcolor: green;\n\t}\n\tx:has(y):has(.unused) {\n\t\tcolor: red;\n\t}\n\tx:has(y):has(:global(.foo)) {\n\t\tcolor: green;\n\t}\n\n\tx:has(y) z {\n\t\tcolor: green;\n\t}\n\tx:has(y) {\n\t\tz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\tx:has(y) :global(.foo) {\n\t\tcolor: green;\n\t}\n\tx:has(y) {\n\t\t.unused {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\n\tx y:has(z) {\n\t\tcolor: green;\n\t}\n\tx {\n\t\ty:has(z) {\n\t\t\tcolor: green;\n\t\t}\n\t}\n\t:global(.foo) x:has(y) {\n\t\tcolor: green;\n\t}\n\t.unused x:has(y) {\n\t\tcolor: red;\n\t}\n\t.unused:has(.unused), x:has(y) {\n\t\tcolor: green;\n\t}\n\n\tx:has(> y) {\n\t\tcolor: green;\n\t}\n\ty:has(> d) {\n\t\tcolor: green;\n\t}\n\tx:has(> z) {\n\t\tcolor: red;\n\t}\n\tx:has(> d) {\n\t\tcolor: red;\n\t}\n\tx > y:has(z) {\n\t\tcolor: green;\n\t}\n\n\tx:has(y) z {\n\t\tcolor: green;\n\t}\n\tx:has(y) + c {\n\t\tcolor: green;\n\t}\n\n\tx:has(+ c) {\n\t\tcolor: green;\n\t}\n\tx:has(~ c) {\n\t\tcolor: green;\n\t}\n\tx:has(~ y) {\n\t\tcolor: red;\n\t}\n\n\td:has(+ e) {\n\t\tcolor: green;\n\t}\n\td:has(~ f) {\n\t\tcolor: green;\n\t}\n\td:has(+ f) {\n\t\tcolor: red;\n\t}\n\tf:has(~ d) {\n\t\tcolor: red;\n\t}\n\n\t:global(.foo) {\n\t\t:has(x) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:has(.unused) {\n\t\t\tcolor: red;\n\t\t}\n\t\t&:has(x) {\n\t\t\tcolor: green;\n\t\t}\n\t\t&:has(.unused) {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\n\t:global(.foo):has(x) {\n\t\tcolor: green;\n\t}\n\t:global(.foo):has(.unused) {\n\t\tcolor: red;\n\t}\n\n\tg:has(> h > i) {\n\t\tcolor: green;\n\t}\n\th:has(> h > i) {\n\t\tcolor: red;\n\t}\n\tg:has(+ j > k) {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/has-with-render-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"z:has(+ y)\"',\n\t\t\tstart: {\n\t\t\t\tline: 23,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 217\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 23,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 227\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/has-with-render-tag/expected.css",
    "content": "\n\tx.svelte-xyz:has(y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tp.svelte-xyz:has(+ y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\n\t/* (unused) z:has(+ y) {\n\t\tcolor: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/has-with-render-tag/input.svelte",
    "content": "{#snippet foo()}\n\t<y></y>\n{/snippet}\n\n<x>\n\tthis should be green\n\t{@render foo()}\n</x>\n\n<z>\n\t<p>this should be green</p>\n\t{@render foo()}\n</z>\n\n<style>\n\tx:has(y) {\n\t\tcolor: green;\n\t}\n\tp:has(+ y) {\n\t\tcolor: green;\n\t}\n\n\tz:has(+ y) {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/host/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":host > span\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 145,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 18\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 157,\n\t\t\t\tcolumn: 13,\n\t\t\t\tline: 18\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/host/expected.css",
    "content": "  :host h1.svelte-xyz {\n    color: red;\n  }\n\n  :host > h1.svelte-xyz {\n    color: red;\n  }\n\n  :host > .svelte-xyz {\n    color: red;\n\t}\n\n\t:host span.svelte-xyz {\n\t\tcolor: red;\n\t}\n\n\t/* (unused) :host > span {\n\t\tcolor: red;\n\t}*/\n\n  :host {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/host/input.svelte",
    "content": "<style>\n  :host h1 {\n    color: red;\n  }\n\n  :host > h1 {\n    color: red;\n  }\n\n  :host > * {\n    color: red;\n\t}\n\n\t:host span {\n\t\tcolor: red;\n\t}\n\n\t:host > span {\n\t\tcolor: red;\n\t}\n\n  :host {\n    color: red;\n  }\n</style>\n\n<h1>Hello!</h1>\n\n<div>\n  <span>World!</span>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/is/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 11,\n\t\t\t\tcolumn: 10,\n\t\t\t\tcharacter: 80\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 11,\n\t\t\t\tcolumn: 17,\n\t\t\t\tcharacter: 87\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"x :is(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 14,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 111\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 14,\n\t\t\t\tcolumn: 15,\n\t\t\t\tcharacter: 125\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(.foo) :is(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 28,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 274\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 28,\n\t\t\t\tcolumn: 27,\n\t\t\t\tcharacter: 300\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(.foo):is(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 34,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 363\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 34,\n\t\t\t\tcolumn: 26,\n\t\t\t\tcharacter: 388\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":is(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 52,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 636\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 52,\n\t\t\t\tcolumn: 14,\n\t\t\t\tcharacter: 648\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/is/expected.css",
    "content": "\n\tx.svelte-xyz :is(y:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz :is(y:where(.svelte-xyz) /* (unused) .unused*/) {\n\t\tcolor: green;\n\t}\n\t/* (unused) x :is(.unused) {\n\t\tcolor: red;\n\t}*/\n\n\tx.svelte-xyz :is(y) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz :is(.foo) {\n\t\tcolor: green;\n\t}\n\n\t.foo :is(x.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* (unused) :global(.foo) :is(.unused) {\n\t\tcolor: red;\n\t}*/\n\t.foo:is(x.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* (unused) :global(.foo):is(.unused) {\n\t\tcolor: red;\n\t}*/\n\n\tx.svelte-xyz :is(html *) {\n\t\tcolor: green;\n\t}\n\tx.svelte-xyz :is(html:where(.svelte-xyz) :where(.svelte-xyz)) {\n\t\tcolor: red; /* TODO would be nice to prune this one day */\n\t}\n\ty.svelte-xyz :is(x:where(.svelte-xyz) :where(.svelte-xyz)) {\n\t\tcolor: green; /* matches z */\n\t}\n\n\t.foo {\n\t\t:is(x.svelte-xyz) {\n\t\t\tcolor: green;\n\t\t}\n\t\t/* (unused) :is(.unused) {\n\t\t\tcolor: red;\n\t\t}*/\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/is/input.svelte",
    "content": "<x>\n\t<y>\n\t\t<z></z>\n\t</y>\n</x>\n\n<style>\n\tx :is(y) {\n\t\tcolor: green;\n\t}\n\tx :is(y, .unused) {\n\t\tcolor: green;\n\t}\n\tx :is(.unused) {\n\t\tcolor: red;\n\t}\n\n\tx :is(:global(y)) {\n\t\tcolor: green;\n\t}\n\tx :is(:global(.foo)) {\n\t\tcolor: green;\n\t}\n\n\t:global(.foo) :is(x) {\n\t\tcolor: green;\n\t}\n\t:global(.foo) :is(.unused) {\n\t\tcolor: red;\n\t}\n\t:global(.foo):is(x) {\n\t\tcolor: green;\n\t}\n\t:global(.foo):is(.unused) {\n\t\tcolor: red;\n\t}\n\n\tx :is(:global(html *)) {\n\t\tcolor: green;\n\t}\n\tx :is(html *) {\n\t\tcolor: red; /* TODO would be nice to prune this one day */\n\t}\n\ty :is(x *) {\n\t\tcolor: green; /* matches z */\n\t}\n\n\t:global(.foo) {\n\t\t:is(x) {\n\t\t\tcolor: green;\n\t\t}\n\t\t:is(.unused) {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/keyframes/expected.css",
    "content": "\t@keyframes svelte-xyz-why {\n\t\t0% { color: red; }\n\t\t33.3% { color: yellow }\n\t\t66.7% { color: green }\n\t\t100% { color: blue; }\n\t}\n\n\t.animated.svelte-xyz {\n\t\tanimation: svelte-xyz-why 2s;\n\t}\n\n\t.also-animated.svelte-xyz {\n\t\tanimation: not-defined-here 2s;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/keyframes/input.svelte",
    "content": "<div class='animated'>animated</div>\n<div class='also-animated'>also animated</div>\n\n<style>\n\t@keyframes why {\n\t\t0% { color: red; }\n\t\t33.3% { color: yellow }\n\t\t66.7% { color: green }\n\t\t100% { color: blue; }\n\t}\n\n\t.animated {\n\t\tanimation: why 2s;\n\t}\n\n\t.also-animated {\n\t\tanimation: not-defined-here 2s;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/keyframes-autoprefixed/expected.css",
    "content": "\t@keyframes svelte-xyz-why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t@-webkit-keyframes svelte-xyz-why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t@-moz-keyframes svelte-xyz-why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t@-o-keyframes svelte-xyz-why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t.animated.svelte-xyz {\n\t\t-webkit-animation: svelte-xyz-why 2s;\n\t\tanimation: svelte-xyz-why 2s;\n\t}\n\n\t.also-animated.svelte-xyz {\n\t\t-webkit-animation: not-defined-here 2s;\n\t\tanimation: not-defined-here 2s;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/keyframes-autoprefixed/input.svelte",
    "content": "<div class='animated'>animated</div>\n<div class='also-animated'>also animated</div>\n\n<style>\n\t@keyframes why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t@-webkit-keyframes why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t@-moz-keyframes why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t@-o-keyframes why {\n\t\t0% { color: red; }\n\t\t100% { color: blue; }\n\t}\n\n\t.animated {\n\t\t-webkit-animation: why 2s;\n\t\tanimation: why 2s;\n\t}\n\n\t.also-animated {\n\t\t-webkit-animation: not-defined-here 2s;\n\t\tanimation: not-defined-here 2s;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/keyframes-from-to/expected.css",
    "content": "\t@keyframes svelte-xyz-why {\n\t\tfrom { color: red; }\n\t\tto { color: blue; }\n\t}\n\n\t.animated.svelte-xyz {\n\t\tanimation: svelte-xyz-why 2s;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/keyframes-from-to/input.svelte",
    "content": "<div class='animated'>animated</div>\n\n<style>\n\t@keyframes why {\n\t\tfrom { color: red; }\n\t\tto { color: blue; }\n\t}\n\n\t.animated {\n\t\tanimation: why 2s;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/local-inside-global/expected.css",
    "content": "\tdiv .foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n\n\tdiv > .foo.svelte-xyz {\n\t\tfont-weight: bold;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/local-inside-global/input.svelte",
    "content": "<p class='foo'>red/bold</p>\n\n<style>\n\t:global(div) .foo {\n\t\tcolor: red;\n\t}\n\n\t:global(div) > .foo {\n\t\tfont-weight: bold;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/media-query/expected.css",
    "content": "\t@media (min-width: 400px) {\n\t\t.large-screen.svelte-xyz {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (min-width: calc(400px + 1px)) {\n\t\t.large-screen.svelte-xyz {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (width >= 600px) {\n\t\t.large-screen.svelte-xyz {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (400px <= width <= 1000px) {\n\t\t.large-screen.svelte-xyz {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (width < clamp(200px, 40%, 400px)) {\n\t\t.large-screen.svelte-xyz {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (calc(400px + 1px) <= width <= calc(1000px + 1px)) {\n\t\t.large-screen.svelte-xyz {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/media-query/input.svelte",
    "content": "<div class='large-screen'>animated</div>\n\n<style>\n\t@media (min-width: 400px) {\n\t\t.large-screen {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (min-width: calc(400px + 1px)) {\n\t\t.large-screen {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (width >= 600px) {\n\t\t.large-screen {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (400px <= width <= 1000px) {\n\t\t.large-screen {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (width < clamp(200px, 40%, 400px)) {\n\t\t.large-screen {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t@media (calc(400px + 1px) <= width <= calc(1000px + 1px)) {\n\t\t.large-screen {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/media-query-word/expected.css",
    "content": "\t@media only screen and (min-width: 400px) {\n\t\tdiv.svelte-xyz {\n\t\t\tcolor: red;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/media-query-word/input.svelte",
    "content": "<div>hello</div>\n\n<style>\n\t@media only screen and (min-width: 400px) {\n\t\tdiv {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tdynamic: 'x'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n\t.bar.svelte-xyz {\n\t\tfont-style: italic;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested/expected.html",
    "content": "<span class=\"foo svelte-xyz\"><span class=\"bar svelte-xyz\">text</span></span>\n<span class=\"foo svelte-xyz\"><span class=\"bar svelte-xyz\">x</span></span>"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested/input.svelte",
    "content": "<script>\n\texport let dynamic;\n</script>\n\n<span class='foo'>\n\t<span class='bar'>text</span>\n</span>\n\n<span class='foo'>\n\t<span class='bar'>{dynamic}</span>\n</span>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n\t.bar {\n\t\tfont-style: italic;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested-css/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 239,\n\t\t\t\tcolumn: 13,\n\t\t\t\tline: 20\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 232,\n\t\t\t\tcolumn: 6,\n\t\t\t\tline: 20\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 302,\n\t\t\t\tcolumn: 10,\n\t\t\t\tline: 27\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 295,\n\t\t\t\tcolumn: 3,\n\t\t\t\tline: 27\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 328,\n\t\t\t\tcolumn: 6,\n\t\t\t\tline: 30\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \".c\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 326,\n\t\t\t\tcolumn: 4,\n\t\t\t\tline: 30\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 381,\n\t\t\t\tcolumn: 10,\n\t\t\t\tline: 37\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 374,\n\t\t\t\tcolumn: 3,\n\t\t\t\tline: 37\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 471,\n\t\t\t\tcolumn: 7,\n\t\t\t\tline: 47\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"& &\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 468,\n\t\t\t\tcolumn: 4,\n\t\t\t\tline: 47\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 668,\n\t\t\t\tcolumn: 5,\n\t\t\t\tline: 70\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"&.b\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 665,\n\t\t\t\tcolumn: 2,\n\t\t\t\tline: 70\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 700,\n\t\t\t\tcolumn: 9,\n\t\t\t\tline: 74\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 693,\n\t\t\t\tcolumn: 2,\n\t\t\t\tline: 74\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested-css/expected.css",
    "content": "\n\t.a.svelte-xyz {\n\t\tcolor: green;\n\n\t\t/* implicit & */\n\t\t.b:where(.svelte-xyz) /* (unused) .unused*/ {\n\t\t\tcolor: green;\n\n\t\t\t.c:where(.svelte-xyz) {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t/* (unused) .unused {\n\t\t\t\tcolor: red;\n\n\t\t\t\t.c {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t}*/\n\t\t}\n\n\t\t/* (empty) .d {\n\t\t\t.unused {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}*/\n\n\t\t/* explicit & */\n\t\t& .b:where(.svelte-xyz) {\n\t\t\tcolor: green;\n\n\t\t\t/* (empty) .c {\n\t\t\t\t& & {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t}*/\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t& & {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t/* silly but valid */\n\t\t&& {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t.container:where(.svelte-xyz) & {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t/* (unused) &.b {\n\t\t\tcolor: red;\n\t\t}*/\n\n\t\t/* (unused) .unused {\n\t\t\tcolor: red;\n\t\t}*/\n\t}\n\n\tblah {\n\t\t.a.svelte-xyz {\n\t\t\tcolor: green;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested-css/input.svelte",
    "content": "<div class=\"a\">\n\t<div class=\"a\"></div>\n\n\t<div class=\"b\">\n\t\t<div class=\"c\"></div>\n\t</div>\n\n\t<div class=\"d\"></div>\n</div>\n\n<div class=\"container\">\n\t<div class=\"a\"></div>\n</div>\n\n<style>\n\t.a {\n\t\tcolor: green;\n\n\t\t/* implicit & */\n\t\t.b, .unused {\n\t\t\tcolor: green;\n\n\t\t\t.c {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t.unused {\n\t\t\t\tcolor: red;\n\n\t\t\t\t.c {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.d {\n\t\t\t.unused {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\n\t\t/* explicit & */\n\t\t& .b {\n\t\t\tcolor: green;\n\n\t\t\t.c {\n\t\t\t\t& & {\n\t\t\t\t\tcolor: red;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t& & {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t/* silly but valid */\n\t\t&& {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t.container & {\n\t\t\tcolor: green;\n\t\t}\n\n\t\t&.b {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t.unused {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\n\t:global(blah) {\n\t\t.a {\n\t\t\tcolor: green;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested-css-combinator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 109,\n\t\t\t\tcolumn: 11,\n\t\t\t\tline: 11\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"~ .unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 100,\n\t\t\t\tcolumn: 2,\n\t\t\t\tline: 11\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested-css-combinator/expected.css",
    "content": "\n\t.foo.svelte-xyz {\n\t\t> .bar:where(.svelte-xyz) {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t/* (unused) ~ .unused {\n\t\t\tcolor: red;\n\t\t}*/\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nested-css-combinator/input.svelte",
    "content": "<div class=\"foo\">\n\t<div class=\"bar\"></div>\n</div>\n\n<style>\n\t.foo {\n\t\t> .bar {\n\t\t\tcolor: red;\n\t\t}\n\n\t\t~ .unused {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nesting-selectors/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused:has(&)\"',\n\t\t\tstart: {\n\t\t\t\tline: 10,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 105\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 10,\n\t\t\t\tcolumn: 16,\n\t\t\t\tcharacter: 119\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"&.unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 23,\n\t\t\t\tcolumn: 3,\n\t\t\t\tcharacter: 223\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 23,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 231\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"&.unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 37,\n\t\t\t\tcolumn: 3,\n\t\t\t\tcharacter: 344\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 37,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 352\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nesting-selectors/expected.css",
    "content": "\n\tnav.svelte-xyz {\n\t\theader:where(.svelte-xyz):has(&){\n\t\t\tcolor: green;\n\t\t}\n\t\t/* (unused) .unused:has(&){\n\t\t\tcolor: red;\n\t\t}*/\n\t}\n\n\theader.svelte-xyz {\n\t\t> nav:where(.svelte-xyz) {\n\t\t\tcolor: green;\n\n\t\t\t&.active {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t/* (unused) &.unused {\n\t\t\t\tcolor: red;\n\t\t\t}*/\n\t\t}\n\t}\n\n\theader.svelte-xyz {\n\t\t& > nav:where(.svelte-xyz) {\n\t\t\tcolor: green;\n\n\t\t\t&.active {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t/* (unused) &.unused {\n\t\t\t\tcolor: red;\n\t\t\t}*/\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/nesting-selectors/expected.html",
    "content": "<header class=\"svelte-xyz\"><nav class=\"active svelte-xyz\"></nav></header>"
  },
  {
    "path": "packages/svelte/tests/css/samples/nesting-selectors/input.svelte",
    "content": "<header>\n\t<nav class=\"active\"></nav>\t\t\n</header>\n\n<style>\n\tnav {\n\t\theader:has(&){\n\t\t\tcolor: green;\n\t\t}\n\t\t.unused:has(&){\n\t\t\tcolor: red;\n\t\t}\n\t}\n\n\theader {\n\t\t> nav {\n\t\t\tcolor: green;\n\n\t\t\t&.active {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t&.unused {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\t}\n\n\theader {\n\t\t& > nav {\n\t\t\tcolor: green;\n\n\t\t\t&.active {\n\t\t\t\tcolor: green;\n\t\t\t}\n\n\t\t\t&.unused {\n\t\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span :not(.foo)\"',\n\t\t\tstart: {\n\t\t\t\tline: 26,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 276\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 26,\n\t\t\t\tcolumn: 16,\n\t\t\t\tcharacter: 291\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span :not(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 29,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 312\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 29,\n\t\t\t\tcolumn: 19,\n\t\t\t\tcharacter: 330\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector/expected.css",
    "content": "\n\t.svelte-xyz:not(.foo) {\n\t\tcolor: green;\n\t}\n\t.svelte-xyz:not(.unused) {\n\t\tcolor: green;\n\t}\n\t.svelte-xyz:not(p) {\n\t\tcolor: green;\n\t}\n\n\t.svelte-xyz:not(.foo):not(.unused) {\n\t\tcolor: green;\n\t}\n\n\tp.svelte-xyz:not(.foo) {\n\t\tcolor: green;\n\t}\n\t/* (unused) span :not(.foo) {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) span :not(.unused) {\n\t\tcolor: red;\n\t}*/\n\n\tspan.svelte-xyz:not(p:where(.svelte-xyz) span:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tspan.svelte-xyz:not(:focus) {\n\t\tcolor: green;\n\t}\n\n\tp.svelte-xyz:not(:has(span)) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector/expected.html",
    "content": "<p class=\"foo svelte-xyz\">foo</p>\n<p class=\"bar svelte-xyz\">bar <span class=\"svelte-xyz\">baz</span></p>\n<span class=\"svelte-xyz\">buzz</span>"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector/input.svelte",
    "content": "<p class=\"foo\">foo</p>\n<p class=\"bar\">\n\tbar\n\t<span>baz</span>\n</p>\n<span>buzz</span>\n\n<style>\n\t:not(.foo) {\n\t\tcolor: green;\n\t}\n\t:not(.unused) {\n\t\tcolor: green;\n\t}\n\t:not(p) {\n\t\tcolor: green;\n\t}\n\n\t:not(.foo):not(.unused) {\n\t\tcolor: green;\n\t}\n\n\tp:not(.foo) {\n\t\tcolor: green;\n\t}\n\tspan :not(.foo) {\n\t\tcolor: red;\n\t}\n\tspan :not(.unused) {\n\t\tcolor: red;\n\t}\n\n\tspan:not(p span) {\n\t\tcolor: green;\n\t}\n\tspan:not(:focus) {\n\t\tcolor: green;\n\t}\n\n\tp:not(:has(span)) {\n\t\tcolor: green;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector-global/expected.css",
    "content": "\n\t.svelte-xyz:not(.foo) {\n\t\tcolor: green;\n\t}\n\t.svelte-xyz:not(.foo):not(.unused) {\n\t\tcolor: green;\n\t}\n\t.x:not(.foo) {\n\t\tcolor: green;\n\t}\n\t.x .svelte-xyz:not(p) {\n\t\tcolor: green;\n\t}\n\t.x:not(p) {\n\t\tcolor: green;\n\t}\n\t.x .svelte-xyz:not(.unused) {\n\t\tcolor: green;\n\t}\n\n\tspan:not(p.svelte-xyz span:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tspan.svelte-xyz:not(p span) {\n\t\tcolor: green;\n\t}\n\tspan:not(p span) {\n\t\tcolor: green;\n\t}\n\n\t.x {\n\t\t.svelte-xyz:not(.foo) {\n\t\t\tcolor: green;\n\t\t}\n\t\t&:not(.foo) {\n\t\t\tcolor: green;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector-global/expected.html",
    "content": "<p class=\"foo svelte-xyz\">foo</p>\n<p class=\"bar svelte-xyz\">bar <span class=\"svelte-xyz\">baz</span></p>\n<span class=\"svelte-xyz\">buzz</span>"
  },
  {
    "path": "packages/svelte/tests/css/samples/not-selector-global/input.svelte",
    "content": "<p class=\"foo\">foo</p>\n<p class=\"bar\">\n\tbar\n\t<span>baz</span>\n</p>\n<span>buzz</span>\n\n<style>\n\t:not(:global(.foo)) {\n\t\tcolor: green;\n\t}\n\t:not(.foo):not(:global(.unused)) {\n\t\tcolor: green;\n\t}\n\t:global(.x):not(.foo) {\n\t\tcolor: green;\n\t}\n\t:global(.x) :not(p) {\n\t\tcolor: green;\n\t}\n\t:global(.x):not(p) {\n\t\tcolor: green;\n\t}\n\t:global(.x) :not(.unused) {\n\t\tcolor: green;\n\t}\n\n\t:global(span):not(p span) {\n\t\tcolor: green;\n\t}\n\tspan:not(:global(p span)) {\n\t\tcolor: green;\n\t}\n\t:global(span:not(p span)) {\n\t\tcolor: green;\n\t}\n\n\t:global(.x) {\n\t\t:not(.foo) {\n\t\t\tcolor: green;\n\t\t}\n\t\t&:not(.foo) {\n\t\t\tcolor: green;\n\t\t}\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute/expected.css",
    "content": "\tp.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute/expected.html",
    "content": "<div><p class=\"svelte-xyz\">this is styled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute/input.svelte",
    "content": "<div>\n\t<p>this is styled</p>\n</div>\n\n<style>\n\tp {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector/expected.css",
    "content": "\t[autoplay].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector/expected.html",
    "content": "<div><video class=\"svelte-xyz\" autoplay></video>\n\t<video></video></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector/input.svelte",
    "content": "<div>\n\t<video autoplay muted></video>\n\t<video muted></video>\n</div>\n\n<style>\n\t[autoplay] {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-contains/expected.css",
    "content": "\t[data-foo*='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-contains/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"foobarbaz\">this is styled</p>\n\t<p data-foo=\"fooBARbaz\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-contains/input.svelte",
    "content": "<div>\n\t<p data-foo='foobarbaz'>this is styled</p>\n\t<p data-foo='fooBARbaz'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo*='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals/expected.css",
    "content": "\t[data-foo='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"bar\">this is styled</p>\n\t<p data-foo=\"baz\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals/input.svelte",
    "content": "<div>\n\t<p data-foo='bar'>this is styled</p>\n\t<p data-foo='baz'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-case-insensitive/expected.css",
    "content": "\t[data-foo='bar' i].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-case-insensitive/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"BAR\">this is styled</p>\n\t<p data-foo=\"BAZ\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-case-insensitive/input.svelte",
    "content": "<div>\n\t<p data-foo='BAR'>this is styled</p>\n\t<p data-foo='BAZ'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo='bar' i] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tdynamic: 'whatever'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-dynamic/expected.css",
    "content": "\t[data-foo='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-dynamic/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"whatever\">this is styled</p>\n\t<p data-foo=\"baz\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-equals-dynamic/input.svelte",
    "content": "<script>\n\texport let dynamic;\n</script>\n\n<div>\n\t<p data-foo='{dynamic}'>this is styled</p>\n\t<p data-foo='baz'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-pipe-equals/expected.css",
    "content": "\t[data-foo|='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-pipe-equals/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"bar\">this is styled</p>\n\t<p class=\"svelte-xyz\" data-foo=\"bar-baz\">this is styled</p>\n\t<p data-foo=\"baz-bar\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-pipe-equals/input.svelte",
    "content": "<div>\n\t<p data-foo='bar'>this is styled</p>\n\t<p data-foo='bar-baz'>this is styled</p>\n\t<p data-foo='baz-bar'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo|='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-prefix/expected.css",
    "content": "\t[data-foo^='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-prefix/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"barbaz\">this is styled</p>\n\t<p data-foo=\"bazbar\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-prefix/input.svelte",
    "content": "<div>\n\t<p data-foo='barbaz'>this is styled</p>\n\t<p data-foo='bazbar'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo^='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-suffix/expected.css",
    "content": "\t[data-foo$='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-suffix/expected.html",
    "content": "<div><p data-foo=\"barbaz\">this is unstyled</p>\n\t<p class=\"svelte-xyz\" data-foo=\"bazbar\">this is styled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-suffix/input.svelte",
    "content": "<div>\n\t<p data-foo='barbaz'>this is unstyled</p>\n\t<p data-foo='bazbar'>this is styled</p>\n</div>\n\n<style>\n\t[data-foo$='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-word-equals/expected.css",
    "content": "\t[data-foo~='bar'].svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-word-equals/expected.html",
    "content": "<div><p class=\"svelte-xyz\" data-foo=\"qux bar\">this is styled</p>\n\t<p data-foo=\"qux baz\">this is unstyled</p></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-attribute-selector-word-equals/input.svelte",
    "content": "<div>\n\t<p data-foo='qux bar'>this is styled</p>\n\t<p data-foo='qux baz'>this is unstyled</p>\n</div>\n\n<style>\n\t[data-foo~='bar'] {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-class-dynamic/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-class-dynamic/expected.html",
    "content": "<p class=\"whatever svelte-xyz\">this is styled</p>\n<p class=\"bar\">this is unstyled</p>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-class-dynamic/input.svelte",
    "content": "<script>\n\texport let unknown = 'whatever';\n</script>\n\n<p class='{unknown}'>this is styled</p>\n<p class='bar'>this is unstyled</p>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-class-static/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-class-static/expected.html",
    "content": "<p class=\"foo svelte-xyz\">this is styled</p>\n<p class=\"bar\">this is unstyled</p>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-class-static/input.svelte",
    "content": "<p class='foo'>this is styled</p>\n<p class='bar'>this is unstyled</p>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"div > p\"',\n\t\t\tstart: {\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 74\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 8,\n\t\t\t\tcharacter: 81\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant/expected.css",
    "content": "\t/* (unused) div > p {\n\t\tcolor: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant/expected.html",
    "content": "<div><section><p>this is not styled</p></section></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant/input.svelte",
    "content": "<div>\n\t<section>\n\t\t<p>this is not styled</p>\n\t</section>\n</div>\n\n<style>\n\tdiv > p {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner/expected.css",
    "content": "\tdiv.svelte-xyz > p {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner/expected.html",
    "content": "<div class=\"svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner/input.svelte",
    "content": "<div>\n\t<!-- html injected somehow -->\n</div>\n\n<style>\n\tdiv > :global(p) {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-class/expected.css",
    "content": "\t.foo.svelte-xyz .bar {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-class/expected.html",
    "content": "<div class=\"foo svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-class/input.svelte",
    "content": "<div class='foo'>\n\t<!-- html injected somehow -->\n</div>\n\n<style>\n\t.foo :global(.bar) {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-multiple/expected.css",
    "content": "\tdiv.svelte-xyz > p > em {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-multiple/expected.html",
    "content": "<div class=\"svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-inner-multiple/input.svelte",
    "content": "<div>\n\t<!-- html injected somehow -->\n</div>\n\n<style>\n\tdiv > :global(p) > :global(em) {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer/expected.css",
    "content": "\tdiv > p.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer/expected.html",
    "content": "<p class=\"svelte-xyz\">this may or may not be styled</p>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer/input.svelte",
    "content": "<p>this may or may not be styled</p>\n\n<style>\n\t:global(div) > p {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer-multiple/expected.css",
    "content": "\tdiv > section > p.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer-multiple/expected.html",
    "content": "<p class=\"svelte-xyz\">this may or may not be styled</p>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-descendant-global-outer-multiple/input.svelte",
    "content": "<p>this may or may not be styled</p>\n\n<style>\n\t:global(div) > :global(section) > p {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global/expected.css",
    "content": "\tdiv {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global/expected.html",
    "content": "<div></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global/input.svelte",
    "content": "<div></div>\n\n<style>\n\t:global(div) {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global-children/expected.css",
    "content": "\t.root.svelte-xyz p {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global-children/expected.html",
    "content": "<div class=\"root svelte-xyz\">\n\t<section class=\"whatever svelte-xyz\">\n\t</section>\n</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global-children/input.svelte",
    "content": "<script>\n\texport let unknown1 = 'root';\n\texport let unknown2 = 'whatever';\n</script>\n\n<style>\n\t.root :global(p) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div class={unknown1}>\n\t<section class={unknown2}>\n\t\t<!-- injected somehow -->\n\t</section>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global-descendants/expected.css",
    "content": "\thtml body .root.svelte-xyz p:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global-descendants/expected.html",
    "content": "<div class=\"root svelte-xyz\">\n\t<section class=\"whatever svelte-xyz\">\n\t\t<p class=\"svelte-xyz\">hello</p>\n\t</section>\n</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-global-descendants/input.svelte",
    "content": "<script>\n\texport let unknown1 = 'root';\n\texport let unknown2 = 'whatever';\n</script>\n\n<style>\n\t:global(html) :global(body) .root p {\n\t\tcolor: red;\n\t}\n</style>\n\n<div class={unknown1}>\n\t<section class={unknown2}>\n\t\t<p>hello</p>\n\t</section>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-id/expected.css",
    "content": "\t#foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-id/expected.html",
    "content": "<div class=\"svelte-xyz\" id=\"foo\"></div>\n<div id=\"bar\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-id/input.svelte",
    "content": "<div id='foo'></div>\n<div id='bar'></div>\n\n<style>\n\t#foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-multiple-descendants/expected.css",
    "content": "\t.root.svelte-xyz p:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-multiple-descendants/expected.html",
    "content": "<div class=\"root svelte-xyz\">\n\t<section class=\"whatever svelte-xyz\">\n\t\t<p class=\"svelte-xyz\">hello</p>\n\t</section>\n</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-multiple-descendants/input.svelte",
    "content": "<script>\n\texport let unknown1 = 'root';\n\texport let unknown2 = 'whatever';\n</script>\n\n<style>\n\t.root p {\n\t\tcolor: red;\n\t}\n</style>\n\n<div class={unknown1}>\n\t<section class={unknown2}>\n\t\t<p>hello</p>\n\t</section>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-whitespace/expected.css",
    "content": "\tdiv.svelte-xyz p:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-whitespace/expected.html",
    "content": "<div class=\"svelte-xyz\"><section><p class=\"svelte-xyz\">this is styled</p></section></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-whitespace/input.svelte",
    "content": "<div>\n\t<section>\n\t\t<p>this is styled</p>\n\t</section>\n</div>\n\n<style>\n\tdiv p {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-whitespace-multiple/expected.css",
    "content": "\tdiv.svelte-xyz section:where(.svelte-xyz) p:where(.svelte-xyz) {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-whitespace-multiple/expected.html",
    "content": "<div class=\"svelte-xyz\"><section class=\"svelte-xyz\"><p class=\"svelte-xyz\">this is styled</p></section></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/omit-scoping-attribute-whitespace-multiple/input.svelte",
    "content": "<div>\n\t<section>\n\t\t<p>this is styled</p>\n\t</section>\n</div>\n\n<style>\n\tdiv section p {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/preserve-specificity/expected.css",
    "content": "  a.svelte-xyz b:where(.svelte-xyz) c:where(.svelte-xyz) span:where(.svelte-xyz) {\n    color: red;\n    font-size: 2em;\n    font-family: 'Comic Sans MS';\n  }\n  .foo.svelte-xyz {\n    color: green;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/preserve-specificity/expected.html",
    "content": "<a class=\"svelte-xyz\">\n  <b class=\"svelte-xyz\">\n    <c class=\"svelte-xyz\">\n      <span class=\"svelte-xyz\">\n        Big red Comic Sans\n      </span>\n      <span class=\"foo svelte-xyz\">\n        Big red Comic Sans\n      </span>\n    </c>\n  </b>\n</a>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/preserve-specificity/input.svelte",
    "content": "<!-- svelte-ignore a11y_missing_attribute -->\n<a>\n  <b>\n    <c>\n      <span>\n        Big red Comic Sans\n      </span>\n      <span class='foo'>\n        Big red Comic Sans\n      </span>\n    </c>\n  </b>\n</a>\n\n<style>\n  a b c span {\n    color: red;\n    font-size: 2em;\n    font-family: 'Comic Sans MS';\n  }\n  .foo {\n    color: green;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/pseudo-element/expected.css",
    "content": "\tspan.svelte-xyz::after {\n\t\tcontent: 'i am a pseudo-element';\n\t}\n\n\tspan.svelte-xyz:first-child {\n\t\tcolor: red;\n\t}\n\n\tspan.svelte-xyz:last-child::after {\n\t\tcolor: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/pseudo-element/input.svelte",
    "content": "<span></span>\n\n<style>\n\tspan::after {\n\t\tcontent: 'i am a pseudo-element';\n\t}\n\n\tspan:first-child {\n\t\tcolor: red;\n\t}\n\n\tspan:last-child::after {\n\t\tcolor: blue;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/quote-mark-inside-string/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\tfont-family: 'メイ\"リオ';\n\t}"
  },
  {
    "path": "packages/svelte/tests/css/samples/quote-mark-inside-string/input.svelte",
    "content": "<div></div>\n\n<style>\n\tdiv {\n\t\tfont-family: 'メイ\"リオ';\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/render-tag-loop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/render-tag-loop/expected.css",
    "content": "\n\tdiv.svelte-xyz div:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tdiv.svelte-xyz + div:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tdiv.svelte-xyz:has(div:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n\tspan.svelte-xyz:has(~span:where(.svelte-xyz)) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/render-tag-loop/input.svelte",
    "content": "{#snippet a()}\n\t{@render b()}\n\t<div>\n\t\t{@render b()}\n\t</div>\n{/snippet}\n\n{#snippet b()}\n\t{@render a()}\n\t<div>\n\t\t{@render a()}\n\t</div>\n{/snippet}\n\n{#snippet c()}\n\t<span></span>\n\t{@render c()}\n{/snippet}\n\n<style>\n\tdiv div {\n\t\tcolor: green;\n\t}\n\tdiv + div {\n\t\tcolor: green;\n\t}\n\tdiv:has(div) {\n\t\tcolor: green;\n\t}\n\tspan:has(~span) {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/root/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":root .unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 18,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 190\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 18,\n\t\t\t\tcolumn: 15,\n\t\t\t\tcharacter: 203\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":root:has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 25,\n\t\t\t\tcolumn: 2,\n\t\t\t\tcharacter: 269\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 25,\n\t\t\t\tcolumn: 20,\n\t\t\t\tcharacter: 287\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 37,\n\t\t\t\tcolumn: 4,\n\t\t\t\tcharacter: 401\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 37,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 408\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 43,\n\t\t\t\tcolumn: 4,\n\t\t\t\tcharacter: 480\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 43,\n\t\t\t\tcolumn: 17,\n\t\t\t\tcharacter: 493\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"&:has(.unused)\"',\n\t\t\tstart: {\n\t\t\t\tline: 49,\n\t\t\t\tcolumn: 4,\n\t\t\t\tcharacter: 566\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 49,\n\t\t\t\tcolumn: 18,\n\t\t\t\tcharacter: 580\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/root/expected.css",
    "content": "\n  :root {\n    color: green;\n  }\n  .foo:root {\n    color: green;\n  }\n  :root.foo {\n    color: green;\n  }\n  :root.unknown {\n    color: green;\n  }\n\n  :root h1.svelte-xyz {\n    color: green;\n  }\n  /* (unused) :root .unused {\n    color: red;\n  }*/\n\n  :root:has(h1:where(.svelte-xyz)) {\n    color: green;\n  }\n  /* (unused) :root:has(.unused) {\n    color: red;\n  }*/\n\n  :root:not(.x) {\n    color: green;\n  }\n\n  :root {\n    h1.svelte-xyz {\n      color: green;\n    }\n    /* (unused) .unused {\n      color: red;\n    }*/\n    .svelte-xyz:has(h1:where(.svelte-xyz)) {\n      color: green;\n    }\n    /* (unused) :has(.unused) {\n      color: red;\n    }*/\n    &:has(h1.svelte-xyz) {\n      color: green;\n    }\n    /* (unused) &:has(.unused) {\n      color: red;\n    }*/\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/root/expected.html",
    "content": "<h1 class=\"svelte-xyz\">Hello!</h1>"
  },
  {
    "path": "packages/svelte/tests/css/samples/root/input.svelte",
    "content": "<style>\n  :root {\n    color: green;\n  }\n  .foo:root {\n    color: green;\n  }\n  :root.foo {\n    color: green;\n  }\n  :root.unknown {\n    color: green;\n  }\n\n  :root h1 {\n    color: green;\n  }\n  :root .unused {\n    color: red;\n  }\n\n  :root:has(h1) {\n    color: green;\n  }\n  :root:has(.unused) {\n    color: red;\n  }\n\n  :root:not(.x) {\n    color: green;\n  }\n\n  :root {\n    h1 {\n      color: green;\n    }\n    .unused {\n      color: red;\n    }\n    :has(h1) {\n      color: green;\n    }\n    :has(.unused) {\n      color: red;\n    }\n    &:has(h1) {\n      color: green;\n    }\n    &:has(.unused) {\n      color: red;\n    }\n  }\n</style>\n\n<h1>Hello!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/selectedcontent/expected.css",
    "content": "\n\tselect.svelte-xyz,\n\t.svelte-xyz::picker(select) {\n\t  appearance: base-select;\n\t}\n\tselectedcontent.svelte-xyz b:where(.svelte-xyz){\n\t\tcolor: red;\n\t}\n\te.svelte-xyz{\n\t\tselectedcontent:where(.svelte-xyz) &{\n\t\t\tcolor: green;\n\t\t}\n\t}\n\tselect.svelte-xyz > button:where(.svelte-xyz) > selectedcontent:where(.svelte-xyz) > b:where(.svelte-xyz) {\n\t\tcolor: blue;\n\t}\n\n\tselect.svelte-xyz > button:where(.svelte-xyz) > selectedcontent:where(.svelte-xyz) i:where(.svelte-xyz) {\n\t\tcolor: blue;\n\t}\n\n\tselectedcontent.svelte-xyz:has(b:where(.svelte-xyz)){\n\t\tbackground-color: rebeccapurple;\n\t}\n\n\tselectedcontent.svelte-xyz:has(i:where(.svelte-xyz)){\n\t\tbackground-color: rebeccapurple;\n\t}\n\n\toption.svelte-xyz > b:where(.svelte-xyz){\n\t\tcolor: orange;\n\t}\n\n\toption.svelte-xyz b:where(.svelte-xyz){\n\t\tcolor: #ff3e00;\n\t}\n\n\toption.svelte-xyz > b:where(.svelte-xyz) > i:where(.svelte-xyz){\n\t\ttext-decoration: underline;\n\t}\n\n\toption.svelte-xyz i:where(.svelte-xyz){\n\t\ttext-decoration: dashed;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/selectedcontent/input.svelte",
    "content": "<select>\n\t<button aria-label=\"Selected value\">\n\t\t<selectedcontent></selectedcontent>\n\t</button>\n\t<option>plain text</option>\n\t<option><b>rich <i>italic</i></b><e>content</e></option>\n</select>\n\n<style>\n\tselect,\n\t::picker(select) {\n\t  appearance: base-select;\n\t}\n\tselectedcontent b{\n\t\tcolor: red;\n\t}\n\te{\n\t\tselectedcontent &{\n\t\t\tcolor: green;\n\t\t}\n\t}\n\tselect > button > selectedcontent > b {\n\t\tcolor: blue;\n\t}\n\n\tselect > button > selectedcontent i {\n\t\tcolor: blue;\n\t}\n\n\tselectedcontent:has(b){\n\t\tbackground-color: rebeccapurple;\n\t}\n\n\tselectedcontent:has(i){\n\t\tbackground-color: rebeccapurple;\n\t}\n\n\toption > b{\n\t\tcolor: orange;\n\t}\n\n\toption b{\n\t\tcolor: #ff3e00;\n\t}\n\n\toption > b > i{\n\t\ttext-decoration: underline;\n\t}\n\n\toption i{\n\t\ttext-decoration: dashed;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/selector-list/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\tcolor: red;\n\t}\n\tdiv.svelte-xyz span:where(.svelte-xyz), div.svelte-xyz div:where(.svelte-xyz) {\n\t\tcolor: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/selector-list/expected.html",
    "content": "<div class=\"svelte-xyz\"><span class=\"svelte-xyz\">text</span><div class=\"svelte-xyz\">text</div></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/selector-list/input.svelte",
    "content": "<div>\n\t<span>text</span>\n\t<div>text</div>\n</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n\tdiv span, div div {\n\t\tcolor: blue;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"article + div\"',\n\t\t\tstart: { character: 45, column: 1, line: 5 },\n\t\t\tend: { character: 58, column: 14, line: 5 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span + article\"',\n\t\t\tstart: { character: 81, column: 1, line: 8 },\n\t\t\tend: { character: 95, column: 15, line: 8 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"b + article\"',\n\t\t\tstart: { character: 118, column: 1, line: 11 },\n\t\t\tend: { character: 129, column: 12, line: 11 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span + div\"',\n\t\t\tstart: { character: 152, column: 1, line: 14 },\n\t\t\tend: { character: 162, column: 11, line: 14 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator/expected.css",
    "content": "\tdiv.svelte-xyz + article:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* (unused) article + div {\n\t\tcolor: green;\n\t}*/\n\t/* (unused) span + article {\n\t\tcolor: green;\n\t}*/\n\t/* (unused) b + article {\n\t\tcolor: green;\n\t}*/\n\t/* (unused) span + div {\n\t\tcolor: green;\n\t}*/\n\tspan.svelte-xyz + b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tdiv.svelte-xyz span:where(.svelte-xyz) + b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t.a.svelte-xyz + article:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tdiv.svelte-xyz + .b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator/expected.html",
    "content": "<div class=\"a svelte-xyz\">\n  <span class=\"svelte-xyz\"></span>\n  <b class=\"svelte-xyz\"></b>\n</div>\n<article class=\"b svelte-xyz\"></article>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator/input.svelte",
    "content": "<style>\n\tdiv + article {\n\t\tcolor: green;\n\t}\n\tarticle + div {\n\t\tcolor: green;\n\t}\n\tspan + article {\n\t\tcolor: green;\n\t}\n\tb + article {\n\t\tcolor: green;\n\t}\n\tspan + div {\n\t\tcolor: green;\n\t}\n\tspan + b {\n\t\tcolor: green;\n\t}\n\tdiv span + b {\n\t\tcolor: green;\n\t}\n\t.a + article {\n\t\tcolor: green;\n\t}\n\tdiv + .b {\n\t\tcolor: green;\n\t}\n</style>\n\n<div class=\"a\">\n\t<span></span>\n\t<b></b>\n</div>\n<article class=\"b\"></article>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .e\"',\n\t\t\tstart: { character: 242, column: 1, line: 14 },\n\t\t\tend: { character: 249, column: 8, line: 14 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .c\"',\n\t\t\tstart: { character: 269, column: 1, line: 15 },\n\t\t\tend: { character: 276, column: 8, line: 15 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c + .d\"',\n\t\t\tstart: { character: 296, column: 1, line: 16 },\n\t\t\tend: { character: 303, column: 8, line: 16 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .d\"',\n\t\t\tstart: { character: 323, column: 1, line: 17 },\n\t\t\tend: { character: 330, column: 8, line: 17 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await/expected.css",
    "content": "\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .a + .e { color: green; }*/\n\t/* (unused) .b + .c { color: green; }*/\n\t/* (unused) .c + .d { color: green; }*/\n\t/* (unused) .b + .d { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b svelte-xyz\"></div>\n<div class=\"e svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await/input.svelte",
    "content": "<script>\n\tlet promise = Promise.resolve();\n</script>\n\n<style>\n\t.a + .b { color: green; }\n\t.a + .c { color: green; }\n\t.a + .d { color: green; }\n\t.b + .e { color: green; }\n\t.c + .e { color: green; }\n\t.d + .e { color: green; }\n\n\t/* no match */\n\t.a + .e { color: green; }\n\t.b + .c { color: green; }\n\t.c + .d { color: green; }\n\t.b + .d { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#await promise}\n\t<div class=\"b\"></div>\n{:then value}\n\t<div class=\"c\"></div>\n{:catch error}\n\t<div class=\"d\"></div>\n{/await}\n\n<div class=\"e\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await-not-exhaustive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await-not-exhaustive/expected.css",
    "content": "\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .h:where(.svelte-xyz) { color: green; }\n\n\t.b.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .e:where(.svelte-xyz) + .f:where(.svelte-xyz) + .h:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .d:where(.svelte-xyz) + .h:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await-not-exhaustive/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>\n<div class=\"f svelte-xyz\"></div>\n<div class=\"h svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-await-not-exhaustive/input.svelte",
    "content": "<script>\n\tlet promise = Promise.resolve();\n</script>\n\n<style>\n\t.a + .b { color: green; }\n\t.a + .c { color: green; }\n\t.a + .d { color: green; }\n\t.a + .e { color: green; }\n\t.a + .f { color: green; }\n\t.a + .g { color: green; }\n\t.a + .h { color: green; }\n\n\t.b + .d { color: green; }\n\t.c + .d { color: green; }\n\t.b + .e + .f + .h { color: green; }\n\t.b + .d + .h { color: green; }\n\t.c + .g { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#await promise then value}\n\t<div class=\"b\"></div>\n{:catch error}\n\t<div class=\"c\"></div>\n{/await}\n\n{#await promise}\n\t<div class=\"d\"></div>\n{:catch error}\n\t<div class=\"e\"></div>\n{/await}\n\n{#await promise}\n\t<div class=\"f\"></div>\n{:then error}\n\t<div class=\"g\"></div>\n{/await}\n\n<div class=\"h\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component/Child.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n</script>\n\n{@render foo()}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"n + m\"',\n\t\t\tend: {\n\t\t\t\tcharacter: 468,\n\t\t\t\tcolumn: 6,\n\t\t\t\tline: 36\n\t\t\t},\n\t\t\tstart: {\n\t\t\t\tcharacter: 463,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 36\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component/expected.css",
    "content": "\tx.svelte-xyz + y:where(.svelte-xyz) { color: green; }\n\tx.svelte-xyz + v:where(.svelte-xyz) { color: green; }\n\tx.svelte-xyz + z:where(.svelte-xyz) { color: green; }\n\ty.svelte-xyz + z:where(.svelte-xyz) { color: green; }\n\tv.svelte-xyz + z:where(.svelte-xyz) { color: green; }\n\t.component + z.svelte-xyz { color: green; }\n\n\t/* (unused) n + m { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component/input.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<div>\n\t<x></x>\n\t<Child>\n\t\t<y></y>\n\t\t{#snippet foo()}\n\t\t\t<v></v>\n\t\t{/snippet}\n\t</Child>\n\t<z></z>\n\n\t<Child>\n\t\t<span>\n\t\t\t<n></n>\n\t\t</span>\n\t\t{#snippet foo()}\n\t\t\t<span>\n\t\t\t\t<n></n>\n\t\t\t</span>\n\t\t{/snippet}\n\t</Child>\n\t<m></m>\n</div>\n\n<style>\n\tx + y { color: green; }\n\tx + v { color: green; }\n\tx + z { color: green; }\n\ty + z { color: green; }\n\tv + z { color: green; }\n\t:global(.component) + z { color: green; }\n\n\tn + m { color: red; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component-default-snippet/Child.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component-default-snippet/expected.css",
    "content": "\n\tx.svelte-xyz + y:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component-default-snippet/input.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<x></x>\n\n<Child>\n\t<y>this should be green</y>\n</Child>\n\n<style>\n\tx + y {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component-named-snippet/Child.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n</script>\n\n{@render foo()}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component-named-snippet/expected.css",
    "content": "\n\tx.svelte-xyz + y:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-component-named-snippet/input.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<x></x>\n\n<Child>\n\t{#snippet foo()}\n\t\t<y>this should be green</y>\n\t{/snippet}\n</Child>\n\n<style>\n\tx + y {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each/expected.css",
    "content": "\tdiv.svelte-xyz + span:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each/expected.html",
    "content": "<div class=\"svelte-xyz\"></div> <!----><span class=\"each svelte-xyz\"></span> <div class=\"each svelte-xyz\"></div> <span class=\"each svelte-xyz\"></span> <div class=\"each svelte-xyz\"></div> <span class=\"svelte-xyz\"></span>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each/input.svelte",
    "content": "<script>\n\tlet array = [1];\n</script>\n\n<style>\n\tdiv + span {\n\t\tcolor: green;\n\t}\n</style>\n\n<div></div>\n\n{#each array as item}\n\t<span class=\"each\"></span>\n\t<div class=\"each\"></div>\n\t<span class=\"each\"></span>\n\t<div class=\"each\"></div>\n{/each}\n\n<span></span>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .c\"',\n\t\t\tstart: { character: 320, column: 1, line: 26 },\n\t\t\tend: { character: 327, column: 8, line: 26 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-2/expected.css",
    "content": "\t/* boundary of each */\n\t.a.svelte-xyz + .b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t.c.svelte-xyz + .d:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* if array is empty */\n\t.a.svelte-xyz + .d:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* if array has multiple items */\n\t.c.svelte-xyz + .b:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* normal sibling */\n\t.b.svelte-xyz + .c:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* not match */\n\t/* (unused) .a + .c {\n\t\tcolor: green;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-2/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div> <!----><div class=\"b svelte-xyz\"></div> <div class=\"c svelte-xyz\"></div> <div class=\"d svelte-xyz\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-2/input.svelte",
    "content": "<script>\n\tlet array = [1];\n</script>\n\n<style>\n\t/* boundary of each */\n\t.a + .b {\n\t\tcolor: green;\n\t}\n\t.c + .d {\n\t\tcolor: green;\n\t}\n\t/* if array is empty */\n\t.a + .d {\n\t\tcolor: green;\n\t}\n\t/* if array has multiple items */\n\t.c + .b {\n\t\tcolor: green;\n\t}\n\t/* normal sibling */\n\t.b + .c {\n\t\tcolor: green;\n\t}\n\t/* not match */\n\t.a + .c {\n\t\tcolor: green;\n\t}\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as item}\n\t<div class=\"b\"></div>\n\t<div class=\"c\"></div>\n{/each}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .d\"',\n\t\t\tstart: { character: 171, column: 1, line: 12 },\n\t\t\tend: { character: 178, column: 8, line: 12 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .c\"',\n\t\t\tstart: { character: 198, column: 1, line: 13 },\n\t\t\tend: { character: 205, column: 8, line: 13 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else/expected.css",
    "content": "\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .a + .d { color: green; }*/\n\t/* (unused) .b + .c { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"c svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else/input.svelte",
    "content": "<script>\n\tlet array = [];\n</script>\n\n<style>\n\t.a + .b { color: green; }\n\t.a + .c { color: green; }\n\t.b + .d { color: green; }\n\t.c + .d { color: green; }\n\n\t/* no match */\n\t.a + .d { color: green; }\n\t.b + .c { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as item}\n\t<div class=\"b\"></div>\n{:else}\n\t<div class=\"c\"></div>\n{/each}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .c\"',\n\t\t\tstart: { character: 586, column: 1, line: 27 },\n\t\t\tend: { character: 593, column: 8, line: 27 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .e\"',\n\t\t\tstart: { character: 611, column: 1, line: 28 },\n\t\t\tend: { character: 618, column: 8, line: 28 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".d + .d\"',\n\t\t\tstart: { character: 636, column: 1, line: 29 },\n\t\t\tend: { character: 643, column: 8, line: 29 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".e + .f\"',\n\t\t\tstart: { character: 661, column: 1, line: 30 },\n\t\t\tend: { character: 668, column: 8, line: 30 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".f + .f\"',\n\t\t\tstart: { character: 686, column: 1, line: 31 },\n\t\t\tend: { character: 693, column: 8, line: 31 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".g + .h + .i + .j\"',\n\t\t\tstart: { character: 711, column: 1, line: 32 },\n\t\t\tend: { character: 728, column: 18, line: 32 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else-nested/expected.css",
    "content": "\n\t.a.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .k:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz + .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz + .h:where(.svelte-xyz) + .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz + .i:where(.svelte-xyz) + .j:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz + .j:where(.svelte-xyz) { color: green; }\n\t.m.svelte-xyz + .m:where(.svelte-xyz) { color: green; }\n\t.m.svelte-xyz + .l:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz + .m:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .a + .c { color: red; }*/\n\t/* (unused) .b + .e { color: red; }*/\n\t/* (unused) .d + .d { color: red; }*/\n\t/* (unused) .e + .f { color: red; }*/\n\t/* (unused) .f + .f { color: red; }*/\n\t/* (unused) .g + .h + .i + .j { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else-nested/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"f svelte-xyz\"></div>\n<div class=\"k svelte-xyz\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-else-nested/input.svelte",
    "content": "<script>\n\tlet array = [];\n</script>\n\n<style>\n\t.a + .e { color: green; }\n\t.a + .f { color: green; }\n\t.a + .g { color: green; }\n\t.b + .c { color: green; }\n\t.b + .d { color: green; }\n\t.c + .e { color: green; }\n\t.c + .f { color: green; }\n\t.c + .g { color: green; }\n\t.c + .k { color: green; }\n\t.d + .e { color: green; }\n\t.d + .f { color: green; }\n\t.e + .e { color: green; }\n\t.i + .j { color: green; }\n\t.g + .h + .j { color: green; }\n\t.g + .i + .j { color: green; }\n\t.g + .j { color: green; }\n\t.m + .m { color: green; }\n\t.m + .l { color: green; }\n\t.l + .m { color: green; }\n\n\t/* no match */\n\t.a + .c { color: red; }\n\t.b + .e { color: red; }\n\t.d + .d { color: red; }\n\t.e + .f { color: red; }\n\t.f + .f { color: red; }\n\t.g + .h + .i + .j { color: red; }\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as a}\n\t<div class=\"b\"></div>\n\t{#each array as b}\n\t\t<div class=\"c\"></div>\n\t{:else}\n\t\t<div class=\"d\"></div>\n\t{/each}\n{/each}\n\n{#each array as c}\n\t{#each array as d}\n\t\t<div class=\"e\"></div>\n\t{/each}\n{:else}\n\t<div class=\"f\"></div>\n{/each}\n\n{#each array as item}\n\t<div class=\"g\"></div>\n\t{#each array as item}\n\t\t{#each array as item}\n\t\t\t<div class=\"h\"></div>\n\t\t{/each}\n\t{:else}\n\t\t<div class=\"i\"></div>\n\t{/each}\n\t<div class=\"j\"></div>\n{/each}\n\n<div class=\"k\"></div>\n\n{#each array as item}\n\t{#each array as item}\n\t\t<div class=\"l\"></div>\n\t{:else}\n\t\t<div class=\"m\"></div>\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .h\"',\n\t\t\tstart: { character: 1229, column: 1, line: 58 },\n\t\t\tend: { character: 1236, column: 8, line: 58 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .i\"',\n\t\t\tstart: { character: 1256, column: 1, line: 59 },\n\t\t\tend: { character: 1263, column: 8, line: 59 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c + .h\"',\n\t\t\tstart: { character: 1283, column: 1, line: 60 },\n\t\t\tend: { character: 1290, column: 8, line: 60 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c + .i\"',\n\t\t\tstart: { character: 1310, column: 1, line: 61 },\n\t\t\tend: { character: 1317, column: 8, line: 61 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".d + .f\"',\n\t\t\tstart: { character: 1337, column: 1, line: 62 },\n\t\t\tend: { character: 1344, column: 8, line: 62 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".d + .g\"',\n\t\t\tstart: { character: 1364, column: 1, line: 63 },\n\t\t\tend: { character: 1371, column: 8, line: 63 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".e + .g\"',\n\t\t\tstart: { character: 1391, column: 1, line: 64 },\n\t\t\tend: { character: 1398, column: 8, line: 64 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".g + .i\"',\n\t\t\tstart: { character: 1418, column: 1, line: 65 },\n\t\t\tend: { character: 1425, column: 8, line: 65 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-nested/expected.css",
    "content": "\t/* boundary of each */\n\t.a.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\n\t/* nested boundary of each */\n\t.j.svelte-xyz + .m:where(.svelte-xyz) { color: green; }\n\t.j.svelte-xyz + .n:where(.svelte-xyz) { color: green; }\n\t.j.svelte-xyz + .o:where(.svelte-xyz) { color: green; }\n\t.k.svelte-xyz + .m:where(.svelte-xyz) { color: green; }\n\t.k.svelte-xyz + .n:where(.svelte-xyz) { color: green; }\n\t.k.svelte-xyz + .o:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz + .m:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz + .n:where(.svelte-xyz) { color: green; }\n\t.l.svelte-xyz + .o:where(.svelte-xyz) { color: green; }\n\n\t/* parent each */\n\t.d.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\n\t/* child each */\n\t.g.svelte-xyz + .h:where(.svelte-xyz) { color: green; }\n\n\t/* wrap around */\n\t.f.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\n\t.h.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz + .h:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\n\t/* wrap around self */\n\t.d.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.f.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\t.g.svelte-xyz + .g:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz + .h:where(.svelte-xyz) { color: green; }\n\t.i.svelte-xyz + .i:where(.svelte-xyz) { color: green; }\n\n\t/* wrap around self + next */\n\t.e.svelte-xyz + .e:where(.svelte-xyz) + .f:where(.svelte-xyz) { color: green; }\n\t.e.svelte-xyz + .e:where(.svelte-xyz) + .d:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz + .h:where(.svelte-xyz) + .i:where(.svelte-xyz) { color: green; }\n\t.h.svelte-xyz + .h:where(.svelte-xyz) + .g:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .a + .h { color: green; }*/\n\t/* (unused) .a + .i { color: green; }*/\n\t/* (unused) .c + .h { color: green; }*/\n\t/* (unused) .c + .i { color: green; }*/\n\t/* (unused) .d + .f { color: green; }*/\n\t/* (unused) .d + .g { color: green; }*/\n\t/* (unused) .e + .g { color: green; }*/\n\t/* (unused) .g + .i { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-nested/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b\"></div>\n<div class=\"c svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>\n<div class=\"e svelte-xyz\"></div>\n<div class=\"f svelte-xyz\"></div>\n<div class=\"g svelte-xyz\"></div>\n<div class=\"h svelte-xyz\"></div>\n<div class=\"i svelte-xyz\"></div>\n<div class=\"j svelte-xyz\"></div>\n<div class=\"k svelte-xyz\"></div>\n<div class=\"l svelte-xyz\"></div>\n<div class=\"m svelte-xyz\"></div>\n<div class=\"n svelte-xyz\"></div>\n<div class=\"o svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-each-nested/input.svelte",
    "content": "<script>\n\tlet array = [1];\n</script>\n\n<style>\n\t/* boundary of each */\n\t.a + .d { color: green; }\n\t.a + .e { color: green; }\n\t.a + .f { color: green; }\n\t.a + .g { color: green; }\n\t.c + .d { color: green; }\n\t.c + .e { color: green; }\n\t.c + .f { color: green; }\n\t.c + .g { color: green; }\n\n\t/* nested boundary of each */\n\t.j + .m { color: green; }\n\t.j + .n { color: green; }\n\t.j + .o { color: green; }\n\t.k + .m { color: green; }\n\t.k + .n { color: green; }\n\t.k + .o { color: green; }\n\t.l + .m { color: green; }\n\t.l + .n { color: green; }\n\t.l + .o { color: green; }\n\n\t/* parent each */\n\t.d + .e { color: green; }\n\t.e + .f { color: green; }\n\n\t/* child each */\n\t.g + .h { color: green; }\n\n\t/* wrap around */\n\t.f + .d { color: green; }\n\t.f + .e { color: green; }\n\t.f + .f { color: green; }\n\n\t.h + .g { color: green; }\n\t.i + .h { color: green; }\n\t.i + .g { color: green; }\n\n\t/* wrap around self */\n\t.d + .d { color: green; }\n\t.e + .e { color: green; }\n\t.f + .f { color: green; }\n\t.g + .g { color: green; }\n\t.h + .h { color: green; }\n\t.i + .i { color: green; }\n\n\t/* wrap around self + next */\n\t.e + .e + .f { color: green; }\n\t.e + .e + .d { color: green; }\n\t.h + .h + .i { color: green; }\n\t.h + .h + .g { color: green; }\n\n\t/* no match */\n\t.a + .h { color: green; }\n\t.a + .i { color: green; }\n\t.c + .h { color: green; }\n\t.c + .i { color: green; }\n\t.d + .f { color: green; }\n\t.d + .g { color: green; }\n\t.e + .g { color: green; }\n\t.g + .i { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#each array as item}\n\t<div class=\"b\"></div>\n\t<div class=\"c\"></div>\n{/each}\n\n{#each array as item}\n\t{#each array as item}\n\t\t{#each array as item}\n\t\t\t<div class=\"d\"></div>\n\t\t{/each}\n\t\t<div class=\"e\"></div>\n\t{/each}\n\t<div class=\"f\"></div>\n{/each}\n\n{#each array as item}\n\t<div class=\"g\"></div>\n\t{#each array as item}\n\t\t<div class=\"h\"></div>\n\t\t{#each array as item}\n\t\t\t<div class=\"i\"></div>\n\t\t{/each}\n\t{/each}\n{/each}\n\n{#each array as item}\n\t<div class=\"j\"></div>\n\t{#each array as item}\n\t\t<div class=\"k\"></div>\n\t\t{#each array as item}\n\t\t\t<div class=\"l\"></div>\n\t\t{/each}\n\t{/each}\n{/each}\n\n{#each array as item}\n\t{#each array as item}\n\t\t{#each array as item}\n\t\t\t<div class=\"m\"></div>\n\t\t{/each}\n\t\t<div class=\"n\"></div>\n\t{/each}\n\t<div class=\"o\"></div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-former-element-in-slot/expected.css",
    "content": "  h1.svelte-xyz + span:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-former-element-in-slot/input.svelte",
    "content": "<slot>\n  <h1>test</h1>\n</slot>\n<span>Hello</span>\n\n<style>\n  h1 + span {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(input) + span\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 239,\n\t\t\t\tcolumn: 2,\n\t\t\t\tline: 9\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 260,\n\t\t\t\tcolumn: 23,\n\t\t\t\tline: 9\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \":global(input) ~ span\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 279,\n\t\t\t\tcolumn: 2,\n\t\t\t\tline: 10\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 300,\n\t\t\t\tcolumn: 23,\n\t\t\t\tline: 10\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-global/expected.css",
    "content": "  input + div.svelte-xyz { color: red; }\n  input ~ div.svelte-xyz { color: red; }\n  input + h1.svelte-xyz { color: red; }\n  input ~ h1.svelte-xyz { color: red; }\n  input + p.svelte-xyz { color: red; }\n  input ~ p.svelte-xyz { color: red; }\n\n  /* (unused) :global(input) + span { color: red; }*/\n  /* (unused) :global(input) ~ span { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-global/input.svelte",
    "content": "<style>\n  :global(input) + div { color: red; }\n  :global(input) ~ div { color: red; }\n  :global(input) + h1 { color: red; }\n  :global(input) ~ h1 { color: red; }\n  :global(input) + p { color: red; }\n  :global(input) ~ p { color: red; }\n\n  :global(input) + span { color: red; }\n  :global(input) ~ span { color: red; }\n</style>\n\n<h1>Hello!</h1>\n\n<div>\n  <span>World!</span>\n</div>\n\n{#each [] as _}\n  <p></p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .e\"',\n\t\t\tstart: { character: 242, column: 1, line: 15 },\n\t\t\tend: { character: 249, column: 8, line: 15 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .c\"',\n\t\t\tstart: { character: 269, column: 1, line: 16 },\n\t\t\tend: { character: 276, column: 8, line: 16 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .d\"',\n\t\t\tstart: { character: 296, column: 1, line: 17 },\n\t\t\tend: { character: 303, column: 8, line: 17 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".c + .d\"',\n\t\t\tstart: { character: 323, column: 1, line: 18 },\n\t\t\tend: { character: 330, column: 8, line: 18 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if/expected.css",
    "content": "\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.d.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .a + .e { color: green; }*/\n\t/* (unused) .b + .c { color: green; }*/\n\t/* (unused) .b + .d { color: green; }*/\n\t/* (unused) .c + .d { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b svelte-xyz\"></div>\n<div class=\"e svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if/input.svelte",
    "content": "<script>\n\tlet foo = true;\n\tlet bar = true;\n</script>\n\n<style>\n\t.a + .b { color: green; }\n\t.a + .c { color: green; }\n\t.a + .d { color: green; }\n\t.b + .e { color: green; }\n\t.c + .e { color: green; }\n\t.d + .e { color: green; }\n\n\t/* no match */\n\t.a + .e { color: green; }\n\t.b + .c { color: green; }\n\t.b + .d { color: green; }\n\t.c + .d { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#if foo}\n\t<div class=\"b\"></div>\n{:else if bar}\n\t<div class=\"c\"></div>\n{:else}\n\t<div class=\"d\"></div>\n{/if}\n\n<div class=\"e\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .c\"',\n\t\t\tstart: { character: 215, column: 1, line: 14 },\n\t\t\tend: { character: 222, column: 8, line: 14 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive/expected.css",
    "content": "\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b + .c { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"b svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive/input.svelte",
    "content": "<script>\n\tlet foo = true;\n\tlet bar = true;\n</script>\n\n<style>\n\t.a + .b { color: green; }\n\t.a + .c { color: green; }\n\t.a + .d { color: green; }\n\t.b + .d { color: green; }\n\t.c + .d { color: green; }\n\n\t/* no match */\n\t.b + .c { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#if foo}\n\t<div class=\"b\"></div>\n{:else if bar}\n\t<div class=\"c\"></div>\n{/if}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive-with-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .c\"',\n\t\t\tstart: { character: 319, column: 1, line: 18 },\n\t\t\tend: { character: 326, column: 8, line: 18 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive-with-each/expected.css",
    "content": "\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .d:where(.svelte-xyz) { color: green; }\n\n\t.a.svelte-xyz + .c:where(.svelte-xyz) + .c:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .c:where(.svelte-xyz) + .d:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .c:where(.svelte-xyz) + .c:where(.svelte-xyz) + .d:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b + .c { color: green; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive-with-each/expected.html",
    "content": "<div class=\"a svelte-xyz\"></div>\n<div class=\"c svelte-xyz\"></div>\n<div class=\"d svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-if-not-exhaustive-with-each/input.svelte",
    "content": "<script>\n\tlet foo = false;\n\tlet array = [1];\n</script>\n\n<style>\n\t.a + .b { color: green; }\n\t.a + .c { color: green; }\n\t.a + .d { color: green; }\n\t.b + .d { color: green; }\n\t.c + .d { color: green; }\n\n\t.a + .c + .c { color: green; }\n\t.c + .c + .d { color: green; }\n\t.a + .c + .c + .d { color: green; }\n\n\t/* no match */\n\t.b + .c { color: green; }\n</style>\n\n<div class=\"a\"></div>\n\n{#if foo}\n\t<div class=\"b\"></div>\n{:else}\n\t{#each array as item}\n\t\t<div class=\"c\"></div>\n\t{/each}\n{/if}\n\n<div class=\"d\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-key/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".a + .c\"',\n\t\t\tstart: { character: 166, column: 1, line: 14 },\n\t\t\tend: { character: 173, column: 8, line: 14 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-key/expected.css",
    "content": "\n\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.b.svelte-xyz + .c:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .a + .c { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-key/input.svelte",
    "content": "<div class=\"a\"></div>\n\n{#key x}\n\t<div class=\"b\"></div>\n{/key}\n\n<div class=\"c\"></div>\n\n<style>\n\t.a + .b { color: green; }\n\t.b + .c { color: green; }\n\n\t/* no match */\n\t.a + .c { color: red; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-missing-fallback/expected.css",
    "content": "\n\tx.svelte-xyz + z:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-missing-fallback/input.svelte",
    "content": "<x></x>\n\n<slot>\n\t<y>fallback content</y>\n</slot>\n\n<z>this should be green if the slot fallback is not rendered</z>\n\n<style>\n\tx + z {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-nested-slots/expected.css",
    "content": "  h1.svelte-xyz + span:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-nested-slots/input.svelte",
    "content": "<slot>\n  <slot>\n    <slot>\n      <h1>test</h1>\n    </slot>\n  </slot>\n</slot>\n<slot>\n  <slot>\n    <span>Hello</span>\n  </slot>\n</slot>\n\n<style>\n  h1 + span {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-nested-slots-flattened/expected.css",
    "content": "  h1.svelte-xyz + span:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-nested-slots-flattened/input.svelte",
    "content": "<slot><slot><slot><h1>test</h1></slot></slot></slot><slot><slot><span>Hello</span></slot></slot>\n\n<style>\n  h1 + span {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-render-tag/expected.css",
    "content": "\n\th1.svelte-xyz + p:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-render-tag/input.svelte",
    "content": "{#snippet foo()}\n\t<p>this should be green</p>\n{/snippet}\n\n<h1>Hello</h1>\n\n{@render foo()}\n\n<style>\n\th1 + p {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-selects-slot-fallback/expected.css",
    "content": "  h1.svelte-xyz + span:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-selects-slot-fallback/input.svelte",
    "content": "<h1>test</h1>\n<slot>\n  <span>Hello</span>\n</slot>\n\n<style>\n  h1 + span {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".b + .c\"',\n\t\t\tstart: { character: 137, column: 1, line: 11 },\n\t\t\tend: { character: 144, column: 8, line: 11 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slot/expected.css",
    "content": "\n\t.d.svelte-xyz + .e:where(.svelte-xyz) { color: green; }\n\t.a.svelte-xyz + .b:where(.svelte-xyz) { color: green; }\n\t.c.svelte-xyz + .f:where(.svelte-xyz) { color: green; }\n\n\t/* no match */\n\t/* (unused) .b + .c { color: red; }*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slot/input.svelte",
    "content": "<script>\n\tlet App;\n</script>\n\n<style>\n\t.d + .e { color: green; }\n\t.a + .b { color: green; }\n\t.c + .f { color: green; }\n\n\t/* no match */\n\t.b + .c { color: red; }\n</style>\n\n<div class=\"a\"></div>\n<App>\n\t<div class=\"b\" slot=\"a\"></div>\n\n\t<div class=\"c\" slot=\"b\">\n\t\t<div class=\"d\"></div>\n\t\t<div class=\"e\"></div>\n\t</div>\n</App>\n\n<div class=\"f\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slot-named-between-default/Child.svelte",
    "content": "<slot />\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slot-named-between-default/expected.css",
    "content": "\n\t.a.svelte-xyz + .c:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slot-named-between-default/input.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child>\n\t<div class=\"a\">a</div>\n\t<div class=\"b\" slot=\"wut\">b</div>\n\t<div class=\"c\">c</div>\n</Child>\n\n<style>\n\t.a + .c {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slots-between/expected.css",
    "content": "  h1.svelte-xyz + span:where(.svelte-xyz) {\n    color: red;\n  }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-slots-between/input.svelte",
    "content": "<h1>test</h1>\n<slot name=\"a\"></slot>\n<slot name=\"b\"></slot>\n<slot name=\"c\"></slot>\n<span>Hello</span>\n\n<style>\n  h1 + span {\n    color: red;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-star/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".not-match > * + *\"',\n\t\t\tstart: { character: 50, column: 1, line: 5 },\n\t\t\tend: { character: 68, column: 19, line: 5 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-star/expected.css",
    "content": "\t.match.svelte-xyz > :where(.svelte-xyz) + :where(.svelte-xyz) {\n\t\tmargin-left: 4px;\n\t}\n\t/* (unused) .not-match > * + * {\n\t\tmargin-left: 4px;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-star/expected.html",
    "content": "<div class=\"not-match\">\n  <div></div>\n</div>\n<div class=\"match svelte-xyz\">\n  <div class=\"svelte-xyz\"></div>\n  <div class=\"svelte-xyz\"></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-star/input.svelte",
    "content": "<style>\n\t.match > * + * {\n\t\tmargin-left: 4px;\n\t}\n\t.not-match > * + * {\n\t\tmargin-left: 4px;\n\t}\n</style>\n\n<div class=\"not-match\">\n\t<div></div>\n</div>\n\n<div class=\"match\">\n\t<div></div>\n\t<div></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-with-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-with-spread/expected.css",
    "content": "\tinput.svelte-xyz:focus + div:where(.svelte-xyz) { color: red; }\n\tinput.svelte-xyz:focus ~ div:where(.svelte-xyz) { color: red; }\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-with-spread/expected.html",
    "content": "<input placeholder=\"Text\" class=\"svelte-xyz\">\n<div class=\"svelte-xyz\">Should be red, when input is focused</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/siblings-combinator-with-spread/input.svelte",
    "content": "<script>\n\tconst test = { placeholder: 'Text' };\n</script>\n\n<style>\n\tinput:focus + div { color: red; }\n\tinput:focus ~ div { color: red; }\n</style>\n\n<input {...test}>\n<div>Should be red, when input is focused</div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/snippets/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"p .foo\"',\n\t\t\tstart: {\n\t\t\t\tline: 28,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 356\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 28,\n\t\t\t\tcolumn: 7,\n\t\t\t\tcharacter: 362\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"span div\"',\n\t\t\tstart: {\n\t\t\t\tline: 31,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 383\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 31,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 391\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/snippets/expected.css",
    "content": "\n\tdiv.svelte-xyz > span:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tdiv.svelte-xyz span:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\tdiv.svelte-xyz span {\n\t\tcolor: green;\n\t}\n\tp.svelte-xyz span:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n\t/* (unused) p .foo {\n\t\tcolor: red;\n\t}*/\n\t/* (unused) span div {\n\t\tcolor: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/snippets/expected.html",
    "content": "<div class=\"svelte-xyz\"><span class=\"svelte-xyz\">Hello world</span></div>\n<p class=\"svelte-xyz\"><strong><span class=\"svelte-xyz\">Hello world</span></strong></p>"
  },
  {
    "path": "packages/svelte/tests/css/samples/snippets/input.svelte",
    "content": "{#snippet my_snippet()}\n  <span>Hello world</span>\n{/snippet}\n\n<div>{@render my_snippet()}</div>\n\n<p>\n\t{#snippet my_snippet()}\n\t\t<span>Hello world</span>\n\t{/snippet}\n\n\t<strong>{@render my_snippet()}</strong>\n</p>\n\n<style>\n\tdiv > span {\n\t\tcolor: green;\n\t}\n\tdiv span {\n\t\tcolor: green;\n\t}\n\tdiv :global(span) {\n\t\tcolor: green;\n\t}\n\tp span {\n\t\tcolor: green;\n\t}\n\tp .foo {\n\t\tcolor: red;\n\t}\n\tspan div {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/snippets-elements/expected.css",
    "content": "\n\tx.svelte-xyz y:where(.svelte-xyz) {\n\t\tcolor: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/snippets-elements/input.svelte",
    "content": "{#snippet foo()}\n\t<x>\n\t\t<y></y>\n\t</x>\n{/snippet}\n\n{@render foo()}\n\n<style>\n\tx y {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/special-characters/expected.css",
    "content": "\n\t[foo='{;}'].svelte-xyz {\n\t\tcontent: \"{};[]\";\n\n\t\t/* [] ; { } */\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/special-characters/input.svelte",
    "content": "<x foo={'{;}'}></x>\n\n<style>\n\t[foo='{;}'] {\n\t\tcontent: \"{};[]\";\n\n\t\t/* [] ; { } */\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/spread/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\tcolor: red;\n\t\tfont-size: 2em;\n\t\tfont-family: 'Comic Sans MS';\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/spread/input.svelte",
    "content": "<script>\n\texport let props;\n</script>\n\n<div {...props} >\n\tBig red Comic Sans\n</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t\tfont-size: 2em;\n\t\tfont-family: 'Comic Sans MS';\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-charset/expected.css",
    "content": "\t@charset \"utf-8\";\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-charset/input.svelte",
    "content": "<style>\n\t@charset \"utf-8\";\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-font-face/expected.css",
    "content": "\t@font-face {\n\t\tfont-family: MyHelvetica;\n\t\tsrc: local('Helvetica Neue Bold'), local('HelveticaNeue-Bold'), url(MgOpenModernaBold.ttf);\n\t\tfont-weight: bold;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-font-face/input.svelte",
    "content": "<style>\n\t@font-face {\n\t\tfont-family: MyHelvetica;\n\t\tsrc: local('Helvetica Neue Bold'), local('HelveticaNeue-Bold'), url(MgOpenModernaBold.ttf);\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-import/expected.css",
    "content": "\t@import 'custom.css';\n\t@import \"common.css\" screen;\n\t@import url(chrome://communicator/skin/);\n\t@import url(fineprint.css) print;\n\t@import url(landscape.css) screen and (orientation:landscape);\n\t@import url(red.css) (min-width:400px);\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-import/input.svelte",
    "content": "<style>\n\t@import 'custom.css';\n\t@import \"common.css\" screen;\n\t@import url(chrome://communicator/skin/);\n\t@import url(fineprint.css) print;\n\t@import url(landscape.css) screen and (orientation:landscape);\n\t@import url(red.css) (min-width:400px);\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-namespace/expected.css",
    "content": "\t@namespace url(http://www.w3.org/1999/xhtml);\n\t@namespace svg url(http://www.w3.org/2000/svg);\n\n\t/* This matches all XHTML <a> elements, as XHTML is the default unprefixed namespace */\n\ta {\n\t\tcolor: blue;\n\t}\n\n\t/* This matches all SVG <a> elements */\n\tsvg|a {\n\t\tcolor: green;\n\t}\n\n\t/* This matches both XHTML and SVG <a> elements */\n\t*|a {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-namespace/input.svelte",
    "content": "<style>\n\t@namespace url(http://www.w3.org/1999/xhtml);\n\t@namespace svg url(http://www.w3.org/2000/svg);\n\n\t/* This matches all XHTML <a> elements, as XHTML is the default unprefixed namespace */\n\t:global(a) {\n\t\tcolor: blue;\n\t}\n\n\t/* This matches all SVG <a> elements */\n\t:global(svg|a) {\n\t\tcolor: green;\n\t}\n\n\t/* This matches both XHTML and SVG <a> elements */\n\t:global(*|a) {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-nested-page/expected.css",
    "content": "\t@page vertical {\n\t\tsize: A4 portrait;\n\t\t@top-center {\n\t\t\tcontent: \"Vertical\";\n\t\t}\n\t}\n\n\t@page :right {\n\t\t@top-center {\n\t\t\tcontent: \"Preliminary edition\";\n\t\t}\n\n\t\t@bottom-center {\n\t\t\tcontent: counter(page);\n\t\t}\n\t}\n\n\t@page :first {\n\t\tcolor: green;\n\t\tfont-size: 20pt;\n\n\t\t@top-left {\n\t\t\tcontent: \"foo\";\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t@top-right {\n\t\t\tcontent: \"bar\";\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-nested-page/input.svelte",
    "content": "<style>\n\t@page vertical {\n\t\tsize: A4 portrait;\n\t\t@top-center {\n\t\t\tcontent: \"Vertical\";\n\t\t}\n\t}\n\n\t@page :right {\n\t\t@top-center {\n\t\t\tcontent: \"Preliminary edition\";\n\t\t}\n\n\t\t@bottom-center {\n\t\t\tcontent: counter(page);\n\t\t}\n\t}\n\n\t@page :first {\n\t\tcolor: green;\n\t\tfont-size: 20pt;\n\n\t\t@top-left {\n\t\t\tcontent: \"foo\";\n\t\t\tcolor: blue;\n\t\t}\n\n\t\t@top-right {\n\t\t\tcontent: \"bar\";\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-page/expected.css",
    "content": "\t@page{\n\t\tmargin: 1cm;\n\t\tsize: A4;\n\t\tbleed: 7pt;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-page/input.svelte",
    "content": "<style>\n\t@page{\n\t\tmargin: 1cm;\n\t\tsize: A4;\n\t\tbleed: 7pt;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-query/expected.css",
    "content": "\t@supports (display: grid) {\n\t\t.maybe-grid.svelte-xyz {\n\t\t\tdisplay: grid;\n\t\t}\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/supports-query/input.svelte",
    "content": "<div class='maybe-grid'>something with a nice layout</div>\n\n<style>\n\t@supports (display: grid) {\n\t\t.maybe-grid {\n\t\t\tdisplay: grid;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/undefined-with-scope/expected.css",
    "content": "p.svelte-xyz { color: red; }"
  },
  {
    "path": "packages/svelte/tests/css/samples/undefined-with-scope/expected.html",
    "content": "<p class=\"svelte-xyz\">Foo</p>\n<p class=\"svelte-xyz\">Bar</p>"
  },
  {
    "path": "packages/svelte/tests/css/samples/undefined-with-scope/input.svelte",
    "content": "<style>p { color: red; }</style>\n\n<p class={undefined}>Foo</p>\n<p class=\"{undefined}\">Bar</p>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unicode-identifier/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".\\\\61  sdf\"',\n\t\t\tstart: {\n\t\t\t\tline: 22,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 465\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 22,\n\t\t\t\tcolumn: 10,\n\t\t\t\tcharacter: 474\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".\\\\61\\n\\tsdf\"',\n\t\t\tstart: {\n\t\t\t\tline: 23,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 492\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 24,\n\t\t\t\tcolumn: 4,\n\t\t\t\tcharacter: 501\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".\\\\61\\n sdf\"',\n\t\t\tstart: {\n\t\t\t\tline: 25,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 519\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 26,\n\t\t\t\tcolumn: 4,\n\t\t\t\tcharacter: 528\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"#\\\\31span\"',\n\t\t\tstart: {\n\t\t\t\tline: 28,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 547\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 28,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 555\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"#\\\\31 span\"',\n\t\t\tstart: {\n\t\t\t\tline: 29,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 573\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 29,\n\t\t\t\tcolumn: 10,\n\t\t\t\tcharacter: 582\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unicode-identifier/expected.css",
    "content": "\t#\\31\\32\\33 .svelte-xyz{ color: green; }\n\t#\\31 23.svelte-xyz { color: green; }\n\t#line\\a break.svelte-xyz { color: green; }\n\t#line\\a\nbreak.svelte-xyz { color: green; }\n\t#line\\00000abreak.svelte-xyz { color: green; }\n\t#line\\00000a break.svelte-xyz { color: green; }\n\t#line\\00000a\tbreak.svelte-xyz { color: green; }\n\t.a\\1f642 b.svelte-xyz { color: green; }\n\n\t.\\61sdf.svelte-xyz { color: green; }\n\n\t/* (unused) .\\61  sdf { color: red; }*/\n\t/* (unused) .\\61\n\tsdf { color: red; }*/\n\t/* (unused) .\\61\n sdf { color: red; }*/\n\n\t/* (unused) #\\31span { color: red; }*/\n\t/* (unused) #\\31 span { color: red; }*/\n\t#\\31 .svelte-xyz span:where(.svelte-xyz) { color: green; }"
  },
  {
    "path": "packages/svelte/tests/css/samples/unicode-identifier/expected.html",
    "content": "<div id=\"123\" class=\"svelte-xyz\"></div>\n<div class=\"svelte-xyz\" id=\"line\nbreak\"></div>\n<div class=\"a🙂b svelte-xyz\"></div>\n<div class=\"asdf svelte-xyz\"></div>\n<div class=\"&#97;sdf svelte-xyz\"></div>\n<div id=\"1\" class=\"svelte-xyz\"><span class=\"svelte-xyz\"></span></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unicode-identifier/input.svelte",
    "content": "<div id=\"123\"></div>\n<div id=\"line\nbreak\"></div>\n<div class=\"a🙂b\"></div>\n<div class=\"asdf\"></div>\n<div class=\"&#97;sdf\"></div>\n<div id=\"1\"><span></span></div>\n\n<style>\n\t#\\31\\32\\33 { color: green; }\n\t#\\31 23 { color: green; }\n\t#line\\a break { color: green; }\n\t#line\\a\nbreak { color: green; }\n\t#line\\00000abreak { color: green; }\n\t#line\\00000a break { color: green; }\n\t#line\\00000a\tbreak { color: green; }\n\t.a\\1f642 b { color: green; }\n\n\t.\\61sdf { color: green; }\n\n\t.\\61  sdf { color: red; }\n\t.\\61\n\tsdf { color: red; }\n\t.\\61\n sdf { color: red; }\n\n\t#\\31span { color: red; }\n\t#\\31 span { color: red; }\n\t#\\31  span { color: green; }\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/universal-selector/expected.css",
    "content": "\t.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/universal-selector/input.svelte",
    "content": "<div></div>\n\n<style>\n\t* {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unknown-at-rule/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\t@apply --funky-div;\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unknown-at-rule/input.svelte",
    "content": "<div></div>\n\n<style>\n\tdiv {\n\t\t@apply --funky-div;\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unknown-at-rule-with-following-rules/expected.css",
    "content": "\tdiv.svelte-xyz {\n\t\t@apply --funky-div;\n\t\tcolor: red;\n\t}\n\n\t/* (empty) div {\n\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unknown-at-rule-with-following-rules/input.svelte",
    "content": "<div></div>\n\n<style>\n\tdiv {\n\t\t@apply --funky-div;\n\t\tcolor: red;\n\t}\n\n\tdiv {\n\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-nested-at-rule/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tline: 2,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 9\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 2,\n\t\t\t\tcolumn: 8,\n\t\t\t\tcharacter: 16\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-nested-at-rule/expected.css",
    "content": "\n\t/* (unused) .unused {\n\t\t@media (min-width: 400px) {\n\t\t\tcolor: red;\n\t\t}\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-nested-at-rule/input.svelte",
    "content": "<style>\n\t.unused {\n\t\t@media (min-width: 400px) {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".bar\"',\n\t\t\tstart: {\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 60\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 5,\n\t\t\t\tcharacter: 64\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector/expected.css",
    "content": "\t.foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n\n\t/* (unused) .bar {\n\t\tcolor: blue;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector/expected.html",
    "content": "<div class=\"foo svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector/input.svelte",
    "content": "<div class='foo'></div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n\n\t.bar {\n\t\tcolor: blue;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-child-combinator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"article > *\"',\n\t\t\tstart: { character: 9, column: 1, line: 2 },\n\t\t\tend: { character: 20, column: 12, line: 2 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"article *\"',\n\t\t\tstart: { character: 47, column: 1, line: 6 },\n\t\t\tend: { character: 56, column: 10, line: 6 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".article > *\"',\n\t\t\tstart: { character: 83, column: 1, line: 10 },\n\t\t\tend: { character: 95, column: 13, line: 10 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-child-combinator/expected.css",
    "content": "\t/* (unused) article > * {\n\t\tfont-size: 36px;\n\t}*/\n\n\t/* (unused) article * {\n\t\tfont-size: 36px;\n\t}*/\n\n\t/* (unused) .article > * {\n\t\tfont-size: 48px;\n\t}*/\n\n\tdiv.svelte-xyz > :where(.svelte-xyz) {\n\t\tcolor: orange;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-child-combinator/input.svelte",
    "content": "<style>\n\tarticle > * {\n\t\tfont-size: 36px;\n\t}\n\n\tarticle * {\n\t\tfont-size: 36px;\n\t}\n\n\t.article > * {\n\t\tfont-size: 48px;\n\t}\n\n\tdiv > * {\n\t\tcolor: orange;\n\t}\n</style>\n\n<div>\n\t<p>\n\t\tSvelte REPLs are svelte.\n\t</p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-empty-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"img[alt=\"\"]\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 87,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 8\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 98,\n\t\t\t\tcolumn: 12,\n\t\t\t\tline: 8\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-empty-attribute/expected.css",
    "content": "\timg[alt].svelte-xyz {\n\t\tborder: 1px solid green;\n\t}\n\n\t/* (unused) img[alt=\"\"] {\n\t\tborder: 1px solid red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-empty-attribute/expected.html",
    "content": "<img alt=\"a foo\" class=\"svelte-xyz\" src=\"foo.jpg\">"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-empty-attribute/input.svelte",
    "content": "<img src=\"foo.jpg\" alt=\"a foo\" />\n\n<style>\n\timg[alt] {\n\t\tborder: 1px solid green;\n\t}\n\n\timg[alt=\"\"] {\n\t\tborder: 1px solid red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-in-between/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 72,\n\t\t\t\tcolumn: 3,\n\t\t\t\tline: 10\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"h4\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 70,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 10\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-in-between/expected.css",
    "content": "\n\th1.svelte-xyz,\n\th2.svelte-xyz,\n\th3.svelte-xyz /* (unused) h4*/,\n\tp.svelte-xyz {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-in-between/input.svelte",
    "content": "<h1>h1</h1>\n<h2>h2</h2>\n<h3>h3</h3>\n<p>p</p>\n\n<style>\n\th1,\n\th2,\n\th3,\n\th4,\n\tp {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-leading/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".foo\"',\n\t\t\tstart: {\n\t\t\t\tline: 4,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 34\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 4,\n\t\t\t\tcolumn: 5,\n\t\t\t\tcharacter: 38\n\t\t\t}\n\t\t},\n\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".baz\"',\n\t\t\tstart: {\n\t\t\t\tline: 4,\n\t\t\t\tcolumn: 13,\n\t\t\t\tcharacter: 46\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 4,\n\t\t\t\tcolumn: 17,\n\t\t\t\tcharacter: 50\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-leading/expected.css",
    "content": "\t/* (unused) .foo,*/ .bar.svelte-xyz /* (unused) .baz*/ {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-leading/expected.html",
    "content": "<div class=\"bar svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-leading/input.svelte",
    "content": "<div class='bar'></div>\n\n<style>\n\t.foo, .bar, .baz {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'a11y_missing_content',\n\t\t\tmessage: '`<h1>` element should contain text',\n\t\t\tstart: {\n\t\t\t\tline: 1,\n\t\t\t\tcolumn: 0,\n\t\t\t\tcharacter: 0\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 1,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 9\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'a11y_missing_content',\n\t\t\tmessage: '`<h4>` element should contain text',\n\t\t\tstart: {\n\t\t\t\tline: 2,\n\t\t\t\tcolumn: 0,\n\t\t\t\tcharacter: 10\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 2,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 19\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h2\"',\n\t\t\tstart: {\n\t\t\t\tline: 6,\n\t\t\t\tcolumn: 5,\n\t\t\t\tcharacter: 35\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 6,\n\t\t\t\tcolumn: 7,\n\t\t\t\tcharacter: 37\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h3\"',\n\t\t\tstart: {\n\t\t\t\tline: 6,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 39\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 6,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 41\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h2\"',\n\t\t\tstart: {\n\t\t\t\tline: 9,\n\t\t\t\tcolumn: 5,\n\t\t\t\tcharacter: 66\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 9,\n\t\t\t\tcolumn: 7,\n\t\t\t\tcharacter: 68\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h2\"',\n\t\t\tstart: {\n\t\t\t\tline: 13,\n\t\t\t\tcolumn: 5,\n\t\t\t\tcharacter: 110\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 13,\n\t\t\t\tcolumn: 7,\n\t\t\t\tcharacter: 112\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h3\"',\n\t\t\tstart: {\n\t\t\t\tline: 13,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 114\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 13,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 116\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h2\"',\n\t\t\tstart: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 5,\n\t\t\t\tcharacter: 161\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 7,\n\t\t\t\tcharacter: 163\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h3\"',\n\t\t\tstart: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 9,\n\t\t\t\tcharacter: 165\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 11,\n\t\t\t\tcharacter: 167\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h5\"',\n\t\t\tstart: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 17,\n\t\t\t\tcharacter: 173\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 19,\n\t\t\t\tcharacter: 175\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \"h6\"',\n\t\t\tstart: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 21,\n\t\t\t\tcharacter: 177\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 17,\n\t\t\t\tcolumn: 23,\n\t\t\t\tcharacter: 179\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-multiple/expected.css",
    "content": "\n\th1.svelte-xyz /* (unused) h2, h3*/ {\n\t\tcolor: red;\n\t}\n\th1.svelte-xyz /* (unused) h2*/ {\n\t\ttext-decoration: underline;\n\t}\n\n\th1.svelte-xyz /* (unused) h2, h3*/, h4.svelte-xyz {\n\t\ttext-transform: uppercase;\n\t}\n\n\th1.svelte-xyz /* (unused) h2, h3*/, h4.svelte-xyz /* (unused) h5, h6*/ {\n\t\tbackground-color: green;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-multiple/input.svelte",
    "content": "<h1></h1>\n<h4></h4>\n\n\n<style>\n\th1, h2, h3 {\n\t\tcolor: red;\n\t}\n\th1, h2 {\n\t\ttext-decoration: underline;\n\t}\n\n\th1, h2, h3, h4 {\n\t\ttext-transform: uppercase;\n\t}\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tbackground-color: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-string-concat/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".fooaa\"',\n\t\t\tstart: { line: 11, column: 2, character: 206 },\n\t\t\tend: { line: 11, column: 8, character: 212 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".foobb\"',\n\t\t\tstart: { line: 12, column: 2, character: 229 },\n\t\t\tend: { line: 12, column: 8, character: 235 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".foodd\"',\n\t\t\tstart: { line: 14, column: 2, character: 275 },\n\t\t\tend: { line: 14, column: 8, character: 281 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".bbbar\"',\n\t\t\tstart: { line: 20, column: 2, character: 401 },\n\t\t\tend: { line: 20, column: 8, character: 407 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".ccbar\"',\n\t\t\tstart: { line: 21, column: 2, character: 424 },\n\t\t\tend: { line: 21, column: 8, character: 430 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".ddbar\"',\n\t\t\tstart: { line: 22, column: 2, character: 447 },\n\t\t\tend: { line: 22, column: 8, character: 453 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".fooaabar\"',\n\t\t\tstart: { line: 23, column: 2, character: 470 },\n\t\t\tend: { line: 23, column: 11, character: 479 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".foobbbar\"',\n\t\t\tstart: { line: 24, column: 2, character: 496 },\n\t\t\tend: { line: 24, column: 11, character: 505 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".fooccbar\"',\n\t\t\tstart: { line: 25, column: 2, character: 522 },\n\t\t\tend: { line: 25, column: 11, character: 531 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: { line: 28, column: 2, character: 595 },\n\t\t\tend: { line: 28, column: 9, character: 602 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-string-concat/expected.css",
    "content": "  .foo.svelte-xyz {color: red;}\n  /* (unused) .fooaa {color: red;}*/\n  /* (unused) .foobb {color: red;}*/\n  .foocc.svelte-xyz {color: red;}\n  /* (unused) .foodd {color: red;}*/\n  .aa.svelte-xyz {color: red;}\n  .bb.svelte-xyz {color: red;}\n  .cc.svelte-xyz {color: red;}\n  .dd.svelte-xyz {color: red;}\n  .aabar.svelte-xyz {color: red;}\n  /* (unused) .bbbar {color: red;}*/\n  /* (unused) .ccbar {color: red;}*/\n  /* (unused) .ddbar {color: red;}*/\n  /* (unused) .fooaabar {color: red;}*/\n  /* (unused) .foobbbar {color: red;}*/\n  /* (unused) .fooccbar {color: red;}*/\n  .fooddbar.svelte-xyz {color: red;}\n  .baz.svelte-xyz {color: red;}\n  /* (unused) .unused {color: red;}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-string-concat/input.svelte",
    "content": "<script>\n  export let a, b, c;\n</script>\n\n<div class=\"foo{a ? ' aa' : b ? ' bb ' : c ? 'cc ' : 'dd'}bar baz {a ? ' aa' : b ? ' bb ' : c ? 'cc ' : 'dd'}\">\n  some stuff\n</div>\n\n<style>\n  .foo {color: red;}\n  .fooaa {color: red;}\n  .foobb {color: red;}\n  .foocc {color: red;}\n  .foodd {color: red;}\n  .aa {color: red;}\n  .bb {color: red;}\n  .cc {color: red;}\n  .dd {color: red;}\n  .aabar {color: red;}\n  .bbbar {color: red;}\n  .ccbar {color: red;}\n  .ddbar {color: red;}\n  .fooaabar {color: red;}\n  .foobbbar {color: red;}\n  .fooccbar {color: red;}\n  .fooddbar {color: red;}\n  .baz {color: red;}\n  .unused {color: red;}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tactive: true\n\t},\n\twarnings: [\n\t\t{\n\t\t\tfilename: 'SvelteComponent.svelte',\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".maybeactive\"',\n\t\t\tstart: {\n\t\t\t\tline: 16,\n\t\t\t\tcolumn: 1,\n\t\t\t\tcharacter: 163\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tline: 16,\n\t\t\t\tcolumn: 13,\n\t\t\t\tcharacter: 175\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary/expected.css",
    "content": "\t.active.svelte-xyz {\n\t\tcolor: red;\n\t}\n\n\t.inactive.svelte-xyz {\n\t\tcolor: blue;\n\t}\n\n\t/* (unused) .maybeactive {\n\t\tcolor: green;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary/expected.html",
    "content": "<div class=\"active svelte-xyz\"></div>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary/input.svelte",
    "content": "<script>\n\texport let active;\n</script>\n\n<div class='{active ? \"active\": \"inactive\"}'></div>\n\n<style>\n\t.active {\n\t\tcolor: red;\n\t}\n\n\t.inactive {\n\t\tcolor: blue;\n\t}\n\n\t.maybeactive {\n\t\tcolor: green;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-bailed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-bailed/expected.css",
    "content": "  .thing.svelte-xyz {color: blue;}\n  .active.svelte-xyz {color: blue;}\n  .thing.active.svelte-xyz {color: blue;}\n  .hover.svelte-xyz { color: blue; }\n  .hover.unused.svelte-xyz { color: blue; }\n\n  .unused.svelte-xyz {color: blue;}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-bailed/input.svelte",
    "content": "<script>\n  export let active;\n  export let hover;\n</script>\n\n<div class=\"thing {active ? 'active' : hover}\">\n  some stuff\n</div>\n\n<style>\n  .thing {color: blue;}\n  .active {color: blue;}\n  .thing.active {color: blue;}\n  .hover { color: blue; }\n  .hover.unused { color: blue; }\n\n  .unused {color: blue;}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-concat/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 198,\n\t\t\t\tcolumn: 2,\n\t\t\t\tline: 14\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 205,\n\t\t\t\tcolumn: 9,\n\t\t\t\tline: 14\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-concat/expected.css",
    "content": "  .thing.svelte-xyz {color: blue;}\n  .active.svelte-xyz {color: blue;}\n  .thing.active.svelte-xyz {color: blue;}\n\n  /* (unused) .unused {color: blue;}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-concat/input.svelte",
    "content": "<script>\n  export let active;\n</script>\n\n<div class=\"thing {active ? 'active' : ''}\">\n  some stuff\n</div>\n\n<style>\n  .thing {color: blue;}\n  .active {color: blue;}\n  .thing.active {color: blue;}\n\n  .unused {color: blue;}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".hover.unused\"',\n\t\t\tstart: { line: 15, column: 2, character: 261 },\n\t\t\tend: { line: 15, column: 15, character: 274 }\n\t\t},\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tmessage: 'Unused CSS selector \".unused\"',\n\t\t\tstart: { line: 17, column: 2, character: 295 },\n\t\t\tend: { line: 17, column: 9, character: 302 }\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-nested/expected.css",
    "content": "  .thing.svelte-xyz {color: blue;}\n  .active.svelte-xyz {color: blue;}\n  .thing.active.svelte-xyz {color: blue;}\n  .hover.svelte-xyz { color: blue; }\n  /* (unused) .hover.unused { color: blue; }*/\n\n  /* (unused) .unused {color: blue;}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-ternary-nested/input.svelte",
    "content": "<script>\n  export let active;\n  export let hover;\n</script>\n\n<div class=\"thing {active ? 'active' : hover ? 'hover' : ''}\">\n  some stuff\n</div>\n\n<style>\n  .thing {color: blue;}\n  .active {color: blue;}\n  .thing.active {color: blue;}\n  .hover { color: blue; }\n  .hover.unused { color: blue; }\n\n  .unused {color: blue;}\n</style>"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-trailing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 32,\n\t\t\t\tcolumn: 3,\n\t\t\t\tline: 5\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"h2\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 30,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 5\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-trailing/expected.css",
    "content": "\th1.svelte-xyz /* (unused) h2*/ {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-selector-trailing/input.svelte",
    "content": "<h1>hello</h1>\n\n<style>\n\th1,\n\th2 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-ts-as-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'css_unused_selector',\n\t\t\tend: {\n\t\t\t\tcharacter: 127,\n\t\t\t\tcolumn: 28,\n\t\t\t\tline: 10\n\t\t\t},\n\t\t\tmessage: 'Unused CSS selector \"[data-active=\\'true\\'] > span\"',\n\t\t\tstart: {\n\t\t\t\tcharacter: 100,\n\t\t\t\tcolumn: 1,\n\t\t\t\tline: 10\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-ts-as-expression/expected.css",
    "content": "\n\t/* (unused) [data-active='true'] > span {\n\t\tbackground-color: red;\n\t}*/\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/unused-ts-as-expression/input.svelte",
    "content": "<script lang=\"ts\">\n\t//\n</script>\n\n<div data-active={false as true}>\n\t<span></span>\n</div>\n\n<style>\n\t[data-active='true'] > span {\n\t\tbackground-color: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/view-transition/expected.css",
    "content": "\n\t::view-transition {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-group(foo) {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-old {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-old:only-child {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-new {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-new:only-child {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-image-pair {\n\t\tanimation-duration: 0.5s;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/view-transition/input.svelte",
    "content": "<style>\n\t::view-transition {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-group(foo) {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-old {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-old:only-child {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-new {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-new:only-child {\n\t\tanimation-duration: 0.5s;\n\t}\n\t::view-transition-image-pair {\n\t\tanimation-duration: 0.5s;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/weird-selectors/expected.css",
    "content": "\t.-foo.svelte-xyz {\n\t\tcolor: red;\n\t}\n\t[title='['].svelte-xyz {\n\t\tcolor: blue;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/css/samples/weird-selectors/input.svelte",
    "content": "<div class='-foo'>foo</div>\n\n<div title='['>bar</div>\n\n<style>\n\t.-foo {\n\t\tcolor: red;\n\t}\n\t[title='['] {\n\t\tcolor: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/css/test.ts",
    "content": "// @vitest-environment jsdom\n\nimport * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { compile_directory, try_read_file } from '../helpers.js';\nimport { assert_html_equal } from '../html_equal.js';\nimport { flushSync, mount, unmount } from 'svelte';\nimport { suite, type BaseTest } from '../suite.js';\nimport type { CompileOptions, Warning } from '#compiler';\n\nfunction normalize_warning(warning: Warning) {\n\tdelete warning.filename;\n\tdelete warning.position;\n\tdelete warning.frame;\n\n\t// Remove the \"https://svelte.dev/e/...\" link at the end\n\tconst lines = warning.message.split('\\n');\n\tif (lines.at(-1)?.startsWith('https://svelte.dev/e/')) {\n\t\tlines.pop();\n\t}\n\twarning.message = lines.join('\\n');\n\n\treturn warning;\n}\n\nfunction load_warnings(path: string) {\n\tif (!fs.existsSync(path)) {\n\t\treturn [];\n\t}\n\treturn JSON.parse(fs.readFileSync(path, 'utf-8')).map(normalize_warning);\n}\n\ninterface CssTest extends BaseTest {\n\tcompileOptions?: Partial<CompileOptions>;\n\twarnings?: Warning[];\n\tprops?: Record<string, any>;\n\thasGlobal?: boolean;\n}\n\n/**\n * Remove the \"https://svelte.dev/e/...\" link\n */\nfunction strip_link(message: string) {\n\treturn message.slice(0, message.lastIndexOf('\\n'));\n}\n\nconst { test, run } = suite<CssTest>(async (config, cwd) => {\n\tawait compile_directory(cwd, 'client', { cssHash: () => 'svelte-xyz', ...config.compileOptions });\n\tawait compile_directory(cwd, 'server', { cssHash: () => 'svelte-xyz', ...config.compileOptions });\n\n\tconst expected = {\n\t\thtml: try_read_file(`${cwd}/expected.html`),\n\t\tcss: try_read_file(`${cwd}/expected.css`)\n\t};\n\n\t// we do this here, rather than in the expected.html !== null\n\t// block, to verify that valid code was generated\n\tconst ClientComponent = (await import(`${cwd}/_output/client/input.svelte.js`)).default;\n\tconst ServerComponent = (await import(`${cwd}/_output/server/input.svelte.js`)).default;\n\n\t// verify that the right elements have scoping selectors (do this first to ensure all actual files are written to disk)\n\tif (expected.html !== null) {\n\t\tconst target = window.document.createElement('main');\n\n\t\tconst component = mount(ClientComponent, { props: config.props ?? {}, target });\n\t\tflushSync();\n\n\t\tconst html = target.innerHTML;\n\n\t\tfs.writeFileSync(`${cwd}/_output/rendered.html`, html);\n\n\t\tassert_html_equal(html, expected.html);\n\n\t\tunmount(component);\n\t\twindow.document.head.innerHTML = ''; // remove added styles\n\n\t\t// TODO enable SSR tests\n\t\t// const actual_ssr = ServerComponent.render(config.props).html;\n\t\t// assert_html_equal(actual_ssr, expected.html);\n\t}\n\n\tif (config.hasGlobal !== undefined) {\n\t\tconst metadata = JSON.parse(\n\t\t\tfs.readFileSync(`${cwd}/_output/client/input.svelte.css.json`, 'utf-8')\n\t\t);\n\n\t\tassert.equal(metadata.hasGlobal, config.hasGlobal);\n\t}\n\n\tconst dom_css = fs.readFileSync(`${cwd}/_output/client/input.svelte.css`, 'utf-8').trim();\n\tconst ssr_css = fs.readFileSync(`${cwd}/_output/server/input.svelte.css`, 'utf-8').trim();\n\n\tassert.equal(dom_css, ssr_css);\n\n\tconst dom_warnings = load_warnings(`${cwd}/_output/client/input.svelte.warnings.json`);\n\tconst ssr_warnings = load_warnings(`${cwd}/_output/server/input.svelte.warnings.json`);\n\tconst expected_warnings = (config.warnings || []).map(normalize_warning);\n\tassert.deepEqual(dom_warnings, ssr_warnings);\n\tassert.deepEqual(dom_warnings.map(normalize_warning), expected_warnings);\n\n\tassert.equal(dom_css.trim().replace(/\\r\\n/g, '\\n'), (expected.css ?? '').trim());\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/css-parse.test.ts",
    "content": "import { assert, describe, it } from 'vitest';\nimport { parseCss } from 'svelte/compiler';\n\ndescribe('parseCss', () => {\n\tit('parses a simple rule', () => {\n\t\tconst ast = parseCss('div { color: red; }');\n\t\tassert.equal(ast.type, 'StyleSheetFile');\n\t\tassert.equal(ast.children.length, 1);\n\t\tassert.equal(ast.children[0].type, 'Rule');\n\t});\n\n\tit('parses at-rules', () => {\n\t\tconst ast = parseCss('@media (min-width: 800px) { div { color: red; } }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tassert.equal(ast.children[0].type, 'Atrule');\n\t\tif (ast.children[0].type === 'Atrule') {\n\t\t\tassert.equal(ast.children[0].name, 'media');\n\t\t}\n\t});\n\n\tit('parses @import', () => {\n\t\tconst ast = parseCss(\"@import 'foo.css';\");\n\t\tassert.equal(ast.children.length, 1);\n\t\tassert.equal(ast.children[0].type, 'Atrule');\n\t\tif (ast.children[0].type === 'Atrule') {\n\t\t\tassert.equal(ast.children[0].name, 'import');\n\t\t\tassert.equal(ast.children[0].block, null);\n\t\t}\n\t});\n\n\tit('parses multiple rules', () => {\n\t\tconst ast = parseCss('div { color: red; } span { color: blue; }');\n\t\tassert.equal(ast.children.length, 2);\n\t});\n\n\tit('has correct start/end positions', () => {\n\t\tconst ast = parseCss('div { color: red; }');\n\t\tassert.equal(ast.start, 0);\n\t\tassert.equal(ast.end, 19);\n\t});\n\n\tit('strips BOM', () => {\n\t\tconst ast = parseCss('\\uFEFFdiv { color: red; }');\n\t\tassert.equal(ast.start, 0);\n\t\tassert.equal(ast.end, 19);\n\t});\n\n\tit('parses nested rules', () => {\n\t\tconst ast = parseCss('div { color: red; span { color: blue; } }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tconst rule = ast.children[0];\n\t\tassert.equal(rule.type, 'Rule');\n\t\tif (rule.type === 'Rule') {\n\t\t\tassert.equal(rule.block.children.length, 2); // declaration + nested rule\n\t\t}\n\t});\n\n\tit('parses empty stylesheet', () => {\n\t\tconst ast = parseCss('');\n\t\tassert.equal(ast.type, 'StyleSheetFile');\n\t\tassert.equal(ast.children.length, 0);\n\t\tassert.equal(ast.start, 0);\n\t\tassert.equal(ast.end, 0);\n\t});\n\n\tit('parses whitespace-only stylesheet', () => {\n\t\tconst ast = parseCss('   \\n\\t  ');\n\t\tassert.equal(ast.children.length, 0);\n\t});\n\n\tit('parses comments', () => {\n\t\tconst ast = parseCss('/* comment */ div { color: red; }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tassert.equal(ast.children[0].type, 'Rule');\n\t});\n\n\tit('parses complex selectors', () => {\n\t\tconst ast = parseCss('div > span + p ~ a { color: red; }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tconst rule = ast.children[0];\n\t\tif (rule.type === 'Rule') {\n\t\t\tassert.equal(rule.prelude.type, 'SelectorList');\n\t\t\tassert.equal(rule.prelude.children.length, 1);\n\t\t\t// div > span + p ~ a has 4 relative selectors\n\t\t\tassert.equal(rule.prelude.children[0].children.length, 4);\n\t\t}\n\t});\n\n\tit('parses pseudo-classes and pseudo-elements', () => {\n\t\tconst ast = parseCss('div:hover::before { color: red; }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tconst rule = ast.children[0];\n\t\tif (rule.type === 'Rule') {\n\t\t\tconst selectors = rule.prelude.children[0].children[0].selectors;\n\t\t\tassert.equal(selectors.length, 3); // div, :hover, ::before\n\t\t\tassert.equal(selectors[0].type, 'TypeSelector');\n\t\t\tassert.equal(selectors[1].type, 'PseudoClassSelector');\n\t\t\tassert.equal(selectors[2].type, 'PseudoElementSelector');\n\t\t}\n\t});\n\n\tit('parses @keyframes', () => {\n\t\tconst ast = parseCss('@keyframes fade { from { opacity: 0; } to { opacity: 1; } }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tassert.equal(ast.children[0].type, 'Atrule');\n\t\tif (ast.children[0].type === 'Atrule') {\n\t\t\tassert.equal(ast.children[0].name, 'keyframes');\n\t\t\tassert.notEqual(ast.children[0].block, null);\n\t\t}\n\t});\n\n\tit('parses class and id selectors', () => {\n\t\tconst ast = parseCss('.foo#bar { color: red; }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tconst rule = ast.children[0];\n\t\tif (rule.type === 'Rule') {\n\t\t\tconst selectors = rule.prelude.children[0].children[0].selectors;\n\t\t\tassert.equal(selectors.length, 2);\n\t\t\tassert.equal(selectors[0].type, 'ClassSelector');\n\t\t\tassert.equal(selectors[1].type, 'IdSelector');\n\t\t}\n\t});\n\n\tit('parses attribute selectors', () => {\n\t\tconst ast = parseCss('[data-foo=\"bar\"] { color: red; }');\n\t\tassert.equal(ast.children.length, 1);\n\t\tconst rule = ast.children[0];\n\t\tif (rule.type === 'Rule') {\n\t\t\tconst selectors = rule.prelude.children[0].children[0].selectors;\n\t\t\tassert.equal(selectors.length, 1);\n\t\t\tassert.equal(selectors[0].type, 'AttributeSelector');\n\t\t\tif (selectors[0].type === 'AttributeSelector') {\n\t\t\t\tassert.equal(selectors[0].name, 'data-foo');\n\t\t\t\tassert.equal(selectors[0].value, 'bar');\n\t\t\t}\n\t\t}\n\t});\n\n\tit('parses escaped characters', () => {\n\t\tconst ast = parseCss(\"div { background: url('./example.png?\\\\''); }\");\n\t\tassert.equal(ast.type, 'StyleSheetFile');\n\t\tassert.equal(ast.children.length, 1);\n\t\tconst rule = ast.children[0];\n\t\tassert.equal(rule.type, 'Rule');\n\t\tif (rule.type === 'Rule') {\n\t\t\tconst declaration = rule.block.children[0];\n\t\t\tassert.equal(declaration.type, 'Declaration');\n\t\t\tif (declaration.type === 'Declaration') {\n\t\t\t\tassert.equal(declaration.value, \"url('./example.png?\\\\'')\");\n\t\t\t}\n\t\t}\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/tests/helpers.js",
    "content": "/** @import { CompileOptions } from '#compiler' */\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { globSync } from 'tinyglobby';\nimport { VERSION, compile, compileModule, preprocess } from 'svelte/compiler';\nimport { vi } from 'vitest';\n\n/**\n * @param {string} file\n */\nexport function try_load_json(file) {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(file, 'utf-8'));\n\t} catch (err) {\n\t\tif (/** @type {any} */ (err).code !== 'ENOENT') throw err;\n\t\treturn null;\n\t}\n}\n\n/**\n * @param {string} file\n */\nexport function try_read_file(file) {\n\ttry {\n\t\treturn read_file(file);\n\t} catch (err) {\n\t\tif (/** @type {any} */ (err).code !== 'ENOENT') throw err;\n\t\treturn null;\n\t}\n}\n\n/**\n * @param {string} file\n */\nexport function read_file(file) {\n\treturn fs.readFileSync(file, 'utf-8').replace(/\\r\\n/g, '\\n');\n}\n\nexport function create_deferred() {\n\t/** @param {any} [value] */\n\tlet resolve = (value) => {};\n\n\t/** @param {any} [reason] */\n\tlet reject = (reason) => {};\n\n\t/** @type {Promise<any>} */\n\tconst promise = new Promise((f, r) => {\n\t\tresolve = f;\n\t\treject = r;\n\t});\n\n\treturn { promise, resolve, reject };\n}\n\n/**\n *\n * @param {string} cwd\n * @param {'client' | 'server'} generate\n * @param {Partial<CompileOptions>} compileOptions\n * @param {boolean} [output_map]\n * @param {any} [preprocessor]\n */\nexport async function compile_directory(\n\tcwd,\n\tgenerate,\n\tcompileOptions = {},\n\toutput_map = false,\n\tpreprocessor\n) {\n\tconst output_dir = `${cwd}/_output/${generate}`;\n\n\tfs.rmSync(output_dir, { recursive: true, force: true });\n\n\tfor (let file of globSync('**', { cwd, onlyFiles: true })) {\n\t\tif (file.startsWith('_')) continue;\n\n\t\tlet text = fs.readFileSync(`${cwd}/${file}`, 'utf-8').replace(/\\r\\n/g, '\\n');\n\t\tlet opts = {\n\t\t\tfilename: path.join(cwd, file),\n\t\t\t...compileOptions,\n\t\t\tgenerate\n\t\t};\n\n\t\tif (file.endsWith('.js')) {\n\t\t\tconst out = `${output_dir}/${file}`;\n\t\t\tif (file.endsWith('.svelte.js')) {\n\t\t\t\tconst compiled = compileModule(text, {\n\t\t\t\t\tfilename: opts.filename,\n\t\t\t\t\tgenerate: opts.generate,\n\t\t\t\t\tdev: opts.dev,\n\t\t\t\t\texperimental: opts.experimental\n\t\t\t\t});\n\t\t\t\twrite(out, compiled.js.code.replace(`v${VERSION}`, 'VERSION'));\n\t\t\t} else {\n\t\t\t\t// for non-runes tests, just re-export from the original source file — this\n\t\t\t\t// allows the `_config.js` module to import shared state to use in tests\n\t\t\t\tconst source = path\n\t\t\t\t\t.relative(path.dirname(out), path.resolve(cwd, file))\n\t\t\t\t\t.replace(/\\\\/g, '/');\n\t\t\t\tlet result = `export * from '${source}';`;\n\t\t\t\tif (text.includes('export default')) {\n\t\t\t\t\tresult += `\\nexport { default } from '${source}';`;\n\t\t\t\t}\n\n\t\t\t\twrite(out, result);\n\t\t\t}\n\t\t} else if (\n\t\t\tfile.endsWith('.svelte') &&\n\t\t\t// Make it possible to compile separate versions for client and server to simulate\n\t\t\t// cases where `{browser ? 'foo' : 'bar'}` is turning into `{'foo'}` on the server\n\t\t\t// and `{bar}` on the client, assuming we have sophisticated enough treeshaking\n\t\t\t// in the future to make this a thing.\n\t\t\t(!file.endsWith('.server.svelte') || generate === 'server') &&\n\t\t\t(!file.endsWith('.client.svelte') || generate === 'client')\n\t\t) {\n\t\t\tfile = file.replace(/\\.client\\.svelte$/, '.svelte').replace(/\\.server\\.svelte$/, '.svelte');\n\n\t\t\tif (preprocessor?.preprocess) {\n\t\t\t\tconst preprocessed = await preprocess(\n\t\t\t\t\ttext,\n\t\t\t\t\tpreprocessor.preprocess,\n\t\t\t\t\tpreprocessor.options || {\n\t\t\t\t\t\tfilename: opts.filename\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\ttext = preprocessed.code;\n\t\t\t\topts = { ...opts, sourcemap: preprocessed.map };\n\t\t\t\twrite(`${output_dir}/${file.slice(0, -7)}.preprocessed.svelte`, text);\n\t\t\t\tif (output_map) {\n\t\t\t\t\twrite(\n\t\t\t\t\t\t`${output_dir}/${file.slice(0, -7)}.preprocessed.svelte.map`,\n\t\t\t\t\t\tJSON.stringify(preprocessed.map, null, '\\t')\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst compiled = compile(text, {\n\t\t\t\toutputFilename: `${output_dir}/${file}${file.endsWith('.js') ? '' : '.js'}`,\n\t\t\t\tcssOutputFilename: `${output_dir}/${file}.css`,\n\t\t\t\t...opts\n\t\t\t});\n\t\t\tcompiled.js.code = compiled.js.code.replace(`v${VERSION}`, 'VERSION');\n\n\t\t\twrite(`${output_dir}/${file}.js`, compiled.js.code);\n\t\t\tif (output_map) {\n\t\t\t\twrite(`${output_dir}/${file}.js.map`, JSON.stringify(compiled.js.map, null, '\\t'));\n\t\t\t}\n\n\t\t\tif (compiled.css) {\n\t\t\t\twrite(`${output_dir}/${file}.css`, compiled.css.code);\n\t\t\t\twrite(\n\t\t\t\t\t`${output_dir}/${file}.css.json`,\n\t\t\t\t\tJSON.stringify({ hasGlobal: compiled.css.hasGlobal })\n\t\t\t\t);\n\t\t\t\tif (output_map) {\n\t\t\t\t\twrite(`${output_dir}/${file}.css.map`, JSON.stringify(compiled.css.map, null, '\\t'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (compiled.warnings.length > 0) {\n\t\t\t\twrite(`${output_dir}/${file}.warnings.json`, JSON.stringify(compiled.warnings, null, '\\t'));\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function should_update_expected() {\n\treturn process.env.SHOULD_UPDATE_EXPECTED === 'true';\n}\n\n/**\n * @param {string} file\n * @param {string} contents\n */\nexport function write(file, contents) {\n\ttry {\n\t\tfs.mkdirSync(path.dirname(file), { recursive: true });\n\t} catch {}\n\n\tfs.writeFileSync(file, contents);\n}\n\n// Guard because not all test contexts load this with JSDOM\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error JS DOM doesn't support it\n\tWindow.prototype.matchMedia = vi.fn((media) => {\n\t\treturn {\n\t\t\tmatches: false,\n\t\t\tmedia,\n\t\t\taddEventListener: () => {},\n\t\t\tremoveEventListener: () => {}\n\t\t};\n\t});\n}\n\nexport const fragments = /** @type {'html' | 'tree'} */ (process.env.FRAGMENTS) ?? 'html';\n\nexport const async_mode = process.env.SVELTE_NO_ASYNC !== 'true';\n\n/**\n * @param {any[]} logs\n */\nexport function normalise_inspect_logs(logs) {\n\t/** @type {string[]} */\n\tconst normalised = [];\n\n\tfor (const log of logs) {\n\t\tif (log === 'stack trace') {\n\t\t\t// ignore `console.group('stack trace')` in default `$inspect(...)` output\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (log instanceof Error) {\n\t\t\tconst last_line = log.stack\n\t\t\t\t?.trim()\n\t\t\t\t.split('\\n')\n\t\t\t\t.filter((line) => !line.includes('at Module.get_stack'))[1];\n\n\t\t\tconst match = last_line && /(at .+) /.exec(last_line);\n\n\t\t\tif (match) normalised.push(match[1]);\n\t\t} else {\n\t\t\tnormalised.push(log);\n\t\t}\n\t}\n\n\treturn normalised;\n}\n\n/**\n * @param {any[]} logs\n */\nexport function normalise_trace_logs(logs) {\n\tlet normalised = [];\n\n\tlogs = logs.slice();\n\n\twhile (logs.length > 0) {\n\t\tconst log = logs.shift();\n\n\t\tif (log instanceof Error) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof log === 'string' && log.includes('%c')) {\n\t\t\tconst split = log.split('%c');\n\n\t\t\tconst first = /** @type {string} */ (split.shift()).trim();\n\t\t\tif (first) normalised.push({ log: first });\n\n\t\t\twhile (split.length > 0) {\n\t\t\t\tconst log = /** @type {string} */ (split.shift()).trim();\n\t\t\t\tconst highlighted = logs.shift() === 'color: CornflowerBlue; font-weight: bold';\n\n\t\t\t\t// omit timings, as they will differ between runs\n\t\t\t\tif (/\\(.+ms\\)/.test(log)) continue;\n\n\t\t\t\tnormalised.push({\n\t\t\t\t\tlog,\n\t\t\t\t\thighlighted\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tnormalised.push({ log });\n\t\t}\n\t}\n\n\treturn normalised;\n}\n"
  },
  {
    "path": "packages/svelte/tests/html_equal.js",
    "content": "import { COMMENT_NODE, ELEMENT_NODE, TEXT_NODE } from '#client/constants';\nimport { assert } from 'vitest';\n\n/**\n * @param {Element} node\n * @param {{ preserveComments: boolean }} opts\n */\nfunction clean_children(node, opts) {\n\tlet previous = null;\n\tlet has_element_children = false;\n\tlet template =\n\t\tnode.nodeName.toUpperCase() === 'TEMPLATE'\n\t\t\t? /** @type {HTMLTemplateElement} */ (node)\n\t\t\t: undefined;\n\n\tif (template) {\n\t\tconst div = document.createElement('div');\n\t\tdiv.append(template.content);\n\t\tnode = div;\n\t}\n\n\t// sort attributes\n\tconst attributes = Array.from(node.attributes).sort((a, b) => {\n\t\treturn a.name < b.name ? -1 : 1;\n\t});\n\n\tattributes.forEach((attr) => {\n\t\tif (attr.name !== 'xmlns') node.removeAttribute(attr.name);\n\t});\n\n\tattributes.forEach(({ name, value }) => {\n\t\t// Strip out the special onload/onerror hydration events from the test output\n\t\tif (['onload', 'onerror', 'xmlns'].includes(name) && value === 'this.__e=event') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (name === 'class') {\n\t\t\tvalue = value.replace(/svelte-\\w+/, 'svelte-xyz123');\n\t\t}\n\n\t\tnode.setAttribute(name, value);\n\t});\n\n\tfor (let child of [...node.childNodes]) {\n\t\tif (child.nodeType === TEXT_NODE) {\n\t\t\tlet text = /** @type {Text} */ (child);\n\n\t\t\tif (\n\t\t\t\tnode.namespaceURI === 'http://www.w3.org/2000/svg' &&\n\t\t\t\tnode.tagName !== 'text' &&\n\t\t\t\tnode.tagName !== 'tspan'\n\t\t\t) {\n\t\t\t\tnode.removeChild(child);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttext.data = text.data.replace(/[^\\S]+/g, ' ');\n\n\t\t\tif (previous && previous.nodeType === TEXT_NODE) {\n\t\t\t\tconst prev = /** @type {Text} */ (previous);\n\n\t\t\t\tprev.data += text.data;\n\t\t\t\tnode.removeChild(text);\n\n\t\t\t\ttext = prev;\n\t\t\t\ttext.data = text.data.replace(/[^\\S]+/g, ' ');\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (child.nodeType === COMMENT_NODE && !opts.preserveComments) {\n\t\t\t// comment\n\t\t\tchild.remove();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// add newlines for better readability and potentially recurse into children\n\t\tif (child.nodeType === ELEMENT_NODE || child.nodeType === COMMENT_NODE) {\n\t\t\tif (previous?.nodeType === TEXT_NODE) {\n\t\t\t\tconst prev = /** @type {Text} */ (previous);\n\t\t\t\tprev.data = prev.data.replace(/^[^\\S]+$/, '\\n');\n\t\t\t} else if (previous?.nodeType === ELEMENT_NODE || previous?.nodeType === COMMENT_NODE) {\n\t\t\t\tnode.insertBefore(document.createTextNode('\\n'), child);\n\t\t\t}\n\n\t\t\tif (child.nodeType === ELEMENT_NODE) {\n\t\t\t\thas_element_children = true;\n\t\t\t\tclean_children(/** @type {Element} */ (child), opts);\n\t\t\t}\n\t\t}\n\n\t\tprevious = child;\n\t}\n\n\t// collapse whitespace\n\tif (node.firstChild && node.firstChild.nodeType === TEXT_NODE) {\n\t\tconst text = /** @type {Text} */ (node.firstChild);\n\t\ttext.data = text.data.trimStart();\n\t}\n\n\tif (node.lastChild && node.lastChild.nodeType === TEXT_NODE) {\n\t\tconst text = /** @type {Text} */ (node.lastChild);\n\t\ttext.data = text.data.trimEnd();\n\t}\n\n\t// indent code for better readability\n\tif (has_element_children && node.parentNode) {\n\t\tnode.innerHTML = `\\n\\  ${node.innerHTML.replace(/\\n/g, '\\n  ')}\\n`;\n\t}\n\n\tif (template) {\n\t\ttemplate.innerHTML = node.innerHTML;\n\t}\n}\n\n/**\n * @param {Window} window\n * @param {string} html\n * @param {{ preserveComments?: boolean }} opts\n */\nexport function normalize_html(window, html, { preserveComments = false } = {}) {\n\ttry {\n\t\tconst node = window.document.createElement('div');\n\n\t\tnode.innerHTML = html.trim();\n\t\tclean_children(node, { preserveComments });\n\n\t\treturn node.innerHTML;\n\t} catch (err) {\n\t\tthrow new Error(`Failed to normalize HTML:\\n${html}\\nCause: ${err}`);\n\t}\n}\n\n/**\n * @param {string} html\n * @returns {string}\n */\nexport function normalize_new_line(html) {\n\treturn html.replace(/\\r\\n/g, '\\n');\n}\n\n/**\n * @param {string} actual\n * @param {string} expected\n * @param {string} [message]\n */\nexport const assert_html_equal = (actual, expected, message) => {\n\ttry {\n\t\tassert.deepEqual(normalize_html(window, actual), normalize_html(window, expected), message);\n\t} catch (e) {\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(/** @type {Error} */ (e), assert_html_equal);\n\t\tthrow e;\n\t}\n};\n\n/**\n *\n * @param {string} actual\n * @param {string} expected\n * @param {{ preserveComments?: boolean, withoutNormalizeHtml?: boolean }} param2\n * @param {string} [message]\n */\nexport const assert_html_equal_with_options = (\n\tactual,\n\texpected,\n\t{ preserveComments, withoutNormalizeHtml },\n\tmessage\n) => {\n\ttry {\n\t\tassert.deepEqual(\n\t\t\twithoutNormalizeHtml\n\t\t\t\t? normalize_new_line(actual.trim()).replace(\n\t\t\t\t\t\t/(<!(--)?.*?\\2>)/g,\n\t\t\t\t\t\tpreserveComments !== false ? '$1' : ''\n\t\t\t\t\t)\n\t\t\t\t: normalize_html(window, actual.trim(), { preserveComments }),\n\t\t\twithoutNormalizeHtml\n\t\t\t\t? normalize_new_line(expected.trim()).replace(\n\t\t\t\t\t\t/(<!(--)?.*?\\2>)/g,\n\t\t\t\t\t\tpreserveComments !== false ? '$1' : ''\n\t\t\t\t\t)\n\t\t\t\t: normalize_html(window, expected.trim(), { preserveComments }),\n\t\t\tmessage\n\t\t);\n\t} catch (e) {\n\t\tif (Error.captureStackTrace)\n\t\t\tError.captureStackTrace(/** @type {Error} */ (e), assert_html_equal_with_options);\n\t\tthrow e;\n\t}\n};\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/basic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst h1 = target.querySelector('h1');\n\n\t\treturn {\n\t\t\th1,\n\t\t\ttext: h1?.childNodes[0]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/basic/main.svelte",
    "content": "<h1>Hello world!</h1>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/binding-input/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { assert_ok, test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tname: 'world'\n\t},\n\n\tsnapshot(target) {\n\t\treturn {\n\t\t\tinput: target.querySelector('input'),\n\t\t\tp: target.querySelector('p')\n\t\t};\n\t},\n\n\ttest(assert, target, _, component, window) {\n\t\tconst input = target.querySelector('input');\n\t\tassert_ok(input);\n\t\tinput.value = 'everybody';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.equal(component.name, 'everybody');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>Hello everybody!</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/binding-input/_expected.html",
    "content": "<!--[--><input> <p>Hello world!</p><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/binding-input/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<input bind:value={name}>\n<p>Hello {name}!</p>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/boundary-pending-attribute/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { assert_ok, test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\texperimental: {\n\t\t\tasync: true\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/boundary-pending-attribute/_expected.html",
    "content": "<!--[--><!--[!--><!---->loading...<!--]--><!--]-->"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/boundary-pending-attribute/main.svelte",
    "content": "{#snippet pending()}\n\tloading...\n{/snippet}\n\n<svelte:boundary {pending}>\n\t{@const data = await Promise.resolve(\"data\")}\n\t{data}\n</svelte:boundary>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-comment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tpreserveComments: true\n\t},\n\tsnapshot(target) {\n\t\treturn {\n\t\t\tdiv: target.querySelectorAll('div')[1]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-comment/main.svelte",
    "content": "<div><!-- test1 --><!-- test2 --></div>\n{\"p\"}\n<div><!-- test1 --><!-- test2 --></div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-static/main.svelte",
    "content": "<div>hello</div>\n\n<div><div>bye</div></div>\n\n<div>\n\t<div>aaa</div>\n\t<div>bbb</div>\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-text/Component.svelte",
    "content": "<svelte:head>\n\t<title>Title</title>\n</svelte:head>\n\n<main>There should be one</main>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-text/Layout.svelte",
    "content": "<p>This <code>p</code> and the <code>slot</code> below are direct children of the root.</p>\n<slot />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\treturn {\n\t\t\tmain: target.querySelector('main'),\n\t\t\tp: target.querySelector('p')\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/claim-text/main.svelte",
    "content": "<script>\n\timport Layout from './Layout.svelte';\n\timport Component from './Component.svelte';\n</script>\n\n<Layout>\n\t<Component />\n</Layout>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking/_config.js",
    "content": "import { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/15819\nexport default test({\n\texpect_hydration_error: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking/_expected.html",
    "content": "<p>start</p> pre123 mid<!---->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking/_override.html",
    "content": "<!--[--><p>start</p>pre<a>123</a> <!--[-->mid<!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking/main.svelte",
    "content": "<script>\n\tlet cond = true;\n</script>\n\n<p>start</p>\npre123\n{#if cond}\nmid\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking-2/_config.js",
    "content": "import { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/15819\nexport default test({\n\texpect_hydration_error: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking-2/_expected.html",
    "content": "<p>start</p><p>cond</p><!---->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking-2/_override.html",
    "content": "<!--[--><!--[--> <p>start</p><!--[--><p>cond</p><!--]--><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/cloudflare-mirage-borking-2/main.svelte",
    "content": "<script>\n\tconst cond = true;\n</script>\n\n<p>start</p>{#if cond}<p>cond</p>{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/component/Nested.svelte",
    "content": "<p>nested</p>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst p = target.querySelector('p');\n\n\t\treturn {\n\t\t\tp,\n\t\t\ttext: p?.childNodes[0]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/component/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested/>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/component-in-element/Nested.svelte",
    "content": "<p>nested</p>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/component-in-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\t\tconst p = target.querySelector('p');\n\n\t\treturn {\n\t\t\tdiv,\n\t\t\tp,\n\t\t\ttext: p?.childNodes[0]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/component-in-element/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<div>\n\t<Nested/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/css-props-hmr/Component.svelte",
    "content": "<h1>Hello</h1>\n\n<style>\n\th1 {\n\t\tcolor: var(--color);\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/css-props-hmr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\thmr: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/css-props-hmr/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n</script>\n\n<Component --color=\"red\" />"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/custom-element-with-settable-only-property/main.svelte",
    "content": "<script module>\n\tif (!customElements.get('custom-element-with-settable-only-property')) {\n\t\tcustomElements.define('custom-element-with-settable-only-property', class CustomElement extends HTMLElement {\n\t\t\tset prop(n) {\n\t\t\t\tthis.value = n;\n\t\t\t}\n\n\t\t\tget prop() {\n\t\t\t\t// invoking this getter shouldn't make hydration fail\n\t\t\t\tthrow new Error('This value is not gettable');\n\t\t\t}\n\t\t});\n\t}\n</script>\n\n<custom-element-with-settable-only-property prop=\"8\"></custom-element-with-settable-only-property>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tname: 'world'\n\t},\n\n\tsnapshot(target) {\n\t\tconst h1 = target.querySelector('h1');\n\n\t\treturn {\n\t\t\th1,\n\t\t\ttext: h1?.childNodes[0]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text-changed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tname: 'world'\n\t},\n\n\tprops: {\n\t\tname: 'everybody'\n\t},\n\n\tsnapshot(target) {\n\t\tconst h1 = target.querySelector('h1');\n\n\t\treturn {\n\t\t\th1,\n\t\t\ttext: h1?.childNodes[0]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text-changed/_expected.html",
    "content": "<!--[--><h1>Hello everybody!</h1><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text-changed/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text-nil/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst null_text = target.querySelectorAll('p')[0].textContent;\n\t\tconst undefined_text = target.querySelectorAll('p')[1].textContent;\n\n\t\treturn {\n\t\t\tnullText: null_text,\n\t\t\tundefinedText: undefined_text\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/dynamic-text-nil/main.svelte",
    "content": "<script>\n\tlet maybeNull = null;\n\tlet maybeUndefined = undefined;\n</script>\n\n{maybeNull}<hr>{maybeUndefined}<hr>\n<p>{maybeNull}</p>\n<p>{maybeUndefined}</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tthings: ['animal', 'vegetable', 'mineral']\n\t},\n\n\tsnapshot(target) {\n\t\tconst ul = target.querySelector('ul');\n\t\tassert_ok(ul);\n\t\tconst lis = ul.querySelectorAll('li');\n\n\t\treturn {\n\t\t\tul,\n\t\t\tlis0: lis[0],\n\t\t\tlis1: lis[1],\n\t\t\tlis2: lis[2]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block/main.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<ul>\n\t{#each things as thing}\n\t\t<li>{thing}</li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-0-on-server-more-on-client/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\titems: []\n\t},\n\n\tprops: {\n\t\titems: [{ name: 'a' }]\n\t},\n\n\tsnapshot(target) {\n\t\tconst ul = target.querySelector('ul');\n\t\tassert_ok(ul);\n\n\t\treturn {\n\t\t\tul\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-0-on-server-more-on-client/_expected.html",
    "content": "<!--[--><ul><!--[--><li>a</li><!--]--></ul> <ul><!--[--><li>a</li><!--]--></ul> <ul><!--[--><li>a</li><!--]--></ul> <!--[--><li>a</li> <li>a</li><!--]--> <!--[--><li>a</li> <li>a</li><!--]--> <!--[--><li>a</li> <li>a</li><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-0-on-server-more-on-client/main.svelte",
    "content": "<script>\n\tlet { items } = $props();\n</script>\n\n<ul>\n\t{#each items as item}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n<ul>\n\t{#each items as item (item)}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n<ul>\n\t{#each items as item (item.name)}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n\n{#each items as item}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n{#each items as item (item)}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n{#each items as item (item.name)}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-arg-clash/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tthings: {\n\t\t\tfoo: ['animal', 'vegetable', 'mineral']\n\t\t}\n\t},\n\n\tsnapshot(target) {\n\t\tconst ul = target.querySelector('ul');\n\t\tassert_ok(ul);\n\t\tconst lis = ul.querySelectorAll('li');\n\n\t\treturn {\n\t\t\tul,\n\t\t\tlis0: lis[0],\n\t\t\tlis1: lis[1],\n\t\t\tlis2: lis[2]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-arg-clash/main.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<ul>\n\t{#each things.foo as foo}\n\t\t<li>{foo}</li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-fallback-mismatch/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\titems1: [],\n\t\titems2: [{ name: 'a' }]\n\t},\n\n\tprops: {\n\t\titems1: [{ name: 'a' }],\n\t\titems2: []\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-fallback-mismatch/_expected.html",
    "content": "<!--[--><!--[!--><p>a</p><!--]--> <!--[--><p>empty</p><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-fallback-mismatch/main.svelte",
    "content": "<script>\n\tlet { items1, items2 } = $props();\n</script>\n\n{#each items1 as item}\n\t<p>{item.name}</p>\n{:else}\n\t<p>empty</p>\n{/each}\n\n{#each items2 as item}\n\t<p>{item.name}</p>\n{:else}\n\t<p>empty</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\titems: [{ name: 'a' }, { name: 'b' }]\n\t},\n\n\tprops: {\n\t\titems: [{ name: 'a' }]\n\t},\n\n\tsnapshot(target) {\n\t\tconst ul = target.querySelector('ul');\n\t\tassert_ok(ul);\n\t\tconst lis = ul.querySelector('li');\n\t\tassert_ok(lis);\n\n\t\treturn {\n\t\t\tul,\n\t\t\tlis\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/_expected.html",
    "content": "<!--[--><ul><!--[--><li>a</li><!--]--></ul> <ul><!--[--><li>a</li><!--]--></ul> <ul><!--[--><li>a</li><!--]--></ul> <!--[--><li>a</li> <li>a</li><!--]--> <!--[--><li>a</li> <li>a</li><!--]--> <!--[--><li>a</li> <li>a</li><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-less-nodes-on-client/main.svelte",
    "content": "<script>\n\tlet { items } = $props();\n</script>\n\n<ul>\n\t{#each items as item}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n<ul>\n\t{#each items as item (item)}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n<ul>\n\t{#each items as item (item.name)}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n\n{#each items as item}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n{#each items as item (item)}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n{#each items as item (item.name)}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-more-nodes-on-client/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\titems: [{ name: 'x' }]\n\t},\n\n\tprops: {\n\t\titems: [{ name: 'a' }, { name: 'b' }]\n\t},\n\n\tsnapshot(target) {\n\t\tconst ul = target.querySelector('ul');\n\t\tassert_ok(ul);\n\t\tconst lis = ul.querySelector('li');\n\t\tassert_ok(lis);\n\n\t\treturn {\n\t\t\tul,\n\t\t\tlis\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-more-nodes-on-client/_expected.html",
    "content": "<!--[--><ul><!--[--><li>a</li><li>b</li><!--]--></ul> <ul><!--[--><li>a</li><li>b</li><!--]--></ul> <ul><!--[--><li>a</li><li>b</li><!--]--></ul> <!--[--><li>a</li> <li>a</li><li>b</li> <li>b</li><!--]--> <!--[--><li>a</li> <li>a</li><li>b</li> <li>b</li><!--]--> <!--[--><li>a</li> <li>a</li><li>b</li> <li>b</li><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-block-more-nodes-on-client/main.svelte",
    "content": "<script>\n\tlet { items } = $props();\n</script>\n\n<ul>\n\t{#each items as item}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n<ul>\n\t{#each items as item (item)}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n<ul>\n\t{#each items as item (item.name)}\n\t\t<li>{item.name}</li>\n\t{/each}\n</ul>\n\n{#each items as item}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n{#each items as item (item)}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n{#each items as item (item.name)}\n\t<li>{item.name}</li>\n\t<li>{item.name}</li>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-else/main.svelte",
    "content": "<script>\n\texport let name = \"world\";\n\texport let foo = 'foo';\n</script>\n\n<h1>Hello, {name}</h1>\n{#each [] as _}nope{:else}\n\t<p>{foo}</p>\n{/each}\n\n<!-- a single each block inside an element is \"controlled\", which is an optimization which we test here, too -->\n<div>\n\t{#each [] as _}nope{:else}\n\t\t<p>{foo}</p>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-preserve-whitespace/main.svelte",
    "content": "<svelte:options preserveWhitespace />\n\n{#each 'abc' as l}\n\t<div>{l}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/each-text-only/main.svelte",
    "content": "{#each 'abc' as l}\n\t{l}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-added/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {},\n\n\tprops: {\n\t\tclassName: 'bar'\n\t},\n\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\n\t\treturn {\n\t\t\tdiv\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-added/_expected.html",
    "content": "<!--[--><div class=\"bar\"></div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-added/main.svelte",
    "content": "<script>\n\texport let className;\n</script>\n\n<div class={className}></div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-changed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tclassName: 'foo'\n\t},\n\n\tprops: {\n\t\tclassName: 'bar'\n\t},\n\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\n\t\treturn {\n\t\t\tdiv\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-changed/_expected.html",
    "content": "<!--[--><div class=\"bar\"></div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-changed/main.svelte",
    "content": "<script>\n\texport let className;\n</script>\n\n<div class={className}></div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-removed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tid: 'foo'\n\t},\n\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\n\t\treturn {\n\t\t\tdiv\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-removed/_expected.html",
    "content": "<!--[--><div></div> <!--[--><div></div> <div></div><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-removed/main.svelte",
    "content": "<script>\n\texport let id;\n</script>\n\n<!-- single update -->\n<div id={id}></div>\n\n{#if true}\n\t<!-- grouped updates -->\n\t<div id={id}></div>\n\t<div id={id}></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-unchanged/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\n\t\treturn {\n\t\t\tdiv\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-unchanged/main.svelte",
    "content": "<div class='foo'></div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-unchanged-2/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {any} */\nlet orig;\n\nexport default test({\n\t// This looks a bit weird, but it's the only way to test that an attribute is not\n\t// reset to a value it already has during hydration.\n\tbefore_test() {\n\t\torig = Element.prototype.setAttribute;\n\t\tElement.prototype.setAttribute = function () {\n\t\t\tconst stack = new Error().stack;\n\t\t\tif (stack?.includes('render.js')) {\n\t\t\t\tthrow new Error('setAttribute called during hydration');\n\t\t\t}\n\t\t\treturn orig.apply(this, arguments);\n\t\t};\n\t},\n\tafter_test() {\n\t\tElement.prototype.setAttribute = orig;\n\t},\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\n\t\treturn {\n\t\t\tdiv\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-attribute-unchanged-2/main.svelte",
    "content": "<script>\n    let foo = $state('bar');\n    let spread = $state({class: 'bar', foo: 'bar'});\n</script>\n\n<div class=\"{foo}\" {foo}></div>\n<div {...spread}></div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-dir-attribute-sibling/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest(assert, target) {\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.equal(p?.dir, 'rtl');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-dir-attribute-sibling/main.svelte",
    "content": "<p dir=\"rtl\">text</p>.\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\n\t\treturn {\n\t\t\tdiv,\n\t\t\tp: div?.querySelector('p')\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-nested/main.svelte",
    "content": "<div>\n\t<p>nested</p>\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-nested-sibling/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst p = target.querySelector('p');\n\t\tassert_ok(p);\n\n\t\treturn {\n\t\t\tp,\n\t\t\tspan: p.querySelector('span'),\n\t\t\tcode: p.querySelector('code')\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-nested-sibling/main.svelte",
    "content": "<p>\n    <span>1</span>\n    {#if true}\n        <code>2</code>\n    {/if}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-ref/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst h1 = target.querySelector('h1');\n\n\t\treturn {\n\t\t\th1\n\t\t};\n\t},\n\n\ttest(assert, target, _, component) {\n\t\tconst h1 = target.querySelector('h1');\n\t\tassert.equal(component.h1, h1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/element-ref/main.svelte",
    "content": "<svelte:options accessors/>\n\n<script>\n\texport let h1;\n</script>\n\n<h1 bind:this={h1}>Hello world!</h1>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/event-handler/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { assert_ok, test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tclicked: false\n\t},\n\n\tsnapshot(target) {\n\t\tconst button = target.querySelector('button');\n\n\t\treturn {\n\t\t\tbutton\n\t\t};\n\t},\n\n\tasync test(assert, target, _, component, window) {\n\t\tconst button = target.querySelector('button');\n\t\tassert_ok(button);\n\t\tbutton.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.ok(component.clicked);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<p>clicked!</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/event-handler/main.svelte",
    "content": "<script>\n\texport let clicked;\n</script>\n\n<button on:click='{() => clicked = true}'>click me</button>\n\n{#if clicked}\n\t<p>clicked!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/expression-sibling/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst p = target.querySelector('p');\n\t\tassert_ok(p);\n\n\t\treturn {\n\t\t\tp,\n\t\t\ttext: p.childNodes[0],\n\t\t\tspan: p.querySelector('span')\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/expression-sibling/main.svelte",
    "content": "<p>{1} 2 <span>3</span></p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-html-and-component/HeadNested.svelte",
    "content": "{@html '<meta name=\"head_nested_html\" content=\"head_nested_html\">'}\n<meta name=\"head_nested\" content=\"head_nested\" />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-html-and-component/Nested.svelte",
    "content": "<script>\n\tlet text = $state('foo');\n</script>\n\n<svelte:head>\n\t{@html '<meta name=\"nested_html\" content=\"nested_html\">'}\n\t<meta name=\"nested\" content=\"nested\" />\n\t<meta name=\"foo\" content={text} />\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-html-and-component/main.svelte",
    "content": "<script>\n\timport HeadNested from './HeadNested.svelte';\n\timport Nested from './Nested.svelte';\n</script>\n\n<svelte:head>\n\t<!-- the if block forces a comment node; tests that the nested head starts at the correct node -->\n\t{#if true}\n\t\t{@html '<meta name=\"main_html\" content=\"main_html\">'}\n\t\t<meta name=\"main\" content=\"main\" />\n\t\t<HeadNested />\n\t{/if}\n</svelte:head>\n\n<Nested />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-meta-hydrate-duplicate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest(assert, target, snapshot, component, window) {\n\t\tassert.equal(window.document.querySelectorAll('meta').length, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-meta-hydrate-duplicate/main.svelte",
    "content": "<svelte:head>\n  <title>Some Title</title>\n  <link rel=\"canonical\" href=\"/\">\n  <meta name=\"description\" content=\"some description\">\n  <meta name=\"keywords\" content=\"some keywords\">\n</svelte:head>\n\n<div>Just a dummy page.</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-missing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest(assert, target, snapshot, component, window) {\n\t\tassert.equal(window.document.querySelectorAll('meta').length, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-missing/_expected_head.html",
    "content": "<meta name=\"description\" content=\"some description\"> <meta name=\"keywords\" content=\"some keywords\">\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-missing/_override_head.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/hydration/samples/head-missing/main.svelte",
    "content": "<svelte:head>\n\t<meta name=\"description\" content=\"some description\" />\n\t<meta name=\"keywords\" content=\"some keywords\" />\n</svelte:head>\n\n<div>Just a dummy page.</div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/html-tag-hydration/main.svelte",
    "content": "<script>\n\tconst a = 1, b=2, c=3;\n</script>\n\n{a} {@html b} {c}"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: true\n\t},\n\n\tsnapshot(target) {\n\t\tconst p = target.querySelector('p');\n\n\t\treturn {\n\t\t\tp\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{#if foo}\n\t<p>foo!</p>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-anchor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: true,\n\t\tbar: true\n\t},\n\ttrim_whitespace: false,\n\n\tsnapshot(target) {\n\t\tconst div = target.querySelector('div');\n\t\tconst ps = target.querySelectorAll('p');\n\n\t\treturn {\n\t\t\tdiv,\n\t\t\tp0: ps[0],\n\t\t\tp1: ps[1]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-anchor/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n</script>\n\n<div>\n\t{#if foo}\n\t\t<p>foo!</p>\n\t{/if}\n\n\t{#if bar}\n\t\t<p>bar!</p>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tfoo: ''\n\t},\n\n\tprops: {\n\t\tfoo: 'x'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-empty/main.svelte",
    "content": "<script>\n\tlet foo = typeof window === 'undefined' ? '' : 'x';\n</script>\n\n{#if true}\n\t{foo}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-false/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: false\n\t},\n\n\tsnapshot(target) {\n\t\tconst p = target.querySelector('p');\n\n\t\treturn {\n\t\t\tp\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-false/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>before</p>\n{#if foo}\n\t<p>foo!</p>\n{/if}\n<p>after</p>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-mismatch/_config.js",
    "content": "import { test } from '../../test';\n\n// even {#if true} or {#if false} should be kept as an if block, because it could be {#if browser} originally,\n// which is then different between client and server.\nexport default test({\n\tserver_props: {\n\t\tcondition: false\n\t},\n\n\tprops: {\n\t\tcondition: true\n\t},\n\n\ttrim_whitespace: false\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-mismatch/_expected.html",
    "content": "<!--[--><!--[!--><p>foo</p><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-mismatch/main.svelte",
    "content": "<script>\n\tlet { condition } = $props();\n</script>\n\n{#if condition}\n\t<p>foo</p>\n{:else}\n\t<p>bar</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-mismatch-2/_config.js",
    "content": "import { test } from '../../test';\n\n// even {#if true} or {#if false} should be kept as an if block, because it could be {#if browser} originally,\n// which is then different between client and server.\nexport default test({\n\tserver_props: {\n\t\tcondition: true\n\t},\n\n\tprops: {\n\t\tcondition: false\n\t},\n\n\ttrim_whitespace: false\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-mismatch-2/_expected.html",
    "content": "<!--[--><!--[--><!--]--> <div><!--[--><!--]--></div> hello<!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-mismatch-2/main.svelte",
    "content": "<script>\n\tlet { condition } = $props();\n</script>\n\n{#if condition}\n\t<slot />\n{/if}\n\n<div>\n\t<slot />\n</div>\n\nhello\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: true,\n\t\tbar: false\n\t},\n\ttrim_whitespace: false,\n\n\tsnapshot(target) {\n\t\tconst p = target.querySelector('p');\n\n\t\treturn {\n\t\t\tp\n\t\t};\n\t},\n\n\ttest(assert, target, _, component) {\n\t\tcomponent.foo = false;\n\t\tcomponent.bar = true;\n\t\tassert.htmlEqual(target.innerHTML, '<p>bar!</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/if-block-update/main.svelte",
    "content": "<svelte:options accessors={true}/>\n\n<script>\n\texport let foo;\n\texport let bar;\n</script>\n\n{#if foo}\n\t<p>foo!</p>\n{/if}\n\n{#if bar}\n\t<p>bar!</p>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/ignore-mismatched-href/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\ttest(assert, target) {\n\t\tassert.equal(target.querySelector('link')?.getAttribute('href'), '/bar');\n\t},\n\n\terrors: [\n\t\t'The `href` attribute on `<link href=\"/bar\">` changed its value between server and client renders. The client value, `/foo`, will be ignored in favour of the server value'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/ignore-mismatched-href/main.svelte",
    "content": "<script>\n\tlet { browser } = $props();\n</script>\n\n<link href={browser ? '/foo' : '/bar'} />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/img-src-mismatch/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tsrc: 'server.jpg'\n\t},\n\tprops: {\n\t\tsrc: 'client.jpg'\n\t},\n\ttest(assert, target) {\n\t\t// We deliberately don't slow down hydration just for supporting this edge case mismatch.\n\t\tassert.htmlEqual(target.innerHTML, '<img src=\"server.jpg\" alt=\"\">');\n\t},\n\terrors: [\n\t\t'The `src` attribute on `<img src=\"server.jpg\" alt=\"\">` changed its value between server and client renders. The client value, `client.jpg`, will be ignored in favour of the server value'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/img-src-mismatch/main.svelte",
    "content": "<script>\n\tlet { src } = $props();\n</script>\n\n<img {src} alt=\"\" />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest(assert, target) {\n\t\tconst input = target.querySelector('input');\n\n\t\tassert.equal(input?.checked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/_expected.html",
    "content": "<!--[--><!---->.<input><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/input-checked-attribute-sibling/main.svelte",
    "content": ".<input checked />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/input-value-changed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tname: 'server'\n\t},\n\n\tprops: {\n\t\tname: 'browser'\n\t},\n\n\ttest(assert, target) {\n\t\tconst input = target.querySelector('input');\n\t\tassert.equal(input?.value, 'browser');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/input-value-changed/_expected.html",
    "content": "<!--[--><input type=\"text\"><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/input-value-changed/main.svelte",
    "content": "<script>\n\tconst { name } = $props();\n</script>\n\n<input type=\"text\" value={name} />\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/no-reset-debug/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {typeof console.log} */\nlet log;\n\nexport default test({\n\tbefore_test() {\n\t\tlog = console.log;\n\t\tconsole.log = () => {};\n\t},\n\n\tafter_test() {\n\t\tconsole.log = log;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/no-reset-debug/main.svelte",
    "content": "<script>\n\tlet test = 42;\n</script>\n\n<div>\n\t{@debug test}\n\t<span>something</span>\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/no-reset-snippet/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/no-reset-snippet/main.svelte",
    "content": "<div>\n\t{#snippet test()}\n\t\t\n\t{/snippet}\n\t<span>something</span>\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/noscript/_expected.html",
    "content": "<!--[--><noscript>JavaScript is required for this site.</noscript> <h1>Hello!</h1><p>Count: 1</p><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/noscript/main.svelte",
    "content": "<script>\n  import { onMount } from \"svelte\";\n  let count = 0;\n  onMount(() => count++);\n</script>\n\n<noscript>JavaScript is required for this site.</noscript>\n\n<h1>Hello!</h1><p>Count: {count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/optgroup-rich-content/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// This test verifies that hydration works correctly for\n\t// optgroup elements with rich HTML content (non-option elements inside optgroup)\n\tsnapshot(target) {\n\t\tconst select = target.querySelector('select');\n\n\t\treturn {\n\t\t\tselect\n\t\t};\n\t},\n\n\tasync test(assert, target) {\n\t\tconst optgroup = target.querySelector('optgroup');\n\t\tconst options = target.querySelectorAll('option');\n\t\tconst button = target.querySelector('button');\n\n\t\t// Check options content - the span inside optgroup gets stripped but text remains\n\t\tassert.equal(options[0]?.textContent, 'hello hello');\n\t\tassert.equal(options[1]?.textContent, 'Plain option');\n\n\t\t// Update via button click\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.equal(options[0]?.textContent, 'changed changed');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/optgroup-rich-content/_expected.html",
    "content": "<select><optgroup label=\"Fruits\">hello <option value=\"a\"><span>hello</span> hello</option><option value=\"b\">Plain option</option></optgroup><optgroup label=\"Static Group\"><option value=\"c\">Another option</option></optgroup></select> <button></button>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/optgroup-rich-content/main.svelte",
    "content": "<script>\n\tlet label = $state('hello');\n</script>\n\n<select>\n\t<optgroup label=\"Fruits\">\n\t\t<span class=\"group-header\">{label}</span>\n\t\t<option value=\"a\"><span>{label}</span> {label}</option>\n\t\t<option value=\"b\">Plain option</option>\n\t</optgroup>\n\t<optgroup label=\"Static Group\">\n\t\t<option value=\"c\">Another option</option>\n\t</optgroup>\n</select>\n\n<button onclick={() => label = \"changed\"}></button>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/option-rich-content-continues/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// This test verifies that hydration continues correctly after\n\t// an option element with rich HTML content\n\tsnapshot(target) {\n\t\tconst select = target.querySelector('select');\n\t\tconst options = target.querySelectorAll('option');\n\t\tconst p = target.querySelector('p');\n\t\tconst button = target.querySelector('button');\n\n\t\treturn {\n\t\t\tselect,\n\t\t\toption1: options[0],\n\t\t\toption2: options[1],\n\t\t\tp,\n\t\t\tbutton\n\t\t};\n\t},\n\n\tasync test(assert, target) {\n\t\tconst option = target.querySelector('option');\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.equal(option?.textContent, 'hello hello');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.equal(option?.textContent, 'changed changed');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/option-rich-content-continues/_expected.html",
    "content": "<select><option value=\"a\">hello hello</option><option value=\"b\">Plain text</option></select> <button></button>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/option-rich-content-continues/main.svelte",
    "content": "<script>\n\tlet label = $state('hello');\n\tlet count = $state(42);\n</script>\n\n<select>\n\t<!-- this would fail during hydration if rich_option handling is not correct -->\n\t<option value=\"a\"><span>{label}</span> {label}</option>\n\t<option value=\"b\">Plain text</option>\n</select>\n\t\n<button onclick={() => label = \"changed\"}></button>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/option-rich-content-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// This test verifies that completely static select with rich option content\n\t// hydrates correctly and the content is preserved\n\tsnapshot(target) {\n\t\tconst select = target.querySelector('select');\n\t\tconst options = target.querySelectorAll('option');\n\n\t\treturn {\n\t\t\tselect,\n\t\t\toption1: options[0],\n\t\t\toption2: options[1],\n\t\t\toption3: options[2]\n\t\t};\n\t},\n\n\tasync test(assert, target) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\t// Verify the rich content is present in the options\n\t\tassert.equal(options[0]?.textContent, 'Bold Option');\n\t\tassert.equal(options[1]?.textContent, 'Italic Option');\n\t\tassert.equal(options[2]?.textContent, 'Plain Option');\n\n\t\t// Check that the rich elements are actually there (on supporting browsers)\n\t\tconst strong = options[0]?.querySelector('strong');\n\t\tconst em = options[1]?.querySelector('em');\n\n\t\t// These may or may not exist depending on browser support\n\t\t// but the text content should always be correct\n\t\tif (strong) {\n\t\t\tassert.equal(strong.textContent, 'Bold');\n\t\t}\n\t\tif (em) {\n\t\t\tassert.equal(em.textContent, 'Italic');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/option-rich-content-static/_expected.html",
    "content": "<select><option value=\"a\"><strong>Bold</strong> Option</option><option value=\"b\"><em>Italic</em> Option</option><option value=\"c\">Plain Option</option></select>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/option-rich-content-static/main.svelte",
    "content": "<select>\n\t<option value=\"a\"><strong>Bold</strong> Option</option>\n\t<option value=\"b\"><em>Italic</em> Option</option>\n\t<option value=\"c\">Plain Option</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/pre-first-node-newline/_config.js",
    "content": "import { test } from '../../test';\n\n// A note about _expected.html: It is different from body.html because we're\n// testing against target.innerHTML which already removed the redundant first newline\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html",
    "content": "<!--[--><pre>static content no line</pre> <pre>\tstatic content ignored line\n</pre> <pre>\n\tstatic content relevant line\n</pre> <pre><div><span></span></div>\n</pre> <pre>\n<div><span></span></div>\n</pre><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/pre-first-node-newline/main.svelte",
    "content": "<script>\n\tlet name = $state('');\n</script>\n\n<pre>static content no line</pre>\n\n<pre>\n\tstatic content ignored line\n</pre>\n\n<pre>\n\n\tstatic content relevant line\n</pre>\n\n<pre>\n<div><span>{name}</span></div>\n</pre>\n\n<pre>\n\n<div><span>{name}</span></div>\n</pre>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\traw: '<p>this is some html</p> <p>and so is this</p>'\n\t},\n\n\tsnapshot(target) {\n\t\tconst ps = target.querySelectorAll('p');\n\n\t\treturn {\n\t\t\tp0: ps[0],\n\t\t\ttext0: ps[0].firstChild,\n\t\t\tp1: ps[1],\n\t\t\ttext1: ps[1].firstChild\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\n{@html raw}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\thtml: '<div></div>'\n\t},\n\n\tprops: {\n\t\thtml: '<div></div>'\n\t},\n\n\ttest(assert, target) {\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-empty/main.svelte",
    "content": "<div>{@html ''}</div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-mismatch/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\thtml: 'Server'\n\t},\n\n\tprops: {\n\t\thtml: 'Client'\n\t},\n\n\ttest(assert, target) {\n\t\t// We deliberately don't slow down hydration just for supporting this edge case mismatch.\n\t\t// If someone really needs this and workarounds are insufficient we could add something like {@html dynamic ...}\n\t\tassert.htmlEqual(target.innerHTML, 'Server');\n\t},\n\n\terrors: [\n\t\t'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-mismatch/main.svelte",
    "content": "<script>\n\tlet { html } = $props();\n</script>\n\n{@html html}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-mismatch-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest(assert, target) {\n\t\t// This test case guards against a potential future bug where we could optimize html tags away for static content:\n\t\t// Even if the {@html } block seems static, it should be preserved as such, because it could be dynamic originally\n\t\t// (like {@html browser ? 'foo' : 'bar'} which is then different between client and server.\n\t\t// Also see https://github.com/sveltejs/svelte/issues/8683 where this happened for Svelte 4.\n\t\tassert.htmlEqual(target.innerHTML, 'Server');\n\t},\n\n\terrors: [\n\t\t'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-mismatch-static/main.client.svelte",
    "content": "{@html '<p>Client</p> <span>has more nodes so if we would walk this because we think it is static we would get an error</span>'}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-mismatch-static/main.server.svelte",
    "content": "{@html 'Server'}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-repair/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\texpect_hydration_error: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-repair/_expected.html",
    "content": "<!----><p><p>invalid</p><!----></p><!----> <p><p>invalid</p><!----></p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-repair/inner.svelte",
    "content": "<script>\n\texport let content;\n</script>\n\n<p>{@html content}</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-repair/main.svelte",
    "content": "<script>\n\timport Inner from './inner.svelte';\n</script>\n\n<Inner content=\"<p>invalid</p>\" />\n\n<p>{@html '<p>invalid</p>'}</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-svg/_config.js",
    "content": "import { assert_ok, test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst svg = target.querySelector('svg');\n\t\tassert_ok(svg);\n\n\t\treturn {\n\t\t\tsvg,\n\t\t\tcircle: svg.querySelector('circle')\n\t\t};\n\t},\n\ttest(assert, _, snapshot) {\n\t\tassert.instanceOf(snapshot.svg, SVGElement);\n\t\tassert.instanceOf(snapshot.circle, SVGElement);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-svg/main.svelte",
    "content": "<svg>{@html '<circle cx=\"200\" cy=\"500\" r=\"200\"></circle>'}</svg>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/raw-with-empty-line-at-top/main.svelte",
    "content": "<script>\n\tlet content = [\"a \", \"b \", \"c \"];\n</script>\n\n<div>before</div>\n<br>\n\n{#each content as c}\n    {@html c}\n{/each}\n<div>after</div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/removes-undefined-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tprops: {\n\t\tbrowser: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/removes-undefined-attributes/_expected.html",
    "content": "<!--[--><div></div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/removes-undefined-attributes/main.svelte",
    "content": "<script>\n\tconst { browser } = $props();\n\n\tconst attributes = {\n\t\t\"data-test\": browser ? undefined : \"\"\n\t};\n</script>\n\n<div {...attributes}></div>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/repair-mismatched-a-href/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tprops: {\n\t\tbrowser: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/repair-mismatched-a-href/_expected.html",
    "content": "<!--[--><a href=\"/foo\">foo</a> <a href=\"/foo\">foo</a><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/repair-mismatched-a-href/main.svelte",
    "content": "<script>\n\tlet { browser } = $props();\n</script>\n\n<a href={browser ? '/foo' : '/bar'}>foo</a>\n<a {...{href: browser ? '/foo' : '/bar'}}>foo</a>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/repairs-apparent-static-content/_config.js",
    "content": "import { test } from '../../test';\n\n// This test ensures that expressions that seem static (like {'foo'}) are not statically inlined, because\n// they could've been dynamic originally (like {browser ? 'foo' : 'bar'}).\nexport default test({\n\tsnapshot(target) {\n\t\treturn {\n\t\t\th1: target.querySelector('h1')\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/repairs-apparent-static-content/main.svelte",
    "content": "<h1>Hello {'client'}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/rich-select/Option.svelte",
    "content": "<option>Option component</option>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/rich-select/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/rich-select/main.svelte",
    "content": "<script>\n\tlet items = [1, 2, 3];\n\tlet show = true;\n\tlet html = '<option>From HTML</option>';\n\n\timport Option from './Option.svelte';\n</script>\n\n<!-- select with rich option (has span inside) - SHOULD use customizable_select_element -->\n<select>\n\t<option><span>Rich</span></option>\n</select>\n\n<!-- select with each containing plain options - should NOT use customizable_select_element -->\n<select>\n\t{#each items as item}\n\t\t<option>{item}</option>\n\t{/each}\n</select>\n\n<!-- select with if containing plain options - should NOT use customizable_select_element -->\n<select>\n\t{#if show}\n\t\t<option>Visible</option>\n\t{/if}\n</select>\n\n<!-- select with key containing plain options - should NOT use customizable_select_element -->\n<select>\n\t{#key items}\n\t\t<option>Keyed</option>\n\t{/key}\n</select>\n\n<!-- select with snippet defined at top level and rendered - should NOT use customizable_select_element -->\n{#snippet opt()}\n\t<option>Snippet</option>\n{/snippet}\n<select>\n\t{@render opt()}\n</select>\n\n<!-- select with const inside each (should be ignored) - should NOT use customizable_select_element -->\n<select>\n\t{#each items as item}\n\t\t{@const x = item * 2}\n\t\t<option>{x}</option>\n\t{/each}\n</select>\n\n<!-- optgroup with rich option - SHOULD use customizable_select_element -->\n<select>\n\t<optgroup label=\"Group\">\n\t\t<option><strong>Bold</strong></option>\n\t</optgroup>\n</select>\n\n<!-- optgroup with each containing plain options - should NOT use customizable_select_element -->\n<select>\n\t<optgroup label=\"Group\">\n\t\t{#each items as item}\n\t\t\t<option>{item}</option>\n\t\t{/each}\n\t</optgroup>\n</select>\n\n<!-- option with rich content (span) - SHOULD use customizable_select_element -->\n<select>\n\t<option value=\"a\"><em>Italic</em> text</option>\n</select>\n\n<!-- nested: select > each > option with rich content - SHOULD use customizable_select_element on option -->\n<select>\n\t{#each items as item}\n\t\t<option><span>{item}</span></option>\n\t{/each}\n</select>\n\n<!-- nested: select > if > each > plain options - should NOT use customizable_select_element -->\n<select>\n\t{#if show}\n\t\t{#each items as item}\n\t\t\t<option>{item}</option>\n\t\t{/each}\n\t{/if}\n</select>\n\n<!-- select with svelte:boundary containing plain options - should NOT use customizable_select_element -->\n<select>\n\t<svelte:boundary>\n\t\t<option>Boundary</option>\n\t</svelte:boundary>\n</select>\n\n<!-- select with svelte:boundary containing rich options - SHOULD use customizable_select_element on option -->\n<select>\n\t<svelte:boundary>\n\t\t<option><span>Rich in boundary</span></option>\n\t</svelte:boundary>\n</select>\n\n<!-- select with Component - SHOULD be treated as rich content -->\n<select>\n\t<Option />\n</select>\n\n<!-- select with @render snippet - SHOULD be treated as rich content -->\n{#snippet option_snippet()}\n\t<option>Rendered</option>\n{/snippet}\n<select>\n\t{@render option_snippet()}\n</select>\n\n<!-- select with @html - SHOULD be treated as rich content -->\n<select>\n\t{@html html}\n</select>\n\n<!-- optgroup with Component - SHOULD be treated as rich content -->\n<select>\n\t<optgroup label=\"Group\">\n\t\t<Option />\n\t</optgroup>\n</select>\n\n<!-- optgroup with @render - SHOULD be treated as rich content -->\n{#snippet option_snippet2()}\n\t<option>Rendered in group</option>\n{/snippet}\n<select>\n\t<optgroup label=\"Group\">\n\t\t{@render option_snippet2()}\n\t</optgroup>\n</select>\n\n<!-- option with @html inside - SHOULD use customizable_select_element -->\n<select>\n\t<option>{@html '<strong>Bold HTML</strong>'}</option>\n</select>\n\n<!-- each block inside select with Component - SHOULD be treated as rich -->\n<select>\n\t{#each items as item}\n\t\t<Option />\n\t{/each}\n</select>\n\n<!-- if block inside select with @render - SHOULD be treated as rich -->\n{#snippet conditional_option()}\n\t<option>Conditional</option>\n{/snippet}\n<select>\n\t{#if show}\n\t\t{@render conditional_option()}\n\t{/if}\n</select>\n\n<!-- select with button/selectedcontent and static options - SHOULD use customizable_select_element -->\n<select>\n\t<button><selectedcontent></selectedcontent></button>\n\t<option>cool</option>\n\t<option>cooler</option>\n\t<option>coolerone</option>\n</select>\n\n<!-- select with button/selectedcontent and dynamic options - SHOULD use customizable_select_element -->\n<select>\n\t<button><selectedcontent></selectedcontent></button>\n\t{#each items as item}\n\t\t<option>{item}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\texpect_hydration_error: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking/_expected.html",
    "content": "<h1>call +636-555-3226 now<span>!</span></h1>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking/_override.html",
    "content": "<!--[--><h1>call <a href=\"tel:+636-555-3226\">+636-555-3226</a> now<span>!</span></h1><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking/main.svelte",
    "content": "<script>\n\tconst message = `call +636-555-3226 now`;\n</script>\n\n<h1>{message}<span>!</span></h1>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking-2/Child.svelte",
    "content": "<script>\n\tconst message = `call +636-555-3226 now`;\n</script>\n\n<hr />\n{message}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\texpect_hydration_error: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking-2/_override.html",
    "content": "<!--[--><hr> call <a href=\"tel:+636-555-3226\">+636-555-3226</a> now<!----> <p>42</p><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/safari-borking-2/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child />\n<p>{40 + 2}</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\tconst script = target.querySelector('script');\n\n\t\treturn {\n\t\t\tscript\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/script/_expected.html",
    "content": "<!--[--><!----><script>{}<!----></script><!----><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/script/main.svelte",
    "content": "<svelte:element this={\"script\"}>{\"{}\"}</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/snippet-raw-hydrate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\treturn {\n\t\t\tp: target.querySelector('p')\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/snippet-raw-hydrate/_expected.html",
    "content": "<!--[--><p>hydrated</p><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/snippet-raw-hydrate/main.svelte",
    "content": "<script>\n\timport { createRawSnippet } from 'svelte';\n\n\tconst snippet = createRawSnippet(() => ({\n\t\trender: () => `\n\t\t\t<p>rendered</p>\n\t\t`,\n\t\tsetup(p) {\n\t\t\tp.textContent = 'hydrated';\n\t\t}\n\t}));\n</script>\n\n{@render snippet()}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-component/Child.svelte",
    "content": "<p>child</p>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-component/_config.js",
    "content": "import { test } from '../../test';\n\n// Ensure that we don't create additional comment nodes for standalone components\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-component/_expected.html",
    "content": "<!--[--><!--[--><p>child</p><!--]--> <!--[--><p>child</p><p>child</p><p>child</p><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-component/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n{#if true}\n\t<Child />\n{/if}\n\n{#each [1, 2, 3] as n}\n\t<Child />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-snippet/_config.js",
    "content": "import { test } from '../../test';\n\n// Ensure that we don't create additional comment nodes for standalone components\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-snippet/_expected.html",
    "content": "<!--[--><!--[--><p>thing</p><!--]--> <!--[--><p>thing</p><p>thing</p><p>thing</p><!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/standalone-snippet/main.svelte",
    "content": "{#snippet thing()}\n\t<p>thing</p>\n{/snippet}\n\n{#if true}\n\t{@render thing()}\n{/if}\n\n{#each [1, 2, 3] as n}\n\t{@render thing()}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/surrounding-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/surrounding-whitespace/_expected.html",
    "content": "\t\t<!-- unrelated comment -->\n\t\t<!--[--><!--[-->hello<!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/surrounding-whitespace/_override.html",
    "content": "\t\t<!-- unrelated comment -->\n\t\t<!--[--><!--[-->hello<!--]--><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/surrounding-whitespace/main.svelte",
    "content": "{#if true}hello{/if}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tx: ''\n\t},\n\n\tprops: {\n\t\tx: 'x'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-empty/_expected.html",
    "content": "<!--[--><!---->x<!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-empty/main.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n{x}\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-empty-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-empty-2/_expected.html",
    "content": "<!--[--><span><span></span></span><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-empty-2/main.svelte",
    "content": "<script>\n\tlet { name, remaining } = $props();\n</script>\n\n<span>\n\t<span>{name}</span>{remaining >= 2 ? ',' : ''}\n</span>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-fallback/Nested.svelte",
    "content": "<div>\n\t<slot name=\"foo\">\n\t\tfoo fallback\n\t</slot>\n\n\t<slot></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-fallback/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttrim_whitespace: false\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/text-fallback/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte'\n</script>\n\n<Nested>\n\t<div slot=\"foo\">\n\t\tfoo override\n\t</div>\n\n\tdefault\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/top-level-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tsnapshot(target) {\n\t\treturn {\n\t\t\ttext: target.childNodes[0]\n\t\t};\n\t},\n\n\ttest(assert, target, snapshot) {\n\t\tconst text = target.childNodes[0];\n\n\t\tassert.equal(text, snapshot.text);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/top-level-text/main.svelte",
    "content": "Text"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/whitespace-at-block-start/Nested.svelte",
    "content": "<p>nested</p>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/whitespace-at-block-start/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terrors: [\n\t\t'Failed to hydrate: ',\n\t\tnew DOMException(\"Node can't be inserted in a #text parent.\", 'HierarchyRequestError')\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/whitespace-at-block-start/_expected.html",
    "content": "<main><p>nested</p><!----></main>"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/whitespace-at-block-start/_override.html",
    "content": "<!--[-->\n<main><p>nested</p><!----></main><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/hydration/samples/whitespace-at-block-start/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<main>\n\t<Nested />\n</main>"
  },
  {
    "path": "packages/svelte/tests/hydration/test.ts",
    "content": "// @vitest-environment jsdom\n\nimport * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { compile_directory } from '../helpers.js';\nimport { assert_html_equal } from '../html_equal.js';\nimport { fragments } from '../helpers.js';\nimport { assert_ok, suite, type BaseTest } from '../suite.js';\nimport { createClassComponent } from 'svelte/legacy';\nimport { render } from 'svelte/server';\nimport type { CompileOptions } from '#compiler';\nimport { flushSync } from 'svelte';\n\ninterface HydrationTest extends BaseTest {\n\tload_compiled?: boolean;\n\tserver_props?: Record<string, any>;\n\tid_prefix?: string;\n\tprops?: Record<string, any>;\n\tcompileOptions?: Partial<CompileOptions>;\n\t/**\n\t * By default, whitespace between ssr comments is removed so the output looks a bit more readable.\n\t * Some tests rely on the whitespace being there, so set this to false to disable the removal.\n\t */\n\ttrim_whitespace?: false;\n\texpect_hydration_error?: true;\n\tsnapshot?: (target: HTMLElement) => any;\n\ttest?: (\n\t\tassert: typeof import('vitest').assert & {\n\t\t\thtmlEqual(a: string, b: string, description?: string): void;\n\t\t},\n\t\ttarget: HTMLElement,\n\t\tsnapshot: any,\n\t\tcomponent: any,\n\t\twindow: any\n\t) => void | Promise<void>;\n\tbefore_test?: () => void;\n\tafter_test?: () => void;\n\terrors?: any[];\n}\n\nfunction read(path: string): string | void {\n\treturn fs.existsSync(path) ? fs.readFileSync(path, 'utf-8') : undefined;\n}\n\nconst { test, run } = suite<HydrationTest>(async (config, cwd) => {\n\tif (!config.load_compiled) {\n\t\tawait compile_directory(cwd, 'client', {\n\t\t\taccessors: true,\n\t\t\tfragments,\n\t\t\t...config.compileOptions\n\t\t});\n\n\t\tawait compile_directory(cwd, 'server', config.compileOptions);\n\t}\n\n\tconfig.before_test?.();\n\n\tconst target = window.document.body;\n\tconst head = window.document.head;\n\n\tconst rendered = render((await import(`${cwd}/_output/server/main.svelte.js`)).default, {\n\t\tprops: config.server_props ?? config.props ?? {},\n\t\tidPrefix: config?.id_prefix\n\t});\n\n\tconst override = read(`${cwd}/_override.html`);\n\tconst override_head = read(`${cwd}/_override_head.html`);\n\n\tfs.writeFileSync(`${cwd}/_output/body.html`, rendered.html + '\\n');\n\ttarget.innerHTML = override ?? rendered.html;\n\n\tif (rendered.head) {\n\t\tfs.writeFileSync(`${cwd}/_output/head.html`, rendered.head + '\\n');\n\t\thead.innerHTML = override_head ?? rendered.head;\n\t}\n\n\ttry {\n\t\tconst snapshot = config.snapshot ? config.snapshot(target) : {};\n\n\t\tconst warn = console.warn;\n\t\tconst errors: any[] = [];\n\t\tlet got_hydration_error = false;\n\t\tconsole.warn = (...args: any[]) => {\n\t\t\tif (args[0].startsWith('%c[svelte]')) {\n\t\t\t\t// TODO convert this to structured data, for more robust comparison?\n\t\t\t\tconst text = args[0];\n\t\t\t\tconst code = text.slice(11, text.indexOf('\\n%c', 11));\n\t\t\t\tlet message = text.slice(text.indexOf('%c', 2) + 2);\n\n\t\t\t\t// Remove the \"https://svelte.dev/e/...\" link at the end\n\t\t\t\tconst lines = message.split('\\n');\n\t\t\t\tif (lines.at(-1)?.startsWith('https://svelte.dev/e/')) {\n\t\t\t\t\tlines.pop();\n\t\t\t\t}\n\t\t\t\tmessage = lines.join('\\n');\n\n\t\t\t\tif (typeof message === 'string' && code === 'hydration_mismatch') {\n\t\t\t\t\tgot_hydration_error = true;\n\t\t\t\t\tif (!config.expect_hydration_error) {\n\t\t\t\t\t\twarn(message);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\terrors.push(message);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrors.push(...args);\n\t\t\t}\n\t\t};\n\n\t\tconst component = createClassComponent({\n\t\t\tcomponent: (await import(`${cwd}/_output/client/main.svelte.js`)).default,\n\t\t\ttarget,\n\t\t\thydrate: true,\n\t\t\tprops: config.props,\n\t\t\tidPrefix: config?.id_prefix\n\t\t});\n\n\t\tconsole.warn = warn;\n\n\t\tif (config.expect_hydration_error) {\n\t\t\tassert.ok(got_hydration_error, 'Expected hydration error');\n\t\t} else {\n\t\t\tassert.ok(!got_hydration_error, 'Unexpected hydration error');\n\t\t}\n\n\t\tif (config.errors) {\n\t\t\tassert.deepEqual(errors, config.errors);\n\t\t} else if (errors.length) {\n\t\t\tthrow new Error(`Unexpected errors: ${errors.join('\\n')}`);\n\t\t}\n\n\t\tflushSync();\n\n\t\tconst expected = read(`${cwd}/_expected.html`) ?? rendered.html;\n\t\tassert_html_equal(target.innerHTML, expected);\n\n\t\tif (rendered.head) {\n\t\t\tconst expected = read(`${cwd}/_expected_head.html`) ?? rendered.head;\n\t\t\tassert_html_equal(head.innerHTML, expected);\n\t\t}\n\n\t\tif (config.snapshot) {\n\t\t\tconst snapshot_after = config.snapshot(target);\n\t\t\tfor (const s in snapshot_after) {\n\t\t\t\tassert.ok(\n\t\t\t\t\t// Error logger borks because of circular references so use this instead\n\t\t\t\t\tsnapshot_after[s] === snapshot[s],\n\t\t\t\t\t`Expected snapshot key \"${s}\" to have same value/reference`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (config.test) {\n\t\t\tawait config.test(\n\t\t\t\t// @ts-expect-error TS doesn't get it\n\t\t\t\t{\n\t\t\t\t\t...assert,\n\t\t\t\t\thtmlEqual: assert_html_equal\n\t\t\t\t},\n\t\t\t\ttarget,\n\t\t\t\tsnapshot,\n\t\t\t\tcomponent,\n\t\t\t\twindow\n\t\t\t);\n\t\t}\n\n\t\tcomponent.$destroy();\n\t\t// use the assert_html_equal function because there will be <!--ssr:X--> comments left\n\t\tassert_html_equal(target.innerHTML, '');\n\t} finally {\n\t\tconfig.after_test?.();\n\t}\n});\nexport { test, assert_ok };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/manual/each-stress-test/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from 'svelte';\n\n\tconst VALUES = Array.from('abcdefghijklmnopqrstuvwxyz');\n\n\tconst presets = [\n\t\t// b is never destroyed\n\t\t[\n\t\t\t\"ab\",\n\t\t\t\"\",\n\t\t\t\"a\",\n\t\t\t\"abc\"\n\t\t],\n\t\t// the final state is 'abc', not 'cba'\n\t\t[\n\t\t\t\"abc\",\n\t\t\t\"\",\n\t\t\t\"cba\"\n\t\t],\n\t\t// the case in https://github.com/sveltejs/svelte/pull/17240\n\t\t[\n\t\t\t\"abc\",\n\t\t\t\"adbc\",\n\t\t\t\"adebc\"\n\t\t],\n\t\t[\n\t\t\t\"ab\",\n\t\t\t\"a\",\n\t\t\t\"abc\"\n\t\t],\n\t\t[\n\t\t\t\"a\",\n\t\t\t\"bc\",\n\t\t\t\"bcd\"\n\t\t],\n\t\t// add more presets by hitting 'party' and copying from the console\n\t];\n\n\tfunction shuffle() {\n\t\tconst values = VALUES.slice();\n\t\tconst number = Math.floor(Math.random() * VALUES.length);\n\t\tlet shuffled = '';\n\t\tfor (let i = 0; i < number; i++) {\n\t\t\tshuffled += (values.splice(Math.floor(Math.random() * (number - i)), 1))[0];\n\t\t}\n\n\t\treturn shuffled;\n\t}\n\n\tfunction mark(node) {\n\t\tlet prev = -1;\n\n\t\treturn {\n\t\t\tduration: transition ? (slow ? 5000 : 500) : 0,\n\t\t\ttick(t) {\n\t\t\t\tconst direction = t >= prev ? 'in' : 'out';\n\t\t\t\tnode.style.color = direction === 'in' ? '' : 'grey';\n\n\t\t\t\tprev = t;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst record = [];\n\n\tconst sleep = (ms = slow ? 1000 : 100) => new Promise((f) => setTimeout(f, ms));\n\n\tasync function test(x: string) {\n\t\tconsole.group(JSON.stringify(x));\n\t\terror = null;\n\n\t\tlist = x;\n\t\trecord.push(list);\n\t\tif (transition) {\n\t\t\tawait sleep();\n\t\t} else {\n\t\t\tawait tick();\n\t\t\tawait tick();\n\t\t}\n\t\tcheck('reconcile');\n\n\t\tn += 1;\n\t\tawait tick();\n\t\tcheck('update');\n\t\tconsole.groupEnd();\n\t}\n\n\tfunction check(task: string) {\n\t\tconst expected = list.split('').map((c) => `(${c}:${n})`).join('') || '(fallback)';\n\n\t\tconst children = Array.from(container.children);\n\t\tconst filtered = children.filter((span: HTMLElement) => !span.style.color);\n\t\tconst received = filtered.map((span) => span.textContent).join('');\n\n\t\tif (expected !== received) {\n\t\t\tconsole.log('expected:', expected);\n\t\t\tconsole.log('received:', received);\n\t\t\tconsole.log(JSON.stringify(record, null, '  '));\n\n\t\t\terror = `failed to ${task}`;\n\t\t\tthrow new Error(error);\n\t\t}\n\t}\n\n\tlet list = $state('');\n\tlet n = $state(0);\n\tlet error = $state(null);\n\tlet slow = $state(false);\n\tlet transition = $state(true);\n\tlet partying = $state(false);\n\n\tlet container: HTMLElement;\n</script>\n\n<h1>each block stress test</h1>\n\n<label>\n\t<input type=\"checkbox\" bind:checked={transition} />\n\ttransition\n</label>\n\n<label>\n\t<input type=\"checkbox\" bind:checked={slow} />\n\tslow\n</label>\n\n<fieldset>\n\t<legend>random</legend>\n\n\t<button onclick={() => test(shuffle())}>test</button>\n\t<button onclick={async () => {\n\t\tif (partying) {\n\t\t\tpartying = false;\n\t\t} else {\n\t\t\tpartying = true;\n\t\t\twhile (partying) await test(shuffle());\n\t\t}\n\t}}>{partying ? 'stop' : 'party'}</button>\n</fieldset>\n\n<fieldset>\n\t<legend>presets</legend>\n\n\t{#each presets as preset, index}\n\t\t<button onclick={async () => {\n\t\t\tfor (let i = 0; i < preset.length; i += 1) {\n\t\t\t\tawait test(preset[i]);\n\t\t\t}\n\t\t}}>{index + 1}</button>\n\t{/each}\n</fieldset>\n\n<form onsubmit={(e) => {\n\te.preventDefault();\n\ttest(e.currentTarget.querySelector('input').value);\n}}>\n\t<fieldset>\n\t\t<legend>input</legend>\n\t\t<input />\n\t</fieldset>\n</form>\n\n<div id=\"output\" bind:this={container}>\n\t{#each list as c (c)}\n\t\t<span transition:mark>({c}:{n})</span>\n\t{:else}\n\t\t<span transition:mark>(fallback)</span>\n\t{/each}\n</div>\n\n{#if error}\n\t<p class=\"error\">{error}</p>\n{/if}\n\n<style>\n\tfieldset {\n\t\tdisplay: flex;\n\t\tgap: 0.5em;\n\t\tborder-radius: 0.5em;\n\t\tcorner-shape: squircle;\n\t\tmargin: 0 0 1em 0;\n\t\tpadding: 0.2em 0.8em 0.8em;\n\t}\n\n\tlegend {\n\t\tpadding: 0.2em 0.5em;\n\t\tleft: -0.2em;\n\t\tposition: relative;\n\t}\n\n\t.error {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/$$slots-used-as-variable/input.svelte",
    "content": "<script>\n\texport let showMessage = $$slots.message;\n\n\tlet showTitle = $$slots.title;\n\n\t$: extraTitle = $$slots.extra;\n</script>\n\n{#if showMessage}\n\t<slot name=\"message\" />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/$$slots-used-as-variable/output.svelte",
    "content": "<script>\n\tlet {\n\t\tmessage,\n\t\tshowMessage = message,\n\t\ttitle,\n\t\textra\n\t} = $props();\n\n\tlet showTitle = title;\n\n\tlet extraTitle = $derived(extra);\n</script>\n\n{#if showMessage}\n\t{@render message?.()}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/$$slots-used-as-variable-$$props/input.svelte",
    "content": "<script>\n\tlet showMessage = $$slots.message;\n\t$: extraTitle = $$slots.extra;\n</script>\n\n{#if showMessage}\n\t<slot name=\"message\" />\n{/if}\n\n{$$props}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/$$slots-used-as-variable-$$props/output.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {import('svelte').Snippet} [message]\n\t * @property {import('svelte').Snippet<[any]>} [extra]\n\t */\n\n\t/** @type {Props & { [key: string]: any }} */\n\tlet { ...props } = $props();\n\tlet showMessage = props.message;\n\tlet extraTitle = $derived(props.extra);\n</script>\n\n{#if showMessage}\n\t{@render props.message?.()}\n{/if}\n\n{props}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/accessors/input.svelte",
    "content": "<script lang=\"ts\">\n\ttype $$Props = {\n\t\ttest: string;\n\t}\n\t\n\texport let count = 0;\n\texport let stuff;\n</script>\n\n<button>\n\t<slot name=\"cool\" />\n</button>\n\n<svelte:options accessors immutable/>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/accessors/output.svelte",
    "content": "<script lang=\"ts\">\n\t\n\t\n\tinterface Props {\n\t\ttest: string;\n\t\tcount?: number;\n\t\tstuff: any;\n\t\tcool?: import('svelte').Snippet;\n\t}\n\n\tlet {\n\t\tcount = 0,\n\t\tstuff,\n\t\tcool\n\t}: Props = $props();\n\n\texport {\n\t\tcount,\n\t\tstuff,\n\t}\n</script>\n\n<button>\n\t{@render cool?.()}\n</button>\n\n<svelte:options immutable/>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/css-ignore/input.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<div>{name}</div>\n\n<style lang=\"scss\">\n\t$font-stack: Helvetica, sans-serif;\n\t$primary-color: #333;\n\n\tbody {\n\t\tfont: 100% $font-stack;\n\t\tcolor: $primary-color;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/css-ignore/output.svelte",
    "content": "<script>\n\tlet { name } = $props();\n</script>\n\n<div>{name}</div>\n\n<style lang=\"scss\">\n\t$font-stack: Helvetica, sans-serif;\n\t$primary-color: #333;\n\n\tbody {\n\t\tfont: 100% $font-stack;\n\t\tcolor: $primary-color;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/derivations/input.svelte",
    "content": "<script>\n\tlet count = 0;\n\t// semicolon at the end\n\t$: doubled = count * 2;\n\t$: ({ quadrupled } = { quadrupled: count * 4 });\n\t// no semicolon at the end\n\t$: time_8 = count * 8\n\t$: ({ time_16 } = { time_16: count * 16 })\n\t// preceding let that doesn't do anything\n\tlet time_32;\n\t$: time_32 = count * doubled;\n\tlet very_high;\n\t$: very_high = time_32 * count;\n</script>\n\n{count} / {doubled} / {quadrupled} / {time_8} / {time_16}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/derivations/output.svelte",
    "content": "<script>\n\tlet count = 0;\n\t// semicolon at the end\n\tlet doubled = $derived(count * 2);\n\tlet { quadrupled } = $derived({ quadrupled: count * 4 });\n\t// no semicolon at the end\n\tlet time_8 = $derived(count * 8)\n\tlet { time_16 } = $derived({ time_16: count * 16 })\n\t// preceding let that doesn't do anything\n\tlet time_32 = $derived(count * doubled);\n\t\n\tlet very_high = $derived(time_32 * count);\n\t\n</script>\n\n{count} / {doubled} / {quadrupled} / {time_8} / {time_16}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/each-block-const/input.svelte",
    "content": "<script>\n\tconst { foo } = x();\n</script>\n\n{#each foo as f}{/each}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/each-block-const/output.svelte",
    "content": "<script>\n\tconst { foo } = x();\n</script>\n\n{#each foo as f}{/each}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/effects/input.svelte",
    "content": "<script>\n\tlet count = 0;\n\t$: console.log(count);\n\t$: if (count > 10) {\n\t\talert('too high')\n\t}\n\t$: {\n\t\tconsole.log('foo');\n\t\tif (x) break $;\n\t\tconsole.log('bar');\n\t}\n\t$: $count = 1;\n\t$: foo.x = count;\n</script>\n\n<button onclick={() => count++}>increment</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/effects/output.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\tlet count = $state(0);\n\trun(() => {\n\t\tconsole.log(count);\n\t});\n\trun(() => {\n\t\tif (count > 10) {\n\t\t\talert('too high')\n\t\t}\n\t});\n\trun(() => {\n\t\tconsole.log('foo');\n\t\tif (x) return;\n\t\tconsole.log('bar');\n\t});\n\trun(() => {\n\t\t$count = 1;\n\t});\n\trun(() => {\n\t\tfoo.x = count;\n\t});\n</script>\n\n<button onclick={() => count++}>increment</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/effects-with-alias-run/input.svelte",
    "content": "<script>\n\tlet count = 0;\n\tlet run = true;\n\t$: console.log(count);\n\t$: if (count > 10 && run) {\n\t\talert('too high')\n\t}\n\t$: {\n\t\tconsole.log('foo');\n\t\tif (x) break $;\n\t\tconsole.log('bar');\n\t}\n\t$: $count = 1;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/effects-with-alias-run/output.svelte",
    "content": "<script>\n\timport { run as run_1 } from 'svelte/legacy';\n\n\tlet count = 0;\n\tlet run = true;\n\trun_1(() => {\n\t\tconsole.log(count);\n\t});\n\trun_1(() => {\n\t\tif (count > 10 && run) {\n\t\t\talert('too high')\n\t\t}\n\t});\n\trun_1(() => {\n\t\tconsole.log('foo');\n\t\tif (x) return;\n\t\tconsole.log('bar');\n\t});\n\trun_1(() => {\n\t\t$count = 1;\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/event-handlers/input.svelte",
    "content": "<button on:click={() => console.log('hi')} on:click>click me</button>\n<button on:click={function(){ console.log('hi') }} on:click>click me</button>\n<button on:click={() => console.log('before')} on:click on:click={() => console.log('after')}\n\t>click me</button\n>\n<button on:click on:click={foo}>click me</button>\n<button on:click>click me</button>\n\n<button on:dblclick={() => console.log('hi')}>click me</button>\n<button on:toggle>click me</button>\n<button on:custom-event={() => 'hi'}>click me</button>\n<button on:custom-event-bubble>click me</button>\n\n<button on:click|preventDefault={() => (searching = true)}>click me</button>\n<button on:click|preventDefault={() => ''}>click me</button>\n<button on:click|stopPropagation={() => {}}>click me</button>\n<button on:click|stopImmediatePropagation={() => ''}>click me</button>\n<button on:click|capture={() => ''}>click me</button>\n<button on:click|self={() => ''}>click me</button>\n<button on:click|trusted={() => ''}>click me</button>\n<button on:click|once={() => ''}>click me</button>\n\n<button on:click|preventDefault|stopPropagation={() => ''}>click me</button>\n<button on:click|stopPropagation|stopImmediatePropagation={() => {}}>click me</button>\n<button on:click|stopImmediatePropagation|self={() => ''}>click me</button>\n<button on:click|self|trusted={() => ''}>click me</button>\n<button on:click|trusted|self={() => ''}>click me</button>\n<button on:click|trusted|once={() => ''}>click me</button>\n<button on:click|once|preventDefault={() => ''}>click me</button>\n\n<button on:click|passive>click me</button>\n<button on:click|nonpassive>click me</button>\n<button on:click|passive={()=>''}>click me</button>\n<button on:click|nonpassive={()=>''}>click me</button>\n<button on:click|passive={foo}>click me</button>\n<button on:click|nonpassive={foo}>click me</button>\n<button on:click|stopPropagation|passive={()=>''}>click me</button>\n<button on:click|trusted|nonpassive={()=>''}>click me</button>\n\n<button\n\ton:click|passive={()=>''}\n\ton:click\n\ton:click={()=>''}\n>click me</button>\n\n<button\n\ton:click|nonpassive={()=>''}\n\ton:click\n\ton:click={()=>{\n\t\treturn 'multiline';\n\t}}\n>click me</button>\n\n\n<button\n\ton:click\n\ton:click={foo}\n\ton:blur={foo}\n\ton:click={()=>''}\n\ton:click|trusted|preventDefault|once={()=>''}\n\ton:blur|trusted|preventDefault|once\n>\n\tclick me\n</button>\n\n\n<Button on:click={() => 'leave untouched'} on:click>click me</Button>\n\n<div>\n\t<button\n\t\ton:click={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button\n\t\ton:click|preventDefault={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button on:click|preventDefault={() => (count += 1)}>click me</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/event-handlers/output.svelte",
    "content": "<script>\n\timport { createBubbler, handlers, preventDefault, stopPropagation, stopImmediatePropagation, self, trusted, once, passive, nonpassive } from 'svelte/legacy';\n\n\tconst bubble = createBubbler();\n</script>\n\n<button onclick={handlers(() => console.log('hi'), bubble('click'))}>click me</button>\n<button onclick={handlers(function(){ console.log('hi') }, bubble('click'))}>click me</button>\n<button onclick={handlers(() => console.log('before'), bubble('click'), () => console.log('after'))}\n\t>click me</button\n>\n<button onclick={handlers(bubble('click'), foo)}>click me</button>\n<button onclick={bubble('click')}>click me</button>\n\n<button ondblclick={() => console.log('hi')}>click me</button>\n<button ontoggle={bubble('toggle')}>click me</button>\n<button oncustom-event={() => 'hi'}>click me</button>\n<button oncustom-event-bubble={bubble('custom-event-bubble')}>click me</button>\n\n<button onclick={preventDefault(() => (searching = true))}>click me</button>\n<button onclick={preventDefault(() => '')}>click me</button>\n<button onclick={stopPropagation(() => {})}>click me</button>\n<button onclick={stopImmediatePropagation(() => '')}>click me</button>\n<button onclickcapture={() => ''}>click me</button>\n<button onclick={self(() => '')}>click me</button>\n<button onclick={trusted(() => '')}>click me</button>\n<button onclick={once(() => '')}>click me</button>\n\n<button onclick={stopPropagation(preventDefault(() => ''))}>click me</button>\n<button onclick={stopImmediatePropagation(stopPropagation(() => {}))}>click me</button>\n<button onclick={self(stopImmediatePropagation(() => ''))}>click me</button>\n<button onclick={trusted(self(() => ''))}>click me</button>\n<button onclick={trusted(self(() => ''))}>click me</button>\n<button onclick={once(trusted(() => ''))}>click me</button>\n<button onclick={once(preventDefault(() => ''))}>click me</button>\n\n<button use:passive={['click', () => bubble('click')]}>click me</button>\n<button use:nonpassive={['click', () => bubble('click')]}>click me</button>\n<button use:passive={['click', () => ()=>'']}>click me</button>\n<button use:nonpassive={['click', () => ()=>'']}>click me</button>\n<button use:passive={['click', () => foo]}>click me</button>\n<button use:nonpassive={['click', () => foo]}>click me</button>\n<button use:passive={['click', () => stopPropagation(()=>'')]}>click me</button>\n<button use:nonpassive={['click', () => trusted(()=>'')]}>click me</button>\n\n<button\n\tuse:passive={['click', () => ()=>'']}\n\tonclick={handlers(bubble('click'), ()=>'')}\n>click me</button>\n\n<button\n\tuse:nonpassive={['click', () => ()=>'']}\n\tonclick={handlers(bubble('click'), ()=>{\n\t\treturn 'multiline';\n\t})}\n>click me</button>\n\n\n<button\n\tonclick={handlers(bubble('click'), foo, ()=>'', once(trusted(preventDefault(()=>''))))}\n\tonblur={handlers(foo, once(trusted(preventDefault(bubble('blur')))))}\n>\n\tclick me\n</button>\n\n\n<Button on:click={() => 'leave untouched'} on:click>click me</Button>\n\n<div>\n\t<button\n\t\tonclick={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button\n\t\tonclick={preventDefault(() => {\n\t\t\tconsole.log('hi');\n\t\t})}>click me</button\n\t>\n\t<button onclick={preventDefault(() => (count += 1))}>click me</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/event-handlers-with-alias/input.svelte",
    "content": "<script>\n\tlet handlers;\n\tlet stopPropagation;\n\tlet preventDefault;\n\tlet stopImmediatePropagation;\n\tlet once;\n\tlet trusted;\n\tlet self;\n\tlet createBubbler;\n\tlet bubble;\n\tlet passive;\n\tlet nonpassive;\n</script>\n\n<button on:click={() => console.log('hi')} on:click>click me</button>\n<button on:click={function(){ console.log('hi') }} on:click>click me</button>\n<button on:click={() => console.log('before')} on:click on:click={() => console.log('after')}\n\t>click me</button\n>\n<button on:click on:click={foo}>click me</button>\n<button on:click>click me</button>\n\n<button on:dblclick={() => console.log('hi')}>click me</button>\n<button on:toggle>click me</button>\n<button on:custom-event={() => 'hi'}>click me</button>\n<button on:custom-event-bubble>click me</button>\n\n<button on:click|preventDefault={() => (searching = true)}>click me</button>\n<button on:click|preventDefault={() => ''}>click me</button>\n<button on:click|stopPropagation={() => {}}>click me</button>\n<button on:click|stopImmediatePropagation={() => ''}>click me</button>\n<button on:click|capture={() => ''}>click me</button>\n<button on:click|self={() => ''}>click me</button>\n<button on:click|trusted={() => ''}>click me</button>\n<button on:click|once={() => ''}>click me</button>\n\n<button on:click|preventDefault|stopPropagation={() => ''}>click me</button>\n<button on:click|stopPropagation|stopImmediatePropagation={() => {}}>click me</button>\n<button on:click|stopImmediatePropagation|self={() => ''}>click me</button>\n<button on:click|self|trusted={() => ''}>click me</button>\n<button on:click|trusted|once={() => ''}>click me</button>\n<button on:click|once|preventDefault={() => ''}>click me</button>\n\n<button on:click|passive>click me</button>\n<button on:click|nonpassive>click me</button>\n<button on:click|passive={()=>''}>click me</button>\n<button on:click|nonpassive={()=>''}>click me</button>\n<button on:click|passive={foo}>click me</button>\n<button on:click|nonpassive={foo}>click me</button>\n<button on:click|stopPropagation|passive={()=>''}>click me</button>\n<button on:click|trusted|nonpassive={()=>''}>click me</button>\n\n<button \n\ton:click|passive={()=>''}\n\ton:click\n\ton:click={()=>''}\n>click me</button>\n\n<button \n\ton:click|nonpassive={()=>''}\n\ton:click\n\ton:click={()=>''}\n>click me</button>\n\n\n<button\n\ton:click\n\ton:click={foo}\n\ton:blur={foo}\n\ton:click={()=>''}\n\ton:click|trusted|preventDefault|once={()=>''}\n\ton:blur|trusted|preventDefault|once\n>\n\tclick me\n</button>\n\n\n<Button on:click={() => 'leave untouched'} on:click>click me</Button>\n\n<div>\n\t<button\n\t\ton:click={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button\n\t\ton:click|preventDefault={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button on:click|preventDefault={() => (count += 1)}>click me</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/event-handlers-with-alias/output.svelte",
    "content": "<script>\n\timport { createBubbler as createBubbler_1, handlers as handlers_1, preventDefault as preventDefault_1, stopPropagation as stopPropagation_1, stopImmediatePropagation as stopImmediatePropagation_1, self as self_1, trusted as trusted_1, once as once_1, passive as passive_1, nonpassive as nonpassive_1 } from 'svelte/legacy';\n\n\tconst bubble_1 = createBubbler_1();\n\tlet handlers;\n\tlet stopPropagation;\n\tlet preventDefault;\n\tlet stopImmediatePropagation;\n\tlet once;\n\tlet trusted;\n\tlet self;\n\tlet createBubbler;\n\tlet bubble;\n\tlet passive;\n\tlet nonpassive;\n</script>\n\n<button onclick={handlers_1(() => console.log('hi'), bubble_1('click'))}>click me</button>\n<button onclick={handlers_1(function(){ console.log('hi') }, bubble_1('click'))}>click me</button>\n<button onclick={handlers_1(() => console.log('before'), bubble_1('click'), () => console.log('after'))}\n\t>click me</button\n>\n<button onclick={handlers_1(bubble_1('click'), foo)}>click me</button>\n<button onclick={bubble_1('click')}>click me</button>\n\n<button ondblclick={() => console.log('hi')}>click me</button>\n<button ontoggle={bubble_1('toggle')}>click me</button>\n<button oncustom-event={() => 'hi'}>click me</button>\n<button oncustom-event-bubble={bubble_1('custom-event-bubble')}>click me</button>\n\n<button onclick={preventDefault_1(() => (searching = true))}>click me</button>\n<button onclick={preventDefault_1(() => '')}>click me</button>\n<button onclick={stopPropagation_1(() => {})}>click me</button>\n<button onclick={stopImmediatePropagation_1(() => '')}>click me</button>\n<button onclickcapture={() => ''}>click me</button>\n<button onclick={self_1(() => '')}>click me</button>\n<button onclick={trusted_1(() => '')}>click me</button>\n<button onclick={once_1(() => '')}>click me</button>\n\n<button onclick={stopPropagation_1(preventDefault_1(() => ''))}>click me</button>\n<button onclick={stopImmediatePropagation_1(stopPropagation_1(() => {}))}>click me</button>\n<button onclick={self_1(stopImmediatePropagation_1(() => ''))}>click me</button>\n<button onclick={trusted_1(self_1(() => ''))}>click me</button>\n<button onclick={once_1(trusted_1(() => ''))}>click me</button>\n<button onclick={once_1(preventDefault_1(() => ''))}>click me</button>\n\n<button use:passive_1={['click', () => bubble_1('click')]}>click me</button>\n<button use:nonpassive_1={['click', () => bubble_1('click')]}>click me</button>\n<button use:passive_1={['click', () => ()=>'']}>click me</button>\n<button use:nonpassive_1={['click', () => ()=>'']}>click me</button>\n<button use:passive_1={['click', () => foo]}>click me</button>\n<button use:nonpassive_1={['click', () => foo]}>click me</button>\n<button use:passive_1={['click', () => stopPropagation_1(()=>'')]}>click me</button>\n<button use:nonpassive_1={['click', () => trusted_1(()=>'')]}>click me</button>\n\n<button \n\tuse:passive_1={['click', () => ()=>'']}\n\tonclick={handlers_1(bubble_1('click'), ()=>'')}\n>click me</button>\n\n<button \n\tuse:nonpassive_1={['click', () => ()=>'']}\n\tonclick={handlers_1(bubble_1('click'), ()=>'')}\n>click me</button>\n\n\n<button\n\tonclick={handlers_1(bubble_1('click'), foo, ()=>'', once_1(trusted_1(preventDefault_1(()=>''))))}\n\tonblur={handlers_1(foo, once_1(trusted_1(preventDefault_1(bubble_1('blur')))))}\n>\n\tclick me\n</button>\n\n\n<Button on:click={() => 'leave untouched'} on:click>click me</Button>\n\n<div>\n\t<button\n\t\tonclick={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button\n\t\tonclick={preventDefault_1(() => {\n\t\t\tconsole.log('hi');\n\t\t})}>click me</button\n\t>\n\t<button onclick={preventDefault_1(() => (count += 1))}>click me</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/export-props-multiple-declarations/input.svelte",
    "content": "<script>\n\tlet a, b, c, d;\n\tlet e, f, g, h;\n\n\texport {a, c , f, h}\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/export-props-multiple-declarations/output.svelte",
    "content": "<script>\n\tlet b, d;\n\tlet e, g;\n\tlet {\n\t\ta,\n\t\tc,\n\t\tf,\n\t\th\n\t} = $props();\n\n\t\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/import-type-$-prefix/input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { $Test } from './types';\n  \n\texport let data: $Test;\n  </script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/import-type-$-prefix/output.svelte",
    "content": "<script lang=\"ts\">\n\timport type { $Test } from './types';\n  \n\tinterface Props {\n\t\tdata: $Test;\n\t}\n\n\tlet { data }: Props = $props();\n  </script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/input.svelte",
    "content": "<script>\n\tlet bindable;\n\texport let something;\n</script>\n\n<input bind:value={something} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$bindable-bindable-var-1/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: migrating this component would require adding a `$bindable` rune but there's already a variable named bindable.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet bindable;\n\texport let something;\n</script>\n\n<input bind:value={something} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n\n\tlet derived;\n\n\t$: other = name;\n</script>\n\n<input bind:value={name} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-1/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: can't migrate `$: other = name;` to `$derived` because there's a variable named derived.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet name = 'world';\n\n\tlet derived;\n\n\t$: other = name;\n</script>\n\n<input bind:value={name} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/input.svelte",
    "content": "<script>\n\tlet derived;\n</script>\n\n<svelte:component this={derived} />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-2/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: migrating this component would require adding a `$derived` rune but there's already a variable named derived.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet derived;\n</script>\n\n<svelte:component this={derived} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/input.svelte",
    "content": "<script>\n\tlet derived;\n</script>\n<Component>\n\t<slot name=\"derived\" slot=\"derived\" />\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: This migration would change the name of a slot (derived to derived_1) making the component unusable -->\n<script>\n\tlet derived;\n</script>\n<Component>\n\t<slot name=\"derived\" slot=\"derived\" />\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n\n\tlet derived;\n\n\tlet other;\n\t$: other = name;\n</script>\n\n<input bind:value={name} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-4/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: can't migrate `let other;` to `$derived` because there's a variable named derived.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet name = 'world';\n\n\tlet derived;\n\n\tlet other;\n\t$: other = name;\n</script>\n\n<input bind:value={name} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/input.svelte",
    "content": "<script>\n\tlet props;\n\texport let something;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$props-props-var-1/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: migrating this component would require adding a `$props` rune but there's already a variable named props.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet props;\n\texport let something;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/input.svelte",
    "content": "<script>\n\tlet state = 'world';\n\n\tlet other;\n</script>\n\n<input bind:value={other} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-1/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: can't migrate `let other;` to `$state` because there's a variable named state.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet state = 'world';\n\n\tlet other;\n</script>\n\n<input bind:value={other} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/input.svelte",
    "content": "<script>\n\tlet state = 'world';\n\n\tlet other = 42;\n</script>\n\n<input bind:value={other} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-2/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: can't migrate `let other = 42;` to `$state` because there's a variable named state.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet state = 'world';\n\n\tlet other = 42;\n</script>\n\n<input bind:value={other} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/input.svelte",
    "content": "<script>\n\tlet state = 'world';\n\n\t$: other = 42;\n</script>\n\n<input bind:value={other} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-$state-state-var-3/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: can't migrate `$: other = 42;` to `$state` because there's a variable named state.\n     Rename the variable and try again or migrate by hand. -->\n<script>\n\tlet state = 'world';\n\n\t$: other = 42;\n</script>\n\n<input bind:value={other} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-beforeUpdate-afterUpdate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-beforeUpdate-afterUpdate/input.svelte",
    "content": "<script>\n\timport { beforeUpdate, afterUpdate } from \"svelte\";\n\n\tbeforeUpdate(()=>{\n\n\t});\n\n\tafterUpdate(()=>{\n\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-beforeUpdate-afterUpdate/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: Can't migrate code with beforeUpdate and afterUpdate. Please migrate by hand. -->\n<script>\n\timport { beforeUpdate, afterUpdate } from \"svelte\";\n\n\tbeforeUpdate(()=>{\n\n\t});\n\n\tafterUpdate(()=>{\n\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-prop-and-$$props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-prop-and-$$props/input.svelte",
    "content": "<script>\n\texport let value = 42;\n</script>\n\n{$$props}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-prop-and-$$props/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: $$props is used together with named props in a way that cannot be automatically migrated. -->\n<script>\n\texport let value = 42;\n</script>\n\n{$$props}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-prop-non-identifier/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-prop-non-identifier/input.svelte",
    "content": "<script>\n\tlet props = { value: 42 };\n\n\texport let { value } = props;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-prop-non-identifier/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: Encountered an export declaration pattern that is not supported for automigration. -->\n<script>\n\tlet props = { value: 42 };\n\n\texport let { value } = props;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-slot-change-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-slot-change-name/input.svelte",
    "content": "<script>\n\tlet body;\n</script>\n\n<slot name=\"body\"></slot>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-slot-change-name/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: This migration would change the name of a slot (body to body_1) making the component unusable -->\n<script>\n\tlet body;\n</script>\n\n<slot name=\"body\"></slot>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-slot-non-identifier/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-slot-non-identifier/input.svelte",
    "content": "<slot name=\"dashed-name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-slot-non-identifier/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: This migration would change the name of a slot (dashed-name to dashed_name) making the component unusable -->\n<slot name=\"dashed-name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-with-errors/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tlogs: [\n\t\t'One or more `@migration-task` comments were added to `output.svelte`, please check them and complete the migration manually.'\n\t],\n\terrors: [\n\t\t'Error while migrating Svelte code',\n\t\t{\n\t\t\tcode: 'unexpected_eof',\n\t\t\tend: {\n\t\t\t\tcharacter: 30,\n\t\t\t\tcolumn: 21,\n\t\t\t\tline: 3\n\t\t\t},\n\t\t\tfilename: 'output.svelte',\n\t\t\tframe: `1: <script\n2: \n3: unterminated template\n                        ^`,\n\t\t\tmessage: 'Unexpected end of input\\nhttps://svelte.dev/e/unexpected_eof',\n\t\t\tposition: [30, 30],\n\t\t\tstart: {\n\t\t\t\tcharacter: 30,\n\t\t\t\tcolumn: 21,\n\t\t\t\tline: 3\n\t\t\t}\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-with-errors/input.svelte",
    "content": "<script\n\nunterminated template"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/impossible-migrate-with-errors/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: Unexpected end of input\nhttps://svelte.dev/e/unexpected_eof -->\n<script\n\nunterminated template"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/is-not-where-has/input.svelte",
    "content": "<script>\n\tfunction is(){}\n\tfunction where(){}\n\tfunction not(){}\n\tfunction has(){}\n\n\t// looks like css but it's not in style tag\n\tconst x = {\n\t\tdiv:is(42),\n\t\tspan:where(42),\n\t\tform:not(42),\n\t\tinput:has(42),\n\t}\n</script>\n\nwhat if i'm talking about `:has()` in my blog?\n\n```css\n\t:has(.is_cool)\n```\n\n<style lang=\"postcss\">\n\tdiv:has(span){}\n\tdiv > :not(span){}\n\tdiv > :is(span){}\n\tdiv > :where(span){}\n\n\tdiv:has(:is(span)){}\n\tdiv > :not(:is(span)){}\n\tdiv > :is(:is(span)){}\n\tdiv > :where(:is(span)){}\n\n\tdiv:has(.class:is(span)){}\n\tdiv > :not(.class:is(span)){}\n\tdiv > :is(.class:is(span)){}\n\tdiv > :where(.class:is(span)){}\n\n\tdiv :has(.class:is(span:where(:focus))){}\n\tdiv :not(.class:is(span:where(:focus-within))){}\n\tdiv :is(.class:is(span:is(:hover))){}\n\tdiv :where(.class:is(span:has(* > *))){}\n\tdiv :is(.class:is(span:is(:hover)), .x){}\n\n\tdiv :has(    :global(.class:is(span:where(:focus)))){}\n\tdiv :not(:global(.class:is(span:where(:focus-within)))){}\n\tdiv :is(:global(.class:is(span:is(:hover)))){}\n\tdiv :where(:global(.class:is(span:has(* > *)))){}\n\tdiv :is(:global(.class:is(span:is(:hover)), .x)){}\n\n\t:global(button:has(.is-active)){}\n\n\tdiv{\n\t\tp:has(&){\n\n\t\t}\n\t\t:not(span > *){\n\t\t\t:where(form){}\n\t\t}\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/is-not-where-has/output.svelte",
    "content": "<script>\n\tfunction is(){}\n\tfunction where(){}\n\tfunction not(){}\n\tfunction has(){}\n\n\t// looks like css but it's not in style tag\n\tconst x = {\n\t\tdiv:is(42),\n\t\tspan:where(42),\n\t\tform:not(42),\n\t\tinput:has(42),\n\t}\n</script>\n\nwhat if i'm talking about `:has()` in my blog?\n\n```css\n\t:has(.is_cool)\n```\n\n<style lang=\"postcss\">\n\tdiv:has(:global(span)){}\n\tdiv > :not(span){}\n\tdiv > :is(:global(span)){}\n\tdiv > :where(:global(span)){}\n\n\tdiv:has(:global(:is(span))){}\n\tdiv > :not(:is(span)){}\n\tdiv > :is(:global(:is(span))){}\n\tdiv > :where(:global(:is(span))){}\n\n\tdiv:has(:global(.class:is(span))){}\n\tdiv > :not(.class:is(span)){}\n\tdiv > :is(:global(.class:is(span))){}\n\tdiv > :where(:global(.class:is(span))){}\n\n\tdiv :has(:global(.class:is(span:where(:focus)))){}\n\tdiv :not(.class:is(span:where(:focus-within))){}\n\tdiv :is(:global(.class:is(span:is(:hover)))){}\n\tdiv :where(:global(.class:is(span:has(* > *)))){}\n\tdiv :is(:global(.class:is(span:is(:hover)), .x)){}\n\n\tdiv :has(    :global(.class:is(span:where(:focus)))){}\n\tdiv :not(:global(.class:is(span:where(:focus-within)))){}\n\tdiv :is(:global(.class:is(span:is(:hover)))){}\n\tdiv :where(:global(.class:is(span:has(* > *)))){}\n\tdiv :is(:global(.class:is(span:is(:hover)), .x)){}\n\n\t:global(button:has(.is-active)){}\n\n\tdiv{\n\t\tp:has(:global(&)){\n\n\t\t}\n\t\t:not(span > *){\n\t\t\t:where(:global(form)){}\n\t\t}\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/jsdoc-with-comments/input.svelte",
    "content": "<script>\n\t/**\n\t * My wonderful comment\n\t * @type {string}\n\t */\n\texport let comment;\n\n\t/**\n\t * My wonderful other comment\n\t * @type {number}\n\t */\t\n\texport let another_comment;\n\n\t// one line comment\n\texport let one_line;\n\n\texport let no_comment;\n\n\t/**\n\t * @type {boolean}\n\t */\n\texport let type_no_comment;\n\n\t/** @type {boolean} type_with_comment - One-line declaration with comment */\n\texport let type_with_comment;\n\n\t/**\n\t * This is optional\n\t */\n\texport let optional = {stuff: true};\n\t\n\texport let inline_commented; // this should stay a comment\n\n\t/**\n\t * This comment should be merged\n\t */\n\texport let inline_commented_merged; // with this inline comment\n\n\t/*\n\t* this is a same-line leading multiline comment\n\t**/ export let inline_multiline_leading_comment = 'world';\n\n\texport let inline_multiline_trailing_comment = 'world'; /*\n\t* this is a same-line trailing multiline comment\n\t**/\n\n\t/** @type {number} [default_value=1] */\n\texport let default_value = 1;\n\n\t/** @type {number} [comment_default_value=1] - This has a comment and an optional value. */\n\texport let comment_default_value = 1;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/jsdoc-with-comments/output.svelte",
    "content": "<script>\n\t\n\n\t\t\n\n\t\n\n\n\t\n\n\t\n\n\t\n\t\n\n\t\n\n\t\n\n\n\t\n\n\t\n\t/**\n\t * @typedef {Object} Props\n\t * @property {string} comment - My wonderful comment\n\t * @property {number} another_comment - My wonderful other comment\n\t * @property {any} one_line - one line comment\n\t * @property {any} no_comment\n\t * @property {boolean} type_no_comment\n\t * @property {boolean} type_with_comment - One-line declaration with comment\n\t * @property {any} [optional] - This is optional\n\t * @property {any} inline_commented - this should stay a comment\n\t * @property {any} inline_commented_merged - This comment should be merged - with this inline comment\n\t * @property {string} [inline_multiline_leading_comment] - this is a same-line leading multiline comment\n\t * @property {string} [inline_multiline_trailing_comment] - this is a same-line trailing multiline comment\n\t * @property {number} [default_value]\n\t * @property {number} [comment_default_value] - This has a comment and an optional value.\n\t */\n\n\t/** @type {Props} */\n\tlet {\n\t\tcomment,\n\t\tanother_comment,\n\t\tone_line,\n\t\tno_comment,\n\t\ttype_no_comment,\n\t\ttype_with_comment,\n\t\toptional = {stuff: true},\n\t\tinline_commented,\n\t\tinline_commented_merged,\n\t\tinline_multiline_leading_comment = 'world',\n\t\tinline_multiline_trailing_comment = 'world',\n\t\tdefault_value = 1,\n\t\tcomment_default_value = 1\n\t} = $props();\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/labeled-statement-reassign-state/input.svelte",
    "content": "<script>\n\tlet something = '123';\n\t\n\tlet foo = false;\n\t$: foo = !!something;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/labeled-statement-reassign-state/output.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\tlet something = '123';\n\t\n\tlet foo = $state(false);\n\trun(() => {\n\t\tfoo = !!something;\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/named-slots/input.svelte",
    "content": "<script lang=\"ts\">\n  import Component from './Component.svelte';\n</script>\n\n<Component>\n  <slot slot=\"msg\"></slot>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/named-slots/output.svelte",
    "content": "<script lang=\"ts\">\n  import Component from './Component.svelte';\n  interface Props {\n    children?: import('svelte').Snippet;\n  }\n\n  let { children }: Props = $props();\n</script>\n\n<Component>\n  {#snippet msg()}\n    {@render children?.()}\n  {/snippet}\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/not-blank-css-if-error/input.svelte",
    "content": "<script>\n\texport let error = true;\n</script>\n\n{$$props}\n\n<style lang=\"postcss\">\n\tdiv{\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/not-blank-css-if-error/output.svelte",
    "content": "<!-- @migration-task Error while migrating Svelte code: $$props is used together with named props in a way that cannot be automatically migrated. -->\n<script>\n\texport let error = true;\n</script>\n\n{$$props}\n\n<style lang=\"postcss\">\n\tdiv{\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/not-prepend-props-to-export-let/input.svelte",
    "content": "<script>\n\texport let stuff;\n\n\tconsole.log($$props);\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/not-prepend-props-to-export-let/output.svelte",
    "content": "<script>\n\tlet { ...props } = $props();\n\n\tconsole.log(props);\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props/input.svelte",
    "content": "<script>\n\t/** @type {Record<string, { href: string; title: string; }[]>} */\n\texport let readonly;\n\texport let optional = 'foo';\n\texport let binding;\n\texport let bindingOptional = 'bar';\n</script>\n\n{readonly}\n{optional}\n<input bind:value={binding} />\n<input bind:value={bindingOptional} />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props/output.svelte",
    "content": "<script>\n\t\n\t/**\n\t * @typedef {Object} Props\n\t * @property {Record<string, { href: string; title: string; }[]>} readonly\n\t * @property {string} [optional]\n\t * @property {any} binding\n\t * @property {string} [bindingOptional]\n\t */\n\n\t/** @type {Props} */\n\tlet {\n\t\treadonly,\n\t\toptional = 'foo',\n\t\tbinding = $bindable(),\n\t\tbindingOptional = $bindable('bar')\n\t} = $props();\n</script>\n\n{readonly}\n{optional}\n<input bind:value={binding} />\n<input bind:value={bindingOptional} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-and-labeled/input.svelte",
    "content": "<script>\n\texport let readonly;\n\t$: writable = !readonly;\n\texport let optional = 'foo';\n</script>\n\n{readonly} {optional} {writable}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-and-labeled/output.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {any} readonly\n\t * @property {string} [optional]\n\t */\n\n\t/** @type {Props} */\n\tlet { readonly, optional = 'foo' } = $props();\n\tlet writable = $derived(!readonly);\n</script>\n\n{readonly} {optional} {writable}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-export-alias/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet klass = '';\n\texport { klass as class }\n</script>\n\n{klass}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-export-alias/output.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tclass?: string;\n\t}\n\n\tlet { class: klass = '' }: Props = $props();\n\t\n</script>\n\n{klass}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-interface/input.svelte",
    "content": "<script lang=\"ts\">\n\tinterface $$Props {\n\t\t/** foo */\n\t\tfoo: string;\n\t\tbar: boolean;\n\t\t/** should not create a prop */\n\t\ttype_only: boolean;\n\t}\n\n\texport let foo: $$Props['foo'];\n\texport let bar = true;\n\n\tfoo = '';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-interface/output.svelte",
    "content": "<script lang=\"ts\">\n\t\n\n\tinterface Props {\n\t\t/** foo */\n\t\tfoo: string;\n\t\tbar: boolean;\n\t\t/** should not create a prop */\n\t\ttype_only: boolean;\n\t}\n\n\tlet { foo = $bindable(), bar = true }: Props = $props();\n\n\tfoo = '';\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-rest-props/input.svelte",
    "content": "<script>\n    export let foo;\n</script>\n\n<button {foo} {...$$restProps}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-rest-props/output.svelte",
    "content": "<script>\n    let { foo, ...rest } = $props();\n</script>\n\n<button {foo} {...rest}>click me</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-rest-props-jsdoc/input.svelte",
    "content": "<script>\n    /** @type {string} */\n    export let foo;\n</script>\n\n<button {foo} {...$$restProps}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-rest-props-jsdoc/output.svelte",
    "content": "<script>\n    \n    /**\n     * @typedef {Object} Props\n     * @property {string} foo\n     */\n\n    /** @type {Props & { [key: string]: any }} */\n    let { foo, ...rest } = $props();\n</script>\n\n<button {foo} {...rest}>click me</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-rest-props-ts/input.svelte",
    "content": "<script lang=\"ts\">\n    export let foo: string;\n</script>\n\n<button {foo} {...$$restProps}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-rest-props-ts/output.svelte",
    "content": "<script lang=\"ts\">\n    interface Props {\n        foo: string;\n        [key: string]: any\n    }\n\n    let { foo, ...rest }: Props = $props();\n</script>\n\n<button {foo} {...rest}>click me</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-ts/input.svelte",
    "content": "<script lang=\"ts\">\n\t/** some comment */\n\texport let readonly: number;\n\texport let optional = 'foo';\n\texport let binding: string;\n\texport let bindingOptional: string | undefined = 'bar';\n\t/** this should stay a comment */\n\texport let no_type_but_comment = 0;\n\texport let type_and_inline_comment:number; // this should also stay a comment\n\texport let no_type_and_inline_comment = 0;         // this should stay as well\n\n\t/*\n\t* this is a same-line leading multiline comment\n\t**/ export let inline_multiline_leading_comment = 'world';\n\n\texport let inline_multiline_trailing_comment = 'world'; /*\n\t* this is a same-line trailing multiline comment\n\t**/\n</script>\n\n{readonly}\n{optional}\n<input bind:value={binding} />\n<input bind:value={bindingOptional} />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/props-ts/output.svelte",
    "content": "<script lang=\"ts\">\n\t\n\t\n\n\t\n\n\tinterface Props {\n\t\t/** some comment */\n\t\treadonly: number;\n\t\toptional?: string;\n\t\tbinding: string;\n\t\tbindingOptional?: string | undefined;\n\t\t/** this should stay a comment */\n\t\tno_type_but_comment?: number;\n\t\ttype_and_inline_comment: number; // this should also stay a comment\n\t\tno_type_and_inline_comment?: number; // this should stay as well\n\t\t/*\n\t* this is a same-line leading multiline comment\n\t**/\n\t\tinline_multiline_leading_comment?: string;\n\t\tinline_multiline_trailing_comment?: string; /*\n\t* this is a same-line trailing multiline comment\n\t**/\n\t}\n\n\tlet {\n\t\treadonly,\n\t\toptional = 'foo',\n\t\tbinding = $bindable(),\n\t\tbindingOptional = $bindable('bar'),\n\t\tno_type_but_comment = 0,\n\t\ttype_and_inline_comment,\n\t\tno_type_and_inline_comment = 0,\n\t\tinline_multiline_leading_comment = 'world',\n\t\tinline_multiline_trailing_comment = 'world'\n\t}: Props = $props();\n</script>\n\n{readonly}\n{optional}\n<input bind:value={binding} />\n<input bind:value={bindingOptional} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-inner-block/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet menuElement: HTMLUListElement | undefined = undefined;\n\tlet left: number;\n  let top: number;\n\n  $: {\n    if (menuElement) {\n      const rect = menuElement.getBoundingClientRect();\n      const menuHeight = 0;\n\n      left = window.innerWidth - rect.width\n      top = window.innerHeight - menuHeight;\n    }\n  }\n</script>\n\n<ul bind:this={menuElement}></ul>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-inner-block/output.svelte",
    "content": "<script lang=\"ts\">\n  import { run } from 'svelte/legacy';\n\n\tlet menuElement: HTMLUListElement | undefined = $state(undefined);\n\tlet left: number = $state();\n  let top: number = $state();\n\n  run(() => {\n    if (menuElement) {\n      const rect = menuElement.getBoundingClientRect();\n      const menuHeight = 0;\n\n      left = window.innerWidth - rect.width\n      top = window.innerHeight - menuHeight;\n    }\n  });\n</script>\n\n<ul bind:this={menuElement}></ul>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-1/input.svelte",
    "content": "<script>\n\t$: mobile = width < 640;\n\t$: x = !mobile;\n\tlet width = 0;\n</script>\n\n{width / mobile / x}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-1/output.svelte",
    "content": "<script>\n\tlet width = 0;\n\tlet mobile = $derived(width < 640);\n\tlet x = $derived(!mobile);\n</script>\n\n{width / mobile / x}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-2/input.svelte",
    "content": "<script>\n\tlet width = 0;\n\t$: console.log(mobile);\n\t$: mobile = width < 640;\n</script>\n\n{width / mobile}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-2/output.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\tlet width = 0;\n\tlet mobile = $derived(width < 640);\n\trun(() => {\n\t\tconsole.log(mobile);\n\t});\n</script>\n\n{width / mobile}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-not-deleting-additions/input.svelte",
    "content": "<script>\n\texport let data\n\t$: ({ foo } = data)\n\n\timport { blah } from './blah.js'\n\n\tlet bar\n\t$: {\n\t\tbar = []\n\t\tlet baz\n\t}\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-not-deleting-additions/output.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\n\timport { blah } from './blah.js'\n\tlet { data } = $props();\n\n\tlet bar = $state()\n\tlet { foo } = $derived(data)\n\trun(() => {\n\t\tbar = []\n\t\tlet baz\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-with-comments/input.svelte",
    "content": "<script>\n\tlet count = 0;\n\n\t$: {\n\t\tconsole.log({ count, double });\n\t}\n\n\t// this comment should remain attached to this declaration after migration\n\t$: double = count * 2; // this too\n\n\t// triple\n\tlet triple;\n\t$: {\n\t\t// update triple\n\t\ttriple = count * 3;\n\t\t// trailing comment\n\t\t// in triple\n\t}\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n<button onclick={increment}>\n\tclicks: {count}\n</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reactive-statements-reorder-with-comments/output.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\tlet count = $state(0);\n\n\n\n\t// triple\n\t//  update triple\n\tlet triple = $derived(count * 3)\n\t//  trailing comment\n\t//  in triple;\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n\t// this comment should remain attached to this declaration after migration\n\tlet double = $derived(count * 2); // this too\n\trun(() => {\n\t\tconsole.log({ count, double });\n\t});\n\t\n</script>\n\n<button onclick={increment}>\n\tclicks: {count}\n</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reassigned-deriveds/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n\n\t$: upper = name.toUpperCase();\n</script>\n\n<input bind:value={name} />\n<input bind:value={upper} />\n\n{upper}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/reassigned-deriveds/output.svelte",
    "content": "<script>\n\tlet name = $state('world');\n\n\tlet upper = $derived(name.toUpperCase());\n</script>\n\n<input bind:value={name} />\n<input bind:value={upper} />\n\n{upper}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/remove-blocks-whitespace/input.svelte",
    "content": "{  @html \"some html\"   }\n\n{     #if false && {\n\t\n}.x === 34    }\n\ttrue\n{    :else if false  }\n\tfalse\n{/if}\n\n{     #await []    }\n\t{   @const x = 43   }\n\t{x}\n{   :then i   }\n\t{i}\n{  :catch e  }\n\tdlkdj\n{/await}\n\n{   #await [] then i   }\nstuff\n{/await}\n\n{      #key count    }\n\tdlkdj\n{/key}\n\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/remove-blocks-whitespace/output.svelte",
    "content": "{@html \"some html\"}\n\n{#if false && {\n\t\n}.x === 34}\n\ttrue\n{:else if false}\n\tfalse\n{/if}\n\n{#await []}\n\t{@const x = 43}\n\t{x}\n{:then i}\n\t{i}\n{:catch e}\n\tdlkdj\n{/await}\n\n{#await [] then i}\nstuff\n{/await}\n\n{#key count}\n\tdlkdj\n{/key}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/script-context-module/input.svelte",
    "content": "<script context=\"module\">\n\tlet foo = true;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/script-context-module/output.svelte",
    "content": "<script module>\n\tlet foo = true;\n</script>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/self-closing-elements/input.svelte",
    "content": "<div />\n<div title=\"preserve\" />\n<input type=\"text\" />\n<hr />\n<f:table />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/self-closing-elements/output.svelte",
    "content": "<div></div>\n<div title=\"preserve\"></div>\n<input type=\"text\" />\n<hr />\n<f:table></f:table>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/self-closing-named-slot/input.svelte",
    "content": "<Component>\n\t<div slot=\"test\" />\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/self-closing-named-slot/output.svelte",
    "content": "<Component>\n\t{#snippet test()}\n\t\t<div ></div>\n\t{/snippet}\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/shadowed-forwarded-slot/input.svelte",
    "content": "{#if $$slots.label}\n\t<slot name=\"label\" />\n{/if}\n<MyInput>\n\t<slot name=\"label\" slot=\"label\"/>\n</MyInput>\n<MyInput>\n\t<div slot=\"label\">\n\t\t<MyComponent>\n\t\t\t<div slot=\"label\">\n\t\t\t\t<slot name=\"label\" />\n\t\t\t</div>\n\t\t</MyComponent>\n\t</div>\n</MyInput>\n\n<MyInput let:args>\n\t<slot/>\n</MyInput>\n\n<MyInput>\n\t<div let:args>\n\t\t<slot/>\n\t</div>\n</MyInput>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/shadowed-forwarded-slot/output.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {import('svelte').Snippet} [label]\n\t * @property {import('svelte').Snippet} [children]\n\t */\n\n\t/** @type {Props} */\n\tlet { label, children } = $props();\n\tconst label_render = $derived(label);\n\tconst children_render = $derived(children);\n\n</script>\n\n{#if label}\n\t{@render label?.()}\n{/if}\n<MyInput>\n\t{#snippet label()}\n\t\t{@render label_render?.()}\n\t{/snippet}\n</MyInput>\n<MyInput>\n\t{#snippet label()}\n\t\t<div >\n\t\t\t<MyComponent>\n\t\t\t\t{#snippet label()}\n\t\t\t\t\t\t<div >\n\t\t\t\t\t\t{@render label_render?.()}\n\t\t\t\t\t</div>\n\t\t\t\t\t{/snippet}\n\t\t\t</MyComponent>\n\t\t</div>\n\t{/snippet}\n</MyInput>\n\n<MyInput >\n\t{#snippet children({ args })}\n\t\t{@render children_render?.()}\n\t{/snippet}\n</MyInput>\n\n<MyInput>\n\t<div >\n\t\t{#snippet children({ args })}\n\t\t\t\t{@render children_render?.()}\n\t\t\t\t\t{/snippet}\n\t\t</div>\n</MyInput>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/single-assignment-labeled/input.svelte",
    "content": "<script>\n\tlet count = 0;\n\tlet double;\n\t$:{\n\t\tdouble = count * 2;\n\t}\n\t\n\tlet quadruple;\n\t$:{\n\t\tquadruple = count * 4;\n\t\tconsole.log(\"i have a side effect\")\n\t}\n\n\tlet eight_times;\n\t$:{\n\t\t// updated\n\t\teight_times = count * 8;\n\t}\n\n\tlet sixteen_times;\n\t$:{\n\t\t// reassigned outside labeled statement\n\t\tsixteen_times = count * 16;\n\t}\n\n\tlet alot_times;\n\t$:{\n\t\t// reassigned in multiple labeled\n\t\talot_times = count * 32;\n\t}\n\t$:{\n\t\t// reassigned in multiple labeled\n\t\talot_times = count * 32;\n\t}\n\n\tlet evenmore;\n\tlet evenmore_doubled;\n\t$:{\n\t\t// multiple stuff in label\n\t\tevenmore = count * 64;\n\t\tevenmore_doubled = evenmore * 2;\n\t}\n\n\tlet almost_infinity;\n\t$: almost_infinity = count * 128;\n\n\tlet should_be_state;\n\t$: should_be_state = 42;\n\t$: should_be_state_too = 42;\n</script>\n\n<button on:click={()=>{\n\tcount++;\n\teight_times++;\n\tsixteen_times += 1;\n\tshould_be_state_too++;\n}}>click</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/single-assignment-labeled/output.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\tlet count = $state(0);\n\tlet double = $derived(count * 2);\n\t\n\t\n\tlet quadruple = $state();\n\trun(() => {\n\t\tquadruple = count * 4;\n\t\tconsole.log(\"i have a side effect\")\n\t});\n\n\tlet eight_times = $state();\n\trun(() => {\n\t\t// updated\n\t\teight_times = count * 8;\n\t});\n\n\tlet sixteen_times = $state();\n\trun(() => {\n\t\t// reassigned outside labeled statement\n\t\tsixteen_times = count * 16;\n\t});\n\n\tlet alot_times = $state();\n\trun(() => {\n\t\t// reassigned in multiple labeled\n\t\talot_times = count * 32;\n\t});\n\trun(() => {\n\t\t// reassigned in multiple labeled\n\t\talot_times = count * 32;\n\t});\n\n\tlet evenmore = $state();\n\tlet evenmore_doubled = $state();\n\trun(() => {\n\t\t// multiple stuff in label\n\t\tevenmore = count * 64;\n\t\tevenmore_doubled = evenmore * 2;\n\t});\n\n\tlet almost_infinity = $derived(count * 128);\n\t\n\n\tlet should_be_state = $state(42);\n\t\n\tlet should_be_state_too = $state(42);\n\t\n</script>\n\n<button onclick={()=>{\n\tcount++;\n\teight_times++;\n\tsixteen_times += 1;\n\tshould_be_state_too++;\n}}>click</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-dont-mess-with-attributes/input.svelte",
    "content": "<MyComponent\n  variant=\"outlined\"\n>\n  <slot />\n</MyComponent>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-dont-mess-with-attributes/output.svelte",
    "content": "<script>\n  /**\n   * @typedef {Object} Props\n   * @property {import('svelte').Snippet} [children]\n   */\n\n  /** @type {Props} */\n  let { children } = $props();\n</script>\n\n<MyComponent\n  variant=\"outlined\"\n>\n  {@render children?.()}\n</MyComponent>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-non-identifier/input.svelte",
    "content": "<script>\n\timport Comp from \"./Component.svelte\";\n</script>\n\n<Comp>\n\t<div slot=\"cool:stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<div slot=\"cool stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<div slot=\"new\">\n\t\treserved keyword\n\t</div>\n</Comp>\n\n<Comp>\n\t<div slot=\"stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<svelte:fragment slot=\"cool:stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<Comp>\n\t<svelte:fragment slot=\"cool stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<Comp>\n\t<svelte:fragment slot=\"stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n\n<!-- don't remove the let directive if we don't migrate -->\n\n<Comp>\n\t<div let:should_stay slot=\"cool:stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<div let:should_stay slot=\"cool stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<svelte:fragment let:should_stay slot=\"cool:stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<Comp>\n\t<svelte:fragment let:should_stay slot=\"cool stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-non-identifier/output.svelte",
    "content": "<script>\n\timport Comp from \"./Component.svelte\";\n</script>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool:stuff` is an invalid identifier -->\n\t<div slot=\"cool:stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool stuff` is an invalid identifier -->\n\t<div slot=\"cool stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `new` is an invalid identifier -->\n\t<div slot=\"new\">\n\t\treserved keyword\n\t</div>\n</Comp>\n\n<Comp>\n\t{#snippet stuff()}\n\t\t<div >\n\t\t\tcool\n\t\t</div>\n\t{/snippet}\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool:stuff` is an invalid identifier -->\n\t<svelte:fragment slot=\"cool:stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool stuff` is an invalid identifier -->\n\t<svelte:fragment slot=\"cool stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<Comp>\n\t{#snippet stuff()}\n\t\n\t\t\tcool\n\t\t\n\t{/snippet}\n</Comp>\n\n\n<!-- don't remove the let directive if we don't migrate -->\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool:stuff` is an invalid identifier -->\n\t<div let:should_stay slot=\"cool:stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool stuff` is an invalid identifier -->\n\t<div let:should_stay slot=\"cool stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool:stuff` is an invalid identifier -->\n\t<svelte:fragment let:should_stay slot=\"cool:stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<Comp>\n\t<!-- @migration-task: migrate this slot by hand, `cool stuff` is an invalid identifier -->\n\t<svelte:fragment let:should_stay slot=\"cool stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-shadow-props/input.svelte",
    "content": "<script>\n\timport Comp from \"./Component.svelte\";\n</script>\n\n<Comp stuff=\"cool\">\n\t<div slot=\"stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp stuff=\"cool\">\n\t<svelte:fragment slot=\"stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<!-- don't remove the let if we are not migrating -->\n\n<Comp stuff=\"cool\">\n\t<div let:should_stay slot=\"stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp stuff=\"cool\">\n\t<svelte:fragment let:should_stay slot=\"stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-shadow-props/output.svelte",
    "content": "<script>\n\timport Comp from \"./Component.svelte\";\n</script>\n\n<Comp stuff=\"cool\">\n\t<!-- @migration-task: migrate this slot by hand, `stuff` would shadow a prop on the parent component -->\n\t<div slot=\"stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp stuff=\"cool\">\n\t<!-- @migration-task: migrate this slot by hand, `stuff` would shadow a prop on the parent component -->\n\t<svelte:fragment slot=\"stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>\n\n<!-- don't remove the let if we are not migrating -->\n\n<Comp stuff=\"cool\">\n\t<!-- @migration-task: migrate this slot by hand, `stuff` would shadow a prop on the parent component -->\n\t<div let:should_stay slot=\"stuff\">\n\t\tcool\n\t</div>\n</Comp>\n\n<Comp stuff=\"cool\">\n\t<!-- @migration-task: migrate this slot by hand, `stuff` would shadow a prop on the parent component -->\n\t<svelte:fragment let:should_stay slot=\"stuff\">\n\t\tcool\n\t</svelte:fragment>\n</Comp>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-usages/input.svelte",
    "content": "<Component>\n    unchanged\n</Component>\n\n<svelte:component this={Component}>\n    unchanged\n</svelte:component>\n\n<Component let:foo>\n    <div>{foo}</div>\n</Component>\n\n<Component let:foo={bar}>\n    <div>{bar}</div>\n</Component>\n\n<svelte:component this={Component} let:foo>\n    <div>{foo}</div>\n</svelte:component>\n\n<Component>\n    <div slot=\"named\">x</div>\n</Component>\n\n<Component>\n    <div slot=\"named\">\n        <p>multi</p>\n        <p>line</p>\n    </div>\n</Component>\n\n<Component>\n    <svelte:element this={'div'} slot=\"named\">x</svelte:element>\n</Component>\n\n<Component>\n    <div slot=\"foo\" let:foo>{foo}</div>\n    <div slot=\"bar\" let:foo={bar}>{bar}</div>\n</Component>\n\n<Component let:foo>\n    {foo}\n    <div slot=\"named\">x</div>\n</Component>\n\n<Component>\n    <svelte:fragment let:foo>{foo}</svelte:fragment>\n</Component>\n\n<Component>\n    <svelte:fragment slot=\"named\" let:foo>{foo}</svelte:fragment>\n</Component>\n\n<Component>\n    <div slot=\"foo\">foo</div>\n    OMG WHY\n    <div slot=\"bar\">bar</div>\n</Component>\n\n<Component>\n    If you do mix slots like this\n    <div slot=\"foo\">foo</div>\n    you're a monster\n    <div slot=\"bar\">bar</div>\n</Component>\n\n<Component let:omg>\n    <div slot=\"foo\">foo</div>\n    {omg} WHY\n    <div slot=\"bar\">bar</div>\n</Component>\n\n<Component let:monster>\n    If you do mix slots like this\n    <div slot=\"foo\">foo</div>\n    you're a {monster}\n    <div slot=\"bar\">bar</div>\n</Component>\n\n<Component>\n\t<span slot=\"default\">should be children</span>\n</Component>\n\n<Component>\n\t<span slot=\"default\" let:with_prop>should be children {with_prop} too</span>\n</Component>\n\n<c-e>\n    <div slot=\"named\">unchanged</div>\n</c-e>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-usages/output.svelte",
    "content": "<Component>\n    unchanged\n</Component>\n\n<Component>\n    unchanged\n</Component>\n\n<Component >\n    {#snippet children({ foo })}\n        <div>{foo}</div>\n    {/snippet}\n</Component>\n\n<Component >\n    {#snippet children({ foo: bar })}\n        <div>{bar}</div>\n    {/snippet}\n</Component>\n\n<Component >\n    {#snippet children({ foo })}\n        <div>{foo}</div>\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet named()}\n        <div >x</div>\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet named()}\n        <div >\n            <p>multi</p>\n            <p>line</p>\n        </div>\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet named()}\n        <svelte:element this={'div'} >x</svelte:element>\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet foo({ foo })}\n        <div  >{foo}</div>\n    {/snippet}\n    {#snippet bar({ foo: bar })}\n        <div  >{bar}</div>\n    {/snippet}\n</Component>\n\n<Component >\n    {#snippet children({ foo })}\n        {foo}\n        {/snippet}\n    {#snippet named()}\n        <div >x</div>\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet children({ foo })}\n        {foo}\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet named({ foo })}\n        {foo}\n    {/snippet}\n</Component>\n\n<Component>\n    {#snippet foo()}\n        <div >foo</div>\n    {/snippet}\n    OMG WHY\n    {#snippet bar()}\n        <div >bar</div>\n    {/snippet}\n</Component>\n\n<Component>\n    If you do mix slots like this\n    {#snippet foo()}\n        <div >foo</div>\n    {/snippet}\n    you're a monster\n    {#snippet bar()}\n        <div >bar</div>\n    {/snippet}\n</Component>\n\n<Component >\n    {#snippet foo()}\n        <div >foo</div>\n    {/snippet}\n    {#snippet children({ omg })}\n        {omg} WHY\n        {/snippet}\n    {#snippet bar()}\n        <div >bar</div>\n    {/snippet}\n</Component>\n\n<Component >{#snippet children({ monster })}\n    \n        If you do mix slots like this\n         \n    you're a {monster}{/snippet}\n    {#snippet foo()}\n        <div >foo</div>\n    {/snippet}\n    {#snippet bar()}\n        <div >bar</div>\n    {/snippet}\n</Component>\n\n<Component>\n\t<span >should be children</span>\n</Component>\n\n<Component>\n\t<span  >{#snippet children({ with_prop })}\n                should be children {with_prop} too            {/snippet}\n        </span>\n</Component>\n\n<c-e>\n    <div slot=\"named\">unchanged</div>\n</c-e>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tuse_ts: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts/input.svelte",
    "content": "<slot />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts/output.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tchildren?: import('svelte').Snippet;\n\t}\n\n\tlet { children }: Props = $props();\n</script>\n\n{@render children?.()}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tuse_ts: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts-2/input.svelte",
    "content": "<script>\n    // script tag but no lang=\"ts\", because for example only imports present\n</script>\n\n<slot />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts-2/output.svelte",
    "content": "<script lang=\"ts\">\n    interface Props {\n        children?: import('svelte').Snippet;\n    }\n\n    let { children }: Props = $props();\n    // script tag but no lang=\"ts\", because for example only imports present\n</script>\n\n{@render children?.()}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tuse_ts: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts-3/input.svelte",
    "content": "<script>\n    /** @type {ShouldNotUseTSBecauseImUsingJsDoc} */\n    export let data;\n</script>\n\n<slot />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slot-use_ts-3/output.svelte",
    "content": "<script>\n    \n    /**\n     * @typedef {Object} Props\n     * @property {ShouldNotUseTSBecauseImUsingJsDoc} data\n     * @property {import('svelte').Snippet} [children]\n     */\n\n    /** @type {Props} */\n    let { data, children } = $props();\n</script>\n\n{@render children?.()}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots/input.svelte",
    "content": "<button><slot /></button>\n\n{#if foos}\n\t<slot name=\"foo\" foo={foos} />\n{/if}\n\n{#if $$slots.bar}\n\t{$$slots}\n\t<slot name=\"bar\" />\n{/if}\n\n{#if $$slots.default}foo{/if}\n\n{#if $$slots['default']}foo{/if}\n\n<slot header=\"something\" title={my_title} {id} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots/output.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {import('svelte').Snippet} [children]\n\t * @property {import('svelte').Snippet<[any]>} [foo]\n\t * @property {import('svelte').Snippet} [bar]\n\t */\n\n\t/** @type {Props} */\n\tlet { children, foo, bar } = $props();\n</script>\n\n<button>{@render children?.()}</button>\n\n{#if foos}\n\t{@render foo?.({ foo: foos, })}\n{/if}\n\n{#if bar}\n\t{$$slots}\n\t{@render bar?.()}\n{/if}\n\n{#if children}foo{/if}\n\n{#if children}foo{/if}\n\n{@render children?.({ header: \"something\", title: my_title, id, })}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-below-imports/input.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n</script>\n\n<slot />\n<Foo />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-below-imports/output.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\t/**\n\t * @typedef {Object} Props\n\t * @property {import('svelte').Snippet} [children]\n\t */\n\n\t/** @type {Props} */\n\tlet { children } = $props();\n</script>\n\n{@render children?.()}\n<Foo />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-custom-element/input.svelte",
    "content": "<svelte:options customElement=\"my-element\" />\n\n<script>\n\t// to show that it doesn't bail out from the whole migration\n\tlet count = 0;\n</script>\n\n<button on:click={()=>count++}><slot /></button>\n\n{count}\n\n{#if foo}\n\t<slot name=\"foo\" {foo} />\n{/if}\n\n{#if $$slots.bar}\n\t{$$slots}\n\t<slot name=\"bar\" />\n{/if}\n\n{#if $$slots.default}foo{/if}\n\n{#if $$slots['default']}foo{/if}\n\n{#if $$slots['dashed-name']}foo{/if}\n\n<slot name=\"dashed-name\" />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-custom-element/output.svelte",
    "content": "<svelte:options customElement=\"my-element\" />\n\n<script>\n\t// to show that it doesn't bail out from the whole migration\n\tlet count = $state(0);\n</script>\n\n<button onclick={()=>count++}><slot /></button>\n\n{count}\n\n{#if foo}\n\t<slot name=\"foo\" {foo} />\n{/if}\n\n{#if $$slots.bar}\n\t{$$slots}\n\t<slot name=\"bar\" />\n{/if}\n\n{#if $$slots.default}foo{/if}\n\n{#if $$slots['default']}foo{/if}\n\n{#if $$slots['dashed-name']}foo{/if}\n\n<slot name=\"dashed-name\" />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-multiple/input.svelte",
    "content": "<button><slot /></button>\n<button><slot /></button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-multiple/output.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {import('svelte').Snippet} [children]\n\t */\n\n\t/** @type {Props} */\n\tlet { children } = $props();\n</script>\n\n<button>{@render children?.()}</button>\n<button>{@render children?.()}</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-with-$$props/input.svelte",
    "content": "<button><slot /></button>\n\n{#if foos}\n\t<slot name=\"foo\" foo={foos} />\n{/if}\n\n{#if $$slots.bar}\n\t{$$slots}\n\t<slot name=\"bar\" />\n{/if}\n\n{#if $$slots.default}foo{/if}\n\n{#if $$slots['default']}foo{/if}\n\n<slot header=\"something\" title={$$props.cool} {id} />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/slots-with-$$props/output.svelte",
    "content": "<script>\n\t/**\n\t * @typedef {Object} Props\n\t * @property {import('svelte').Snippet} [children]\n\t * @property {import('svelte').Snippet<[any]>} [foo]\n\t * @property {import('svelte').Snippet} [bar]\n\t */\n\n\t/** @type {Props & { [key: string]: any }} */\n\tlet { ...props } = $props();\n</script>\n\n<button>{@render props.children?.()}</button>\n\n{#if foos}\n\t{@render props.foo?.({ foo: foos, })}\n{/if}\n\n{#if props.bar}\n\t{$$slots}\n\t{@render props.bar?.()}\n{/if}\n\n{#if props.children}foo{/if}\n\n{#if props.children}foo{/if}\n\n{@render props.children?.({ header: \"something\", title: props.cool, id, })}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/state-and-derivations-sequence/input.svelte",
    "content": "<script>\n\tlet count = (void 0, 0);\n\t// semicolon at the end\n\t$: doubled = (void 0, count * 2);\n\t$: ({ quadrupled } = (void 0, { quadrupled: count * 4 }));\n\t// no semicolon at the end\n\t$: time_8 = (void 0, count * 8)\n\t$: ({ time_16 } = (void 0, { time_16: count * 16 }))\n</script>\n\n<!-- reassign to migrate to state -->\n<button onclick={()=> count++}></button>\n\n{count} / {doubled} / {quadrupled} / {time_8} / {time_16}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/state-and-derivations-sequence/output.svelte",
    "content": "<script>\n\tlet count = $state((void 0, 0));\n\t// semicolon at the end\n\tlet doubled = $derived((void 0, count * 2));\n\tlet { quadrupled } = $derived((void 0, { quadrupled: count * 4 }));\n\t// no semicolon at the end\n\tlet time_8 = $derived((void 0, count * 8))\n\tlet { time_16 } = $derived((void 0, { time_16: count * 16 }))\n</script>\n\n<!-- reassign to migrate to state -->\n<button onclick={()=> count++}></button>\n\n{count} / {doubled} / {quadrupled} / {time_8} / {time_16}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/state-no-initial/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet bounds: DOMRect | undefined;\n\t$: position = calculatePosition(bounds);\n\n\tconst openDropdown = () => {\n    bounds = getInputPosition();\n  };\n\n\tconst getInputPosition = () => {};\n  const calculatePosition = (boundary?: DOMRect) => ({});\n</script>\n\n<div style:top={position.top}></div>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/state-no-initial/output.svelte",
    "content": "<script lang=\"ts\">\n\tlet bounds: DOMRect | undefined = $state();\n\n\tconst openDropdown = () => {\n    bounds = getInputPosition();\n  };\n\n\tconst getInputPosition = () => {};\n  const calculatePosition = (boundary?: DOMRect) => ({});\n\tlet position = $derived(calculatePosition(bounds));\n</script>\n\n<div style:top={position.top}></div>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/state-ts/input.svelte",
    "content": "<script lang=\"ts\">\n\t// here is a comment\n\tlet div: HTMLIFrameElement;\n\tlet count = 0;\n</script>\n\n<div bind:this={div}></div>\n<button on:click={() => count++}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/state-ts/output.svelte",
    "content": "<script lang=\"ts\">\n\t// here is a comment\n\tlet div: HTMLIFrameElement = $state();\n\tlet count = $state(0);\n</script>\n\n<div bind:this={div}></div>\n<button onclick={() => count++}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-component/input.svelte",
    "content": "<script>\n\tlet Component;\n\tlet fallback;\n</script>\n\n<Component let:Comp>\n\t<svelte:component this={Comp} />\n</Component>\n\n<Component let:comp>\n\t<svelte:component this={comp} />\n</Component>\n\n<Component let:comp={stuff}>\n\t<svelte:component this={stuff} />\n</Component>\n\n<Component>\n\t<div slot=\"x\" let:comp={stuff}>\n\t\t<svelte:component this={stuff} />\n\t</div>\n</Component>\n\n<Component>\n\t<svelte:fragment slot=\"x\" let:comp={stuff}>\n\t\t<svelte:component this={stuff} />\n\t</svelte:fragment>\n</Component>\n\n<Component>\n\t<svelte:element this={\"div\"} slot=\"x\" let:comp={stuff}>\n\t\t<svelte:component this={stuff} />\n\t</svelte:element>\n</Component>\n\n<svelte:component this={Component} let:Comp>\n\t<svelte:component this={Comp} />\n</svelte:component>\n\n<svelte:component this={Component} let:comp>\n\t<svelte:component this={comp} />\n</svelte:component>\n\n<svelte:component this={Component} let:comp={stuff}>\n\t<svelte:component this={stuff} />\n</svelte:component>\n\n<svelte:component this={Component}>\n\t<div slot=\"x\" let:comp={stuff}>\n\t\t<svelte:component this={stuff} />\n\t</div>\n</svelte:component>\n\n<svelte:component this={Component}>\n\t<svelte:fragment slot=\"x\" let:comp={stuff}>\n\t\t<svelte:component this={stuff} />\n\t</svelte:fragment>\n</svelte:component>\n\n<svelte:component this={Component}>\n\t<svelte:element this={\"div\"} slot=\"x\" let:comp={stuff}>\n\t\t<svelte:component this={stuff} />\n\t</svelte:element>\n</svelte:component>\n\n<svelte:component this={Component} />\n<svelte:component this={Component} prop value=\"\" on:click on:click={()=>''} />\n<svelte:component this={Math.random() > .5 ? $$restProps.heads : $$restProps.tail}  prop value=\"\" on:click on:click={()=>''}/>\n\n<svelte:component \n\tthis={Component} \n\tprop value=\"\" \n\ton:click \n\ton:click={()=>''} \n/>\n\n<svelte:component \n\tthis={Math.random() > .5 ? $$restProps.heads : $$restProps.tail}\n\tprop value=\"\" \n\ton:click \n\ton:click={()=>''}\n/>\n\n{#if true}\n\t{@const x = {Component}}\n\t<svelte:component this={x['Component']} />\n{/if}\n\n{#if true}\n\t{@const x = {Component}}\n\t<svelte:component this={x.Component} />\n{/if}\n\n{#each [] as component}\n\t<svelte:component this={component} />\n{/each}\n\n{#each [] as Component}\n\t<svelte:component this={Component} />\n{/each}\n\n{#each [] as component}\n\t{@const Comp = component.component}\n\t<svelte:component this={Comp} />\n{/each}\n\n{#each [] as component}\n\t{@const comp = component.component}\n\t<svelte:component this={comp} />\n{/each}\n\n{#await Promise.resolve()}\n\t<svelte:component this={Component} />\n\t<svelte:component this={fallback} />\n{:then something}\n\t<svelte:component this={something} />\n{:catch e}\n\t<svelte:component this={e} />\n{/await}\n\n{#await Promise.resolve() then Something}\n\t<svelte:component this={Something} />\n{:catch Error}\n\t<svelte:component this={Error} />\n{/await}\n\n<Component>\n\t{@const stuff = true}\n\t<div>\n\t\t<p>\n\t\t\t<svelte:component this={stuff && Component} />\n\t\t</p>\n\t</div>\n</Component>\n\n<svelte:component this={Component}>\n\t{@const stuff = true}\n\t<div>\n\t\t<p>\n\t\t\t<svelte:component this={stuff && Component} />\n\t\t</p>\n\t</div>\n</svelte:component>\n\n{#each [] as i}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{/each}\n\n{#await stuff}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{:then x}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{:catch e}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{/await}\n\n{#await stuff then x}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{:catch e}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{/await}\n\n{#if true}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{/if}\n\n{#snippet test()}\n\t{@const stuff = true}\n\t<li>\n\t\t<svelte:component this={stuff && Component} />\n\t</li>\n{/snippet}\n\n<Component>\n\t<Nested>\n\t\t<svelte:component this={stuff && Component} />\n\t</Nested>\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-component/output.svelte",
    "content": "<script>\n\t/** @type {{ [key: string]: any }} */\n\tlet { ...rest } = $props();\n\tlet Component;\n\tlet fallback;\n\n\tconst SvelteComponent_10 = $derived(Math.random() > .5 ? rest.heads : rest.tail);\n</script>\n\n<Component >\n\t{#snippet children({ Comp })}\n\t\t<Comp />\n\t{/snippet}\n</Component>\n\n<Component >\n\t{#snippet children({ comp })}\n\t\t{@const SvelteComponent = comp}\n\t<SvelteComponent />\n\t{/snippet}\n</Component>\n\n<Component >\n\t{#snippet children({ comp: stuff })}\n\t\t{@const SvelteComponent_1 = stuff}\n\t<SvelteComponent_1 />\n\t{/snippet}\n</Component>\n\n<Component>\n\t{#snippet x({ comp: stuff })}\n\t\t{@const SvelteComponent_2 = stuff}\n\t<div  >\n\t\t\t<SvelteComponent_2 />\n\t\t</div>\n\t{/snippet}\n</Component>\n\n<Component>\n\t{#snippet x({ comp: stuff })}\n\t{@const SvelteComponent_3 = stuff}\n\t\n\t\t\t<SvelteComponent_3 />\n\t\t\n\t{/snippet}\n</Component>\n\n<Component>\n\t{#snippet x({ comp: stuff })}\n\t\t{@const SvelteComponent_4 = stuff}\n\t<svelte:element this={\"div\"}  >\n\t\t\t<SvelteComponent_4 />\n\t\t</svelte:element>\n\t{/snippet}\n</Component>\n\n<Component >\n\t{#snippet children({ Comp })}\n\t\t<Comp />\n\t{/snippet}\n</Component>\n\n<Component >\n\t{#snippet children({ comp })}\n\t\t{@const SvelteComponent_5 = comp}\n\t<SvelteComponent_5 />\n\t{/snippet}\n</Component>\n\n<Component >\n\t{#snippet children({ comp: stuff })}\n\t\t{@const SvelteComponent_6 = stuff}\n\t<SvelteComponent_6 />\n\t{/snippet}\n</Component>\n\n<Component>\n\t{#snippet x({ comp: stuff })}\n\t\t{@const SvelteComponent_7 = stuff}\n\t<div  >\n\t\t\t<SvelteComponent_7 />\n\t\t</div>\n\t{/snippet}\n</Component>\n\n<Component>\n\t{#snippet x({ comp: stuff })}\n\t{@const SvelteComponent_8 = stuff}\n\t\n\t\t\t<SvelteComponent_8 />\n\t\t\n\t{/snippet}\n</Component>\n\n<Component>\n\t{#snippet x({ comp: stuff })}\n\t\t{@const SvelteComponent_9 = stuff}\n\t<svelte:element this={\"div\"}  >\n\t\t\t<SvelteComponent_9 />\n\t\t</svelte:element>\n\t{/snippet}\n</Component>\n\n<Component />\n<Component prop value=\"\" on:click on:click={()=>''} />\n<SvelteComponent_10  prop value=\"\" on:click on:click={()=>''}/>\n\n<Component \n\tprop value=\"\" \n\ton:click \n\ton:click={()=>''} \n/>\n\n<SvelteComponent_10\n\tprop value=\"\" \n\ton:click \n\ton:click={()=>''}\n/>\n\n{#if true}\n\t{@const x = {Component}}\n\t{@const SvelteComponent_12 = x['Component']}\n\t<SvelteComponent_12 />\n{/if}\n\n{#if true}\n\t{@const x = {Component}}\n\t<x.Component />\n{/if}\n\n{#each [] as component}\n\t{@const SvelteComponent_13 = component}\n\t<SvelteComponent_13 />\n{/each}\n\n{#each [] as Component}\n\t<Component />\n{/each}\n\n{#each [] as component}\n\t{@const Comp = component.component}\n\t<Comp />\n{/each}\n\n{#each [] as component}\n\t{@const comp = component.component}\n\t{@const SvelteComponent_14 = comp}\n\t<SvelteComponent_14 />\n{/each}\n\n{#await Promise.resolve()}\n\t<Component />\n\t{@const SvelteComponent_15 = fallback}\n\t<SvelteComponent_15 />\n{:then something}\n\t{@const SvelteComponent_16 = something}\n\t<SvelteComponent_16 />\n{:catch e}\n\t{@const SvelteComponent_17 = e}\n\t<SvelteComponent_17 />\n{/await}\n\n{#await Promise.resolve() then Something}\n\t<Something />\n{:catch Error}\n\t<Error />\n{/await}\n\n<Component>\n\t{@const stuff = true}\n\t{@const SvelteComponent_18 = stuff && Component}\n\t<div>\n\t\t<p>\n\t\t\t<SvelteComponent_18 />\n\t\t</p>\n\t</div>\n</Component>\n\n<Component>\n\t{@const stuff = true}\n\t{@const SvelteComponent_19 = stuff && Component}\n\t<div>\n\t\t<p>\n\t\t\t<SvelteComponent_19 />\n\t\t</p>\n\t</div>\n</Component>\n\n{#each [] as i}\n\t{@const stuff = true}\n\t{@const SvelteComponent_20 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_20 />\n\t</li>\n{/each}\n\n{#await stuff}\n\t{@const stuff = true}\n\t{@const SvelteComponent_21 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_21 />\n\t</li>\n{:then x}\n\t{@const stuff = true}\n\t{@const SvelteComponent_22 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_22 />\n\t</li>\n{:catch e}\n\t{@const stuff = true}\n\t{@const SvelteComponent_23 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_23 />\n\t</li>\n{/await}\n\n{#await stuff then x}\n\t{@const stuff = true}\n\t{@const SvelteComponent_24 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_24 />\n\t</li>\n{:catch e}\n\t{@const stuff = true}\n\t{@const SvelteComponent_25 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_25 />\n\t</li>\n{/await}\n\n{#if true}\n\t{@const stuff = true}\n\t{@const SvelteComponent_26 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_26 />\n\t</li>\n{/if}\n\n{#snippet test()}\n\t{@const stuff = true}\n\t{@const SvelteComponent_27 = stuff && Component}\n\t<li>\n\t\t<SvelteComponent_27 />\n\t</li>\n{/snippet}\n\n<Component>\n\t<Nested>\n\t\t{@const SvelteComponent_28 = stuff && Component}\n\t\t<SvelteComponent_28 />\n\t</Nested>\n</Component>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-element/input.svelte",
    "content": "<svelte:element this=\"div\" />\n<svelte:element this='div' />\n<svelte:element this={\"div\"} />\n\n<!-- we don't try to fix this bug, we just leave it as-is -->\n<svelte:element this=\"h{n}\" />\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-element/output.svelte",
    "content": "<svelte:element this={\"div\"} />\n<svelte:element this={'div'} />\n<svelte:element this={\"div\"} />\n\n<!-- we don't try to fix this bug, we just leave it as-is -->\n<svelte:element this=\"h{n}\" />"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-ignore/input.svelte",
    "content": "<script>\n\tfunction foo() {\n\t\t// svelte-ignore non-top-level-reactive-declaration\n\t\t$: x = 1;\n\t}\n</script>\n\n<!-- svelte-ignore a11y-something-something -->\n<div></div>\n\n<!-- svelte-ignore a11y-something-something a11y-something-something2 -->\n<div></div>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-ignore/output.svelte",
    "content": "<script>\n\tfunction foo() {\n\t\t// svelte-ignore reactive_declaration_invalid_placement\n\t\t$: x = 1;\n\t}\n</script>\n\n<!-- svelte-ignore a11y_something_something -->\n<div></div>\n\n<!-- svelte-ignore a11y_something_something, a11y_something_something2 -->\n<div></div>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self/input.svelte",
    "content": "{#if false}\n\t<svelte:self />\n\t<svelte:self with_attributes/>\n\t<svelte:self count={count+1}/>\n\t<svelte:self>\n\t\tchild\n\t</svelte:self>\n\t<svelte:self count={count+1}>\n\t\tchild\n\t</svelte:self>\n\t<svelte:self count={$$props.count}     >\n\t\tchild\n\t</svelte:self>\n\t<svelte:self></svelte:self>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self/output.svelte",
    "content": "<script>\n\timport Output from './output.svelte';\n\t/** @type {{ [key: string]: any }} */\n\tlet { ...props } = $props();\n</script>\n\n{#if false}\n\t<Output />\n\t<Output with_attributes/>\n\t<Output count={count+1}/>\n\t<Output>\n\t\tchild\n\t</Output>\n\t<Output count={count+1}>\n\t\tchild\n\t</Output>\n\t<Output count={props.count}     >\n\t\tchild\n\t</Output>\n\t<Output></Output>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self-name-conflict/input.svelte",
    "content": "<script>\n\tlet Output;\n</script>\n\n{#if false}\n\t<svelte:self />\n\t<svelte:self with_attributes/>\n\t<svelte:self count={count+1}/>\n\t<svelte:self>\n\t\tchild\n\t</svelte:self>\n\t<svelte:self count={count+1}>\n\t\tchild\n\t</svelte:self>\n\t<svelte:self count={$$props.count}     >\n\t\tchild\n\t</svelte:self>\n\t<svelte:self></svelte:self>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self-name-conflict/output.svelte",
    "content": "<script>\n\timport Output_1 from './output.svelte';\n\t/** @type {{ [key: string]: any }} */\n\tlet { ...props } = $props();\n\tlet Output;\n</script>\n\n{#if false}\n\t<Output_1 />\n\t<Output_1 with_attributes/>\n\t<Output_1 count={count+1}/>\n\t<Output_1>\n\t\tchild\n\t</Output_1>\n\t<Output_1 count={count+1}>\n\t\tchild\n\t</Output_1>\n\t<Output_1 count={props.count}     >\n\t\tchild\n\t</Output_1>\n\t<Output_1></Output_1>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self-skip-filename/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_filename: true,\n\tlogs: [\n\t\t\"One or more `@migration-task` comments were added to a file (unfortunately we don't know the name), please check them and complete the migration manually.\"\n\t],\n\terrors: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self-skip-filename/input.svelte",
    "content": "{#if false}\n\t<svelte:self />\n{/if}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/svelte-self-skip-filename/output.svelte",
    "content": "{#if false}\n\t<!-- @migration-task: svelte:self is deprecated, import this Svelte file into itself instead -->\n\t<svelte:self />\n{/if}"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/unused-beforeUpdate-afterUpdate/input.svelte",
    "content": "<script>\n\timport { beforeUpdate, afterUpdate } from \"svelte\";\n\n\tlet count = 0;\n</script>\n\n<button on:click={()=> count++}></button>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/unused-beforeUpdate-afterUpdate/output.svelte",
    "content": "<script>\n\t\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={()=> count++}></button>"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/unused-beforeUpdate-afterUpdate-extra-imports/input.svelte",
    "content": "<script>\n\timport { beforeUpdate, afterUpdate, onMount } from \"svelte\";\n\n\tlet count = 0;\n\n\tonMount(()=>{\n\t\tconsole.log(count);\n\t})\n</script>\n\n<button on:click={()=> count++}></button>\n"
  },
  {
    "path": "packages/svelte/tests/migrate/samples/unused-beforeUpdate-afterUpdate-extra-imports/output.svelte",
    "content": "<script>\n\timport { onMount } from \"svelte\";\n\n\tlet count = $state(0);\n\n\tonMount(()=>{\n\t\tconsole.log(count);\n\t})\n</script>\n\n<button onclick={()=> count++}></button>"
  },
  {
    "path": "packages/svelte/tests/migrate/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { migrate } from 'svelte/compiler';\nimport { try_read_file } from '../helpers.js';\nimport { suite, type BaseTest } from '../suite.js';\n\ninterface ParserTest extends BaseTest {\n\tskip_filename?: boolean;\n\tuse_ts?: boolean;\n\tlogs?: any[];\n\terrors?: any[];\n}\n\nconst { test, run } = suite<ParserTest>(async (config, cwd) => {\n\tconst input = fs\n\t\t.readFileSync(`${cwd}/input.svelte`, 'utf-8')\n\t\t.replace(/\\s+$/, '')\n\t\t.replace(/\\r/g, '');\n\n\tconst logs: any[] = [];\n\tconst errors: any[] = [];\n\n\tif (config.logs) {\n\t\tconsole.log = (...args) => {\n\t\t\tlogs.push(...args);\n\t\t};\n\t}\n\n\tif (config.errors) {\n\t\tconsole.error = (...args) => {\n\t\t\terrors.push(...args.map((arg) => arg.toJSON?.() ?? arg));\n\t\t};\n\t}\n\n\tconst actual = migrate(input, {\n\t\tfilename: config.skip_filename ? undefined : `output.svelte`,\n\t\tuse_ts: config.use_ts\n\t}).code;\n\n\tif (config.logs) {\n\t\tassert.deepEqual(logs, config.logs);\n\t}\n\n\tif (config.errors) {\n\t\tassert.deepEqual(errors, config.errors);\n\t}\n\n\t// run `UPDATE_SNAPSHOTS=true pnpm test migrate` to update parser tests\n\tif (process.env.UPDATE_SNAPSHOTS || !fs.existsSync(`${cwd}/output.svelte`)) {\n\t\tfs.writeFileSync(`${cwd}/output.svelte`, actual);\n\t} else {\n\t\tfs.writeFileSync(`${cwd}/_actual.svelte`, actual);\n\n\t\tconst expected = try_read_file(`${cwd}/output.svelte`);\n\t\tassert.deepEqual(actual.trim(), expected?.trim());\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/motion/test.ts",
    "content": "// @vitest-environment jsdom\nimport '../helpers.js'; // for the matchMedia polyfill\nimport { describe, it, assert } from 'vitest';\nimport { get } from 'svelte/store';\nimport { spring, tweened, Tween } from 'svelte/motion';\nimport { raf } from '../animation-helpers.js';\n\ndescribe('motion', () => {\n\tdescribe('spring', () => {\n\t\tit('handles initially undefined values', () => {\n\t\t\tconst size = spring();\n\n\t\t\tsize.set(100);\n\t\t\tassert.equal(get(size), 100);\n\t\t});\n\t});\n\n\tdescribe('tweened', () => {\n\t\tit('handles initially undefined values', () => {\n\t\t\tconst size = tweened();\n\n\t\t\tsize.set(100);\n\t\t\tassert.equal(get(size), 100);\n\t\t});\n\n\t\tit('sets immediately when duration is 0', () => {\n\t\t\tconst size = tweened(0);\n\n\t\t\tsize.set(100, { duration: 0 });\n\t\t\tassert.equal(get(size), 100);\n\t\t});\n\n\t\tit('updates correctly when initialized with a `null`-ish value', () => {\n\t\t\tconst size = tweened(undefined as unknown as number, { duration: 0 });\n\n\t\t\tsize.set(10);\n\t\t\tassert.equal(get(size), 10);\n\n\t\t\tsize.update((v) => v + 10);\n\t\t\tassert.equal(get(size), 20);\n\t\t});\n\n\t\tit('updates non-numeric values immediately', () => {\n\t\t\traf.reset();\n\t\t\tconst boolean = tweened(false);\n\n\t\t\tboolean.set(true, { duration: 100 });\n\n\t\t\traf.tick(1);\n\t\t\tassert.equal(get(boolean), true);\n\t\t});\n\t});\n\n\tdescribe('Tween', () => {\n\t\tit('sets immediately when duration is 0', () => {\n\t\t\tconst size = new Tween(0);\n\n\t\t\tsize.set(100, { duration: 0 });\n\t\t\tassert.equal(size.current, 100);\n\t\t});\n\n\t\tit('updates non-numeric values immediately', () => {\n\t\t\traf.reset();\n\t\t\tconst boolean = new Tween(false);\n\n\t\t\tboolean.set(true, { duration: 100 });\n\n\t\t\traf.tick(1);\n\t\t\tassert.equal(boolean.current, true);\n\t\t});\n\t});\n\n\tit('updates correctly when initialized with a `null`-ish value', () => {\n\t\tconst size = new Tween(undefined as unknown as number, { duration: 0 });\n\n\t\tsize.set(10);\n\t\tassert.equal(size.current, 10);\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action/input.svelte",
    "content": "<input use:autofocus>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 21,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 21,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\"type\": \"Action\",\n\t\t\t\t\t\t\"name\": \"autofocus\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 20,\n\t\t\t\t\t\t\t\t\"character\": 20\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": null,\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-duplicate/input.svelte",
    "content": "<input use:autofocus use:autofocus>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-duplicate/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 35,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\"type\": \"Action\",\n\t\t\t\t\t\t\"name\": \"autofocus\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 20,\n\t\t\t\t\t\t\t\t\"character\": 20\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": null,\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\"type\": \"Action\",\n\t\t\t\t\t\t\"name\": \"autofocus\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 21,\n\t\t\t\t\t\t\t\t\"character\": 21\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 34,\n\t\t\t\t\t\t\t\t\"character\": 34\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": null,\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-with-call/input.svelte",
    "content": "<input use:tooltip=\"{t('tooltip msg')}\">\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-with-call/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 40,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 40,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\t\"type\": \"Action\",\n\t\t\t\t\t\t\"name\": \"tooltip\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\"end\": 37,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 37\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"t\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"arguments\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 23,\n\t\t\t\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"tooltip msg\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"'tooltip msg'\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-with-identifier/input.svelte",
    "content": "<input use:tooltip={message}>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-with-identifier/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 29,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 29,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\"type\": \"Action\",\n\t\t\t\t\t\t\"name\": \"tooltip\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\t\"end\": 27,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"message\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-with-literal/input.svelte",
    "content": "<input use:tooltip=\"{'tooltip msg'}\">\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/action-with-literal/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 37,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 37,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\"type\": \"Action\",\n\t\t\t\t\t\t\"name\": \"tooltip\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 34\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": \"tooltip msg\",\n\t\t\t\t\t\t\t\"raw\": \"'tooltip msg'\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/animation/input.svelte",
    "content": "{#each things as thing (thing)}\n\t<div animate:flip>flips</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/animation/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 70,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 70,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 33,\n\t\t\t\t\t\t\"end\": 62,\n\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\t\t\"type\": \"Animation\",\n\t\t\t\t\t\t\t\t\"name\": \"flip\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\t\t\"character\": 50\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"expression\": null,\n\t\t\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 51,\n\t\t\t\t\t\t\t\t\"end\": 56,\n\t\t\t\t\t\t\t\t\"raw\": \"flips\",\n\t\t\t\t\t\t\t\t\"data\": \"flips\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"thing\",\n\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 17\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 22,\n\t\t\t\t\t\t\t\"character\": 22\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"things\"\n\t\t\t\t},\n\t\t\t\t\"key\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"thing\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-class-directive/input.svelte",
    "content": "<div class:foo={isFoo}></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-class-directive/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 29,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 29,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\"type\": \"Class\",\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 14,\n\t\t\t\t\t\t\t\t\"character\": 14\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"isFoo\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-containing-solidus/input.svelte",
    "content": "<a href=https://www.google.com>Google</a>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-containing-solidus/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 41,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 41,\n\t\t\t\t\"name\": \"a\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 3,\n\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\"name\": \"href\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\"character\": 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"https://www.google.com\",\n\t\t\t\t\t\t\t\t\"data\": \"https://www.google.com\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\"end\": 37,\n\t\t\t\t\t\t\"raw\": \"Google\",\n\t\t\t\t\t\t\"data\": \"Google\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-curly-bracket/input.svelte",
    "content": "<input foo=a{1} />\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-curly-bracket/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 18,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 18,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"a\",\n\t\t\t\t\t\t\t\t\"data\": \"a\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-dynamic/input.svelte",
    "content": "<div style='color: {color};'>{color}</div>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-dynamic/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 42,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 42,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\"name\": \"style\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"color: \",\n\t\t\t\t\t\t\t\t\"data\": \"color: \"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"color\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 26,\n\t\t\t\t\t\t\t\t\"end\": 27,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \";\",\n\t\t\t\t\t\t\t\t\"data\": \";\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\"end\": 35,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 35\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"color\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-dynamic-boolean/input.svelte",
    "content": "<textarea readonly={readonly}></textarea>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-dynamic-boolean/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 41,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 41,\n\t\t\t\t\"name\": \"textarea\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\"name\": \"readonly\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"readonly\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-empty/input.svelte",
    "content": "<div a=\"\" b={''} c='' d=\"{''}\" ></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-empty/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 38,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 38,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 9,\n\t\t\t\t\t\t\"name\": \"a\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\"data\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"name\": \"b\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 11,\n\t\t\t\t\t\t\t\t\"character\": 11\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"''\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\"name\": \"c\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 17\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\"data\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\"name\": \"d\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 22,\n\t\t\t\t\t\t\t\t\"character\": 22\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 23,\n\t\t\t\t\t\t\t\t\"character\": 23\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 26,\n\t\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"''\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-escaped/input.svelte",
    "content": "<div data-foo='semi:&quot;space:&quot letter:&quote number:&quot1 end:&quot'></div>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-escaped/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 83,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 83,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 76,\n\t\t\t\t\t\t\"name\": \"data-foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 13,\n\t\t\t\t\t\t\t\t\"character\": 13\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 15,\n\t\t\t\t\t\t\t\t\"end\": 75,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"semi:&quot;space:&quot letter:&quote number:&quot1 end:&quot\",\n\t\t\t\t\t\t\t\t\"data\": \"semi:\\\"space:\\\" letter:&quote number:&quot1 end:\\\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-multiple/input.svelte",
    "content": "<div id='x' class='y'></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-multiple/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 28,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 28,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 7\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\t\t\"end\": 10,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"x\",\n\t\t\t\t\t\t\t\t\"data\": \"x\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\"name\": \"class\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 17\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"y\",\n\t\t\t\t\t\t\t\t\"data\": \"y\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-shorthand/input.svelte",
    "content": "<div {id}></div>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-shorthand/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 16,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 16,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 9,\n\t\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"AttributeShorthand\",\n\t\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-static/input.svelte",
    "content": "<div class='foo'></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-static/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 23,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 23,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"name\": \"class\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-static-boolean/input.svelte",
    "content": "<textarea readonly></textarea>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-static-boolean/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 30,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 30,\n\t\t\t\t\"name\": \"textarea\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\t\"name\": \"readonly\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style/input.svelte",
    "content": "<div style=\"color: red;\">red</div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 34,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 34,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\t\"name\": \"style\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"color: red;\",\n\t\t\t\t\t\t\t\t\"data\": \"color: red;\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive/input.svelte",
    "content": "<div style:color={myColor}></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 33,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"myColor\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive-modifiers/input.svelte",
    "content": "<div style:color|important={myColor}></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive-modifiers/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 43,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 43,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 26,\n\t\t\t\t\t\t\t\t\"character\": 26\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [\n\t\t\t\t\t\t\t\"important\"\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 28,\n\t\t\t\t\t\t\t\t\t\"end\": 35,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 35\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"myColor\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive-shorthand/input.svelte",
    "content": "<div style:color></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive-shorthand/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 23,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 23,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive-string/input.svelte",
    "content": "<div style:color=\"red\"></div>\n<div style:color='red'></div>\n<div style:color=red></div>\n<div style:color=\"red{variable}\"></div>\n<div style:color='red{variable}'></div>\n<div style:color=red{variable}></div>\n<div style:color={`template${literal}`}></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-style-directive-string/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 252,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 29,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 29,\n\t\t\t\t\"end\": 30,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 30,\n\t\t\t\t\"end\": 59,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 35,\n\t\t\t\t\t\t\"end\": 52,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 46\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\t\t\t\"end\": 51,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 59,\n\t\t\t\t\"end\": 60,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 60,\n\t\t\t\t\"end\": 87,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 65\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 76\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 87,\n\t\t\t\t\"end\": 88,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 88,\n\t\t\t\t\"end\": 127,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 93,\n\t\t\t\t\t\t\"end\": 120,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 93\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 104\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 106,\n\t\t\t\t\t\t\t\t\"end\": 109,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 109,\n\t\t\t\t\t\t\t\t\"end\": 119,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 110,\n\t\t\t\t\t\t\t\t\t\"end\": 118,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"variable\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 127,\n\t\t\t\t\"end\": 128,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 128,\n\t\t\t\t\"end\": 167,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 133,\n\t\t\t\t\t\t\"end\": 160,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 133\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 144\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 146,\n\t\t\t\t\t\t\t\t\"end\": 149,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 149,\n\t\t\t\t\t\t\t\t\"end\": 159,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 150,\n\t\t\t\t\t\t\t\t\t\"end\": 158,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"variable\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 167,\n\t\t\t\t\"end\": 168,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 168,\n\t\t\t\t\"end\": 205,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 173,\n\t\t\t\t\t\t\"end\": 198,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 173\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 184\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 185,\n\t\t\t\t\t\t\t\t\"end\": 188,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"red\",\n\t\t\t\t\t\t\t\t\"data\": \"red\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 188,\n\t\t\t\t\t\t\t\t\"end\": 198,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 189,\n\t\t\t\t\t\t\t\t\t\"end\": 197,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"variable\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 205,\n\t\t\t\t\"end\": 206,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 206,\n\t\t\t\t\"end\": 252,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 211,\n\t\t\t\t\t\t\"end\": 245,\n\t\t\t\t\t\t\"type\": \"StyleDirective\",\n\t\t\t\t\t\t\"name\": \"color\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 211\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 222\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 223,\n\t\t\t\t\t\t\t\t\"end\": 245,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\"start\": 224,\n\t\t\t\t\t\t\t\t\t\"end\": 244,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 38\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"expressions\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 235,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 242,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"literal\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 225,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 233,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"template\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"template\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": false\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 243,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 243,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 37\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 37\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-unquoted/input.svelte",
    "content": "<div class=foo></div>\n<a href=/>home</a>\n<a href=/foo>home</a>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-unquoted/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 62,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 21,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\"name\": \"class\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 21,\n\t\t\t\t\"end\": 22,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 22,\n\t\t\t\t\"end\": 40,\n\t\t\t\t\"name\": \"a\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\"end\": 31,\n\t\t\t\t\t\t\"name\": \"href\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\"character\": 25\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 29\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\t\"end\": 31,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"/\",\n\t\t\t\t\t\t\t\t\"data\": \"/\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\"raw\": \"home\",\n\t\t\t\t\t\t\"data\": \"home\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 40,\n\t\t\t\t\"end\": 41,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 41,\n\t\t\t\t\"end\": 62,\n\t\t\t\t\"name\": \"a\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\"name\": \"href\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\"character\": 44\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 48\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 49,\n\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"/foo\",\n\t\t\t\t\t\t\t\t\"data\": \"/foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 54,\n\t\t\t\t\t\t\"end\": 58,\n\t\t\t\t\t\t\"raw\": \"home\",\n\t\t\t\t\t\t\"data\": \"home\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-with-whitespace/input.svelte",
    "content": "<button on:click= {foo}>Click</button>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/attribute-with-whitespace/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 38,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 38,\n\t\t\t\t\"name\": \"button\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\"type\": \"EventHandler\",\n\t\t\t\t\t\t\"name\": \"click\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\"raw\": \"Click\",\n\t\t\t\t\t\t\"data\": \"Click\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/await-catch/input.svelte",
    "content": "{#await thePromise}\n\t<p>loading...</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/await-catch/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 99,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 99,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"thePromise\"\n\t\t\t\t},\n\t\t\t\t\"value\": null,\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"theError\",\n\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\"end\": 55,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 55\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\t\t\t\"raw\": \"loading...\",\n\t\t\t\t\t\t\t\t\t\"data\": \"loading...\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\"end\": 91,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 56,\n\t\t\t\t\t\t\t\"end\": 58,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 61,\n\t\t\t\t\t\t\t\t\t\"end\": 68,\n\t\t\t\t\t\t\t\t\t\"raw\": \"oh no! \",\n\t\t\t\t\t\t\t\t\t\"data\": \"oh no! \"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\"start\": 68,\n\t\t\t\t\t\t\t\t\t\"end\": 86,\n\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 69,\n\t\t\t\t\t\t\t\t\t\t\"end\": 85,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 69,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 77,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"theError\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 78,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 85,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"message\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 90,\n\t\t\t\t\t\t\t\"end\": 91,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/await-then-catch/input.svelte",
    "content": "{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/await-then-catch/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 148,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 148,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"thePromise\"\n\t\t\t\t},\n\t\t\t\t\"value\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"theValue\",\n\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\"character\": 46\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 15,\n\t\t\t\t\t\t\t\"character\": 54\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"theError\",\n\t\t\t\t\t\"start\": 96,\n\t\t\t\t\t\"end\": 104,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\"character\": 96\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 104\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\t\t\t\"raw\": \"loading...\",\n\t\t\t\t\t\t\t\t\t\"data\": \"loading...\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 55,\n\t\t\t\t\t\t\t\"end\": 57,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 57,\n\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\"end\": 73,\n\t\t\t\t\t\t\t\t\t\"raw\": \"the value is \",\n\t\t\t\t\t\t\t\t\t\"data\": \"the value is \"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\"start\": 73,\n\t\t\t\t\t\t\t\t\t\"end\": 83,\n\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 74,\n\t\t\t\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"name\": \"theValue\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 87,\n\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": 88,\n\t\t\t\t\t\"end\": 140,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 105,\n\t\t\t\t\t\t\t\"end\": 107,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 107,\n\t\t\t\t\t\t\t\"end\": 139,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 110,\n\t\t\t\t\t\t\t\t\t\"end\": 117,\n\t\t\t\t\t\t\t\t\t\"raw\": \"oh no! \",\n\t\t\t\t\t\t\t\t\t\"data\": \"oh no! \"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\t\t\t\t\t\"end\": 134,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 126,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"theError\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 127,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 134,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"message\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\"end\": 140,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/binding/input.svelte",
    "content": "<script>\n\tlet name;\n</script>\n\n<input bind:value={name}>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/binding/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 31,\n\t\t\"end\": 56,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 29,\n\t\t\t\t\"end\": 31,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 31,\n\t\t\t\t\"end\": 56,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\"end\": 55,\n\t\t\t\t\t\t\"type\": \"Binding\",\n\t\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 48\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 50,\n\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 29,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 20,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": null\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/binding-shorthand/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<Widget bind:foo/>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/binding-shorthand/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 30,\n\t\t\"end\": 48,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 28,\n\t\t\t\t\"end\": 30,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\"start\": 30,\n\t\t\t\t\"end\": 48,\n\t\t\t\t\"name\": \"Widget\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\"type\": \"Binding\",\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 46\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"start\": 43,\n\t\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 28,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 19,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": null\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/comment/input.svelte",
    "content": "<!-- a comment -->"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/comment/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 18,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Comment\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 18,\n\t\t\t\t\"data\": \" a comment \",\n\t\t\t\t\"ignores\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/comment-with-ignores/input.svelte",
    "content": "<!-- svelte-ignore foo, bar -->\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/comment-with-ignores/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 31,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Comment\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 31,\n\t\t\t\t\"data\": \" svelte-ignore foo, bar \",\n\t\t\t\t\"ignores\": [\n\t\t\t\t\t\"foo\",\n\t\t\t\t\t\"bar\"\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/component-dynamic/input.svelte",
    "content": "<svelte:component this=\"{foo ? Foo : Bar}\"></svelte:component>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/component-dynamic/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 62,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\"name\": \"svelte:component\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 62,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"ConditionalExpression\",\n\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 40\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t},\n\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 34\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"Foo\"\n\t\t\t\t\t},\n\t\t\t\t\t\"alternate\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 37,\n\t\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 37\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 40\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"Bar\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/convert-entities/input.svelte",
    "content": "Hello &amp; World"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/convert-entities/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 17,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"raw\": \"Hello &amp; World\",\n\t\t\t\t\"data\": \"Hello & World\"\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/convert-entities-in-element/input.svelte",
    "content": "<p>Hello &amp; World</p>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/convert-entities-in-element/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 24,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 24,\n\t\t\t\t\"name\": \"p\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 3,\n\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\"raw\": \"Hello &amp; World\",\n\t\t\t\t\t\t\"data\": \"Hello & World\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/css/input.svelte",
    "content": "<div>foo</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/css/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 14,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 14,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 14,\n\t\t\t\t\"end\": 16,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"css\": {\n\t\t\"type\": \"Style\",\n\t\t\"start\": 16,\n\t\t\"end\": 56,\n\t\t\"attributes\": [],\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Selector\",\n\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\t\"end\": 28\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 33,\n\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 25,\n\t\t\t\t\"end\": 47\n\t\t\t}\n\t\t],\n\t\t\"content\": {\n\t\t\t\"start\": 23,\n\t\t\t\"end\": 48,\n\t\t\t\"styles\": \"\\n\\tdiv {\\n\\t\\tcolor: red;\\n\\t}\\n\",\n\t\t\t\"comment\": null\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/dynamic-element-string/input.svelte",
    "content": "<svelte:element this=\"div\"></svelte:element>\n<!-- prettier-ignore -->\n<svelte:element this='div'></svelte:element>\n<svelte:element this={\"div\"}></svelte:element>\n<!-- prettier-ignore -->\n<svelte:element this={'div'}></svelte:element>\n<svelte:element this={\"div\"} class=\"foo\"></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/dynamic-element-string/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 292,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 44,\n\t\t\t\t\"tag\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 44,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Comment\",\n\t\t\t\t\"start\": 45,\n\t\t\t\t\"end\": 69,\n\t\t\t\t\"data\": \" prettier-ignore \",\n\t\t\t\t\"ignores\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 69,\n\t\t\t\t\"end\": 70,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 70,\n\t\t\t\t\"end\": 114,\n\t\t\t\t\"tag\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 114,\n\t\t\t\t\"end\": 115,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 115,\n\t\t\t\t\"end\": 161,\n\t\t\t\t\"tag\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\"end\": 142,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": \"div\",\n\t\t\t\t\t\"raw\": \"\\\"div\\\"\"\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 161,\n\t\t\t\t\"end\": 162,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Comment\",\n\t\t\t\t\"start\": 162,\n\t\t\t\t\"end\": 186,\n\t\t\t\t\"data\": \" prettier-ignore \",\n\t\t\t\t\"ignores\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 186,\n\t\t\t\t\"end\": 187,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 187,\n\t\t\t\t\"end\": 233,\n\t\t\t\t\"tag\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 209,\n\t\t\t\t\t\"end\": 214,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": \"div\",\n\t\t\t\t\t\"raw\": \"'div'\"\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 233,\n\t\t\t\t\"end\": 234,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 234,\n\t\t\t\t\"end\": 292,\n\t\t\t\t\"tag\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 256,\n\t\t\t\t\t\"end\": 261,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": \"div\",\n\t\t\t\t\t\"raw\": \"\\\"div\\\"\"\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 263,\n\t\t\t\t\t\t\"end\": 274,\n\t\t\t\t\t\t\"name\": \"class\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 29,\n\t\t\t\t\t\t\t\t\"character\": 263\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 34,\n\t\t\t\t\t\t\t\t\"character\": 268\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 270,\n\t\t\t\t\t\t\t\t\"end\": 273,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/dynamic-element-variable/input.svelte",
    "content": "<svelte:element this={tag}></svelte:element>\n<svelte:element this={tag} class=\"foo\"></svelte:element>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/dynamic-element-variable/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 101,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 44,\n\t\t\t\t\"tag\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"tag\"\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 44,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"svelte:element\",\n\t\t\t\t\"start\": 45,\n\t\t\t\t\"end\": 101,\n\t\t\t\t\"tag\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 67,\n\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"tag\"\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 72,\n\t\t\t\t\t\t\"end\": 83,\n\t\t\t\t\t\t\"name\": \"class\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 27,\n\t\t\t\t\t\t\t\t\"character\": 72\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 32,\n\t\t\t\t\t\t\t\t\"character\": 77\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 79,\n\t\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/dynamic-import/input.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\tonMount(() => {\n\t\timport('./foo.js').then(foo => {\n\t\t\tconsole.log(foo.default);\n\t\t});\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/dynamic-import/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": null,\n\t\t\"end\": null,\n\t\t\"children\": []\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 146,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 137,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"ImportDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 34\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"specifiers\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ImportSpecifier\",\n\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"imported\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"onMount\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"local\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"onMount\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"source\": {\n\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\"start\": 34,\n\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 33\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": \"svelte\",\n\t\t\t\t\t\t\"raw\": \"'svelte'\"\n\t\t\t\t\t},\n\t\t\t\t\t\"attributes\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\"end\": 136,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\"column\": 4\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"onMount\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"arguments\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\t\"start\": 54,\n\t\t\t\t\t\t\t\t\"end\": 134,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\"end\": 134,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"body\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 64,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 131,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 64,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 4\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 64,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ImportExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 64,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"source\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"./foo.js\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'./foo.js'\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"options\": null\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"then\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"arguments\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 88,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 129,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"params\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 88,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 91,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 95,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 129,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 33\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"body\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 125,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 124,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 111,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 107,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"console\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 108,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 111,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"log\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"arguments\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 112,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 123,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 112,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 115,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 116,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 123,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"default\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block/input.svelte",
    "content": "{#each animals as animal}\n\t<p>{animal}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 50,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 50,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\t\t\t\"end\": 37,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"animal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"animal\",\n\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 24,\n\t\t\t\t\t\t\t\"character\": 24\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"animals\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-destructured/input.svelte",
    "content": "<script>\n\texport let animals;\n</script>\n\n{#each animals as [key, value, ...rest]}\n\t<p>{key}: {value}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-destructured/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 41,\n\t\t\"end\": 112,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 39,\n\t\t\t\t\"end\": 41,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 41,\n\t\t\t\t\"end\": 112,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\"end\": 104,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 86,\n\t\t\t\t\t\t\t\t\"end\": 91,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 87,\n\t\t\t\t\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"key\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 91,\n\t\t\t\t\t\t\t\t\"end\": 93,\n\t\t\t\t\t\t\t\t\"raw\": \": \",\n\t\t\t\t\t\t\t\t\"data\": \": \"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 93,\n\t\t\t\t\t\t\t\t\"end\": 100,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 94,\n\t\t\t\t\t\t\t\t\t\"end\": 99,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ArrayPattern\",\n\t\t\t\t\t\"start\": 59,\n\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 40\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"elements\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\"end\": 63,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"key\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RestElement\",\n\t\t\t\t\t\t\t\"start\": 72,\n\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 39\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"argument\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 35\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 39\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"rest\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\"end\": 55,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"animals\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 39,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 30,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"ExportNamedDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declaration\": {\n\t\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"animals\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"init\": null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t\t},\n\t\t\t\t\t\"specifiers\": [],\n\t\t\t\t\t\"source\": null,\n\t\t\t\t\t\"attributes\": []\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-else/input.svelte",
    "content": "{#each animals as animal}\n\t<p>{animal}</p>\n{:else}\n\t<p>no animals</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-else/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 77,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 77,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\t\t\t\"end\": 37,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"animal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"animal\",\n\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 24,\n\t\t\t\t\t\t\t\"character\": 24\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"animals\"\n\t\t\t\t},\n\t\t\t\t\"else\": {\n\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\"start\": 50,\n\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\"end\": 69,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 55,\n\t\t\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\t\t\"raw\": \"no animals\",\n\t\t\t\t\t\t\t\t\t\"data\": \"no animals\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-indexed/input.svelte",
    "content": "{#each animals as animal, i}\n\t<p>{i}: {animal}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-indexed/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 58,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 58,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 33,\n\t\t\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 34,\n\t\t\t\t\t\t\t\t\t\"end\": 35,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"i\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 36,\n\t\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\t\"raw\": \": \",\n\t\t\t\t\t\t\t\t\"data\": \": \"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"animal\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"animal\",\n\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\"character\": 18\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 24,\n\t\t\t\t\t\t\t\"character\": 24\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"animals\"\n\t\t\t\t},\n\t\t\t\t\"index\": \"i\"\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-keyed/input.svelte",
    "content": "{#each todos as todo (todo.id)}\n\t<p>{todo}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/each-block-keyed/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 54,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 54,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 33,\n\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 36,\n\t\t\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 37,\n\t\t\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"todo\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"todo\",\n\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 20,\n\t\t\t\t\t\t\t\"character\": 20\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"todos\"\n\t\t\t\t},\n\t\t\t\t\"key\": {\n\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"todo\"\n\t\t\t\t\t},\n\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"id\"\n\t\t\t\t\t},\n\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\"optional\": false\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-attribute/input.svelte",
    "content": "<span attr=\"foo\"></span>\n<span attr='bar'></span>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-attribute/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 49,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 24,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"name\": \"attr\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 24,\n\t\t\t\t\"end\": 25,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 25,\n\t\t\t\t\"end\": 49,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\"name\": \"attr\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 31\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 37,\n\t\t\t\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"bar\",\n\t\t\t\t\t\t\t\t\"data\": \"bar\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-attribute-empty-string/input.svelte",
    "content": "<span attr=\"\"></span>\n<span attr=''></span>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-attribute-empty-string/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 43,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 21,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\t\"name\": \"attr\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\"data\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 21,\n\t\t\t\t\"end\": 22,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 22,\n\t\t\t\t\"end\": 43,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 28,\n\t\t\t\t\t\t\"end\": 35,\n\t\t\t\t\t\t\"name\": \"attr\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 28\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 32\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 34,\n\t\t\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\"data\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-mustache/input.svelte",
    "content": "<h1>hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-mustache/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 22,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 22,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\"end\": 10,\n\t\t\t\t\t\t\"raw\": \"hello \",\n\t\t\t\t\t\t\"data\": \"hello \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\"raw\": \"!\",\n\t\t\t\t\t\t\"data\": \"!\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-text/input.svelte",
    "content": "<span>test</span>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/element-with-text/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 17,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 10,\n\t\t\t\t\t\t\"raw\": \"test\",\n\t\t\t\t\t\t\"data\": \"test\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/elements/input.svelte",
    "content": "<!doctype html>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/elements/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 15,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 15,\n\t\t\t\t\"name\": \"!doctype\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\"name\": \"html\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 14,\n\t\t\t\t\t\t\t\t\"character\": 14\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/event-handler/input.svelte",
    "content": "<button on:click=\"{() => visible = !visible}\">toggle</button>\n\n{#if visible}\n\t<p>hello!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/event-handler/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 97,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 61,\n\t\t\t\t\"name\": \"button\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\"type\": \"EventHandler\",\n\t\t\t\t\t\t\"name\": \"click\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 43\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\"expression\": true,\n\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentExpression\",\n\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 43\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\t\"end\": 32,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"visible\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"UnaryExpression\",\n\t\t\t\t\t\t\t\t\t\"start\": 35,\n\t\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 35\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 43\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"operator\": \"!\",\n\t\t\t\t\t\t\t\t\t\"prefix\": true,\n\t\t\t\t\t\t\t\t\t\"argument\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 36,\n\t\t\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 43\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"name\": \"visible\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\t\"end\": 52,\n\t\t\t\t\t\t\"raw\": \"toggle\",\n\t\t\t\t\t\t\"data\": \"toggle\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 61,\n\t\t\t\t\"end\": 63,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 63,\n\t\t\t\t\"end\": 97,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 68,\n\t\t\t\t\t\"end\": 75,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"visible\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 78,\n\t\t\t\t\t\t\"end\": 91,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 81,\n\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\"raw\": \"hello!\",\n\t\t\t\t\t\t\t\t\"data\": \"hello!\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/generic-snippets/input.svelte",
    "content": "<script lang=\"ts\">\n</script>\n\n{#snippet generic<T extends string>(val: T)}\n\t{val}\n{/snippet}\n\n{#snippet complex_generic<T extends { bracket: \"<\" } | \"<\" | Set<\"<>\">>(val: T)}\n\t{val}\n{/snippet}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/generic-snippets/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 30,\n\t\t\"end\": 192,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 28,\n\t\t\t\t\"end\": 30,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 30,\n\t\t\t\t\"end\": 92,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"generic\",\n\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 40\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 66,\n\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"val\",\n\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\"start\": 69,\n\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 39\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\"type\": \"TSTypeReference\",\n\t\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"typeName\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"T\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 76,\n\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"val\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"typeParams\": \"T extends string\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 92,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 192,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"complex_generic\",\n\t\t\t\t\t\"start\": 104,\n\t\t\t\t\t\"end\": 119,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 104\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\"column\": 25,\n\t\t\t\t\t\t\t\"character\": 119\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 166,\n\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 72\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"val\",\n\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\"start\": 169,\n\t\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\"column\": 75\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\"type\": \"TSTypeReference\",\n\t\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"typeName\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"T\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 176,\n\t\t\t\t\t\t\"end\": 181,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 177,\n\t\t\t\t\t\t\t\"end\": 180,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"val\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"typeParams\": \"T extends { bracket: \\\"<\\\" } | \\\"<\\\" | Set<\\\"<>\\\">\"\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 28,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 18,\n\t\t\t\"end\": 19,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/if-block/input.svelte",
    "content": "{#if foo}bar{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/if-block/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 17,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\t\"raw\": \"bar\",\n\t\t\t\t\t\t\"data\": \"bar\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/if-block-else/input.svelte",
    "content": "{#if foo}\n\t<p>foo</p>\n{:else}\n\t<p>not foo</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/if-block-else/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 51,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"else\": {\n\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\"start\": 34,\n\t\t\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\t\t\"raw\": \"not foo\",\n\t\t\t\t\t\t\t\t\t\"data\": \"not foo\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/if-block-elseif/input.svelte",
    "content": "{#if x > 10}\n\t<p>x is greater than 10</p>\n{:else if x < 5}\n\t<p>x is less than 5</p>\n{:else if x === 1}{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/if-block-elseif/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 107,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 107,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t\t},\n\t\t\t\t\t\"operator\": \">\",\n\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": 10,\n\t\t\t\t\t\t\"raw\": \"10\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\"end\": 37,\n\t\t\t\t\t\t\t\t\"raw\": \"x is greater than 10\",\n\t\t\t\t\t\t\t\t\"data\": \"x is greater than 10\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"else\": {\n\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\"end\": 102,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\t\"end\": 107,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\t\"end\": 57,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"operator\": \"<\",\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 56,\n\t\t\t\t\t\t\t\t\t\"end\": 57,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": 5,\n\t\t\t\t\t\t\t\t\t\"raw\": \"5\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\"end\": 83,\n\t\t\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"x is less than 5\",\n\t\t\t\t\t\t\t\t\t\t\t\"data\": \"x is less than 5\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"else\": {\n\t\t\t\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\t\t\t\"start\": 102,\n\t\t\t\t\t\t\t\t\"end\": 102,\n\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 102,\n\t\t\t\t\t\t\t\t\t\t\"end\": 107,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 94,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 101,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 94,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 95,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"operator\": \"===\",\n\t\t\t\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 101,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\t\t\t\t\t\"elseif\": true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"elseif\": true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/implicitly-closed-li/input.svelte",
    "content": "<ul>\n\t<li>a\n\t<li>b\n\t<li>c\n</ul>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/implicitly-closed-li/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 31,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 31,\n\t\t\t\t\"name\": \"ul\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\t\t\t\"raw\": \"a\\n\\t\",\n\t\t\t\t\t\t\t\t\"data\": \"a\\n\\t\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\t\t\"raw\": \"b\\n\\t\",\n\t\t\t\t\t\t\t\t\"data\": \"b\\n\\t\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"raw\": \"c\\n\",\n\t\t\t\t\t\t\t\t\"data\": \"c\\n\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/implicitly-closed-li-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/implicitly-closed-li-block/input.svelte",
    "content": "<ul>\n\t<li>a\n\t{#if true}\n\t\t<li>b\n\t{/if}\n\t<li>c\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/implicitly-closed-li-block/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"start\": 0,\n\t\t\"end\": 51,\n\t\t\"type\": \"Fragment\",\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"name\": \"ul\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"a\\n\\t\",\n\t\t\t\t\t\t\t\t\"data\": \"a\\n\\t\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"start\": 26,\n\t\t\t\t\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"b\\n\\t\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"data\": \"b\\n\\t\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"c\\n\",\n\t\t\t\t\t\t\t\t\"data\": \"c\\n\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/javascript-comments/input.svelte",
    "content": "<script>\n\t// a leading comment\n\tconst a = 1; // a trailing comment\n\tconst b = 2;\n\n\t/** a comment */\n\tfunction asd() {\n\t\tfoo; // trailing\n\t\t/* leading comment 1 */\n\t\t/* leading comment 2 */\n\t\t/* leading comment 3 */\n\t\tbar;\n\t\t/* trailing comment 1 */\n\t\t/* trailing comment 2 */\n\t\t/* trailing comment 3 */\n\t}\n\n\tconst array = [\n\t\t// leading comment 1\n\t\t// leading comment 2\n\t\t1, // trailing comment 1\n\t\t/* trailing comment 2 */\n\t];\n\n\tconst object = {\n\t\t// leading comment 1\n\t\t// leading comment 2\n\t\ta: 1, // trailing comment 1\n\t\t/* trailing comment 2 */\n\t};\n</script>\n\n<button\n\ton:click={// comment\n\t() => {\n\t\t/* another comment */\n\t\tfn(); // a trailing comment\n\t\t/* trailing block comment */\n\t}}\n>\n{/* leading block comment */ a}\n</button>\n{ // leading line comment\n\ta + b // trailing line comment\n\t/* trailing block comment */\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/javascript-comments/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 565,\n\t\t\"end\": 826,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 563,\n\t\t\t\t\"end\": 565,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 565,\n\t\t\t\t\"end\": 736,\n\t\t\t\t\"name\": \"button\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 574,\n\t\t\t\t\t\t\"end\": 692,\n\t\t\t\t\t\t\"type\": \"EventHandler\",\n\t\t\t\t\t\t\"name\": \"click\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 34,\n\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\"character\": 574\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 34,\n\t\t\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\t\t\"character\": 582\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\"start\": 596,\n\t\t\t\t\t\t\t\"end\": 691,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 35,\n\t\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 39,\n\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\"start\": 602,\n\t\t\t\t\t\t\t\t\"end\": 691,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 35,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 39,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"body\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 630,\n\t\t\t\t\t\t\t\t\t\t\"end\": 635,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 630,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 634,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 630,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 632,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 4\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"fn\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"arguments\": [],\n\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" another comment \",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 606,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 627\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" a trailing comment\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 636,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 657\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing block comment \",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 660,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 688\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\"value\": \" comment\",\n\t\t\t\t\t\t\t\t\t\"start\": 584,\n\t\t\t\t\t\t\t\t\t\"end\": 594\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 694,\n\t\t\t\t\t\t\"end\": 695,\n\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 695,\n\t\t\t\t\t\t\"end\": 726,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 724,\n\t\t\t\t\t\t\t\"end\": 725,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 41,\n\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 41,\n\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"a\",\n\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\"value\": \" leading block comment \",\n\t\t\t\t\t\t\t\t\t\"start\": 696,\n\t\t\t\t\t\t\t\t\t\"end\": 723\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 726,\n\t\t\t\t\t\t\"end\": 727,\n\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 736,\n\t\t\t\t\"end\": 737,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\"start\": 737,\n\t\t\t\t\"end\": 826,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\"start\": 764,\n\t\t\t\t\t\"end\": 769,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 764,\n\t\t\t\t\t\t\"end\": 765,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"a\"\n\t\t\t\t\t},\n\t\t\t\t\t\"operator\": \"+\",\n\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 768,\n\t\t\t\t\t\t\"end\": 769,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"b\"\n\t\t\t\t\t},\n\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\"value\": \" leading line comment\",\n\t\t\t\t\t\t\t\"start\": 739,\n\t\t\t\t\t\t\t\"end\": 762\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\"value\": \" trailing line comment\",\n\t\t\t\t\t\t\t\"start\": 770,\n\t\t\t\t\t\t\t\"end\": 794\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\"value\": \" trailing block comment \",\n\t\t\t\t\t\t\t\"start\": 796,\n\t\t\t\t\t\t\t\"end\": 824\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 563,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 554,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 31,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"a\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 42,\n\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"const\",\n\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\"value\": \" a leading comment\",\n\t\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\t\"end\": 30\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\"value\": \" a trailing comment\",\n\t\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\t\"end\": 66\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 68,\n\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 74,\n\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 74,\n\t\t\t\t\t\t\t\t\"end\": 75,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"b\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 78,\n\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": 2,\n\t\t\t\t\t\t\t\t\"raw\": \"2\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"FunctionDeclaration\",\n\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\"end\": 305,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 110,\n\t\t\t\t\t\t\"end\": 113,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"asd\"\n\t\t\t\t\t},\n\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\"start\": 116,\n\t\t\t\t\t\t\"end\": 305,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"body\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\t\t\t\"start\": 120,\n\t\t\t\t\t\t\t\t\"end\": 124,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 120,\n\t\t\t\t\t\t\t\t\t\"end\": 123,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 125,\n\t\t\t\t\t\t\t\t\t\t\"end\": 136\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\t\t\t\"start\": 217,\n\t\t\t\t\t\t\t\t\"end\": 221,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 217,\n\t\t\t\t\t\t\t\t\t\"end\": 220,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 1 \",\n\t\t\t\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\t\t\t\"end\": 162\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 2 \",\n\t\t\t\t\t\t\t\t\t\t\"start\": 165,\n\t\t\t\t\t\t\t\t\t\t\"end\": 188\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 3 \",\n\t\t\t\t\t\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\t\t\t\t\t\"end\": 214\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 1 \",\n\t\t\t\t\t\t\t\t\t\t\"start\": 224,\n\t\t\t\t\t\t\t\t\t\t\"end\": 248\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 2 \",\n\t\t\t\t\t\t\t\t\t\t\"start\": 251,\n\t\t\t\t\t\t\t\t\t\t\"end\": 275\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 3 \",\n\t\t\t\t\t\t\t\t\t\t\"start\": 278,\n\t\t\t\t\t\t\t\t\t\t\"end\": 302\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\"value\": \"* a comment \",\n\t\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\t\"end\": 99\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 308,\n\t\t\t\t\t\"end\": 427,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 314,\n\t\t\t\t\t\t\t\"end\": 426,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 314,\n\t\t\t\t\t\t\t\t\"end\": 319,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"array\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"ArrayExpression\",\n\t\t\t\t\t\t\t\t\"start\": 322,\n\t\t\t\t\t\t\t\t\"end\": 426,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"elements\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 372,\n\t\t\t\t\t\t\t\t\t\t\"end\": 373,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"1\",\n\t\t\t\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 326,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 346\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 2\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 349,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 369\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 375,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 396\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 2 \",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 399,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 423\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"const\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 430,\n\t\t\t\t\t\"end\": 553,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 30,\n\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 436,\n\t\t\t\t\t\t\t\"end\": 552,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 30,\n\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 436,\n\t\t\t\t\t\t\t\t\"end\": 442,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"object\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"ObjectExpression\",\n\t\t\t\t\t\t\t\t\"start\": 445,\n\t\t\t\t\t\t\t\t\"end\": 552,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 30,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 495,\n\t\t\t\t\t\t\t\t\t\t\"end\": 499,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\t\t\t\"shorthand\": false,\n\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 495,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 496,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"a\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 498,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 499,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"kind\": \"init\",\n\t\t\t\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 449,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 469\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" leading comment 2\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 472,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 492\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\"trailingComments\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 501,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 522\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \" trailing comment 2 \",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 525,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 549\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"const\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t},\n\t\"_comments\": [\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" a leading comment\",\n\t\t\t\"start\": 10,\n\t\t\t\"end\": 30,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 1\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 21\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" a trailing comment\",\n\t\t\t\"start\": 45,\n\t\t\t\"end\": 66,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 14\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 35\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \"* a comment \",\n\t\t\t\"start\": 83,\n\t\t\t\"end\": 99,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\"column\": 1\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\"column\": 17\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" trailing\",\n\t\t\t\"start\": 125,\n\t\t\t\"end\": 136,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\"column\": 7\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\"column\": 18\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" leading comment 1 \",\n\t\t\t\"start\": 139,\n\t\t\t\"end\": 162,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\"column\": 25\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" leading comment 2 \",\n\t\t\t\"start\": 165,\n\t\t\t\"end\": 188,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\"column\": 25\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" leading comment 3 \",\n\t\t\t\"start\": 191,\n\t\t\t\"end\": 214,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 11,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 11,\n\t\t\t\t\t\"column\": 25\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing comment 1 \",\n\t\t\t\"start\": 224,\n\t\t\t\"end\": 248,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\"column\": 26\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing comment 2 \",\n\t\t\t\"start\": 251,\n\t\t\t\"end\": 275,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\"column\": 26\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing comment 3 \",\n\t\t\t\"start\": 278,\n\t\t\t\"end\": 302,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\"column\": 26\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" leading comment 1\",\n\t\t\t\"start\": 326,\n\t\t\t\"end\": 346,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\"column\": 22\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" leading comment 2\",\n\t\t\t\"start\": 349,\n\t\t\t\"end\": 369,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\"column\": 22\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" trailing comment 1\",\n\t\t\t\"start\": 375,\n\t\t\t\"end\": 396,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\"column\": 5\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\"column\": 26\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing comment 2 \",\n\t\t\t\"start\": 399,\n\t\t\t\"end\": 423,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\"column\": 26\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" leading comment 1\",\n\t\t\t\"start\": 449,\n\t\t\t\"end\": 469,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\"column\": 22\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" leading comment 2\",\n\t\t\t\"start\": 472,\n\t\t\t\"end\": 492,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 27,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 27,\n\t\t\t\t\t\"column\": 22\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" trailing comment 1\",\n\t\t\t\"start\": 501,\n\t\t\t\"end\": 522,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\"column\": 8\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 28,\n\t\t\t\t\t\"column\": 29\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing comment 2 \",\n\t\t\t\"start\": 525,\n\t\t\t\"end\": 549,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 29,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 29,\n\t\t\t\t\t\"column\": 26\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" comment\",\n\t\t\t\"start\": 584,\n\t\t\t\"end\": 594,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 34,\n\t\t\t\t\t\"column\": 11\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 34,\n\t\t\t\t\t\"column\": 21\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" another comment \",\n\t\t\t\"start\": 606,\n\t\t\t\"end\": 627,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 36,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 36,\n\t\t\t\t\t\"column\": 23\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" a trailing comment\",\n\t\t\t\"start\": 636,\n\t\t\t\"end\": 657,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\"column\": 8\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 37,\n\t\t\t\t\t\"column\": 29\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing block comment \",\n\t\t\t\"start\": 660,\n\t\t\t\"end\": 688,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 38,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 38,\n\t\t\t\t\t\"column\": 30\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" leading block comment \",\n\t\t\t\"start\": 696,\n\t\t\t\"end\": 723,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 41,\n\t\t\t\t\t\"column\": 1\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 41,\n\t\t\t\t\t\"column\": 28\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" leading line comment\",\n\t\t\t\"start\": 739,\n\t\t\t\"end\": 762,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 43,\n\t\t\t\t\t\"column\": 2\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 43,\n\t\t\t\t\t\"column\": 25\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" trailing line comment\",\n\t\t\t\"start\": 770,\n\t\t\t\"end\": 794,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\"column\": 7\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 44,\n\t\t\t\t\t\"column\": 31\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"value\": \" trailing block comment \",\n\t\t\t\"start\": 796,\n\t\t\t\"end\": 824,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 45,\n\t\t\t\t\t\"column\": 1\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 45,\n\t\t\t\t\t\"column\": 29\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-invalid-block/input.svelte",
    "content": "{#if }\n{:else if }\n{:else }\n{/if}\n\n{#each }\n{/each}\n\n{#snippet }\n{/snippet}\n\n{#snippet foo}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-invalid-block/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 102,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 5,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"children\": [],\n\t\t\t\t\"else\": {\n\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\t\t\"else\": {\n\t\t\t\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"elseif\": true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 33,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"children\": [],\n\t\t\t\t\"context\": null,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 42,\n\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 51,\n\t\t\t\t\"end\": 53,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 53,\n\t\t\t\t\"end\": 75,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\"end\": 63,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 63\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 63\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 75,\n\t\t\t\t\"end\": 77,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 77,\n\t\t\t\t\"end\": 102,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\"start\": 87,\n\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 87\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\"column\": 13,\n\t\t\t\t\t\t\t\"character\": 90\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-invalid-expression/input.svelte",
    "content": "<div {}></div>\n<div foo={}></div>\n\n<div foo={a.}></div>\n<div foo={'hi}'.}></div>\n<Component onclick={() => x.} />\n\n<input bind:value={a.} />\n\nasd{a.}asd\n{foo[bar.]}\n\n{#if x.}{/if}\n\n{#each array as item (item.)}{/each}\n\n{#each obj. as item}{/each}\n\n{#await x.}{/await}\n\n{#await x. then y}{/await}\n\n{#await x. catch y}{/await}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-invalid-expression/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 324,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 14,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"AttributeShorthand\",\n\t\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 14,\n\t\t\t\t\"end\": 15,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 15,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 20\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 23\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 33,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 55,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 40\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 43\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 55,\n\t\t\t\t\"end\": 56,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 56,\n\t\t\t\t\"end\": 80,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 61,\n\t\t\t\t\t\t\"end\": 73,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 61\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 64\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\t\t\"end\": 73,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 66,\n\t\t\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 80,\n\t\t\t\t\"end\": 81,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\"start\": 81,\n\t\t\t\t\"end\": 113,\n\t\t\t\t\"name\": \"Component\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\"name\": \"onclick\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 11,\n\t\t\t\t\t\t\t\t\"character\": 92\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 99\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\t\t\t\t\"end\": 109,\n\t\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 113,\n\t\t\t\t\"end\": 115,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 115,\n\t\t\t\t\"end\": 140,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 122,\n\t\t\t\t\t\t\"end\": 137,\n\t\t\t\t\t\t\"type\": \"Binding\",\n\t\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 122\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 132\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 134,\n\t\t\t\t\t\t\t\"end\": 136,\n\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 140,\n\t\t\t\t\"end\": 145,\n\t\t\t\t\"raw\": \"\\n\\nasd\",\n\t\t\t\t\"data\": \"\\n\\nasd\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\"start\": 145,\n\t\t\t\t\"end\": 149,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 146,\n\t\t\t\t\t\"end\": 148,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 149,\n\t\t\t\t\"end\": 153,\n\t\t\t\t\"raw\": \"asd\\n\",\n\t\t\t\t\"data\": \"asd\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\"start\": 153,\n\t\t\t\t\"end\": 164,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 154,\n\t\t\t\t\t\"end\": 163,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 164,\n\t\t\t\t\"end\": 166,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 166,\n\t\t\t\t\"end\": 179,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\"end\": 173,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"children\": []\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 179,\n\t\t\t\t\"end\": 181,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 181,\n\t\t\t\t\"end\": 217,\n\t\t\t\t\"children\": [],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"item\",\n\t\t\t\t\t\"start\": 197,\n\t\t\t\t\t\"end\": 201,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 197\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 20,\n\t\t\t\t\t\t\t\"character\": 201\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 188,\n\t\t\t\t\t\"end\": 193,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"array\"\n\t\t\t\t},\n\t\t\t\t\"key\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 203,\n\t\t\t\t\t\"end\": 208,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 217,\n\t\t\t\t\"end\": 219,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 219,\n\t\t\t\t\"end\": 246,\n\t\t\t\t\"children\": [],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"item\",\n\t\t\t\t\t\"start\": 234,\n\t\t\t\t\t\"end\": 238,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\t\t\"column\": 15,\n\t\t\t\t\t\t\t\"character\": 234\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\t\t\"column\": 19,\n\t\t\t\t\t\t\t\"character\": 238\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 226,\n\t\t\t\t\t\"end\": 230\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 246,\n\t\t\t\t\"end\": 248,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 248,\n\t\t\t\t\"end\": 267,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 256,\n\t\t\t\t\t\"end\": 258,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"value\": null,\n\t\t\t\t\"error\": null,\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": 259,\n\t\t\t\t\t\"end\": 259,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 267,\n\t\t\t\t\"end\": 269,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 269,\n\t\t\t\t\"end\": 295,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 277,\n\t\t\t\t\t\"end\": 279\n\t\t\t\t},\n\t\t\t\t\"value\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"y\",\n\t\t\t\t\t\"start\": 285,\n\t\t\t\t\t\"end\": 286,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 285\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 286\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"error\": null,\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": 287,\n\t\t\t\t\t\"end\": 267,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 295,\n\t\t\t\t\"end\": 297,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 297,\n\t\t\t\t\"end\": 324,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 305,\n\t\t\t\t\t\"end\": 307\n\t\t\t\t},\n\t\t\t\t\"value\": null,\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"y\",\n\t\t\t\t\t\"start\": 314,\n\t\t\t\t\t\"end\": 315,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 314\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\"character\": 315\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": 316,\n\t\t\t\t\t\"end\": 295,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-unclosed-block/input.svelte",
    "content": "<div>\n\t{#if foo}\n</div>\n\n<Comp>\n\t{#key bar}\n</Comp>\n\n<div>\n\t{#if foo}\n\t\t{#if bar}\n\t{/if}\n</div>\n\n{#if foo}\n\t{#key bar}\n{/if}\n\n{#each x as y}\n<p>hi</p>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-unclosed-block/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 150,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 23,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 23,\n\t\t\t\t\"end\": 25,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\"start\": 25,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"KeyBlock\",\n\t\t\t\t\t\t\"start\": 33,\n\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 51,\n\t\t\t\t\"end\": 53,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 53,\n\t\t\t\t\"end\": 95,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\"end\": 60,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\t\"end\": 68,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\t\"start\": 72,\n\t\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 11,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 11,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 95,\n\t\t\t\t\"end\": 97,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 97,\n\t\t\t\t\"end\": 124,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 102,\n\t\t\t\t\t\"end\": 105,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"KeyBlock\",\n\t\t\t\t\t\t\"start\": 108,\n\t\t\t\t\t\t\"end\": 119,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 114,\n\t\t\t\t\t\t\t\"end\": 117,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 124,\n\t\t\t\t\"end\": 126,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 126,\n\t\t\t\t\"end\": 150,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 141,\n\t\t\t\t\t\t\"end\": 150,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 144,\n\t\t\t\t\t\t\t\t\"end\": 146,\n\t\t\t\t\t\t\t\t\"raw\": \"hi\",\n\t\t\t\t\t\t\t\t\"data\": \"hi\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"y\",\n\t\t\t\t\t\"start\": 138,\n\t\t\t\t\t\"end\": 139,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\t\"character\": 138\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\t\t\"column\": 13,\n\t\t\t\t\t\t\t\"character\": 139\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 133,\n\t\t\t\t\t\"end\": 134,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-unclosed-open-tag/input.svelte",
    "content": "<div>\n\t<Comp foo={bar}\n</div>\n\n<div>\n\t<span foo={bar}\n</div>\n\n{#if foo}\n\t<Comp foo={bar}\n{/if}\n\n{#if foo}\n\t<Comp foo={bar}\n\t{#if bar}\n\t\t{bar}\n\t{/if}\n{/if}\n\n<div foo={bar}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-unclosed-open-tag/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 170,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 29,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\"character\": 13\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 29,\n\t\t\t\t\"end\": 31,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 31,\n\t\t\t\t\"end\": 60,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 36,\n\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\"name\": \"span\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\"character\": 44\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 49,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 52,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 60,\n\t\t\t\t\"end\": 62,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 62,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 67,\n\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 73,\n\t\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 79,\n\t\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\"character\": 79\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\"character\": 82\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 84,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 96,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 96,\n\t\t\t\t\"end\": 154,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\"end\": 104,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 107,\n\t\t\t\t\t\t\"end\": 124,\n\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\"character\": 113\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\"character\": 116\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 121,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\"start\": 124,\n\t\t\t\t\t\t\"end\": 148,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 129,\n\t\t\t\t\t\t\t\"end\": 132,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 136,\n\t\t\t\t\t\t\t\t\"end\": 141,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\t\t\t\t\"end\": 140,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 154,\n\t\t\t\t\"end\": 156,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 156,\n\t\t\t\t\"end\": 170,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 161,\n\t\t\t\t\t\t\"end\": 170,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 161\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 164\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 165,\n\t\t\t\t\t\t\t\t\"end\": 170,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 166,\n\t\t\t\t\t\t\t\t\t\"end\": 169,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-unclosed-tag/input.svelte",
    "content": "<div>\n\t<Comp>\n</div>\n\n<div>\n\t<Comp foo={bar}\n</div>\n\n<div>\n\t<span\n</div>\n\n<div>\n\t<Comp.\n</div>\n\n<div>\n\t<comp.\n</div>\n\n{#if foo}\n\t<div>\n{/if}\n\n{#if foo}\n\t<Comp foo={bar}\n{/if}\n\n<div>\n<p>hi</p>\n\n<open-ended\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/loose-unclosed-tag/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 204,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 20,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 20,\n\t\t\t\t\"end\": 22,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 22,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 35,\n\t\t\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 51,\n\t\t\t\t\"end\": 53,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 53,\n\t\t\t\t\"end\": 72,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\"end\": 60,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\"name\": \"span\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 72,\n\t\t\t\t\"end\": 74,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 74,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 79,\n\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 81,\n\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\"name\": \"Comp.\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 96,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 96,\n\t\t\t\t\"end\": 116,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\t\"end\": 103,\n\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 103,\n\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\"name\": \"comp.\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 116,\n\t\t\t\t\"end\": 118,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 118,\n\t\t\t\t\"end\": 140,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 123,\n\t\t\t\t\t\"end\": 126,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 129,\n\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 134,\n\t\t\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 140,\n\t\t\t\t\"end\": 142,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 142,\n\t\t\t\t\"end\": 174,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 147,\n\t\t\t\t\t\"end\": 150,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"start\": 153,\n\t\t\t\t\t\t\"end\": 169,\n\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 159,\n\t\t\t\t\t\t\t\t\"end\": 168,\n\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\"character\": 159\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\"character\": 162\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 163,\n\t\t\t\t\t\t\t\t\t\t\"end\": 168,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 164,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 167,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 174,\n\t\t\t\t\"end\": 176,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 176,\n\t\t\t\t\"end\": 204,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 181,\n\t\t\t\t\t\t\"end\": 182,\n\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 182,\n\t\t\t\t\t\t\"end\": 191,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 185,\n\t\t\t\t\t\t\t\t\"end\": 187,\n\t\t\t\t\t\t\t\t\"raw\": \"hi\",\n\t\t\t\t\t\t\t\t\"data\": \"hi\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\t\"end\": 193,\n\t\t\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 193,\n\t\t\t\t\t\t\"end\": 204,\n\t\t\t\t\t\t\"name\": \"open-ended\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/nbsp/input.svelte",
    "content": "<span>&nbsp;</span>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/nbsp/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 19,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 19,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\t\"raw\": \"&nbsp;\",\n\t\t\t\t\t\t\"data\": \" \"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/no-error-if-before-closing/input.svelte",
    "content": "{#if true}\n\t<input>\n{:else}\n{/if}\n\n{#if true}\n\t<br>\n{:else}\n{/if}\n\n{#await true}\n\t<input>\n{:then f}\n{/await}\n\n{#await true}\n\t<br>\n{:then f}\n{/await}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/no-error-if-before-closing/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 148,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 9,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\t\"name\": \"input\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"else\": {\n\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\"children\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 33,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 65,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\"end\": 51,\n\t\t\t\t\t\t\"name\": \"br\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"else\": {\n\t\t\t\t\t\"type\": \"ElseBlock\",\n\t\t\t\t\t\"start\": 59,\n\t\t\t\t\t\"end\": 60,\n\t\t\t\t\t\"children\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 65,\n\t\t\t\t\"end\": 67,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 67,\n\t\t\t\t\"end\": 108,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 11,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 11,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t},\n\t\t\t\t\"value\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"f\",\n\t\t\t\t\t\"start\": 97,\n\t\t\t\t\t\"end\": 98,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\"character\": 97\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\"character\": 98\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"error\": null,\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 82,\n\t\t\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\t\t\"name\": \"input\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 89,\n\t\t\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": 90,\n\t\t\t\t\t\"end\": 100,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 99,\n\t\t\t\t\t\t\t\"end\": 100,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 108,\n\t\t\t\t\"end\": 110,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 110,\n\t\t\t\t\"end\": 148,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t},\n\t\t\t\t\"value\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"f\",\n\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\"end\": 138,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\"character\": 137\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\"character\": 138\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"error\": null,\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"PendingBlock\",\n\t\t\t\t\t\"start\": 123,\n\t\t\t\t\t\"end\": 130,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 123,\n\t\t\t\t\t\t\t\"end\": 125,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\t\"start\": 125,\n\t\t\t\t\t\t\t\"end\": 129,\n\t\t\t\t\t\t\t\"name\": \"br\",\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 129,\n\t\t\t\t\t\t\t\"end\": 130,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"ThenBlock\",\n\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\"end\": 140,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\"end\": 140,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"skip\": false\n\t\t\t\t},\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"CatchBlock\",\n\t\t\t\t\t\"start\": null,\n\t\t\t\t\t\"end\": null,\n\t\t\t\t\t\"children\": [],\n\t\t\t\t\t\"skip\": true\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/raw-mustaches/input.svelte",
    "content": "<p> {@html raw1} {@html raw2} </p>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/raw-mustaches/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 34,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 34,\n\t\t\t\t\"name\": \"p\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 3,\n\t\t\t\t\t\t\"end\": 4,\n\t\t\t\t\t\t\"raw\": \" \",\n\t\t\t\t\t\t\"data\": \" \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"RawMustacheTag\",\n\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"raw1\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\"raw\": \" \",\n\t\t\t\t\t\t\"data\": \" \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"RawMustacheTag\",\n\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"raw2\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\"raw\": \" \",\n\t\t\t\t\t\t\"data\": \" \"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/refs/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<canvas bind:this={foo}></canvas>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/refs/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 30,\n\t\t\"end\": 63,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 28,\n\t\t\t\t\"end\": 30,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 30,\n\t\t\t\t\"end\": 63,\n\t\t\t\t\"name\": \"canvas\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\"type\": \"Binding\",\n\t\t\t\t\t\t\"name\": \"this\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 49,\n\t\t\t\t\t\t\t\"end\": 52,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 28,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 19,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": null\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n</script>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 41,\n\t\t\"end\": 63,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 39,\n\t\t\t\t\"end\": 41,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 41,\n\t\t\t\t\"end\": 63,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\"end\": 51,\n\t\t\t\t\t\t\"raw\": \"Hello \",\n\t\t\t\t\t\t\"data\": \"Hello \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 51,\n\t\t\t\t\t\t\"end\": 57,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\"end\": 56,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 57,\n\t\t\t\t\t\t\"end\": 58,\n\t\t\t\t\t\t\"raw\": \"!\",\n\t\t\t\t\t\t\"data\": \"!\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 39,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 30,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": \"world\",\n\t\t\t\t\t\t\t\t\"raw\": \"'world'\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script-attribute-with-curly-braces/input.svelte",
    "content": "<script generics=\"T extends { yes: boolean }\">\n\tlet name = 'world';\n</script>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script-attribute-with-curly-braces/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 79,\n\t\t\"end\": 101,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 77,\n\t\t\t\t\"end\": 79,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 79,\n\t\t\t\t\"end\": 101,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\t\"raw\": \"Hello \",\n\t\t\t\t\t\t\"data\": \"Hello \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 89,\n\t\t\t\t\t\t\"end\": 95,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 90,\n\t\t\t\t\t\t\t\"end\": 94,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 95,\n\t\t\t\t\t\t\"end\": 96,\n\t\t\t\t\t\t\"raw\": \"!\",\n\t\t\t\t\t\t\"data\": \"!\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 77,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 46,\n\t\t\t\"end\": 68,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\"end\": 67,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\t\"end\": 56,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 59,\n\t\t\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": \"world\",\n\t\t\t\t\t\t\t\t\"raw\": \"'world'\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script-comment-only/input.svelte",
    "content": "<script>\n\t// TODO write some code\n</script>\n\n<div></div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script-comment-only/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 45,\n\t\t\"end\": 56,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 43,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 45,\n\t\t\t\t\"end\": 56,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 43,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 34,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\",\n\t\t\t\"trailingComments\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\"value\": \" TODO write some code\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 33\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"_comments\": [\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"value\": \" TODO write some code\",\n\t\t\t\"start\": 10,\n\t\t\t\"end\": 33,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 1\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 24\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script-context-module-unquoted/input.svelte",
    "content": "<script context=module>\n\texport const foo = 'bar';\n</script>\n\n<script>\n\tfoo;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/script-context-module-unquoted/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 62,\n\t\t\"end\": 60,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 60,\n\t\t\t\t\"end\": 62,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 62,\n\t\t\"end\": 86,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 70,\n\t\t\t\"end\": 77,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\"start\": 72,\n\t\t\t\t\t\"end\": 76,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 72,\n\t\t\t\t\t\t\"end\": 75,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 4\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t},\n\t\"module\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 60,\n\t\t\"context\": \"module\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 23,\n\t\t\t\"end\": 51,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"ExportNamedDeclaration\",\n\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declaration\": {\n\t\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\"end\": 49,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\t\t\"end\": 49,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"bar\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"'bar'\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"kind\": \"const\"\n\t\t\t\t\t},\n\t\t\t\t\t\"specifiers\": [],\n\t\t\t\t\t\"source\": null,\n\t\t\t\t\t\"attributes\": []\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/self-closing-element/input.svelte",
    "content": "<div/>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/self-closing-element/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 6,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 6,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/self-reference/input.svelte",
    "content": "{#if depth > 1}\n\t<svelte:self depth='{depth - 1}'/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/self-reference/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 57,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 57,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 10,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"depth\"\n\t\t\t\t\t},\n\t\t\t\t\t\"operator\": \">\",\n\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\t\t\"name\": \"svelte:self\",\n\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\"end\": 51,\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\t\"end\": 49,\n\t\t\t\t\t\t\t\t\"name\": \"depth\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 14,\n\t\t\t\t\t\t\t\t\t\t\"character\": 30\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19,\n\t\t\t\t\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 37,\n\t\t\t\t\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"depth\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"operator\": \"-\",\n\t\t\t\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/slotted-element/input.svelte",
    "content": "<Component><div slot='foo'></div></Component>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/slotted-element/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 45,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"InlineComponent\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"name\": \"Component\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"name\": \"slot\",\n\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 20,\n\t\t\t\t\t\t\t\t\t\t\"character\": 20\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"children\": []\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/space-between-mustaches/input.svelte",
    "content": "<p> {a} {b} : {c} : </p>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/space-between-mustaches/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 24,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 24,\n\t\t\t\t\"name\": \"p\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 3,\n\t\t\t\t\t\t\"end\": 4,\n\t\t\t\t\t\t\"raw\": \" \",\n\t\t\t\t\t\t\"data\": \" \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"a\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\t\"raw\": \" \",\n\t\t\t\t\t\t\"data\": \" \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 8,\n\t\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\t\"end\": 10,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"b\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\"raw\": \" : \",\n\t\t\t\t\t\t\"data\": \" : \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 15,\n\t\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"c\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\"raw\": \" : \",\n\t\t\t\t\t\t\"data\": \" : \"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/spread/input.svelte",
    "content": "<div {...props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/spread/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 22,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 22,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Spread\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"props\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": []\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/style-inside-head/input.svelte",
    "content": "<svelte:head><style></style></svelte:head>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/style-inside-head/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 42,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Head\",\n\t\t\t\t\"name\": \"svelte:head\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 42,\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\"name\": \"style\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\t\t\"end\": 20,\n\t\t\t\t\t\t\t\t\"data\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/textarea-children/input.svelte",
    "content": "<textarea>\n\t<p>not actually an element. {foo}</p>\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/textarea-children/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 61,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 61,\n\t\t\t\t\"name\": \"textarea\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"\\n\\t<p>not actually an element. \",\n\t\t\t\t\t\t\"data\": \"\\n\\t<p>not actually an element. \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 41,\n\t\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 33\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"</p>\\n\",\n\t\t\t\t\t\t\"data\": \"</p>\\n\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/textarea-end-tag/input.svelte",
    "content": "<textarea>\n\t<p>not actu </textar ally an element. {foo}</p>\n</textare\n\n\n> </textaread >asdf</textarea\n\n\n</textarea\n\n>\n\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/textarea-end-tag/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 117,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 117,\n\t\t\t\t\"name\": \"textarea\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"\\n\\t<p>not actu </textar ally an element. \",\n\t\t\t\t\t\t\"data\": \"\\n\\t<p>not actu </textar ally an element. \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 50,\n\t\t\t\t\t\t\"end\": 55,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 51,\n\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 40\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 43\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 55,\n\t\t\t\t\t\t\"end\": 91,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"</p>\\n</textare\\n\\n\\n> </textaread >asdf\",\n\t\t\t\t\t\t\"data\": \"</p>\\n</textare\\n\\n\\n> </textaread >asdf\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/transition-intro/input.svelte",
    "content": "<div in:style=\"{{opacity: 0}}\">fades in</div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/transition-intro/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 45,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\"type\": \"Transition\",\n\t\t\t\t\t\t\"name\": \"style\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 13,\n\t\t\t\t\t\t\t\t\"character\": 13\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"ObjectExpression\",\n\t\t\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\t\"end\": 27,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\t\t\"shorthand\": false,\n\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"name\": \"opacity\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 26,\n\t\t\t\t\t\t\t\t\t\t\"end\": 27,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"value\": 0,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"0\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"intro\": true,\n\t\t\t\t\t\t\"outro\": false\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\"end\": 39,\n\t\t\t\t\t\t\"raw\": \"fades in\",\n\t\t\t\t\t\t\"data\": \"fades in\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/transition-intro-no-params/input.svelte",
    "content": "<div in:fade>fades in</div>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/transition-intro-no-params/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 27,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 27,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\t\"type\": \"Transition\",\n\t\t\t\t\t\t\"name\": \"fade\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": null,\n\t\t\t\t\t\t\"modifiers\": [],\n\t\t\t\t\t\t\"intro\": true,\n\t\t\t\t\t\t\"outro\": false\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\"raw\": \"fades in\",\n\t\t\t\t\t\t\"data\": \"fades in\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/unusual-identifier/input.svelte",
    "content": "{#each things as 𐊧}\n\t<p>{𐊧}</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/unusual-identifier/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 41,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 41,\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 26,\n\t\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"𐊧\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"𐊧\",\n\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 17\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 19,\n\t\t\t\t\t\t\t\"character\": 19\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"things\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-after-script-tag/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n</script     \n\n\n\n\n>\n\n<h1>Hello {name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-after-script-tag/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 51,\n\t\t\"end\": 73,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 49,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 51,\n\t\t\t\t\"end\": 73,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 55,\n\t\t\t\t\t\t\"end\": 61,\n\t\t\t\t\t\t\"raw\": \"Hello \",\n\t\t\t\t\t\t\"data\": \"Hello \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\"start\": 61,\n\t\t\t\t\t\t\"end\": 67,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 62,\n\t\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 67,\n\t\t\t\t\t\t\"end\": 68,\n\t\t\t\t\t\t\"raw\": \"!\",\n\t\t\t\t\t\t\"data\": \"!\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 49,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 30,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\"column\": 1\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": \"world\",\n\t\t\t\t\t\t\t\t\"raw\": \"'world'\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-after-style-tag/input.svelte",
    "content": "<div>foo</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style     \n\n\n\n\n>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-after-style-tag/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 14,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 14,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 14,\n\t\t\t\t\"end\": 16,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"css\": {\n\t\t\"type\": \"Style\",\n\t\t\"start\": 16,\n\t\t\"end\": 66,\n\t\t\"attributes\": [],\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Selector\",\n\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\t\"end\": 28\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 33,\n\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 25,\n\t\t\t\t\"end\": 47\n\t\t\t}\n\t\t],\n\t\t\"content\": {\n\t\t\t\"start\": 23,\n\t\t\t\"end\": 48,\n\t\t\t\"styles\": \"\\n\\tdiv {\\n\\t\\tcolor: red;\\n\\t}\\n\",\n\t\t\t\"comment\": null\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-leading-trailing/input.svelte",
    "content": "\n\n\t\t\t\t<p>just chillin' over here</p>"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-leading-trailing/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 6,\n\t\t\"end\": 36,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 6,\n\t\t\t\t\"raw\": \"\\n\\n\\t\\t\\t\\t\",\n\t\t\t\t\"data\": \"\\n\\n\\t\\t\\t\\t\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 6,\n\t\t\t\t\"end\": 36,\n\t\t\t\t\"name\": \"p\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\"end\": 32,\n\t\t\t\t\t\t\"raw\": \"just chillin' over here\",\n\t\t\t\t\t\t\"data\": \"just chillin' over here\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-normal/input.svelte",
    "content": "<h1>Hello <strong>{name}! </strong><span>How are you?</span></h1>\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/samples/whitespace-normal/output.json",
    "content": "{\n\t\"html\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"start\": 0,\n\t\t\"end\": 65,\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 65,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"children\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\"end\": 10,\n\t\t\t\t\t\t\"raw\": \"Hello \",\n\t\t\t\t\t\t\"data\": \"Hello \"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 35,\n\t\t\t\t\t\t\"name\": \"strong\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"MustacheTag\",\n\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"raw\": \"! \",\n\t\t\t\t\t\t\t\t\"data\": \"! \"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Element\",\n\t\t\t\t\t\t\"start\": 35,\n\t\t\t\t\t\t\"end\": 60,\n\t\t\t\t\t\t\"name\": \"span\",\n\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"start\": 41,\n\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\"raw\": \"How are you?\",\n\t\t\t\t\t\t\t\t\"data\": \"How are you?\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-legacy/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { parse } from 'svelte/compiler';\nimport { try_load_json } from '../helpers.js';\nimport { suite, type BaseTest } from '../suite.js';\n\ninterface ParserTest extends BaseTest {}\n\nconst { test, run } = suite<ParserTest>(async (config, cwd) => {\n\tconst input = fs\n\t\t.readFileSync(`${cwd}/input.svelte`, 'utf-8')\n\t\t.replace(/\\s+$/, '')\n\t\t.replace(/\\r/g, '');\n\n\tconst actual = JSON.parse(\n\t\tJSON.stringify(parse(input, { loose: cwd.split('/').pop()!.startsWith('loose-') }))\n\t);\n\n\t// run `UPDATE_SNAPSHOTS=true pnpm test parser` to update parser tests\n\tif (process.env.UPDATE_SNAPSHOTS) {\n\t\tfs.writeFileSync(`${cwd}/output.json`, JSON.stringify(actual, null, '\\t') + '\\n');\n\t} else {\n\t\tfs.writeFileSync(`${cwd}/_actual.json`, JSON.stringify(actual, null, '\\t'));\n\n\t\tconst expected = try_load_json(`${cwd}/output.json`);\n\t\tassert.deepEqual(actual, expected);\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/attachments/input.svelte",
    "content": "<div {@attach (node) => {}} {@attach (node) => {}}></div>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/attachments/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 57,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 57,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 4\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"AttachTag\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 27,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\"params\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 15,\n\t\t\t\t\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"node\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"body\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"AttachTag\",\n\t\t\t\t\t\t\"start\": 28,\n\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\"start\": 37,\n\t\t\t\t\t\t\t\"end\": 49,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 37\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 49\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\"params\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 38\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"node\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\t\t\"end\": 49,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 47\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 49\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"body\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/comment-before-function-binding/input.svelte",
    "content": "<script>\n\tlet value = '';\n</script>\n\n<input bind:value={\n\t/** ( */\n\t() => value,\n\t(v) => value = v.toLowerCase()\n}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/comment-before-function-binding/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 117,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 37,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 37,\n\t\t\t\t\"end\": 117,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\"character\": 43\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\"end\": 114,\n\t\t\t\t\t\t\"type\": \"BindDirective\",\n\t\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 44\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 54\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"SequenceExpression\",\n\t\t\t\t\t\t\t\"start\": 68,\n\t\t\t\t\t\t\t\"end\": 112,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"expressions\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\t\t\"start\": 68,\n\t\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\t\t\"expression\": true,\n\t\t\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 74,\n\t\t\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\t\t\"start\": 82,\n\t\t\t\t\t\t\t\t\t\"end\": 112,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\t\t\"expression\": true,\n\t\t\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\t\t\"params\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 84,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"v\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"AssignmentExpression\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 89,\n\t\t\t\t\t\t\t\t\t\t\"end\": 112,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 89,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 94,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 97,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 112,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"MemberExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 97,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"object\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 97,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 98,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"v\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"property\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 99,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"toLowerCase\"\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"arguments\": [],\n\t\t\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"leadingComments\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\t\t\t\t\"value\": \"* ( \",\n\t\t\t\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\t\t\t\"end\": 66\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 35,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 26,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 22,\n\t\t\t\t\t\t\t\t\"end\": 24,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": \"\",\n\t\t\t\t\t\t\t\t\"raw\": \"''\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": []\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/comment-before-script/input.svelte",
    "content": "<!--should not error out-->\n<script lang=\"ts\">\n\tlet count: number;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/comment-before-script/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 76,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Comment\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 27,\n\t\t\t\t\"data\": \"should not error out\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 27,\n\t\t\t\t\"end\": 28,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 28,\n\t\t\"end\": 76,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 46,\n\t\t\t\"end\": 67,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"count\",\n\t\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\t\t\"start\": 57,\n\t\t\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"TSNumberKeyword\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 59,\n\t\t\t\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": null\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\",\n\t\t\t\"leadingComments\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\"value\": \"should not error out\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 36,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 36\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\"character\": 40\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 42,\n\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/comment-in-tag/input.svelte",
    "content": "<div\n\tdata-one=\"1\"\n\t// this is a line comment\n\tdata-two=\"2\"\n\t/* this is a\n\t\tm\n\t\tu\n\t\tl\n\t\tt\n\t\ti\n\t\tl\n\t\ti\n\t\tn\n\t\te\n\t\tcomment\n\t*/\n\t// oh look another line comment\n\t// (two, in fact)\n\tdata-three=\"3\"\n></div>\n\n<span /* inline */ /* another inline */ data-one=\"1\"></span>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/comment-in-tag/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 261,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 199,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 4\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\"end\": 18,\n\t\t\t\t\t\t\"name\": \"data-one\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\t\t\"character\": 14\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 16,\n\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"1\",\n\t\t\t\t\t\t\t\t\"data\": \"1\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\"end\": 59,\n\t\t\t\t\t\t\"name\": \"data-two\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\t\t\"character\": 55\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 57,\n\t\t\t\t\t\t\t\t\"end\": 58,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"2\",\n\t\t\t\t\t\t\t\t\"data\": \"2\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 177,\n\t\t\t\t\t\t\"end\": 191,\n\t\t\t\t\t\t\"name\": \"data-three\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\"character\": 177\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 19,\n\t\t\t\t\t\t\t\t\"column\": 11,\n\t\t\t\t\t\t\t\t\"character\": 187\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 189,\n\t\t\t\t\t\t\t\t\"end\": 190,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"3\",\n\t\t\t\t\t\t\t\t\"data\": \"3\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 199,\n\t\t\t\t\"end\": 201,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 201,\n\t\t\t\t\"end\": 261,\n\t\t\t\t\"name\": \"span\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 202\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\"character\": 206\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 241,\n\t\t\t\t\t\t\"end\": 253,\n\t\t\t\t\t\t\"name\": \"data-one\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\t\t\t\"column\": 40,\n\t\t\t\t\t\t\t\t\"character\": 241\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\t\t\t\"column\": 48,\n\t\t\t\t\t\t\t\t\"character\": 249\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 251,\n\t\t\t\t\t\t\t\t\"end\": 252,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"1\",\n\t\t\t\t\t\t\t\t\"data\": \"1\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"comments\": [\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"start\": 20,\n\t\t\t\"end\": 45,\n\t\t\t\"value\": \" this is a line comment\",\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\"character\": 20\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 26,\n\t\t\t\t\t\"character\": 45\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"start\": 61,\n\t\t\t\"end\": 123,\n\t\t\t\"value\": \" this is a\\n\\t\\tm\\n\\t\\tu\\n\\t\\tl\\n\\t\\tt\\n\\t\\ti\\n\\t\\tl\\n\\t\\ti\\n\\t\\tn\\n\\t\\te\\n\\t\\tcomment\\n\\t\",\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\"character\": 61\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\"character\": 123\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"start\": 125,\n\t\t\t\"end\": 156,\n\t\t\t\"value\": \" oh look another line comment\",\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\"character\": 125\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\"column\": 32,\n\t\t\t\t\t\"character\": 156\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Line\",\n\t\t\t\"start\": 158,\n\t\t\t\"end\": 175,\n\t\t\t\"value\": \" (two, in fact)\",\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\"character\": 158\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\"character\": 175\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"start\": 207,\n\t\t\t\"end\": 219,\n\t\t\t\"value\": \" inline \",\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\"character\": 207\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\"character\": 219\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"type\": \"Block\",\n\t\t\t\"start\": 220,\n\t\t\t\"end\": 240,\n\t\t\t\"value\": \" another inline \",\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\"column\": 19,\n\t\t\t\t\t\"character\": 220\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\"column\": 39,\n\t\t\t\t\t\"character\": 240\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/css-nth-syntax/input.svelte",
    "content": "<style>\n    /* test that all these are parsed correctly */\n\th1:nth-of-type(2n+1){\n        background: red;\n    }\n    h1:nth-child(-n + 3 of li.important) {\n        background: red;\n    }\n    h1:nth-child(1) {\n        background: red;\n    }\n    h1:nth-child(p) {\n        background: red;\n    }\n    h1:nth-child(n+7) {\n        background: red;\n    }\n    h1:nth-child(even) {\n        background: red;\n    }\n    h1:nth-child(odd) {\n        background: red;\n    }\n    h1:nth-child(\n        n\n    ) {\n        background: red;\n    }\n    h1:global(nav) {\n        background: red;\n    }\n\t\th1:nth-of-type(10n+1){\n        background: red;\n    }\n\t\th1:nth-of-type(-2n+3){\n        background: red;\n    }\n\t\th1:nth-of-type(+12){\n        background: red;\n    }\n\t\th1:nth-of-type(+3n){\n        background: red;\n    }\n</style>\n\n<h1>Foo</h1>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/css-nth-syntax/output.json",
    "content": "{\n\t\"css\": {\n\t\t\"type\": \"StyleSheet\",\n\t\t\"start\": 0,\n\t\t\"end\": 806,\n\t\t\"attributes\": [],\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 62\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-of-type\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"2n+1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 79\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 79\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 62,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 80\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\"end\": 80\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\"end\": 112,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 90,\n\t\t\t\t\t\t\t\"end\": 105,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 60,\n\t\t\t\t\"end\": 112\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\"end\": 153,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\"end\": 153,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 119\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 152,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 152,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"-n + 3 of \",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 140\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"li\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 140,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 142\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"important\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 142,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 152\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 152\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 119,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 153\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\"end\": 153\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 154,\n\t\t\t\t\t\"end\": 186,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 164,\n\t\t\t\t\t\t\t\"end\": 179,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 117,\n\t\t\t\t\"end\": 186\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\"end\": 206,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\t\t\"end\": 206,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 193\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 204,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 205,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 204,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 205,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 204,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 205\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 204,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 205\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 193,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 206\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\t\t\t\t\"end\": 206\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 207,\n\t\t\t\t\t\"end\": 239,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 217,\n\t\t\t\t\t\t\t\"end\": 232,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 191,\n\t\t\t\t\"end\": 239\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 244,\n\t\t\t\t\t\"end\": 259,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 244,\n\t\t\t\t\t\t\t\"end\": 259,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 244,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 246\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 257,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 258,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 257,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 258,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 257,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 258\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 257,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 258\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 246,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 259\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 244,\n\t\t\t\t\t\t\t\t\t\"end\": 259\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 260,\n\t\t\t\t\t\"end\": 292,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 270,\n\t\t\t\t\t\t\t\"end\": 285,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 244,\n\t\t\t\t\"end\": 292\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 297,\n\t\t\t\t\t\"end\": 314,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 297,\n\t\t\t\t\t\t\t\"end\": 314,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 297,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 299\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 310,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 313,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 310,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 313,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"n+7\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 310,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 313\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 310,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 313\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 299,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 314\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 297,\n\t\t\t\t\t\t\t\t\t\"end\": 314\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 315,\n\t\t\t\t\t\"end\": 347,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 325,\n\t\t\t\t\t\t\t\"end\": 340,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 297,\n\t\t\t\t\"end\": 347\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 352,\n\t\t\t\t\t\"end\": 370,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 352,\n\t\t\t\t\t\t\t\"end\": 370,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 352,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 354\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 365,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 369,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 365,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 369,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"even\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 365,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 369\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 365,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 369\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 354,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 370\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 352,\n\t\t\t\t\t\t\t\t\t\"end\": 370\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 371,\n\t\t\t\t\t\"end\": 403,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 381,\n\t\t\t\t\t\t\t\"end\": 396,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 352,\n\t\t\t\t\"end\": 403\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 408,\n\t\t\t\t\t\"end\": 425,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 408,\n\t\t\t\t\t\t\t\"end\": 425,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 408,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 410\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 421,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 424,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 421,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 424,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"odd\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 421,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 424\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 421,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 424\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 410,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 425\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 408,\n\t\t\t\t\t\t\t\t\t\"end\": 425\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 426,\n\t\t\t\t\t\"end\": 458,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 436,\n\t\t\t\t\t\t\t\"end\": 451,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 408,\n\t\t\t\t\"end\": 458\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 463,\n\t\t\t\t\t\"end\": 492,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 463,\n\t\t\t\t\t\t\t\"end\": 492,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 463,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 465\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-child\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 485,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 486,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 485,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 486,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"n\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 485,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 486\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 485,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 486\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 465,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 492\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 463,\n\t\t\t\t\t\t\t\t\t\"end\": 492\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 493,\n\t\t\t\t\t\"end\": 525,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 503,\n\t\t\t\t\t\t\t\"end\": 518,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 463,\n\t\t\t\t\"end\": 525\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 530,\n\t\t\t\t\t\"end\": 544,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 530,\n\t\t\t\t\t\t\t\"end\": 544,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 530,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 532\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"global\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 540,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 543,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 540,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 543,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nav\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 540,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 543\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 540,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 543\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 532,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 544\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 530,\n\t\t\t\t\t\t\t\t\t\"end\": 544\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 545,\n\t\t\t\t\t\"end\": 577,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 555,\n\t\t\t\t\t\t\t\"end\": 570,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 530,\n\t\t\t\t\"end\": 577\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 580,\n\t\t\t\t\t\"end\": 601,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 580,\n\t\t\t\t\t\t\t\"end\": 601,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 580,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 582\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-of-type\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 595,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 600,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 595,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 600,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"10n+1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 595,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 600\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 595,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 600\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 582,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 601\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 580,\n\t\t\t\t\t\t\t\t\t\"end\": 601\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 601,\n\t\t\t\t\t\"end\": 633,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 611,\n\t\t\t\t\t\t\t\"end\": 626,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 580,\n\t\t\t\t\"end\": 633\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 636,\n\t\t\t\t\t\"end\": 657,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 636,\n\t\t\t\t\t\t\t\"end\": 657,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 636,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 638\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-of-type\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 651,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 656,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 651,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 656,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"-2n+3\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 651,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 656\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 651,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 656\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 638,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 657\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 636,\n\t\t\t\t\t\t\t\t\t\"end\": 657\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 657,\n\t\t\t\t\t\"end\": 689,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 667,\n\t\t\t\t\t\t\t\"end\": 682,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 636,\n\t\t\t\t\"end\": 689\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 692,\n\t\t\t\t\t\"end\": 711,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 692,\n\t\t\t\t\t\t\t\"end\": 711,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 692,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 694\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-of-type\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 707,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 710,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 707,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 710,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"+12\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 707,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 710\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 707,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 710\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 694,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 711\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 692,\n\t\t\t\t\t\t\t\t\t\"end\": 711\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 711,\n\t\t\t\t\t\"end\": 743,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 721,\n\t\t\t\t\t\t\t\"end\": 736,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 692,\n\t\t\t\t\"end\": 743\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 746,\n\t\t\t\t\t\"end\": 765,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 746,\n\t\t\t\t\t\t\t\"end\": 765,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 746,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 748\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"nth-of-type\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 761,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 764,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 761,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 764,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Nth\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"+3n\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 761,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 764\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 761,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 764\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 748,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 765\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 746,\n\t\t\t\t\t\t\t\t\t\"end\": 765\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 765,\n\t\t\t\t\t\"end\": 797,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 775,\n\t\t\t\t\t\t\t\"end\": 790,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 746,\n\t\t\t\t\"end\": 797\n\t\t\t}\n\t\t],\n\t\t\"content\": {\n\t\t\t\"start\": 7,\n\t\t\t\"end\": 798,\n\t\t\t\"styles\": \"\\n    /* test that all these are parsed correctly */\\n\\th1:nth-of-type(2n+1){\\n        background: red;\\n    }\\n    h1:nth-child(-n + 3 of li.important) {\\n        background: red;\\n    }\\n    h1:nth-child(1) {\\n        background: red;\\n    }\\n    h1:nth-child(p) {\\n        background: red;\\n    }\\n    h1:nth-child(n+7) {\\n        background: red;\\n    }\\n    h1:nth-child(even) {\\n        background: red;\\n    }\\n    h1:nth-child(odd) {\\n        background: red;\\n    }\\n    h1:nth-child(\\n        n\\n    ) {\\n        background: red;\\n    }\\n    h1:global(nav) {\\n        background: red;\\n    }\\n\\t\\th1:nth-of-type(10n+1){\\n        background: red;\\n    }\\n\\t\\th1:nth-of-type(-2n+3){\\n        background: red;\\n    }\\n\\t\\th1:nth-of-type(+12){\\n        background: red;\\n    }\\n\\t\\th1:nth-of-type(+3n){\\n        background: red;\\n    }\\n\",\n\t\t\t\"comment\": null\n\t\t}\n\t},\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 820,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 806,\n\t\t\t\t\"end\": 808,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 808,\n\t\t\t\t\"end\": 820,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 46,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 809\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 46,\n\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\"character\": 811\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 812,\n\t\t\t\t\t\t\t\"end\": 815,\n\t\t\t\t\t\t\t\"raw\": \"Foo\",\n\t\t\t\t\t\t\t\"data\": \"Foo\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/css-pseudo-classes/input.svelte",
    "content": "<style>\n    /* test that all these are parsed correctly */\n\t::view-transition-old(x-y)  {\n\t\tcolor: red;\n    }\n\t:global(::view-transition-old(x-y))  {\n\t\tcolor: red;\n    }\n\t::highlight(rainbow-color-1) {\n\t\tcolor: red;\n\t}\n\tcustom-element::part(foo) {\n\t\tcolor: red;\n\t}\n\t::slotted(.content) {\n\t\tcolor: red;\n\t}\n\t:is( /*button*/\n\t\tbutton, /*p after h1*/\n\t\th1 + p\n\t\t){\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/css-pseudo-classes/output.json",
    "content": "{\n\t\"css\": {\n\t\t\"type\": \"StyleSheet\",\n\t\t\"start\": 0,\n\t\t\"end\": 386,\n\t\t\"attributes\": [],\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\"end\": 86,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\"end\": 86,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoElementSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"view-transition-old\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 81\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\"end\": 86\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 88,\n\t\t\t\t\t\"end\": 109,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\t\t\"end\": 102,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 60,\n\t\t\t\t\"end\": 109\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 111,\n\t\t\t\t\t\"end\": 146,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 111,\n\t\t\t\t\t\t\t\"end\": 146,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"global\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 119,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 145,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 119,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 145,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoElementSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"view-transition-old\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 119,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 140\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 119,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 145\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 111,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 146\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 111,\n\t\t\t\t\t\t\t\t\t\"end\": 146\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 148,\n\t\t\t\t\t\"end\": 169,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 152,\n\t\t\t\t\t\t\t\"end\": 162,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 111,\n\t\t\t\t\"end\": 169\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\"end\": 199,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\"end\": 199,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoElementSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"highlight\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 182\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\t\t\"end\": 199\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 200,\n\t\t\t\t\t\"end\": 218,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 204,\n\t\t\t\t\t\t\t\"end\": 214,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 171,\n\t\t\t\t\"end\": 218\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 220,\n\t\t\t\t\t\"end\": 245,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 220,\n\t\t\t\t\t\t\t\"end\": 245,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"custom-element\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 220,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 234\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoElementSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"part\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 234,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 240\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 220,\n\t\t\t\t\t\t\t\t\t\"end\": 245\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 246,\n\t\t\t\t\t\"end\": 264,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 250,\n\t\t\t\t\t\t\t\"end\": 260,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 220,\n\t\t\t\t\"end\": 264\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 266,\n\t\t\t\t\t\"end\": 285,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 266,\n\t\t\t\t\t\t\t\"end\": 285,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoElementSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"slotted\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 266,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 275\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 266,\n\t\t\t\t\t\t\t\t\t\"end\": 285\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 286,\n\t\t\t\t\t\"end\": 304,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 290,\n\t\t\t\t\t\t\t\"end\": 300,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 266,\n\t\t\t\t\"end\": 304\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 306,\n\t\t\t\t\t\"end\": 359,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 306,\n\t\t\t\t\t\t\t\"end\": 359,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"PseudoClassSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"is\",\n\t\t\t\t\t\t\t\t\t\t\t\"args\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 324,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 355,\n\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 324,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 330,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"button\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 324,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 330\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 324,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 330\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 349,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 355,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 349,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 351\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 349,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 351\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"combinator\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Combinator\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"+\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 352,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 353\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 354,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 355\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 352,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 355\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 306,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 359\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 306,\n\t\t\t\t\t\t\t\t\t\"end\": 359\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 359,\n\t\t\t\t\t\"end\": 377,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 363,\n\t\t\t\t\t\t\t\"end\": 373,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 306,\n\t\t\t\t\"end\": 377\n\t\t\t}\n\t\t],\n\t\t\"content\": {\n\t\t\t\"start\": 7,\n\t\t\t\"end\": 378,\n\t\t\t\"styles\": \"\\n    /* test that all these are parsed correctly */\\n\\t::view-transition-old(x-y)  {\\n\\t\\tcolor: red;\\n    }\\n\\t:global(::view-transition-old(x-y))  {\\n\\t\\tcolor: red;\\n    }\\n\\t::highlight(rainbow-color-1) {\\n\\t\\tcolor: red;\\n\\t}\\n\\tcustom-element::part(foo) {\\n\\t\\tcolor: red;\\n\\t}\\n\\t::slotted(.content) {\\n\\t\\tcolor: red;\\n\\t}\\n\\t:is( /*button*/\\n\\t\\tbutton, /*p after h1*/\\n\\t\\th1 + p\\n\\t\\t){\\n\\t\\tcolor: red;\\n\\t}\\n\",\n\t\t\t\"comment\": null\n\t\t}\n\t},\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 386,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": []\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/each-block-object-pattern/input.svelte",
    "content": "{#each people as { name, cool = true }}\n\t<p>{name} is {cool ? 'cool' : 'not cool'}</p>\n{/each}\n\n{#each people as { name = `Jane ${\"Doe\"}`, cool = true }}\n\t<p>{name} is {cool ? 'cool' : 'not cool'}</p>\n{/each}\n\n{#each people as { name = (() => { return `Jane ${\"Doe\"}`; })(), cool = true }}\n\t<p>{name} is {cool ? 'cool' : 'not cool'}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/each-block-object-pattern/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 344,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 13,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"people\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 41,\n\t\t\t\t\t\t\t\"end\": 86,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 42\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 43\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 49,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 50,\n\t\t\t\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \" is \",\n\t\t\t\t\t\t\t\t\t\t\"data\": \" is \"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 54,\n\t\t\t\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ConditionalExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 55,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 55,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 59,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 62,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 68,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"cool\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'cool'\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"alternate\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"not cool\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'not cool'\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 86,\n\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 38\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 19,\n\t\t\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\t\t\t\t\"end\": 36,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 96,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 96,\n\t\t\t\t\"end\": 208,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 103,\n\t\t\t\t\t\"end\": 109,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"people\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 153,\n\t\t\t\t\t\t\t\"end\": 155,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 155,\n\t\t\t\t\t\t\t\"end\": 200,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 156\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 157\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 158,\n\t\t\t\t\t\t\t\t\t\t\"end\": 164,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 159,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 163,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 164,\n\t\t\t\t\t\t\t\t\t\t\"end\": 168,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \" is \",\n\t\t\t\t\t\t\t\t\t\t\"data\": \" is \"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 168,\n\t\t\t\t\t\t\t\t\t\t\"end\": 196,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ConditionalExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 169,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 195,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 169,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 173,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 176,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 182,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"cool\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'cool'\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"alternate\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 185,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 195,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"not cool\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'not cool'\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 200,\n\t\t\t\t\t\t\t\"end\": 201,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\"end\": 152,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 57\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 115,\n\t\t\t\t\t\t\t\"end\": 137,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 115,\n\t\t\t\t\t\t\t\t\"end\": 119,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 115,\n\t\t\t\t\t\t\t\t\"end\": 137,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 115,\n\t\t\t\t\t\t\t\t\t\"end\": 119,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\"start\": 122,\n\t\t\t\t\t\t\t\t\t\"end\": 137,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"expressions\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 35\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 40\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": \"Doe\",\n\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\\"Doe\\\"\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 123,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 128,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 33\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"Jane \",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"Jane \"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": false\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 136,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 136,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\"end\": 150,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 44\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 55\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\t\"end\": 143,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 44\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 48\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\t\"end\": 150,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 44\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 55\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 139,\n\t\t\t\t\t\t\t\t\t\"end\": 143,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 44\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 48\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 146,\n\t\t\t\t\t\t\t\t\t\"end\": 150,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 51\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 55\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 208,\n\t\t\t\t\"end\": 210,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 210,\n\t\t\t\t\"end\": 344,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 217,\n\t\t\t\t\t\"end\": 223,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"people\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 289,\n\t\t\t\t\t\t\t\"end\": 291,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 291,\n\t\t\t\t\t\t\t\"end\": 336,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 292\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 293\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 294,\n\t\t\t\t\t\t\t\t\t\t\"end\": 300,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 295,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 299,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 300,\n\t\t\t\t\t\t\t\t\t\t\"end\": 304,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \" is \",\n\t\t\t\t\t\t\t\t\t\t\"data\": \" is \"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 304,\n\t\t\t\t\t\t\t\t\t\t\"end\": 332,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ConditionalExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 305,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 331,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 305,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 309,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 312,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 318,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"cool\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'cool'\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"alternate\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 321,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 331,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"not cool\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"'not cool'\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 336,\n\t\t\t\t\t\t\t\"end\": 337,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 227,\n\t\t\t\t\t\"end\": 288,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 79\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 229,\n\t\t\t\t\t\t\t\"end\": 273,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 64\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 229,\n\t\t\t\t\t\t\t\t\"end\": 233,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 229,\n\t\t\t\t\t\t\t\t\"end\": 273,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 64\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 229,\n\t\t\t\t\t\t\t\t\t\"end\": 233,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"name\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\t\t\"start\": 236,\n\t\t\t\t\t\t\t\t\t\"end\": 273,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 64\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 237,\n\t\t\t\t\t\t\t\t\t\t\"end\": 270,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 61\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 243,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 270,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 34\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 61\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"body\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"ReturnStatement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 245,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 268,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 59\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"argument\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 252,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 267,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 43\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 58\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"expressions\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 260,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 265,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 51\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 56\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": \"Doe\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\\"Doe\\\"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 253,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 258,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 44\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 49\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"Jane \",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"Jane \"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"tail\": false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 266,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 266,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 57\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 57\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"arguments\": [],\n\t\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 275,\n\t\t\t\t\t\t\t\"end\": 286,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 66\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 275,\n\t\t\t\t\t\t\t\t\"end\": 279,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 66\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 70\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 275,\n\t\t\t\t\t\t\t\t\"end\": 286,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 66\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 275,\n\t\t\t\t\t\t\t\t\t\"end\": 279,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 66\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 70\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"cool\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 282,\n\t\t\t\t\t\t\t\t\t\"end\": 286,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 73\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/input.svelte",
    "content": "{#each x as { y = 'z' }}{/each}\n\n{#each x as { y = '{' }}{/each}\n\n{#each x as { y = ']' }}{/each}\n\n{#each x as { y = `${`\"`}` }}{/each}\n\n{#each x as { y = `${`John`}` }}{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 176,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 31,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\t\"end\": 15,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 18\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"z\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"'z'\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 31,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 33,\n\t\t\t\t\"end\": 64,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\"end\": 56,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 47,\n\t\t\t\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 51,\n\t\t\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"{\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"'{'\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 64,\n\t\t\t\t\"end\": 66,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 66,\n\t\t\t\t\"end\": 97,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 73,\n\t\t\t\t\t\"end\": 74,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 78,\n\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 80,\n\t\t\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 84,\n\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": \"]\",\n\t\t\t\t\t\t\t\t\t\"raw\": \"']'\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 97,\n\t\t\t\t\"end\": 99,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 99,\n\t\t\t\t\"end\": 135,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 106,\n\t\t\t\t\t\"end\": 107,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 111,\n\t\t\t\t\t\"end\": 127,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\t\t\"end\": 125,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\t\t\t\"end\": 114,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\t\t\t\"end\": 125,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\t\t\t\t\"end\": 114,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\"end\": 125,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"expressions\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 120,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 123,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"expressions\": [],\n\t\t\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 121,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 24\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\\"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\\\"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 118,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": false\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 124,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 124,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 135,\n\t\t\t\t\"end\": 137,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 137,\n\t\t\t\t\"end\": 176,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 144,\n\t\t\t\t\t\"end\": 145,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ObjectPattern\",\n\t\t\t\t\t\"start\": 149,\n\t\t\t\t\t\"end\": 168,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Property\",\n\t\t\t\t\t\t\t\"start\": 151,\n\t\t\t\t\t\t\t\"end\": 166,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"method\": false,\n\t\t\t\t\t\t\t\"shorthand\": true,\n\t\t\t\t\t\t\t\"computed\": false,\n\t\t\t\t\t\t\t\"key\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 151,\n\t\t\t\t\t\t\t\t\"end\": 152,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\t\"start\": 151,\n\t\t\t\t\t\t\t\t\"end\": 166,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 151,\n\t\t\t\t\t\t\t\t\t\"end\": 152,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"y\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\"start\": 155,\n\t\t\t\t\t\t\t\t\t\"end\": 166,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"expressions\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateLiteral\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 158,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 164,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"expressions\": [],\n\t\t\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 159,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 163,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 27\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"John\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"John\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"quasis\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 156,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 156,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": false\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TemplateElement\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 165,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 165,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"cooked\": \"\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"tail\": true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"kind\": \"init\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/generic-snippets/input.svelte",
    "content": "<script lang=\"ts\">\n</script>\n\n{#snippet generic<T extends string>(val: T)}\n\t{val}\n{/snippet}\n\n{#snippet complex_generic<T extends { bracket: \"<\" } | \"<\" | Set<\"<>\">>(val: T)}\n\t{val}\n{/snippet}"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/generic-snippets/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 192,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 28,\n\t\t\t\t\"end\": 30,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 30,\n\t\t\t\t\"end\": 92,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"generic\",\n\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 40\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"typeParams\": \"T extends string\",\n\t\t\t\t\"parameters\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 66,\n\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 36\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"val\",\n\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\"start\": 69,\n\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 39\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\"type\": \"TSTypeReference\",\n\t\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"typeName\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 41\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 42\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"T\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 74,\n\t\t\t\t\t\t\t\"end\": 76,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 76,\n\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\t\"end\": 80,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"val\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 81,\n\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 92,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 192,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"complex_generic\",\n\t\t\t\t\t\"start\": 104,\n\t\t\t\t\t\"end\": 119,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 104\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\"column\": 25,\n\t\t\t\t\t\t\t\"character\": 119\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"typeParams\": \"T extends { bracket: \\\"<\\\" } | \\\"<\\\" | Set<\\\"<>\\\">\",\n\t\t\t\t\"parameters\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 166,\n\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 72\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"val\",\n\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\"start\": 169,\n\t\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\"column\": 75\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\"type\": \"TSTypeReference\",\n\t\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"typeName\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\t\t\t\t\"end\": 172,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 77\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 78\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"T\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 174,\n\t\t\t\t\t\t\t\"end\": 176,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 176,\n\t\t\t\t\t\t\t\"end\": 181,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 177,\n\t\t\t\t\t\t\t\t\"end\": 180,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"val\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 181,\n\t\t\t\t\t\t\t\"end\": 182,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 28,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 18,\n\t\t\t\"end\": 19,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 8,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/if-block/input.svelte",
    "content": "{#if foo}bar{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/if-block/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 17,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\t\"end\": 12,\n\t\t\t\t\t\t\t\"raw\": \"bar\",\n\t\t\t\t\t\t\t\"data\": \"bar\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": null\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/if-block-else/input.svelte",
    "content": "{#if foo}\n\t<p>foo</p>\n{:else}\n\t<p>not foo</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/if-block-else/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 51,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 8,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 11,\n\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 13\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"foo\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"foo\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 21,\n\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\t\t\"end\": 31,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 32\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 33\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 34,\n\t\t\t\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"not foo\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"not foo\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\t\"end\": 46,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/if-block-elseif/input.svelte",
    "content": "{#if x > 10}\n\t<p>x is greater than 10</p>\n{:else if x < 5}\n\t<p>x is less than 5</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/if-block-elseif/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 89,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 89,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t\t},\n\t\t\t\t\t\"operator\": \">\",\n\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\"start\": 9,\n\t\t\t\t\t\t\"end\": 11,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": 10,\n\t\t\t\t\t\t\"raw\": \"10\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 12,\n\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 15\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\t\t\"end\": 37,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"x is greater than 10\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"x is greater than 10\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 41,\n\t\t\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"start\": 42,\n\t\t\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\"elseif\": true,\n\t\t\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\t\"end\": 57,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"x\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"operator\": \"<\",\n\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\"start\": 56,\n\t\t\t\t\t\t\t\t\t\"end\": 57,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": 5,\n\t\t\t\t\t\t\t\t\t\"raw\": \"5\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\t\t\t\t\"end\": 60,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\t\t\t\"end\": 83,\n\t\t\t\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\"character\": 61\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\"character\": 62\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"x is less than 5\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"data\": \"x is less than 5\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\t\t\t\t\"end\": 84,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"alternate\": null\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-invalid-block/input.svelte",
    "content": "{#if }\n{:else if }\n{:else }\n{/if}\n\n{#each }\n{/each}\n\n{#snippet }\n{/snippet}\n\n{#snippet foo}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-invalid-block/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 102,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\"end\": 5,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\"elseif\": true,\n\t\t\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\"end\": 17,\n\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\t\t\"end\": 19,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"alternate\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\t\t\t\t\"end\": 28,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 33,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 42,\n\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 43,\n\t\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"context\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 51,\n\t\t\t\t\"end\": 53,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 53,\n\t\t\t\t\"end\": 75,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\"end\": 63,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 63\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 63\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 64,\n\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 75,\n\t\t\t\t\"end\": 77,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 77,\n\t\t\t\t\"end\": 102,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\"start\": 87,\n\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 87\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 12,\n\t\t\t\t\t\t\t\"column\": 13,\n\t\t\t\t\t\t\t\"character\": 90\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 91,\n\t\t\t\t\t\t\t\"end\": 92,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-invalid-expression/input.svelte",
    "content": "<div {}></div>\n<div foo={}></div>\n\n<div foo={a.}></div>\n<div foo={'hi}'.}></div>\n<Component onclick={() => x.} />\n\n<input bind:value={a.} />\n\nasd{a.}asd\n{foo[bar.]}\n\n{#if x.}{/if}\n\n{#each array as item (item.)}{/each}\n\n{#each obj. as item}{/each}\n\n{#await x.}{/await}\n\n{#await x. then y}{/await}\n\n{#await x. catch y}{/await}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-invalid-expression/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 324,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 14,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 4\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\t\t\t\"start\": 6,\n\t\t\t\t\t\t\t\t\"end\": 6,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\t\"character\": 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 14,\n\t\t\t\t\"end\": 15,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 15,\n\t\t\t\t\"end\": 33,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 19\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 20\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 23\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\"end\": 26,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 25,\n\t\t\t\t\t\t\t\t\"end\": 25,\n\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 33,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 55,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 36\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 39\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 40\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 43\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 45,\n\t\t\t\t\t\t\t\t\"end\": 47,\n\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 55,\n\t\t\t\t\"end\": 56,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 56,\n\t\t\t\t\"end\": 80,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 57\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 60\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 61,\n\t\t\t\t\t\t\"end\": 73,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 61\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 64\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\t\"end\": 73,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 66,\n\t\t\t\t\t\t\t\t\"end\": 72,\n\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 80,\n\t\t\t\t\"end\": 81,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\"start\": 81,\n\t\t\t\t\"end\": 113,\n\t\t\t\t\"name\": \"Component\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 82\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\"character\": 91\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\"name\": \"onclick\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 11,\n\t\t\t\t\t\t\t\t\"character\": 92\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\t\"character\": 99\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 100,\n\t\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\t\t\t\"end\": 109,\n\t\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 113,\n\t\t\t\t\"end\": 115,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 115,\n\t\t\t\t\"end\": 140,\n\t\t\t\t\"name\": \"input\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 116\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\"character\": 121\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 122,\n\t\t\t\t\t\t\"end\": 137,\n\t\t\t\t\t\t\"type\": \"BindDirective\",\n\t\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\"character\": 122\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\t\"character\": 132\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 134,\n\t\t\t\t\t\t\t\"end\": 136,\n\t\t\t\t\t\t\t\"name\": \"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 140,\n\t\t\t\t\"end\": 145,\n\t\t\t\t\"raw\": \"\\n\\nasd\",\n\t\t\t\t\"data\": \"\\n\\nasd\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\"start\": 145,\n\t\t\t\t\"end\": 149,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 146,\n\t\t\t\t\t\"end\": 148,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 149,\n\t\t\t\t\"end\": 153,\n\t\t\t\t\"raw\": \"asd\\n\",\n\t\t\t\t\"data\": \"asd\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\"start\": 153,\n\t\t\t\t\"end\": 164,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 154,\n\t\t\t\t\t\"end\": 163,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 164,\n\t\t\t\t\"end\": 166,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 166,\n\t\t\t\t\"end\": 179,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 171,\n\t\t\t\t\t\"end\": 173,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"alternate\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 179,\n\t\t\t\t\"end\": 181,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 181,\n\t\t\t\t\"end\": 217,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 188,\n\t\t\t\t\t\"end\": 193,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"array\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"item\",\n\t\t\t\t\t\"start\": 197,\n\t\t\t\t\t\"end\": 201,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 197\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\"column\": 20,\n\t\t\t\t\t\t\t\"character\": 201\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"key\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 203,\n\t\t\t\t\t\"end\": 208,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 217,\n\t\t\t\t\"end\": 219,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 219,\n\t\t\t\t\"end\": 246,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 226,\n\t\t\t\t\t\"end\": 230\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"item\",\n\t\t\t\t\t\"start\": 234,\n\t\t\t\t\t\"end\": 238,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\t\t\"column\": 15,\n\t\t\t\t\t\t\t\"character\": 234\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\t\t\"column\": 19,\n\t\t\t\t\t\t\t\"character\": 238\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 246,\n\t\t\t\t\"end\": 248,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 248,\n\t\t\t\t\"end\": 267,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 256,\n\t\t\t\t\t\"end\": 258,\n\t\t\t\t\t\"name\": \"\"\n\t\t\t\t},\n\t\t\t\t\"value\": null,\n\t\t\t\t\"error\": null,\n\t\t\t\t\"pending\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"then\": null,\n\t\t\t\t\"catch\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 267,\n\t\t\t\t\"end\": 269,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 269,\n\t\t\t\t\"end\": 295,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 277,\n\t\t\t\t\t\"end\": 279\n\t\t\t\t},\n\t\t\t\t\"value\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"y\",\n\t\t\t\t\t\"start\": 285,\n\t\t\t\t\t\"end\": 286,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\t\"character\": 285\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 286\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"error\": null,\n\t\t\t\t\"pending\": null,\n\t\t\t\t\"then\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t},\n\t\t\t\t\"catch\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 295,\n\t\t\t\t\"end\": 297,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"AwaitBlock\",\n\t\t\t\t\"start\": 297,\n\t\t\t\t\"end\": 324,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"\",\n\t\t\t\t\t\"start\": 305,\n\t\t\t\t\t\"end\": 307\n\t\t\t\t},\n\t\t\t\t\"value\": null,\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"y\",\n\t\t\t\t\t\"start\": 314,\n\t\t\t\t\t\"end\": 315,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\"column\": 17,\n\t\t\t\t\t\t\t\"character\": 314\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 23,\n\t\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\t\"character\": 315\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"pending\": null,\n\t\t\t\t\"then\": null,\n\t\t\t\t\"catch\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-unclosed-open-tag/input.svelte",
    "content": "<div>\n\t<Comp foo={bar}\n</div>\n\n<div>\n\t<span foo={bar}\n</div>\n\n{#if foo}\n\t<Comp foo={bar}\n{/if}\n\n{#if foo}\n\t<Comp foo={bar}\n\t{#if bar}\n\t\t{bar}\n\t{/if}\n{/if}\n\n<div foo={bar}"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-unclosed-open-tag/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 170,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 29,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 4\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\t\"end\": 23,\n\t\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 13\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 17,\n\t\t\t\t\t\t\t\t\t\t\"end\": 22,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 18,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 21,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 29,\n\t\t\t\t\"end\": 31,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 31,\n\t\t\t\t\"end\": 60,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 32\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 36,\n\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 38,\n\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\"name\": \"span\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 39\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 43\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\t\"start\": 44,\n\t\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 44\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 47\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\t\t\t\t\t\"end\": 53,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 49,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 52,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 60,\n\t\t\t\t\"end\": 62,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 62,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 67,\n\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 71,\n\t\t\t\t\t\t\t\"end\": 73,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 73,\n\t\t\t\t\t\t\t\"end\": 89,\n\t\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 74\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 78\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\t\"start\": 79,\n\t\t\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 79\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 82\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 83,\n\t\t\t\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 84,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 96,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 96,\n\t\t\t\t\"end\": 154,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\"end\": 104,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 105,\n\t\t\t\t\t\t\t\"end\": 107,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 107,\n\t\t\t\t\t\t\t\"end\": 124,\n\t\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 108\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 112\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\t\"start\": 113,\n\t\t\t\t\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 113\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 116\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 121,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\t\t\t\"elseif\": false,\n\t\t\t\t\t\t\t\"start\": 124,\n\t\t\t\t\t\t\t\"end\": 148,\n\t\t\t\t\t\t\t\"test\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 129,\n\t\t\t\t\t\t\t\t\"end\": 132,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 15,\n\t\t\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"consequent\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 133,\n\t\t\t\t\t\t\t\t\t\t\"end\": 136,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\\t\\t\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\\t\\t\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 136,\n\t\t\t\t\t\t\t\t\t\t\"end\": 141,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 140,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 3\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 16,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 6\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 141,\n\t\t\t\t\t\t\t\t\t\t\"end\": 143,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"alternate\": null\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 148,\n\t\t\t\t\t\t\t\"end\": 149,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 154,\n\t\t\t\t\"end\": 156,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 156,\n\t\t\t\t\"end\": 170,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 157\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 160\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 161,\n\t\t\t\t\t\t\"end\": 170,\n\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\"character\": 161\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\t\t\"character\": 164\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 165,\n\t\t\t\t\t\t\t\"end\": 170,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 166,\n\t\t\t\t\t\t\t\t\"end\": 169,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 20,\n\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-unclosed-tag/input.svelte",
    "content": "<div>\n\t<Comp>\n</div>\n\n<div>\n\t<Comp foo={bar}\n</div>\n\n<div>\n\t<span\n</div>\n\n<div>\n\t<Comp.\n</div>\n\n<div>\n\t<comp.\n</div>\n\n{#if foo}\n\t<div>\n{/if}\n\n{#if foo}\n\t<Comp foo={bar}\n{/if}\n\n<div>\n<p>hi</p>\n\n<open-ended\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-unclosed-tag/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 204,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 20,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 4\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 5,\n\t\t\t\t\t\t\t\"end\": 7,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 7,\n\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 13,\n\t\t\t\t\t\t\t\t\t\t\"end\": 14,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 20,\n\t\t\t\t\"end\": 22,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 22,\n\t\t\t\t\"end\": 51,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 23\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 26\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 27,\n\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 29,\n\t\t\t\t\t\t\t\"end\": 45,\n\t\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 30\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 34\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\t\"start\": 35,\n\t\t\t\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\t\t\t\t\t\"end\": 44,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 40,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 43,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 51,\n\t\t\t\t\"end\": 53,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 53,\n\t\t\t\t\"end\": 72,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 54\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 57\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\t\"end\": 60,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\t\"name\": \"span\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 61\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 65\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 72,\n\t\t\t\t\"end\": 74,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 74,\n\t\t\t\t\"end\": 94,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 75\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 13,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 78\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 79,\n\t\t\t\t\t\t\t\"end\": 81,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 81,\n\t\t\t\t\t\t\t\"end\": 88,\n\t\t\t\t\t\t\t\"name\": \"Comp.\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 82\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 14,\n\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\"character\": 87\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 94,\n\t\t\t\t\"end\": 96,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 96,\n\t\t\t\t\"end\": 116,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 97\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 17,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 100\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 101,\n\t\t\t\t\t\t\t\"end\": 103,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 103,\n\t\t\t\t\t\t\t\"end\": 110,\n\t\t\t\t\t\t\t\"name\": \"comp.\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 104\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 18,\n\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\"character\": 109\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 116,\n\t\t\t\t\"end\": 118,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 118,\n\t\t\t\t\"end\": 140,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 123,\n\t\t\t\t\t\"end\": 126,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 21,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 127,\n\t\t\t\t\t\t\t\"end\": 129,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 129,\n\t\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 130\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 22,\n\t\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\t\"character\": 133\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 134,\n\t\t\t\t\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 140,\n\t\t\t\t\"end\": 142,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"IfBlock\",\n\t\t\t\t\"elseif\": false,\n\t\t\t\t\"start\": 142,\n\t\t\t\t\"end\": 174,\n\t\t\t\t\"test\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 147,\n\t\t\t\t\t\"end\": 150,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 25,\n\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t},\n\t\t\t\t\"consequent\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 151,\n\t\t\t\t\t\t\t\"end\": 153,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Component\",\n\t\t\t\t\t\t\t\"start\": 153,\n\t\t\t\t\t\t\t\"end\": 169,\n\t\t\t\t\t\t\t\"name\": \"Comp\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 154\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\"column\": 6,\n\t\t\t\t\t\t\t\t\t\"character\": 158\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\t\t\t\"start\": 159,\n\t\t\t\t\t\t\t\t\t\"end\": 168,\n\t\t\t\t\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 159\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\t\t\t\"character\": 162\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 163,\n\t\t\t\t\t\t\t\t\t\t\"end\": 168,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 164,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 167,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 26,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"bar\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"alternate\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 174,\n\t\t\t\t\"end\": 176,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 176,\n\t\t\t\t\"end\": 204,\n\t\t\t\t\"name\": \"div\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 29,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 177\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 29,\n\t\t\t\t\t\t\"column\": 4,\n\t\t\t\t\t\t\"character\": 180\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 181,\n\t\t\t\t\t\t\t\"end\": 182,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 182,\n\t\t\t\t\t\t\t\"end\": 191,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 30,\n\t\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\t\"character\": 183\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 30,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 184\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 185,\n\t\t\t\t\t\t\t\t\t\t\"end\": 187,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"hi\",\n\t\t\t\t\t\t\t\t\t\t\"data\": \"hi\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 191,\n\t\t\t\t\t\t\t\"end\": 193,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 193,\n\t\t\t\t\t\t\t\"end\": 204,\n\t\t\t\t\t\t\t\"name\": \"open-ended\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 32,\n\t\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\t\"character\": 194\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 32,\n\t\t\t\t\t\t\t\t\t\"column\": 11,\n\t\t\t\t\t\t\t\t\t\"character\": 204\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-valid-each-as/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet arr = [];\n</script>\n\n{#each arr as [key, value = 'default']}\n\t<div>{key}: {value}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/loose-valid-each-as/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 119,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 43,\n\t\t\t\t\"end\": 45,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"EachBlock\",\n\t\t\t\t\"start\": 45,\n\t\t\t\t\"end\": 119,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"start\": 52,\n\t\t\t\t\t\"end\": 55,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"name\": \"arr\"\n\t\t\t\t},\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 84,\n\t\t\t\t\t\t\t\"end\": 86,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 86,\n\t\t\t\t\t\t\t\"end\": 111,\n\t\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 87\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\t\"character\": 90\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 91,\n\t\t\t\t\t\t\t\t\t\t\"end\": 96,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 95,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"key\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 96,\n\t\t\t\t\t\t\t\t\t\t\"end\": 98,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \": \",\n\t\t\t\t\t\t\t\t\t\t\"data\": \": \"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 98,\n\t\t\t\t\t\t\t\t\t\t\"end\": 105,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 99,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 104,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 111,\n\t\t\t\t\t\t\t\"end\": 112,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"context\": {\n\t\t\t\t\t\"type\": \"ArrayPattern\",\n\t\t\t\t\t\"start\": 59,\n\t\t\t\t\t\"end\": 83,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\"column\": 39\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"elements\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 60,\n\t\t\t\t\t\t\t\"end\": 63,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"key\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"AssignmentPattern\",\n\t\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 38\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 65,\n\t\t\t\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 26\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"value\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\"start\": 73,\n\t\t\t\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 29\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\"column\": 38\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"value\": \"default\",\n\t\t\t\t\t\t\t\t\"raw\": \"'default'\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 43,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 18,\n\t\t\t\"end\": 34,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\"end\": 33,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\"end\": 32,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\"end\": 27,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"arr\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"ArrayExpression\",\n\t\t\t\t\t\t\t\t\"start\": 30,\n\t\t\t\t\t\t\t\t\"end\": 32,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"elements\": []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 8,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/options/input.svelte",
    "content": "<svelte:options customElement=\"my-custom-element\" runes={true} />\n\n<script module lang=\"ts\">\n</script>\n\n<script lang=\"ts\" generics=\"T extends { foo: number }\">\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/options/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 169,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 65,\n\t\t\t\t\"end\": 67,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 102,\n\t\t\t\t\"end\": 104,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": {\n\t\t\"start\": 0,\n\t\t\"end\": 65,\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 16,\n\t\t\t\t\"end\": 49,\n\t\t\t\t\"name\": \"customElement\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 16,\n\t\t\t\t\t\t\"character\": 16\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 29,\n\t\t\t\t\t\t\"character\": 29\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 31,\n\t\t\t\t\t\t\"end\": 48,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"my-custom-element\",\n\t\t\t\t\t\t\"data\": \"my-custom-element\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 50,\n\t\t\t\t\"end\": 62,\n\t\t\t\t\"name\": \"runes\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 50,\n\t\t\t\t\t\t\"character\": 50\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 55,\n\t\t\t\t\t\t\"character\": 55\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": {\n\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\"start\": 56,\n\t\t\t\t\t\"end\": 62,\n\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\"start\": 57,\n\t\t\t\t\t\t\"end\": 61,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 57\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 61\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": true,\n\t\t\t\t\t\t\"raw\": \"true\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"customElement\": {\n\t\t\t\"tag\": \"my-custom-element\"\n\t\t},\n\t\t\"runes\": true\n\t},\n\t\"module\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 67,\n\t\t\"end\": 102,\n\t\t\"context\": \"module\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 92,\n\t\t\t\"end\": 93,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 75,\n\t\t\t\t\"end\": 81,\n\t\t\t\t\"name\": \"module\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 75\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\"column\": 14,\n\t\t\t\t\t\t\"character\": 81\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": true\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 82,\n\t\t\t\t\"end\": 91,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\"column\": 15,\n\t\t\t\t\t\t\"character\": 82\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\"column\": 19,\n\t\t\t\t\t\t\"character\": 86\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 88,\n\t\t\t\t\t\t\"end\": 90,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 104,\n\t\t\"end\": 169,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 159,\n\t\t\t\"end\": 160,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 112,\n\t\t\t\t\"end\": 121,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 112\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\"character\": 116\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 118,\n\t\t\t\t\t\t\"end\": 120,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 122,\n\t\t\t\t\"end\": 158,\n\t\t\t\t\"name\": \"generics\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\"column\": 18,\n\t\t\t\t\t\t\"character\": 122\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\"column\": 26,\n\t\t\t\t\t\t\"character\": 130\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 132,\n\t\t\t\t\t\t\"end\": 157,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"T extends { foo: number }\",\n\t\t\t\t\t\t\"data\": \"T extends { foo: number }\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/script-style-no-markup/input.svelte",
    "content": "<script>\n\t// script and style but no markup\n</script>\n<style>\n\tdiv { color: red; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/script-style-no-markup/output.json",
    "content": "{\n\t\"css\": {\n\t\t\"type\": \"StyleSheet\",\n\t\t\"start\": 54,\n\t\t\"end\": 91,\n\t\t\"attributes\": [],\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"div\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 66\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\t\t\t\t\"end\": 66\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 67,\n\t\t\t\t\t\"end\": 82,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 69,\n\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\"property\": \"color\",\n\t\t\t\t\t\t\t\"value\": \"red\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 63,\n\t\t\t\t\"end\": 82\n\t\t\t}\n\t\t],\n\t\t\"content\": {\n\t\t\t\"start\": 61,\n\t\t\t\"end\": 83,\n\t\t\t\"styles\": \"\\n\\tdiv { color: red; }\\n\",\n\t\t\t\"comment\": null\n\t\t}\n\t},\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 91,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 53,\n\t\t\t\t\"end\": 54,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 53,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 8,\n\t\t\t\"end\": 44,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\",\n\t\t\t\"trailingComments\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"Line\",\n\t\t\t\t\t\"value\": \" script and style but no markup\",\n\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\"end\": 43\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"attributes\": []\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/semicolon-inside-quotes/input.svelte",
    "content": "<h1>\n\tSemicolon inside quotes\n</h1>\n<style>\n\t@import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap\");\n\th1 {\n\t\tfont-weight: bold;\n\t\tbackground: url(\"whatever\");\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/semicolon-inside-quotes/output.json",
    "content": "{\n\t\"css\": {\n\t\t\"type\": \"StyleSheet\",\n\t\t\"start\": 36,\n\t\t\"end\": 205,\n\t\t\"attributes\": [],\n\t\t\"children\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Atrule\",\n\t\t\t\t\"start\": 45,\n\t\t\t\t\"end\": 135,\n\t\t\t\t\"name\": \"import\",\n\t\t\t\t\"prelude\": \"url(\\\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap\\\")\",\n\t\t\t\t\"block\": null\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Rule\",\n\t\t\t\t\"prelude\": {\n\t\t\t\t\t\"type\": \"SelectorList\",\n\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\"end\": 139,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ComplexSelector\",\n\t\t\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\t\t\"end\": 139,\n\t\t\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"RelativeSelector\",\n\t\t\t\t\t\t\t\t\t\"combinator\": null,\n\t\t\t\t\t\t\t\t\t\"selectors\": [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TypeSelector\",\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 139\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\"start\": 137,\n\t\t\t\t\t\t\t\t\t\"end\": 139\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"block\": {\n\t\t\t\t\t\"type\": \"Block\",\n\t\t\t\t\t\"start\": 140,\n\t\t\t\t\t\"end\": 196,\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 144,\n\t\t\t\t\t\t\t\"end\": 161,\n\t\t\t\t\t\t\t\"property\": \"font-weight\",\n\t\t\t\t\t\t\t\"value\": \"bold\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Declaration\",\n\t\t\t\t\t\t\t\"start\": 165,\n\t\t\t\t\t\t\t\"end\": 192,\n\t\t\t\t\t\t\t\"property\": \"background\",\n\t\t\t\t\t\t\t\"value\": \"url(\\\"whatever\\\")\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"start\": 137,\n\t\t\t\t\"end\": 196\n\t\t\t}\n\t\t],\n\t\t\"content\": {\n\t\t\t\"start\": 43,\n\t\t\t\"end\": 197,\n\t\t\t\"styles\": \"\\n\\t@import url(\\\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap\\\");\\n\\th1 {\\n\\t\\tfont-weight: bold;\\n\\t\\tbackground: url(\\\"whatever\\\");\\n\\t}\\n\",\n\t\t\t\"comment\": null\n\t\t}\n\t},\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 205,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 35,\n\t\t\t\t\"name\": \"h1\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\"character\": 3\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 4,\n\t\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\tSemicolon inside quotes\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\tSemicolon inside quotes\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 35,\n\t\t\t\t\"end\": 36,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/snippets/input.svelte",
    "content": "<script lang=\"ts\"></script>\n\n{#snippet foo(msg: string)}\n\t<p>{msg}</p>\n{/snippet}\n\n{@render foo(msg)}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/snippets/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 101,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 27,\n\t\t\t\t\"end\": 29,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SnippetBlock\",\n\t\t\t\t\"start\": 29,\n\t\t\t\t\"end\": 81,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\"name\": \"foo\",\n\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\"character\": 39\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\"column\": 13,\n\t\t\t\t\t\t\t\"character\": 42\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"parameters\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 43,\n\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"msg\",\n\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\"start\": 46,\n\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\"type\": \"TSStringKeyword\",\n\t\t\t\t\t\t\t\t\"start\": 48,\n\t\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 56,\n\t\t\t\t\t\t\t\"end\": 58,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 58,\n\t\t\t\t\t\t\t\"end\": 70,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 59\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 60\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 61,\n\t\t\t\t\t\t\t\t\t\t\"end\": 66,\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 62,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 65,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"name\": \"msg\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 70,\n\t\t\t\t\t\t\t\"end\": 71,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 81,\n\t\t\t\t\"end\": 83,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RenderTag\",\n\t\t\t\t\"start\": 83,\n\t\t\t\t\"end\": 101,\n\t\t\t\t\"expression\": {\n\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\"end\": 100,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\"column\": 17\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\t\"end\": 95,\n\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 9\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"name\": \"foo\"\n\t\t\t\t\t},\n\t\t\t\t\t\"arguments\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\"start\": 96,\n\t\t\t\t\t\t\t\"end\": 99,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\"column\": 16\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"name\": \"msg\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"optional\": false\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 27,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 18,\n\t\t\t\"end\": 18,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 27\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 8,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/template-shadowroot/input.svelte",
    "content": "<template shadowrootmode=\"open\">\n\t<p><slot></slot></p>\n</template>\n<template>\n\t<p><slot></slot></p>\n</template>\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/template-shadowroot/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 125,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 0,\n\t\t\t\t\"end\": 66,\n\t\t\t\t\"name\": \"template\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 1\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\"character\": 9\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\t\t\"start\": 10,\n\t\t\t\t\t\t\"end\": 31,\n\t\t\t\t\t\t\"name\": \"shadowrootmode\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 10,\n\t\t\t\t\t\t\t\t\"character\": 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\t\t\"column\": 24,\n\t\t\t\t\t\t\t\t\"character\": 24\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"value\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"start\": 26,\n\t\t\t\t\t\t\t\t\"end\": 30,\n\t\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\t\"raw\": \"open\",\n\t\t\t\t\t\t\t\t\"data\": \"open\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\t\t\"end\": 34,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 34,\n\t\t\t\t\t\t\t\"end\": 54,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 35\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 36\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 37,\n\t\t\t\t\t\t\t\t\t\t\"end\": 50,\n\t\t\t\t\t\t\t\t\t\t\"name\": \"slot\",\n\t\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\"character\": 38\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\"character\": 42\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 54,\n\t\t\t\t\t\t\t\"end\": 55,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 66,\n\t\t\t\t\"end\": 67,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 67,\n\t\t\t\t\"end\": 111,\n\t\t\t\t\"name\": \"template\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 68\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 4,\n\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\"character\": 76\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\"end\": 79,\n\t\t\t\t\t\t\t\"raw\": \"\\n\\t\",\n\t\t\t\t\t\t\t\"data\": \"\\n\\t\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\t\t\t\"start\": 79,\n\t\t\t\t\t\t\t\"end\": 99,\n\t\t\t\t\t\t\t\"name\": \"p\",\n\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 2,\n\t\t\t\t\t\t\t\t\t\"character\": 80\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\"column\": 3,\n\t\t\t\t\t\t\t\t\t\"character\": 81\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"SlotElement\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 82,\n\t\t\t\t\t\t\t\t\t\t\"end\": 95,\n\t\t\t\t\t\t\t\t\t\t\"name\": \"slot\",\n\t\t\t\t\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\"character\": 83\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\"character\": 87\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"attributes\": [],\n\t\t\t\t\t\t\t\t\t\t\"fragment\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\t\t\t\t\t\t\"nodes\": []\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 99,\n\t\t\t\t\t\t\t\"end\": 100,\n\t\t\t\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\t\t\t\"data\": \"\\n\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 111,\n\t\t\t\t\"end\": 112,\n\t\t\t\t\"raw\": \"\\n\",\n\t\t\t\t\"data\": \"\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"SlotElement\",\n\t\t\t\t\"start\": 112,\n\t\t\t\t\"end\": 125,\n\t\t\t\t\"name\": \"slot\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 113\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\"column\": 5,\n\t\t\t\t\t\t\"character\": 117\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": []\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/typescript-in-event-handler/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n</script>\n\n<button\n\ton:click={(e: MouseEvent) => {\n\t\tconst next: number = count + 1;\n\t\tcount = next;\n\t}}\n>clicks: {count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/samples/typescript-in-event-handler/output.json",
    "content": "{\n\t\"css\": null,\n\t\"js\": [],\n\t\"start\": 0,\n\t\"end\": 173,\n\t\"type\": \"Root\",\n\t\"fragment\": {\n\t\t\"type\": \"Fragment\",\n\t\t\"nodes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\"start\": 52,\n\t\t\t\t\"end\": 54,\n\t\t\t\t\"raw\": \"\\n\\n\",\n\t\t\t\t\"data\": \"\\n\\n\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"type\": \"RegularElement\",\n\t\t\t\t\"start\": 54,\n\t\t\t\t\"end\": 173,\n\t\t\t\t\"name\": \"button\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\"character\": 55\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 5,\n\t\t\t\t\t\t\"column\": 7,\n\t\t\t\t\t\t\"character\": 61\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"attributes\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 63,\n\t\t\t\t\t\t\"end\": 147,\n\t\t\t\t\t\t\"type\": \"OnDirective\",\n\t\t\t\t\t\t\"name\": \"click\",\n\t\t\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 1,\n\t\t\t\t\t\t\t\t\"character\": 63\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\"column\": 9,\n\t\t\t\t\t\t\t\t\"character\": 71\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\"type\": \"ArrowFunctionExpression\",\n\t\t\t\t\t\t\t\"start\": 73,\n\t\t\t\t\t\t\t\"end\": 146,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\"column\": 11\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": null,\n\t\t\t\t\t\t\t\"expression\": false,\n\t\t\t\t\t\t\t\"generator\": false,\n\t\t\t\t\t\t\t\"async\": false,\n\t\t\t\t\t\t\t\"params\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 74,\n\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"e\",\n\t\t\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 75,\n\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TSTypeReference\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"typeName\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 77,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 87,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 25\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"MouseEvent\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"body\": {\n\t\t\t\t\t\t\t\t\"type\": \"BlockStatement\",\n\t\t\t\t\t\t\t\t\"start\": 92,\n\t\t\t\t\t\t\t\t\"end\": 146,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 6,\n\t\t\t\t\t\t\t\t\t\t\"column\": 30\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 9,\n\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"body\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 96,\n\t\t\t\t\t\t\t\t\t\t\"end\": 127,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 33\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 102,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 126,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 102,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 114,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 8\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"next\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TSTypeAnnotation\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 106,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 114,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 12\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"typeAnnotation\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"TSNumberKeyword\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 108,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 114,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"BinaryExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 126,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 117,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 122,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 28\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"count\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"operator\": \"+\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 125,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 126,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 31\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 32\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"raw\": \"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\"kind\": \"const\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"ExpressionStatement\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\"end\": 143,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\t\t\t\"type\": \"AssignmentExpression\",\n\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\"end\": 142,\n\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\t\t\t\t\"left\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 130,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 135,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 2\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 7\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"count\"\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"right\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"start\": 138,\n\t\t\t\t\t\t\t\t\t\t\t\t\"end\": 142,\n\t\t\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 14\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\"name\": \"next\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"modifiers\": []\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"fragment\": {\n\t\t\t\t\t\"type\": \"Fragment\",\n\t\t\t\t\t\"nodes\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\t\"start\": 149,\n\t\t\t\t\t\t\t\"end\": 157,\n\t\t\t\t\t\t\t\"raw\": \"clicks: \",\n\t\t\t\t\t\t\t\"data\": \"clicks: \"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"ExpressionTag\",\n\t\t\t\t\t\t\t\"start\": 157,\n\t\t\t\t\t\t\t\"end\": 164,\n\t\t\t\t\t\t\t\"expression\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 158,\n\t\t\t\t\t\t\t\t\"end\": 163,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 10,\n\t\t\t\t\t\t\t\t\t\t\"column\": 15\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"count\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\t\"options\": null,\n\t\"instance\": {\n\t\t\"type\": \"Script\",\n\t\t\"start\": 0,\n\t\t\"end\": 52,\n\t\t\"context\": \"default\",\n\t\t\"content\": {\n\t\t\t\"type\": \"Program\",\n\t\t\t\"start\": 18,\n\t\t\t\"end\": 43,\n\t\t\t\"loc\": {\n\t\t\t\t\"start\": {\n\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\"column\": 0\n\t\t\t\t},\n\t\t\t\t\"end\": {\n\t\t\t\t\t\"line\": 3,\n\t\t\t\t\t\"column\": 9\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"body\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"VariableDeclaration\",\n\t\t\t\t\t\"start\": 20,\n\t\t\t\t\t\"end\": 42,\n\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\"column\": 23\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"declarations\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"type\": \"VariableDeclarator\",\n\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"id\": {\n\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\"start\": 24,\n\t\t\t\t\t\t\t\t\"end\": 29,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 10\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"name\": \"count\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"init\": {\n\t\t\t\t\t\t\t\t\"type\": \"CallExpression\",\n\t\t\t\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\t\t\t\"end\": 41,\n\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\"column\": 22\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"callee\": {\n\t\t\t\t\t\t\t\t\t\"type\": \"Identifier\",\n\t\t\t\t\t\t\t\t\t\"start\": 32,\n\t\t\t\t\t\t\t\t\t\"end\": 38,\n\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 13\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\"column\": 19\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"name\": \"$state\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"arguments\": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"type\": \"Literal\",\n\t\t\t\t\t\t\t\t\t\t\"start\": 39,\n\t\t\t\t\t\t\t\t\t\t\"end\": 40,\n\t\t\t\t\t\t\t\t\t\t\"loc\": {\n\t\t\t\t\t\t\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 20\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\"line\": 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\"column\": 21\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"value\": 0,\n\t\t\t\t\t\t\t\t\t\t\"raw\": \"0\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\"optional\": false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"kind\": \"let\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"sourceType\": \"module\"\n\t\t},\n\t\t\"attributes\": [\n\t\t\t{\n\t\t\t\t\"type\": \"Attribute\",\n\t\t\t\t\"start\": 8,\n\t\t\t\t\"end\": 17,\n\t\t\t\t\"name\": \"lang\",\n\t\t\t\t\"name_loc\": {\n\t\t\t\t\t\"start\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 8,\n\t\t\t\t\t\t\"character\": 8\n\t\t\t\t\t},\n\t\t\t\t\t\"end\": {\n\t\t\t\t\t\t\"line\": 1,\n\t\t\t\t\t\t\"column\": 12,\n\t\t\t\t\t\t\"character\": 12\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"value\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"start\": 14,\n\t\t\t\t\t\t\"end\": 16,\n\t\t\t\t\t\t\"type\": \"Text\",\n\t\t\t\t\t\t\"raw\": \"ts\",\n\t\t\t\t\t\t\"data\": \"ts\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/parser-modern/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert, it } from 'vitest';\nimport { parse, print } from 'svelte/compiler';\nimport { try_load_json } from '../helpers.js';\nimport { suite, type BaseTest } from '../suite.js';\nimport { walk } from 'zimmerframe';\nimport type { AST } from 'svelte/compiler';\n\ninterface ParserTest extends BaseTest {}\n\nconst { test, run } = suite<ParserTest>(async (config, cwd) => {\n\tconst loose = cwd.split('/').pop()!.startsWith('loose-');\n\n\tconst input = fs\n\t\t.readFileSync(`${cwd}/input.svelte`, 'utf-8')\n\t\t.replace(/\\s+$/, '')\n\t\t.replace(/\\r/g, '');\n\n\tconst actual = JSON.parse(\n\t\tJSON.stringify(\n\t\t\tparse(input, {\n\t\t\t\tmodern: true,\n\t\t\t\tloose: cwd.split('/').pop()!.startsWith('loose-')\n\t\t\t})\n\t\t)\n\t);\n\n\t// run `UPDATE_SNAPSHOTS=true pnpm test parser` to update parser tests\n\tif (process.env.UPDATE_SNAPSHOTS) {\n\t\tfs.writeFileSync(`${cwd}/output.json`, JSON.stringify(actual, null, '\\t') + '\\n');\n\t} else {\n\t\tfs.writeFileSync(`${cwd}/_actual.json`, JSON.stringify(actual, null, '\\t'));\n\n\t\tconst expected = try_load_json(`${cwd}/output.json`);\n\n\t\tif (!expected.comments) {\n\t\t\tdelete actual.comments;\n\t\t}\n\n\t\tassert.deepEqual(actual, expected);\n\t}\n\n\tif (!loose) {\n\t\tconst printed = print(actual);\n\t\tconst reparsed = JSON.parse(\n\t\t\tJSON.stringify(\n\t\t\t\tparse(printed.code, {\n\t\t\t\t\tmodern: true,\n\t\t\t\t\tloose\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tfs.writeFileSync(`${cwd}/_actual.svelte`, printed.code);\n\n\t\tif (!actual.comments) {\n\t\t\tdelete reparsed.comments;\n\t\t}\n\n\t\tassert.deepEqual(clean(actual), clean(reparsed));\n\t}\n});\n\nfunction clean(ast: AST.SvelteNode) {\n\treturn walk(ast, null, {\n\t\t_(node, context) {\n\t\t\t// @ts-ignore\n\t\t\tdelete node.start;\n\t\t\t// @ts-ignore\n\t\t\tdelete node.end;\n\t\t\t// @ts-ignore\n\t\t\tdelete node.loc;\n\t\t\t// @ts-ignore\n\t\t\tdelete node.name_loc;\n\t\t\t// @ts-ignore\n\t\t\tdelete node.leadingComments;\n\t\t\t// @ts-ignore\n\t\t\tdelete node.trailingComments;\n\n\t\t\tcontext.next();\n\t\t},\n\t\tStyleSheet(node, context) {\n\t\t\treturn {\n\t\t\t\ttype: node.type,\n\t\t\t\tattributes: node.attributes.map((attribute) => context.visit(attribute)),\n\t\t\t\tchildren: node.children.map((child) => context.visit(child)),\n\t\t\t\tcontent: {}\n\t\t\t} as AST.SvelteNode;\n\t\t},\n\t\tFragment(node, context) {\n\t\t\tconst nodes: AST.SvelteNode[] = [];\n\n\t\t\tfor (let i = 0; i < node.nodes.length; i += 1) {\n\t\t\t\tlet child = node.nodes[i];\n\n\t\t\t\tif (child.type === 'Text') {\n\t\t\t\t\tchild = {\n\t\t\t\t\t\t...child,\n\t\t\t\t\t\t// trim multiple whitespace to single space\n\t\t\t\t\t\tdata: child.data.replace(/[^\\S]+/g, ' '),\n\t\t\t\t\t\traw: child.raw.replace(/[^\\S]+/g, ' ')\n\t\t\t\t\t};\n\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tchild.data = child.data.trimStart();\n\t\t\t\t\t\tchild.raw = child.raw.trimStart();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (i === node.nodes.length - 1) {\n\t\t\t\t\t\tchild.data = child.data.trimEnd();\n\t\t\t\t\t\tchild.raw = child.raw.trimEnd();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (child.data === '') continue;\n\t\t\t\t}\n\n\t\t\t\tnodes.push(context.visit(child));\n\t\t\t}\n\n\t\t\treturn { ...node, nodes } as AST.Fragment;\n\t\t}\n\t});\n}\n\nexport { test };\n\nawait run(__dirname);\n\nit('Strips BOM from the input', () => {\n\tconst input = '\\uFEFF<div></div>';\n\tconst actual = parse(input, { modern: true });\n\tassert.deepEqual(JSON.parse(JSON.stringify(actual.fragment)), {\n\t\ttype: 'Fragment',\n\t\tnodes: [\n\t\t\t{\n\t\t\t\tattributes: [],\n\t\t\t\tend: 11,\n\t\t\t\tfragment: {\n\t\t\t\t\tnodes: [],\n\t\t\t\t\ttype: 'Fragment'\n\t\t\t\t},\n\t\t\t\tname_loc: {\n\t\t\t\t\tend: {\n\t\t\t\t\t\tcharacter: 4,\n\t\t\t\t\t\tcolumn: 4,\n\t\t\t\t\t\tline: 1\n\t\t\t\t\t},\n\t\t\t\t\tstart: {\n\t\t\t\t\t\tcharacter: 1,\n\t\t\t\t\t\tcolumn: 1,\n\t\t\t\t\t\tline: 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tname: 'div',\n\t\t\t\tstart: 0,\n\t\t\t\ttype: 'RegularElement'\n\t\t\t}\n\t\t]\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/attributes-with-closing-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: ({ attributes }) =>\n\t\t\ttypeof attributes.generics === 'string' && attributes.generics.includes('>')\n\t\t\t\t? { code: '' }\n\t\t\t\t: undefined\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/attributes-with-closing-tag/input.svelte",
    "content": "<script generics=\"T extends Record<string, string>\">\n\tfoo {}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/attributes-with-closing-tag/output.svelte",
    "content": "<script generics=\"T extends Record<string, string>\"></script>\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/attributes-with-equals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ attributes }) => {\n\t\t\tif (typeof attributes.foo === 'string' && attributes.foo.includes('=')) {\n\t\t\t\treturn { code: '' };\n\t\t\t}\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/attributes-with-equals/input.svelte",
    "content": "<style foo=\"bar=baz\">\n\tfoo {}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/attributes-with-equals/output.svelte",
    "content": "<style foo=\"bar=baz\"></style>\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/comments/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tscript: ({ content }) => ({ code: content.replace(/one/g, 'two') }),\n\t\t\tstyle: ({ content }) => ({ code: content.replace(/one/g, 'three') })\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/comments/input.svelte",
    "content": "<style>\n\tone\n</style>\n\n<script>\n\tone\n</script>\n\n<!-- <style>\n\tone\n</style> -->\n\n<!-- <script>\n\tone\n</script> -->\n\n<style>\n<!-- one -->\n</style>\n\n<script>\n<!-- one -->\n</script>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/comments/output.svelte",
    "content": "<style>\n\tthree\n</style>\n\n<script>\n\ttwo\n</script>\n\n<!-- <style>\n\tone\n</style> -->\n\n<!-- <script>\n\tone\n</script> -->\n\n<style>\n<!-- three -->\n</style>\n\n<script>\n<!-- two -->\n</script>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ content }) => {\n\t\t\t/** @type {string[]} */\n\t\t\tconst dependencies = [];\n\t\t\tconst code = content.replace(/@import '(.+)';/g, (match, $1) => {\n\t\t\t\tdependencies.push($1);\n\t\t\t\treturn '/* removed */';\n\t\t\t});\n\n\t\t\treturn { code, dependencies };\n\t\t}\n\t},\n\n\tdependencies: ['./foo.css']\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/dependencies/input.svelte",
    "content": "<style>\n\t@import './foo.css';\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/dependencies/output.svelte",
    "content": "<style>\n\t/* removed */\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/empty-sourcemap/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ content }) => {\n\t\t\treturn { code: content, map: { mappings: '' } };\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/empty-sourcemap/input.svelte",
    "content": "<div class=\"foo\">bar</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/empty-sourcemap/output.svelte",
    "content": "<div class=\"foo\">bar</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/filename/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\treturn {\n\t\t\t\tcode: content.replace('__MARKUP_FILENAME__', filename)\n\t\t\t};\n\t\t},\n\t\tstyle: ({ content, filename = '' }) => {\n\t\t\treturn {\n\t\t\t\tcode: content.replace('__STYLE_FILENAME__', filename)\n\t\t\t};\n\t\t},\n\t\tscript: ({ content, filename = '' }) => {\n\t\t\treturn {\n\t\t\t\tcode: content.replace('__SCRIPT_FILENAME__', filename)\n\t\t\t};\n\t\t}\n\t},\n\toptions: {\n\t\tfilename: 'file.svelte'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/filename/input.svelte",
    "content": "<h1>Hello __MARKUP_FILENAME__!</h1>\n<style>.red { color: __STYLE_FILENAME__; }</style>\n<script>console.log('__SCRIPT_FILENAME__');</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/filename/output.svelte",
    "content": "<h1>Hello file.svelte!</h1>\n<style>.red { color: file.svelte; }</style>\n<script>console.log('file.svelte');</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/ignores-null/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: () => {}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/ignores-null/input.svelte",
    "content": "<script>\n\tconsole.log('ignore me');\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/ignores-null/output.svelte",
    "content": "<script>\n\tconsole.log('ignore me');\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/markup/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tmarkup: ({ content }) => {\n\t\t\treturn {\n\t\t\t\tcode: content.replace('__NAME__', 'world')\n\t\t\t};\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/markup/input.svelte",
    "content": "<h1>Hello __NAME__!</h1>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/markup/output.svelte",
    "content": "<h1>Hello world!</h1>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/multiple-preprocessors/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tmarkup: ({ content }) => ({ code: content.replace(/one/g, 'two') }),\n\t\t\tscript: ({ content }) => ({ code: content.replace(/two/g, 'three') }),\n\t\t\tstyle: ({ content }) => ({ code: content.replace(/three/g, 'style') })\n\t\t},\n\t\t{\n\t\t\tmarkup: ({ content }) => ({ code: content.replace(/two/g, 'three') }),\n\t\t\tscript: ({ content }) => ({ code: content.replace(/three/g, 'script') }),\n\t\t\tstyle: ({ content }) => ({ code: content.replace(/three/g, 'style') })\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/multiple-preprocessors/input.svelte",
    "content": "<p>one</p>\n\n<style>\n\t.one {\n\t\tcolor: red;\n\t}\n</style>\n\n<script>\n\tconsole.log('one');\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/multiple-preprocessors/output.svelte",
    "content": "<p>three</p>\n\n<style>\n\t.style {\n\t\tcolor: red;\n\t}\n</style>\n\n<script>\n\tconsole.log('script');\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/partial-names/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: () => ({ code: '' }),\n\t\tstyle: () => ({ code: '' })\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/partial-names/input.svelte",
    "content": "<script-foo>\n\tfoo\n</script-foo>\n<script>\n\t// bar\n</script>\n<style-foo>\n\tfoo\n</style-foo>\n<style>\n\tbar {}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/partial-names/output.svelte",
    "content": "<script-foo>\n\tfoo\n</script-foo>\n<script></script>\n<style-foo>\n\tfoo\n</style-foo>\n<style></style>\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: ({ content, filename }) => {\n\t\t\tconst s = new MagicString(content);\n\t\t\ts.overwrite(\n\t\t\t\tcontent.indexOf('__THE_ANSWER__'),\n\t\t\t\tcontent.indexOf('__THE_ANSWER__') + '__THE_ANSWER__'.length,\n\t\t\t\t'42'\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcode: s.toString(),\n\t\t\t\tmap: s.generateMap({ hires: true, file: filename })\n\t\t\t};\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script/expected_map.json",
    "content": "{\n  \"version\": 3,\n  \"mappings\": \"AAAA,CAAC,MAAM;AACP,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAc,CAAC;AAC5B,CAAC,CAAC,MAAM\",\n  \"names\": [],\n  \"sources\": [\n    \"input.svelte\"\n  ]\n}"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script/input.svelte",
    "content": "<script>\n\tconsole.log(__THE_ANSWER__);\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script/output.svelte",
    "content": "<script>\n\tconsole.log(42);\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: ({ content }) => {\n\t\t\treturn {\n\t\t\t\tcode: content.toLowerCase()\n\t\t\t};\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script-multiple/input.svelte",
    "content": "<script>\n\tREPLACEME\n</script>\n<style>\n\tSHOULD NOT BE REPLACED\n</style>\n<script>\n\tREPLACEMETOO\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script-multiple/output.svelte",
    "content": "<script>\n\treplaceme\n</script>\n<style>\n\tSHOULD NOT BE REPLACED\n</style>\n<script>\n\treplacemetoo\n</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script-self-closing/_config.js",
    "content": "import * as assert from 'node:assert';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: ({ content, attributes }) => {\n\t\t\tassert.equal(content, '');\n\t\t\treturn {\n\t\t\t\tcode: `console.log(\"${attributes['the-answer']}\");`\n\t\t\t};\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script-self-closing/input.svelte",
    "content": "<script the-answer=\"42\"/>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/script-self-closing/output.svelte",
    "content": "<script the-answer=\"42\">console.log(\"42\");</script>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ content }) => {\n\t\t\treturn {\n\t\t\t\tcode: content.replace('$brand', 'purple')\n\t\t\t};\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style/input.svelte",
    "content": "<div class='brand-color'>$brand</div>\n\n<style>\n\t.brand-color {\n\t\tcolor: $brand;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style/output.svelte",
    "content": "<div class='brand-color'>$brand</div>\n\n<style>\n\t.brand-color {\n\t\tcolor: purple;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-async/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ content }) => {\n\t\t\treturn Promise.resolve({\n\t\t\t\tcode: content.replace('$brand', 'purple')\n\t\t\t});\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-async/input.svelte",
    "content": "<div class='brand-color'>$brand</div>\n\n<style>\n\t.brand-color {\n\t\tcolor: $brand;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-async/output.svelte",
    "content": "<div class='brand-color'>$brand</div>\n\n<style>\n\t.brand-color {\n\t\tcolor: purple;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes/_config.js",
    "content": "import * as assert from 'node:assert';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ attributes }) => {\n\t\t\tassert.deepEqual(attributes, {\n\t\t\t\ttype: 'text/scss',\n\t\t\t\t'data-foo': 'bar',\n\t\t\t\tbool: true\n\t\t\t});\n\t\t\treturn { code: 'PROCESSED' };\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes/expected_map.json",
    "content": "{\n  \"version\": 3,\n  \"mappings\": \"AAAA,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,UAAO,CAAC,CAAC,KAAK\",\n  \"names\": [],\n  \"sources\": [\n    \"input.svelte\"\n  ]\n}"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes/input.svelte",
    "content": "<style type='text/scss' data-foo=\"bar\" bool>BEFORE</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes/output.svelte",
    "content": "<style type='text/scss' data-foo=\"bar\" bool>PROCESSED</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified/_config.js",
    "content": "import * as assert from 'node:assert';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ attributes }) => {\n\t\t\tassert.deepEqual(attributes, {\n\t\t\t\tlang: 'scss',\n\t\t\t\t'data-foo': 'bar',\n\t\t\t\tbool: true\n\t\t\t});\n\t\t\treturn { code: 'PROCESSED', attributes: { sth: 'else' } };\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified/expected_map.json",
    "content": "{\n  \"version\": 3,\n  \"mappings\": \"AAAA;;AAEA,MAAM,WAAiC,UAAM,CAAC,CAAC,KAAK;;AAEpD\",\n  \"names\": [],\n  \"sources\": [\n    \"input.svelte\"\n  ]\n}"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified/input.svelte",
    "content": "foo\n\n<style lang='scss' data-foo=\"bar\" bool>BEFORE</style>\n\nbar\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified/output.svelte",
    "content": "foo\n\n<style sth=\"else\">PROCESSED</style>\n\nbar\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified-longer/_config.js",
    "content": "import * as assert from 'node:assert';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ attributes }) => {\n\t\t\tassert.deepEqual(attributes, {\n\t\t\t\tlang: 'scss'\n\t\t\t});\n\t\t\treturn { code: 'PROCESSED', attributes: { sth: 'wayyyyyyyyyyyyy looooooonger' } };\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified-longer/expected_map.json",
    "content": "{\n  \"version\": 3,\n  \"mappings\": \"AAAA;;AAEA,MAAM,mCAAa,UAAM,CAAC,CAAC,KAAK;;AAEhC\",\n  \"names\": [],\n  \"sources\": [\n    \"input.svelte\"\n  ]\n}"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified-longer/input.svelte",
    "content": "foo\n\n<style lang='scss'>BEFORE</style>\n\nbar\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-attributes-modified-longer/output.svelte",
    "content": "foo\n\n<style sth=\"wayyyyyyyyyyyyy looooooonger\">PROCESSED</style>\n\nbar\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-self-closing/_config.js",
    "content": "import * as assert from 'node:assert';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ content, attributes: { color } }) => {\n\t\t\tassert.equal(content, '');\n\t\t\treturn {\n\t\t\t\tcode: `div { color: ${color}; }`\n\t\t\t};\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-self-closing/input.svelte",
    "content": "<div class='brand-color'>$brand</div>\n\n<style color=\"red\"/>"
  },
  {
    "path": "packages/svelte/tests/preprocess/samples/style-self-closing/output.svelte",
    "content": "<div class='brand-color'>$brand</div>\n\n<style color=\"red\">div { color: red; }</style>"
  },
  {
    "path": "packages/svelte/tests/preprocess/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { preprocess } from 'svelte/compiler';\nimport { expect } from 'vitest';\nimport { suite, type BaseTest } from '../suite.js';\n\ninterface PreprocessTest extends BaseTest {\n\toptions?: { filename: string };\n\tpreprocess:\n\t\t| import('svelte/compiler').PreprocessorGroup\n\t\t| import('svelte/compiler').PreprocessorGroup[];\n\tdependencies?: string[];\n}\n\nconst { test, run } = suite<PreprocessTest>(async (config, cwd) => {\n\tconst input = fs.readFileSync(`${cwd}/input.svelte`, 'utf-8').replace(/\\r\\n/g, '\\n');\n\n\tconst result = await preprocess(\n\t\tinput,\n\t\tconfig.preprocess || {},\n\t\tconfig.options || { filename: 'input.svelte' }\n\t);\n\tfs.writeFileSync(`${cwd}/_actual.html`, result.code);\n\n\tif (result.map) {\n\t\tfs.writeFileSync(`${cwd}/_actual.html.map`, JSON.stringify(result.map, null, 2));\n\t}\n\n\tawait expect(result.code).toMatchFileSnapshot(`${cwd}/output.svelte`);\n\n\texpect(result.dependencies).toEqual(config.dependencies || []);\n\n\tif (fs.existsSync(`${cwd}/expected_map.json`)) {\n\t\tdelete (result.map as any).ignoreList;\n\t\tconst expected_map = JSON.parse(fs.readFileSync(`${cwd}/expected_map.json`, 'utf-8'));\n\t\t// You can use https://sokra.github.io/source-map-visualization/#custom to visualize the source map\n\t\texpect(JSON.parse(JSON.stringify(result.map))).toEqual(expected_map);\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/animate-directive/input.svelte",
    "content": "<div animate:flip>{item}</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/animate-directive/output.svelte",
    "content": "<div animate:flip>{item}</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/attach-tag/input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\n\tconst myAttachment: Attachment = (element) => {\n\t\tconsole.log(element.nodeName);\n\n\t\treturn () => {\n\t\t\tconsole.log('cleaning up');\n\t\t};\n\t};\n</script>\n\n<div {@attach myAttachment}>...</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/attach-tag/output.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Attachment } from 'svelte/attachments';\n\n\tconst myAttachment: Attachment = (element) => {\n\t\tconsole.log(element.nodeName);\n\n\t\treturn () => {\n\t\t\tconsole.log('cleaning up');\n\t\t};\n\t};\n</script>\n\n<div {@attach myAttachment}>...</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/attribute/input.svelte",
    "content": "<div class=\"foo\" data-foo=\"bar\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/attribute/output.svelte",
    "content": "<div class=\"foo\" data-foo=\"bar\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/await-block/input.svelte",
    "content": "{#await promise}\n\t<!-- promise is pending -->\n\t<p>waiting for the promise to resolve...</p>\n{:then value}\n\t<!-- promise was fulfilled or not a Promise -->\n\t<p>The value is {value}</p>\n{:catch error}\n\t<!-- promise was rejected -->\n\t<p>Something went wrong: {error.message}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/await-block/output.svelte",
    "content": "{#await promise}\n\t<!-- promise is pending -->\n\t<p>waiting for the promise to resolve...</p>\n{:then value}\n\t<!-- promise was fulfilled or not a Promise -->\n\t<p>The value is {value}</p>\n{:catch error}\n\t<!-- promise was rejected -->\n\t<p>Something went wrong: {error.message}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/bind-directive/input.svelte",
    "content": "<input bind:value={name} />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/bind-directive/output.svelte",
    "content": "<input bind:value={name} />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/block/input.svelte",
    "content": "{#if   condition} yes {:else} no {/if}\n\n{#each items as item, i}\n  <p>{i}: {item}</p>\n{/each}\n\n{#if condition}yes{:else}no{/if}\n\n{#each items as item, i}<p>{i}: {item}</p>{/each}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/block/output.svelte",
    "content": "{#if condition}\n\tyes\n{:else}\n\tno\n{/if}\n\n{#each items as item, i}\n\t<p>{i}: {item}</p>\n{/each}\n\n{#if condition}\n\tyes\n{:else}\n\tno\n{/if}\n\n{#each items as item, i}\n\t<p>{i}: {item}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/block-element-separation/input.svelte",
    "content": "<svelte:head><title>Page Title</title></svelte:head><div>no space</div>\n<Component /><Component />\n<Component><span>child</span></Component><div>after component</div>\n<svelte:boundary><div>boundary content</div></svelte:boundary><div>after boundary</div>\n<!--comment--><div>after comment</div>\n<div>before comment</div><!--comment-->\n{#each items as item}<div>{item}</div>{/each}<div>after each</div>\n{@render children()}<div>after render</div>\n<div>before render</div>{@render children()}\n\n<Component />   <div>with spaces</div>\n<Component><span>child</span></Component>   <div>spaces after component</div>\n<!--comment-->   <div>spaces after comment</div>\n{@render children()}   <div>spaces after render</div>\n\n<Component />\n<div>newline between</div>\n<!--comment-->\n<div>newline after comment</div>\n{#each items as item}\n<div>{item}</div>\n{/each}\n<div>newline after each</div>\n{@render children()}\n<div>after render</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/block-element-separation/output.svelte",
    "content": "<svelte:head><title>Page Title</title></svelte:head>\n<div>no space</div>\n<Component />\n<Component />\n<Component><span>child</span></Component>\n<div>after component</div>\n<svelte:boundary><div>boundary content</div></svelte:boundary>\n<div>after boundary</div>\n<!--comment-->\n<div>after comment</div>\n<div>before comment</div>\n<!--comment-->\n\n{#each items as item}\n\t<div>{item}</div>\n{/each}\n\n<div>after each</div>\n{@render children()}\n<div>after render</div>\n<div>before render</div>\n{@render children()}\n<Component />\n<div>with spaces</div>\n<Component><span>child</span></Component>\n<div>spaces after component</div>\n<!--comment-->\n<div>spaces after comment</div>\n{@render children()}\n<div>spaces after render</div>\n<Component />\n<div>newline between</div>\n<!--comment-->\n<div>newline after comment</div>\n\n{#each items as item}\n\t<div>{item}</div>\n{/each}\n\n<div>newline after each</div>\n{@render children()}\n<div>after render</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/class-directive/input.svelte",
    "content": "<script>\n    let active = true;\n    let foo = false;\n</script>\n\n<div class:active class:bar={foo}>\n    Hello world!\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/class-directive/output.svelte",
    "content": "<script>\n\tlet active = true;\n\tlet foo = false;\n</script>\n\n<div class:active class:bar={foo}>Hello world!</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/comment/input.svelte",
    "content": "<!-- inline -->\n\n<!-- \n    multiline\n-->\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/comment/output.svelte",
    "content": "<!-- inline --><!-- \n    multiline\n-->\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/component/input.svelte",
    "content": "<script>\n    import C from './C.svelte';\n</script>\n\n<C foo=\"bar\" />\n<C foo=\"bar\">\n    <span>Hello World</span>\n</C>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/component/output.svelte",
    "content": "<script>\n\timport C from './C.svelte';\n</script>\n\n<C foo=\"bar\" />\n<C foo=\"bar\"><span>Hello World</span></C>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/const-tag/input.svelte",
    "content": "<script>\n    const boxes = [];\n</script>\n\n{#each boxes as box}\n\t{@const area = box.width * box.height}\n\t{box.width} * {box.height} = {area}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/const-tag/output.svelte",
    "content": "<script>\n\tconst boxes = [];\n</script>\n\n{#each boxes as box}\n\t{@const area = box.width * box.height}\n\t{box.width} * {box.height} = {area}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/each-block/input.svelte",
    "content": "{#each items as { id, name, qty }, i (id)}\n\t<li>{i + 1}: {name} x {qty}</li>\n{/each}\n\n{#each objects as { id, ...rest }}\n\t<li><span>{id}</span><MyComponent {...rest} /></li>\n{/each}\n\n{#each expression}...{/each}\n\n{#each todos as todo}\n\t<p>{todo.text}</p>\n{:else}\n\t<p>No tasks today!</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/each-block/output.svelte",
    "content": "{#each items as { id, name, qty }, i (id)}\n\t<li>{i + 1}: {name} x {qty}</li>\n{/each}\n\n{#each objects as { id, ...rest }}\n\t<li><span>{id}</span><MyComponent {...rest} /></li>\n{/each}\n\n{#each expression}\n\t...\n{/each}\n\n{#each todos as todo}\n\t<p>{todo.text}</p>\n{:else}\n\t<p>No tasks today!</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/expression-tag/input.svelte",
    "content": "<span>{name}</span>\n<span>{count + 1}</span>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/expression-tag/output.svelte",
    "content": "<span>{name}</span><span>{count + 1}</span>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/formatting/input.svelte",
    "content": "<script>import { setLocale } from '$lib/paraglide/runtime';import { m } from '$lib/paraglide/messages.js';</script>\n\n<h1>{m.hello_world({ name: 'SvelteKit User' })}</h1><div><button onclick={() => setLocale('en')}>en</button><button\tonclick={() => setLocale('es')}>es</button></div><p>If you use VSCode, install the <a href=\"https://marketplace.visualstudio.com/items?itemName=inlang.vs-code-extension\" target=\"_blank\">Sherlock i18n extension</a>for a better i18n experience.</p>\n\n<Component><div><button>Hello, this is a test</button><button>Hello, this is a test</button></div></Component>\n<Component><button>Hello, this is a test</button><button>Hello, this is a test</button></Component>\n<button class=\"foo bar\" aria-label=\"click\" onclick={() => console.log(\"clicked\")}>Click me!</button>\n<button class=\"foo bar\" aria-label=\"click\" onclick={() => console.log(\"clicked\")}><span>some fancy looking</span><span>really long button text</span></button>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/formatting/output.svelte",
    "content": "<script>\n\timport { setLocale } from '$lib/paraglide/runtime';\n\timport { m } from '$lib/paraglide/messages.js';\n</script>\n\n<h1>{m.hello_world({ name: 'SvelteKit User' })}</h1>\n\n<div>\n\t<button onclick={() => setLocale('en')}>en</button>\n\t<button onclick={() => setLocale('es')}>es</button>\n</div>\n\n<p>\n\tIf you use VSCode, install the \n\n\t<a\n\t\thref=\"https://marketplace.visualstudio.com/items?itemName=inlang.vs-code-extension\"\n\t\ttarget=\"_blank\"\n\t>Sherlock i18n extension</a>\n\n\tfor a better i18n experience.\n</p>\n\n<Component>\n\t<div>\n\t\t<button>Hello, this is a test</button>\n\t\t<button>Hello, this is a test</button>\n\t</div>\n</Component>\n\n<Component>\n\t<button>Hello, this is a test</button>\n\t<button>Hello, this is a test</button>\n</Component>\n\n<button\n\tclass=\"foo bar\"\n\taria-label=\"click\"\n\tonclick={() => console.log(\"clicked\")}\n>Click me!</button>\n\n<button\n\tclass=\"foo bar\"\n\taria-label=\"click\"\n\tonclick={() => console.log(\"clicked\")}\n>\n\t<span>some fancy looking</span>\n\t<span>really long button text</span>\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/html-document/input.svelte",
    "content": "<!doctype html>\n<html>\n    <head>\n        <meta charset=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n        <title>Svelte App</title>\n    </head>\n    <body>\n        <div>Hello World</div>\n    </body>\n</html>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/html-document/output.svelte",
    "content": "<!doctype html>\n\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<meta\n\t\t\tname=\"viewport\"\n\t\t\tcontent=\"width=device-width, initial-scale=1.0\"\n\t\t/>\n\n\t\t<title>Svelte App</title>\n\t</head>\n\n\t<body><div>Hello World</div></body>\n</html>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/html-tag/input.svelte",
    "content": "<article>\n\t{@html content}\n</article>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/html-tag/output.svelte",
    "content": "<article>{@html content}</article>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/if-block/input.svelte",
    "content": "{#if porridge.temperature > 100}\n\t<p>too hot!</p>\n{:else if 80 > porridge.temperature}\n\t<p>too cold!</p>\n{:else}\n\t<p>just right!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/if-block/output.svelte",
    "content": "{#if porridge.temperature > 100}\n\t<p>too hot!</p>\n{:else if 80 > porridge.temperature}\n\t<p>too cold!</p>\n{:else}\n\t<p>just right!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/key-block/input.svelte",
    "content": "{#key value}\n\t<Component />\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/key-block/output.svelte",
    "content": "{#key value}\n\t<Component />\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/let-directive/input.svelte",
    "content": "<FancyList {items} let:item={processed}>\n\t<div>{processed.text}</div>\n</FancyList>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/let-directive/output.svelte",
    "content": "<FancyList items={items} let:item={processed}><div>{processed.text}</div></FancyList>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/on-directive/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = 0;\n\n\tfunction handleClick(event: MouseEvent) {\n\t\tcount += 1;\n\t}\n</script>\n\n<button on:click|preventDefault={handleClick}>\n\tcount: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/on-directive/output.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = 0;\n\n\tfunction handleClick(event: MouseEvent) {\n\t\tcount += 1;\n\t}\n</script>\n\n<button on:click|preventDefault={handleClick}>count: {count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/regular-element/input.svelte",
    "content": "<div><a href=\"/foo\">bar</a></div>\n<br />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/regular-element/output.svelte",
    "content": "<div><a href=\"/foo\">bar</a></div><br />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/render-tag/input.svelte",
    "content": "{#snippet sum(a, b)}\n\t<p>{a} + {b} = {a + b}</p>\n{/snippet}\n\n{@render sum(1, 2)}\n{@render sum(3, 4)}\n{@render sum(5, 6)}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/render-tag/output.svelte",
    "content": "{#snippet sum(a, b)}\n\t<p>{a} + {b} = {a + b}</p>\n{/snippet}\n\n{@render sum(1, 2)}\n{@render sum(3, 4)}\n{@render sum(5, 6)}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/script/input.svelte",
    "content": "<script lang=\"ts\" module>\n    console.log('hello world');\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/script/output.svelte",
    "content": "<script lang=\"ts\" module>\n\tconsole.log('hello world');\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/slot-element/input.svelte",
    "content": "<div class=\"modal\">\n\t<slot></slot>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/slot-element/output.svelte",
    "content": "<div class=\"modal\"><slot></slot></div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/snippet-block/input.svelte",
    "content": "{#snippet name(param1, param2, paramN)}\n    Foo\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/snippet-block/output.svelte",
    "content": "{#snippet name(param1, param2, paramN)}\n\tFoo\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/spread-attribute/input.svelte",
    "content": "<div {...props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/spread-attribute/output.svelte",
    "content": "<div {...props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/style/input.svelte",
    "content": "<style>\n  .foo {\n    color: red;\n  }\n\n  .foo.bar {\n    color: blue;\n  }\n\n  @media (max-width: 600px) {\n    .box {\n      display: none;\n    }\n  }\n\n\n  @keyframes fade {\n    from { opacity: 0; }\n    50% { opacity: 0.5; }\n    to   { opacity: 1; }\n  }\n\n\n  @font-face {\n    font-family: \"MyFont\";\n    src: url(\"/fonts/MyFont.woff2\") format(\"woff2\");\n  }\n\n  .container .item { color: red; }\n  nav > ul.menu { display: flex; }\n  h2 + p.note { margin-top: 0; }\n  li:nth-child(2n + 1) { color: red; }\n  .button:hover { opacity: 0.5; }\n  .card::before {\n    content: \"\";\n    display: block;\n  }\n  .container > .item { color: red; }\n  h1 + p { margin-top: 0; }\n\n  .container .item, nav > ul.menu {\n    color: red;\n  }\n  #id-selector { color: red; }\n  [data-attribute] { color: red; }\n  [data-attribute=\"value\"] { color: red; }\n\n  .card {\n    background: white;\n    &:hover {\n      background: gray;\n    }\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/style/output.svelte",
    "content": "\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n\n\t.foo.bar {\n\t\tcolor: blue;\n\t}\n\n\t@media (max-width: 600px) {\n\t\t.box {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t@keyframes fade {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t}\n\t\t50%% {\n\t\t\topacity: 0.5;\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t@font-face {\n\t\tfont-family: \"MyFont\";\n\t\tsrc: url(\"/fonts/MyFont.woff2\") format(\"woff2\");\n\t}\n\n\t.container .item {\n\t\tcolor: red;\n\t}\n\n\tnav > ul.menu {\n\t\tdisplay: flex;\n\t}\n\n\th2 + p.note {\n\t\tmargin-top: 0;\n\t}\n\n\tli:nth-child(2n + 1) {\n\t\tcolor: red;\n\t}\n\n\t.button:hover {\n\t\topacity: 0.5;\n\t}\n\n\t.card::before {\n\t\tcontent: \"\";\n\t\tdisplay: block;\n\t}\n\n\t.container > .item {\n\t\tcolor: red;\n\t}\n\n\th1 + p {\n\t\tmargin-top: 0;\n\t}\n\n\t.container .item,\n\tnav > ul.menu {\n\t\tcolor: red;\n\t}\n\n\t#id-selector {\n\t\tcolor: red;\n\t}\n\n\t[data-attribute] {\n\t\tcolor: red;\n\t}\n\n\t[data-attribute=\"value\"] {\n\t\tcolor: red;\n\t}\n\n\t.card {\n\t\tbackground: white;\n\t\t&:hover {\n\t\t\tbackground: gray;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/style-directive/input.svelte",
    "content": "<div style:color=\"red\">...</div>\n<div style:color style:width=\"12rem\" style:background-color={darkMode ? 'black' : 'white'}>...</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/style-directive/output.svelte",
    "content": "<div style:color=\"red\">...</div>\n\n<div\n\tstyle:color\n\tstyle:width=\"12rem\"\n\tstyle:background-color={darkMode ? 'black' : 'white'}\n>...</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-boundary/input.svelte",
    "content": "<svelte:boundary>\n\t<p>{await delayed('hello!')}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-boundary/output.svelte",
    "content": "<svelte:boundary>\n\t<p>{await delayed('hello!')}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-component/input.svelte",
    "content": "<svelte:component this={MyComponent} />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-component/output.svelte",
    "content": "<svelte:component this={MyComponent} />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-document/input.svelte",
    "content": "<svelte:document onvisibilitychange={handleVisibilityChange} use:someAction />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-document/output.svelte",
    "content": "<svelte:document\n\tonvisibilitychange={handleVisibilityChange}\n\tuse:someAction\n></svelte:document>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-element/input.svelte",
    "content": "<script>\n\tlet tag = $state('hr');\n</script>\n\n<svelte:element this={tag}>\n\tThis text cannot appear inside an hr element\n</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-element/output.svelte",
    "content": "<script>\n\tlet tag = $state('hr');\n</script>\n\n<svelte:element this={tag}>\n\tThis text cannot appear inside an hr element\n</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-fragment/input.svelte",
    "content": "<script lang=\"ts\">\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget>\n\t<h1 slot=\"header\">Hello</h1>\n\t<svelte:fragment slot=\"footer\">\n\t\t<p>All rights reserved.</p>\n\t\t<p>Copyright (c) 2019 Svelte Industries</p>\n\t</svelte:fragment>\n</Widget>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-fragment/output.svelte",
    "content": "<script lang=\"ts\">\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget>\n\t<h1 slot=\"header\">Hello</h1>\n\n\t<svelte:fragment slot=\"footer\">\n\t\t<p>All rights reserved.</p>\n\t\t<p>Copyright (c) 2019 Svelte Industries</p>\n\t</svelte:fragment>\n</Widget>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-head/input.svelte",
    "content": "<svelte:head>\n\t<title>Hello world!</title>\n\t<meta name=\"description\" content=\"This is where the description goes for SEO\" />\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-head/output.svelte",
    "content": "<svelte:head>\n\t<title>Hello world!</title>\n\n\t<meta\n\t\tname=\"description\"\n\t\tcontent=\"This is where the description goes for SEO\"\n\t/>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-options/input.svelte",
    "content": "<svelte:options runes={true} namespace=\"html\" css=\"injected\" customElement=\"my-custom-element\" />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-options/output.svelte",
    "content": "<svelte:options runes={true} namespace=\"html\" css=\"injected\" customElement=\"my-custom-element\" />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-self/input.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n{#if count > 0}\n\t<p>counting down... {count}</p>\n\t<svelte:self count={count - 1} />\n{:else}\n\t<p>lift-off!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-self/output.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n{#if count > 0}\n\t<p>counting down... {count}</p>\n\t<svelte:self count={count - 1}></svelte:self>\n{:else}\n\t<p>lift-off!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-window/input.svelte",
    "content": "<script>\n\tfunction handleKeydown(event) {\n\t\talert(`pressed the ${event.key} key`);\n\t}\n</script>\n\n<svelte:window onkeydown={handleKeydown} />\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/svelte-window/output.svelte",
    "content": "<script>\n\tfunction handleKeydown(event) {\n\t\talert(`pressed the ${event.key} key`);\n\t}\n</script>\n\n<svelte:window onkeydown={handleKeydown}></svelte:window>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/text/input.svelte",
    "content": "<p>Hello world</p>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/text/output.svelte",
    "content": "<p>Hello world</p>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/transition-directive/input.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => visible = !visible}>toggle</button>\n\n{#if visible}\n\t<div transition:fade>fades in and out</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/transition-directive/output.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => visible = !visible}>toggle</button>\n\n{#if visible}\n\t<div transition:fade>fades in and out</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/use-directive/input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Action } from 'svelte/action';\n\n\tconst myaction: Action = (node, data) => {\n\t\t// ...\n\t};\n</script>\n\n<div use:myaction={data}>...</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/samples/use-directive/output.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Action } from 'svelte/action';\n\n\tconst myaction: Action = (node, data) => {\n\t\t// ...\n\t};\n</script>\n\n<div use:myaction={data}>...</div>\n"
  },
  {
    "path": "packages/svelte/tests/print/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { parse, print } from 'svelte/compiler';\nimport { suite, type BaseTest } from '../suite.js';\n\ninterface PrintTest extends BaseTest {}\n\nconst { test, run } = suite<PrintTest>(async (config, cwd) => {\n\tconst input = fs.readFileSync(`${cwd}/input.svelte`, 'utf-8');\n\n\tconst ast = parse(input, { modern: true });\n\tconst output = print(ast);\n\tconst outputCode = output.code.endsWith('\\n') ? output.code : output.code + '\\n';\n\n\t// run `UPDATE_SNAPSHOTS=true pnpm test print` to update print tests\n\tif (process.env.UPDATE_SNAPSHOTS) {\n\t\tfs.writeFileSync(`${cwd}/output.svelte`, outputCode);\n\t} else {\n\t\tfs.writeFileSync(`${cwd}/_actual.svelte`, outputCode);\n\n\t\tconst file = `${cwd}/output.svelte`;\n\n\t\tconst expected = fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : '';\n\t\tassert.deepEqual(outputCode.trim().replaceAll('\\r', ''), expected.trim().replaceAll('\\r', ''));\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/assert.js",
    "content": "/** @import { assert } from 'vitest' */\n/** @import { CompileOptions, Warning } from '#compiler' */\n\nimport { ELEMENT_NODE } from '#client/constants';\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {string} [message]\n */\nexport function deepEqual(a, b, message) {\n\tif (!is_equal(a, b)) {\n\t\tthrow new Error(message || `Expected ${JSON.stringify(a)} to equal ${JSON.stringify(b)}`);\n\t}\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nfunction is_equal(a, b) {\n\tif (a && typeof a === 'object') {\n\t\tconst is_array = Array.isArray(a);\n\t\tif (Array.isArray(b) !== is_array) return false;\n\n\t\tif (is_array) {\n\t\t\tif (a.length !== b.length) return false;\n\t\t\treturn a.every((value, i) => is_equal(value, b[i]));\n\t\t}\n\n\t\tconst a_keys = Object.keys(a).sort();\n\t\tconst b_keys = Object.keys(b).sort();\n\t\tif (a_keys.join(',') !== b_keys.join(',')) return false;\n\n\t\treturn a_keys.every((key) => is_equal(a[key], b[key]));\n\t}\n\n\treturn a === b;\n}\n/**\n * @param {any} a\n * @param {any} b\n * @param {string} [message]\n */\nexport function equal(a, b, message) {\n\tif (a != b) throw new Error(message || `Expected ${a} to equal ${b}`);\n}\n/**\n * @param {any} condition\n * @param {string} [message]\n * @returns {asserts condition}\n */\nexport function ok(condition, message) {\n\tif (!condition) throw new Error(message || `Expected ${condition} to be truthy`);\n}\n\n/**\n * @param {any} actual\n * @param {any} expected\n * @param {string} [message]\n */\nexport function htmlEqual(actual, expected, message) {\n\treturn deepEqual(normalize_html(window, actual), normalize_html(window, expected), message);\n}\n\n/**\n * @param {Window} window\n * @param {string} html\n */\nfunction normalize_html(window, html) {\n\ttry {\n\t\tconst node = window.document.createElement('div');\n\t\tnode.innerHTML = html\n\t\t\t.replace(/<!--.*?-->/g, '')\n\t\t\t.replace(/>[\\s\\r\\n]+</g, '><')\n\t\t\t.replace(/svelte-\\w+/g, 'svelte-xyz123')\n\t\t\t.trim();\n\n\t\tnormalize_children(node);\n\n\t\treturn node.innerHTML.replace(/<\\/?noscript\\/?>/g, '');\n\t} catch (err) {\n\t\tthrow new Error(`Failed to normalize HTML:\\n${html}`);\n\t}\n}\n\n/** @param {any} node */\nfunction normalize_children(node) {\n\t// sort attributes\n\tconst attributes = Array.from(node.attributes).sort(\n\t\t(/** @type {any} */ a, /** @type {any} */ b) => {\n\t\t\treturn a.name < b.name ? -1 : 1;\n\t\t}\n\t);\n\n\tattributes.forEach((/** @type{any} */ attr) => {\n\t\tnode.removeAttribute(attr.name);\n\t});\n\n\tattributes.forEach((/** @type{any} */ attr) => {\n\t\tnode.setAttribute(attr.name, attr.value);\n\t});\n\n\t// normalize styles\n\tif (node.hasAttribute('style')) {\n\t\tnode.style = node.style.cssText;\n\t}\n\n\tfor (let child of [...node.childNodes]) {\n\t\tif (child.nodeType === ELEMENT_NODE) {\n\t\t\tnormalize_children(child);\n\t\t}\n\t}\n}\n\n// The following two functions need to be in here; if we had them in test.ts, esbuild would choke on node imports etc\n\n/**\n * @template Props\n * @param {{\n *\tskip?: boolean;\n *\tsolo?: boolean;\n *  mode?: Array<'server' | 'client' | 'hydrate'>;\n *  skip_mode?: Array<'server' | 'client' | 'hydrate'>;\n *\thtml?: string;\n *\tssrHtml?: string;\n *\tid_prefix?: string;\n *\tprops?: Props;\n *\tcompileOptions?: Partial<CompileOptions>;\n *\ttest?: (args: {\n *\t\tassert: typeof assert & {\n *\t\t\thtmlEqual(a: string, b: string, description?: string): void;\n *\t\t\thtmlEqualWithOptions(\n *\t\t\t\ta: string,\n *\t\t\t\tb: string,\n *\t\t\t\topts: { preserveComments: boolean; withoutNormalizeHtml: boolean },\n *\t\t\t\tdescription?: string\n *\t\t\t): void;\n *\t\t};\n *\t\tcompileOptions: CompileOptions;\n *\t\tcomponent: Props & {\n *\t\t\t[key: string]: any;\n *\t\t};\n *\t\tcomponentCtor: any;\n *\t\tmod: any;\n *\t\traf: {\n *\t\t\ttick: (ms: number) => void;\n *\t\t};\n *\t\ttarget: HTMLElement;\n *\t\twindow: Window & {\n *\t\t\tEvent: typeof Event;\n *\t\t\tInputEvent: typeof InputEvent;\n *\t\t\tKeyboardEvent: typeof KeyboardEvent;\n *\t\t\tMouseEvent: typeof MouseEvent;\n *\t\t};\n *\t\twaitUntil: (fn: any, ms?: number) => Promise<void>;\n *\t}) => void;\n *\taccessors?: boolean;\n *\timmutable?: boolean;\n *\tdev?: boolean;\n *\twarnings?: Warning[];\n *}} args\n */\nexport function test(args) {\n\treturn args;\n}\n\n// TypeScript needs the type of assertions to be directly visible, not inferred, which is why\n// we can't have it on the test suite type.\n/**\n * @param {any} value\n * @returns {asserts value}\n */\nexport function assert_ok(value) {\n\tif (!value) {\n\t\tthrow new Error(`Expected truthy value, got ${value}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$props/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element name=\"world\" answer=\"42\" test=\"svelte\"></custom-element>';\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tassert.htmlEqual(\n\t\t\tel.shadowRoot.innerHTML,\n\t\t\t`\n\t\t<p>name: world</p>\n\t\t<p>$$props: {\"name\":\"world\",\"answer\":\"42\",\"test\":\"svelte\"}</p>\n\t\t<p>$$restProps: {\"answer\":\"42\",\"test\":\"svelte\"}</p>\n\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$props/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\texport let name;\n</script>\n\n<p>name: {name}</p>\n<p>$$props: {JSON.stringify($$props)}</p>\n<p>$$restProps: {JSON.stringify($$restProps)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$slot/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = `\n\t\t<custom-element><span slot=\"a\">hello world</span><span>bye</span><span>world</span></custom-element>\n\t\t<custom-element><span slot=\"a\">hello world</span><span slot=\"b\">hello world</span><span>bye world</span></custom-element>\n\t`;\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst [a, b] = target.querySelectorAll('custom-element');\n\n\t\tassert.htmlEqual(\n\t\t\ta.shadowRoot.innerHTML,\n\t\t\t`\n\t\t<slot></slot>\n\t\t<slot name=\"a\"></slot>\n\t\t<p>$$slots: {\"a\":true,\"default\":true}</p>\n\t\t<p>Slot b is not available</p>\n\t`\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\tb.shadowRoot.innerHTML,\n\t\t\t`\n\t\t<slot></slot>\n\t\t<slot name=\"a\"></slot>\n\t\t<p>$$slots: {\"a\":true,\"b\":true,\"default\":true}</p>\n\t\t<div><slot name=\"b\"></slot></div>\n\t`\n\t\t);\n\n\t\tassert.equal(a.getData(), '');\n\t\tassert.equal(b.getData(), 'foo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$slot/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\tlet data = \"\";\n\n\tif ($$slots.b) {\n\t\tdata = \"foo\";\n\t}\n\n\texport function getData() {\n\t\treturn data;\n\t}\n\n\tfunction toString(data) {\n\t\tconst result = {};\n\t\tconst sortedKeys = Object.keys(data).sort();\n\t\tsortedKeys.forEach((key) => (result[key] = data[key] ? true : false));\n\t\treturn JSON.stringify(result);\n\t}\n</script>\n\n<slot />\n<slot name=\"a\" />\n<p>$$slots: {toString($$slots)}</p>\n{#if $$slots.b}\n\t<div>\n\t\t<slot name=\"b\" />\n\t</div>\n{:else}\n\t<p>Slot b is not available</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$slot-dynamic-content/_config.js",
    "content": "import { test } from '../../assert';\nimport { mount } from 'svelte';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target, componentCtor: Component }) {\n\t\tconst component = mount(Component, { target, props: { name: 'slot' } });\n\t\tawait tick();\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst ce = target.querySelector('my-widget');\n\n\t\tassert.htmlEqual(\n\t\t\tce.shadowRoot.innerHTML,\n\t\t\t`\n\t\t<slot></slot>\n\t\t<p>named fallback</p>\n\t`\n\t\t);\n\n\t\tcomponent.name = 'slot2';\n\t\tassert.htmlEqual(\n\t\t\tce.shadowRoot.innerHTML,\n\t\t\t`\n\t\t<slot></slot>\n\t\t<p>named fallback</p>\n\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$slot-dynamic-content/main.svelte",
    "content": "<!-- before Svelte 4 it was necessary to explicitly set customElement to null or else you'd get a warning. Keep this around for backwards compat -->\n<svelte:options customElement={null} />\n\n<script>\n\timport \"./my-widget.svelte\";\n\texport let name;\n</script>\n\n<my-widget>\n\t<p>default {name}</p>\n</my-widget>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/$$slot-dynamic-content/my-widget.svelte",
    "content": "<svelte:options customElement=\"my-widget\" />\n\n<slot>fallback</slot>\n<slot name=\"named\"><p>named fallback</p></slot>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/action/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element name=\"foo\"></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst events = el.events; // need to get the array reference, else it's gone when destroyed\n\t\tassert.deepEqual(events, ['foo']);\n\n\t\tel.name = 'bar';\n\t\tawait tick();\n\t\tawait tick();\n\t\tassert.deepEqual(events, ['foo', 'bar']);\n\n\t\ttarget.innerHTML = '';\n\t\tawait tick();\n\t\tassert.deepEqual(events, ['foo', 'bar', 'destroy']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/action/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\texport let name;\n\texport let events = [];\n\n\tfunction action(_node, name) {\n\t\tevents.push(name);\n\t\treturn {\n\t\t\tupdate(name) {\n\t\t\t\tevents.push(name);\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tevents.push(\"destroy\");\n\t\t\t},\n\t\t};\n\t}\n</script>\n\n<div use:action={name}>action</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/camel-case-attribute/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML =\n\t\t\t'<custom-element camelcase2=\"Hello\" camel-case=\"world\" an-array=\"[1,2]\"></custom-element>';\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tassert.htmlEqual(el.shadowRoot.innerHTML, '<h1>Hello world!</h1> <p>1</p><p>2</p>');\n\n\t\tel.setAttribute('camel-case', 'universe');\n\t\tel.setAttribute('an-array', '[3,4]');\n\t\tel.setAttribute('camelcase2', 'Hi');\n\t\tflushSync();\n\t\tassert.htmlEqual(el.shadowRoot.innerHTML, '<h1>Hi universe!</h1> <p>3</p><p>4</p>');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<custom-element camelcase2=\"Hi\" camel-case=\"universe\" an-array=\"[3,4]\"></custom-element>'\n\t\t);\n\n\t\tel.camelCase = 'galaxy';\n\t\tel.camelCase2 = 'Hey';\n\t\tel.anArray = [5, 6];\n\t\tflushSync();\n\t\tassert.htmlEqual(el.shadowRoot.innerHTML, '<h1>Hey galaxy!</h1> <p>5</p><p>6</p>');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<custom-element camelcase2=\"Hey\" camel-case=\"universe\" an-array=\"[5,6]\"></custom-element>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/camel-case-attribute/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: \"custom-element\",\n\t\tprops: {\n\t\t\tcamelCase: { attribute: \"camel-case\" },\n\t\t\tcamelCase2: { reflect: true },\n\t\t\tanArray: { attribute: \"an-array\", type: \"Array\", reflect: true },\n\t\t},\n\t}}\n/>\n\n<script>\n\texport let camelCase;\n\texport let camelCase2;\n\texport let anArray;\n</script>\n\n<h1>{camelCase2} {camelCase}!</h1>\n{#each anArray as item}\n\t<p>{item}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/ce-options-valid/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element name=\"world\"></custom-element>';\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst h1 = el.shadowRoot.querySelector('h1');\n\n\t\tassert.equal(h1.textContent, 'Hello world!');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/ce-options-valid/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: \"custom-element\",\n\t\tprops: {\n\t\t\tname: { reflect: false, type: \"String\", attribute: \"name\" },\n\t\t},\n\t}}\n/>\n\n<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/closed-shadow-dom/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tassert.equal(el.shadowRoot, null);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/closed-shadow-dom/main.svelte",
    "content": "<svelte:options customElement={{ tag: \"custom-element\", shadow: { mode: 'closed' } }} />\n\n<h1>Hello world!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/custom-class/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t/** @type {any} */\n\t\tconst element = document.createElement('custom-element');\n\t\telement.updateFoo('42');\n\t\ttarget.appendChild(element);\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst p = el.shadowRoot.querySelector('p');\n\t\tassert.equal(p.textContent, '42');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/custom-class/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: 'custom-element',\n\t\textend: (CeClass) => {\n\t\t\treturn class extends CeClass {\n\t\t\t\tupdateFoo(value) {\n\t\t\t\t\tthis.foo = value;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}}\n/>\n\n<script>\n\texport function updateFoo(value) {\n\t\tfoo = value;\n\t}\n\n\texport let foo;\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/custom-method/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tel.updateFoo(42);\n\t\tflushSync();\n\n\t\tconst p = el.shadowRoot.querySelector('p');\n\t\tassert.equal(p.textContent, '42');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/custom-method/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\texport function updateFoo(value) {\n\t\tfoo = value;\n\t}\n\n\texport let foo;\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/effect-sequence/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet changed = false;\n\n\t\ttarget.innerHTML = '<child-element></child-element>';\n\n\t\tawait tick(); // wait for element to upgrade\n\n\t\ttarget.addEventListener('change', () => {\n\t\t\tchanged = true;\n\t\t});\n\n\t\tawait tick(); // wait for effect\n\n\t\tassert.equal(changed, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/effect-sequence/main.svelte",
    "content": "<svelte:options customElement=\"child-element\" />\n\n<script>\n\t$effect(() => {\n\t\t$host().dispatchEvent(new CustomEvent('change', { bubbles: true }));\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/element-effect-context/_config.js",
    "content": "import { test } from '../../assert';\nimport { flushSync } from 'svelte';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<my-app/>';\n\t\tawait tick();\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('my-app');\n\t\tconst button = el.shadowRoot.querySelector('button');\n\t\tconst p = el.shadowRoot.querySelector('my-tracking').shadowRoot.querySelector('p');\n\n\t\tassert.equal(button.innerHTML, '0');\n\t\tassert.equal(p.innerHTML, 'false');\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tassert.equal(button.innerHTML, '1');\n\t\tassert.equal(p.innerHTML, 'false');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/element-effect-context/main.svelte",
    "content": "<svelte:options customElement=\"my-app\" />\n\n<script module>\n\tclass Tracking extends HTMLElement {\n\t\tstatic observedAttributes = [\"count\"];\n        tracking = false;\n\n        set count(_) {\n            this.tracking = $effect.tracking();\n            this.render();\n        }\n\n        constructor() {\n            super();\n            this.attachShadow({ mode: 'open' });\n        }\n\n\t\trender() {\n\t\t\tthis.shadowRoot.innerHTML = `<p>${this.tracking}</p>`;\n\t\t}\n\t}\n\n\tcustomElements.define(\"my-tracking\", Tracking);\n</script>\n\n<script>\n    let count = $state(0);\n</script>\n\n<button onclick={() => (count += 1)}>{count}</button>\n<my-tracking {count}></my-tracking>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/escaped-css/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst ce = target.querySelector('custom-element');\n\t\tconst icon = ce.shadowRoot.querySelector('.icon');\n\t\tconst before = getComputedStyle(icon, '::before');\n\n\t\tassert.equal(before.content, JSON.stringify(String.fromCharCode(0xff)));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/escaped-css/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<span class=\"icon\"></span>\n\n<style>\n\t.icon::before {\n\t\tcontent: \"\\ff\";\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/events/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\t/** @type {string[]} */\n\t\tconst events = [];\n\t\tconst custom_before = () => {\n\t\t\tevents.push('before');\n\t\t};\n\t\tconst click_before = () => {\n\t\t\tevents.push('click_before');\n\t\t};\n\t\tel.addEventListener('custom', custom_before);\n\t\tel.addEventListener('click', click_before);\n\n\t\tawait tick();\n\n\t\tel.addEventListener('custom', (e) => {\n\t\t\tevents.push(e.detail);\n\t\t});\n\t\tel.addEventListener('click', () => {\n\t\t\tevents.push('click');\n\t\t});\n\n\t\tel.shadowRoot.querySelector('button').click();\n\t\tassert.deepEqual(events, ['before', 'foo', 'click_before', 'click']);\n\n\t\tel.removeEventListener('custom', custom_before);\n\t\tel.removeEventListener('click', click_before);\n\t\tel.shadowRoot.querySelector('button').click();\n\t\tassert.deepEqual(events, ['before', 'foo', 'click_before', 'click', 'foo', 'click']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/events/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\timport { createEventDispatcher } from \"svelte\";\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click={() => dispatch(\"custom\", \"foo\")}>bubble click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/events-slotted/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element><span></span></custom-element>';\n\n\t\tconst custom_element = target.querySelector('custom-element');\n\n\t\tconst logs = [];\n\t\tcustom_element.callback = () => {\n\t\t\tlogs.push('called');\n\t\t};\n\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst span = target.querySelector('span');\n\t\tspan.click();\n\t\tassert.deepEqual(logs, ['called']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/events-slotted/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<button onclick={(e)=>{\n\t$host().callback();\n}}>\n\t<slot></slot>\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/extend-with-ts/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element name=\"world\"></custom-element>';\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tassert.htmlEqual(\n\t\t\tel.shadowRoot.innerHTML,\n\t\t\t`\n\t\t<p>name: world</p>\n\t`\n\t\t);\n\t\tassert.equal(el.test, `test`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/extend-with-ts/main.svelte",
    "content": "<svelte:options customElement={{\n\ttag: \"custom-element\",\n\textend: (customClass)=>{\n\t\treturn class extends customClass{\n\t\t\tpublic test: string = \"test\";\n\t\t}\n\t},\n}}/>\n\n<script lang=\"ts\">\n\tlet { name } = $props();\n</script>\n\n<p>name: {name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/extended-builtin/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\twarnings: [\n\t\t{\n\t\t\tcode: 'attribute_avoid_is',\n\t\t\tmessage:\n\t\t\t\t'The \"is\" attribute is not supported cross-browser and should be avoided\\nhttps://svelte.dev/e/attribute_avoid_is',\n\t\t\tstart: {\n\t\t\t\tcharacter: 109,\n\t\t\t\tcolumn: 8,\n\t\t\t\tline: 7\n\t\t\t},\n\t\t\tend: {\n\t\t\t\tcharacter: 127,\n\t\t\t\tcolumn: 26,\n\t\t\t\tline: 7\n\t\t\t}\n\t\t}\n\t],\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\t\tassert.equal(target.innerHTML, '<custom-element></custom-element>');\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst button = el.shadowRoot.querySelector('button');\n\n\t\tconst ctor = customElements.get('custom-button');\n\t\tassert.ok(ctor && button instanceof ctor);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/extended-builtin/custom-button.js",
    "content": "class CustomButton extends HTMLButtonElement {}\ncustomElements.define('custom-button', CustomButton, { extends: 'button' });\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/extended-builtin/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\timport \"./custom-button.js\";\n</script>\n\n<button is=\"custom-button\">click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/host-rune/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\t/** @type {string[]} */\n\t\tconst events = [];\n\t\tconst handle_evt = (e) => events.push(e.type, e.detail);\n\t\tel.addEventListener('greeting', handle_evt);\n\n\t\tawait tick();\n\n\t\tel.shadowRoot.querySelectorAll('button')[0].click();\n\t\tel.shadowRoot.querySelectorAll('button')[1].click();\n\t\tel.shadowRoot.querySelectorAll('button')[2].click();\n\t\tassert.deepEqual(events, ['greeting', 'hello', 'greeting', 'welcome', 'greeting', 'bonjour']);\n\n\t\tel.removeEventListener('greeting', handle_evt);\n\t\tel.shadowRoot.querySelectorAll('button')[0].click();\n\t\tel.shadowRoot.querySelectorAll('button')[1].click();\n\t\tel.shadowRoot.querySelectorAll('button')[2].click();\n\t\tassert.deepEqual(events, ['greeting', 'hello', 'greeting', 'welcome', 'greeting', 'bonjour']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/host-rune/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\tfunction greet(greeting) {\n\t\t$host().dispatchEvent(new CustomEvent('greeting', { detail: greeting }))\n\t}\n\n\tfunction welcome() {\n\t\t$host().dispatchEvent(new CustomEvent('greeting', { detail: 'welcome' }))\n\t}\n\tfunction bonjour() {\n\t\tconst element = $host();\n\t\telement.dispatchEvent(new CustomEvent('greeting', { detail: 'bonjour' }))\n\t}\n</script>\n\n<button onclick={() => greet('hello')}>say hello</button>\n<button onclick={welcome}>say welcome</button>\n<button onclick={bonjour}>say bonjour</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/host-rune-access-injected-css/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\t/** @type {string} */\n\t\tlet html = '';\n\t\tconst handle_evt = (e) => (html = e.detail);\n\t\tel.addEventListener('html', handle_evt);\n\n\t\tawait tick();\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.ok(html.includes('<style'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/host-rune-access-injected-css/main.svelte",
    "content": "<svelte:options css=\"injected\" customElement=\"custom-element\"/>\n\n<script lang=\"ts\">\n  $effect(() => {\n    $host().dispatchEvent(new CustomEvent(\"html\", { detail: $host().shadowRoot?.innerHTML }));\n  })\n</script>\n\n<button class=\"btn\">btn</button>\n\n<style >\n  .btn {\n    width: 123px;\n    height: 123px;\n  }\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/html/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element name=\"world\"></custom-element>';\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tassert.equal(el.name, 'world');\n\n\t\tconst h1 = el.shadowRoot.querySelector('h1');\n\t\tassert.equal(h1.textContent, 'Hello world!');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/html/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/html-slots/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = `\n\t\t<custom-element>\n\t\t\t<strong>slotted</strong>\n\t\t</custom-element>`;\n\t\tawait tick();\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tconst div = el.shadowRoot.children[0];\n\t\tconst [slot0, slot1] = div.children;\n\n\t\tassert.equal(slot0.assignedNodes()[1], target.querySelector('strong'));\n\t\tassert.equal(slot1.innerHTML, 'foo fallback content');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/html-slots/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<div>\n\t<slot>\n\t\t<p>default fallback content</p>\n\t</slot>\n\n\t<slot name=\"foo\">\n\t\t<p>foo fallback content</p>\n\t</slot>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/late-ce-mount/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\n\nconst tick = () => Promise.resolve();\n\n// Check that rendering a custom element and setting a property before it is registered\n// does not break the \"when to set this as a property\" logic\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tconst ce_root = target.querySelector('custom-element').shadowRoot;\n\n\t\tce_root.querySelector('button')?.click();\n\t\tflushSync();\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tconst inner_ce_root = ce_root.querySelectorAll('set-property-before-mounted');\n\t\tassert.htmlEqual(inner_ce_root[0].shadowRoot.innerHTML, 'object|{\"foo\":\"bar\"}');\n\t\tassert.htmlEqual(inner_ce_root[1].shadowRoot.innerHTML, 'object|{\"foo\":\"bar\"}');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/late-ce-mount/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script lang=\"ts\">\n\timport { onMount } from 'svelte';\n\n\tclass CustomElement extends HTMLElement {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\tObject.defineProperty(this, 'property', {\n\t\t\t\tset: (value) => {\n\t\t\t\t\tthis.shadowRoot.innerHTML = typeof value + '|' + JSON.stringify(value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tonMount(async () => {\n\t\tcustomElements.define('set-property-before-mounted', CustomElement);\n\t});\n\n\tlet property = $state();\n</script>\n\n<button onclick={() => (property = { foo: 'bar' })}>Update</button>\n<!-- one that's there before it's registered -->\n<set-property-before-mounted {property}></set-property-before-mounted>\n<!-- and one that's after registration but sets property to an object right away -->\n{#if property}\n\t<set-property-before-mounted {property}></set-property-before-mounted>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/nested/Counter.svelte",
    "content": "<svelte:options customElement=\"my-counter\" />\n\n<script>\n\timport { getContext } from \"svelte\";\n\n\texport let count = 0;\n\n\tconst context = getContext(\"context\");\n</script>\n\n<slot />\n<button on:click={() => (count += 1)}>count: {count}</button>\n<p>Context {context}</p>\n\n<style>\n\tbutton {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/nested/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<my-app/>';\n\t\tawait tick();\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('my-app');\n\t\tconst button = el.shadowRoot.querySelector('button');\n\t\tconst span = el.shadowRoot.querySelector('span');\n\t\tconst p = el.shadowRoot.querySelector('p');\n\n\t\tassert.equal(el.counter.count, 0);\n\t\tassert.equal(button.innerHTML, 'count: 0');\n\t\tassert.equal(span.innerHTML, 'slot 0');\n\t\tassert.equal(p.innerHTML, 'Context works');\n\t\tassert.equal(getComputedStyle(button).color, 'rgb(255, 0, 0)');\n\n\t\tbutton.dispatchEvent(new MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.equal(el.counter.count, 1);\n\t\tassert.equal(button.innerHTML, 'count: 1');\n\t\tassert.equal(span.innerHTML, 'slot 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/nested/main.svelte",
    "content": "<svelte:options customElement=\"my-app\" />\n\n<script>\n\timport { setContext } from \"svelte\";\n\timport Counter from \"./Counter.svelte\";\n\n\texport let count;\n\texport let counter;\n\n\tsetContext(\"context\", \"works\");\n</script>\n\n<Counter bind:count bind:this={counter}>\n\t<span>slot {count}</span>\n</Counter>\n<p>clicked {count} times</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/new-styled/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<p>unstyled</p>';\n\t\ttarget.appendChild(document.createElement('custom-element'));\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tconst unstyled = target.querySelector('p');\n\t\tassert_ok(unstyled);\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst styled = el.shadowRoot.querySelector('p');\n\n\t\tassert.equal(unstyled.textContent, 'unstyled');\n\t\tassert.equal(styled.textContent, 'styled');\n\n\t\tassert.equal(getComputedStyle(unstyled).color, 'rgb(0, 0, 0)');\n\t\tassert.equal(getComputedStyle(styled).color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/new-styled/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<p>styled</p>\n\n<style>\n\tp {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/no-shadow-dom/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element name=\"world\"></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst h1 = el.querySelector('h1');\n\n\t\tassert.equal(el.name, 'world');\n\t\tassert.equal(el.shadowRoot, null);\n\t\tassert.equal(h1.innerHTML, 'Hello world!');\n\t\tassert.equal(getComputedStyle(h1).color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/no-shadow-dom/main.svelte",
    "content": "<svelte:options customElement={{ tag: \"custom-element\", shadow: \"none\" }} />\n\n<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n\n<style>\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/no-tag/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\twarnings: [],\n\tasync test({ assert, target, componentCtor }) {\n\t\tcustomElements.define('no-tag', componentCtor.element);\n\t\ttarget.innerHTML = '<no-tag name=\"world\"></no-tag>';\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('no-tag');\n\t\tconst h1 = el.shadowRoot.querySelector('h1');\n\n\t\tassert.equal(h1.textContent, 'Hello world!');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/no-tag/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/no-tag-ce-options/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\twarnings: [],\n\tasync test({ assert, target, componentCtor }) {\n\t\tcustomElements.define('no-tag', componentCtor.element);\n\t\ttarget.innerHTML = '<no-tag name=\"world\"></no-tag>';\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('no-tag');\n\t\tconst h1 = el.querySelector('h1');\n\n\t\tassert.equal(el.shadowRoot, null);\n\t\tassert.equal(h1.textContent, 'Hello world!');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/no-tag-ce-options/main.svelte",
    "content": "<svelte:options customElement={{ shadow: \"none\" }} />\n\n<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/oncreate/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<my-app prop/>';\n\t\tawait tick();\n\t\tawait tick();\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('my-app');\n\n\t\tassert.ok(el.wasCreated);\n\t\tassert.ok(el.propsInitialized);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/oncreate/main.svelte",
    "content": "<svelte:options customElement=\"my-app\" />\n\n<script>\n\timport { onMount } from \"svelte\";\n\n\texport let prop = false;\n\texport let propsInitialized;\n\texport let wasCreated;\n\n\tonMount(() => {\n\t\tpropsInitialized = prop !== false;\n\t\twasCreated = true;\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/ondestroy/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<my-app/>';\n\t\tawait tick();\n\t\tawait tick();\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('my-app');\n\t\ttarget.removeChild(el);\n\n\t\tawait tick();\n\n\t\tassert.ok(target.dataset.onMountDestroyed);\n\t\tassert.ok(target.dataset.destroyed);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/ondestroy/main.svelte",
    "content": "<svelte:options customElement=\"my-app\" />\n\n<script>\n\timport { onMount, onDestroy } from \"svelte\";\n\n\tlet el;\n\tlet parentEl;\n\n\tonMount(() => {\n\t\tparentEl = el.parentNode.host.parentElement;\n\n\t\treturn () => {\n\t\t\tparentEl.dataset.onMountDestroyed = true;\n\t\t};\n\t});\n\n\tonDestroy(() => {\n\t\tparentEl.dataset.destroyed = true;\n\t});\n</script>\n\n<div bind:this={el}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/propagate-prop-changes/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst button = el.shadowRoot.querySelector('button');\n\n\t\tassert.equal(button.textContent, '0');\n\t\tassert.equal(el.count, 0);\n\n\t\tbutton.click();\n\n\t\tflushSync();\n\n\t\tassert.equal(button.textContent, '1');\n\t\tassert.equal(el.count, 1);\n\n\t\tel.count = 0;\n\n\t\tassert.equal(button.textContent, '0');\n\t\tassert.equal(el.count, 0);\n\n\t\tbutton.click();\n\n\t\tflushSync();\n\n\t\tassert.equal(button.textContent, '1');\n\t\tassert.equal(el.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/propagate-prop-changes/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\texport let count = 0;\n</script>\n\n<button onclick={() => count++}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/props/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.equal(target.innerHTML, '<custom-element></custom-element>');\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tconst widget = el.shadowRoot.querySelector('my-widget');\n\n\t\tconst [p1, p2, p3, p4] = widget.shadowRoot.querySelectorAll('p');\n\n\t\tassert.equal(p1.textContent, '3 items');\n\t\tassert.equal(p2.textContent, 'a, b, c');\n\t\tassert.equal(p3.textContent, 'not flagged');\n\t\tassert.equal(p4.textContent, 'flagged (static attribute)');\n\n\t\tel.items = ['d', 'e', 'f', 'g', 'h'];\n\t\tel.flagged = true;\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.equal(p1.textContent, '5 items');\n\t\tassert.equal(p2.textContent, 'd, e, f, g, h');\n\t\tassert.equal(p3.textContent, 'flagged (dynamic attribute)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/props/main.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<script>\n\timport \"./my-widget.svelte\";\n\n\texport let items = [\"a\", \"b\", \"c\"];\n\texport let flagged = false;\n</script>\n\n<my-widget class=\"foo\" {items} flag1={flagged} flag2></my-widget>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/props/my-widget.svelte",
    "content": "<svelte:options customElement=\"my-widget\" />\n\n<script>\n\texport let items = [];\n\texport let flag1 = false;\n\texport let flag2 = false;\n</script>\n\n<p>{items.length} items</p>\n<p>{items.join(\", \")}</p>\n<p>{flag1 ? \"flagged (dynamic attribute)\" : \"not flagged\"}</p>\n<p>{flag2 ? \"flagged (static attribute)\" : \"not flagged\"}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/props-rune-attributes/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element foo-bar=\"1\" bar=\"2\" b-az=\"3\"></custom-element>';\n\t\tawait tick();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\n\t\tassert.htmlEqual(\n\t\t\tel.shadowRoot.innerHTML,\n\t\t\t`\n\t\t\t<p>1</p>\n\t\t\t<p>2</p>\n\t\t\t<p>3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/props-rune-attributes/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: \"custom-element\",\n\t\tprops: { foo: { attribute: 'foo-bar' } },\n\t}}\n/>\n\n<script>\n\tlet { bar, 'b-az': baz, ...rest } = $props();\n</script>\n\n<p>{rest.foo}</p>\n<p>{bar}</p>\n<p>{baz}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/props-rune-attributes/my-widget.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: \"my-widget\",\n\t\tprops: { foo: { attribute: 'foo-bar' } },\n\t}}\n/>\n\n<script>\n\tlet { bar, 'b-az': baz, ...rest } = $props();\n</script>\n\n<p>{rest.foo}</p>\n<p>{bar}</p>\n<p>{baz}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/reflect-attributes/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element red white></custom-element>';\n\t\tawait tick();\n\t\tawait tick();\n\t\tawait tick();\n\t\tconst ce_root = /** @type {any} */ (target.querySelector('custom-element')).shadowRoot;\n\t\tconst div = ce_root.querySelector('div');\n\t\tconst p = ce_root.querySelector('p');\n\t\tconst button = ce_root.querySelector('button');\n\n\t\tassert.equal(getComputedStyle(div).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(getComputedStyle(p).color, 'rgb(255, 255, 255)');\n\n\t\tconst inner_root = ce_root.querySelector('my-widget').shadowRoot;\n\t\tconst inner_div = inner_root.querySelector('div');\n\t\tconst inner_p = inner_root.querySelector('p');\n\n\t\tassert.equal(getComputedStyle(inner_div).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(getComputedStyle(inner_p).color, 'rgb(255, 255, 255)');\n\n\t\tbutton.click();\n\t\tflushSync();\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.equal(getComputedStyle(div).color, 'rgb(0, 0, 0)');\n\t\tassert.equal(getComputedStyle(inner_div).color, 'rgb(0, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/reflect-attributes/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: 'custom-element',\n\t\tprops: { red: { reflect: true, type: 'Boolean' } }\n\t}}\n/>\n\n<script>\n\timport './my-widget.svelte';\n\texport let red;\n\tred;\n</script>\n\n<div>hi</div>\n<p>hi</p>\n<button on:click={() => (red = false)}>off</button>\n<my-widget {red} white></my-widget>\n\n<style>\n\t:host([red]) div {\n\t\tcolor: red;\n\t}\n\t:host([white]) p {\n\t\tcolor: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/reflect-attributes/my-widget.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: \"my-widget\",\n\t\tprops: { red: { reflect: true } },\n\t}}\n/>\n\n<script>\n\texport let red = false;\n\tred;\n</script>\n\n<div>hi</div>\n<p>hi</p>\n\n<style>\n\t:host([red]) div {\n\t\tcolor: red;\n\t}\n\t:host([white]) p {\n\t\tcolor: white;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst element = document.createElement('custom-element');\n\t\ttarget.appendChild(element);\n\t\tawait tick();\n\t\tflushSync();\n\n\t\t/** @type {any} */\n\t\tconst el = target.querySelector('custom-element');\n\t\tel.shadowRoot.querySelector('button').click();\n\t\tawait tick();\n\t\tflushSync();\n\n\t\tassert.equal(el.getAttribute('aria-expanded'), '');\n\t\tel.shadowRoot.querySelector('button').click();\n\t\tawait tick();\n\t\tflushSync();\n\n\t\tassert.equal(el.getAttribute('aria-expanded'), null);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: 'custom-element',\n\t\tprops: {\n\t\t\texpanded: { reflect: true, type: 'Boolean', attribute: 'aria-expanded' }\n\t\t}\n\t}}\n/>\n\n<script>\n\texport let expanded = false;\n</script>\n\n<div>\n\t<button on:click={() => (expanded = !expanded)}>Toggle</button>\n\t<div class:hidden={!expanded}>Hidden Text</div>\n</div>\n\n<style>\n\t.hidden {\n\t\tdisplay: none;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/set-property-before-mounted/_config.js",
    "content": "import { test } from '../../assert';\n\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target, componentCtor }) {\n\t\ttarget.innerHTML = '<custom-element red white></custom-element>';\n\t\tconst ce = target.querySelector('custom-element');\n\t\tce.prop = 1;\n\t\tcustomElements.define('custom-element', componentCtor.element);\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tconst ce_root = target.querySelector('custom-element').shadowRoot;\n\t\tconst p = ce_root.querySelector('p');\n\n\t\tassert.equal(p.textContent, '1');\n\n\t\tce.prop = 2;\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.equal(p.textContent, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/set-property-before-mounted/main.svelte",
    "content": "<script>\n\texport let prop;\n</script>\n\n<p>{prop}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/shadow-root-init-options/_config.js",
    "content": "import { test } from '../../assert';\nconst tick = () => Promise.resolve();\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.innerHTML = '<custom-element></custom-element>';\n\t\tawait tick();\n\n\t\t/** @type {ShadowRoot} */\n\t\tconst shadowRoot = target.querySelector('custom-element').shadowRoot;\n\n\t\tassert.equal(shadowRoot.mode, 'open');\n\t\tassert.equal(shadowRoot.clonable, true);\n\t\tassert.equal(shadowRoot.delegatesFocus, true);\n\t\tassert.equal(shadowRoot.serializable, true);\n\t\tassert.equal(shadowRoot.slotAssignment, 'manual');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/custom-elements-samples/shadow-root-init-options/main.svelte",
    "content": "<svelte:options\n\tcustomElement={{\n\t\ttag: 'custom-element',\n\t\tshadow: {\n\t\t\tmode: 'open',\n\t\t\tclonable: true,\n\t\t\tdelegatesFocus: true,\n\t\t\tserializable: true,\n\t\t\tslotAssignment: 'manual',\n\t\t},\n\t}}\n/>\n\n<h1>Hello world!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/driver-ssr.js",
    "content": "// @ts-expect-error\nimport SvelteComponent from '__MAIN_DOT_SVELTE__';\n// @ts-expect-error\nimport config from '__CONFIG__';\n// @ts-expect-error\nimport { render } from 'svelte/server';\n\nexport default function () {\n\tconst { head, body, html } = render(SvelteComponent, {\n\t\tprops: config.props || {},\n\t\tidPrefix: config?.id_prefix\n\t});\n\treturn { head, body, html };\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/driver.js",
    "content": "// @ts-expect-error\nimport SvelteComponent from '__MAIN_DOT_SVELTE__';\n// @ts-expect-error\nimport config from '__CONFIG__';\n// @ts-expect-error\nimport * as assert from 'assert.js';\nimport { createClassComponent } from 'svelte/legacy';\nimport { flushSync } from 'svelte';\n\n/** @param {HTMLElement} target */\nexport default async function (target) {\n\tlet unhandled_rejection = false;\n\t/** @param {any} event */\n\tfunction unhandled_rejection_handler(event) {\n\t\tunhandled_rejection = event.reason;\n\t}\n\twindow.addEventListener('unhandledrejection', unhandled_rejection_handler);\n\n\ttry {\n\t\tif (config.before_test) config.before_test();\n\n\t\tconst options = Object.assign(\n\t\t\t{},\n\t\t\t{\n\t\t\t\tcomponent: SvelteComponent,\n\t\t\t\ttarget,\n\t\t\t\tprops: config.props,\n\t\t\t\tintro: config.intro,\n\t\t\t\thydrate: __HYDRATE__,\n\t\t\t\trecover: false\n\t\t\t},\n\t\t\tconfig.options || {}\n\t\t);\n\n\t\tconst component = __CE_TEST__ ? null : createClassComponent(options);\n\n\t\t/**\n\t\t * @param {() => boolean} fn\n\t\t * @param {number} ms\n\t\t */\n\t\tconst wait_until = async (fn, ms = 500) => {\n\t\t\tconst start = new Date().getTime();\n\t\t\tdo {\n\t\t\t\tif (fn()) return;\n\t\t\t\tawait new Promise((resolve) => window.setTimeout(resolve, 1));\n\t\t\t} while (new Date().getTime() <= start + ms);\n\t\t};\n\n\t\tflushSync();\n\n\t\tif (config.html) {\n\t\t\tassert.htmlEqual(target.innerHTML, config.html);\n\t\t}\n\n\t\tif (config.test) {\n\t\t\tawait config.test({\n\t\t\t\tassert,\n\t\t\t\tget component() {\n\t\t\t\t\tif (!component) {\n\t\t\t\t\t\tthrow new Error('test property `component` is not available in custom element tests');\n\t\t\t\t\t}\n\t\t\t\t\treturn component;\n\t\t\t\t},\n\t\t\t\tcomponentCtor: SvelteComponent,\n\t\t\t\ttarget,\n\t\t\t\twindow,\n\t\t\t\twaitUntil: wait_until\n\t\t\t});\n\n\t\t\tcomponent?.$destroy();\n\n\t\t\tif (unhandled_rejection) {\n\t\t\t\tthrow unhandled_rejection;\n\t\t\t}\n\t\t} else {\n\t\t\tcomponent.$destroy();\n\t\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t\tif (unhandled_rejection) {\n\t\t\t\tthrow unhandled_rejection;\n\t\t\t}\n\t\t}\n\n\t\tif (config.after_test) config.after_test();\n\t} catch (error) {\n\t\tif (config.error) {\n\t\t\tassert.equal(/** @type {Error} */ (error).message, config.error);\n\t\t} else {\n\t\t\tthrow error;\n\t\t}\n\t} finally {\n\t\twindow.removeEventListener('unhandledrejection', unhandled_rejection_handler);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/bind-muted/_config.js",
    "content": "import { test, ok } from '../../assert';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst audio = target.querySelector('audio');\n\t\tconst button = target.querySelector('button');\n\t\tok(audio);\n\n\t\tassert.equal(audio.muted, false);\n\n\t\taudio.muted = true;\n\t\taudio.dispatchEvent(new CustomEvent('volumechange'));\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.muted, true, 'event');\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.muted, false, 'click 1');\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.muted, true, 'click 2');\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.muted, false, 'click 3');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/bind-muted/main.svelte",
    "content": "<script>\n\tlet muted = $state(false);\n</script>\n\n<audio bind:muted></audio>\n<button onclick={() => (muted = !muted)}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/bind-playbackrate/_config.js",
    "content": "import { test, ok } from '../../assert';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst audio = target.querySelector('audio');\n\t\tconst button = target.querySelector('button');\n\t\tok(audio);\n\n\t\tassert.equal(audio.playbackRate, 0.5);\n\n\t\taudio.playbackRate = 1.0;\n\t\taudio.dispatchEvent(new CustomEvent('ratechange'));\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.playbackRate, 1.0);\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.playbackRate, 2);\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.playbackRate, 3);\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.playbackRate, 4);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/bind-playbackrate/main.svelte",
    "content": "<script>\n\tlet playbackRate = $state(0.5);\n</script>\n\n<audio bind:playbackRate></audio>\n<button onclick={() => (playbackRate += 1)}>increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/bind-volume/_config.js",
    "content": "import { test, ok } from '../../assert';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst audio = target.querySelector('audio');\n\t\tconst button = target.querySelector('button');\n\t\tok(audio);\n\n\t\tassert.equal(audio.volume, 0.1);\n\n\t\taudio.volume = 0.2;\n\t\taudio.dispatchEvent(new CustomEvent('volumechange'));\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.volume, 0.2);\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.volume, 0.2 + 0.1); // JavaScript can't add floating point numbers correctly\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.volume, 0.2 + 0.1 + 0.1);\n\n\t\tbutton?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(audio.volume, 0.2 + 0.1 + 0.1 + 0.1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/bind-volume/main.svelte",
    "content": "<script>\n\tlet volume = $state(0.1);\n</script>\n\n<audio bind:volume></audio>\n<button onclick={() => (volume += 0.1)}>increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-files/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tasync test({ assert, window }) {\n\t\tconst input = window.document.querySelector('input');\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(input?.files?.length, 1);\n\t\twindow.document.querySelector('button')?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(input?.files?.length, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-files/main.svelte",
    "content": "<script>\n\timport { onMount } from \"svelte\";\n\n  let files;\n\n  onMount(() => {\n\t\tlet list = new DataTransfer();\n\t\tlet file = new File([\"content\"], \"filename.jpg\");\n\t\tlist.items.add(file);\n\t\tfiles = list.files;\n\t})\n</script>\n\n<input type=\"file\" bind:files />\n\n<button onclick={() => files = new DataTransfer().files}>Reset</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-width-height-initialize/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tasync test({ assert, component }) {\n\t\t// small timeout to allow the dimensions to be set\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(component.toggle, true);\n\t\tassert.equal(component.offsetHeight, 800);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-width-height-initialize/main.svelte",
    "content": "<script>\n  export let offsetHeight;\n  export let offsetWidth;\n  export let toggle = false;\n  $: if (offsetWidth) {\n    toggle = true;\n  }\n</script>\n\n<div class:toggle>\n  <div bind:offsetHeight bind:offsetWidth>{offsetHeight}</div>\n</div>\n\n<style>\n  .toggle > div {\n    height: 800px;\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-width-height-this-timing/_config.js",
    "content": "import { test } from '../../assert';\nimport { log } from './log.js';\n\nexport default test({\n\tasync test({ assert }) {\n\t\tawait new Promise((fulfil) => setTimeout(fulfil, 0));\n\n\t\tassert.deepEqual(log, [\n\t\t\t[false, 0, 0],\n\t\t\t[true, 100, 100]\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-width-height-this-timing/log.js",
    "content": "/** @type {any[]} */\nexport const log = [];\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/binding-width-height-this-timing/main.svelte",
    "content": "<script>\n  import { log } from './log.js';\n\n\tlet w = 0;\n\tlet h = 0;\n\n  /** @type {HTMLElement} */\n\tlet div;\n\n\t$: {\n\t\tlog.push([!!div, w, h]);\n\t}\n</script>\n\n<div bind:this={div} bind:clientWidth={w} bind:clientHeight={h} class=\"box\"></div>\n\n<style>\n\t.box {\n\t\twidth: 100px;\n\t\theight: 100px;\n\t\tbackground: #ff3e00;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/browser-events-ending-with-capture/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../assert';\n\nexport default test({\n\tasync test({ assert, window }) {\n\t\tconst div = window.document.querySelector('div');\n\n\t\tdiv?.dispatchEvent(new PointerEvent('gotpointercapture'));\n\t\tdiv?.dispatchEvent(new PointerEvent('lostpointercapture'));\n\n\t\tawait tick();\n\n\t\tassert.equal(div?.dataset.lostCaptured, 'true');\n\t\tassert.equal(div?.dataset.gotCaptured, 'true');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/browser-events-ending-with-capture/main.svelte",
    "content": "<script>\n</script>\n\n<div\n  ongotpointercapture={(e) => {\n    e.target.dataset.gotCaptured = \"true\";\n  }}\n  onlostpointercapture={(e) => {\n\te.target.dataset.lostCaptured = \"true\";\n  }}\n>\n</div>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties/Slider.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties/_config.js",
    "content": "import { test, assert_ok } from '../../assert';\n\nexport default test({\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 0, 0); --track-color: rgb(255, 0, 0);\">\n\t\t\t<div id=\"slider-1\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 255, 0); --track-color: rgb(0, 0, 255);\">\n\t\t\t<div id=\"slider-2\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ target, window, assert }) {\n\t\tconst rail_color1 = target.querySelector('#slider-1 p');\n\t\tconst track_color1 = target.querySelector('#slider-1 span');\n\t\tconst rail_color2 = target.querySelector('#slider-2 p');\n\t\tconst track_color2 = target.querySelector('#slider-2 span');\n\n\t\tassert_ok(rail_color1);\n\t\tassert_ok(track_color1);\n\t\tassert_ok(rail_color2);\n\t\tassert_ok(track_color2);\n\n\t\tassert.htmlEqual(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\tassert.htmlEqual(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\tassert.htmlEqual(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\tassert.htmlEqual(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties/main.svelte",
    "content": "<script>\n\timport Slider from './Slider.svelte';\n</script>\n\n<Slider\n\tid=\"slider-1\"\n\t--rail-color=\"rgb(0, 0, 0)\"\n\t--track-color=\"rgb(255, 0, 0)\"\n/>\n\n<Slider\n\tid=\"slider-2\"\n\t--rail-color=\"rgb(0, 255, 0)\"\n\t--track-color=\"rgb(0, 0, 255)\"\n/>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties-dynamic/Slider.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties-dynamic/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\trailColor1: 'black',\n\t\ttrackColor1: 'red',\n\t\trailColor2: 'green',\n\t\ttrackColor2: 'blue'\n\t},\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: black; --track-color: red;\">\n\t\t\t<div id=\"slider-1\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: green; --track-color: blue;\">\n\t\t\t<div id=\"slider-2\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ component, assert, target }) {\n\t\tcomponent.railColor1 = 'yellow';\n\t\tcomponent.trackColor2 = 'orange';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: yellow; --track-color: red;\">\n\t\t\t\t<div id=\"slider-1\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: green; --track-color: orange;\">\n\t\t\t\t<div id=\"slider-2\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties-dynamic/main.svelte",
    "content": "<script>\n\timport Slider from './Slider.svelte';\n\texport let railColor1;\n\texport let railColor2;\n\texport let trackColor1;\n\texport let trackColor2;\n\n\tfunction identity(color) {\n\t\treturn color;\n\t}\n</script>\n\n<Slider\n\tid=\"slider-1\"\n\t--rail-color={railColor1}\n\t--track-color={trackColor1}\n/>\n\n<Slider\n\tid=\"slider-2\"\n\t--rail-color={railColor2}\n\t--track-color={identity(trackColor2)}\n/>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties-dynamic-svg/Svg.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<g {id}>\n  <circle cx=\"50\" cy=\"50\" r=\"10\" />\n  <rect width=\"100\" height=\"100\" />\n</g>\n\n<style>\n  circle {\n    fill: var(--circle-color);\n  }\n  rect {\n    fill: var(--rect-color)\n  }\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties-dynamic-svg/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\trectColor1: 'green',\n\t\tcircleColor1: 'red',\n\t\trectColor2: 'black',\n\t\tcircleColor2: 'blue'\n\t},\n\thtml: `\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t<g style=\"--rect-color: green; --circle-color: red;\">\n\t\t\t\t<g id=\"svg-1\">\n\t\t\t\t\t<circle cx=\"50\" cy=\"50\" r=\"10\" class=\"svelte-1qzlp1k\"></circle>\n\t\t\t\t\t<rect width=\"100\" height=\"100\" class=\"svelte-1qzlp1k\"></rect>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t\t<g style=\"--rect-color: black; --circle-color: blue;\">\n\t\t\t\t<g id=\"svg-2\">\n\t\t\t\t\t<circle cx=\"50\" cy=\"50\" r=\"10\" class=\"svelte-1qzlp1k\"></circle>\n\t\t\t\t\t<rect width=\"100\" height=\"100\" class=\"svelte-1qzlp1k\"></rect>\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</svg>\n\t`,\n\ttest({ component, assert, target }) {\n\t\tcomponent.rectColor1 = 'yellow';\n\t\tcomponent.circleColor2 = 'cyan';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t<g style=\"--rect-color: yellow; --circle-color: red;\">\n\t\t\t\t\t<g id=\"svg-1\">\n\t\t\t\t\t\t<circle cx=\"50\" cy=\"50\" r=\"10\" class=\"svelte-1qzlp1k\"></circle>\n\t\t\t\t\t\t<rect width=\"100\" height=\"100\" class=\"svelte-1qzlp1k\"></rect>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g style=\"--rect-color: black; --circle-color: cyan;\">\n\t\t\t\t\t<g id=\"svg-2\">\n\t\t\t\t\t\t<circle cx=\"50\" cy=\"50\" r=\"10\" class=\"svelte-1qzlp1k\"></circle>\n\t\t\t\t\t\t<rect width=\"100\" height=\"100\" class=\"svelte-1qzlp1k\"></rect>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t`\n\t\t);\n\n\t\tconst circle_color1 = target.querySelector('#svg-1 circle');\n\t\tconst rect_color1 = target.querySelector('#svg-1 rect');\n\t\tconst circle_color2 = target.querySelector('#svg-2 circle');\n\t\tconst rect_color2 = target.querySelector('#svg-2 rect');\n\n\t\tassert_ok(circle_color1);\n\t\tassert_ok(rect_color1);\n\t\tassert_ok(circle_color2);\n\t\tassert_ok(rect_color2);\n\n\t\tassert.htmlEqual(window.getComputedStyle(circle_color1).fill, 'rgb(255, 0, 0)');\n\t\tassert.htmlEqual(window.getComputedStyle(rect_color1).fill, 'rgb(255, 255, 0)');\n\t\tassert.htmlEqual(window.getComputedStyle(circle_color2).fill, 'rgb(0, 255, 255)');\n\t\tassert.htmlEqual(window.getComputedStyle(rect_color2).fill, 'rgb(0, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-css-custom-properties-dynamic-svg/main.svelte",
    "content": "<script>\n\timport Svg from './Svg.svelte';\n\texport let rectColor1;\n\texport let rectColor2;\n\texport let circleColor1;\n\texport let circleColor2;\n\n\tfunction identity(color) {\n\t\treturn color;\n\t}\n</script>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\">\n\t<Svg\n\t\tid=\"svg-1\"\n\t\t--rect-color={rectColor1}\n\t\t--circle-color={circleColor1}\n\t/>\n\n\t<Svg\n\t\tid=\"svg-2\"\n\t\t--rect-color={rectColor2}\n\t\t--circle-color={identity(circleColor2)}\n\t/>\n</svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-event-handler-contenteditable-false/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\n// A browser test because JSDOM doesn't support contenteditable\nexport default test({\n\thtml: '<div contenteditable=\"false\"></div>',\n\n\tasync test({ assert, target, component, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tassert_ok(div);\n\t\tconst text = window.document.createTextNode('a');\n\t\tdiv.insertBefore(text, null);\n\t\tassert.equal(div.textContent, 'a');\n\t\tcomponent.text = 'bcde';\n\t\tassert.equal(div.textContent, 'bcdea');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-event-handler-contenteditable-false/main.svelte",
    "content": "<script>\n\texport let text = '';\n\tconst updater = (event) => {text = event.target.textContent}\n</script>\n\n<div contenteditable=\"false\" on:input={updater}>{text}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-slot-binding-dimensions/Nested.svelte",
    "content": "<script>\n\t// bind:clientHeight on the parent is not really part of the test, just here for forwarding the value\n\texport let clientHeight;\n</script>\n\n<p bind:clientHeight>\n\t<slot/>\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-slot-binding-dimensions/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tasync test({ assert, component }) {\n\t\t// small timeout to allow the dimensions to be set\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(component.clientHeight > 0, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/component-slot-binding-dimensions/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\texport let clientHeight;\n</script>\n\n<Nested bind:clientHeight>\n\tHello\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/css-props-dynamic-component/A.svelte",
    "content": "<div>a</div>\n\n<style>\n\tdiv{\n\t\tcolor: var(--prop);\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/css-props-dynamic-component/B.svelte",
    "content": "<div>b</div>\n\n<style>\n\tdiv{\n\t\tcolor: var(--prop);\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/css-props-dynamic-component/_config.js",
    "content": "import { test } from '../../assert';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\twarnings: [],\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tlet div = /** @type {HTMLElement} */ (target.querySelector('div'));\n\t\tassert.equal(getComputedStyle(div).color, 'rgb(255, 0, 0)');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tdiv = /** @type {HTMLElement} */ (target.querySelector('div'));\n\t\tassert.equal(getComputedStyle(div).color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/css-props-dynamic-component/main.svelte",
    "content": "<script>\n\timport A from \"./B.svelte\";\n\timport B from \"./A.svelte\";\n\tlet value = $state(0);\n\n\tlet Comp = $derived(value % 2 === 0 ? A : B);\n</script>\n\n<button onclick={()=>value++}>click</button>\n\n<Comp --prop=\"red\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/dynamic-element-custom-element/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tmode: ['client'],\n\n\tprops: {\n\t\ttag: /** @type {string | null} */ ('my-custom-element'),\n\t\tname: /** @type {string | null | undefined} */ (null)\n\t},\n\thtml: `\n\t\t<my-custom-element id=\"a\">Hello null!</my-custom-element>\n\t\t<my-custom-element id=\"b\">Hello null!</my-custom-element>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.name = undefined;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<my-custom-element id=\"a\">Hello undefined!</my-custom-element>\n\t\t\t <my-custom-element id=\"b\">Hello undefined!</my-custom-element>`\n\t\t);\n\n\t\tcomponent.name = 'foo';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<my-custom-element id=\"a\">Hello foo!</my-custom-element>\n\t\t\t <my-custom-element id=\"b\">Hello foo!</my-custom-element>`\n\t\t);\n\n\t\tcomponent.tag = null;\n\t\tassert.htmlEqual(target.innerHTML, '<my-custom-element id=\"b\">Hello foo!</my-custom-element>');\n\n\t\tcomponent.tag = 'div';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div name=\"foo\" id=\"a\"></div>\n\t\t\t <my-custom-element id=\"b\">Hello foo!</my-custom-element>`\n\t\t);\n\n\t\tcomponent.tag = 'my-custom-element';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<my-custom-element id=\"a\">Hello foo!</my-custom-element>\n\t\t\t <my-custom-element id=\"b\">Hello foo!</my-custom-element>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/dynamic-element-custom-element/main.svelte",
    "content": "<script>\n\tclass MyCustomElement extends HTMLElement {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis._name = null;\n\t\t}\n\n\t\t/**\n\t\t * @param {string} name\n\t\t */\n\t\tset name(name) {\n\t\t\tthis._name = name;\n\t\t\tthis.render();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tthis.render();\n\t\t}\n\n\t\trender() {\n\t\t\tthis.innerHTML = \"Hello \" + this._name + \"!\";\n\t\t}\n\t}\n\n\twindow.customElements.define(\"my-custom-element\", MyCustomElement);\n\n\texport let tag;\n\texport let name;\n</script>\n\n<svelte:element this=\"{tag}\" {name} id=\"a\" />\n<my-custom-element {name} id=\"b\"></my-custom-element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/fine-grained-hydration-clean-attr/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\thtml: `<input type=\"checkbox\" name=\"lang\" value=\"keep\" />`,\n\tssrHtml: `<input type=\"checkbox\" name=\"lang\" value=\"keep\" checked />`,\n\ttest({ window, assert, target, mod }) {\n\t\tconst input = target.querySelector('input');\n\t\tassert.equal(input?.checked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/fine-grained-hydration-clean-attr/main.svelte",
    "content": "<script>\n\tlet to_check = $state(\"keep\")\n</script>\n\n<input type=\"checkbox\" name=\"lang\" value=\"keep\" checked={to_check === \"keep\"} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/head-script/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\ttest({ assert, window }) {\n\t\tdocument.dispatchEvent(new Event('DOMContentLoaded'));\n\t\tassert.equal(window.document.querySelector('button')?.textContent, 'Hello world');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/head-script/main.svelte",
    "content": "<svelte:head>\n\t<script>\n\t\t// A comment\n\t\tconst val = 'Hello world';\n\t\tdocument.addEventListener('DOMContentLoaded', () => {\n\t\t\tdocument.querySelector('button').textContent = val;\n\t\t});\n\t</script>\n</svelte:head>\n<button>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/head-scripts/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, window }) {\n\t\t// wait the script to load (maybe there a better way)\n\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t\tassert.htmlEqual(\n\t\t\twindow.document.body.innerHTML,\n\t\t\t`<main><b id=\"r1\">1</b><b id=\"r2\">2</b><b id=\"r3\">3</b></main>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/head-scripts/main.svelte",
    "content": "<script>\n\tfunction jssrc(src) {\n\t\treturn 'data:text/javascript;base64, ' + btoa(src);\n\t}\n\n\tconst scriptSrcs = [ 1, 2, 3 ]\n\t\t.map(n => jssrc(`document.getElementById('r${n}').innerText = '${n}';`));\n</script>\n\n<svelte:head>\n\t{#each scriptSrcs as src}\n    \t<script src={src} async defer></script>\n\t{/each}\n</svelte:head>\n\n<b id=\"r1\">?</b><b id=\"r2\">?</b><b id=\"r3\">?</b>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/html-tag-script/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\t// Test that @html does not execute scripts when instantiated in the client.\n\t// Needs to be in this test suite because JSDOM does not quite get this right.\n\tmode: ['client'],\n\ttest({ window, assert }) {\n\t\t// In here to give effects etc time to execute\n\t\tassert.htmlEqual(\n\t\t\twindow.document.body.innerHTML,\n\t\t\t`<main><div></div><script>document.body.innerHTML = 'this should not be executed'</script></main>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/html-tag-script/main.svelte",
    "content": "<div></div>\n{@html `<script>document.body.innerHTML = 'this should not be executed'</script>`}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/html-tag-script-2/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\t// Test that @html does not execute scripts when instantiated in the client.\n\t// Needs to be in this test suite because JSDOM does not quite get this right.\n\tmode: ['client'],\n\ttest({ window, assert }) {\n\t\t// In here to give effects etc time to execute\n\t\tassert.htmlEqual(\n\t\t\twindow.document.body.innerHTML,\n\t\t\t`<main>\n\t\t\t\t<div><script></script></div><script>document.body.innerHTML = 'this should not be executed'</script>\n\t\t\t\t<script></script><script>document.body.innerHTML = 'this neither'</script>\n\t\t\t</main>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/html-tag-script-2/main.svelte",
    "content": "<div>\n    <script></script>\n</div>\n{@html `<script>document.body.innerHTML = 'this should not be executed'</script>`}\n{#if true}\n    <script></script>{@html `<script>document.body.innerHTML = 'this neither'</script>`}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/hydrate-large-text-node/_config.js",
    "content": "import { test } from '../../assert';\n\n// Browsers split text nodes > 65536 characters into multiple consecutive text nodes\n// during HTML parsing. This test verifies that hydration correctly merges them.\nconst LARGE_TEXT = 'x'.repeat(70000);\n\nexport default test({\n\tmode: ['hydrate'],\n\tskip_mode: ['client'],\n\n\tprops: {\n\t\ttext: LARGE_TEXT\n\t},\n\n\tasync test({ assert, target }) {\n\t\tconst [p] = target.querySelectorAll('p');\n\n\t\t// The text content should be preserved after hydration\n\t\tassert.equal(p.textContent?.trim(), LARGE_TEXT);\n\t\t// After hydration, there should be only one text node (plus possible comment nodes)\n\t\tconst textNodes = [...p.childNodes].filter((node) => node.nodeType === 3);\n\t\tassert.equal(textNodes.length, 1, `Expected 1 text node, got ${textNodes.length}`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/hydrate-large-text-node/main.svelte",
    "content": "<script>\n\tlet { text } = $props();\n</script>\n\n<p>{text}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/inline-style-directive-important/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\thtml: `\n\t\t<h1 class=\"svelte-szzkfu\" style=\"background-color: red;\">hello</h1>\n\t\t<h1 class=\"svelte-szzkfu\" style=\"background-color: red !important;\">hello</h1>\n\t`,\n\n\tssrHtml: `\n\t\t<h1 class=\"svelte-szzkfu\" style=\"background-color: red;\">hello</h1>\n\t\t<h1 class=\"svelte-szzkfu\" style=\"background-color: red !important;\">hello</h1>\n\t`,\n\n\ttest({ assert, target, window, component }) {\n\t\tconst h1s = target.querySelectorAll('h1');\n\n\t\tassert.equal(window.getComputedStyle(h1s[0])['backgroundColor'], 'rgb(0, 0, 255)');\n\t\tassert.equal(window.getComputedStyle(h1s[1])['backgroundColor'], 'rgb(255, 0, 0)');\n\n\t\tcomponent.color = 'yellow';\n\t\tassert.equal(window.getComputedStyle(h1s[0])['backgroundColor'], 'rgb(0, 0, 255)');\n\t\tassert.equal(window.getComputedStyle(h1s[1])['backgroundColor'], 'rgb(255, 255, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/inline-style-directive-important/main.svelte",
    "content": "<script>\n\texport let color = 'red'\n</script>\n\n<h1 style:background-color={color} >hello</h1>\n<h1 style:background-color|important=\"{color}\">hello</h1>\n\n<style>\n\th1 {\n\t\tbackground-color: blue !important;\n\t}\n</style> "
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/inline-style-directive-precedence/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"font-size: 32px; color: red; background-color: green; border-color: green;\"></p>\n\t`,\n\n\ttest({ assert, target, window, component }) {\n\t\tconst p = target.querySelector('p');\n\t\tassert_ok(p);\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t\tassert.equal(styles.fontSize, '32px');\n\t\tassert.equal(styles.backgroundColor, 'rgb(0, 128, 0)');\n\t\tassert.equal(styles.borderColor, 'rgb(0, 128, 0)');\n\n\t\tcomponent.foo = 'font-size: 50px; color: green;'; // Update style attribute\n\t\t{\n\t\t\tconst p = target.querySelector('p');\n\t\t\tassert_ok(p);\n\t\t\tconst styles = window.getComputedStyle(p);\n\t\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(styles.fontSize, '32px');\n\t\t\tassert.equal(styles.backgroundColor, 'rgb(0, 128, 0)');\n\t\t\tassert.equal(styles.borderColor, 'rgb(0, 128, 0)');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/inline-style-directive-precedence/main.svelte",
    "content": "<script>\n\texport let foo = \"font-size: 20px; color: blue;\";\n\tlet baz = \"red\"; // static value\n\tlet bar = \"32\"; // static value interpolated\n\texport let bg = \"gre\"; // dynamic value interpolated/cached\n\texport let borderColor = \"green\"; // dynamic value non-cached\n</script>\n\n<p\n\tstyle:font-size=\"{bar}px\"\n\tstyle:color={baz}\n\tstyle=\"{foo}\"\n\tstyle:background-color=\"{bg}en\"\n\tstyle:border-color={borderColor}\n></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/inline-style-directive-update-with-spread/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\thtml: `\n\t\t<div style=\"background-color: rgb(255, 0, 0);\"></div>\n\t`,\n\n\ttest({ assert, target, window, component }) {\n\t\tconst div = target.querySelector('div');\n\t\tassert_ok(div);\n\t\tconst styles = window.getComputedStyle(div);\n\t\tassert.equal(styles.backgroundColor, 'rgb(255, 0, 0)');\n\n\t\t{\n\t\t\tcomponent.backgroundColor = 128;\n\t\t\tconst div = target.querySelector('div');\n\t\t\tassert_ok(div);\n\t\t\tconst styles = window.getComputedStyle(div);\n\t\t\tassert.equal(styles.backgroundColor, 'rgb(128, 0, 0)');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/inline-style-directive-update-with-spread/main.svelte",
    "content": "<script lang=\"ts\">\n\texport let backgroundColor = 255;\n</script>\n\n<div style:background-color=\"rgb({backgroundColor}, 0, 0)\" {...$$restProps}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/mount-in-iframe/App.svelte",
    "content": "<script>\n\timport { mount } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet { count } = $props();\n\n\tlet iframe;\n\n\t$effect(() => {\n\t\tmount(Child, {\n\t\t\ttarget: iframe.contentWindow.document.body,\n\t\t\tprops: {\n\t\t\t\tcount\n\t\t\t}\n\t\t});\n\t});\n</script>\n\n<iframe title=\"container\" bind:this={iframe}></iframe>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/mount-in-iframe/Child.svelte",
    "content": "<svelte:options css=\"injected\" />\n\n<script>\n\timport GrandChild from \"./GrandChild.svelte\";\n\n\tlet { count } = $props();\n</script>\n\n<h1>count: {count}</h1>\n<GrandChild {count} />\n\n<style>\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/mount-in-iframe/GrandChild.svelte",
    "content": "<svelte:options css=\"injected\" />\n\n<h1>inner</h1>\n\n<style>\n\th1 {\n\t\tcolor: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/mount-in-iframe/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../assert';\n\nexport default test({\n\tasync test({ target, assert }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst h1 = () =>\n\t\t\t/** @type {NodeListOf<HTMLHeadingElement>} */ (\n\t\t\t\t/** @type {Window} */ (\n\t\t\t\t\ttarget.querySelector('iframe')?.contentWindow\n\t\t\t\t).document.querySelectorAll('h1')\n\t\t\t);\n\n\t\tassert.equal(h1()[0].textContent, 'count: 0');\n\t\tassert.equal(getComputedStyle(h1()[0]).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(getComputedStyle(h1()[1]).color, 'rgb(0, 0, 255)');\n\n\t\tflushSync(() => button?.click());\n\n\t\tassert.equal(h1()[0].textContent, 'count: 1');\n\t\tassert.equal(getComputedStyle(h1()[0]).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(getComputedStyle(h1()[1]).color, 'rgb(0, 0, 255)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/mount-in-iframe/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => (count += 1)}>remount</button>\n\n{#key count}\n\t<App {count} />\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/sole-script-tag/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\t// Test that template with sole script tag does execute when instantiated in the client.\n\t// Needs to be in this test suite because JSDOM does not quite get this right.\n\tmode: ['client'],\n\tasync test({ target, assert }) {\n\t\t// In here to give effects etc time to execute\n\t\tassert.htmlEqual(target.querySelector('div')?.innerHTML || '', 'this should be executed');\n\t\t// Check that the script tag is properly removed\n\t\ttarget.querySelector('button')?.click();\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t\tassert.equal(target.querySelector('script'), null);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/sole-script-tag/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet visible = $state(true);\n</script>\n\n<button onclick={() => (visible = false)}>hide</button>\n{#if visible}\n\t<script>\n\t\tdocument.body.querySelector('.after').innerHTML = 'this should be executed';\n\t</script>\n{/if}\n<div class=\"after\">after</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties/Slider1.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider1</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties/Slider2.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider2</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\tcomponentName: /** @type {string | undefined} */ ('Slider1')\n\t},\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 0, 0); --track-color: rgb(255, 0, 0);\">\n\t\t\t<div id=\"component1\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider1</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 255, 0); --track-color: rgb(0, 0, 255);\">\n\t\t\t<div id=\"component2\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider1</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ target, window, assert, component }) {\n\t\tfunction assert_slider_1() {\n\t\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\t\tconst track_color2 = target.querySelector('#component2 span');\n\n\t\t\tassert_ok(rail_color1);\n\t\t\tassert_ok(track_color1);\n\t\t\tassert_ok(rail_color2);\n\t\t\tassert_ok(track_color2);\n\n\t\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\t\tassert.equal(rail_color1.textContent, 'Slider1');\n\t\t\tassert.equal(rail_color2.textContent, 'Slider1');\n\t\t}\n\n\t\tfunction assert_slider_2() {\n\t\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\t\tconst track_color2 = target.querySelector('#component2 span');\n\n\t\t\tassert_ok(rail_color1);\n\t\t\tassert_ok(track_color1);\n\t\t\tassert_ok(rail_color2);\n\t\t\tassert_ok(track_color2);\n\n\t\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\t\tassert.equal(rail_color1.textContent, 'Slider2');\n\t\t\tassert.equal(rail_color2.textContent, 'Slider2');\n\t\t}\n\n\t\tassert_slider_1();\n\t\tcomponent.componentName = 'Slider2';\n\t\tassert_slider_2();\n\t\tcomponent.componentName = undefined;\n\t\tassert.equal(window.document.querySelector('div')?.firstElementChild, null);\n\t\tcomponent.componentName = 'Slider1';\n\t\tassert_slider_1();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties/main.svelte",
    "content": "<script>\n\timport Slider1 from './Slider1.svelte';\n\timport Slider2 from './Slider2.svelte';\n\texport let componentName = 'Slider1';\n\t$: slider = componentName === 'Slider1' ? Slider1 : componentName === 'Slider2' ? Slider2 : undefined;\n</script>\n\n<svelte:component\n\tthis={slider}\n\tid=\"component1\"\n\t--rail-color=\"rgb(0, 0, 0)\"\n\t--track-color=\"rgb(255, 0, 0)\"\n/>\n\n<svelte:component\n\tthis={slider}\n\tid=\"component2\"\n\t--rail-color=\"rgb(0, 255, 0)\"\n\t--track-color=\"rgb(0, 0, 255)\"\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties-dynamic/Slider.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties-dynamic/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\trailColor1: 'black',\n\t\ttrackColor1: 'red',\n\t\trailColor2: 'green',\n\t\ttrackColor2: 'blue'\n\t},\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: black; --track-color: red;\">\n\t\t\t<div id=\"slider-1\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: green; --track-color: blue;\">\n\t\t\t<div id=\"slider-2\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ component, assert, target }) {\n\t\tcomponent.railColor1 = 'yellow';\n\t\tcomponent.trackColor2 = 'orange';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: yellow; --track-color: red;\">\n\t\t\t\t<div id=\"slider-1\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: green; --track-color: orange;\">\n\t\t\t\t<div id=\"slider-2\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties-dynamic/main.svelte",
    "content": "<script>\n\timport Slider from './Slider.svelte';\n\texport let railColor1;\n\texport let railColor2;\n\texport let trackColor1;\n\texport let trackColor2;\n\n\tfunction identity(color) {\n\t\treturn color;\n\t}\n</script>\n\n<svelte:component\n\tthis={Slider}\n\tid=\"slider-1\"\n\t--rail-color={railColor1}\n\t--track-color={trackColor1}\n/>\n\n<svelte:component\n\tthis={Slider}\n\tid=\"slider-2\"\n\t--rail-color={railColor2}\n\t--track-color={identity(trackColor2)}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties2/Slider1.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider1</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties2/Slider2.svelte",
    "content": "<script>\n  export let id;\n</script>\n\n<div {id}>\n  <p>Slider2</p>\n  <span>Track</span>\n</div>\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties2/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\tcomponentName: /** @type {string | undefined} */ ('Slider1')\n\t},\n\thtml: `\n\t\t<section>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 0, 0); --track-color: rgb(255, 0, 0);\">\n\t\t\t\t<div id=\"component1\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider1</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 255, 0); --track-color: rgb(0, 0, 255);\">\n\t\t\t\t<div id=\"component2\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider1</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</section>\n\t`,\n\ttest({ target, window, assert, component }) {\n\t\tfunction assert_slider_1() {\n\t\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\t\tconst track_color2 = target.querySelector('#component2 span');\n\n\t\t\tassert_ok(rail_color1);\n\t\t\tassert_ok(track_color1);\n\t\t\tassert_ok(rail_color2);\n\t\t\tassert_ok(track_color2);\n\n\t\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\t\tassert.equal(rail_color1.textContent, 'Slider1');\n\t\t\tassert.equal(rail_color2.textContent, 'Slider1');\n\t\t}\n\n\t\tfunction assert_slider_2() {\n\t\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\t\tconst track_color2 = target.querySelector('#component2 span');\n\n\t\t\tassert_ok(rail_color1);\n\t\t\tassert_ok(track_color1);\n\t\t\tassert_ok(rail_color2);\n\t\t\tassert_ok(track_color2);\n\n\t\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\t\tassert.equal(rail_color1.textContent, 'Slider2');\n\t\t\tassert.equal(rail_color2.textContent, 'Slider2');\n\t\t}\n\n\t\tassert_slider_1();\n\t\tcomponent.componentName = 'Slider2';\n\t\tassert_slider_2();\n\t\tcomponent.componentName = undefined;\n\t\tassert.equal(window.document.querySelector('div')?.firstElementChild, null);\n\t\tcomponent.componentName = 'Slider1';\n\t\tassert_slider_1();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-component-css-custom-properties2/main.svelte",
    "content": "<script>\n\timport Slider1 from './Slider1.svelte';\n\timport Slider2 from './Slider2.svelte';\n\texport let componentName = 'Slider1';\n\t$: slider = componentName === 'Slider1' ? Slider1 : componentName === 'Slider2' ? Slider2 : undefined;\n</script>\n\n<section>\n\t<svelte:component\n\t\tthis={slider}\n\t\tid=\"component1\"\n\t\t--rail-color=\"rgb(0, 0, 0)\"\n\t\t--track-color=\"rgb(255, 0, 0)\"\n\t/>\n\n\t<svelte:component\n\t\tthis={slider}\n\t\tid=\"component2\"\n\t\t--rail-color=\"rgb(0, 255, 0)\"\n\t\t--track-color=\"rgb(0, 0, 255)\"\n\t/>\n</section>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties/Slider1.svelte",
    "content": "<script>\n\texport let id;\n\texport let count = 0;\n</script>\n\n<div {id}>\n\t<p>Slider1</p>\n\t<span>Track</span>\n</div>\n\n{#if count === 0}\n\t<svelte:self\n\t\tid=\"nest-{id}\"\n\t\tcount={1}\n\t\t--rail-color=\"rgb(255, 255, 0)\"\n\t\t--track-color=\"rgb(255, 0, 255)\"\n\t/>\n{/if}\n\n<style>\n\tp {\n\t\tcolor: var(--rail-color);\n\t}\n\tspan {\n\t\tcolor: var(--track-color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties/Slider2.svelte",
    "content": "<script>\n\texport let id;\n\texport let count = 0;\n</script>\n\n<div {id}>\n\t<p>Slider2</p>\n\t<span>Track</span>\n</div>\n\n{#if count === 0}\n\t<svelte:self\n\t\tid=\"nest-{id}\"\n\t\tcount={1}\n\t\t--rail-color=\"rgb(0, 255, 255)\"\n\t\t--track-color=\"rgb(255, 255, 255)\"\n\t/>\n{/if}\n\n<style>\n\tp {\n\t\tcolor: var(--rail-color);\n\t}\n\tspan {\n\t\tcolor: var(--track-color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\tprops: {},\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 0, 0); --track-color: rgb(255, 0, 0);\">\n\t\t\t<div id=\"component1\">\n\t\t\t\t<p class=\"svelte-q538ga\">Slider1</p><span class=\"svelte-q538ga\">Track</span>\n\t\t\t</div>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(255, 255, 0); --track-color: rgb(255, 0, 255);\">\n\t\t\t\t<div id=\"nest-component1\">\n\t\t\t\t\t<p class=\"svelte-q538ga\">Slider1</p><span class=\"svelte-q538ga\">Track</span></div>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 255, 0); --track-color: rgb(0, 0, 255);\">\n\t\t\t<div id=\"component2\">\n\t\t\t\t<p class=\"svelte-q538ga\">Slider2</p><span class=\"svelte-q538ga\">Track</span>\n\t\t\t</div>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 255, 255); --track-color: rgb(255, 255, 255);\">\n\t\t\t\t<div id=\"nest-component2\">\n\t\t\t\t\t<p class=\"svelte-q538ga\">Slider2</p><span class=\"svelte-q538ga\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ target, window, assert }) {\n\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\tconst track_color2 = target.querySelector('#component2 span');\n\t\tconst nest_rail_color1 = target.querySelector('#nest-component1 p');\n\t\tconst nest_track_color1 = target.querySelector('#nest-component1 span');\n\t\tconst nest_rail_color2 = target.querySelector('#nest-component2 p');\n\t\tconst nest_track_color2 = target.querySelector('#nest-component2 span');\n\n\t\tassert_ok(rail_color1);\n\t\tassert_ok(track_color1);\n\t\tassert_ok(rail_color2);\n\t\tassert_ok(track_color2);\n\t\tassert_ok(nest_rail_color1);\n\t\tassert_ok(nest_track_color1);\n\t\tassert_ok(nest_rail_color2);\n\t\tassert_ok(nest_track_color2);\n\n\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\tassert.equal(window.getComputedStyle(nest_rail_color1).color, 'rgb(255, 255, 0)');\n\t\tassert.equal(window.getComputedStyle(nest_track_color1).color, 'rgb(255, 0, 255)');\n\t\tassert.equal(window.getComputedStyle(nest_rail_color2).color, 'rgb(0, 255, 255)');\n\t\tassert.equal(window.getComputedStyle(nest_track_color2).color, 'rgb(255, 255, 255)');\n\t\tassert.equal(rail_color1.textContent, 'Slider1');\n\t\tassert.equal(rail_color2.textContent, 'Slider2');\n\t\tassert.equal(nest_rail_color1.textContent, 'Slider1');\n\t\tassert.equal(nest_rail_color2.textContent, 'Slider2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties/main.svelte",
    "content": "<script>\n\timport Slider1 from './Slider1.svelte';\n\timport Slider2 from './Slider2.svelte';\n</script>\n\n<Slider1\n\tid=\"component1\"\n\t--rail-color=\"rgb(0, 0, 0)\"\n\t--track-color=\"rgb(255, 0, 0)\"\n/>\n\n<Slider2\n\tid=\"component2\"\n\t--rail-color=\"rgb(0, 255, 0)\"\n\t--track-color=\"rgb(0, 0, 255)\"\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties-dynamic/Slider.svelte",
    "content": "<script>\n  export let id;\n\texport let count = 0;\n\texport let railColor1;\n\texport let trackColor1;\n</script>\n\n<div {id}>\n  <p>Slider</p>\n  <span>Track</span>\n</div>\n\n{#if count === 0}\n\t<svelte:self\n\t\tid=\"nest-{id}\"\n\t\tcount=\"{count + 1}\"\n\t\t--rail-color={railColor1}\n\t\t--track-color={trackColor1}\n\t/>\n{/if}\n\n<style>\n  p {\n    color: var(--rail-color);\n  }\n  span {\n    color: var(--track-color);\n  }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties-dynamic/_config.js",
    "content": "import { test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\trailColor1: 'black',\n\t\ttrackColor1: 'red',\n\t\trailColor2: 'green',\n\t\ttrackColor2: 'blue',\n\t\tnestRailColor1: 'white',\n\t\tnestTrackColor1: 'gray',\n\t\tnestRailColor2: 'aqua',\n\t\tnestTrackColor2: 'pink'\n\t},\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: black; --track-color: red;\">\n\t\t\t<div id=\"slider-1\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: white; --track-color: gray;\">\n\t\t\t\t<div id=\"nest-slider-1\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: green; --track-color: blue;\">\n\t\t\t<div id=\"slider-2\">\n\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t</div>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: aqua; --track-color: pink;\">\n\t\t\t\t<div id=\"nest-slider-2\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ component, assert, target }) {\n\t\tcomponent.railColor1 = 'yellow';\n\t\tcomponent.trackColor2 = 'orange';\n\t\tcomponent.nestRailColor1 = 'lime';\n\t\tcomponent.nestTrackColor2 = 'gold';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color:yellow; --track-color:red;\">\n\t\t\t\t<div id=\"slider-1\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color:lime; --track-color:gray;\">\n\t\t\t\t\t<div id=\"nest-slider-1\">\n\t\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t\t</div>\n\t\t\t\t</svelte-css-wrapper>\n\t\t\t</svelte-css-wrapper>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color:green; --track-color:orange;\">\n\t\t\t\t<div id=\"slider-2\">\n\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t</div>\n\t\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color:aqua; --track-color:gold;\">\n\t\t\t\t\t<div id=\"nest-slider-2\">\n\t\t\t\t\t\t<p class=\"svelte-17ay6rc\">Slider</p>\n\t\t\t\t\t\t<span class=\"svelte-17ay6rc\">Track</span>\n\t\t\t\t\t</div>\n\t\t\t\t</svelte-css-wrapper>\n\t\t\t</svelte-css-wrapper>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties-dynamic/main.svelte",
    "content": "<script>\n\timport Slider from './Slider.svelte';\n\texport let railColor1;\n\texport let railColor2;\n\texport let trackColor1;\n\texport let trackColor2;\n\texport let nestRailColor1;\n\texport let nestRailColor2;\n\texport let nestTrackColor1;\n\texport let nestTrackColor2;\n\n\tfunction identity(color) {\n\t\treturn color;\n\t}\n</script>\n\n<Slider\n\tid=\"slider-1\"\n\t--rail-color={railColor1}\n\t--track-color={trackColor1}\n\trailColor1={nestRailColor1}\n\ttrackColor1={nestTrackColor1}\n/>\n\n<svelte:component\n\tthis={Slider}\n\tid=\"slider-2\"\n\t--rail-color={railColor2}\n\t--track-color={identity(trackColor2)}\n\trailColor1={nestRailColor2}\n\ttrackColor1={nestTrackColor2}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties2/Slider1.svelte",
    "content": "<script>\n\texport let id;\n\texport let count = 0;\n</script>\n\n<div {id}>\n\t<p>Slider1</p>\n\t<span>Track</span>\n</div>\n\n{#if count === 0}\n\t<svelte:self\n\t\tid=\"nest-{id}\"\n\t\tcount={1}\n\t\t--rail-color=\"rgb(255, 255, 0)\"\n\t\t--track-color=\"rgb(255, 0, 255)\"\n\t/>\n{/if}\n\n<style>\n\tp {\n\t\tcolor: var(--rail-color);\n\t}\n\tspan {\n\t\tcolor: var(--track-color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties2/Slider2.svelte",
    "content": "<script>\n\texport let id;\n\texport let count = 0;\n</script>\n\n<div {id}>\n\t<p>Slider2</p>\n\t<span>Track</span>\n</div>\n\n{#if count === 0}\n\t<svelte:self\n\t\tid=\"nest-{id}\"\n\t\tcount={1}\n\t\t--rail-color=\"rgb(0, 255, 255)\"\n\t\t--track-color=\"rgb(255, 255, 255)\"\n\t/>\n{/if}\n\n<style>\n\tp {\n\t\tcolor: var(--rail-color);\n\t}\n\tspan {\n\t\tcolor: var(--track-color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties2/_config.js",
    "content": "import { assert_ok, test } from '../../assert';\n\nexport default test({\n\tprops: {\n\t\tcomponentName: /** @type {string | undefined} */ ('Slider1')\n\t},\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 0, 0); --track-color: rgb(255, 0, 0);\">\n\t\t\t<div id=\"component1\">\n\t\t\t\t<p class=\"svelte-q538ga\">Slider1</p><span class=\"svelte-q538ga\">Track</span>\n\t\t\t</div>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(255, 255, 0); --track-color: rgb(255, 0, 255);\">\n\t\t\t\t<div id=\"nest-component1\">\n\t\t\t\t\t<p class=\"svelte-q538ga\">Slider1</p><span class=\"svelte-q538ga\">Track</span></div>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</svelte-css-wrapper>\n\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(0, 255, 0); --track-color: rgb(0, 0, 255);\">\n\t\t\t<div id=\"component2\">\n\t\t\t\t<p class=\"svelte-q538ga\">Slider1</p><span class=\"svelte-q538ga\">Track</span>\n\t\t\t</div>\n\t\t\t<svelte-css-wrapper style=\"display: contents; --rail-color: rgb(255, 255, 0); --track-color: rgb(255, 0, 255);\">\n\t\t\t\t<div id=\"nest-component2\">\n\t\t\t\t\t<p class=\"svelte-q538ga\">Slider1</p><span class=\"svelte-q538ga\">Track</span>\n\t\t\t\t</div>\n\t\t\t</svelte-css-wrapper>\n\t\t</svelte-css-wrapper>\n\t`,\n\ttest({ target, window, assert, component }) {\n\t\tfunction assert_slider_1() {\n\t\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\t\tconst track_color2 = target.querySelector('#component2 span');\n\t\t\tconst nest_rail_color1 = target.querySelector('#nest-component1 p');\n\t\t\tconst nest_track_color1 = target.querySelector('#nest-component1 span');\n\t\t\tconst nest_rail_color2 = target.querySelector('#nest-component2 p');\n\t\t\tconst nest_track_color2 = target.querySelector('#nest-component2 span');\n\t\t\tassert_ok(rail_color1);\n\t\t\tassert_ok(track_color1);\n\t\t\tassert_ok(rail_color2);\n\t\t\tassert_ok(track_color2);\n\t\t\tassert_ok(nest_rail_color1);\n\t\t\tassert_ok(nest_track_color1);\n\t\t\tassert_ok(nest_rail_color2);\n\t\t\tassert_ok(nest_track_color2);\n\n\t\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\t\tassert.equal(window.getComputedStyle(nest_rail_color1).color, 'rgb(255, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(nest_track_color1).color, 'rgb(255, 0, 255)');\n\t\t\tassert.equal(window.getComputedStyle(nest_rail_color2).color, 'rgb(255, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(nest_track_color2).color, 'rgb(255, 0, 255)');\n\t\t\tassert.equal(rail_color1.textContent, 'Slider1');\n\t\t\tassert.equal(rail_color2.textContent, 'Slider1');\n\t\t\tassert.equal(nest_rail_color1.textContent, 'Slider1');\n\t\t\tassert.equal(nest_rail_color2.textContent, 'Slider1');\n\t\t}\n\n\t\tfunction assert_slider_2() {\n\t\t\tconst rail_color1 = target.querySelector('#component1 p');\n\t\t\tconst track_color1 = target.querySelector('#component1 span');\n\t\t\tconst rail_color2 = target.querySelector('#component2 p');\n\t\t\tconst track_color2 = target.querySelector('#component2 span');\n\t\t\tconst nest_rail_color1 = target.querySelector('#nest-component1 p');\n\t\t\tconst nest_track_color1 = target.querySelector('#nest-component1 span');\n\t\t\tconst nest_rail_color2 = target.querySelector('#nest-component2 p');\n\t\t\tconst nest_track_color2 = target.querySelector('#nest-component2 span');\n\n\t\t\tassert_ok(rail_color1);\n\t\t\tassert_ok(track_color1);\n\t\t\tassert_ok(rail_color2);\n\t\t\tassert_ok(track_color2);\n\t\t\tassert_ok(nest_rail_color1);\n\t\t\tassert_ok(nest_track_color1);\n\t\t\tassert_ok(nest_rail_color2);\n\t\t\tassert_ok(nest_track_color2);\n\n\t\t\tassert.equal(window.getComputedStyle(rail_color1).color, 'rgb(0, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color1).color, 'rgb(255, 0, 0)');\n\t\t\tassert.equal(window.getComputedStyle(rail_color2).color, 'rgb(0, 255, 0)');\n\t\t\tassert.equal(window.getComputedStyle(track_color2).color, 'rgb(0, 0, 255)');\n\t\t\tassert.equal(window.getComputedStyle(nest_rail_color1).color, 'rgb(0, 255, 255)');\n\t\t\tassert.equal(window.getComputedStyle(nest_track_color1).color, 'rgb(255, 255, 255)');\n\t\t\tassert.equal(window.getComputedStyle(nest_rail_color2).color, 'rgb(0, 255, 255)');\n\t\t\tassert.equal(window.getComputedStyle(nest_track_color2).color, 'rgb(255, 255, 255)');\n\t\t\tassert.equal(rail_color1.textContent, 'Slider2');\n\t\t\tassert.equal(rail_color2.textContent, 'Slider2');\n\t\t\tassert.equal(nest_rail_color1.textContent, 'Slider2');\n\t\t\tassert.equal(nest_rail_color2.textContent, 'Slider2');\n\t\t}\n\n\t\tassert_slider_1();\n\t\tcomponent.componentName = 'Slider2';\n\t\tassert_slider_2();\n\t\tcomponent.componentName = undefined;\n\t\tassert.equal(window.document.querySelector('div')?.firstElementChild, null);\n\t\tcomponent.componentName = 'Slider1';\n\t\tassert_slider_1();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/samples/svelte-self-css-custom-properties2/main.svelte",
    "content": "<script>\n\timport Slider1 from './Slider1.svelte';\n\timport Slider2 from './Slider2.svelte';\n\texport let componentName = 'Slider1';\n\t$: slider = componentName === 'Slider1' ? Slider1 : componentName === 'Slider2' ? Slider2 : undefined;\n</script>\n\n<svelte:component\n\tthis={slider}\n\tid=\"component1\"\n\t--rail-color=\"rgb(0, 0, 0)\"\n\t--track-color=\"rgb(255, 0, 0)\"\n/>\n\n<svelte:component\n\tthis={slider}\n\tid=\"component2\"\n\t--rail-color=\"rgb(0, 255, 0)\"\n\t--track-color=\"rgb(0, 0, 255)\"\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/test-ssr.ts",
    "content": "// @vitest-environment jsdom\n// Yes it's an SSR test, but we need the env to compare html\n// This is in its own file because if we had the jsdom environment for the other playwright browser tests,\n// esbuild would choke on it\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { setImmediate } from 'node:timers/promises';\nimport { render } from 'svelte/server';\nimport { compile_directory } from '../helpers';\nimport { assert_html_equal_with_options } from '../html_equal';\nimport { suite } from '../suite';\nimport { describe } from 'vitest';\n\nexport async function run_ssr_test(\n\tconfig: ReturnType<typeof import('./assert').test>,\n\ttest_dir: string\n) {\n\ttry {\n\t\tawait compile_directory(test_dir, 'server', config.compileOptions);\n\n\t\tconst Component = (await import(`${test_dir}/_output/server/main.svelte.js`)).default;\n\t\tconst { body } = render(Component, { props: config.props || {}, idPrefix: config.id_prefix });\n\n\t\tfs.writeFileSync(`${test_dir}/_output/rendered.html`, body);\n\n\t\tif (config.ssrHtml) {\n\t\t\tassert_html_equal_with_options(body, config.ssrHtml, {\n\t\t\t\tpreserveComments: config.compileOptions?.preserveComments\n\t\t\t});\n\t\t} else if (config.html) {\n\t\t\tassert_html_equal_with_options(body, config.html, {\n\t\t\t\tpreserveComments: config.compileOptions?.preserveComments\n\t\t\t});\n\t\t}\n\t} catch (err: any) {\n\t\terr.stack += `\\n\\ncmd-click: ${path.relative(process.cwd(), test_dir)}/main.svelte`;\n\t\tthrow err;\n\t}\n\n\t// wait for vitest to report progress\n\tawait setImmediate();\n}\n\nconst { run } = suite<ReturnType<typeof import('./assert').test>>(async (config, test_dir) => {\n\tif (config.mode && !config.mode.includes('server')) return;\n\tif (config.skip_mode?.includes('server')) return;\n\tawait run_ssr_test(config, test_dir);\n});\n\ndescribe('runtime-browser (ssr)', async () => {\n\tawait run(__dirname);\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-browser/test.ts",
    "content": "import { chromium } from '@playwright/test';\nimport { build } from 'esbuild';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { compile } from 'svelte/compiler';\nimport { afterAll, assert, beforeAll, describe } from 'vitest';\nimport { suite, suite_with_variants } from '../suite';\nimport { write, fragments } from '../helpers';\nimport type { Warning } from '#compiler';\n\nconst assert_file = path.resolve(__dirname, 'assert.js');\n\nlet browser: import('@playwright/test').Browser;\n\nbeforeAll(async () => {\n\tbrowser = await chromium.launch();\n}, 20000);\n\nafterAll(async () => {\n\tif (browser) await browser.close();\n});\n\nconst { run: run_browser_tests } = suite_with_variants<\n\tReturnType<typeof import('./assert').test>,\n\t'dom' | 'hydrate',\n\tvoid\n>(\n\t['dom', 'hydrate'],\n\t(variant, config) => {\n\t\tif (variant === 'hydrate') {\n\t\t\tif (config.mode && !config.mode.includes('hydrate')) return 'no-test';\n\t\t\tif (config.skip_mode?.includes('hydrate')) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\t() => {},\n\tasync (config, test_dir, variant) => {\n\t\tawait run_test(test_dir, config, variant === 'hydrate');\n\t}\n);\n\ndescribe.concurrent(\n\t'runtime-browser',\n\t() => run_browser_tests(__dirname),\n\t// Browser tests are brittle and slow on CI\n\t{ timeout: 20000, retry: process.env.CI ? 1 : 0 }\n);\n\nconst { run: run_ce_tests } = suite<ReturnType<typeof import('./assert').test>>(\n\tasync (config, test_dir) => {\n\t\tawait run_test(test_dir, config, false);\n\t}\n);\n\ndescribe.concurrent(\n\t'custom-elements',\n\t() => run_ce_tests(__dirname, 'custom-elements-samples'),\n\t// Browser tests are brittle and slow on CI\n\t{ timeout: 20000, retry: process.env.CI ? 1 : 0 }\n);\n\nasync function run_test(\n\ttest_dir: string,\n\tconfig: ReturnType<typeof import('./assert').test>,\n\thydrate: boolean\n) {\n\tconst warnings: any[] = [];\n\n\tconst build_result = await build({\n\t\tentryPoints: [`${__dirname}/driver.js`],\n\t\twrite: false,\n\t\tdefine: {\n\t\t\t__HYDRATE__: String(hydrate),\n\t\t\t__CE_TEST__: String(test_dir.includes('custom-elements-samples'))\n\t\t},\n\t\talias: {\n\t\t\t__MAIN_DOT_SVELTE__: path.resolve(test_dir, 'main.svelte'),\n\t\t\t__CONFIG__: path.resolve(test_dir, '_config.js'),\n\t\t\t'assert.js': assert_file\n\t\t},\n\t\tconditions: ['browser', 'production'],\n\t\tplugins: [\n\t\t\t{\n\t\t\t\tname: 'testing-runtime-browser',\n\t\t\t\tsetup(build) {\n\t\t\t\t\tbuild.onLoad({ filter: /\\.svelte$/ }, (args) => {\n\t\t\t\t\t\tconst compiled = compile(fs.readFileSync(args.path, 'utf-8').replace(/\\r/g, ''), {\n\t\t\t\t\t\t\tgenerate: 'client',\n\t\t\t\t\t\t\tfragments,\n\t\t\t\t\t\t\t...config.compileOptions,\n\t\t\t\t\t\t\timmutable: config.immutable,\n\t\t\t\t\t\t\tcustomElement: test_dir.includes('custom-elements-samples'),\n\t\t\t\t\t\t\taccessors: 'accessors' in config ? config.accessors : true\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\twrite(`${test_dir}/_output/client/${path.basename(args.path)}.js`, compiled.js.code);\n\n\t\t\t\t\t\tcompiled.warnings.forEach((warning) => {\n\t\t\t\t\t\t\tif (warning.code === 'options_deprecated_accessors') return;\n\t\t\t\t\t\t\twarnings.push(warning);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (compiled.css !== null) {\n\t\t\t\t\t\t\tcompiled.js.code += `document.head.innerHTML += \\`<style>${compiled.css.code}</style>\\``;\n\t\t\t\t\t\t\twrite(\n\t\t\t\t\t\t\t\t`${test_dir}/_output/client/${path.basename(args.path)}.css`,\n\t\t\t\t\t\t\t\tcompiled.css.code\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontents: compiled.js.code,\n\t\t\t\t\t\t\tloader: 'js'\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tbundle: true,\n\t\tformat: 'iife',\n\t\tglobalName: 'test'\n\t});\n\n\tlet build_result_ssr;\n\tif (hydrate) {\n\t\tconst ssr_entry = path.resolve(__dirname, '../../src/index-server.js');\n\n\t\tbuild_result_ssr = await build({\n\t\t\tentryPoints: [`${__dirname}/driver-ssr.js`],\n\t\t\twrite: false,\n\t\t\talias: {\n\t\t\t\t__MAIN_DOT_SVELTE__: path.resolve(test_dir, 'main.svelte'),\n\t\t\t\t__CONFIG__: path.resolve(test_dir, '_config.js')\n\t\t\t},\n\t\t\tconditions: ['browser', 'production'],\n\t\t\tplugins: [\n\t\t\t\t{\n\t\t\t\t\tname: 'testing-runtime-browser-ssr',\n\t\t\t\t\tsetup(build) {\n\t\t\t\t\t\t// When running the server version of the Svelte files,\n\t\t\t\t\t\t// we also want to use the server export of the Svelte package\n\t\t\t\t\t\tbuild.onResolve({ filter: /./ }, (args) => {\n\t\t\t\t\t\t\tif (args.path === 'svelte') {\n\t\t\t\t\t\t\t\treturn { path: ssr_entry };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tbuild.onLoad({ filter: /\\.svelte$/ }, (args) => {\n\t\t\t\t\t\t\tconst compiled = compile(fs.readFileSync(args.path, 'utf-8').replace(/\\r/g, ''), {\n\t\t\t\t\t\t\t\tgenerate: 'server',\n\t\t\t\t\t\t\t\t...config.compileOptions,\n\t\t\t\t\t\t\t\timmutable: config.immutable,\n\t\t\t\t\t\t\t\tcustomElement: test_dir.includes('custom-elements-samples'),\n\t\t\t\t\t\t\t\taccessors: 'accessors' in config ? config.accessors : true\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontents: compiled.js.code,\n\t\t\t\t\t\t\t\tloader: 'js'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tbundle: true,\n\t\t\tplatform: 'node',\n\t\t\tformat: 'iife',\n\t\t\tglobalName: 'test_ssr'\n\t\t});\n\t}\n\n\tfunction assert_warnings() {\n\t\tif (config.warnings) {\n\t\t\tassert.deepStrictEqual(\n\t\t\t\twarnings.map(\n\t\t\t\t\t(w) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tcode: w.code,\n\t\t\t\t\t\t\tmessage: w.message,\n\t\t\t\t\t\t\tstart: w.start,\n\t\t\t\t\t\t\tend: w.end\n\t\t\t\t\t\t}) as Warning\n\t\t\t\t),\n\t\t\t\tconfig.warnings\n\t\t\t);\n\t\t} else if (warnings.length) {\n\t\t\t/* eslint-disable no-unsafe-finally */\n\t\t\tconsole.warn(warnings);\n\t\t\tthrow new Error('Received unexpected warnings');\n\t\t}\n\t}\n\n\tassert_warnings();\n\n\ttry {\n\t\tconst page = await browser.newPage();\n\t\tpage.on('console', (message) => {\n\t\t\tlet method = message.type();\n\t\t\t// @ts-ignore\n\t\t\tif (method === 'warning') method = 'warn';\n\t\t\t// @ts-ignore\n\t\t\tconsole[method](message.text());\n\t\t});\n\n\t\tif (build_result_ssr) {\n\t\t\tconst result: any = await page.evaluate(\n\t\t\t\tbuild_result_ssr.outputFiles[0].text + '; test_ssr.default()'\n\t\t\t);\n\t\t\tawait page.setContent('<head>' + result.head + '</head><main>' + result.html + '</main>');\n\t\t} else {\n\t\t\tawait page.setContent('<main></main>');\n\t\t}\n\n\t\t// uncomment to see what was generated\n\t\t// fs.writeFileSync(`${test_dir}/_output/bundle-${hydrate}.js`, build_result.outputFiles[0].text);\n\t\tconst test_result = await page.evaluate(\n\t\t\tbuild_result.outputFiles[0].text + \";test.default(document.querySelector('main'))\"\n\t\t);\n\n\t\tif (test_result) console.log(test_result);\n\t\tawait page.close();\n\t} catch (err: any) {\n\t\tpretty_print_browser_assertion(err.message);\n\t\tthrow err;\n\t}\n}\n\nfunction pretty_print_browser_assertion(message: string) {\n\tconst match = /Error: Expected \"(.+)\" to equal \"(.+)\"/.exec(message);\n\n\tif (match) {\n\t\tassert.equal(match[1], match[2]);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>action</button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst eventEnter = new window.MouseEvent('mouseenter');\n\t\tconst eventLeave = new window.MouseEvent('mouseleave');\n\n\t\tawait button.dispatchEvent(eventEnter);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t\t<div class=\"tooltip\">Perform an Action</div>\n\t\t`\n\t\t);\n\n\t\tawait button.dispatchEvent(eventLeave);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action/main.svelte",
    "content": "<script>\n\tfunction tooltip(node, text) {\n\t\tlet tooltip = null;\n\n\t\tfunction onMouseEnter() {\n\t\t\ttooltip = document.createElement('div');\n\t\t\ttooltip.classList.add('tooltip');\n\t\t\ttooltip.textContent = text;\n\t\t\tnode.parentNode.appendChild(tooltip);\n\t\t}\n\n\t\tfunction onMouseLeave() {\n\t\t\tif (!tooltip) return;\n\t\t\ttooltip.remove();\n\t\t\ttooltip = null;\n\t\t}\n\n\t\tnode.addEventListener('mouseenter', onMouseEnter);\n\t\tnode.addEventListener('mouseleave', onMouseLeave);\n\t\t\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('mouseenter', onMouseEnter);\n\t\t\t\tnode.removeEventListener('mouseleave', onMouseLeave);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<button use:tooltip=\"{'Perform an Action'}\">action</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-body/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>',\n\n\tasync test({ assert, target, window }) {\n\t\tconst enter = new window.MouseEvent('mouseenter');\n\t\tconst leave = new window.MouseEvent('mouseleave');\n\n\t\tawait window.document.body.dispatchEvent(enter);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<div class=\"tooltip\">Perform an Action</div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tawait window.document.body.dispatchEvent(leave);\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-body/main.svelte",
    "content": "<script>\n\tlet container;\n\tfunction tooltip(node, text) {\n\t\tlet tooltip = null;\n\n\t\tfunction onMouseEnter() {\n\t\t\ttooltip = document.createElement('div');\n\t\t\ttooltip.classList.add('tooltip');\n\t\t\ttooltip.textContent = text;\n\t\t\tcontainer.appendChild(tooltip);\n\t\t}\n\n\t\tfunction onMouseLeave() {\n\t\t\tif (!tooltip) return;\n\t\t\ttooltip.remove();\n\t\t\ttooltip = null;\n\t\t}\n\n\t\tnode.addEventListener('mouseenter', onMouseEnter);\n\t\tnode.addEventListener('mouseleave', onMouseLeave);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('mouseenter', onMouseEnter);\n\t\t\t\tnode.removeEventListener('mouseleave', onMouseLeave);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<svelte:body use:tooltip=\"{'Perform an Action'}\" />\n<div bind:this={container}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-component/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\taccessors: false,\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, '<button>foo / foo</button><div></div>');\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>bar / bar</button><div></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-component/main.svelte",
    "content": "<script>\n\timport Component from \"./sub.svelte\"\n\tlet state = 'foo';\n\tlet param = '';\n\n\tfunction action(node, _param) {\n\t\tparam = _param\n\t\treturn {\n\t\t\tupdate(_param) {\n\t\t\t\tparam = _param;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button on:click={() => state = 'bar'}>{state} / {param}</button>\n<Component {action} {state}></Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-component/sub.svelte",
    "content": "<script>\n\texport let action;\n\texport let state;\n</script>\n\n<div use:action={state}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<button>0, 0</button>',\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.MouseEvent('click', {\n\t\t\tclientX: 42,\n\t\t\tclientY: 42\n\t\t});\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>42, 42</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler/main.svelte",
    "content": "<script>\n\texport let x = 0;\n\texport let y = 0;\n\n\tfunction tap(node, callback) {\n\t\tfunction clickHandler(event) {\n\t\t\tcallback({\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY\n\t\t\t});\n\t\t}\n\n\t\tnode.addEventListener('click', clickHandler, false);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.addEventListener('click', clickHandler, false);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button use:tap={event => (x = event.x, y = event.y)}>{x}, {y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<button>bar</button>\n\t\t<button>baz</button>\n\n\t\t<p>fromDom: </p>\n\t\t<p>fromState: </p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('click');\n\n\t\tconst buttons = target.querySelectorAll('button');\n\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\t\t\t<button>baz</button>\n\n\t\t\t<p>fromDom: bar</p>\n\t\t\t<p>fromState: bar</p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(component.fromDom, 'bar');\n\t\tassert.equal(component.fromState, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each/main.svelte",
    "content": "<script>\n\texport let items = ['foo', 'bar', 'baz'];\n\texport let fromDom = '';\n\texport let fromState = '';\n\texport let x = 0;\n\texport let y = 0;\n\n\tfunction tap(node, callback) {\n\t\tnode.addEventListener('click', callback, false);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.addEventListener('click', callback, false);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each items as item}\n\t<button use:tap='{e => (fromDom = e.target.textContent, fromState = item)}'>{item}</button>\n{/each}\n\n<p>fromDom: {fromDom}</p>\n<p>fromState: {fromState}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each-destructured/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0: foo</button>\n\t\t<button>1: bar</button>\n\t\t<button>2: baz</button>\n\n\t\t<p>first: </p>\n\t\t<p>second: </p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('click');\n\n\t\tconst buttons = target.querySelectorAll('button');\n\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>0: foo</button>\n\t\t\t<button>1: bar</button>\n\t\t\t<button>2: baz</button>\n\n\t\t\t<p>first: 1</p>\n\t\t\t<p>second: bar</p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(component.first, '1');\n\t\tassert.equal(component.second, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each-destructured/main.svelte",
    "content": "<script>\n\texport let items = [[0, 'foo'], [1, 'bar'], [2, 'baz']];\n\texport let first = '';\n\texport let second = '';\n\texport let x = 0;\n\texport let y = 0;\n\n\tfunction tap(node, callback) {\n\t\tfunction clickHandler(event) {\n\t\t\tcallback();\n\t\t}\n\n\t\tnode.addEventListener('click', clickHandler, false);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.addEventListener('click', clickHandler, false);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each items as [item0, item1]}\n\t<button use:tap='{() => (first = item0, second = item1)}'>\n\t\t{item0}: {item1}\n\t</button>\n{/each}\n\n<p>first: {first}</p>\n<p>second: {second}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-node-context/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: '<button>10</button>',\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.MouseEvent('click');\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>11</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-node-context/main.svelte",
    "content": "<script>\n\texport let z = 10;\n\n\tfunction tap(node, callback) {\n\t\tconst clickHandler = event => {\n\t\t\tcallback(event);\n\t\t};\n\n\t\tnode.addEventListener('click', clickHandler, false);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.addEventListener('click', clickHandler, false);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button use:tap='{() => z += 1}'>{z}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-this/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<input>',\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.KeyboardEvent('keydown', {\n\t\t\tkey: 'Enter'\n\t\t});\n\n\t\tlet blurred = false;\n\n\t\tinput.focus();\n\n\t\tinput.addEventListener('blur', () => {\n\t\t\tblurred = true;\n\t\t});\n\n\t\tinput.dispatchEvent(event);\n\n\t\tassert.ok(blurred);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-this/main.svelte",
    "content": "<script>\n\tfunction enter(node, callback) {\n\t\tfunction handleKeydown(event) {\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tcallback(event);\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener('keydown', handleKeydown);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('keydown', handleKeydown);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<input use:enter='{e => e.target.blur()}'>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-with-context/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<button>???</button>',\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.MouseEvent('click', {\n\t\t\tclientX: 42,\n\t\t\tclientY: 42\n\t\t});\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>42</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-with-context/main.svelte",
    "content": "<script>\n\texport let z = '???';\n\texport let answer = '42';\n\n\tfunction tap(node, callback) {\n\t\tconst clickHandler = event => {\n\t\t\tcallback({ answer });\n\t\t};\n\n\t\tnode.addEventListener('click', clickHandler, false);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.addEventListener('click', clickHandler, false);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button use:tap='{event => z = event.answer}'>{z}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-document/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>',\n\n\tasync test({ assert, target, window }) {\n\t\tconst visibility = new window.Event('visibilitychange');\n\n\t\tawait window.document.dispatchEvent(visibility);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<div class=\"tooltip\">Perform an Action</div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-document/main.svelte",
    "content": "<script>\n\tlet container;\n\tfunction tooltip(node, text) {\n\t\tlet tooltip = null;\n\n\t\tfunction onVisibilityChange() {\n\t\t\ttooltip = document.createElement('div');\n\t\t\ttooltip.classList.add('tooltip');\n\t\t\ttooltip.textContent = text;\n\t\t\tcontainer.appendChild(tooltip);\n\t\t}\n\n\t\tnode.addEventListener('visibilitychange', onVisibilityChange);\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('visibilitychange', onVisibilityChange);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<svelte:document use:tooltip=\"{'Perform an Action'}\" />\n<div bind:this={container}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-function/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>action</button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tconst eventEnter = new window.MouseEvent('mouseenter');\n\t\tconst eventLeave = new window.MouseEvent('mouseleave');\n\n\t\tawait button.dispatchEvent(eventEnter);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t\t<div class=\"tooltip\">Perform an Action</div>\n\t\t`\n\t\t);\n\n\t\tawait button.dispatchEvent(eventLeave);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-function/main.svelte",
    "content": "<script>\n\tconst translations = {\n\t\tperform_action: 'Perform an Action'\n\t};\n\n\tfunction t(key) {\n\t\treturn translations[key] || `{{${key}}}`;\n\t}\n\n\texport let actionTransKey = 'perform_action';\n\n\tfunction tooltip(node, text) {\n\t\tlet tooltip = null;\n\n\t\tfunction onMouseEnter() {\n\t\t\ttooltip = document.createElement('div');\n\t\t\ttooltip.classList.add('tooltip');\n\t\t\ttooltip.textContent = text;\n\t\t\tnode.parentNode.appendChild(tooltip);\n\t\t}\n\n\t\tfunction onMouseLeave() {\n\t\t\tif (!tooltip) return;\n\t\t\ttooltip.remove();\n\t\t\ttooltip = null;\n\t\t}\n\n\t\tnode.addEventListener('mouseenter', onMouseEnter);\n\t\tnode.addEventListener('mouseleave', onMouseLeave);\n\t\t\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('mouseenter', onMouseEnter);\n\t\t\t\tnode.removeEventListener('mouseleave', onMouseLeave);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<button use:tooltip=\"{t(actionTransKey)}\">action</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>action</button>\n\t`,\n\tasync test({ assert, target }) {\n\t\tconst button = /** @type {HTMLButtonElement & { foo: string }} */ (\n\t\t\ttarget.querySelector('button')\n\t\t);\n\t\tassert.equal(button.foo, 'bar1337');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-object/main.svelte",
    "content": "<script>\n  const obj = {\n    foo: 'bar',\n    action(element, {leet}) {\n      element.foo = this.foo + leet;\n    },\n  };\n</script>\n\n<button use:obj.action={{leet: 1337}}>action</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-object-deep/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>action</button>\n\t`,\n\tasync test({ assert, target }) {\n\t\tconst button = /** @type {HTMLButtonElement & { foo: string }} */ (\n\t\t\ttarget.querySelector('button')\n\t\t);\n\t\tassert.equal(button.foo, 'bar1337');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-object-deep/main.svelte",
    "content": "<script>\n\tconst obj = {\n\t\tdeep: {\n\t\t\tfoo : 'bar',\n\t\t\taction(element, { leet }) {\n\t\t\t\telement.foo = this.foo + leet;\n\t\t\t}\n\t\t}\n\t};\n</script>\n\n<button use:obj.deep.action={{ leet: 1337 }}>action</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-receives-element-mounted/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {Record<string, any>} */\nconst result = {};\n\nexport default test({\n\tget props() {\n\t\treturn { result };\n\t},\n\tasync test({ assert }) {\n\t\tassert.notEqual(result.parentElement, null);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-receives-element-mounted/main.svelte",
    "content": "<script>\n  export let result;\n  function onMountAction(node) {\n    result.parentElement = node.parentElement;\n  }\n</script>\n\n<h1 use:onMountAction>Hello!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-ternary-template/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { target: 'World!', display: true };\n\t},\n\n\thtml: `\n\t\t<h1></h1>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst header = target.querySelector('h1');\n\t\tok(header);\n\n\t\tconst click = new window.MouseEvent('click');\n\n\t\tawait header.dispatchEvent(click);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Hello World!</h1>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-ternary-template/main.svelte",
    "content": "<script>\n  export let display;\n  export let target;\n\n  function insert(node, text) {\n    function onClick() {\n      node.textContent = text;\n    }\n    node.addEventListener('click', onClick);\n\n    return {\n      destroy() {\n        node.removeEventListener('click', onClick);\n      },\n    };\n  }\n</script>\n\n<h1 use:insert={display ? `Hello ${target}` : ''} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-this/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst click = new window.MouseEvent('click');\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button>');\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-this/main.svelte",
    "content": "<script>\n\texport let x = 0;\n\n\tfunction foo(node) {\n\t\tconst handler = () => {\n\t\t\tx += 1;\n\t\t};\n\n\t\tnode.addEventListener('click', handler);\n\t\thandler();\n\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('click', handler);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button use:foo>{x}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>action</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst enter = new window.MouseEvent('mouseenter');\n\t\tconst leave = new window.MouseEvent('mouseleave');\n\t\tconst ctrlPress = new window.KeyboardEvent('keydown', { ctrlKey: true });\n\n\t\tbutton.dispatchEvent(enter);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t\t<div class=\"tooltip\">Perform an Action</div>\n\t\t`\n\t\t);\n\n\t\twindow.dispatchEvent(ctrlPress);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t\t<div class=\"tooltip\">Perform an augmented Action</div>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(leave);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>action</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-update/main.svelte",
    "content": "<script>\n\texport let text = 'Perform an Action';\n\n\tfunction checkForCtrl(event) {\n\t\tif (event.ctrlKey) {\n\t\t\ttext = 'Perform an augmented Action';\n\t\t} else {\n\t\t\ttext = 'Perform an Action';\n\t\t}\n\t}\n\n\tfunction tooltip(node, text) {\n\t\tlet tooltip = null;\n\n\t\tfunction onMouseEnter() {\n\t\t\ttooltip = document.createElement('div');\n\t\t\ttooltip.classList.add('tooltip');\n\t\t\ttooltip.textContent = text;\n\t\t\tnode.parentNode.appendChild(tooltip);\n\t\t}\n\n\t\tfunction onMouseLeave() {\n\t\t\tif (!tooltip) return;\n\t\t\ttooltip.remove();\n\t\t\ttooltip = null;\n\t\t}\n\n\t\tnode.addEventListener('mouseenter', onMouseEnter);\n\t\tnode.addEventListener('mouseleave', onMouseLeave);\n\n\t\treturn {\n\t\t\tupdate(text) {\n\t\t\t\tif (tooltip) tooltip.textContent = text;\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('mouseenter', onMouseEnter);\n\t\t\t\tnode.removeEventListener('mouseleave', onMouseLeave);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<button use:tooltip=\"{text}\">action</button>\n<svelte:window on:keydown=\"{checkForCtrl}\" on:keyup=\"{checkForCtrl}\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-update-before-destroy/Component.svelte",
    "content": "<script>\n  import { afterUpdate, onDestroy } from \"svelte\";\n\n  export let id;\n\texport let items;\n\n  let item = $items[id];\n\tlet selected = true;\n\n  function onClick() {\n    selected = !selected;\n    items.set({});\n  }\n\n  onDestroy(() => {\n\t\tconsole.log(\"onDestroy\");\n  });\n\n  afterUpdate(() => {\n    console.log(\"afterUpdate\");\n  });\n</script>\n\n<button on:click=\"{onClick}\">Click Me</button>\n{#if selected}\n  <div>{item.id}</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-update-before-destroy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Click Me</button>\n\t\t<div>1</div>\n\t`,\n\tasync test({ assert, target, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['afterUpdate', 'onDestroy']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/action-update-before-destroy/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n  import Component from \"./Component.svelte\";\n\n\tlet items = writable({ 1: { id: 1 } });\n</script>\n\n{#each Object.values($items) as item (item.id)}\n  <Component id=\"{item.id}\" {items} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/after-render-prevents-loop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server', 'async-server'],\n\n\tget props() {\n\t\treturn { value: 'hello!' };\n\t},\n\n\thtml: `\n\t\t<p>hello!</p>\n\t\t<p>hello!</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.value = 'goodbye!';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>goodbye!</p>\n\t\t\t<p>goodbye!</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/after-render-prevents-loop/main.svelte",
    "content": "<script>\n\timport { afterUpdate } from 'svelte';\n\n\texport let value;\n\tlet mirror;\n\n\tafterUpdate(() => {\n\t\tmirror = value;\n\t});\n</script>\n\n<p>{value}</p>\n<p>{mirror}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/after-render-triggers-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server', 'async-server'],\n\n\tget props() {\n\t\treturn { value: 'hello!' };\n\t},\n\n\thtml: `\n\t\t<p>hello!</p>\n\t\t<p>hello!</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.value = 'goodbye!';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>goodbye!</p>\n\t\t\t<p>goodbye!</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/after-render-triggers-update/main.svelte",
    "content": "<script>\n\timport { afterUpdate } from 'svelte';\n\n\texport let a;\n\texport let b;\n\n\texport let value;\n\n\tafterUpdate(() => {\n\t\tb.textContent = a.textContent;\n\t});\n</script>\n\n<p bind:this={a}>{value}</p>\n<p bind:this={b}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-css/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t\t<div>b</div>\n\t\t<div>c</div>\n\t\t<div>d</div>\n\t\t<div>e</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tlet divs = target.querySelectorAll('div');\n\t\tdivs.forEach((div) => {\n\t\t\t// @ts-expect-error\n\t\t\tdiv.getBoundingClientRect = function () {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tconst index = [...this.parentNode.children].indexOf(this);\n\t\t\t\tconst top = index * 30;\n\n\t\t\t\treturn {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 100,\n\t\t\t\t\ttop,\n\t\t\t\t\tbottom: top + 20\n\t\t\t\t};\n\t\t\t};\n\t\t});\n\n\t\tcomponent.things = [\n\t\t\t{ id: 5, name: 'e' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 1, name: 'a' }\n\t\t];\n\n\t\traf.tick(0);\n\n\t\tdivs = target.querySelectorAll('div');\n\t\tassert.ok(divs[0].getAnimations().length > 0);\n\t\tassert.equal(divs[1].getAnimations().length, 0);\n\t\tassert.equal(divs[2].getAnimations().length, 0);\n\t\tassert.equal(divs[3].getAnimations().length, 0);\n\t\tassert.ok(divs[4].getAnimations().length > 0);\n\n\t\traf.tick(100);\n\t\tassert.deepEqual([divs[0].getAnimations().length, divs[4].getAnimations().length], [0, 0]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-css/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction flip(node, animation, params) {\n\t\tconst dx = animation.from.left - animation.to.left;\n\t\tconst dy = animation.from.top - animation.to.top;\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t, u) => `transform: translate(${u + dx}px, ${u * dy}px)`\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.id)}\n\t<div animate:flip>{thing.name}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-flip/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Shuffle</button><div class=\"list\"><label><input type=\"checkbox\">\n\t\t\twrite\n\t\t\tsome\n\t\t\tdocs</label><label><input type=\"checkbox\">\n\t\t\tstart\n\t\t\twriting\n\t\t\tJSConf\n\t\t\ttalk</label><label><input type=\"checkbox\">\n\t\t\tbuy\n\t\t\tsome\n\t\t\tmilk</label><label><input type=\"checkbox\">\n\t\t\tmow\n\t\t\tthe\n\t\t\tlawn</label><label><input type=\"checkbox\">\n\t\t\tfeed\n\t\t\tthe\n\t\t\tturtle</label><label><input type=\"checkbox\">\n\t\t\tfix\n\t\t\tsome\n\t\t\tbugs</label></div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Shuffle</button><div class=\"list\"><label><input type=\"checkbox\">\n\t\t\t fix\n\t\t\t some\n\t\t\t bugs</label><label><input type=\"checkbox\">\n\t\t\t feed\n\t\t\t the\n\t\t\t turtle</label><label><input type=\"checkbox\">\n\t\t\t mow\n\t\t\t the\n\t\t\t lawn</label><label><input type=\"checkbox\">\n\t\t\t buy\n\t\t\t some\n\t\t\t milk</label><label><input type=\"checkbox\">\n\t\t\t start\n\t\t\t writing\n\t\t\t JSConf\n\t\t\t talk</label><label><input type=\"checkbox\">\n\t\t\t write\n\t\t\t some\n\t\t\t docs</label></div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-flip/main.svelte",
    "content": "<script>\n\timport { flip } from 'svelte/animate';\n\n\tlet todos = [\n\t\t{ id: 1, done: false, description: 'write some docs' },\n\t\t{ id: 2, done: false, description: 'start writing JSConf talk' },\n\t\t{ id: 3, done: true, description: 'buy some milk' },\n\t\t{ id: 4, done: false, description: 'mow the lawn' },\n\t\t{ id: 5, done: false, description: 'feed the turtle' },\n\t\t{ id: 6, done: false, description: 'fix some bugs' }\n\t];\n\n\tfunction update() {\n\t\ttodos = Array.from(todos).reverse();\n\t}\n</script>\n\n<button on:click={update}>Shuffle</button>\n\n<div class=\"list\">\n\t{#each todos as todo (todo.id)}\n\t\t<label animate:flip>\n\t\t\t<input type=\"checkbox\" bind:checked={todo.done} />\n\t\t\t{todo.description}\n\t\t</label>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-flip-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Remove last</button><div class=\"list\"><label><input type=\"checkbox\">\n\t\t\twrite\n\t\t\tsome\n\t\t\tdocs</label><label><input type=\"checkbox\">\n\t\t\tstart\n\t\t\twriting\n\t\t\tJSConf\n\t\t\ttalk</label><label><input type=\"checkbox\">\n\t\t\tbuy\n\t\t\tsome\n\t\t\tmilk</label><label><input type=\"checkbox\">\n\t\t\tmow\n\t\t\tthe\n\t\t\tlawn</label><label><input type=\"checkbox\">\n\t\t\tfeed\n\t\t\tthe\n\t\t\tturtle</label><label><input type=\"checkbox\">\n\t\t\tfix\n\t\t\tsome\n\t\t\tbugs</label></div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Remove last</button><div class=\"list\"><label><input type=\"checkbox\">\n\t\t\twrite\n\t\t\tsome\n\t\t\tdocs</label><label><input type=\"checkbox\">\n\t\t\tstart\n\t\t\twriting\n\t\t\tJSConf\n\t\t\ttalk</label><label><input type=\"checkbox\">\n\t\t\tbuy\n\t\t\tsome\n\t\t\tmilk</label><label><input type=\"checkbox\">\n\t\t\tmow\n\t\t\tthe\n\t\t\tlawn</label><label><input type=\"checkbox\">\n\t\t\tfeed\n\t\t\tthe\n\t\t\tturtle</label></div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-flip-2/main.svelte",
    "content": "<script>\n\timport { flip } from 'svelte/animate';\n\n\tlet todos = [\n\t\t{ id: 1, done: false, description: 'write some docs' },\n\t\t{ id: 2, done: false, description: 'start writing JSConf talk' },\n\t\t{ id: 3, done: true, description: 'buy some milk' },\n\t\t{ id: 4, done: false, description: 'mow the lawn' },\n\t\t{ id: 5, done: false, description: 'feed the turtle' },\n\t\t{ id: 6, done: false, description: 'fix some bugs' }\n\t];\n\n\tfunction update() {\n\t\ttodos = [...todos]\n\t\ttodos.pop();\n\t}\n</script>\n\n<button on:click={update}>Remove last</button>\n\n<div class=\"list\">\n\t{#each todos as todo (todo.id)}\n\t\t<label animate:flip>\n\t\t\t<input type=\"checkbox\" bind:checked={todo.done} />\n\t\t\t{todo.description}\n\t\t</label>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-js/_config.js",
    "content": "// @ts-nocheck\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t\t<div>b</div>\n\t\t<div>c</div>\n\t\t<div>d</div>\n\t\t<div>e</div>\n\t`,\n\n\ttest({ assert, component, raf }) {\n\t\tlet divs = document.querySelectorAll('div');\n\t\tdivs.forEach((div) => {\n\t\t\tdiv.getBoundingClientRect = function () {\n\t\t\t\tconst index = [...this.parentNode.children].indexOf(this);\n\t\t\t\tconst top = index * 30;\n\n\t\t\t\treturn {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 100,\n\t\t\t\t\ttop,\n\t\t\t\t\tbottom: top + 20\n\t\t\t\t};\n\t\t\t};\n\t\t});\n\n\t\tcomponent.things = [\n\t\t\t{ id: 5, name: 'e' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 1, name: 'a' }\n\t\t];\n\n\t\traf.tick(0);\n\n\t\tdivs = document.querySelectorAll('div');\n\t\tassert.equal(divs[0].dy, 120);\n\t\tassert.equal(divs[4].dy, -120);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].dy, 60);\n\t\tassert.equal(divs[4].dy, -60);\n\n\t\traf.tick(100);\n\t\tassert.equal(divs[0].dy, 0);\n\t\tassert.equal(divs[4].dy, 0);\n\n\t\tcomponent.things = [\n\t\t\t{ id: 1, name: 'a' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 5, name: 'e' }\n\t\t];\n\n\t\traf.tick(100);\n\n\t\tdivs = document.querySelectorAll('div');\n\n\t\tassert.equal(divs[0].dy, 120);\n\t\tassert.equal(divs[4].dy, -120);\n\n\t\traf.tick(150);\n\t\tassert.equal(divs[0].dy, 60);\n\t\tassert.equal(divs[4].dy, -60);\n\n\t\traf.tick(200);\n\t\tassert.equal(divs[0].dy, 0);\n\t\tassert.equal(divs[4].dy, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-js/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction flip(node, animation, params) {\n\t\tconst dx = animation.from.left - animation.to.left;\n\t\tconst dy = animation.from.top - animation.to.top;\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.dx = u * dx;\n\t\t\t\tnode.dy = u * dy;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.id)}\n\t<div animate:flip>{thing.name}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-js-delay/_config.js",
    "content": "// @ts-nocheck\nimport { ok, test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO: needs fixing\n\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t\t<div>b</div>\n\t\t<div>c</div>\n\t\t<div>d</div>\n\t\t<div>e</div>\n\t`,\n\n\ttest({ assert, component, window, raf }) {\n\t\tlet divs = window.document.querySelectorAll('div');\n\t\tdivs.forEach((div) => {\n\t\t\tdiv.getBoundingClientRect = function () {\n\t\t\t\tconst index = [...this.parentNode.children].indexOf(this);\n\t\t\t\tconst top = index * 30;\n\n\t\t\t\treturn {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 100,\n\t\t\t\t\ttop,\n\t\t\t\t\tbottom: top + 20\n\t\t\t\t};\n\t\t\t};\n\t\t});\n\n\t\tcomponent.things = [\n\t\t\t{ id: 5, name: 'e' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 1, name: 'a' }\n\t\t];\n\n\t\tdivs = window.document.querySelectorAll('div');\n\t\tassert.equal(divs[0].dy, 120);\n\t\tassert.equal(divs[4].dy, -120);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].dy, 108);\n\t\tassert.equal(divs[4].dy, -60);\n\n\t\traf.tick(100);\n\t\tassert.equal(divs[0].dy, 48);\n\t\tassert.equal(divs[4].dy, 0);\n\n\t\traf.tick(150);\n\t\tassert.equal(divs[0].dy, 0);\n\t\tassert.equal(divs[4].dy, 0);\n\n\t\tcomponent.things = [\n\t\t\t{ id: 1, name: 'a' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 5, name: 'e' }\n\t\t];\n\n\t\tdivs = document.querySelectorAll('div');\n\t\tassert.equal(divs[0].dy, 120);\n\t\tassert.equal(divs[4].dy, -120);\n\n\t\traf.tick(200);\n\t\tassert.equal(divs[0].dy, 108);\n\t\tassert.equal(divs[4].dy, -60);\n\n\t\traf.tick(250);\n\t\tassert.equal(divs[0].dy, 48);\n\t\tassert.equal(divs[4].dy, 0);\n\n\t\traf.tick(300);\n\t\tassert.equal(divs[0].dy, 0);\n\t\tassert.equal(divs[4].dy, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-js-delay/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction flip(node, animation, params) {\n\t\tconst dx = animation.from.left - animation.to.left;\n\t\tconst dy = animation.from.top - animation.to.top;\n\n\t\treturn {\n\t\t\tdelay: params.delay,\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.dx = u * dx;\n\t\t\t\tnode.dy = u * dy;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing, i (thing.id)}\n\t<div animate:flip=\"{{delay: i * 10}}\">{thing.name}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-js-easing/_config.js",
    "content": "// @ts-nocheck\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t\t<div>b</div>\n\t\t<div>c</div>\n\t\t<div>d</div>\n\t\t<div>e</div>\n\t`,\n\n\ttest({ assert, component, raf }) {\n\t\tlet divs = document.querySelectorAll('div');\n\t\tdivs.forEach((div) => {\n\t\t\tdiv.getBoundingClientRect = function () {\n\t\t\t\tconst index = [...this.parentNode.children].indexOf(this);\n\t\t\t\tconst top = index * 30;\n\n\t\t\t\treturn {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 100,\n\t\t\t\t\ttop,\n\t\t\t\t\tbottom: top + 20\n\t\t\t\t};\n\t\t\t};\n\t\t});\n\n\t\tcomponent.things = [\n\t\t\t{ id: 5, name: 'e' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 1, name: 'a' }\n\t\t];\n\n\t\traf.tick(0);\n\n\t\tdivs = document.querySelectorAll('div');\n\t\tassert.equal(divs[0].dy, 120);\n\t\tassert.equal(divs[4].dy, -120);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].dy, 60);\n\t\tassert.equal(divs[4].dy, -60);\n\n\t\traf.tick(100);\n\t\tassert.equal(divs[0].dy, 0);\n\t\tassert.equal(divs[4].dy, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/animation-js-easing/main.svelte",
    "content": "<script>\n\texport let things;\n\n\texport function linear(t) {\n\t\treturn t;\n\t}\n\n\tfunction flip(node, animation, params) {\n\t\tconst dx = animation.from.left - animation.to.left;\n\t\tconst dy = animation.from.top - animation.to.top;\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\teasing: linear,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.dx = u * dx;\n\t\t\t\tnode.dy = u * dy;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.id)}\n\t<div animate:flip>{thing.name}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/apply-directives-in-order/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { value: '' };\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<p></p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=\"\">\n\t\t<p></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'h';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(input.value, 'H');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>H</p>\n\t\t`\n\t\t);\n\n\t\tinput.value = 'he';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(input.value, 'HE');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>HE</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/apply-directives-in-order/main.svelte",
    "content": "<script>\n\texport let value;\n\n\tfunction uppercase(event) {\n\t\tevent.target.value = event.target.value.toUpperCase()\n\t}\n</script>\n\n<input on:input={uppercase} bind:value>\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/apply-directives-in-order-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {string[]} */\nlet value = [];\n\nexport default test({\n\tget props() {\n\t\tvalue = [];\n\t\treturn { value };\n\t},\n\n\ttest({ assert, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tconst event = new window.Event('input', { bubbles: true });\n\n\t\tfor (const input of inputs) {\n\t\t\tinput.value = 'h';\n\t\t\tinput.dispatchEvent(event);\n\t\t\tflushSync();\n\t\t}\n\n\t\tassert.deepEqual(value, [\n\t\t\t'bind:this true',\n\t\t\t'1',\n\t\t\t'2',\n\t\t\t'3',\n\t\t\t'4',\n\t\t\t'5',\n\t\t\t'6',\n\t\t\t'7',\n\t\t\t'8',\n\t\t\t'9',\n\t\t\t'10',\n\t\t\t'11',\n\t\t\t'12',\n\t\t\t'13',\n\t\t\t'14',\n\t\t\t'15',\n\t\t\t'16',\n\t\t\t'17',\n\t\t\t'18'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/apply-directives-in-order-2/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let value = [];\n\n\tfunction one(elem) {\n\t\telem.addEventListener('input', () => {\n\t\t\tvalue.push('1');\n\t\t});\n\t}\n\tfunction four(elem) {\n\t\telem.addEventListener('input', () => {\n\t\t\tvalue.push('4');\n\t\t});\n\t}\n\tfunction eight(elem) {\n\t\telem.addEventListener('input', () => {\n\t\t\tvalue.push('8');\n\t\t});\n\t}\n\tfunction twelve(elem) {\n\t\telem.addEventListener('input', () => {\n\t\t\tvalue.push('12');\n\t\t});\n\t}\n\tfunction fifteen(elem) {\n\t\telem.addEventListener('input', () => {\n\t\t\tvalue.push('15');\n\t\t});\n\t}\n\tfunction seventeen(elem) {\n\t\telem.addEventListener('input', () => {\n\t\t\tvalue.push('17');\n\t\t});\n\t}\n\n\tconst foo = {\n\t\tset two(v) {\n\t\t\tvalue.push('2');\n\t\t},\n\t\tset six(v) {\n\t\t\tvalue.push('6');\n\t\t},\n\t\tset nine(v) {\n\t\t\tvalue.push('9');\n\t\t},\n\t\tset eleven(v) {\n\t\t\tvalue.push('11');\n\t\t},\n\t\tset thirteen(v) {\n\t\t\tvalue.push('13');\n\t\t},\n\t\tset sixteen(v) {\n\t\t\tvalue.push('16');\n\t\t}\n\t};\n\n\tfunction three() {\n\t\tvalue.push('3');\n\t}\n\tfunction five() {\n\t\tvalue.push('5');\n\t}\n\tfunction seven() {\n\t\tvalue.push('7');\n\t}\n\tfunction ten() {\n\t\tvalue.push('10');\n\t}\n\tfunction fourteen() {\n\t\tvalue.push('14');\n\t}\n\tfunction eighteen() {\n\t\tvalue.push('18');\n\t}\n\n\tlet el;\n\n\tonMount(() => {\n\t\t// ensure that bind:this doesn't influence the order of directives\n\t\t// and isn't affected itself by an action being on the element\n\t\tvalue.push('bind:this ' + !!el);\n\t});\n</script>\n\n<input use:one bind:value={foo.two} on:input={three} />\n<input use:four on:input={five} bind:value={foo.six} />\n<input on:input={seven} use:eight bind:value={foo.nine} />\n<input on:input={ten} bind:value={foo.eleven} use:twelve />\n<input bind:value={foo.thirteen} on:input={fourteen} use:fifteen />\n<input bind:this={el} bind:value={foo.sixteen} use:seventeen on:input={eighteen} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/array-literal-spread-deopt/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>a</div> <div>b</div> <div>c</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/array-literal-spread-deopt/main.svelte",
    "content": "<script>\n\tconst foo = ['a', 'b', 'c'];\n</script>\n\n{#each [...foo] as item}\n\t<div>{item}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/array-rest-is-array-or-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n    <h1>1</h1>\n    <h1>2</h1>\n    <h1>3</h1>\n    <h1>5</h1>\n    <h1>10</h1>\n    <h1>20</h1>\n    <h1>30</h1>\n    <h1>6</h1>\n  `\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/array-rest-is-array-or-object/main.svelte",
    "content": "<script>\n\tlet [first, second, ...[third, ...[, fifth]]] = [1, 2, 3, 4, 5];\n\tlet [one, two, ...[three, ...{ length }]] = [10, 20, 30, 40, 50, 60, 70, 80, 90];\n</script>\n\n<h1>{first}</h1>\n<h1>{second}</h1>\n<h1>{third}</h1>\n<h1>{fifth}</h1>\n\n<h1>{one}</h1>\n<h1>{two}</h1>\n<h1>{three}</h1>\n<h1>{length}</h1>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-in-init/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tassert.equal(component.get_foo(), 1);\n\t\tassert.equal(component.get_bar(), 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-in-init/main.svelte",
    "content": "<script>\n\tlet foo;\n\tlet bar = (foo = 1) * 2;\n\n\texport const get_foo = () => foo;\n\texport const get_bar = () => bar;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-to-computed-property/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tassert.deepEqual(component.foo, { baz: 1 });\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-to-computed-property/main.svelte",
    "content": "<script>\n\texport let foo = {};\n\tlet bar = 'baz';\n\tfoo[bar] = 1;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-to-const1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>2, 1</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-to-const1/main.svelte",
    "content": "<script>\n\tconst arr = [1, 2];\n\t[arr[0], arr[1]] = [arr[1], arr[0]];\n</script>\n\n<p>{arr[0]}, {arr[1]}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-to-const2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>[{\"a\":2},100]</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/assignment-to-const2/main.svelte",
    "content": "<script>\n\tconst a = 100;\n\tconst arr = [{ a: 1 }, 2];\n\t[arr[0].a, arr[1] = a] = [arr[1]];\n</script>\n\n<p>{JSON.stringify(arr)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/async-generator-object-methods/main.svelte",
    "content": "<script>\n\tconst foo = {\n\t\tasync bar() {\n\t\t\tawait baz;\n\t\t},\n\t\t*qux() {\n\t\t\tyield 42;\n\t\t}\n\t};\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attachment-in-mutated-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['up']);\n\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['up']);\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['up', 'down']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attachment-in-mutated-state/main.svelte",
    "content": "<script>\n\tlet state = {\n\t\tcount: 0,\n\t\tattachment(){\n\t\t\tconsole.log('up');\n\t\t\treturn () => console.log('down');\n\t\t}\n\t};\n</script>\n\n<button onclick={() => state.count++}>{state.count}</button>\n\n{#if state.count < 2}\n\t<div {@attach state.attachment}></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-after-property/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ target, assert }) {\n\t\tconst input = target.querySelector('input');\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.equal(input?.step, 'any');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tassert.equal(input?.step, '10');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tassert.equal(input?.step, 'any');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-after-property/main.svelte",
    "content": "<script>\n    let step = \"any\";\n</script>\n\n<input type=\"range\" {...{step}} />\n<button onclick={() => step = step === \"any\" ? 10 : \"any\"}>change step</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-case-insensitive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<input readonly>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-case-insensitive/main.svelte",
    "content": "<input READONLY={!0} REQUIRED={!1}>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-false/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<textarea></textarea>',\n\ttest({ assert, target }) {\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(textarea);\n\t\tassert.ok(textarea.readOnly === false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-false/main.svelte",
    "content": "<textarea readonly=\"{false}\"></textarea>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-hidden/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { hidden: true };\n\t},\n\thtml: '<div hidden></div>',\n\ttest({ assert, component, target }) {\n\t\tcomponent.hidden = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-hidden/main.svelte",
    "content": "<script>\n\texport let hidden = false;\n</script>\n\n<div {hidden}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-indeterminate/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { indeterminate: true };\n\t},\n\n\ttest({ assert, component, target, variant }) {\n\t\tif (variant === 'dom') {\n\t\t\t// hydration also has indeterminate which is harmless but would break the test unnecessarily\n\t\t\tassert.htmlEqual(target.innerHTML, '<input type=\"checkbox\">');\n\t\t}\n\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.ok(input.indeterminate);\n\t\tcomponent.indeterminate = false;\n\t\tassert.ok(!input.indeterminate);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-indeterminate/main.svelte",
    "content": "<script>\n\texport let indeterminate;\n</script>\n\n<input type='checkbox' indeterminate='{indeterminate}'>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<div></div>\n\t\t<div inert=\"\">some div <button>click</button></div>\n\t`,\n\n\tget props() {\n\t\treturn { inert: true };\n\t},\n\n\ttest({ assert, target, component }) {\n\t\tconst [div1, div2] = target.querySelectorAll('div');\n\t\tassert.ok(!div1.inert);\n\t\tassert.ok(div2.inert);\n\n\t\tcomponent.inert = false;\n\t\tassert.ok(!div2.inert);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/main.svelte",
    "content": "<script>\nexport let inert;\n</script>\n\n<div inert={false}></div>\n<div {inert}>some div <button>click</button></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-true/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<textarea readonly data-attr=\"true\"></textarea>',\n\ttest({ assert, target }) {\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(textarea);\n\t\tassert.equal(textarea.dataset.attr, 'true');\n\t\tassert.ok(textarea.readOnly);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-true/main.svelte",
    "content": "<textarea readonly={true} data-attr={true} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-with-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<input>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-boolean-with-spread/main.svelte",
    "content": "<input {...{ foo: null }} readonly={false} required={false} disabled={null}>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-casing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div class='SHOUTY'>YELL</div>\n\n\t\t<svg viewBox='0 0 100 100' id='one'>\n\t\t\t<text textLength=100>hellooooo</text>\n\t\t</svg>\n\n\t\t<svg viewBox='0 0 100 100' id='two'>\n\t\t\t<text textLength=100>hellooooo</text>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, target }) {\n\t\t/** @param {string} sel */\n\t\tconst attr = (sel) => target.querySelector(sel)?.attributes[0].name;\n\n\t\tassert.equal(attr('div'), 'class');\n\t\tassert.equal(attr('svg#one'), 'viewBox');\n\t\tassert.equal(attr('svg#one text'), 'textLength');\n\t\tassert.equal(attr('svg#two'), 'viewBox');\n\t\tassert.equal(attr('svg#two text'), 'textLength');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-casing/main.svelte",
    "content": "<div CLASS='SHOUTY'>YELL</div>\n\n<svg viewbox='0 0 100 100' id='one'>\n\t<text textlength=100>hellooooo</text>\n</svg>\n\n<svg viewBox='0 0 100 100' id='two'>\n\t<text textLength=100>hellooooo</text>\n</svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-casing-custom-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\thtml: `\n\t\t<my-custom-element>Hello World!</my-custom-element>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-casing-custom-element/main.svelte",
    "content": "<script>\n\tclass MyCustomElement extends HTMLElement {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis._obj = null;\n\t\t}\n\n\t\tset camelCase(obj) {\n\t\t\tthis._obj = obj;\n\t\t\tthis.render();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tthis.render();\n\t\t}\n\n\t\trender() {\n\t\t\tthis.innerHTML = 'Hello ' + this._obj.text + '!';\n\t\t}\n\t}\n\n\twindow.customElements.define('my-custom-element', MyCustomElement);\n</script>\n\n<my-custom-element camelCase={{ text: 'World' }} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-custom-element-inheritance/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\thtml: `\n\t\t<my-custom-inheritance-element>Hello World!</my-custom-inheritance-element>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-custom-element-inheritance/main.svelte",
    "content": "<script>\n\tclass MyCustomElement extends HTMLElement {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis._obj = null;\n\t\t\tthis._text = null;\n\t\t}\n\n\t\tset text(text) {\n\t\t\tthis._text = text;\n\t\t\tthis.render();\n\t\t}\n\n\t\tset camelCase(obj) {\n\t\t\tthis._obj = obj;\n\t\t\tthis.render();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tthis.render();\n\t\t}\n\n\t\trender() {\n\t\t\tthis.innerHTML = 'Hello ' + this._obj.text + this._text;\n\t\t}\n\t}\n\n\tclass Extended extends MyCustomElement {}\n\n\twindow.customElements.define('my-custom-inheritance-element', Extended);\n</script>\n\n<my-custom-inheritance-element camelCase={{ text: 'World' }} text=\"!\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dataset-without-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div data-potato=\"\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dataset-without-value/main.svelte",
    "content": "<div data-potato></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<div style=\"color: red;\">red</div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tassert.equal(div.style.color, 'red');\n\n\t\tcomponent.color = 'blue';\n\t\tassert.htmlEqual(target.innerHTML, '<div style=\"color: blue;\">blue</div>');\n\t\tassert.equal(div.style.color, 'blue');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic/main.svelte",
    "content": "<script>\n\texport let color = 'red';\n</script>\n\n<div style='color: {color};'>{color}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: [\n\t\t\t\t{ foo: true, bar: false },\n\t\t\t\t{ foo: false, bar: true },\n\t\t\t\t{ foo: true, bar: true }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div class=\"foo \">1</div>\n\t\t<div class=\" bar\">2</div>\n\t\t<div class=\"foo bar\">3</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-multiple/main.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n{#each items as item, i}\n\t<div class='{item.foo ? \"foo\" : \"\"} {item.bar ? \"bar\" : \"\"}'>{i + 1}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-no-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div><div title='foo'>bar</div></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-no-dependencies/main.svelte",
    "content": "<div><div title={'foo'}>bar</div></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-quotemarks/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span title=\\'\"foo\"\\'>foo</span>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-quotemarks/main.svelte",
    "content": "<span title='{\"\\\"foo\\\"\"}'>foo</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-shorthand/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tid: 'foo'\n\t},\n\thtml: '<div id=\"foo\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.id = 'bar';\n\t\tassert.htmlEqual(target.innerHTML, '<div id=\"bar\"></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-shorthand/main.svelte",
    "content": "<script>\n\texport let id = 'foo';\n</script>\n\n<div {id}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-type/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { inputType: 'text', inputValue: 42 };\n\t},\n\n\thtml: '<input type=\"text\">',\n\tssrHtml: '<input type=\"text\" value=\"42\">',\n\n\ttest({ assert, component, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.equal(input.type, 'text');\n\t\tassert.equal(input.value, '42');\n\n\t\tcomponent.inputType = 'number';\n\t\tPromise.resolve();\n\t\tassert.equal(input.type, 'number');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-dynamic-type/main.svelte",
    "content": "<script>\n\texport let inputType;\n\texport let inputValue;\n</script>\n\n<input type='{inputType}' value='{inputValue}'>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-empty/main.svelte",
    "content": "<div class=''></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-empty-svg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg>\n\t\t\t<g></g>\n\t\t</svg>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-empty-svg/main.svelte",
    "content": "<svg>\n\t<g class=''></g>\n</svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-false/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div class=\"false\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-false/main.svelte",
    "content": "<div class={false}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-microdata/_config.js",
    "content": "import { test } from '../../test';\n\n// There is no relationship between the attribute and the dom node with regards to microdata attributes https://developer.mozilla.org/en-US/docs/Web/HTML/Microdata\nexport default test({\n\thtml: `<div itemscope itemtype=\"https://schema.org/SoftwareApplication\">\n\t<span itemprop=\"name\">Game</span> - REQUIRES\n\t<span itemprop=\"operatingSystem\">OS</span><br/>\n\t<link itemprop=\"applicationCategory\" href=\"https://schema.org/GameApplication\"/>\n\n\t<div itemprop=\"aggregateRating\" itemscope=\"\" itemtype=\"https://schema.org/AggregateRating\">RATING:\n\t\t<span itemprop=\"ratingValue\">4.6</span> (\n\t\t<span itemprop=\"ratingCount\">8864</span> ratings )</div>\n\t<div itemref=\"offers\"></div>\n</div>\n\n<div\n\titemprop=\"offers\"\n\titemid=\"offers\"\n\tid=\"offers\"\n\titemscope\n\titemtype=\"https://schema.org/Offer\"\n>\n\tPrice: $<span itemprop=\"price\">1.00</span>\n<meta itemprop=\"priceCurrency\" content=\"USD\"/>\n</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-microdata/main.svelte",
    "content": "<!-- Example from https://developer.mozilla.org/en-US/docs/Web/HTML/Microdata -->\n<div itemscope itemtype=\"https://schema.org/SoftwareApplication\">\n\t<span itemprop=\"name\">Game</span> - REQUIRES\n\t<span itemprop=\"operatingSystem\">OS</span><br />\n\t<link\n\t\titemprop=\"applicationCategory\"\n\t\thref=\"https://schema.org/GameApplication\"\n\t/>\n\n\t<div\n\t\titemprop=\"aggregateRating\"\n\t\titemscope\n\t\titemtype=\"https://schema.org/AggregateRating\"\n\t>\n\t\tRATING:\n\t\t<span itemprop=\"ratingValue\">4.6</span> (\n\t\t<span itemprop=\"ratingCount\">8864</span> ratings )\n\t</div>\n\t<div itemref=\"offers\"></div>\n</div>\n\n<div\n\titemprop=\"offers\"\n\titemid=\"offers\"\n\tid=\"offers\"\n\titemscope\n\titemtype=\"https://schema.org/Offer\"\n>\n\tPrice: $<span itemprop=\"price\">1.00</span>\n\t<meta itemprop=\"priceCurrency\" content=\"USD\" />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-namespaced/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 'bar' };\n\t},\n\n\thtml: `\n\t\t<svg>\n\t\t\t<use xlink:href=\"#bar\"/>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst use = target.querySelector('use');\n\t\tok(use);\n\t\tassert.equal(use.getAttributeNS('http://www.w3.org/1999/xlink', 'href'), '#bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-namespaced/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<svg>\n\t<use xlink:href=\"#{foo}\"/>\n</svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null/main.svelte",
    "content": "<div class={null}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-no-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {any} */\n\t\t\ttestName: 'testClassName'\n\t\t};\n\t},\n\n\thtml: '<div class=\"testClassName\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'testClassName');\n\n\t\tcomponent.testName = null;\n\t\tassert.equal(div.className, '');\n\n\t\tcomponent.testName = undefined;\n\t\tassert.equal(div.className, '');\n\n\t\tcomponent.testName = undefined + '';\n\t\tassert.equal(div.className, 'undefined');\n\n\t\tcomponent.testName = null + '';\n\t\tassert.equal(div.className, 'null');\n\n\t\tcomponent.testName = 1;\n\t\tassert.equal(div.className, '1');\n\n\t\tcomponent.testName = 0;\n\t\tassert.equal(div.className, '0');\n\n\t\tcomponent.testName = false;\n\t\tassert.equal(div.className, 'false');\n\n\t\tcomponent.testName = true;\n\t\tassert.equal(div.className, 'true');\n\n\t\tcomponent.testName = {};\n\t\tassert.equal(div.className, '');\n\n\t\tcomponent.testName = '';\n\t\tassert.equal(div.className, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-no-style/main.svelte",
    "content": "<script>\n\texport let testName;\n</script>\n\n<div class={testName}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-with-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<div class=\"svelte-70s021\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tcomponent.testName = null;\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = undefined;\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = undefined + '';\n\t\tassert.equal(div.className, 'undefined svelte-70s021');\n\n\t\tcomponent.testName = null + '';\n\t\tassert.equal(div.className, 'null svelte-70s021');\n\n\t\tcomponent.testName = 1;\n\t\tassert.equal(div.className, '1 svelte-70s021');\n\n\t\tcomponent.testName = 0;\n\t\tassert.equal(div.className, '0 svelte-70s021');\n\n\t\tcomponent.testName = false;\n\t\tassert.equal(div.className, 'false svelte-70s021');\n\n\t\tcomponent.testName = true;\n\t\tassert.equal(div.className, 'true svelte-70s021');\n\n\t\tcomponent.testName = {};\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = '';\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = 'testClassName';\n\t\tassert.equal(div.className, 'testClassName svelte-70s021');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-with-style/main.svelte",
    "content": "<script>\n\texport let testName;\n\n  export function _() {\n    // Make the prop a source. Difference from Svelte 4.\n    testName = '';\n  }\n</script>\n\n<style>\n  div {\n    color: purple;\n  }\n</style>\n\n<div class={testName}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classnames-no-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {any} */\n\t\t\ttestName1: 'test1',\n\t\t\t/** @type {any} */\n\t\t\ttestName2: 'test2'\n\t\t};\n\t},\n\n\thtml: '<div class=\"test1test2\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'test1test2');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = null;\n\t\tassert.equal(div.className, '0');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'nulltest');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'undefinedtest');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = undefined;\n\t\tassert.equal(div.className, 'NaN');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, '1');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, 'NaN');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, '0');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, 'NaN');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classnames-no-style/main.svelte",
    "content": "<script>\n\texport let testName1;\n\texport let testName2;\n</script>\n\n<div class={testName1 + testName2}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classnames-with-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {any} */\n\t\t\ttestName1: 'test1',\n\t\t\t/** @type {any} */\n\t\t\ttestName2: 'test2'\n\t\t};\n\t},\n\n\thtml: '<div class=\"test1test2 svelte-70s021\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'test1test2 svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = null;\n\t\tassert.equal(div.className, '0 svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'nulltest svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'undefinedtest svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = undefined;\n\t\tassert.equal(div.className, 'NaN svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, '1 svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, 'NaN svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, '0 svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, 'NaN svelte-70s021');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-classnames-with-style/main.svelte",
    "content": "<script>\n\texport let testName1;\n\texport let testName2;\n</script>\n\n<style>\n  div {\n    color: purple;\n  }\n</style>\n\n<div class={testName1 + testName2}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-no-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {any} */\n\t\t\ttestName: 'testClassName'\n\t\t};\n\t},\n\n\thtml: '<div class=\"testClassName\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'testClassName');\n\n\t\tcomponent.testName = null;\n\t\tassert.equal(div.className, '');\n\n\t\tcomponent.testName = undefined;\n\t\tassert.equal(div.className, '');\n\n\t\tcomponent.testName = undefined + '';\n\t\tassert.equal(div.className, 'undefined');\n\n\t\tcomponent.testName = null + '';\n\t\tassert.equal(div.className, 'null');\n\n\t\tcomponent.testName = 1;\n\t\tassert.equal(div.className, '1');\n\n\t\tcomponent.testName = 0;\n\t\tassert.equal(div.className, '0');\n\n\t\tcomponent.testName = false;\n\t\tassert.equal(div.className, 'false');\n\n\t\tcomponent.testName = true;\n\t\tassert.equal(div.className, 'true');\n\n\t\tcomponent.testName = {};\n\t\tassert.equal(div.className, '');\n\n\t\tcomponent.testName = '';\n\t\tassert.equal(div.className, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-no-style/main.svelte",
    "content": "<script>\n\texport let testName;\n\n\tfunction myHelper(testName) {\n\t\treturn testName;\n\t}\n</script>\n\n<div class={myHelper(testName)}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-with-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {any} */\n\t\t\ttestName: 'testClassName'\n\t\t};\n\t},\n\n\thtml: '<div class=\"testClassName svelte-70s021\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'testClassName svelte-70s021');\n\n\t\tcomponent.testName = null;\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = undefined;\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = undefined + '';\n\t\tassert.equal(div.className, 'undefined svelte-70s021');\n\n\t\tcomponent.testName = null + '';\n\t\tassert.equal(div.className, 'null svelte-70s021');\n\n\t\tcomponent.testName = 1;\n\t\tassert.equal(div.className, '1 svelte-70s021');\n\n\t\tcomponent.testName = 0;\n\t\tassert.equal(div.className, '0 svelte-70s021');\n\n\t\tcomponent.testName = false;\n\t\tassert.equal(div.className, 'false svelte-70s021');\n\n\t\tcomponent.testName = true;\n\t\tassert.equal(div.className, 'true svelte-70s021');\n\n\t\tcomponent.testName = {};\n\t\tassert.equal(div.className, 'svelte-70s021');\n\n\t\tcomponent.testName = '';\n\t\tassert.equal(div.className, 'svelte-70s021');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-with-style/main.svelte",
    "content": "<script>\n\texport let testName;\n\n\tfunction myHelper(testName) {\n\t\treturn testName;\n\t}\n</script>\n\n<style>\n  div {\n    color: purple;\n  }\n</style>\n\n<div class={myHelper(testName)}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classnames-no-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string | number | null | undefined} */\n\t\t\ttestName1: 'test1',\n\t\t\t/** @type {string | number | null | undefined} */\n\t\t\ttestName2: 'test2'\n\t\t};\n\t},\n\n\thtml: '<div class=\"test1test2\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'test1test2');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = null;\n\t\tassert.equal(div.className, '0');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'nulltest');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'undefinedtest');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = undefined;\n\t\tassert.equal(div.className, 'NaN');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, '1');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, 'NaN');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, '0');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, 'NaN');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classnames-no-style/main.svelte",
    "content": "<script>\n\texport let testName1;\n  export let testName2;\n  \n\n\tfunction myHelper(testName) {\n\t\treturn testName;\n\t}\n</script>\n\n<div class={myHelper(testName1) + myHelper(testName2)}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classnames-with-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string | number | null | undefined} */\n\t\t\ttestName1: 'test1',\n\t\t\t/** @type {string | number | null | undefined} */\n\t\t\ttestName2: 'test2'\n\t\t};\n\t},\n\n\thtml: '<div class=\"test1test2 svelte-70s021\"></div>',\n\n\tasync test({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.className, 'test1test2 svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = null;\n\t\tassert.equal(div.className, '0 svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'nulltest svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 'test';\n\t\tassert.equal(div.className, 'undefinedtest svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = undefined;\n\t\tassert.equal(div.className, 'NaN svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, '1 svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 1;\n\t\tassert.equal(div.className, 'NaN svelte-70s021');\n\n\t\tcomponent.testName1 = null;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, '0 svelte-70s021');\n\n\t\tcomponent.testName1 = undefined;\n\t\tcomponent.testName2 = 0;\n\t\tassert.equal(div.className, 'NaN svelte-70s021');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classnames-with-style/main.svelte",
    "content": "<script>\n\texport let testName1;\n  export let testName2;\n  \n\n\tfunction myHelper(testName) {\n\t\treturn testName;\n\t}\n</script>\n\n<style>\n  div {\n    color: purple;\n  }\n</style>\n\n<div class={myHelper(testName1) + myHelper(testName2)}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-partial-number/Component.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<p data-value=\"{value}\"></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-partial-number/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p data-value=\"10px\"></p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-partial-number/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<Component value=\"10px\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-prefer-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: false };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tassert.ok(inputs[0].checked);\n\t\tassert.ok(!inputs[1].checked);\n\n\t\tcomponent.foo = true;\n\n\t\tassert.ok(!inputs[0].checked);\n\t\tassert.ok(inputs[1].checked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-prefer-expression/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<input type='radio' bind:group={foo} value='{false}'>\n<input type='radio' bind:group={foo} value='{true}'>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div class=\"foo\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static/main.svelte",
    "content": "<div class='foo'></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static-at-symbol/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<a href='mailto:hello@example.com'>email</a>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static-at-symbol/main.svelte",
    "content": "<a href='mailto:hello@example.com'>email</a>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static-boolean/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<textarea readonly=\"\"></textarea>',\n\ttest({ assert, target }) {\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(textarea);\n\t\tassert.ok(textarea.readOnly);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static-boolean/main.svelte",
    "content": "<textarea readonly></textarea>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static-quotemarks/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span title='\"foo\"'>\n\t\t\tfoo\n  \t\t<span title='\"bar\"'>bar</span>\n\t\t</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-static-quotemarks/main.svelte",
    "content": "<span title='\"foo\"'>\n  foo\n  <span title='\"bar\"'>bar</span>\n</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-undefined/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-undefined/main.svelte",
    "content": "<div class={undefined}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-unknown-without-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div potato=\"\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-unknown-without-value/main.svelte",
    "content": "<div potato></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-url/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tassert.equal(div.style.backgroundImage, 'url(https://example.com/foo.jpg)');\n\t\tassert.equal(div.style.color, 'red');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/attribute-url/main.svelte",
    "content": "<script>\n\tlet bgImage = 'https://example.com/foo.jpg';\n\tlet color = 'red';\n</script>\n\n<div style=\"background-image: url('{bgImage}'); color: {color};\">{color}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/autofocus/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\tasync test({ assert, component, target, window }) {\n\t\tcomponent.active = 'default';\n\t\tassert.equal(target.querySelector('input[title=\"default\"]'), window.document.activeElement);\n\n\t\tcomponent.active = 'dynamic-false';\n\t\tassert.notEqual(\n\t\t\ttarget.querySelector('input[title=\"dynamic-false\"]'),\n\t\t\twindow.document.activeElement\n\t\t);\n\n\t\t// when dynamically set autofocus to true, don't autofocus\n\t\tcomponent.autofocusFalse = true;\n\t\tassert.notEqual(\n\t\t\ttarget.querySelector('input[title=\"dynamic-false\"]'),\n\t\t\twindow.document.activeElement\n\t\t);\n\n\t\tcomponent.active = 'dynamic-true';\n\t\tassert.equal(\n\t\t\ttarget.querySelector('input[title=\"dynamic-true\"]'),\n\t\t\twindow.document.activeElement\n\t\t);\n\n\t\tcomponent.active = 'spread';\n\t\tassert.equal(target.querySelector('input[title=\"spread\"]'), window.document.activeElement);\n\n\t\tcomponent.active = 'spread-override';\n\t\tassert.notEqual(\n\t\t\ttarget.querySelector('input[title=\"spread-override\"]'),\n\t\t\twindow.document.activeElement\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/autofocus/main.svelte",
    "content": "<script>\n\texport let active = 'default';\n\texport let autofocusFalse = false;\n\texport let autofocusTrue = true;\n\tlet spread = { autofocus: true };\n</script>\n\n{#if active === 'default'}\n\t<input title={active} autofocus />\n{:else if active === 'dynamic-false'}\n\t<input title={active} autofocus={autofocusFalse} />\n{:else if active === 'dynamic-true'}\n\t<input title={active} autofocus={autofocusTrue} />\n{:else if active === 'spread'}\n\t<input title={active} {...spread} />\n{:else if active === 'spread-override'}\n\t<input title={active} {...spread} autofocus={false} />\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/autofocus-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tassert.equal(target.querySelector('input'), window.document.activeElement);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/autofocus-2/main.svelte",
    "content": "<h1>wat</h1>\n<input autofocus />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/autofocus-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tassert.equal(target.querySelector('input'), window.document.activeElement);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/autofocus-3/main.svelte",
    "content": "<div>\n\t<input autofocus />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-block-func-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {})\n\t\t};\n\t},\n\n\thtml: `\n\t\tWaiting...\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve({ func: 12345 }));\n\n\t\tassert.htmlEqual(target.innerHTML, '12345');\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject({ func: 67890 }));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(target.innerHTML, '67890');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-block-func-function/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\tWaiting...\n{:then { func }}\n\t{(() => func)()}\n{:catch { func: func_1 }}\n\t{(() => func_1)()}\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-catch-no-expression/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<br />\n\t\t<p>the promise is pending</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\tawait deferred.promise;\n\n\t\tassert.htmlEqual(target.innerHTML, '<br />');\n\n\t\tdeferred = create_deferred();\n\t\tcomponent.thePromise = deferred.promise;\n\n\t\tassert.htmlEqual(target.innerHTML, '<br /><p>the promise is pending</p>');\n\n\t\tconst rejection = deferred.promise\n\t\t\t.catch(() => {})\n\t\t\t.finally(async () => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`<p>oh no! Something broke!</p>\n\t\t\t\t\t<br />\n\t\t\t\t\t<p>oh no! Something broke!</p>`\n\t\t\t\t);\n\t\t\t});\n\n\t\tdeferred.reject(new Error());\n\n\t\tawait rejection;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-catch-no-expression/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise catch}\n\t<p>oh no! Something broke!</p>\n{/await}\n\n<br />\n\n{#await thePromise}\n\t<p>the promise is pending</p>\n{:catch}\n\t<p>oh no! Something broke!</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-catch-shorthand/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: '',\n\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.thePromise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t\t\tdeferred.reject(new Error('something broke'));\n\n\t\t\t\treturn deferred.promise.catch(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<p>oh no! something broke</p>');\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-catch-shorthand/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-component-oncreate/Foo.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let value;\n\tlet called = false;\n\n\tonMount(() => {\n\t\tcalled = true;\n\t});\n</script>\n\n<p>{value}</p>\n<p>{called}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-component-oncreate/_config.js",
    "content": "import { test } from '../../test';\n\nconst promise = Promise.resolve(42);\n\nexport default test({\n\tget props() {\n\t\treturn { promise };\n\t},\n\n\ttest({ assert, target }) {\n\t\treturn promise.then(async () => {\n\t\t\tawait Promise.resolve();\n\t\t\tawait Promise.resolve();\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t<p>42</p>\n\t\t\t\t<p>true</p>\n\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-component-oncreate/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let promise;\n</script>\n\n{#await promise then value}\n\t<Foo {value} />\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-conservative-update/_config.js",
    "content": "import { test } from '../../test';\nimport { sleep } from './sleep.js';\n\nexport default test({\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\treturn sleep(50).then(() => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t<p>the answer is 42</p>\n\t\t\t\t<p>count: 1</p>\n\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-conservative-update/main.svelte",
    "content": "<script>\n\timport { sleep } from './sleep.js';\n\n\tlet count = 0;\n\n\tconst get_promise = () => {\n\t\treturn sleep(10).then(() => {\n\t\t\tcount += 1;\n\t\t\treturn 42;\n\t\t});\n\t};\n</script>\n\n{#await get_promise()}\n\t<p>loading...</p>\n{:then value}\n\t<p>the answer is {value}</p>\n\t<p>count: {count}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-conservative-update/sleep.js",
    "content": "export let stopped = false;\n\nexport const stop = () => (stopped = true);\n\n/** @param {number} ms */\nexport const sleep = (ms) =>\n\tnew Promise((f) => {\n\t\tif (stopped) return;\n\t\tsetTimeout(() => {\n\t\t\tif (stopped) return;\n\t\t\tf(undefined);\n\t\t}, ms);\n\t});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-containing-if/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise, show: true };\n\t},\n\n\thtml: `\n\t\t<div><p>loading...</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise.then(async () => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<div><p>the value is 42</p></div>\n\t\t\t\t`\n\t\t\t);\n\n\t\t\tcomponent.show = false;\n\t\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\t\tcomponent.show = true;\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<div><p>the value is 42</p></div>\n\t\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-containing-if/main.svelte",
    "content": "<script>\n\texport let thePromise;\n\texport let show;\n</script>\n\n<div>\n\t{#await thePromise}\n\t\t<p>loading...</p>\n\t{:then theValue}\n\t\t{#if show}\n\t\t\t<p>the value is {theValue}</p>\n\t\t{/if}\n\t{:catch theError}\n\t\t<p>oh no! {theError.message}</p>\n\t{/await}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-function-promise/_config.js",
    "content": "import { test } from '../../test';\n\nconst realPromise = Promise.resolve(42);\n\nconst promise = () => {};\npromise.then = realPromise.then.bind(realPromise);\npromise.catch = realPromise.catch.bind(realPromise);\n\nexport default test({\n\tget props() {\n\t\treturn { promise };\n\t},\n\n\ttest({ assert, target }) {\n\t\treturn promise.then(() => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t<p>42</p>\n\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-function-promise/main.svelte",
    "content": "<script>\n\texport let promise;\n</script>\n\n{#await promise then value}\n\t<p>{JSON.stringify(value)}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-dynamic-component/Widget.svelte",
    "content": "{#await null}{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-dynamic-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ component }) {\n\t\tcomponent.flag = false;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-dynamic-component/main.svelte",
    "content": "<script>\n\texport let flag = true;\n\timport Widget from './Widget.svelte';\n</script>\n\n<svelte:component this={flag && Widget}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-each/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\nconst thePromise = new Promise((f) => {\n\tfulfil = f;\n});\n\nconst items = [\n\t{\n\t\ttitle: 'a title',\n\t\tdata: thePromise\n\t}\n];\n\nexport default test({\n\tget props() {\n\t\treturn { items };\n\t},\n\n\thtml: `\n\t\t<p>a title: loading...</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tfulfil(42);\n\n\t\treturn thePromise.then(async () => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<p>a title: 42</p>\n\t\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-each/main.svelte",
    "content": "<script>\n\texport let items = [\n\t\t{\n\t\t\ttitle: 'a title',\n\t\t\tdata: new Promise((f) => {\n\t\t\t\tf(42);\n\t\t\t}),\n\t\t},\n\t]\n</script>\n\n{#each items as item}\n\t{#await item.data}\n\t\t<p>{item.title}: loading...</p>\n\t{:then result}\n\t\t<p>{item.title}: {result}</p>\n\t{/await}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-removed-if/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value?: any) => void} */\nlet fulfil;\n\nconst promise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { promise, condition: true };\n\t},\n\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.condition = false;\n\n\t\tfulfil();\n\t\tawait new Promise((f) => setTimeout(f, 0));\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-in-removed-if/main.svelte",
    "content": "<script>\n\texport let promise;\n\texport let condition = true;\n</script>\n\n{#if condition}\n\t{#await promise then _}hello{/await}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-mount-and-unmount-immediately/Component.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let logs;\n\texport let state;\n\n\tonMount(() => {\n\t\tlogs.push(`mount ${state}`);\n\t\treturn () => {\n\t\t\tlogs.push(`unmount ${state}`);\n\t\t};\n\t});\n</script>\n\n{state}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-mount-and-unmount-immediately/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'Loading...',\n\tasync test({ assert, component, target }) {\n\t\tawait component.test();\n\n\t\tassert.htmlEqual(target.innerHTML, '1');\n\t\tassert.deepEqual(component.logs, ['mount 0', 'unmount 0', 'mount 1']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-mount-and-unmount-immediately/main.svelte",
    "content": "<script>\n\timport { tick } from 'svelte';\n\timport Component from './Component.svelte';\n\n\tlet promise;\n\tlet resolve;\n\tlet value = 0;\n\texport let logs = [];\n\n\tasync function new_promise() {\n\t\tpromise = new Promise(r => {\n\t\t\tresolve = r;\n\t\t});\n\t}\n\n\tasync function resolve_promise() {\n\t\tawait Promise.resolve();\n\t\tresolve(value++);\n\t}\n\n\texport async function test() {\n\t\tresolve_promise();\n\t\tawait tick();\n\t\tnew_promise();\n\t\tresolve_promise();\n\t\treturn tick();\n\t}\n\n\tnew_promise();\n</script>\n\n{#await promise}\n\tLoading...\n{:then state}\n\t<Component {state} {logs} />\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-mutate-array/Card.svelte",
    "content": "<script>\n\texport let card;\n\texport let onfav;\n</script>\n\n<button on:click={onfav}>\n\t{card.x}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-mutate-array/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>1</button><button>2</button><button>3</button><button>4</button>\\n-------`\n\t\t);\n\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tPromise.resolve();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>2</button><button>3</button><button>4</button>\\n-------\\n<button>1</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-mutate-array/main.svelte",
    "content": "<script>\n\timport Card from './Card.svelte'\n\n\tconst x = [{\n\t\tfav: false,\n\t\tx: 1\n\t}, {\n\t\tfav: false,\n\t\tx: 2\n\t}, {\n\t\tfav: false,\n\t\tx: 3\n\t}, {\n\t\tfav: false,\n\t\tx: 4\n\t}];\n\n\tlet p_cards = Promise.resolve(JSON.parse(JSON.stringify(x)));\n</script>\n\n{#await p_cards then cards}\n\t{#each cards.filter((card) => !card.fav) as card}\n\t\t<Card {card} onfav={() => {card.fav = !card.fav}}></Card>\n\t{/each}\n\t-------\n\t{#each  cards.filter((card) => card.fav) as card}\n\t\t<Card {card} onfav={() => {card.fav = !card.fav}}></Card>\n\t{/each}\n{/await}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-set-simultaneous/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tconst promise = Promise.resolve().then(() => {\n\t\t\tcomponent.answer = 42;\n\t\t});\n\n\t\tcomponent.promise = promise;\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>wait for it...</p>');\n\n\t\treturn promise.then(() => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<p>the answer is 42!</p>\n\t\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-set-simultaneous/main.svelte",
    "content": "<script>\n\texport let promise;\n\texport let answer;\n</script>\n\n{#if promise}\n\t{#await promise}\n\t\t<p>wait for it...</p>\n\t{:then _}\n\t\t<p>the answer is {answer}!</p>\n\t{:catch error}\n\t\t<p>well that's odd</p>\n\t{/await}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-set-simultaneous-reactive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>wait for it...</p>',\n\ttest({ assert, component, target }) {\n\t\treturn component.promise.then(async () => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<p>the answer is 42!</p>\n\t\t\t\t\t<p>the answer100 is 4200!</p>\n\t\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-set-simultaneous-reactive/main.svelte",
    "content": "<script>\n\tlet answer = 0;\n\t$: answer100 = answer * 100;\n\texport let promise = new Promise(resolve => {\n\t\tsetTimeout(() => {\n\t\t\tresolve();\n\t\t\tanswer = 42;\n\t\t}, 0)\n\t});\n</script>\n\n{#if promise}\n\t{#await promise}\n\t\t<p>wait for it...</p>\n\t{:then _}\n\t\t<p>the answer is {answer}!</p>\n\t\t<p>the answer100 is {answer100}!</p>\n\t{:catch error}\n\t\t<p>well that's odd</p>\n\t{/await}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-blowback-reactive/Widget.svelte",
    "content": "<script>\n  export let options = [];\n  export let index = 0;\n  export let value;\n\n  $: {\n\t\tvalue = options[index];\n  }\n</script>\n\n<select bind:value={index}>\n  {#each options as option, i}\n    <option value={i}>{option}</option>\n  {/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-blowback-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tassert.htmlEqual(target.innerHTML, 'Loading...');\n\n\t\tawait component.promise;\n\t\tawait Promise.resolve();\n\t\tconst span = target.querySelector('span');\n\t\tok(span);\n\t\tassert.equal(span.textContent, 'a');\n\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tconst change = new window.Event('change');\n\n\t\toptions[1].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.equal(span.textContent, 'b');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-blowback-reactive/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\texport let promise = Promise.resolve(['a', 'b']);\n\tlet value;\n</script>\n\n{#await promise}\n\tLoading...\n{:then options}\n\t<Widget {options} bind:value />\n\t<span>{value}</span>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>the value is 42</p>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.thePromise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<p>loading...</p>');\n\n\t\t\t\tdeferred.reject(new Error('something broke'));\n\n\t\t\t\treturn deferred.promise.catch(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<p>oh no! something broke</p>');\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-anchor/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<div><p>loading...</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<div><p>the value is 42</p></div>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.thePromise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<div><p>loading...</p></div>');\n\n\t\t\t\tdeferred.reject(new Error('something broke'));\n\n\t\t\t\treturn deferred.promise.catch(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<div><p>oh no! something broke</p></div>');\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-anchor/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n<div>\n{#await thePromise}\n<p>loading...</p>\n{:then theValue}\n<p>the value is {theValue}</p>\n{:catch theError}\n<p>oh no! {theError.message}</p>\n{/await}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-event/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: deferred.promise\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(async () => {\n\t\t\t\tawait tick();\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<button>click me</button>');\n\n\t\t\t\tconst { button } = component;\n\n\t\t\t\tconst click = new window.Event('click', { bubbles: true });\n\t\t\t\tbutton.dispatchEvent(click);\n\n\t\t\t\tassert.equal(component.clicked, 42);\n\n\t\t\t\tconst thePromise = Promise.resolve(43);\n\t\t\t\tcomponent.thePromise = thePromise;\n\n\t\t\t\treturn thePromise;\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tconst { button } = component;\n\n\t\t\t\tconst click = new window.Event('click', { bubbles: true });\n\t\t\t\tbutton.dispatchEvent(click);\n\n\t\t\t\tassert.equal(component.clicked, 43);\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-event/main.svelte",
    "content": "<script>\n\texport let button;\n\texport let thePromise;\n\texport let clicked;\n</script>\n\n{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<button bind:this={button} on:click='{() => clicked = theValue}'>click me</button>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-if/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\nconst thePromise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { show: true, thePromise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tfulfil(42);\n\n\t\treturn thePromise.then(() => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<p>the value is 42</p>\n\t\t\t\t`\n\t\t\t);\n\n\t\t\tcomponent.show = false;\n\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<p>Else</p>\n\t\t\t\t`\n\t\t\t);\n\n\t\t\tcomponent.show = true;\n\n\t\t\treturn thePromise.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t\t<p>the value is 42</p>\n\t\t\t\t\t`\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-if/main.svelte",
    "content": "<script>\n\texport let show;\n\texport let thePromise;\n</script>\n\n{#if show}\n\t{#await thePromise}\n\t\t<p>loading...</p>\n\t{:then theValue}\n\t\t<p>the value is {theValue}</p>\n\t{:catch theError}\n\t\t<p>oh no! {theError.message}</p>\n\t{/await}\n{:else}\n\t<p>Else</p>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-in-slot/Foo.svelte",
    "content": "<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-in-slot/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\tawait deferred.promise;\n\t\tassert.htmlEqual(target.innerHTML, '<p>the value is 42</p>');\n\n\t\tdeferred = create_deferred();\n\t\tcomponent.thePromise = deferred.promise;\n\t\tassert.htmlEqual(target.innerHTML, '<p>loading...</p>');\n\n\t\tdeferred.reject(new Error('something broke'));\n\n\t\ttry {\n\t\t\tawait deferred.promise;\n\t\t} catch {}\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>oh no! something broke</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-in-slot/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let thePromise;\n</script>\n\n<Foo>\n\t{#await thePromise}\n\t\t<p>loading...</p>\n\t{:then theValue}\n\t\t<p>the value is {theValue}</p>\n\t{:catch theError}\n\t\t<p>oh no! {theError.message}</p>\n\t{/await}\n</Foo>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-multiple/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t\t<p>loading...</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>the value is 42</p>\n\t\t\t\t\t<p>the value is 42</p>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.thePromise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>loading...</p>\n\t\t\t\t\t<p>loading...</p>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tdeferred.reject(new Error('something broke'));\n\n\t\t\t\treturn deferred.promise.catch(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>oh no! something broke</p>\n\t\t\t\t\t<p>oh no! something broke</p>\n\t\t\t\t`\n\t\t\t\t);\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-multiple/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}\n\n{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-no-values/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: 'waiting',\n\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(9000);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, 'resolved');\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.thePromise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(target.innerHTML, 'waiting');\n\n\t\t\t\tdeferred.reject(new Error('something broke'));\n\n\t\t\t\treturn deferred.promise.catch(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, 'rejected');\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-no-values/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\twaiting\n{:then}\n\tresolved\n{:catch}\n\trejected\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-non-promise/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { thePromise: 'not actually a promise' };\n\t},\n\n\thtml: `\n\t\t<p>the value is not actually a promise</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.thePromise = 'still not a promise';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>the value is still not a promise</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-non-promise/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-order/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\nconst thePromise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { thePromise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p><p>true!</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tfulfil(42);\n\n\t\treturn thePromise.then(() => {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<p>the value is 42</p><p>true!</p>\n\t\t\t\t`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-order/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\t<p>loading...</p>\n{:then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}\n\n{#if true}\n\t<p>true!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-static/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\nlet promise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { promise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tfulfil(42);\n\n\t\treturn promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>loaded</p>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tpromise = new Promise((f, _) => {\n\t\t\t\t\tfulfil = f;\n\t\t\t\t});\n\n\t\t\t\tcomponent.promise = promise;\n\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>loading...</p>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tfulfil(43);\n\n\t\t\t\treturn promise.then(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>loaded</p>\n\t\t\t\t`\n\t\t\t\t);\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-catch-static/main.svelte",
    "content": "<script>\n\texport let promise;\n</script>\n\n{#await promise}\n\t<p>loading...</p>\n{:then value}\n\t<p>loaded</p>\n{:catch error}\n\t<p>errored</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-array/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {})\n\t\t};\n\t},\n\n\thtml: `\n\t\tloading...\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve([1, 2]));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>a: 1</p>\n\t\t\t\t<p>b: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tawait (component.thePromise = Promise.resolve([4, 5]));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>a: 4</p>\n\t\t\t\t<p>b: 5</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject(['a', [6, 7]]));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>c: a</p>\n\t\t\t\t<p>d: 6</p>\n\t\t\t\t<p>e: 7</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject(['b', [8, 9]]));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>c: b</p>\n\t\t\t\t<p>d: 8</p>\n\t\t\t\t<p>e: 9</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-array/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\tloading...\n{:then [ a, b ]}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n{:catch [c, [d, e]]}\n\t<p>c: {c}</p>\n\t<p>d: {d}</p>\n\t<p>e: {e}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-array-nested-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {})\n\t\t};\n\t},\n\n\thtml: `\n\t\tloading...\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve([1, 2, 3, 4, 5, 6, 7, 8]));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>a: 1</p>\n\t\t\t\t<p>b: 2</p>\n\t\t\t\t<p>c: 5</p>\n\t\t\t\t<p>remaining length: 3</p>\n\t\t\t`\n\t\t);\n\n\t\tawait (component.thePromise = Promise.resolve([9, 10, 11, 12, 13, 14, 15]));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>a: 9</p>\n\t\t\t\t<p>b: 10</p>\n\t\t\t\t<p>c: 13</p>\n\t\t\t\t<p>remaining length: 2</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject([16, 17, 18, 19, 20, 21, 22]));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>c: 16</p>\n\t\t\t\t<p>d: 17</p>\n\t\t\t\t<p>e: 18</p>\n\t\t\t\t<p>f: 19</p>\n\t\t\t\t<p>g: 22</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject([23, 24, 25, 26, 27, 28, 29, 30, 31]));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>c: 23</p>\n\t\t\t\t<p>d: 24</p>\n\t\t\t\t<p>e: 25</p>\n\t\t\t\t<p>f: 26</p>\n\t\t\t\t<p>g: 29</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-array-nested-rest/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\tloading...\n{:then [ a, b, ...[,, c, ...{ length } ]]}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n  <p>c: {c}</p>\n  <p>remaining length: {length}</p>\n{:catch [c, ...[d, e, f, ...[,,g]]]}\n\t<p>c: {c}</p>\n\t<p>d: {d}</p>\n\t<p>e: {e}</p>\n  <p>f: {f}</p>\n  <p>g: {g}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-computed-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>propA: 3</p>\n\t\t\t<p>propB: 7</p>\n\t\t\t<p>num: 3</p>\n\t\t\t<p>rest: {\"prop3\":{\"prop9\":9,\"prop10\":10}}</p>\n\t\t\t<p>propZ: 5</p>\n\t\t\t<p>propY: 6</p>\n\t\t\t<p>rest: {\"propX\":7,\"propW\":8}</p>\n\t\t\t`\n\t\t);\n\n\t\tawait (component.object = Promise.resolve({\n\t\t\tprop1: 'one',\n\t\t\tprop2: 'two',\n\t\t\tprop3: { prop7: 'seven' },\n\t\t\tprop4: { prop10: 'ten' }\n\t\t}));\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>propA: seven</p>\n\t\t\t<p>propB: ten</p>\n\t\t\t<p>num: 5</p>\n\t\t\t<p>rest: {\"prop1\":\"one\",\"prop2\":\"two\"}</p>\n\t\t\t<p>propZ: 5</p>\n\t\t\t<p>propY: 6</p>\n\t\t\t<p>rest: {\"propX\":7,\"propW\":8}</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-computed-props/main.svelte",
    "content": "<script>\n\texport let object = Promise.resolve({ prop1: { prop4: 2, prop5: 3 }, prop2: { prop6: 5, prop7: 6, prop8: 7 }, prop3: { prop9: 9, prop10: 10 } });\n\tconst objectReject = Promise.reject({ propZ: 5, propY: 6, propX: 7, propW: 8 });\n\n\tlet num = 1;\n\tconst prop = 'prop';\n</script>\n\n{#await object then { [`prop${num++}`]: { [`prop${num + 3}`]: propA }, [`prop${num++}`]: { [`prop${num + 5}`]: propB }, ...rest }}\n\t<p>propA: {propA}</p>\n\t<p>propB: {propB}</p>\n\t<p>num: {num}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n{#await objectReject then value}\n\tresolved\n{:catch { [`${prop}Z`]: propZ, [`${prop}Y`]: propY, ...rest }}\n\t<p>propZ: {propZ}</p>\n\t<p>propY: {propY}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-default/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 3</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>c: 3</p>\n\t\t\t<p>a: 1</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>c: 3</p>\n\t\t\t<p>a: 3</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>c: 3</p>\n\t\t\t<p>a: 1</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>c: 3</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-default/main.svelte",
    "content": "<script>\n\tlet object = Promise.resolve({ b: 2, c: 3 });\n\tlet array = Promise.resolve([1, 2]);\n\tlet objectReject = Promise.reject({ b: 2, c: 3 });\n\tlet arrayReject = Promise.reject([1, 2]);\n</script>\n\n{#await object then { a = 3, b = 4, c }}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n\t<p>c: {c}</p>\n{/await}\n\n{#await array then [a, b, c = 3]}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n\t<p>c: {c}</p>\n{/await}\n\n{#await objectReject then value}\n\tresolved\n{:catch { a = 3, b = 4, c }}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n\t<p>c: {c}</p>\n{/await}\n\n{#await arrayReject then value}\n\tresolved\n{:catch [a, b, c = 3]}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n\t<p>c: {c}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-number-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {})\n\t\t};\n\t},\n\n\thtml: `\n\t\tloading...\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve([10, 11, 12, 13, 14, 15]));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>[1] 11</p>\n        <p>[3] 13</p>\n\t\t\t\t<p>[4] 14</p>\n\t\t\t`\n\t\t);\n\n\t\tawait (component.thePromise = Promise.resolve({ 1: 21, 3: 23, 4: 24 }));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>[1] 21</p>\n\t\t\t\t<p>[3] 23</p>\n\t\t\t\t<p>[4] 24</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject([30, 31, 32, 33, 34, 35]));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>[0] 30</p>\n\t\t\t\t<p>[2] 32</p>\n\t\t\t\t<p>[5] 35</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject({ 0: 40, 2: 42, 5: 45 }));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>[0] 40</p>\n\t\t\t\t<p>[2] 42</p>\n\t\t\t\t<p>[5] 45</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-number-props/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\tloading...\n{:then { 1: a, 3: b, 4: c }}\n\t<p>[1] {a}</p>\n\t<p>[3] {b}</p>\n\t<p>[4] {c}</p>\n{:catch { 0: d, 2: e, 5: f }}\n\t<p>[0] {d}</p>\n\t<p>[2] {e}</p>\n\t<p>[5] {f}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {})\n\t\t};\n\t},\n\n\thtml: `\n\t\tloading...\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve({ error: 'error message' }));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>error: error message</p>\n\t\t\t\t<p>result: </p>\n\t\t\t`\n\t\t);\n\n\t\tawait (component.thePromise = Promise.resolve({ result: '42' }));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>error: </p>\n\t\t\t\t<p>result: 42</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject({\n\t\t\t\terror: { message: 'oops', code: '123' }\n\t\t\t}));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>message: oops</p>\n\t\t\t\t<p>code: 123</p>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject({\n\t\t\t\terror: { message: 'timeout', code: '456' }\n\t\t\t}));\n\t\t} catch (e) {\n\t\t\t// do nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>message: timeout</p>\n\t\t\t\t<p>code: 456</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\tloading...\n{:then { result, error }}\n\t<p>error: {error}</p>\n\t<p>result: {result}</p>\n{:catch { error: { message, code } }}\n\t<p>message: {message}</p>\n\t<p>code: {code}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object-if/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: Promise.resolve({ result: 1 })\n\t\t};\n\t},\n\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve({ result: 1 }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>result: 1</p>\n\t\t\t\t<p>count: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, 1));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>result: 1</p>\n\t\t\t\t<p>count: 1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object-if/main.svelte",
    "content": "<script>\n\texport let thePromise;\n\n\tlet count = 0;\n\n\tsetTimeout(() => {\n\t\tcount++;\n\t}, 0);\n</script>\n\n{#await thePromise then { result }}\n\t{#if result}\n\t\t<p>result: {result}</p>\n\t\t<p>count: {count}</p>\n\t{:else}\n\t\t<p>result: {result}</p>\n\t\t<p>count: {count}</p>\n\t{/if}\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 1</p>\n\t\t\t<p>rest: {\"b\":2,\"c\":3}</p>\n\t\t\t<p>a: 1</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>rest: [3,4,5,6]</p>\n\t\t\t<p>a: 1</p>\n\t\t\t<p>rest: {\"b\":2,\"c\":3}</p>\n\t\t\t<p>a: 1</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>rest: [3,4,5,6]</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-rest/main.svelte",
    "content": "<script>\n\tlet object = Promise.resolve({ a: 1, b: 2, c: 3 });\n\tlet array = Promise.resolve([1, 2, 3, 4, 5, 6]);\n\tlet objectReject = Promise.reject({ a: 1, b: 2, c: 3 });\n\tlet arrayReject = Promise.reject([1, 2, 3, 4, 5, 6]);\n</script>\n\n{#await object then { a, ...rest }}\n\t<p>a: {a}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n{#await array then [a, b, ...rest]}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n{#await objectReject then value}\n\tresolved\n{:catch { a, ...rest }}\n\t<p>a: {a}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n{#await arrayReject then value}\n\tresolved\n{:catch [a, b, ...rest]}\n\t<p>a: {a}</p>\n\t<p>b: {b}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-string-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>prop-1: 1</p>\n\t\t\t<p>prop4: 4</p>\n\t\t\t<p>rest: {\"prop2\":2,\"prop-3\":3}</p>\n\t\t\t<p>prop-7: 7</p>\n\t\t\t<p>prop6: 6</p>\n\t\t\t<p>rest: {\"prop-5\":5,\"prop8\":8}</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-destruct-string-props/main.svelte",
    "content": "<script>\n  const object = Promise.resolve({ 'prop-1': 1, 'prop2': 2, 'prop-3': 3, 'prop4': 4 });\n  const objectReject = Promise.reject({ 'prop-5': 5, 'prop6': 6, 'prop-7': 7, 'prop8': 8 });\n</script>\n\n{#await object then { 'prop-1': prop1, 'prop4': fourthProp, ...rest }}\n\t<p>prop-1: {prop1}</p>\n\t<p>prop4: {fourthProp}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n{#await objectReject then value}\n\tresolved\n{:catch { 'prop-7': prop7, 'prop6': sixthProp, ...rest }}\n\t<p>prop-7: {prop7}</p>\n\t<p>prop6: {sixthProp}</p>\n\t<p>rest: {JSON.stringify(rest)}</p>\n{/await}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-if/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\nconst thePromise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { thePromise };\n\t},\n\n\thtml: `\n\t\tloading...\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tfulfil([]);\n\n\t\tawait thePromise;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>promise array is empty</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-if/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise}\n\tloading...\n{:then r}\n\t{#if r.length < 1}\n\t\t<p>promise array is empty</p>\n\t{:else}\n\t\t<p>promise array is not empty</p>\n\t{/if}\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-no-context/main.svelte",
    "content": "<script>\n\tconst promise = new Promise(() => {});\n\tconst test = [1, 2, 3];\n</script>\n\n{#await promise}\n\t<div>waiting</div>\n{:then}\n\t{#each test as t}\n\t\t<div>t</div>\n\t{/each}\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-no-expression/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<br>\n\t\t<br>\n\t\t<p>the promise is pending</p>\n\t`,\n\n\texpect_unhandled_rejections: true,\n\tasync test({ assert, component, target }) {\n\t\tdeferred.resolve();\n\n\t\tawait deferred.promise;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>the promise is resolved</p>\n\t\t\t<br>\n\t\t\t<p>the promise is resolved</p>\n\t\t\t<br>\n\t\t\t<p>the promise is resolved</p>\n\t\t`\n\t\t);\n\n\t\tconst local = (deferred = create_deferred());\n\n\t\tcomponent.thePromise = local.promise;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<p>the promise is pending</p>\n\t\t`\n\t\t);\n\n\t\tlocal.reject(new Error('something broke'));\n\n\t\ttry {\n\t\t\tawait local.promise;\n\t\t} catch {}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>oh no! something broke</p>\n\t\t\t<br />\n\t\t\t<br />`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-no-expression/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise then}\n\t<p>the promise is resolved</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}\n\n<br />\n\n{#await thePromise then}\n\t<p>the promise is resolved</p>\n{/await}\n\n<br />\n\n{#await thePromise}\n\t<p>the promise is pending</p>\n{:then}\n\t<p>the promise is resolved</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-shadowed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>Loading...</div>',\n\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(target.innerHTML, '<div>10</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-shadowed/main.svelte",
    "content": "<script>\n\tconst x = Promise.resolve(10);\n</script>\n\n<div>\n\t{#await x}\n\t\tLoading...\n\t{:then x}\n\t\t{x}\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-shorthand/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { thePromise: deferred.promise };\n\t},\n\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>the value is 42</p>\n\t\t\t\t`\n\t\t\t\t);\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.thePromise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t\t\tdeferred.reject(new Error('something broke'));\n\n\t\t\t\treturn deferred.promise.catch(() => {});\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t`\n\t\t\t\t\t<p>oh no! something broke</p>\n\t\t\t\t`\n\t\t\t\t);\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-then-shorthand/main.svelte",
    "content": "<script>\n\texport let thePromise;\n</script>\n\n{#await thePromise then theValue}\n\t<p>the value is {theValue}</p>\n{:catch theError}\n\t<p>oh no! {theError.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-components/Widget.svelte",
    "content": "{value}\n\n<script>\n  export let value = 'Loading...';\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-components/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\t/** @param {any} value */\n\t\tlet resolve = (value) => {};\n\n\t\t/** @param {any} reason */\n\t\tlet reject = (reason) => {};\n\n\t\tlet promise = new Promise((ok) => (resolve = ok));\n\n\t\tcomponent.promise = promise;\n\t\tassert.htmlEqual(target.innerHTML, 'Loading...');\n\n\t\tresolve(42);\n\t\tawait promise;\n\t\tassert.htmlEqual(target.innerHTML, '42');\n\n\t\tpromise = new Promise((ok, fail) => (reject = fail));\n\t\tcomponent.promise = promise;\n\t\tassert.htmlEqual(target.innerHTML, 'Loading...');\n\n\t\treject(99);\n\t\tawait promise.then(null, () => {});\n\t\tassert.htmlEqual(target.innerHTML, '99');\n\n\t\tpromise = new Promise((ok) => (resolve = ok));\n\t\tcomponent.promise = promise;\n\t\tassert.htmlEqual(target.innerHTML, 'Loading...');\n\n\t\tresolve(1);\n\t\tawait promise;\n\t\tassert.htmlEqual(target.innerHTML, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-components/main.svelte",
    "content": "{#await promise}\n\t<Widget />\n{:then result}\n\t<Widget value=\"{result}\" />\n{:catch err}\n\t<Widget value=\"{err}\" />\n{/await}\n\n<script>\n\timport Widget from './Widget.svelte';\n\texport let promise = Promise.resolve();\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update/Component.svelte",
    "content": "<script>\n  export let count;\n</script>\n\n<div>count: {count}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {}),\n\t\t\tcount: 0\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div><p>loading...</p></div>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve(component.Component));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Resolved:\n\t\t\t\t<div>count: 0</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.count = 5;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Resolved:\n\t\t\t\t<div>count: 5</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject(component.Component));\n\t\t} catch (error) {\n\t\t\t// ignore\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Rejected:\n\t\t\t\t<div>count: 5</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.count = 10;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Rejected:\n\t\t\t\t<div>count: 10</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\texport let thePromise;\n\texport let count;\n\texport { Component }\n</script>\n\n<div>\n\t{#await thePromise}\n\t\t<p>loading...</p>\n\t{:then theValue}\n\t\tResolved: <svelte:component this={theValue} {count} />\n\t{:catch theError}\n\t\tRejected: <svelte:component this={theError} {count} />\n\t{/await}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update-2/Component.svelte",
    "content": "<script>\n  export let count;\n  export let value;\n</script>\n\n<div>count: {count}</div>\n<div>value: {value}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {}),\n\t\t\tcount: 0\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div><p>loading...</p></div>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve({\n\t\t\tvalue: 'success',\n\t\t\tComponent: component.Component\n\t\t}));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Resolved:\n\t\t\t\t<div>count: 0</div>\n\t\t\t\t<div>value: success</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.count = 5;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Resolved:\n\t\t\t\t<div>count: 5</div>\n\t\t\t\t<div>value: success</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject({\n\t\t\t\tvalue: 'failure',\n\t\t\t\tComponent: component.Component\n\t\t\t}));\n\t\t} catch (error) {\n\t\t\t// ignore\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Rejected:\n\t\t\t\t<div>count: 5</div>\n\t\t\t\t<div>value: failure</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.count = 10;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Rejected:\n\t\t\t\t<div>count: 10</div>\n\t\t\t\t<div>value: failure</div>\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update-2/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\texport let thePromise;\n\texport let count;\n\texport { Component }\n</script>\n\n<div>\n\t{#await thePromise}\n\t\t<p>loading...</p>\n\t{:then { value: theValue, Component }}\n\t\tResolved: <svelte:component this={Component} {count} value={theValue} />\n\t{:catch { value: theError, Component } }\n\t\tRejected: <svelte:component this={Component} {count} value={theError} />\n\t{/await}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update-catch-scope/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthePromise: new Promise((_) => {})\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>error: </div>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait (component.thePromise = Promise.resolve('abc'));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\terror:\n\t\t\t\tAfter Resolve:\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.error = 'external error occurred';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\terror: ${component.error}\n\t\t\t\tAfter Resolve: ${component.error}\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\ttry {\n\t\t\tawait (component.thePromise = Promise.reject('failure'));\n\t\t} catch (error) {\n\t\t\t// ignore\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\terror: ${component.error}\n\t\t\t\tRejected: failure\n\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-with-update-catch-scope/main.svelte",
    "content": "<script>\n\texport let thePromise;\n\texport let error;\n</script>\n\n<div>\n\terror: {error}\n\t{#await thePromise then _}\n\t\tAfter Resolve: {error}\n\t{:catch error}\n\t\tRejected: {error}\n\t{/await}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-without-catch/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers.js';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { promise: deferred.promise };\n\t},\n\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\texpect_unhandled_rejections: true,\n\ttest({ assert, component, target }) {\n\t\tdeferred.resolve(42);\n\n\t\treturn deferred.promise\n\t\t\t.then(() => {\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<p>loaded</p>');\n\n\t\t\t\tdeferred = create_deferred();\n\n\t\t\t\tcomponent.promise = deferred.promise;\n\n\t\t\t\tassert.htmlEqual(target.innerHTML, '<p>loading...</p>');\n\n\t\t\t\tdeferred.reject(new Error('this error should be thrown'));\n\n\t\t\t\treturn deferred.promise;\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tassert.equal(err.message, 'this error should be thrown');\n\t\t\t\tassert.htmlEqual(target.innerHTML, '');\n\t\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/await-without-catch/main.svelte",
    "content": "<script>\n\texport let promise;\n</script>\n\n{#await promise}\n\t<p>loading...</p>\n{:then value}\n\t<p>loaded</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain/Item.svelte",
    "content": "<script>\n\timport { beforeUpdate } from 'svelte';\n\n\texport let item;\n\texport let foo = 'XX';\n\n\tbeforeUpdate(() => {\n\t\tfoo = item;\n\t});\n</script>\n\n<span>{foo}</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain/List.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\n\texport let items = [3, 2, 1];\n\n\texport function update() {\n\t\titems = [1, 2, 3, 4, 5];\n\t}\n</script>\n\n{#each items as item}\n\t<Item item={item} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `\n\t\t<span>3</span>\n\t\t<span>2</span>\n\t\t<span>1</span>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.list.update();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t\t<span>4</span>\n\t\t\t<span>5</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain/main.svelte",
    "content": "<script>\n\texport let list;\n\n\timport List from './List.svelte';\n</script>\n\n<List bind:this={list}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain-2/Item.svelte",
    "content": "<script>\n\timport {beforeUpdate} from 'svelte';\n\n\tlet count1 = 0;\n\tlet count2 = 0;\n\n\tfunction increaseCount1() {\n\t\tcount1++;\n\t}\n\n\t$: if (count2 < 10) {\n\t\tincreaseCount1();\n\t}\n\n\t$: if (count1 < 10) {\n\t\tcount2++;\n\t}\n\n\tbeforeUpdate(() => {\n\t\t// We don't need to do anything\n\t});\n</script>\n\n<button on:click={() => count1++}>{count1} / {count2}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\t// This test would result in an infinite loop, so if this doesn't error, then the test is working.\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-chain-2/main.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\n\tvar items = Array(1000);\n</script>\n\n{#each items as item}\n\t<Item />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-prevents-loop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server', 'async-server'],\n\n\tget props() {\n\t\treturn { value: 'hello!' };\n\t},\n\n\thtml: `\n\t\t<p>hello!</p>\n\t\t<p>hello!</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.value = 'goodbye!';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>goodbye!</p>\n\t\t\t<p>goodbye!</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/before-render-prevents-loop/main.svelte",
    "content": "<script>\n\timport { beforeUpdate } from 'svelte';\n\n\texport let value;\n\tlet mirror;\n\n\tbeforeUpdate(() => {\n\t\tmirror = value;\n\t});\n</script>\n\n<p>{value}</p>\n<p>{mirror}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bind-export-const-with-spread/Test.svelte",
    "content": "<script>\n\texport const x = 42;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bind-export-const-with-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>42</p>`,\n\tasync test({ target, assert }) {\n\t\tconst p = target.querySelector('p');\n\t\tassert.equal(p?.innerHTML, '42');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bind-export-const-with-spread/main.svelte",
    "content": "<script>\n\timport Test from \"./Test.svelte\";\n\n\tlet x;\n</script>\n\n<Test\n\tbind:x\n\t{...{}}\n/>\n<p>{x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-backflow/Child.svelte",
    "content": "<script>\n\texport let testcase;\n\texport let value = { foo: 'kid' };\n\tif (testcase === 'init_update') {\n\t\tvalue = { foo: 'kid' }\n\t}\n\tif (testcase === 'init_mutate') {\n\t\tvalue.foo = 'kid'\n\t}\n\t$: if (testcase === 'reactive_update') {\n\t\tvalue = { foo: 'kid' }\n\t}\n\t$: if (testcase === 'reactive_mutate') {\n\t\tvalue.foo = 'kid'\n\t}\n\texport let updates = [];\n\t$: updates = [...updates, value];\n</script>\n\n<div>child: {value?.foo} | updates: {updates.length}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-backflow/Parent.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\texport let child;\n\texport let testcase;\n\texport let value;\n\texport let updates = [];\n\t$: updates = [...updates, value];\n</script>\n\n<div>parent: {value?.foo} | updates: {updates.length}</div>\n<Child bind:value bind:this={child} {testcase} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-backflow/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tconfigs: [\n\t\t\t\t{ testcase: 'parent_override_child_default', value: { foo: 'mon' } },\n\t\t\t\t{ testcase: 'child_default_populate_parent', value: undefined },\n\t\t\t\t{ testcase: 'reactive_update', value: { foo: 'mon' } },\n\t\t\t\t{ testcase: 'reactive_mutate', value: { foo: 'mon' } },\n\t\t\t\t{ testcase: 'init_update', value: { foo: 'mon' } },\n\t\t\t\t{ testcase: 'init_mutate', value: { foo: 'mon' } }\n\t\t\t]\n\t\t};\n\t},\n\n\tasync test({ assert, component }) {\n\t\tconst parents = component.parents;\n\n\t\t// first testcase should update once\n\t\t// the rest should update twice\n\t\tlet p;\n\t\tp = parents['parent_override_child_default'];\n\t\tassert.deepEqual(p.value, { foo: 'mon' });\n\t\tassert.equal(p.updates.length, 1);\n\n\t\tp = parents['child_default_populate_parent'];\n\t\tassert.deepEqual(p.value, { foo: 'kid' });\n\t\tassert.equal(p.updates.length, 2);\n\n\t\tp = parents['reactive_update'];\n\t\tassert.deepEqual(p.value, { foo: 'kid' });\n\t\tassert.equal(p.updates.length, 2);\n\n\t\tp = parents['reactive_mutate'];\n\t\tassert.deepEqual(p.value, { foo: 'kid' });\n\t\tassert.equal(p.updates.length, 2);\n\n\t\tp = parents['init_update'];\n\t\tassert.deepEqual(p.value, { foo: 'kid' });\n\t\tassert.equal(p.updates.length, 2);\n\n\t\tp = parents['init_mutate'];\n\t\tassert.deepEqual(p.value, { foo: 'kid' });\n\t\tassert.equal(p.updates.length, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-backflow/main.svelte",
    "content": "<script>\n\timport Parent from './Parent.svelte';\n\texport let configs = [];\n\texport let parents = {};\n</script>\n\n{#each configs as config}\n\t<Parent bind:this={parents[config.testcase]} value={config.value} testcase={config.testcase} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-circular/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<select>\n\t\t\t<option selected value=\"[object Object]\">wheeee</option>\n\t\t</select>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-circular/main.svelte",
    "content": "<script>\n\tlet obj = {};\n\tobj.self = obj;\n\n\tlet selected = obj;\n</script>\n\n<select bind:value={selected}>\n\t<option value={obj}>wheeee</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-html/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: '<b>world</b>' };\n\t},\n\n\thtml: `\n\t\t<editor contenteditable=\"true\"><b>world</b></editor>\n\t\t<p>hello <b>world</b></p>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst el = target.querySelector('editor');\n\t\tok(el);\n\t\tassert.equal(el.innerHTML, '<b>world</b>');\n\n\t\tel.innerHTML = 'every<span>body</span>';\n\n\t\t// No updates to data yet\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">every<span>body</span></editor>\n\t\t\t<p>hello <b>world</b></p>\n\t\t`\n\t\t);\n\n\t\t// Handle user input\n\t\tconst event = new window.Event('input');\n\t\tawait el.dispatchEvent(event);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">every<span>body</span></editor>\n\t\t\t<p>hello every<span>body</span></p>\n\t\t`\n\t\t);\n\n\t\tcomponent.name = 'good<span>bye</span>';\n\t\tassert.equal(el.innerHTML, 'good<span>bye</span>');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">good<span>bye</span></editor>\n\t\t\t<p>hello good<span>bye</span></p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-html/main.svelte",
    "content": "<script>\n  export let name;\n</script>\n\n<editor contenteditable=\"true\" bind:innerHTML={name} />\n<p>hello {@html name}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-html-initial/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string | null} */\n\t\t\tname: null\n\t\t};\n\t},\n\n\thtml: `\n\t\t<editor contenteditable=\"true\"><b>world</b></editor>\n\t\t<p>hello <b>world</b></p>\n\t`,\n\n\tssrHtml: `\n\t\t<editor contenteditable=\"true\"><b>world</b></editor>\n\t\t<p>hello </p>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tassert.equal(component.name, '<b>world</b>');\n\n\t\tconst el = target.querySelector('editor');\n\t\tok(el);\n\n\t\tel.innerHTML = 'every<span>body</span>';\n\n\t\t// No updates to data yet\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">every<span>body</span></editor>\n\t\t\t<p>hello <b>world</b></p>\n\t\t`\n\t\t);\n\n\t\t// Handle user input\n\t\tconst event = new window.Event('input');\n\t\tawait el.dispatchEvent(event);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">every<span>body</span></editor>\n\t\t\t<p>hello every<span>body</span></p>\n\t\t`\n\t\t);\n\n\t\tcomponent.name = 'good<span>bye</span>';\n\t\tassert.equal(el.innerHTML, 'good<span>bye</span>');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">good<span>bye</span></editor>\n\t\t\t<p>hello good<span>bye</span></p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-html-initial/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<editor contenteditable=\"true\" bind:innerHTML={name}>\n\t<b>world</b>\n</editor>\n<p>hello {@html name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-innertext/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\tssrHtml: `\n\t\t<editor contenteditable=\"true\">world</editor>\n\t\t<p>hello world</p>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\t// JSDom doesn't support innerText yet, so the test is not ideal\n\t\t// https://github.com/jsdom/jsdom/issues/1245\n\t\tconst el = target.querySelector('editor');\n\t\tok(el);\n\n\t\t// @ts-expect-error\n\t\tassert.equal(el.innerText, 'world');\n\n\t\tconst event = new window.Event('input');\n\n\t\t// @ts-expect-error\n\t\tel.innerText = 'everybody';\n\t\tawait el.dispatchEvent(event);\n\t\tassert.equal(component.name, 'everybody');\n\n\t\tcomponent.name = 'goodbye';\n\n\t\t// @ts-expect-error\n\t\tassert.equal(el.innerText, 'goodbye');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-innertext/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<editor contenteditable=\"true\" bind:innerText={name} />\n<p>hello {name}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\thtml: `\n\t\t<editor contenteditable=\"true\">world</editor>\n\t\t<p>hello world</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst el = target.querySelector('editor');\n\t\tok(el);\n\t\tassert.equal(el.textContent, 'world');\n\n\t\tconst event = new window.Event('input');\n\n\t\tel.textContent = 'everybody';\n\t\tel.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">everybody</editor>\n\t\t\t<p>hello everybody</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.name = 'goodbye';\n\t\tassert.equal(el.textContent, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">goodbye</editor>\n\t\t\t<p>hello goodbye</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<editor contenteditable=\"true\" bind:textContent={name}></editor>\n<p>hello {name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text-initial/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string | null} */\n\t\t\tname: null\n\t\t};\n\t},\n\n\thtml: `\n\t\t<editor contenteditable=\"true\"><b>world</b></editor>\n\t\t<p>hello world</p>\n\t`,\n\n\tssrHtml: `\n\t\t<editor contenteditable=\"true\"><b>world</b></editor>\n\t\t<p>hello</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tassert.equal(component.name, 'world');\n\n\t\tconst el = target.querySelector('editor');\n\t\tok(el);\n\n\t\tconst event = new window.Event('input');\n\n\t\tel.textContent = 'everybody';\n\t\tel.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">everybody</editor>\n\t\t\t<p>hello everybody</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.name = 'goodbye';\n\t\tassert.equal(el.textContent, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<editor contenteditable=\"true\">goodbye</editor>\n\t\t\t<p>hello goodbye</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text-initial/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<editor contenteditable=\"true\" bind:textContent={name}>\n\t<b>world</b>\n</editor>\n<p>hello {name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-details-open/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<details><summary>toggle</summary></details>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst details = target.querySelector('details');\n\t\tok(details);\n\t\tconst event = new window.Event('toggle');\n\n\t\tdetails.open = true;\n\t\tawait details.dispatchEvent(event);\n\t\tassert.equal(component.visible, true);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<details open><summary>toggle</summary></details>\n\t\t\t<p>hello!</p>\n\t\t`\n\t\t);\n\n\t\tdetails.open = false;\n\t\tawait details.dispatchEvent(event);\n\t\tassert.equal(component.visible, false);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<details><summary>toggle</summary></details>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-details-open/main.svelte",
    "content": "<script>\n\texport let visible;\n</script>\n\n<details bind:open={visible}><summary>toggle</summary></details>\n\n{#if visible}\n\t<p>hello!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-focused/_config.js",
    "content": "import { flushSync } from 'svelte';\n\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\tconst [in1, in2] = target.querySelectorAll('input');\n\n\t\tflushSync(() => in1.focus());\n\t\tassert.equal(window.document.activeElement, in1);\n\t\tassert.equal(component.a, true);\n\t\tassert.equal(component.b, false);\n\n\t\tflushSync(() => in2.focus());\n\t\tassert.equal(window.document.activeElement, in2);\n\t\tassert.equal(component.a, false);\n\t\tassert.equal(component.b, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-focused/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n</script>\n\n<input bind:focused={a} />\n<input bind:focused={b} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\n/** @type {Array<{ description: string, done: boolean }>} */\nlet tasks = [];\n\nexport default test({\n\tmode: ['client', 'hydrate'], // unnecessary to test this in ssr mode\n\n\tget props() {\n\t\ttasks = [\n\t\t\t{ description: 'put your left leg in', done: false },\n\t\t\t{ description: 'your left leg out', done: false },\n\t\t\t{ description: 'in, out, in, out', done: false },\n\t\t\t{ description: 'shake it all about', done: false }\n\t\t];\n\t\treturn { tasks, selected: tasks[0] };\n\t},\n\n\tssrHtml: `\n\t\t<select>\n\t\t\t<option selected value='[object Object]'>put your left leg in</option>\n\t\t\t<option value='[object Object]'>your left leg out</option>\n\t\t\t<option value='[object Object]'>in, out, in, out</option>\n\t\t\t<option value='[object Object]'>shake it all about</option>\n\t\t</select>\n\n\t\t<label>\n\t\t\t<input type='checkbox'> put your left leg in\n\t\t</label>\n\n\t\t<h2>Pending tasks</h2>\n\t\t<p>put your left leg in</p>\n\t\t<p>your left leg out</p>\n\t\t<p>in, out, in, out</p>\n\t\t<p>shake it all about</p>\n\t`,\n\n\tasync test({ assert, component, target, window, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}value='[object Object]'>put your left leg in</option>\n\t\t\t\t<option value='[object Object]'>your left leg out</option>\n\t\t\t\t<option value='[object Object]'>in, out, in, out</option>\n\t\t\t\t<option value='[object Object]'>shake it all about</option>\n\t\t\t</select>\n\n\t\t\t<label>\n\t\t\t\t<input type='checkbox'> put your left leg in\n\t\t\t</label>\n\n\t\t\t<h2>Pending tasks</h2>\n\t\t\t<p>put your left leg in</p>\n\t\t\t<p>your left leg out</p>\n\t\t\t<p>in, out, in, out</p>\n\t\t\t<p>shake it all about</p>\n\t\t`\n\t\t);\n\t\tconst input = target.querySelector('input');\n\t\tconst select = target.querySelector('select');\n\t\tconst options = target.querySelectorAll('option');\n\t\tok(input);\n\t\tok(select);\n\n\t\tconst change = new window.Event('change');\n\n\t\tinput.checked = true;\n\n\t\tflushSync(() => {\n\t\t\tinput.dispatchEvent(change);\n\t\t});\n\n\t\tassert.ok(component.tasks[0].done);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}value='[object Object]'>put your left leg in</option>\n\t\t\t\t<option value='[object Object]'>your left leg out</option>\n\t\t\t\t<option value='[object Object]'>in, out, in, out</option>\n\t\t\t\t<option value='[object Object]'>shake it all about</option>\n\t\t\t</select>\n\n\t\t\t<label>\n\t\t\t\t<input type='checkbox'> put your left leg in\n\t\t\t</label>\n\n\t\t\t<h2>Pending tasks</h2>\n\t\t\t<p>your left leg out</p>\n\t\t\t<p>in, out, in, out</p>\n\t\t\t<p>shake it all about</p>\n\t\t`\n\t\t);\n\n\t\toptions[1].selected = true;\n\n\t\tflushSync(() => {\n\t\t\tselect.dispatchEvent(change);\n\t\t});\n\n\t\tassert.deepEqual(component.selected, tasks[1]); // TODO this should be assert.equal, but that crashes the entire test suite in mysterious ways... something to do with proxies not being reused?\n\t\tassert.ok(!input.checked);\n\n\t\tinput.checked = true;\n\n\t\tflushSync(() => {\n\t\t\tinput.dispatchEvent(change);\n\t\t});\n\n\t\tassert.ok(component.tasks[1].done);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}value='[object Object]'>put your left leg in</option>\n\t\t\t\t<option value='[object Object]'>your left leg out</option>\n\t\t\t\t<option value='[object Object]'>in, out, in, out</option>\n\t\t\t\t<option value='[object Object]'>shake it all about</option>\n\t\t\t</select>\n\n\t\t\t<label>\n\t\t\t\t<input type='checkbox'> your left leg out\n\t\t\t</label>\n\n\t\t\t<h2>Pending tasks</h2>\n\t\t\t<p>in, out, in, out</p>\n\t\t\t<p>shake it all about</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let tasks;\n</script>\n\n<select bind:value={selected}>\n\t{#each tasks as task}\n\t\t<option value='{task}'>{task.description}</option>\n\t{/each}\n</select>\n\n<label>\n\t<input type='checkbox' bind:checked={selected.done}> {selected.description}\n</label>\n\n<h2>Pending tasks</h2>\n{#each tasks.filter(t => !t.done) as task}\n\t<p>{task.description}</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-computed/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `\n\t\t<select>\n\t\t\t<option value='A'>A</option>\n\t\t\t<option value='B'>B</option>\n\t\t\t<option value='C'>C</option>\n\t\t</select>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tconst change = new window.Event('change');\n\n\t\toptions[1].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.equal(component.selected.letter, 'B');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option value='A'>A</option>\n\t\t\t\t<option value='B'>B</option>\n\t\t\t\t<option value='C'>C</option>\n\t\t\t</select>\n\n\t\t\tB\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-computed/main.svelte",
    "content": "<script>\n\texport let letters = [\n\t\t'a',\n\t\t'b',\n\t\t'c'\n\t];\n\texport let selected = {\n\t\tletter: ''\n\t};\n\n\tfunction uppercase() {\n\t\treturn letters.map(x => x.toUpperCase());\n\t}\n</script>\n\n<select bind:value={selected.letter}>\n\t{#each uppercase() as letter}\n\t\t<option value=\"{letter}\">{letter}</option>\n\t{/each}\n</select>\n\n{selected.letter}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-fn/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `<input>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-fn/main.svelte",
    "content": "<script>\n  $: items = [{ value: 'hello' }];\n\n  function fn(value) {\n\t\treturn true;\n\t}\n</script>\n\n{#each items.filter(fn) as item}\n  <input bind:value={item.value} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<input type=\"radio\" value=\"radio1\">\n\t\t<input type=\"radio\" value=\"radio2\" checked>\n\t\t<input type=\"radio\" value=\"radio3\">\n\n\t\t<input type=\"checkbox\" value=\"check1\">\n\t\t<input type=\"checkbox\" value=\"check2\" checked>\n\t\t<input type=\"checkbox\" value=\"check3\">\n\t`,\n\tasync test({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('click');\n\n\t\tconst [radio1, radio2, radio3] = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=radio]')\n\t\t);\n\n\t\tassert.ok(!radio1.checked);\n\t\tassert.ok(radio2.checked);\n\t\tassert.ok(!radio3.checked);\n\n\t\tcomponent.radio = 'radio1';\n\n\t\tassert.ok(radio1.checked);\n\t\tassert.ok(!radio2.checked);\n\t\tassert.ok(!radio3.checked);\n\n\t\tawait radio3.dispatchEvent(event);\n\n\t\tassert.equal(component.radio, 'radio3');\n\t\tassert.ok(!radio1.checked);\n\t\tassert.ok(!radio2.checked);\n\t\tassert.ok(radio3.checked);\n\n\t\tconst [check1, check2, check3] = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=checkbox]')\n\t\t);\n\n\t\tassert.ok(!check1.checked);\n\t\tassert.ok(check2.checked);\n\t\tassert.ok(!check3.checked);\n\n\t\tcomponent.check = ['check1', 'check2'];\n\n\t\tassert.ok(check1.checked);\n\t\tassert.ok(check2.checked);\n\t\tassert.ok(!check3.checked);\n\n\t\tawait check3.dispatchEvent(event);\n\n\t\tassert.deepEqual(component.check, ['check1', 'check2', 'check3']);\n\t\tassert.ok(check1.checked);\n\t\tassert.ok(check2.checked);\n\t\tassert.ok(check3.checked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-spread/main.svelte",
    "content": "<script>\n\texport let radio = 'radio2';\n\texport let check = ['check2'];\n</script>\n\n<input type='radio' bind:group={radio} value='radio1' {...{}}>\n<input type='radio' bind:group={radio} value='radio2' {...{}}>\n<input type='radio' bind:group={radio} value='radio3' {...{}}>\n\n<input type='checkbox' bind:group={check} value='check1' {...{}}>\n<input type='checkbox' bind:group={check} value='check2' {...{}}>\n<input type='checkbox' bind:group={check} value='check3' {...{}}>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-value/Component.svelte",
    "content": "<script>\n\texport let value;\n\tvalue = \"bar\";\n</script>\n\nChild component \"{value}\"<br />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\tParent component \"bar\"<br />\n\t\tChild component \"bar\"<br />\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-indirect-value/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\tlet value = \"foo\";\n</script>\n\nParent component \"{value}\"<br />\n<Component bind:value />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true };\n\t},\n\n\thtml: `\n\t\t<input type=\"checkbox\">\n\t\t<p>true</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input type=\"checkbox\" checked>\n\t\t<p>true</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.equal(input.checked, true);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinput.checked = false;\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type=\"checkbox\">\n\t\t\t<p>false</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = true;\n\t\tassert.equal(input.checked, true);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type=\"checkbox\">\n\t\t\t<p>true</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<input type='checkbox' bind:checked={foo}>\n<p>{foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-deep-contextual/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: [\n\t\t\t\t{ description: 'one', completed: true },\n\t\t\t\t{ description: 'two', completed: false },\n\t\t\t\t{ description: 'three', completed: false }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>three</p>\n\t\t</div>\n\t\t<p>1 completed</p>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\" checked><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>three</p>\n\t\t</div>\n\t\t<p>1 completed</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = [...target.querySelectorAll('input')];\n\n\t\tassert.ok(inputs[0].checked);\n\t\tassert.ok(!inputs[1].checked);\n\t\tassert.ok(!inputs[2].checked);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[1].checked = true;\n\t\tinputs[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.numCompleted, 2);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input type=\"checkbox\"><p>one</p></div><div><input type=\"checkbox\"><p>two</p></div><div><input type=\"checkbox\"><p>three</p></div>\n\t\t\t<p>2 completed</p>\n\t\t`\n\t\t);\n\n\t\tconst items = component.items;\n\t\titems[2].completed = true;\n\n\t\tcomponent.items = items;\n\t\tassert.ok(inputs[2].checked);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input type=\"checkbox\"><p>one</p></div><div><input type=\"checkbox\"><p>two</p></div><div><input type=\"checkbox\"><p>three</p></div>\n\t\t\t<p>3 completed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-deep-contextual/main.svelte",
    "content": "<script>\n\texport let items;\n\texport let numCompleted;\n\n\t$: numCompleted = items.reduce((total, item) => {\n\t\treturn total + (item.completed ? 1 : 0);\n\t}, 0);\n</script>\n\n{#each items as item}\n\t<div><input type='checkbox' bind:checked={item.completed}><p>{item.description}</p></div>\n{/each}\n\n<p>{numCompleted} completed</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-deep-contextual-b/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>three</p>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\"><p>three</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = [...target.querySelectorAll('input')];\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[1].checked = true;\n\t\tinputs[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tcomponent.clear();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input type=\"checkbox\"><p>one</p></div>\n\t\t\t<div><input type=\"checkbox\"><p>three</p></div>\n\t\t`\n\t\t);\n\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(event);\n\t\tflushSync();\n\t\tcomponent.clear();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input type=\"checkbox\"><p>one</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-deep-contextual-b/main.svelte",
    "content": "<script>\n\tlet todos = [\n\t\t{ done: false, text: 'one' },\n\t\t{ done: false, text: 'two' },\n\t\t{ done: false, text: 'three' }\n\t];\n\n\texport function clear() {\n\t\ttodos = todos.filter(t => !t.done);\n\t}\n</script>\n\n{#each todos as todo, i}\n\t<div>\n\t\t<input type=checkbox bind:checked={todo.done}>\n\t\t<p>{todo.text}</p>\n\t</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-group/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nconst values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }];\n\nexport default test({\n\tget props() {\n\t\treturn { values, selected: [values[1]] };\n\t},\n\n\thtml: `\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t</label>\n\n\t\t<p>Beta</p>`,\n\n\tssrHtml: `\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\" checked> Beta\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t</label>\n\n\t\t<p>Beta</p>`,\n\n\ttest({ assert, component, target, window }) {\n\t\tlet inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Alpha, Beta</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = [component.values[1], component.values[2]];\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Beta, Gamma</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-group/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let values;\n</script>\n\n{#each values as value}\n\t<label>\n\t\t<input type=\"checkbox\" value=\"{value}\" bind:group={selected} /> {value.name}\n\t</label>\n{/each}\n\n<p>{selected.map(v => v.name).join(', ')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-group-outside-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nconst values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }];\n\nexport default test({\n\tget props() {\n\t\treturn { values, selected: [values[1]] };\n\t},\n\n\thtml: `\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t</label>\n\n\t\t<p>Beta</p>`,\n\n\tssrHtml: `\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\" checked> Beta\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t</label>\n\n\t\t<p>Beta</p>`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Alpha, Beta</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = [component.values[1], component.values[2]];\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Beta, Gamma</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-group-outside-each/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let values;\n</script>\n\n<label>\n\t<input type=\"checkbox\" value=\"{values[0]}\" bind:group={selected} /> {values[0].name}\n</label>\n\n<label>\n\t<input type=\"checkbox\" value=\"{values[1]}\" bind:group={selected} /> {values[1].name}\n</label>\n\n<label>\n\t<input type=\"checkbox\" value=\"{values[2]}\" bind:group={selected} /> {values[2].name}\n</label>\n\n<p>{selected.map( function ( value ) { return value.name; }).join( ', ' ) }</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-indeterminate/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { indeterminate: true };\n\t},\n\n\thtml: `\n\t\t<input type=\"checkbox\">\n\t\t<p>checked? false</p>\n\t\t<p>indeterminate? true</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input type=\"checkbox\">\n\t\t<p>checked? </p>\n\t\t<p>indeterminate? true</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.equal(input.checked, false);\n\t\tassert.equal(input.indeterminate, true);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinput.checked = true;\n\t\tinput.indeterminate = false;\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.indeterminate, false);\n\t\tassert.equal(component.checked, true);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type=\"checkbox\">\n\t\t\t<p>checked? true</p>\n\t\t\t<p>indeterminate? false</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.indeterminate = true;\n\t\tassert.equal(input.indeterminate, true);\n\t\tassert.equal(input.checked, true);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type=\"checkbox\">\n\t\t\t<p>checked? true</p>\n\t\t\t<p>indeterminate? true</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-indeterminate/main.svelte",
    "content": "<script>\n\texport let checked;\n\texport let indeterminate;\n</script>\n\n<input type='checkbox' bind:checked bind:indeterminate>\n<p>checked? {checked}</p>\n<p>indeterminate? {indeterminate}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-with-event-in-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tcats: [\n\t\t\t\t{ name: 'cat 0', checked: false },\n\t\t\t\t{ name: 'cat 1', checked: false }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<input type=\"checkbox\">\n\t\t<input type=\"checkbox\">\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst { cats } = component;\n\t\tconst newCats = cats.slice();\n\t\tnewCats.push({\n\t\t\tname: 'cat ' + cats.length,\n\t\t\tchecked: false\n\t\t});\n\t\tcomponent.cats = newCats;\n\n\t\tlet inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs.length, 3);\n\n\t\tconst event = new window.Event('change');\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\n\t\tinputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs.length, 3);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-with-event-in-each/main.svelte",
    "content": "<script>\n\texport let cats;\n\n\tfunction someCheck() {\n\t\t\n\t}\n</script>\n\n{#each cats as cat (cat.name)}\n\t<input type=\"checkbox\" bind:checked={cat.checked} on:change=\"{someCheck}\">\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-duplicate-value/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Checked: </p>\n\n\t\t<hr>\n\n\t\t<input type='checkbox' value='a'>a<br>\n\t\t<input type='checkbox' value='b'>b<br>\n\t\t<input type='checkbox' value='c'>c<br>\n\t\t<input type='checkbox' value='d'>d<br>\n\n\t\t<hr>\n\n\t\t<input type='checkbox' value='a'>a<br>\n\t\t<input type='checkbox' value='b'>b<br>\n\t\t<input type='checkbox' value='c'>c<br>\n\t\t<input type='checkbox' value='d'>d<br>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t\tassert.equal(inputs[3].checked, false);\n\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, false);\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(p.innerHTML, 'Checked: a');\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t\tassert.equal(inputs[3].checked, false);\n\n\t\tassert.equal(inputs[4].checked, true);\n\t\tassert.equal(inputs[5].checked, false);\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\n\t\tinputs[3].checked = true;\n\t\tinputs[3].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(p.innerHTML, 'Checked: a,d');\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t\tassert.equal(inputs[3].checked, true);\n\n\t\tassert.equal(inputs[4].checked, true);\n\t\tassert.equal(inputs[5].checked, false);\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, true);\n\n\t\tinputs[4].checked = false;\n\t\tinputs[4].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(p.innerHTML, 'Checked: d');\n\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t\tassert.equal(inputs[3].checked, true);\n\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, false);\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-duplicate-value/main.svelte",
    "content": "<script>\n\tlet foo = [];\n</script>\n\n<p>Checked: {foo}</p>\n\n<hr>\n\n<input type='checkbox' bind:group={foo} value='a'>a<br>\n<input type='checkbox' bind:group={foo} value='b'>b<br>\n<input type='checkbox' bind:group={foo} value='c'>c<br>\n<input type='checkbox' bind:group={foo} value='d'>d<br>\n\n<hr>\n\n<input type='checkbox' bind:group={foo} value='a'>a<br>\n<input type='checkbox' bind:group={foo} value='b'>b<br>\n<input type='checkbox' bind:group={foo} value='c'>c<br>\n<input type='checkbox' bind:group={foo} value='d'>d<br>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-1/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {Array<{ name: string }>} */\nlet values = [];\n\n/** @type {Array<Array<{ name: string }>>} */\nlet selected_array = [];\n\nexport default test({\n\tbefore_test() {\n\t\tvalues = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }];\n\t\tselected_array = [[values[1]], [], [values[2]]];\n\t},\n\n\tget props() {\n\t\treturn { values, selected_array };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Beta</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p></p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Gamma</p>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\" checked> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Beta</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p></p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\" checked> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Gamma</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, false);\n\t\tassert.equal(inputs[3].checked, false);\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, false);\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, true);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha, Beta</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Gamma</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t\tinputs[3].checked = true;\n\t\tinputs[3].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha, Beta</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Gamma</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tinputs[8].checked = false;\n\t\tinputs[8].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha, Beta</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected_array = [[component.values[1], component.values[2]], [component.values[2]]];\n\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, true);\n\t\tassert.equal(inputs[3].checked, false);\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Beta, Gamma</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Gamma</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-1/main.svelte",
    "content": "<script>\n\texport let selected_array;\n\texport let values;\n</script>\n\n{#each selected_array as selected}\n\t<div>\n\t\t{#each values as value}\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"{value}\" bind:group={selected} /> {value.name}\n\t\t\t</label>\n\t\t{/each}\n\t\t<p>{selected.map(v => v.name).join(', ')}</p>\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-10/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/7633\nexport default test({\n\ttest({ assert, target, component }) {\n\t\tlet inputs = target.querySelectorAll('input');\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tcomponent.moveDown(0);\n\t\tflushSync();\n\t\tcomponent.moveDown(1);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\tb <label><input name=\"current\" type=\"radio\" value=\"b\"> current</label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\tc <label><input name=\"current\" type=\"radio\" value=\"c\"> current</label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\ta <label><input name=\"current\" type=\"radio\" value=\"a\"> current</label>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\t// after shifting order, should still keep the correct radio checked\n\t\tinputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tcomponent.current = 'b';\n\n\t\tinputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tcomponent.moveDown(1);\n\n\t\t// after shifting order, should still keep the correct radio checked\n\t\tinputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-10/main.svelte",
    "content": "<script>\n\texport let list = [\n\t\t{ name: \"a\", text: \"This is a test.\" },\n\t\t{ name: \"b\", text: \"This is another test.\" },\n\t\t{ name: \"c\", text: \"This is also a test.\" },\n\t];\n\texport let current = \"a\";\n\texport function moveUp(i) {\n\t\tlist = [\n\t\t\t...list.slice(0, Math.max(i - 1, 0)),\n\t\t\tlist[i],\n\t\t\tlist[i - 1],\n\t\t\t...list.slice(i + 1),\n\t\t];\n\t}\n\texport function moveDown(i) {\n\t\tmoveUp(i + 1);\n\t}\n</script>\n\n{#each list as item (item.name)}\n\t<div class=\"item\">\n\t\t{item.name}\n\t\t{#if true}\n\t\t\t<label\n\t\t\t\t><input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"current\"\n\t\t\t\t\tbind:group={current}\n\t\t\t\t\tvalue={item.name}\n\t\t\t\t/> current</label\n\t\t\t>\n\t\t{/if}\n\t</div>\n{/each}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-11/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/6112\nexport default test({\n\ttest({ assert, target, component, window }) {\n\t\tlet inputs = target.querySelectorAll('input');\n\n\t\t/** @param {Set<number>} set */\n\t\tconst check = (set) => {\n\t\t\tfor (let i = 0; i < inputs.length; i++) {\n\t\t\t\tassert.equal(inputs[i].checked, set.has(i));\n\t\t\t}\n\t\t};\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>1</div>\n\t\t\t\t<div>2\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"a\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"c\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div>3\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"a\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"c\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcheck(new Set([0, 2, 5, 6]));\n\n\t\tconst event = new window.Event('change');\n\n\t\t// dom to value\n\t\tinputs[3].checked = true;\n\t\tinputs[3].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tcheck(new Set([0, 3, 5, 6]));\n\t\tassert.equal(component.pipelineOperations[1].operation.args[1].value, 'd');\n\n\t\t// remove item\n\t\tcomponent.pipelineOperations = component.pipelineOperations.slice(1);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>2\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"a\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"c\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div>3\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"a\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"c\">\n\t\t\t\t\t\t<input type=\"radio\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tinputs = target.querySelectorAll('input');\n\t\tcheck(new Set([0, 3, 5, 6]));\n\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tcheck(new Set([0, 2, 5, 6]));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-11/main.svelte",
    "content": "<script>\n\texport let pipelineOperations = [\n\t\t{\n\t\t\toperation: {\n\t\t\t\tname: \"foo\",\n\t\t\t\targs: [],\n\t\t\t},\n\t\t\tid: 1,\n\t\t},\n\t\t{\n\t\t\toperation: {\n\t\t\t\tname: \"bar\",\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"bar_1\",\n\t\t\t\t\t\tvalue: \"a\",\n\t\t\t\t\t\toptions: [{ value: \"a\" }, { value: \"b\" }],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"bar_2\",\n\t\t\t\t\t\tvalue: \"c\",\n\t\t\t\t\t\toptions: [{ value: \"c\" }, { value: \"d\" }],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tid: 2,\n\t\t},\n\t\t{\n\t\t\toperation: {\n\t\t\t\tname: \"baz\",\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"baz_1\",\n\t\t\t\t\t\tvalue: \"b\",\n\t\t\t\t\t\toptions: [{ value: \"a\" }, { value: \"b\" }],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"baz_2\",\n\t\t\t\t\t\tvalue: \"c\",\n\t\t\t\t\t\toptions: [{ value: \"c\" }, { value: \"d\" }],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tid: 3,\n\t\t},\n\t];\n</script>\n\n{#each pipelineOperations as { operation, id } (id)}\n\t<div>\n\t\t{id}\n\t\t{#each operation.args as arg}\n\t\t\t<div class=\"arg\">\n\t\t\t\t{#each arg.options as { value }}\n\t\t\t\t\t<input type=\"radio\" bind:group={arg.value} {value} />\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{/each}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-12/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/6112\nexport default test({\n\ttest({ assert, target, component, window }) {\n\t\tlet inputs = target.querySelectorAll('input');\n\n\t\t/** @param {Set<number>} set */\n\t\tconst check = (set) => {\n\t\t\tfor (let i = 0; i < inputs.length; i++) {\n\t\t\t\tassert.equal(inputs[i].checked, set.has(i));\n\t\t\t}\n\t\t};\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>1</div>\n\t\t\t\t<div>2\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"a\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"c\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div>3\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"a\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"c\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tcheck(new Set([0, 2]));\n\n\t\tconst event = new window.Event('change');\n\n\t\t// dom to value\n\t\tinputs[3].checked = true;\n\t\tinputs[3].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tcheck(new Set([0, 2, 3]));\n\t\tassert.deepEqual(component.pipelineOperations[1].operation.args[1].value, ['c', 'd']);\n\n\t\t// remove item\n\t\tcomponent.pipelineOperations = component.pipelineOperations.slice(1);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>2\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"a\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"c\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div>3\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"a\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"b\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"arg\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"c\">\n\t\t\t\t\t\t<input type=\"checkbox\" value=\"d\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tinputs = target.querySelectorAll('input');\n\t\tcheck(new Set([0, 2, 3]));\n\n\t\tinputs[5].checked = true;\n\t\tinputs[5].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tcheck(new Set([0, 2, 3, 5]));\n\t\tassert.deepEqual(component.pipelineOperations[1].operation.args[0].value, ['b']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-12/main.svelte",
    "content": "<script>\n\texport let pipelineOperations = [\n\t\t{\n\t\t\toperation: {\n\t\t\t\tname: \"foo\",\n\t\t\t\targs: [],\n\t\t\t},\n\t\t\tid: 1,\n\t\t},\n\t\t{\n\t\t\toperation: {\n\t\t\t\tname: \"bar\",\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"bar_1\",\n\t\t\t\t\t\tvalue: [\"a\"],\n\t\t\t\t\t\toptions: [{ value: \"a\" }, { value: \"b\" }],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"bar_2\",\n\t\t\t\t\t\tvalue: [\"c\"],\n\t\t\t\t\t\toptions: [{ value: \"c\" }, { value: \"d\" }],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tid: 2,\n\t\t},\n\t\t{\n\t\t\toperation: {\n\t\t\t\tname: \"baz\",\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"baz_1\",\n\t\t\t\t\t\tvalue: [],\n\t\t\t\t\t\toptions: [{ value: \"a\" }, { value: \"b\" }],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"baz_2\",\n\t\t\t\t\t\tvalue: [],\n\t\t\t\t\t\toptions: [{ value: \"c\" }, { value: \"d\" }],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tid: 3,\n\t\t},\n\t];\n</script>\n\n{#each pipelineOperations as { operation, id } (id)}\n\t<div>\n\t\t{id}\n\t\t{#each operation.args as arg}\n\t\t\t<div class=\"arg\">\n\t\t\t\t{#each arg.options as { value }}\n\t\t\t\t\t<input type=\"checkbox\" bind:group={arg.value} {value} />\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{/each}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-13/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst [input1, input2] = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=text]')\n\t\t);\n\t\tconst radio = /** @type {HTMLInputElement} */ (target.querySelector('input[type=radio]'));\n\n\t\tassert.equal(radio.checked, false);\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput1.value = 'world';\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(radio.checked, true);\n\n\t\tinput2.value = 'foo';\n\t\tinput2.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(radio.checked, false);\n\n\t\tinput1.value = 'foo';\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(radio.checked, true);\n\n\t\tinput1.value = 'bar';\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(radio.checked, false);\n\n\t\tinput2.value = 'bar';\n\t\tinput2.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(radio.checked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-13/main.svelte",
    "content": "<script>\n\tlet name = 'world';\n\tlet current = '';\n</script>\n\n<input type=\"radio\" name=\"current\" bind:group={current} value={name}>\n\n<input type=\"text\" bind:value={current} />\n\n<input type=\"text\" bind:value={name} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-14/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst [input1, input2, input3, input4] = target.querySelectorAll('input');\n\t\tconst [p] = target.querySelectorAll('p');\n\t\tconst event = new window.Event('change');\n\n\t\tinput1.checked = true;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(p.innerHTML, '[\"1a\"]');\n\n\t\tinput2.checked = true;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(p.innerHTML, '[\"1a\",\"1b\"]');\n\n\t\tinput3.checked = true;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(p.innerHTML, '[\"1a\",\"1b\",\"2a\"]');\n\n\t\tinput4.checked = true;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(p.innerHTML, '[\"1a\",\"1b\",\"2a\",\"2b\"]');\n\n\t\tinput1.checked = false;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(p.innerHTML, '[\"1b\",\"2a\",\"2b\"]');\n\n\t\tinput3.checked = false;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(p.innerHTML, '[\"1b\",\"2b\"]');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-14/main.svelte",
    "content": "<script>\n\tlet group = [];\n\t\n\tconst options = [\n\t\t[\"1\", [\"1a\", \"1b\"]],\n\t\t[\"2\", [\"2a\", \"2b\"]],\n\t];\n</script>\n\n{#each options as [prefix, arr]}\n\t{prefix}\n\t<div>\n\t\t{#each arr as item}\n\t\t\t<label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tbind:group\n\t\t\t\t\tvalue={item}\n\t\t\t\t/>\n\t\t\t\t{item}\n\t\t\t</label>\n\t\t{/each}\n\t</div>\n{/each}\n\n<p>{JSON.stringify(group)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-15/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=\"checkbox\"]')\n\t\t);\n\n\t\tassert.isFalse(checkboxes[0].checked);\n\t\tassert.isTrue(checkboxes[1].checked);\n\t\tassert.isFalse(checkboxes[2].checked);\n\n\t\tcheckboxes[1].click();\n\t\tflushSync();\n\n\t\tconst noChecked = target.querySelector('#output')?.innerHTML;\n\t\tassert.equal(noChecked, '');\n\n\t\tcheckboxes[1].click();\n\t\tflushSync();\n\n\t\tconst oneChecked = target.querySelector('#output')?.innerHTML;\n\t\tassert.equal(oneChecked, 'Mint choc chip');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-15/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tlet menu = ['Cookies and cream', 'Mint choc chip', 'Raspberry ripple'];\n\tlet order = writable({ iceCream: [{flavours: ['Mint choc chip']}], scoops: 1 });\n\tlet index = 0\n</script>\n\n<form method=\"POST\">\n\t<input type=\"radio\" bind:group={$order.scoops} name=\"scoops\" value={1} /> One scoop\n\t<input type=\"radio\" bind:group={$order.scoops} name=\"scoops\" value={2} /> Two scoops\n\t<input type=\"radio\" bind:group={$order.scoops} name=\"scoops\" value={3} /> Three scoops\n\n\t{#each menu as flavour}\n\t\t<input type=\"checkbox\" bind:group={$order.iceCream[index].flavours} name=\"flavours\" value={flavour} /> {flavour}\n\t{/each}\n</form>\n\n<div id=\"output\">{$order.iceCream[index].flavours.join('+')}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-16/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=\"checkbox\"]')\n\t\t);\n\n\t\tassert.isFalse(checkboxes[0].checked);\n\t\tassert.isTrue(checkboxes[1].checked);\n\t\tassert.isFalse(checkboxes[2].checked);\n\n\t\tcheckboxes[1].click();\n\t\tflushSync();\n\n\t\tconst noChecked = target.querySelector('#output')?.innerHTML;\n\t\tassert.equal(noChecked, '');\n\n\t\tcheckboxes[1].click();\n\t\tflushSync();\n\n\t\tconst oneChecked = target.querySelector('#output')?.innerHTML;\n\t\tassert.equal(oneChecked, 'Mint choc chip');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-16/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tlet menu = ['Cookies and cream', 'Mint choc chip', 'Raspberry ripple'];\n\tlet order = writable({flavours: ['Mint choc chip'], scoops: 1 });\n</script>\n\n<form method=\"POST\">\n\t<input type=\"radio\" bind:group={$order.scoops} name=\"scoops\" value={1} /> One scoop\n\t<input type=\"radio\" bind:group={$order.scoops} name=\"scoops\" value={2} /> Two scoops\n\t<input type=\"radio\" bind:group={$order.scoops} name=\"scoops\" value={3} /> Three scoops\n\n\t{#each menu as flavour}\n\t\t<input type=\"checkbox\" bind:group={$order.flavours} name=\"flavours\" value={flavour} /> {flavour}\n\t{/each}\n</form>\n\n<div id=\"output\">{$order.flavours.join('+')}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"1\"> 1\n\t\t</label>\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"2\"> 2\n\t\t</label>\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"3\"> 3\n\t\t</label>\n\n\t\t<p>1, 2, 3</p>`,\n\n\tssrHtml: `\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"1\" checked> 1\n\t\t</label>\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"2\" checked> 2\n\t\t</label>\n\t\t<label>\n\t\t\t<input type=\"checkbox\" value=\"3\" checked> 3\n\t\t</label>\n\n\t\t<p>1, 2, 3</p>`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = false;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"1\"> 1\n\t\t\t</label>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"2\"> 2\n\t\t\t</label>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"3\"> 3\n\t\t\t</label>\n\n\t\t\t<p>2, 3</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = [[1, 3]];\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"1\"> 1\n\t\t\t</label>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"2\"> 2\n\t\t\t</label>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"3\"> 3\n\t\t\t</label>\n\n\t\t\t<p>1, 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-2/main.svelte",
    "content": "<script>\n\tlet options = [1,2,3]\n\texport let selected = [[1,2,3]];\n</script>\n\n{#each options as value}\n\t<label>\n\t\t<input \n\t\t\ttype='checkbox'\n\t\t\tbind:group={selected[0]} \n\t\t\tvalue={value}\n\t\t/>\n\t\t{value}\n\t</label>\n{/each}\n\n<p>{selected[0].join(', ')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {Array<{ name: string }>} */\nlet values = [];\n\n/** @type {Array<Array<{ name: string }>>} */\nlet selected_array = [];\n\nexport default test({\n\tbefore_test() {\n\t\tvalues = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }];\n\t\tselected_array = [[values[1]], [], [values[2]]];\n\t},\n\n\tget props() {\n\t\treturn { values, selected_array };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Beta</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p></p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Gamma</p>\n\t\t</div>\n\t`,\n\tssrHtml: `\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\" checked> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Beta</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p></p>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\" checked> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Gamma</p>\n\t\t</div>\n\t`,\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, false);\n\t\tassert.equal(inputs[3].checked, false);\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, false);\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, true);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha, Beta</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Gamma</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t\tinputs[3].checked = true;\n\t\tinputs[3].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha, Beta</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Gamma</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tinputs[8].checked = false;\n\t\tinputs[8].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha, Beta</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Alpha</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected_array = [[component.values[1], component.values[2]], [component.values[2]]];\n\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, true);\n\t\tassert.equal(inputs[3].checked, false);\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Beta, Gamma</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Alpha\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Beta\n\t\t\t\t</label>\n\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" value=\"[object Object]\"> Gamma\n\t\t\t\t</label>\n\n\t\t\t\t<p>Gamma</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-3/main.svelte",
    "content": "<script>\n\texport let selected_array;\n\texport let values;\n</script>\n\n{#each selected_array as _, index}\n\t<div>\n\t\t{#each values as value}\n\t\t\t<label>\n\t\t\t\t<input type=\"checkbox\" value=\"{value}\" bind:group={selected_array[index]} /> {value.name}\n\t\t\t</label>\n\t\t{/each}\n\t\t<p>{selected_array[index].map(v => v.name).join(', ')}</p>\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>2</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p></p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>3</p>\n\t`,\n\tssrHtml: `\n\t\t<label><input type=\"checkbox\" value=\"1\" checked> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\" checked> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>2</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p></p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\" checked> 3</label>\n\t\t<p>3</p>\n\t`,\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tassert.equal(inputs[3].checked, false);\n\t\tassert.equal(inputs[4].checked, true);\n\t\tassert.equal(inputs[5].checked, false);\n\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, false);\n\n\t\tassert.equal(inputs[9].checked, false);\n\t\tassert.equal(inputs[10].checked, false);\n\t\tassert.equal(inputs[11].checked, true);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>2</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p></p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>3</p>\n\t\t`\n\t\t);\n\n\t\tinputs[9].checked = true;\n\t\tinputs[9].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>2</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p></p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 3</p>\n\t\t`\n\t\t);\n\n\t\tinputs[4].checked = false;\n\t\tinputs[4].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tinputs[5].checked = true;\n\t\tinputs[5].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tinputs[6].checked = true;\n\t\tinputs[6].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tinputs[7].checked = true;\n\t\tinputs[7].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tinputs[11].checked = false;\n\t\tinputs[11].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected_array_1 = [[3], [1]];\n\t\tcomponent.selected_array_2 = [[], [2]];\n\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tassert.equal(inputs[3].checked, true);\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, false);\n\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, false);\n\n\t\tassert.equal(inputs[9].checked, false);\n\t\tassert.equal(inputs[10].checked, true);\n\t\tassert.equal(inputs[11].checked, false);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p></p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-4/main.svelte",
    "content": "<script>\n\tconst options = [1, 2, 3];\n\texport let selected_array_1 = [[1], [2]];\n\texport let selected_array_2 = [[], [3]];\n</script>\n\n{#each selected_array_1 as selected}\n\t{#each options as value}\n\t\t<label>\n\t\t\t<input \n\t\t\t\ttype='checkbox'\n\t\t\t\tbind:group={selected} \n\t\t\t\tvalue={value}\n\t\t\t/>\n\t\t\t{value}\n\t\t</label>\n\t{/each}\n\t<p>{selected.join(', ')}</p>\n{/each}\n\n{#each selected_array_2 as selected}\n\t{#each options as value}\n\t\t<label>\n\t\t\t<input \n\t\t\t\ttype='checkbox'\n\t\t\t\tbind:group={selected} \n\t\t\t\tvalue={value}\n\t\t\t/>\n\t\t\t{value}\n\t\t</label>\n\t{/each}\n\t<p>{selected.join(', ')}</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1, 2, 3</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>2</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1</p>\n\t`,\n\tssrHtml: `\n\t\t<label><input type=\"checkbox\" value=\"1\" checked> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1</p>\n\t\t<label><input type=\"checkbox\" value=\"1\" checked> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\" checked> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\" checked> 3</label>\n\t\t<p>1, 2, 3</p>\n\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\" checked> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>2</p>\n\t\t<label><input type=\"checkbox\" value=\"1\" checked> 1</label>\n\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t<p>1</p>\n\t`,\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tassert.equal(inputs[3].checked, true);\n\t\tassert.equal(inputs[4].checked, true);\n\t\tassert.equal(inputs[5].checked, true);\n\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, true);\n\t\tassert.equal(inputs[8].checked, false);\n\n\t\tassert.equal(inputs[9].checked, true);\n\t\tassert.equal(inputs[10].checked, false);\n\t\tassert.equal(inputs[11].checked, false);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>2</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\n\t\tinputs[8].checked = true;\n\t\tinputs[8].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>2, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected_index = [1, 1];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2, 3</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tassert.equal(inputs[3].checked, true);\n\t\tassert.equal(inputs[4].checked, true);\n\t\tassert.equal(inputs[5].checked, true);\n\n\t\tassert.equal(inputs[6].checked, true);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, false);\n\n\t\tassert.equal(inputs[9].checked, true);\n\t\tassert.equal(inputs[10].checked, false);\n\t\tassert.equal(inputs[11].checked, false);\n\n\t\tinputs[5].checked = false;\n\t\tinputs[5].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1, 2</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t\t<label><input type=\"checkbox\" value=\"1\"> 1</label>\n\t\t\t<label><input type=\"checkbox\" value=\"2\"> 2</label>\n\t\t\t<label><input type=\"checkbox\" value=\"3\"> 3</label>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tassert.equal(inputs[3].checked, true);\n\t\tassert.equal(inputs[4].checked, true);\n\t\tassert.equal(inputs[5].checked, false);\n\n\t\tassert.equal(inputs[6].checked, true);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, false);\n\n\t\tassert.equal(inputs[9].checked, true);\n\t\tassert.equal(inputs[10].checked, false);\n\t\tassert.equal(inputs[11].checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-5/main.svelte",
    "content": "<script>\n\tconst options = [1, 2, 3];\n\texport let selected_array = [\n\t\t[[1], [1, 2, 3]], \n\t\t[[2], [1]],\n\t];\n\texport let selected_index = [0, 1];\n</script>\n\n{#each selected_array as selected}\n\t{#each selected_index as index}\n\t\t{#each options as value}\n\t\t\t<label>\n\t\t\t\t<input \n\t\t\t\t\ttype='checkbox'\n\t\t\t\t\tbind:group={selected[index]}\n\t\t\t\t\tvalue={value}\n\t\t\t\t/>\n\t\t\t\t{value}\n\t\t\t</label>\n\t\t{/each}\n\t\t<p>{selected[index].join(', ')}</p>\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t<p></p>\n\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t<p></p>\n\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t<p></p>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tassert.equal(inputs[3].checked, false);\n\t\tassert.equal(inputs[4].checked, false);\n\t\tassert.equal(inputs[5].checked, false);\n\n\t\tassert.equal(inputs[6].checked, false);\n\t\tassert.equal(inputs[7].checked, false);\n\t\tassert.equal(inputs[8].checked, false);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p>z</p>\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p></p>\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p></p>\n\t\t`\n\t\t);\n\n\t\tinputs[4].checked = true;\n\t\tinputs[4].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p>z</p>\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p>y</p>\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p></p>\n\t\t`\n\t\t);\n\n\t\tinputs[5].checked = true;\n\t\tinputs[5].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p>z</p>\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p>y, z</p>\n\t\t\t<label><input type=\"checkbox\" value=\"x\"> x</label>\n\t\t\t<label><input type=\"checkbox\" value=\"y\"> y</label>\n\t\t\t<label><input type=\"checkbox\" value=\"z\"> z</label>\n\t\t\t<p></p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-6/main.svelte",
    "content": "<script>\n\tconst values = ['x', 'y', 'z'];\n\tconst list = {\n\t\ta: [],\n\t\tb: [],\n\t\tc: [],\n\t};\n</script>\n\n{#each Object.keys(list) as key}\n\t{#each values as value}\n\t\t<label>\n\t\t\t<input \n\t\t\t\ttype='checkbox'\n\t\t\t\tbind:group={list[key]}\n\t\t\t\tvalue={value}\n\t\t\t/>\n\t\t\t{value}\n\t\t</label>\n\t{/each}\n\t<p>{list[key].join(', ')}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-7/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input type=\"checkbox\" value=\"a\" data-index=\"x-1\">\n\t\t<input type=\"checkbox\" value=\"b\" data-index=\"x-1\">\n\t\t<input type=\"checkbox\" value=\"c\" data-index=\"x-1\">\n\t\t<input type=\"checkbox\" value=\"a\" data-index=\"x-2\">\n\t\t<input type=\"checkbox\" value=\"b\" data-index=\"x-2\">\n\t\t<input type=\"checkbox\" value=\"c\" data-index=\"x-2\">\n\t\t<input type=\"checkbox\" value=\"a\" data-index=\"y-1\">\n\t\t<input type=\"checkbox\" value=\"b\" data-index=\"y-1\">\n\t\t<input type=\"checkbox\" value=\"c\" data-index=\"y-1\">\n\t\t<input type=\"checkbox\" value=\"a\" data-index=\"y-2\">\n\t\t<input type=\"checkbox\" value=\"b\" data-index=\"y-2\">\n\t\t<input type=\"checkbox\" value=\"c\" data-index=\"y-2\">\n\t\t<input type=\"checkbox\" value=\"a\" data-index=\"z-1\">\n\t\t<input type=\"checkbox\" value=\"b\" data-index=\"z-1\">\n\t\t<input type=\"checkbox\" value=\"c\" data-index=\"z-1\">\n\t\t<input type=\"checkbox\" value=\"a\" data-index=\"z-2\">\n\t\t<input type=\"checkbox\" value=\"b\" data-index=\"z-2\">\n\t\t<input type=\"checkbox\" value=\"c\" data-index=\"z-2\">\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tconst checked = new Set();\n\n\t\t/** @param {number} i */\n\t\tconst checkInbox = (i) => {\n\t\t\tchecked.add(i);\n\t\t\tinputs[i].checked = true;\n\t\t\tinputs[i].dispatchEvent(event);\n\t\t};\n\n\t\tfor (let i = 0; i < 18; i++) {\n\t\t\tassert.equal(inputs[i].checked, checked.has(i));\n\t\t}\n\n\t\tconst event = new window.Event('change');\n\n\t\tcheckInbox(2);\n\t\tflushSync();\n\t\tfor (let i = 0; i < 18; i++) {\n\t\t\tassert.equal(inputs[i].checked, checked.has(i));\n\t\t}\n\n\t\tcheckInbox(12);\n\t\tflushSync();\n\t\tfor (let i = 0; i < 18; i++) {\n\t\t\tassert.equal(inputs[i].checked, checked.has(i));\n\t\t}\n\n\t\tcheckInbox(8);\n\t\tflushSync();\n\t\tfor (let i = 0; i < 18; i++) {\n\t\t\tassert.equal(inputs[i].checked, checked.has(i));\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-7/main.svelte",
    "content": "<script>\n\tconst list = [\n\t\t{ id: 'x', data: [{ id: 1, data: [] }, { id: 2, data: [] }] },\n\t\t{ id: 'y', data: [{ id: 1, data: [] }, { id: 2, data: [] }] },\n\t\t{ id: 'z', data: [{ id: 1, data: [] }, { id: 2, data: [] }] }\n\t];\n</script>\n\n{#each list as { id, data }}\n\t{#each data as item}\n\t\t<input type=\"checkbox\" bind:group={item.data} value=\"a\" data-index=\"{id}-{item.id}\" />\n\t\t<input type=\"checkbox\" bind:group={item.data} value=\"b\" data-index=\"{id}-{item.id}\" />\n\t\t<input type=\"checkbox\" bind:group={item.data} value=\"c\" data-index=\"{id}-{item.id}\" />\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-8/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/7884\nexport default test({\n\ttest({ assert, target, component, window }) {\n\t\tlet inputs = target.querySelectorAll('input');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>{\"foo\":[],\"bar\":[]}</p>\n\t\t\t<h2>foo</h2>\n\t\t\t<ul>\n\t\t\t\t<li><label><input name=\"foo\" type=\"checkbox\" value=\"1\"> 1</label></li>\n\t\t\t\t<li><label><input name=\"foo\" type=\"checkbox\" value=\"2\"> 2</label></li>\n\t\t\t\t<li><label><input name=\"foo\" type=\"checkbox\" value=\"3\"> 3</label></li>\n\t\t\t</ul>\n\t\t\t<h2>bar</h2>\n\t\t\t<ul>\n\t\t\t\t<li><label><input name=\"bar\" type=\"checkbox\" value=\"1\"> 1</label></li>\n\t\t\t\t<li><label><input name=\"bar\" type=\"checkbox\" value=\"2\"> 2</label></li>\n\t\t\t\t<li><label><input name=\"bar\" type=\"checkbox\" value=\"3\"> 3</label></li>\n\t\t\t</ul>\n\t\t`\n\t\t);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\t\tinputs[2].checked = true;\n\t\tinputs[2].dispatchEvent(event);\n\t\tflushSync();\n\t\tinputs[3].checked = true;\n\t\tinputs[3].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>{\"foo\":[1,3],\"bar\":[1]}</p>\n\t\t\t<h2>foo</h2>\n\t\t\t<ul>\n\t\t\t\t<li><label><input name=\"foo\" type=\"checkbox\" value=\"1\"> 1</label></li>\n\t\t\t\t<li><label><input name=\"foo\" type=\"checkbox\" value=\"2\"> 2</label></li>\n\t\t\t\t<li><label><input name=\"foo\" type=\"checkbox\" value=\"3\"> 3</label></li>\n\t\t\t</ul>\n\t\t\t<h2>bar</h2>\n\t\t\t<ul>\n\t\t\t\t<li><label><input name=\"bar\" type=\"checkbox\" value=\"1\"> 1</label></li>\n\t\t\t\t<li><label><input name=\"bar\" type=\"checkbox\" value=\"2\"> 2</label></li>\n\t\t\t\t<li><label><input name=\"bar\" type=\"checkbox\" value=\"3\"> 3</label></li>\n\t\t\t</ul>\n\t\t`\n\t\t);\n\n\t\tcomponent.update();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>{\"foo\":[1,3],\"bar\":[1],\"qux\":[]}</p>\n\t\t\t<h2>qux</h2>\n\t\t\t<ul>\n\t\t\t\t<li><label><input name=\"qux\" type=\"checkbox\" value=\"4\"> 4</label></li>\n\t\t\t\t<li><label><input name=\"qux\" type=\"checkbox\" value=\"5\"> 5</label></li>\n\t\t\t\t<li><label><input name=\"qux\" type=\"checkbox\" value=\"6\"> 6</label></li>\n\t\t\t</ul>\n\t\t`\n\t\t);\n\n\t\tinputs = target.querySelectorAll('input');\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>{\"foo\":[1,3],\"bar\":[1],\"qux\":[4]}</p>\n\t\t\t<h2>qux</h2>\n\t\t\t<ul>\n\t\t\t\t<li><label><input name=\"qux\" type=\"checkbox\" value=\"4\"> 4</label></li>\n\t\t\t\t<li><label><input name=\"qux\" type=\"checkbox\" value=\"5\"> 5</label></li>\n\t\t\t\t<li><label><input name=\"qux\" type=\"checkbox\" value=\"6\"> 6</label></li>\n\t\t\t</ul>\n\t\t`\n\t\t);\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-8/main.svelte",
    "content": "<script>\n\tlet keys = [\"foo\", \"bar\"];\n\tlet values = [1, 2, 3];\n\n\tlet object = {};\n\n\t$: keys.forEach((key) => {\n\t\t// Make sure Svelte has an array to bind to\n\t\tif (!object[key]) {\n\t\t\tobject[key] = [];\n\t\t}\n\t});\n\n\texport function update() {\n\t\tkeys = [\"qux\"];\n\t\tvalues = [4, 5, 6];\n\t}\n</script>\n\n<p>\n\t{JSON.stringify(object)}\n</p>\n\n{#each keys as key (key)}\n\t<h2>{key}</h2>\n\t<ul>\n\t\t{#each values as value (value)}\n\t\t\t<li>\n\t\t\t\t<label>\n\t\t\t\t\t<input type=\"checkbox\" name={key} {value} bind:group={object[key]} />\n\t\t\t\t\t{value}\n\t\t\t\t</label>\n\t\t\t</li>\n\t\t{/each}\n\t</ul>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-9/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/7633\nexport default test({\n\ttest({ assert, target, component }) {\n\t\tlet inputs = target.querySelectorAll('input');\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tcomponent.moveDown(0);\n\t\tflushSync();\n\t\tcomponent.moveDown(1);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\tb <label><input name=\"current\" type=\"radio\" value=\"b\"> current</label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\tc <label><input name=\"current\" type=\"radio\" value=\"c\"> current</label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\ta <label><input name=\"current\" type=\"radio\" value=\"a\"> current</label>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\t// after shifting order, should still keep the correct radio checked\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tcomponent.current = 'b';\n\t\tflushSync();\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tcomponent.moveDown(1);\n\t\tflushSync();\n\n\t\t// after shifting order, should still keep the correct radio checked\n\t\tinputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-each-9/main.svelte",
    "content": "<script>\n\texport let list = [\n\t\t{ name: \"a\", text: \"This is a test.\" },\n\t\t{ name: \"b\", text: \"This is another test.\" },\n\t\t{ name: \"c\", text: \"This is also a test.\" },\n\t];\n\texport let current = \"a\";\n\texport function moveUp(i) {\n\t\tlist = [\n\t\t\t...list.slice(0, Math.max(i - 1, 0)),\n\t\t\tlist[i],\n\t\t\tlist[i - 1],\n\t\t\t...list.slice(i + 1),\n\t\t];\n\t}\n\texport function moveDown(i) {\n\t\tmoveUp(i + 1);\n\t}\n</script>\n\n{#each list as item}\n\t<div class=\"item\">\n\t\t{item.name}\n\t\t{#if true}\n\t\t\t<label\n\t\t\t\t><input\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"current\"\n\t\t\t\t\tbind:group={current}\n\t\t\t\t\tvalue={item.name}\n\t\t\t\t/> current</label\n\t\t\t>\n\t\t{/if}\n\t</div>\n{/each}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-if-gh-8372-1/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, component, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tconst changeEvent = new window.Event('change');\n\n\t\tconst [input1, input2] = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=\"checkbox\"]')\n\t\t);\n\n\t\t/**\n\t\t * @param {boolean} v1\n\t\t * @param {boolean} v2\n\t\t */\n\t\tfunction validate_inputs(v1, v2) {\n\t\t\tassert.equal(input1.checked, v1);\n\t\t\tassert.equal(input2.checked, v2);\n\t\t}\n\n\t\tassert.deepEqual(component.test, []);\n\t\tvalidate_inputs(false, false);\n\n\t\tcomponent.test = ['a', 'b'];\n\t\tvalidate_inputs(true, true);\n\n\t\tinput1.checked = false;\n\t\tinput1.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, ['b']);\n\n\t\tinput2.checked = false;\n\t\tinput2.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, []);\n\n\t\tinput1.checked = true;\n\t\tinput2.checked = true;\n\t\tinput1.dispatchEvent(changeEvent);\n\t\tinput2.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, ['a', 'b']);\n\n\t\tbutton.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, ['a', 'b']); // should it be ['a'] only? valid arguments for both outcomes\n\n\t\tinput1.checked = false;\n\t\tinput1.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-if-gh-8372-1/main.svelte",
    "content": "<script>\n\texport let test = [];\n\tlet hidden = false\n</script>\n\n<button on:click={() => hidden = !hidden}>\n\t{hidden ? \"show\" : \"hide\"} b\n</button>\n\n<label>a <input type=\"checkbox\" bind:group={test} value=\"a\" /></label>\n{#if !hidden}\n\t<label>b <input type=\"checkbox\" bind:group={test} value=\"b\" /></label>\n{/if}\n<label>c{hidden ? \"show\" : \"hide\"} b <input value=\"just here, so b is not the last input\" /></label>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-if-gh-8372-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, component, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tconst changeEvent = new window.Event('change');\n\n\t\tconst [input1, input2] = /** @type {NodeListOf<HTMLInputElement>} */ (\n\t\t\ttarget.querySelectorAll('input[type=\"radio\"]')\n\t\t);\n\n\t\t/**\n\t\t * @param {boolean} v1\n\t\t * @param {boolean} v2\n\t\t */\n\t\tfunction validate_inputs(v1, v2) {\n\t\t\tassert.equal(input1.checked, v1);\n\t\t\tassert.equal(input2.checked, v2);\n\t\t}\n\n\t\tcomponent.test = 'a';\n\t\tvalidate_inputs(true, false);\n\n\t\tcomponent.test = 'b';\n\t\tvalidate_inputs(false, true);\n\n\t\tinput1.checked = true;\n\t\tinput1.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, 'a');\n\n\t\tinput2.checked = true;\n\t\tinput2.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, 'b');\n\n\t\tbutton.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, 'b'); // should it be undefined? valid arguments for both outcomes\n\n\t\tinput1.checked = true;\n\t\tinput1.dispatchEvent(changeEvent);\n\t\tflushSync();\n\t\tassert.deepEqual(component.test, 'a');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-if-gh-8372-2/main.svelte",
    "content": "<script>\n\texport let test;\n\tlet hidden = false\n</script>\n\n<button on:click={() => hidden = !hidden}>\n\t{hidden ? \"show\" : \"hide\"} b\n</button>\n\n<label>a <input type=\"radio\" bind:group={test} value=\"a\" /></label>\n{#if !hidden}\n<label>b <input type=\"radio\" bind:group={test} value=\"b\" /></label>\n{/if}\n<label>c <input value=\"just here, so b is not the last input\" /></label>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-undefined/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, component, window }) {\n\t\tconst [input1, input2, input3] = target.querySelectorAll('input');\n\t\tconst event = new window.Event('change');\n\n\t\t/**\n\t\t *\n\t\t * @param {boolean} v1\n\t\t * @param {boolean} v2\n\t\t * @param {boolean} v3\n\t\t */\n\t\tfunction validate_inputs(v1, v2, v3) {\n\t\t\tassert.equal(input1.checked, v1);\n\t\t\tassert.equal(input2.checked, v2);\n\t\t\tassert.equal(input3.checked, v3);\n\t\t}\n\n\t\tassert.deepEqual(component.values.inner, []);\n\t\tvalidate_inputs(false, false, false);\n\n\t\tcomponent.values = { inner: undefined };\n\t\tassert.deepEqual(component.values.inner, undefined);\n\t\tvalidate_inputs(false, false, false);\n\n\t\tinput1.checked = true;\n\t\tawait input1.dispatchEvent(event);\n\t\tassert.deepEqual(component.values.inner, ['first']);\n\t\tvalidate_inputs(true, false, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-group-undefined/main.svelte",
    "content": "<script>\n\texport let values = {\n\t\tinner: []\n\t};\n</script>\n\n<input type='checkbox' value='first' bind:group={values.inner} />\n<input type='checkbox' value='second' bind:group={values.inner} />\n<input type='checkbox' value='third' bind:group={values.inner} />\n\n<div>\n\t{#each ['first', 'second', 'third'] as k}\n\t\t<span>{k}</span>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-member-expression-update/_config.js",
    "content": "import { ok, test } from '../../test';\n\n// binding member expression shouldn't invalidate the property name\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.deepEqual(component.logs.length, 1);\n\t\tassert.equal(input.value, 'abc');\n\n\t\tinput.value = 'hij';\n\t\tawait input.dispatchEvent(new window.Event('input'));\n\n\t\tassert.deepEqual(component.values.a, 'hij');\n\t\tassert.deepEqual(component.logs.length, 1);\n\n\t\tcomponent.paths = ['b'];\n\t\tassert.deepEqual(component.logs.length, 2);\n\t\tassert.equal(input.value, 'def');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-member-expression-update/main.svelte",
    "content": "<script>\n\texport let values = { a: 'abc', b: 'def' };\n\texport let paths = ['a'];\n\texport let logs = [];\n\n\t$: paths && logs.push('paths updated');\n</script>\n\n<input bind:value={values[paths[0]]} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-number/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { count: 42 };\n\t},\n\n\thtml: `\n\t\t<input type=number>\n\t\t<p>number 42</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input type=number value=42>\n\t\t<p>number 42</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, '42');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = '43';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.count, 43);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='number'>\n\t\t\t<p>number 43</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.count = 44;\n\t\tassert.equal(input.value, '44');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='number'>\n\t\t\t<p>number 44</p>\n\t\t`\n\t\t);\n\n\t\t// empty string should be treated as null\n\t\tinput.value = '';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.count, null);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='number'>\n\t\t\t<p>object </p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-number/main.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n<input type='number' bind:value={count}>\n<p>{typeof count} {count}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-number-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {number | undefined} */\n\t\t\tvalue: undefined\n\t\t};\n\t},\n\ttest({ assert, target, window, component }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tconst inputEvent = new window.InputEvent('input');\n\t\tassert.equal(component.value, 5);\n\t\tassert.equal(input.value, '5');\n\n\t\tinput.value = '5.';\n\t\tinput.dispatchEvent(inputEvent);\n\t\tflushSync();\n\n\t\t// input type number has value === \"\" if ends with dot/comma\n\t\tassert.equal(component.value, undefined);\n\t\tassert.equal(input.value, '');\n\n\t\tinput.value = '5.5';\n\t\tinput.dispatchEvent(inputEvent);\n\t\tflushSync();\n\n\t\tassert.equal(component.value, 5.5);\n\t\tassert.equal(input.value, '5.5');\n\n\t\tinput.value = '5.50';\n\t\tinput.dispatchEvent(inputEvent);\n\t\tflushSync();\n\n\t\tassert.equal(component.value, 5.5);\n\t\tassert.equal(input.value, '5.50');\n\n\t\tcomponent.value = 1;\n\t\tassert.equal(component.value, 1);\n\t\tassert.equal(input.value, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-number-2/main.svelte",
    "content": "<script>\n\texport let value = 5;\n</script>\n\n<input type=\"number\" bind:value />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-radio-group/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nconst values = [{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }];\n\nexport default test({\n\tget props() {\n\t\treturn { values, selected: values[1] };\n\t},\n\n\thtml: `\n\t\t<label>\n\t\t\t<input type=\"radio\" value=\"[object Object]\"> Alpha\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"radio\" value=\"[object Object]\"> Beta\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"radio\" value=\"[object Object]\"> Gamma\n\t\t</label>\n\n\t\t<p>Beta</p>`,\n\n\tssrHtml: `\n\t\t<label>\n\t\t\t<input type=\"radio\" value=\"[object Object]\"> Alpha\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"radio\" value=\"[object Object]\" checked> Beta\n\t\t</label>\n\n\t\t<label>\n\t\t\t<input type=\"radio\" value=\"[object Object]\"> Gamma\n\t\t</label>\n\n\t\t<p>Beta</p>`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, true);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tconst event = new window.Event('change');\n\n\t\tinputs[0].checked = true;\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"radio\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"radio\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"radio\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Alpha</p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(inputs[0].checked, true);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, false);\n\n\t\tcomponent.selected = component.values[2];\n\t\tassert.equal(inputs[0].checked, false);\n\t\tassert.equal(inputs[1].checked, false);\n\t\tassert.equal(inputs[2].checked, true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label>\n\t\t\t\t<input type=\"radio\" value=\"[object Object]\"> Alpha\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"radio\" value=\"[object Object]\"> Beta\n\t\t\t</label>\n\n\t\t\t<label>\n\t\t\t\t<input type=\"radio\" value=\"[object Object]\"> Gamma\n\t\t\t</label>\n\n\t\t\t<p>Gamma</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-radio-group/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let values;\n</script>\n\n{#each values as value}\n\t<label>\n\t\t<input type=\"radio\" value=\"{value}\" bind:group={selected} /> {value.name}\n\t</label>\n{/each}\n\n<p>{selected.name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-range/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { count: 42 };\n\t},\n\n\thtml: `\n\t\t<input type=range>\n\t\t<p>number 42</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input type=range value=42>\n\t\t<p>number 42</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, '42');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = '43';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.count, 43);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='range'>\n\t\t\t<p>number 43</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.count = 44;\n\t\tassert.equal(input.value, '44');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='range'>\n\t\t\t<p>number 44</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-range/main.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n<input type='range' bind:value={count}>\n<p>{typeof count} {count}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-range-change-with-max/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button></button>\n\t\t<input type=range min=0 max=10>\n\t\t<p>10 of 10</p>\n\t`,\n\n\tssrHtml: `\n\t\t<button></button>\n\t\t<input type=range min=0 max=10 value=10>\n\t\t<p>10 of 10</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, '10');\n\n\t\t// should not change because max is 10, input range behaviour\n\t\t// seems there is bug in jsdom (HTMLInputElement-impl) which behaviour is different from real browsers\n\t\t// input.value = '20';\n\t\t// assert.equal(input.value, '10');\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tbutton.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.equal(input.value, '20');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button></button>\n\t\t\t<input type=range min=0 max=20>\n\t\t\t<p>20 of 20</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-range-change-with-max/main.svelte",
    "content": "<script>\n  let value = 10;\n  let max = 10;\n\n  function change() {\n    value = 20;\n    max = 20;\n  }\n</script>\n\n<button on:click={change}></button>\n<input type=\"range\" min=\"0\" {max} bind:value />\n<p>{value} of {max}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<p>hello world</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=\"world\">\n\t\t<p>hello world</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, 'world');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'everybody';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello everybody</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.name = 'goodbye';\n\t\tassert.equal(input.value, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello goodbye</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<input bind:value={name}>\n<p>hello {name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { items: ['one', 'two', 'three'] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<input><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input><p>three</p>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<input value=one><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input value=two><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input value=three><p>three</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = [...target.querySelectorAll('input')];\n\t\tconst items = component.items;\n\t\tconst event = new window.Event('input');\n\n\t\tassert.equal(inputs[0].value, 'one');\n\n\t\tinputs[1].value = 'four';\n\t\tinputs[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(items[1], 'four');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input><p>four</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input><p>three</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\titems[2] = 'five';\n\n\t\tcomponent.items = items;\n\t\tassert.equal(inputs[2].value, 'five');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input><p>four</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input><p>five</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual/main.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n{#each items as item}\n\t<div><input bind:value={item}><p>{item}</p></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual-deconflicted/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 'a', items: ['x'] };\n\t},\n\n\thtml: `\n\t\t<div><input><p>a</p></div>\n\t\t<div><input><p>x</p></div>\n\t`,\n\n\tssrHtml: `\n\t\t<div><input value=a><p>a</p></div>\n\t\t<div><input value=x><p>x</p></div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = [...target.querySelectorAll('input')];\n\t\tconst event = new window.Event('input');\n\n\t\tassert.equal(inputs[0].value, 'a');\n\n\t\tinputs[0].value = 'b';\n\t\tinputs[1].value = 'y';\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\t\tinputs[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.foo, 'b');\n\t\tassert.equal(component.items[0], 'y');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input><p>b</p></div>\n\t\t\t<div><input><p>y</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual-deconflicted/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let items;\n</script>\n\n<div><input bind:value={foo}><p>{foo}</p></div>\n\n{#each items as bar}\n\t<div><input bind:value={bar}><p>{bar}</p></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\"><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\"><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\"><p>three</p>\n\t\t</div>\n\n\t\t<p>remaining:one / done:two / remaining:three</p>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\" value=one><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\" checked=\"\">\n\t\t\t<input type=\"text\" value=two><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\" value=three><p>three</p>\n\t\t</div>\n\n\t\t<p>remaining:one / done:two / remaining:three</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\t/**\n\t\t * @param {number} i\n\t\t * @param {string} text\n\t\t */\n\t\tfunction set_text(i, text) {\n\t\t\tconst input = /** @type {HTMLInputElement} */ (\n\t\t\t\ttarget.querySelectorAll('input[type=\"text\"]')[i]\n\t\t\t);\n\t\t\tinput.value = text;\n\t\t\tinput.dispatchEvent(new window.Event('input'));\n\t\t}\n\n\t\t/**\n\t\t * @param {number} i\n\t\t * @param {boolean} done\n\t\t */\n\t\tfunction set_done(i, done) {\n\t\t\tconst input = /** @type {HTMLInputElement} */ (\n\t\t\t\ttarget.querySelectorAll('input[type=\"checkbox\"]')[i]\n\t\t\t);\n\t\t\tinput.checked = done;\n\t\t\tinput.dispatchEvent(new window.Event('change'));\n\t\t}\n\n\t\tcomponent.filter = 'remaining';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>three</p>\n\t\t\t</div>\n\n\t\t\t<p>remaining:one / done:two / remaining:three</p>\n\t\t`\n\t\t);\n\n\t\tset_text(1, 'four');\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>four</p>\n\t\t\t</div>\n\n\t\t\t<p>remaining:one / done:two / remaining:four</p>\n\t\t`\n\t\t);\n\n\t\tset_done(0, true);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>four</p>\n\t\t\t</div>\n\n\t\t\t<p>done:one / done:two / remaining:four</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.filter = 'done';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>two</p>\n\t\t\t</div>\n\n\t\t\t<p>done:one / done:two / remaining:four</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual-reactive/main.svelte",
    "content": "<script>\n\tlet items = [\n\t\t{ done: false, text: 'one' },\n\t\t{ done: true, text: 'two' },\n\t\t{ done: false, text: 'three' }\n\t];\n\n\texport let filter = 'all';\n\n\t$: done = items.filter(item => item.done);\n\t$: remaining = items.filter(item => !item.done);\n\n\t$: filtered = (\n\t\tfilter === 'all' ? items :\n\t\tfilter === 'done' ? done :\n\t\tremaining\n\t);\n\n\t$: summary = items.map(i => `${i.done ? 'done' : 'remaining'}:${i.text}`).join(' / ');\n</script>\n\n{#each filtered as item}\n\t<div>\n\t\t<input type=\"checkbox\" bind:checked={item.done}>\n\t\t<input type=\"text\" bind:value={item.text}>\n\t\t<p>{item.text}</p>\n\t</div>\n{/each}\n\n<p>{summary}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual-reactive-prop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: [\n\t\t\t\t{ done: false, text: 'one' },\n\t\t\t\t{ done: true, text: 'two' },\n\t\t\t\t{ done: false, text: 'three' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\"><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\"><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\"><p>three</p>\n\t\t</div>\n\n\t\t<p>remaining:one / done:two / remaining:three</p>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\" value=one><p>one</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\" checked=\"\">\n\t\t\t<input type=\"text\" value=two><p>two</p>\n\t\t</div>\n\t\t<div>\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\" value=three><p>three</p>\n\t\t</div>\n\n\t\t<p>remaining:one / done:two / remaining:three</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\t/**\n\t\t * @param {number} i\n\t\t * @param {string} text\n\t\t */\n\t\tfunction set_text(i, text) {\n\t\t\tconst input = /** @type {HTMLInputElement} */ (\n\t\t\t\ttarget.querySelectorAll('input[type=\"text\"]')[i]\n\t\t\t);\n\t\t\tinput.value = text;\n\t\t\tinput.dispatchEvent(new window.Event('input'));\n\t\t}\n\n\t\t/**\n\t\t * @param {number} i\n\t\t * @param {boolean} done\n\t\t */\n\t\tfunction set_done(i, done) {\n\t\t\tconst input = /** @type {HTMLInputElement} */ (\n\t\t\t\ttarget.querySelectorAll('input[type=\"checkbox\"]')[i]\n\t\t\t);\n\t\t\tinput.checked = done;\n\t\t\tinput.dispatchEvent(new window.Event('change'));\n\t\t}\n\n\t\tcomponent.filter = 'remaining';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>three</p>\n\t\t\t</div>\n\n\t\t\t<p>remaining:one / done:two / remaining:three</p>\n\t\t`\n\t\t);\n\n\t\tset_text(1, 'four');\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>four</p>\n\t\t\t</div>\n\n\t\t\t<p>remaining:one / done:two / remaining:four</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(component.items, [\n\t\t\t{ done: false, text: 'one' },\n\t\t\t{ done: true, text: 'two' },\n\t\t\t{ done: false, text: 'four' }\n\t\t]);\n\n\t\tset_done(0, true);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>four</p>\n\t\t\t</div>\n\n\t\t\t<p>done:one / done:two / remaining:four</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(component.items, [\n\t\t\t{ done: true, text: 'one' },\n\t\t\t{ done: true, text: 'two' },\n\t\t\t{ done: false, text: 'four' }\n\t\t]);\n\n\t\tcomponent.filter = 'done';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>one</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\"><p>two</p>\n\t\t\t</div>\n\n\t\t\t<p>done:one / done:two / remaining:four</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-contextual-reactive-prop/main.svelte",
    "content": "<script>\n\texport let items;\n\texport let filter = 'all';\n\n\t$: done = items.filter(item => item.done);\n\t$: remaining = items.filter(item => !item.done);\n\n\t$: filtered = (\n\t\tfilter === 'all' ? items :\n\t\tfilter === 'done' ? done :\n\t\tremaining\n\t);\n\n\t$: summary = items.map(i => `${i.done ? 'done' : 'remaining'}:${i.text}`).join(' / ');\n</script>\n\n{#each filtered as item}\n\t<div>\n\t\t<input type=\"checkbox\" bind:checked={item.done}>\n\t\t<input type=\"text\" bind:value={item.text}>\n\t\t<p>{item.text}</p>\n\t</div>\n{/each}\n\n<p>{summary}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deconflicted/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { component: { name: 'world' } };\n\t},\n\n\thtml: `\n\t\t<h1>Hello world!</h1>\n\t\t<input>\n\t`,\n\n\tssrHtml: `\n\t\t<h1>Hello world!</h1>\n\t\t<input value=world>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, 'world');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'everybody';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(input.value, 'everybody');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Hello everybody!</h1>\n\t\t\t<input>\n\t\t`\n\t\t);\n\n\t\tcomponent.component = { name: 'goodbye' };\n\t\tassert.equal(input.value, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Hello goodbye!</h1>\n\t\t\t<input>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deconflicted/main.svelte",
    "content": "<script>\n\texport let component;\n</script>\n\n<h1>Hello {component.name}!</h1>\n<input bind:value={component.name}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { user: { name: 'alice' } };\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<p>hello alice</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=alice>\n\t\t<p>hello alice</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.equal(input.value, 'alice');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'bob';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello bob</p>\n\t\t`\n\t\t);\n\n\t\tconst user = component.user;\n\t\tuser.name = 'carol';\n\n\t\tcomponent.user = user;\n\t\tassert.equal(input.value, 'carol');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello carol</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep/main.svelte",
    "content": "<script>\n\texport let user;\n</script>\n\n<input bind:value={user.name}>\n<p>hello {user.name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-computed/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { prop: 'name', user: { name: 'alice' } };\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<p>hello alice</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=alice>\n\t\t<p>hello alice</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.equal(input.value, 'alice');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'bob';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello bob</p>\n\t\t`\n\t\t);\n\n\t\tconst user = component.user;\n\t\tuser.name = 'carol';\n\n\t\tcomponent.user = user;\n\t\tassert.equal(input.value, 'carol');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello carol</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-computed/main.svelte",
    "content": "<script>\n\texport let user;\n\texport let prop;\n</script>\n\n<input bind:value={user[prop]}>\n<p>hello {user.name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-computed-dynamic/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tprop: 'bar',\n\t\t\tobj: { foo: 'a', bar: 'b', baz: 'c' }\n\t\t};\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<pre>{\"foo\":\"a\",\"bar\":\"b\",\"baz\":\"c\"}</pre>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=b>\n\t\t<pre>{\"foo\":\"a\",\"bar\":\"b\",\"baz\":\"c\"}</pre>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tconst event = new window.Event('input');\n\n\t\tassert.equal(input.value, 'b');\n\n\t\t// edit bar\n\t\tinput.value = 'e';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<pre>{\"foo\":\"a\",\"bar\":\"e\",\"baz\":\"c\"}</pre>\n\t\t`\n\t\t);\n\n\t\t// edit baz\n\t\tcomponent.prop = 'baz';\n\t\tassert.equal(input.value, 'c');\n\n\t\tinput.value = 'f';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<pre>{\"foo\":\"a\",\"bar\":\"e\",\"baz\":\"f\"}</pre>\n\t\t`\n\t\t);\n\n\t\t// edit foo\n\t\tcomponent.prop = 'foo';\n\t\tassert.equal(input.value, 'a');\n\n\t\tinput.value = 'd';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<pre>{\"foo\":\"d\",\"bar\":\"e\",\"baz\":\"f\"}</pre>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-computed-dynamic/main.svelte",
    "content": "<script>\n\texport let obj;\n\texport let prop;\n</script>\n\n<input bind:value={obj[prop]}>\n<pre>{JSON.stringify(obj)}</pre>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-contextual/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: [{ description: 'one' }, { description: 'two' }, { description: 'three' }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div><input><p>one</p></div>\n\t\t<div><input><p>two</p></div>\n\t\t<div><input><p>three</p></div>\n\t`,\n\n\tssrHtml: `\n\t\t<div><input value=one><p>one</p></div>\n\t\t<div><input value=two><p>two</p></div>\n\t\t<div><input value=three><p>three</p></div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = [...target.querySelectorAll('input')];\n\n\t\tassert.equal(inputs[0].value, 'one');\n\n\t\tconst event = new window.Event('input', { bubbles: true });\n\n\t\tinputs[1].value = 'four';\n\t\tinputs[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input><p>one</p></div>\n\t\t\t<div><input><p>four</p></div>\n\t\t\t<div><input><p>three</p></div>\n\t\t`\n\t\t);\n\n\t\tconst items = component.items;\n\t\titems[2].description = 'five';\n\n\t\tcomponent.items = items;\n\t\tassert.equal(inputs[2].value, 'five');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><input><p>one</p></div>\n\t\t\t<div><input><p>four</p></div>\n\t\t\t<div><input><p>five</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-contextual/main.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n{#each items as item}\n\t<div><input bind:value={item.description}><p>{item.description}</p></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tprop: 'bar',\n\t\t\tobjects: [{ foo: 'a', bar: 'b', baz: 'c' }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<pre>{\"foo\":\"a\",\"bar\":\"b\",\"baz\":\"c\"}</pre>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=b>\n\t\t<pre>{\"foo\":\"a\",\"bar\":\"b\",\"baz\":\"c\"}</pre>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tconst event = new window.Event('input');\n\n\t\tassert.equal(input.value, 'b');\n\n\t\t// edit bar\n\t\tinput.value = 'e';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<pre>{\"foo\":\"a\",\"bar\":\"e\",\"baz\":\"c\"}</pre>\n\t\t`\n\t\t);\n\n\t\t// edit baz\n\t\tcomponent.prop = 'baz';\n\t\tassert.equal(input.value, 'c');\n\n\t\tinput.value = 'f';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<pre>{\"foo\":\"a\",\"bar\":\"e\",\"baz\":\"f\"}</pre>\n\t\t`\n\t\t);\n\n\t\t// edit foo\n\t\tcomponent.prop = 'foo';\n\t\tassert.equal(input.value, 'a');\n\n\t\tinput.value = 'd';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<pre>{\"foo\":\"d\",\"bar\":\"e\",\"baz\":\"f\"}</pre>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-deep-contextual-computed-dynamic/main.svelte",
    "content": "<script>\n\texport let objects;\n\texport let prop;\n</script>\n\n{#each objects as obj}\n\t<input bind:value={obj[prop]}>\n\t<pre>{JSON.stringify(obj)}</pre>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-undefined/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t`,\n\n\tssrHtml: `\n\t\t<input>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, '');\n\n\t\tcomponent.x = null;\n\t\tassert.equal(input.value, '');\n\n\t\tcomponent.x = undefined;\n\t\tassert.equal(input.value, '');\n\n\t\tcomponent.x = 'string';\n\t\tcomponent.x = undefined;\n\t\tassert.equal(input.value, '');\n\n\t\tcomponent.x = 0;\n\t\tassert.equal(input.value, '0');\n\n\t\tcomponent.x = undefined;\n\t\tassert.equal(input.value, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-text-undefined/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<input bind:value={x}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-with-event/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 42 };\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, '42');\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = '43';\n\t\tinput.dispatchEvent(event);\n\n\t\tassert.equal(input.value, '43');\n\t\tassert.equal(component.a, 43);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-input-with-event/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n</script>\n\n<input bind:value={a} on:input='{() => b = 0}'>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-member-expression-no-warning/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, window }) {\n\t\tassert.htmlEqual(target.innerHTML, `<input><p>hello</p>`);\n\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'goodbye';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<input><p>goodbye</p>`);\n\t},\n\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-member-expression-no-warning/main.svelte",
    "content": "<script>\n\tlet object = { value: 'hello' };\n</script>\n\n<input bind:value={object.value} />\n<p>{object.value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-no-unnecessary-invalidation/Tab.svelte",
    "content": "<script>\n\texport let tab;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-no-unnecessary-invalidation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>0</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-no-unnecessary-invalidation/main.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\timport Tab from \"./Tab.svelte\";\n\n\tlet i = 0;\n\tconst { set, subscribe } = writable({ id: 1, name: \"tab1\" });\n\tconst tab = {\n\t\tset(value) {\n\t\t\ti++;\n\t\t\tset(value);\n\t\t},\n\t\tsubscribe,\n\t};\n</script>\n\n<Tab bind:tab={$tab} />\n<p>{i}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<p>selected: one</p>\n\n\t\t<select>\n\t\t\t<option selected>one</option>\n\t\t\t<option>two</option>\n\t\t\t<option>three</option>\n\t\t</select>\n\n\t\t<p>selected: one</p>\n\t`,\n\n\tget props() {\n\t\treturn { selected: 'one' };\n\t},\n\n\ttest({ assert, component, target, window, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: one</p>\n\n\t\t\t<select>\n\t\t\t\t<option${variant === 'hydrate' ? ' selected' : ''}>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: one</p>\n\t\t`\n\t\t);\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tassert.deepEqual(options, [...select.options]);\n\t\tassert.equal(component.selected, 'one');\n\n\t\tconst change = new window.Event('change');\n\n\t\toptions[1].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.equal(component.selected, 'two');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: two</p>\n\n\t\t\t<select>\n\t\t\t\t<option${variant === 'hydrate' ? ' selected' : ''}>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: two</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = 'three';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select/main.svelte",
    "content": "<script>\n\texport let selected;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t<option>one</option>\n\t<option>two</option>\n\t<option>three</option>\n</select>\n\n<p>selected: {selected}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-from-let/Parent.svelte",
    "content": "<script>\n\tconst tasks = [\"do laundry\", \"do taxes\", \"cook food\", \"watch the kids\"];\n</script>\n\n<slot {tasks} />\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-from-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<select>\n\t\t\t<option value='do laundry'>do laundry</option>\n\t\t\t<option value='do taxes'>do taxes</option>\n\t\t\t<option value='cook food'>cook food</option>\n\t\t\t<option value='watch the kids'>watch the kids</option>\n\t\t</select>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst select = target.querySelector('select');\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tconst change = new window.Event('change');\n\t\toptions[1].selected = true;\n\t\t// @ts-ignore\n\t\tawait select.dispatchEvent(change);\n\n\t\tassert.equal(component.selected, options[1].value);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-from-let/main.svelte",
    "content": "<script>\n\timport Parent from \"./Parent.svelte\";\n\texport let selected;\n</script>\n\n<Parent let:tasks={tasks}>\n\t<select bind:value={selected}>\n\t\t{#each tasks as task}\n\t\t\t<option value={task}>{task}</option>\n\t\t{/each}\n\t</select>\n</Parent>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-from-let-2/Parent.svelte",
    "content": "<script>\n\tconst tasks = [\"do laundry\", \"do taxes\", \"cook food\", \"watch the kids\"];\n</script>\n\n<slot {tasks} />\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-from-let-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<select>\n\t\t\t<option value='do laundry'>do laundry</option>\n\t\t\t<option value='do taxes'>do taxes</option>\n\t\t\t<option value='cook food'>cook food</option>\n\t\t\t<option value='watch the kids'>watch the kids</option>\n\t\t</select>\n\t\t<p>1</p>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst select = target.querySelector('select');\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(component.tasks_touched, 1);\n\n\t\tconst change = new window.Event('change');\n\t\toptions[1].selected = true;\n\t\t// @ts-ignore\n\t\tawait select.dispatchEvent(change);\n\n\t\tassert.equal(component.selected, options[1].value);\n\t\tassert.equal(component.tasks_touched, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-from-let-2/main.svelte",
    "content": "<script>\n\timport Parent from \"./Parent.svelte\";\n\texport let selected;\n\texport let tasks = ['do nothing'];\n\texport let tasks_touched = 0;\n\n\t$: {\n\t\ttasks, tasks_touched++;\n\t}\n</script>\n\n<Parent let:tasks={tasks}>\n\t<select bind:value={selected}>\n\t\t{#each tasks as task}\n\t\t\t<option value={task}>{task}</option>\n\t\t{/each}\n\t</select>\n</Parent>\n<p>{tasks_touched}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-implicit-option-value/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { values: [1, 2, 3], foo: 2 };\n\t},\n\n\tssrHtml: `\n\t\t<select>\n\t\t\t<option>1</option>\n\t\t\t<option selected>2</option>\n\t\t\t<option>3</option>\n\t\t</select>\n\n\t\t<p>foo: 2</p>\n\t`,\n\n\ttest({ assert, component, target, window, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option>1</option>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}>2</option>\n\t\t\t\t<option>3</option>\n\t\t\t</select>\n\n\t\t\t<p>foo: 2</p>\n\t\t`\n\t\t);\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tassert.ok(options[1].selected);\n\t\tassert.equal(component.foo, 2);\n\n\t\tconst change = new window.Event('change');\n\n\t\toptions[2].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.equal(component.foo, 3);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option>1</option>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}>2</option>\n\t\t\t\t<option>3</option>\n\t\t\t</select>\n\n\t\t\t<p>foo: 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-implicit-option-value/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let values;\n</script>\n\n<select bind:value={foo}>\n\t{#each values as v}\n\t\t<option>{v}</option>\n\t{/each}\n</select>\n\n<p>foo: {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-in-each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<select>\n\t\t\t<option selected value='hullo'>Hullo</option>\n\t\t\t<option value='world'>World</option>\n\t\t</select>\n\n\t\t<select>\n\t\t\t<option value='hullo'>Hullo</option>\n\t\t\t<option selected value='world'>World</option>\n\t\t</select>\n\t`,\n\n\tget props() {\n\t\treturn {\n\t\t\titems: [{ value: 'hullo' }, { value: 'world' }]\n\t\t};\n\t},\n\n\ttest({ assert, component, target, window, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}value='hullo'>Hullo</option>\n\t\t\t\t<option value='world'>World</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value='hullo'>Hullo</option>\n\t\t\t\t<option ${variant === 'hydrate' ? 'selected ' : ''}value='world'>World</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\t\tconst selects = [...target.querySelectorAll('select')];\n\n\t\tconst change = new window.Event('change');\n\n\t\tselects[1].options[0].selected = true;\n\t\tselects[1].dispatchEvent(change);\n\n\t\tassert.deepEqual(component.items, [{ value: 'hullo' }, { value: 'hullo' }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-in-each-block/main.svelte",
    "content": "<script>\n\texport let items;\n</script>\n{#each items as item}\n\t<select bind:value={item.value}>\n\t\t<option value=\"hullo\">Hullo</option>\n\t\t<option value=\"world\">World</option>\n\t</select>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/Modal.svelte",
    "content": "<script>\n\texport let hidden = true;\n\n\texport function toggle() {\n\t\thidden = !hidden;\n\t}\n</script>\n\n{#if !hidden}\n\t<slot></slot>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\tget props() {\n\t\treturn { letter: 'b' };\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tcomponent.modal.toggle();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>b</span>\n\n\t\t\t<select>\n\t\t\t\t<option value='a'>a</option>\n\t\t\t\t<option value='b'>b</option>\n\t\t\t\t<option value='c'>c</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\n\t\tlet select = target.querySelector('select');\n\t\tok(select);\n\t\tconst change = new window.MouseEvent('change');\n\n\t\tselect.options[2].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\t\tassert.equal(component.letter, 'c');\n\n\t\tassert.deepEqual(\n\t\t\tArray.from(select.options).map((o) => o.selected),\n\t\t\t[false, false, true]\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>c</span>\n\n\t\t\t<select>\n\t\t\t\t<option value='a'>a</option>\n\t\t\t\t<option value='b'>b</option>\n\t\t\t\t<option value='c'>c</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\n\t\tcomponent.modal.toggle();\n\t\tcomponent.modal.toggle();\n\t\tflushSync();\n\n\t\tselect = target.querySelector('select');\n\t\tok(select);\n\n\t\tassert.deepEqual(\n\t\t\tArray.from(select.options).map((o) => o.selected),\n\t\t\t[false, false, true]\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>c</span>\n\n\t\t\t<select>\n\t\t\t\t<option value='a'>a</option>\n\t\t\t\t<option value='b'>b</option>\n\t\t\t\t<option value='c'>c</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/main.svelte",
    "content": "<script>\n\timport Modal from './Modal.svelte';\n\n\texport let modal;\n\texport let letter;\n\texport let letters = ['a', 'b', 'c'];\n</script>\n\n<Modal bind:this={modal}>\n\t<span>{letter}</span>\n\t<select bind:value={letter}>\n\t\t{#each letters as letter}\n\t\t\t<option value=\"{letter}\">{letter}</option>\n\t\t{/each}\n\t</select>\n</Modal>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<p>selected: b</p>\n\n\t\t<select>\n\t\t\t<option>a</option>\n\t\t\t<option selected>b</option>\n\t\t\t<option>c</option>\n\t\t</select>\n\n\t\t<p>selected: b</p>\n\t`,\n\n\tget props() {\n\t\treturn { selected: 'b' };\n\t},\n\n\ttest({ assert, target, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: b</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option${variant === 'hydrate' ? ' selected' : ''}>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: b</p>\n\t\t`\n\t\t);\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tassert.equal(select.value, 'b');\n\t\tassert.ok(options[1].selected);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value/main.svelte",
    "content": "<script>\n\texport let selected;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t<option>a</option>\n\t<option>b</option>\n\t<option>c</option>\n</select>\n\n<p>selected: {selected}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value-undefined/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `\n\t\t<p>selected: a</p>\n\n\t\t<select>\n\t\t\t<option disabled=''>x</option>\n\t\t\t<option>a</option>\n\t\t\t<option>b</option>\n\t\t\t<option>c</option>\n\t\t</select>\n\n\t\t<p>selected: a</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tassert.equal(component.selected, 'a');\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\t// first enabled option should be selected\n\t\tassert.equal(select.value, 'a');\n\t\tassert.ok(options[1].selected);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value-undefined/main.svelte",
    "content": "<script>\n\texport let selected;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t<option disabled>x</option>\n\t<option>a</option>\n\t<option>b</option>\n\t<option>c</option>\n</select>\n\n<p>selected: {selected}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value-undefined-2/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `\n\t\t<p>selected: b</p>\n\n\t\t<select>\n\t\t\t<option>a</option>\n\t\t\t<option selected>b</option>\n\t\t\t<option>c</option>\n\t\t</select>\n\n\t\t<p>selected: b</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tassert.equal(component.selected, 'b');\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\t// option with selected attribute should be selected\n\t\tassert.equal(select.value, 'b');\n\t\tassert.ok(options[1].selected);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value-undefined-2/main.svelte",
    "content": "<script>\n\texport let selected;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t<option>a</option>\n\t<option selected>b</option>\n\t<option>c</option>\n</select>\n\n<p>selected: {selected}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value-undefined-3/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `\n\t\t<p>selected: a</p>\n\n\t\t<select>\n\t\t\t<option disabled=''>x</option>\n\t\t\t<option>a</option>\n\t\t\t<option>b</option>\n\t\t\t<option>c</option>\n\t\t</select>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tassert.equal(component.selected, 'a');\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\t// first enabled option should be selected\n\t\tassert.equal(select.value, 'a');\n\t\tassert.ok(options[1].selected);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-initial-value-undefined-3/main.svelte",
    "content": "<script>\n\texport let selected;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t<option disabled>x</option>\n\t{#each [\"a\", \"b\", \"c\"] as val}\n\t\t<option>{val}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string[]} */\n\t\t\titems: [],\n\t\t\t/** @type {string | null} */\n\t\t\tselected: null\n\t\t};\n\t},\n\n\thtml: `\n\t\t<select></select>\n\t\t<p>selected: nothing</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.items = ['one', 'two', 'three'];\n\t\tcomponent.selected = 'two';\n\n\t\tconst options = target.querySelectorAll('option');\n\t\tassert.ok(!options[0].selected);\n\t\tassert.ok(options[1].selected);\n\t\tassert.ok(!options[2].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\t\t\t<p>selected: two</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let items;\n</script>\n\n<select bind:value={selected}>\n\t{#each items as item}\n\t\t<option>{item}</option>\n\t{/each}\n</select>\n\n<p>selected: {selected || 'nothing'}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string[]} */\n\t\t\titems: [],\n\t\t\tselected: 'two'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<select></select>\n\t\t<p>selected: two</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.items = ['one', 'two', 'three'];\n\n\t\tawait Promise.resolve(); // mutation observer\n\n\t\tconst options = target.querySelectorAll('option');\n\t\tassert.ok(!options[0].selected);\n\t\tassert.ok(options[1].selected);\n\t\tassert.ok(!options[2].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\t\t\t<p>selected: two</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late-2/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let items;\n</script>\n\n<select bind:value={selected}>\n\t{#each items as item}\n\t\t<option>{item}</option>\n\t{/each}\n</select>\n\n<p>selected: {selected || 'nothing'}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string[]} */\n\t\t\titems: [],\n\t\t\tselected: 'two'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<select></select>\n\t\t<p>selected: two</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.items = ['one', 'two', 'three'];\n\n\t\tawait Promise.resolve(); // mutation observer\n\n\t\tconst options = target.querySelectorAll('option');\n\t\tassert.ok(!options[0].selected);\n\t\tassert.ok(options[1].selected);\n\t\tassert.ok(!options[2].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\t\t\t<p>selected: two</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late-3/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let items;\n</script>\n\n<select value={selected} on:blur={e => selected = e.target.value}>\n\t{#each items as item}\n\t\t<option>{item}</option>\n\t{/each}\n</select>\n\n<p>selected: {selected || 'nothing'}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait new Promise((r) => setTimeout(r, 200)); // wait for await block to resolve\n\n\t\tconst options = target.querySelectorAll('option');\n\t\tassert.ok(!options[0].selected);\n\t\tassert.ok(options[1].selected);\n\t\tassert.ok(!options[2].selected);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-late-4/main.svelte",
    "content": "<script>\n\tlet promise = getNumbers();\n\tlet selected = 2;\n\n\tasync function getNumbers() {\n\t\tawait new Promise(resolve => setTimeout(resolve, 100));\n\t\treturn [1, 2, 3];\n\t}\n</script>\n\n<select bind:value={selected}>\n\t{#await promise}\n\t\t<option>-1</option>\n\t{:then numbers}\n\t\t{#each numbers as number}\n\t\t\t<option>{number}</option>\n\t\t{/each}\n\t{/await}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-multiple/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { selected: ['two', 'three'] };\n\t},\n\n\thtml: `\n\t\t<select multiple>\n\t\t\t<option>one</option>\n\t\t\t<option>two</option>\n\t\t\t<option>three</option>\n\t\t</select>\n\n\t\t<p>selected: two, three</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tconst change = new window.Event('change');\n\n\t\toptions[1].selected = false;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.deepEqual(component.selected, ['three']);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select multiple>\n\t\t\t\t<option>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: three</p>\n\t\t`\n\t\t);\n\n\t\toptions[0].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.deepEqual(component.selected, ['one', 'three']);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select multiple>\n\t\t\t\t<option>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: one, three</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = ['one', 'two'];\n\n\t\tassert.ok(options[0].selected);\n\t\tassert.ok(options[1].selected);\n\t\tassert.ok(!options[2].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select multiple>\n\t\t\t\t<option>one</option>\n\t\t\t\t<option>two</option>\n\t\t\t\t<option>three</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: one, two</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-multiple/main.svelte",
    "content": "<script>\n\texport let selected;\n</script>\n\n<select multiple bind:value={selected}>\n\t<option>one</option>\n\t<option>two</option>\n\t<option>three</option>\n</select>\n\n<p>selected: {selected.join( ', ' )}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-null-placeholder/_config.js",
    "content": "import { ok, test } from '../../test';\n\nconst items = [{ id: 'a' }, { id: 'b' }];\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {{ id: string } | null} */\n\t\t\tfoo: null,\n\t\t\titems\n\t\t};\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[0].disabled, true);\n\t\tassert.equal(options[1].selected, false);\n\t\tassert.equal(options[1].disabled, false);\n\n\t\t// placeholder option value must be blank string for native required field validation\n\t\tassert.equal(options[0].value, '');\n\t\tassert.equal(select.checkValidity(), false);\n\n\t\tcomponent.foo = component.items[0];\n\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t\tassert.equal(select.checkValidity(), true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-null-placeholder/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let items;\n</script>\n\n<select bind:value={foo} required>\n\t<option value={null} disabled>Select an option</option>\n\t{#each items as item}\n\t\t<option value={item}>{item.id}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-null-placeholder-2/_config.js",
    "content": "import { ok, test } from '../../test';\n\nconst items = [{ id: 'a' }, { id: 'b' }];\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {{ id: string } | null} */\n\t\t\tfoo: null,\n\t\t\titems\n\t\t};\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\t\tassert.equal(options[0].value, '');\n\n\t\tcomponent.foo = component.items[0];\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\n\t\tcomponent.foo = { id: 'c' }; // doesn't match an option\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-null-placeholder-2/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let items;\n</script>\n\n<select bind:value={foo}>\n\t<option value={null}></option>\n\t{#each items as item}\n\t\t<option value={item}>{item.id}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-optgroup/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<h1>Hello !</h1>\n\n\t\t<select>\n\t\t\t<option value=\"Harry\">Harry</option>\n\t\t\t<optgroup label=\"Group\">\n\t\t\t\t<option value=\"World\">World</option>\n\t\t\t</optgroup>\n\t\t</select>\n\t`,\n\n\thtml: `\n\t\t<h1>Hello Harry!</h1>\n\n\t\t<select>\n\t\t\t<option value=\"Harry\">Harry</option>\n\t\t\t<optgroup label=\"Group\">\n\t\t\t\t<option value=\"World\">World</option>\n\t\t\t</optgroup>\n\t\t</select>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tassert.deepEqual(options, [...select.options]);\n\t\tassert.equal(component.name, 'Harry');\n\n\t\tconst change = new window.Event('change');\n\n\t\toptions[1].selected = true;\n\t\tselect.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.equal(component.name, 'World');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Hello World!</h1>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"Harry\">Harry</option>\n\t\t\t\t<optgroup label=\"Group\">\n\t\t\t\t\t<option value=\"World\">World</option>\n\t\t\t\t</optgroup>\n\t\t\t</select>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-optgroup/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n\n<select bind:value={name}>\n\t<option value=\"Harry\">Harry</option>\n\t<optgroup label=\"Group\">\n\t\t<option value=\"World\">World</option>\n\t</optgroup>\n</select>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-reactive-derived/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<select>\n\t\t\t<option selected=\"\" value=\"\">Select</option>\n\t\t\t<option value=\"us\">US</option>\n\t\t\t<option value=\"uk\">UK</option>\n\t\t</select>\n\t`,\n\n\tasync test({ assert, target, window, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option${variant === 'hydrate' ? ' selected=\"\"' : ''} value=\"\">Select</option>\n\t\t\t\t<option value=\"us\">US</option>\n\t\t\t\t<option value=\"uk\">UK</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\n\t\tconst [select] = target.querySelectorAll('select');\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(select.value, '');\n\n\t\tconst change = new window.Event('change');\n\n\t\t// Select \"UK\"\n\t\toptions[2].selected = true;\n\t\tawait select.dispatchEvent(change);\n\n\t\tassert.equal(select.value, 'uk');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-reactive-derived/main.svelte",
    "content": "<script>\n\tconst default_details = {\n\t\tcountry: '',\n\t}\n\n\t$: data = {\n\t\tlocked: false,\n\t\tdetails: null,\n\t}\n\n\t$: details = data.details ?? default_details\n</script>\n\n<select\n\tbind:value={details.country}\n\tdisabled={data.locked}\n>\n\t<option value=\"\">Select</option>\n\t<option value=\"us\">US</option>\n\t<option value=\"uk\">UK</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-unmatched/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>selected: </p>\n\n\t\t<select>\n\t\t\t<option>a</option>\n\t\t\t<option>b</option>\n\t\t\t<option>c</option>\n\t\t</select>\n\n\t\t<p>selected: </p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tassert.equal(component.selected, null);\n\n\t\t// no option should be selected since none of the options matches the bound value\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.ok(!options[0].selected);\n\n\t\tcomponent.selected = 'a'; // first option should now be selected\n\t\tassert.equal(select.value, 'a');\n\t\tassert.ok(options[0].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: a</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: a</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = 'd'; // doesn't match an option\n\n\t\t// now no option should be selected again\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.ok(!options[0].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: d</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: d</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = 'b'; // second option should now be selected\n\t\tassert.equal(select.value, 'b');\n\t\tassert.ok(options[1].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: b</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: b</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = undefined; // also doesn't match an option\n\n\t\t// now no option should be selected again\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.ok(!options[0].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: </p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: </p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-unmatched/main.svelte",
    "content": "<script>\n\t// set as null so no option will be selected by default\n\texport let selected = null;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t<option>a</option>\n\t<option>b</option>\n\t<option>c</option>\n</select>\n\n<p>selected: {selected}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-unmatched-2/_config.js",
    "content": "import { ok, test } from '../../test';\n\n// // same test as the previous one, but with a dynamic each block\nexport default test({\n\thtml: `\n\t\t<p>selected: </p>\n\n\t\t<select>\n\t\t\t<option>a</option>\n\t\t\t<option>b</option>\n\t\t\t<option>c</option>\n\t\t</select>\n\n\t\t<p>selected: </p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tconst options = [...target.querySelectorAll('option')];\n\n\t\tassert.equal(component.selected, null);\n\n\t\t// no option should be selected since none of the options matches the bound value\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.ok(!options[0].selected);\n\n\t\tcomponent.selected = 'a'; // first option should now be selected\n\t\tassert.equal(select.value, 'a');\n\t\tassert.ok(options[0].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: a</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: a</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = 'd'; // doesn't match an option\n\n\t\t// now no option should be selected again\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.ok(!options[0].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: d</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: d</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = 'b'; // second option should now be selected\n\t\tassert.equal(select.value, 'b');\n\t\tassert.ok(options[1].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: b</p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: b</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.selected = undefined; // also doesn't match an option\n\n\t\t// now no option should be selected again\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\t\tassert.ok(!options[0].selected);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>selected: </p>\n\n\t\t\t<select>\n\t\t\t\t<option>a</option>\n\t\t\t\t<option>b</option>\n\t\t\t\t<option>c</option>\n\t\t\t</select>\n\n\t\t\t<p>selected: </p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-unmatched-2/main.svelte",
    "content": "<script>\n\t// set as null so no option will be selected by default\n\texport let selected = null;\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t{#each ['a', 'b', 'c'] as letter}\n\t\t<option>{letter}</option>\n\t{/each}\n</select>\n\n<p>selected: {selected}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-unmatched-3/_config.js",
    "content": "import { ok, test } from '../../test';\n\n// test select binding behavior when a selected option is removed\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `<p>selected: a</p><select><option>a</option><option>b</option><option>c</option></select>`,\n\n\tasync test({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst options = target.querySelectorAll('option');\n\n\t\t// first option should be selected by default since no value was bound\n\t\tassert.equal(component.selected, 'a');\n\t\tassert.equal(select.value, 'a');\n\t\tassert.ok(options[0].selected);\n\n\t\t// remove the selected item, so the bound value no longer matches anything\n\t\tcomponent.items = ['b', 'c'];\n\n\t\t// There's a MutationObserver\n\t\tawait Promise.resolve();\n\n\t\t// now no option should be selected\n\t\tassert.equal(select.value, '');\n\t\tassert.equal(select.selectedIndex, -1);\n\n\t\t// model of selected value should be kept around, even if it is not in the list\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>selected: a</p><select><option>b</option><option>c</option></select>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-select-unmatched-3/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let items = ['a', 'b', 'c'];\n</script>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t{#each items as letter}\n\t\t<option>{letter}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-store/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<p>hello world</p>\n\t\t<textarea></textarea>\n\t\t<div contenteditable=\"true\">world</div>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=\"world\">\n\t\t<p>hello world</p>\n\t\t<textarea>world</textarea>\n\t\t<div contenteditable=\"true\">world</div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tassert.equal(input.value, 'world');\n\n\t\tconst event = new window.Event('input');\n\n\t\t/** @type {string[]} */\n\t\tconst names = [];\n\n\t\t// @ts-ignore\n\t\tconst unsubscribe = component.name.subscribe((name) => {\n\t\t\tnames.push(name);\n\t\t});\n\n\t\tinput.value = 'everybody';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello everybody</p>\n\t\t\t<textarea></textarea>\n\t\t\t<div contenteditable=\"true\">everybody</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.name.set('goodbye');\n\t\tflushSync();\n\t\tassert.equal(input.value, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello goodbye</p>\n\t\t\t<textarea></textarea>\n\t\t\t<div contenteditable=\"true\">goodbye</div>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(names, ['world', 'everybody', 'goodbye']);\n\t\tunsubscribe();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\texport const name = writable('world');\n\n</script>\n\n<input bind:value={$name}>\n<p>hello {$name}</p>\n<textarea bind:value={$name} />\n<div contenteditable=\"true\" bind:innerHTML={$name}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-store-deep/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<p>hello world</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=\"world\">\n\t\t<p>hello world</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tassert.equal(input.value, 'world');\n\n\t\tconst event = new window.Event('input');\n\n\t\t/** @type {string[]} */\n\t\tconst names = [];\n\n\t\t// @ts-ignore\n\t\tconst unsubscribe = component.user.subscribe((user) => {\n\t\t\tif (!names.includes(user.name)) {\n\t\t\t\tnames.push(user.name);\n\t\t\t}\n\t\t});\n\n\t\tinput.value = 'everybody';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello everybody</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.user.set({ name: 'goodbye' });\n\t\tflushSync();\n\t\tassert.equal(input.value, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>hello goodbye</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(names, ['world', 'everybody', 'goodbye']);\n\t\tunsubscribe();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-store-deep/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\texport const user = writable({ name: 'world' });\n</script>\n\n<input bind:value={$user.name}>\n<p>hello {$user.name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-store-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\thtml: `\n\t\t<input type=\"checkbox\">\n\t\t<input type=\"checkbox\">\n\t\t<input type=\"checkbox\">\n\t\t0\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.checked = true;\n\t\tinput.dispatchEvent(new window.Event('change', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"checkbox\">\n\t\t\t1\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-store-each/main.svelte",
    "content": "<script>\n\timport { derived, writable } from \"svelte/store\";\n\n\tconst checks = writable([false, false, false])\n\tconst countChecked = derived(checks, ($checks) => $checks.filter(Boolean).length)\n</script>\n\n{#each $checks as checked}\n\t<input type=\"checkbox\" bind:checked />\n{/each}\n\n{$countChecked}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-textarea/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { value: 'some text' };\n\t},\n\n\thtml: `\n\t\t<textarea></textarea>\n\t\t<p>some text</p>\n\t`,\n\n\tssrHtml: `\n\t\t<textarea>some text</textarea>\n\t\t<p>some text</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(textarea);\n\t\tassert.equal(textarea.value, 'some text');\n\n\t\tconst event = new window.Event('input');\n\n\t\ttextarea.value = 'hello';\n\t\ttextarea.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<textarea></textarea>\n\t\t\t<p>hello</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.value = 'goodbye';\n\t\tassert.equal(textarea.value, 'goodbye');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<textarea></textarea>\n\t\t\t<p>goodbye</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-textarea/main.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<textarea bind:value></textarea>\n<p>{value}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<canvas></canvas>',\n\n\ttest({ assert, component, target }) {\n\t\tconst canvas = target.querySelector('canvas');\n\t\tassert.equal(canvas, component.foo);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<canvas bind:this={foo}></canvas>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-and-value/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<p>value: initial</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=\"initial\">\n\t\t<p>value: initial</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'changed';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>value: changed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-and-value/main.svelte",
    "content": "<script>\n\tlet node;\n\texport let value = 'initial';\n</script>\n\n<input bind:this={node} bind:value>\n<p>value: {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-computed-key/Foo.svelte",
    "content": "<script>\n  export const test = true;\n</script>\n<div>foo</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-computed-key/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // there's no class instance to retrieve in SSR mode\n\n\thtml: `\n\t\t<div>foo</div>\n\t\t<div>has foo: true</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-computed-key/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\texport let foo = {};\n</script>\n\n<Foo bind:this={foo['computed']}/>\n<div>\n\thas foo: {!!foo.computed}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-each-block/Foo.svelte",
    "content": "<script>\n  export const test = true;\n</script>\n\n<div>foo</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // there's no class instance to retrieve in SSR mode\n\n\thtml: `\n\t\t<div>foo</div>\n\t\t<div>0 has foo: true</div>\n\t\t<div>foo</div>\n\t\t<div>1 has foo: true</div>\n\t\t<div>foo</div>\n\t\t<div>2 has foo: true</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-each-block/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\texport let foo = [];\n</script>\n\n{#each Array(3) as _, i}\n\t<Foo bind:this={foo[i]}/>\n\t<div>\n\t\t{i} has foo: {!!foo[i]}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-each-block-value/Foo.svelte",
    "content": "<script>\n  export const test = true;\n</script>\n\n<div>foo</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-each-block-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // there's no class instance to retrieve in SSR mode\n\thtml: `\n\t<div>foo</div>\n\t<div>first has foo: true</div>\n\t<div>foo</div>\n\t<div>second has foo: true</div>\n\t<div>foo</div>\n\t<div>third has foo: true</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-each-block-value/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\texport let foo = {};\n</script>\n\n{#each [\"first\", \"second\", \"third\"] as value}\n\t<Foo bind:this={foo[value]}/>\n\t<div>\n\t\t{value} has foo: {!!foo[value]}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-reactive/Foo.svelte",
    "content": "<script>\n  export const test = true;\n</script>\n\n<div>foo</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-reactive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // there's no class instance to retrieve in SSR mode\n\n\thtml: `\n\t\t<div>foo</div>\n\t\t<div>has foo: true</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-component-reactive/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\texport let foo;\n</script>\n\n<Foo bind:this={foo}/>\n<div>\n\thas foo: {!!foo}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>a</div>\n\t\t`\n\t\t);\n\n\t\tassert.equal(component.items[0].ref, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property/main.svelte",
    "content": "<script>\n\texport let visible = false;\n\n\texport let items = [{ value: 'a', ref: null }];\n</script>\n\n{#if visible}\n\t{#each items as item}\n\t\t<div bind:this={item.ref}>{item.value}</div>\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property-2/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\n/** @type {Array<Array<{ ref: HTMLElement }>>} */\nlet calls = [];\n\n/** @param {Array<{ ref: HTMLElement }>} refs */\nfunction callback(refs) {\n\tcalls.push(refs.map(({ ref }) => ({ ref })));\n}\nexport default test({\n\thtml: '',\n\tget props() {\n\t\treturn { callback };\n\t},\n\tbefore_test() {\n\t\tcalls = [];\n\t},\n\ttest({ assert, component, target }) {\n\t\tassert.equal(calls.length, 1);\n\t\tassert.equal(calls[0].length, 0);\n\n\t\tflushSync(() => component.addItem());\n\n\t\tlet divs = target.querySelectorAll('div');\n\n\t\tassert.equal(calls.length, 3);\n\t\tassert.equal(calls[1].length, 1);\n\t\tassert.equal(calls[1][0].ref, null);\n\t\tassert.equal(calls[2].length, 1);\n\t\tassert.equal(calls[2][0].ref, divs[0]);\n\n\t\tflushSync(() => component.addItem());\n\n\t\tdivs = target.querySelectorAll('div');\n\n\t\tassert.equal(calls.length, 5);\n\t\tassert.equal(calls[3].length, 2);\n\t\tassert.equal(calls[3][0].ref, divs[0]);\n\t\tassert.equal(calls[3][1].ref, null);\n\t\tassert.equal(calls[4].length, 2);\n\t\tassert.equal(calls[4][0].ref, divs[0]);\n\t\tassert.equal(calls[4][1].ref, divs[1]);\n\n\t\tflushSync(() => component.addItem());\n\n\t\tdivs = target.querySelectorAll('div');\n\n\t\tassert.equal(calls.length, 7);\n\t\tassert.equal(calls[5].length, 3);\n\t\tassert.equal(calls[5][0].ref, divs[0]);\n\t\tassert.equal(calls[5][1].ref, divs[1]);\n\t\tassert.equal(calls[5][2].ref, null);\n\t\tassert.equal(calls[6].length, 3);\n\t\tassert.equal(calls[6][0].ref, divs[0]);\n\t\tassert.equal(calls[6][1].ref, divs[1]);\n\t\tassert.equal(calls[6][2].ref, divs[2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property-2/main.svelte",
    "content": "<script>\n\timport { tick } from 'svelte';\n\tlet refs = [];\n\n\texport function addItem() {\n\t\trefs = refs.concat({ ref: null });\n\t\treturn tick();\n\t}\n\n\texport let callback;\n\n\t$: callback(refs);\n</script>\n\n{#each refs as xxx}\n\t<div bind:this={xxx.ref}></div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property-component/Foo.svelte",
    "content": "<script>\n\texport function isFoo() {\n\t\treturn true;\n\t}\n</script>\n\n<p><slot></slot></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a</p>\n\t\t`\n\t\t);\n\n\t\tassert.ok(component.items[0].ref.isFoo());\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-block-property-component/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let visible = false;\n\n\texport let items = [{ value: 'a', ref: null }];\n</script>\n\n{#if visible}\n\t{#each items as item}\n\t\t<Foo bind:this={item.ref}>{item.value}</Foo>\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-key/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>content 0 3 3</div><div>content 1 2 2</div><div>content 2 1 1</div>',\n\n\ttest({ assert, target, component }) {\n\t\tconst divs = target.querySelectorAll('div');\n\t\tassert.equal(component.refs[0], divs[0]);\n\t\tassert.equal(component.refs[1], divs[1]);\n\t\tassert.equal(component.refs[2], divs[2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-key/main.svelte",
    "content": "<script>\n\texport let data = [ { id: '1' }, { id: '2' }, { id: '3' } ];\n\n\texport let refs = [];\n\n\t// note that this is NOT data.slice().reverse()\n\t// as that wouldn't have triggered an infinite loop\n\t$: list = data.reverse();\n</script>\n\n{#each list as { id }, index (id)}\n\t<div bind:this={refs[index]}>\n\t\tcontent {index} {id} {data[index].id}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-object-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>b</div><div>b</div><div>c</div><div>c</div>\n\t\t`\n\t\t);\n\t\tassert.equal(component.items1[1], target.querySelector('div'));\n\t\tassert.equal(component.items2[1], target.querySelector('div:nth-child(2)'));\n\t\tassert.equal(component.items1[2], target.querySelector('div:nth-child(3)'));\n\t\tassert.equal(component.items2[2], target.querySelector('div:last-child'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-object-props/main.svelte",
    "content": "<script>\n\texport const items1 = {};\n\texport const items2 = {};\n\texport let data = [\n\t\t{id: 1, text: \"b\"},\n\t\t{id: 2, text: \"c\"},\n\t];\n</script>\n\n{#each data as item (item.id)}\n\t<div bind:this={items1[item.id]}>{item.text}</div>\n\t<div bind:this={items2[item.id]}>{item.text}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-object-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\ttest({ assert, component, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>a</div><div>a</div><div>b</div><div>b</div>\n\t\t`\n\t\t);\n\t\tassert.equal(component.items1[1], target.querySelector('div'));\n\t\tassert.equal(component.items2[1], target.querySelector('div:nth-child(2)'));\n\t\tassert.equal(component.items1[2], target.querySelector('div:nth-child(3)'));\n\t\tassert.equal(component.items2[2], target.querySelector('div:last-child'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-each-object-spread/main.svelte",
    "content": "<script>\n\texport const items1 = {};\n\texport const items2 = {};\n\tlet data = [\n\t\t{id: 1, text: \"a\"},\n\t\t{id: 2, text: \"b\"},\n\t];\n</script>\n\n{#each data as {id, text} (id)}\n\t<div bind:this={items1[id]}>{text}</div>\n\t<div bind:this={items2[id]}>{text}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-element-reactive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // there's no class instance to retrieve in SSR mode\n\n\thtml: '<div>has div: true</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-element-reactive/main.svelte",
    "content": "<script>\n\texport let div;\n</script>\n\n<div bind:this={div}>\n\thas div: {!!div}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-element-reactive-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // there's no class instance to retrieve in SSR mode\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\thtml: `\n\t\t<div>The text is hello</div>\n\t\t<h1>hello</h1>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.visible = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>The text is missing</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>The text is hello</div>\n\t\t\t<h1>hello</h1>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-element-reactive-b/main.svelte",
    "content": "<script>\n\texport let visible = true;\n\tlet h1;\n</script>\n\n<div>The text is {h1 ? h1.textContent : 'missing'}</div>\n{#if visible}\n\t<h1 bind:this={h1}>hello</h1>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-legacy-component-api/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcompatibility: {\n\t\t\tcomponentApi: 4\n\t\t}\n\t},\n\thtml: '<button>0</button>',\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tawait button?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-legacy-component-api/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte';\n\timport { onMount } from 'svelte';\n\n\tlet count = 0;\n\tlet component;\n\n\tonMount(() => {\n\t\tcomponent.$on('increment', (e) => {\n\t\t\tcount += e.detail;\n\t\t\tcomponent.$set({ count });\n\t\t});\n\t});\n</script>\n\n<Sub bind:this={component} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-legacy-component-api/sub.svelte",
    "content": "<script>\n    import { createEventDispatcher } from 'svelte';\n\n    export let count = 0;\n    const dispatch = createEventDispatcher();\n</script>\n\n<button on:click={() => dispatch('increment', 1)}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-member-expression-update/_config.js",
    "content": "import { test } from '../../test';\n\n// binding member expression shouldn't invalidate the property name\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tassert.equal(div, component.container.a);\n\t\tassert.deepEqual(component.logs.length, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-member-expression-update/main.svelte",
    "content": "<script>\n\texport let container = {};\n\texport let paths = ['a'];\n\texport let logs = [];\n\n\t$: paths && logs.push('paths updated');\n</script>\n\n<div bind:this={container[paths[0]]}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-multiple/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\t\tconst first_h1 = target.querySelector('h1');\n\n\t\tassert.deepEqual(logs, [undefined, first_h1]);\n\n\t\tflushSync(() => {\n\t\t\tb3.click();\n\t\t});\n\n\t\tconst third_h1 = target.querySelector('h1');\n\n\t\tassert.deepEqual(logs, [undefined, first_h1, third_h1]);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [undefined, first_h1, third_h1, target.querySelector('h1')]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-multiple/main.svelte",
    "content": "<script>\n\tlet activeTab = 0;\n\tlet activeHeading;\n\n\t$: console.log(activeHeading);\n</script>\n\n<div class=\"tabs\">\n\t<div class=\"tab-toggles\">\n\t\t<button class:active={activeTab === 0} on:click={() => activeTab = 0}>Tab 1</button>\n\t\t<button class:active={activeTab === 1} on:click={() => activeTab = 1}>Tab 2</button>\n\t\t<button class:active={activeTab === 2} on:click={() => activeTab = 2}>Tab 3</button>\n\t</div>\n\t<div class=\"tab-content\">\n\t\t{#if activeTab === 0}\n\t\t\t<div><h1 bind:this={activeHeading}>Tab 1</h1></div>\n\t\t{/if}\n\t\t{#if activeTab === 1}\n\t\t\t<div><h1 bind:this={activeHeading}>Tab 2</h1></div>\n\t\t{/if}\n\t\t{#if activeTab === 2}\n\t\t\t<div><h1 bind:this={activeHeading}>Tab 3</h1></div>\n\t\t{/if}\n\t</div>\n\t<duiv>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-no-innerhtml/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><canvas></canvas></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst canvas = target.querySelector('canvas');\n\t\tassert.equal(canvas, component.foo);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-no-innerhtml/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<div><canvas bind:this={foo}></canvas></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-store/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // doesn't work in SSR\n\thtml: '<div>object</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst foo = writable();\n</script>\n\n<div bind:this={$foo}>{typeof $foo}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-unset/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: '<canvas data-x=\"true\"></canvas>',\n\n\ttest({ assert, component, target }) {\n\t\tlet canvas = target.querySelector('canvas');\n\t\tok(canvas);\n\n\t\tassert.equal(canvas, component.foo);\n\t\tassert.equal(canvas.getAttribute('data-x'), 'true');\n\n\t\tcomponent.x = false;\n\t\tcanvas = target.querySelector('canvas');\n\t\tok(canvas);\n\t\tassert.equal(canvas, component.foo);\n\t\tassert.equal(canvas.getAttribute('data-x'), 'false');\n\n\t\tcomponent.x = true;\n\t\tcanvas = target.querySelector('canvas');\n\t\tok(canvas);\n\t\tassert.equal(canvas, component.foo);\n\t\tassert.equal(canvas.getAttribute('data-x'), 'true');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-unset/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let x;\n</script>\n\n{#if x}\n\t<canvas bind:this={foo} data-x='true'></canvas>\n{:else}\n\t<canvas bind:this={foo} data-x='false'></canvas>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-with-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>foo</div><div>bar</div><div>baz</div>\n\t<span>foo</span><span>bar</span><span>baz</span>\n\t<ul><li><p>foo</p></li><li><p>bar</p></li><li><p>baz</p></li></ul>\n\t<ul><li><hr /></li><li><hr /></li><li><hr /></li></ul>`,\n\n\ttest({ assert, component, target }) {\n\t\tlet divs = target.querySelectorAll('div');\n\t\tassert.equal(component.divs.length, 3, 'three divs are registered (unkeyed array)');\n\t\t// @ts-ignore\n\t\tcomponent.divs.forEach((e, i) => {\n\t\t\tassert.equal(e, divs[i], `div ${i} is correct (unkeyed array)`);\n\t\t});\n\n\t\tlet spans = target.querySelectorAll('span');\n\t\tassert.equal(\n\t\t\tObject.keys(component.spans).length,\n\t\t\t3,\n\t\t\t'three spans are registered (unkeyed object)'\n\t\t);\n\t\t// @ts-ignore\n\t\tcomponent.items.forEach((e, i) => {\n\t\t\tassert.equal(\n\t\t\t\tcomponent.spans[`-${e}${i}`],\n\t\t\t\tspans[i],\n\t\t\t\t`span -${e}${i} is correct (unkeyed object)`\n\t\t\t);\n\t\t});\n\n\t\tlet ps = target.querySelectorAll('p');\n\t\tassert.equal(component.ps.length, 3, 'three ps are registered (keyed array)');\n\t\t// @ts-ignore\n\t\tcomponent.ps.forEach((e, i) => {\n\t\t\tassert.equal(e, ps[i], `p ${i} is correct (keyed array)`);\n\t\t});\n\n\t\tlet hrs = target.querySelectorAll('hr');\n\t\tassert.equal(Object.keys(component.hrs).length, 3, 'three hrs are registered (keyed object)');\n\t\t// @ts-ignore\n\t\tcomponent.items.forEach((e, i) => {\n\t\t\tassert.equal(component.hrs[e], hrs[i], `hr ${e} is correct (keyed object)`);\n\t\t});\n\n\t\tcomponent.items = ['foo', 'baz'];\n\t\tassert.equal(component.divs.length, 3, 'the divs array is still 3 long');\n\t\tassert.equal(component.divs[2], null, 'the last div is unregistered');\n\t\tassert.equal(component.ps[2], null, 'the last p is unregistered');\n\t\tassert.equal(component.spans['-bar1'], null, 'the bar span is unregistered');\n\t\tassert.equal(component.hrs.bar, null, 'the bar hr is unregistered');\n\n\t\tdivs = target.querySelectorAll('div');\n\t\t// @ts-ignore\n\t\tcomponent.divs.forEach((e, i) => {\n\t\t\tassert.equal(e, divs[i], `div ${i} is still correct`);\n\t\t});\n\n\t\tspans = target.querySelectorAll('span');\n\t\t// @ts-ignore\n\t\tcomponent.items.forEach((e, i) => {\n\t\t\tassert.equal(component.spans[`-${e}${i}`], spans[i], `span -${e}${i} is still correct`);\n\t\t});\n\n\t\tps = target.querySelectorAll('p');\n\t\t// @ts-ignore\n\t\tcomponent.ps.forEach((e, i) => {\n\t\t\tassert.equal(e, ps[i], `p ${i} is still correct`);\n\t\t});\n\n\t\thrs = target.querySelectorAll('hr');\n\t\t// @ts-ignore\n\t\tcomponent.items.forEach((e, i) => {\n\t\t\tassert.equal(component.hrs[e], hrs[i], `hr ${e} is still correct`);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-this-with-context/main.svelte",
    "content": "<script>\n  export let items = ['foo', 'bar', 'baz'];\n\texport let divs = [];\n\texport let spans = {};\n\texport let ps = [];\n\texport let hrs = {};\n\tconst prefix = '-';\n</script>\n\n{#each items as item, j}\n\t<div bind:this={divs[j]}>{item}</div>\n{/each}\n\n{#each Object.entries(items) as [ key, val ] }\n\t<span bind:this=\"{spans[prefix + val + key]}\">{val}</span>\n{/each}\n\n<ul>\n\t{#each items as thing, j (thing)}\n\t\t<li><p bind:this=\"{ps[j]}\">{thing}</p></li>\n\t{/each}\n</ul>\n\n<ul>\n\t{#each items as sure, j (sure)}\n\t\t<li><hr bind:this=\"{hrs[sure]}\" /></li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-using-props/TextInput.svelte",
    "content": "<script>\n    export let actualValue;\n    let x = $$props;\n</script>\n\n<input bind:value={actualValue}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-using-props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'changed';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>changed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-using-props/main.svelte",
    "content": "<script>\n\timport Input from './TextInput.svelte';\n\texport let actualValue = '';\n</script>\n\n<Input bind:actualValue />\n<p>{actualValue}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-value-prop/Field.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<input type=\"text\" bind:value />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-value-prop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\taccessors: false,\n\thtml: `<input type=\"text\">\\naaa`,\n\tssrHtml: `<input type=\"text\" value=\"aaa\">\\naaa`,\n\n\ttest({ assert, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'aaa2';\n\t\tinput.dispatchEvent(event);\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<input type=\"text\">\\naaa2`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/binding-value-prop/main.svelte",
    "content": "<script>\n\timport Field from './Field.svelte';\n\timport { writable } from 'svelte/store';\n\n\tconst value = writable('aaa');\n\n</script>\n\n<Field bind:value={$value} /> {$value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-before-onmount/One.svelte",
    "content": "<script>\n  import {onMount} from 'svelte';\n  import Two from './Two.svelte';\n\n  export let snapshot;\n  export let foo;\n\n  onMount(() => {\n    snapshot = foo();\n  });\n</script>\n\n<Two bind:foo />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-before-onmount/Two.svelte",
    "content": "<script>\n\texport let bar = 1;\n\n\texport function foo() {\n\t\treturn bar * 2;\n\t}\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-before-onmount/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component }) {\n\t\tassert.equal(component.one.snapshot, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-before-onmount/main.svelte",
    "content": "<script>\n\timport One from './One.svelte';\n\n\texport let one;\n</script>\n\n<One bind:this={one}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/Foo.svelte",
    "content": "<script>\n\texport let bar = 1;\n\texport let baz = 2;\n\n\texport function double() {\n\t\tbar = bar * 2;\n\t\tbaz = baz * 2;\n\t}\n</script>\n\n<p>bar in Foo: {bar}</p>\n<p>baz in Foo: {baz}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tconst { foo, p } = component;\n\n\t\t/** @type {string[]} */\n\t\tconst values = [];\n\n\t\tObject.defineProperty(p.childNodes[0], 'nodeValue', {\n\t\t\tset(value) {\n\t\t\t\tvalues.push('' + value);\n\t\t\t}\n\t\t});\n\n\t\tfoo.double();\n\t\tflushSync();\n\n\t\tassert.deepEqual(values, ['6']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let p;\n\n\texport let foo;\n\texport let bar;\n\texport let baz;\n</script>\n\n<Foo bind:this={foo} bind:bar bind:baz/>\n<p bind:this={p}>{bar + baz}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-global-dependency/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<input type=\"text\">',\n\tssrHtml: '<input type=\"text\" value=\"\">'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bindings-global-dependency/main.svelte",
    "content": "<script>\n\tlet data = {\n\t\ta: {value:''}\n\t}\n</script>\n\n{#each Object.values(data) as object}\n\t<input type=\"text\" bind:value={object.value} />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>0</p>\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>5</p>\n\t\t<p>6</p>\n\t\t<p>7</p>\n\t\t<p>8</p>\n\t\t<p>9</p>\n\t\t<p>10</p>\n\t\t<p>11</p>\n\t\t<p>12</p>\n\t\t<p>13</p>\n\t\t<p>14</p>\n\t\t<p>15</p>\n\t\t<p>16</p>\n\t\t<p>17</p>\n\t\t<p>18</p>\n\t\t<p>19</p>\n\t\t<p>20</p>\n\t\t<p>21</p>\n\t\t<p>22</p>\n\t\t<p>23</p>\n\t\t<p>24</p>\n\t\t<p>25</p>\n\t\t<p>26</p>\n\t\t<p>27</p>\n\t\t<p>28</p>\n\t\t<p>29</p>\n\t\t<p>30</p>\n\t\t<p>31</p>\n\t\t<p>32</p>\n\t\t<p>33</p>\n\t\t<p>34</p>\n\t\t<p>35</p>\n\t\t<p>36</p>\n\t\t<p>37</p>\n\t\t<p>38</p>\n\t\t<p>39</p>\n\t\t<p>40</p>\n\t\t<p>5:36</p>\n\t\t<p>6:37</p>\n\t\t<p>38</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.reads = {};\n\n\t\tcomponent._0 = 'a';\n\t\tcomponent._30 = 'b';\n\t\tcomponent._31 = 'c';\n\t\tcomponent._32 = 'd';\n\t\tcomponent._40 = 'e';\n\n\t\tcomponent._5 = 'f';\n\t\tcomponent._6 = 'g';\n\t\tcomponent._36 = 'h';\n\t\tcomponent._37 = 'i';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a</p>\n\t\t\t<p>1</p>\n\t\t\t<p>2</p>\n\t\t\t<p>3</p>\n\t\t\t<p>4</p>\n\t\t\t<p>f</p>\n\t\t\t<p>g</p>\n\t\t\t<p>7</p>\n\t\t\t<p>8</p>\n\t\t\t<p>9</p>\n\t\t\t<p>10</p>\n\t\t\t<p>11</p>\n\t\t\t<p>12</p>\n\t\t\t<p>13</p>\n\t\t\t<p>14</p>\n\t\t\t<p>15</p>\n\t\t\t<p>16</p>\n\t\t\t<p>17</p>\n\t\t\t<p>18</p>\n\t\t\t<p>19</p>\n\t\t\t<p>20</p>\n\t\t\t<p>21</p>\n\t\t\t<p>22</p>\n\t\t\t<p>23</p>\n\t\t\t<p>24</p>\n\t\t\t<p>25</p>\n\t\t\t<p>26</p>\n\t\t\t<p>27</p>\n\t\t\t<p>28</p>\n\t\t\t<p>29</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t\t<p>33</p>\n\t\t\t<p>34</p>\n\t\t\t<p>35</p>\n\t\t\t<p>h</p>\n\t\t\t<p>i</p>\n\t\t\t<p>38</p>\n\t\t\t<p>39</p>\n\t\t\t<p>e</p>\n\t\t\t<p>f:h</p>\n\t\t\t<p>g:i</p>\n\t\t\t<p>38</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(component.reads, {\n\t\t\t_0: 1,\n\t\t\t_5: 3,\n\t\t\t_6: 3,\n\t\t\t_30: 1,\n\t\t\t_31: 1,\n\t\t\t_32: 1,\n\t\t\t_36: 3,\n\t\t\t_37: 3,\n\t\t\t_40: 1\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow/main.svelte",
    "content": "<script>\n\timport { untrack } from \"svelte\";\n\t\n\texport let reads = {};\n\n\texport let _0 = '0';\n\texport let _1 = '1';\n\texport let _2 = '2';\n\texport let _3 = '3';\n\texport let _4 = '4';\n\texport let _5 = '5';\n\texport let _6 = '6';\n\texport let _7 = '7';\n\texport let _8 = '8';\n\texport let _9 = '9';\n\texport let _10 = '10';\n\texport let _11 = '11';\n\texport let _12 = '12';\n\texport let _13 = '13';\n\texport let _14 = '14';\n\texport let _15 = '15';\n\texport let _16 = '16';\n\texport let _17 = '17';\n\texport let _18 = '18';\n\texport let _19 = '19';\n\texport let _20 = '20';\n\texport let _21 = '21';\n\texport let _22 = '22';\n\texport let _23 = '23';\n\texport let _24 = '24';\n\texport let _25 = '25';\n\texport let _26 = '26';\n\texport let _27 = '27';\n\texport let _28 = '28';\n\texport let _29 = '29';\n\texport let _30 = '30';\n\texport let _31 = '31';\n\texport let _32 = '32';\n\texport let _33 = '33';\n\texport let _34 = '34';\n\texport let _35 = '35';\n\texport let _36 = '36';\n\texport let _37 = '37';\n\texport let _38 = '38';\n\texport let _39 = '39';\n\texport let _40 = '40';\n\n\tconst read = (value, label) => {\n\t\tuntrack(() => {\n\t\t\tif (!reads[label]) reads[label] = 0;\n\t\t\treads[label] += 1;\n\t\t});\n\n\t\treturn value;\n\t};\n\n\t$: foo = read(_6, '_6') + ':' + read(_37, '_37');\n\t$: bar = read(_38, '_38');\n</script>\n\n<p>{read(_0, '_0')}</p>\n<p>{read(_1, '_1')}</p>\n<p>{read(_2, '_2')}</p>\n<p>{read(_3, '_3')}</p>\n<p>{read(_4, '_4')}</p>\n<p>{read(_5, '_5')}</p>\n<p>{read(_6, '_6')}</p>\n<p>{read(_7, '_7')}</p>\n<p>{read(_8, '_8')}</p>\n<p>{read(_9, '_9')}</p>\n<p>{read(_10, '_10')}</p>\n<p>{read(_11, '_11')}</p>\n<p>{read(_12, '_12')}</p>\n<p>{read(_13, '_13')}</p>\n<p>{read(_14, '_14')}</p>\n<p>{read(_15, '_15')}</p>\n<p>{read(_16, '_16')}</p>\n<p>{read(_17, '_17')}</p>\n<p>{read(_18, '_18')}</p>\n<p>{read(_19, '_19')}</p>\n<p>{read(_20, '_20')}</p>\n<p>{read(_21, '_21')}</p>\n<p>{read(_22, '_22')}</p>\n<p>{read(_23, '_23')}</p>\n<p>{read(_24, '_24')}</p>\n<p>{read(_25, '_25')}</p>\n<p>{read(_26, '_26')}</p>\n<p>{read(_27, '_27')}</p>\n<p>{read(_28, '_28')}</p>\n<p>{read(_29, '_29')}</p>\n<p>{read(_30, '_30')}</p>\n<p>{read(_31, '_31')}</p>\n<p>{read(_32, '_32')}</p>\n<p>{read(_33, '_33')}</p>\n<p>{read(_34, '_34')}</p>\n<p>{read(_35, '_35')}</p>\n<p>{read(_36, '_36')}</p>\n<p>{read(_37, '_37')}</p>\n<p>{read(_38, '_38')}</p>\n<p>{read(_39, '_39')}</p>\n<p>{read(_40, '_40')}</p>\n\n<p>{read(_5, '_5') + ':' + read(_36, '_36')}</p>\n<p>{foo}</p>\n<p>{bar}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'potato is not defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-2/main.svelte",
    "content": "<script>\n\texport let x1;\n\texport let x2;\n\texport let x3;\n\texport let x4;\n\texport let x5;\n\texport let x6;\n\texport let x7;\n\texport let x8;\n\texport let x9;\n\texport let x10;\n\texport let x11;\n\texport let x12;\n\texport let x13;\n\texport let x14;\n\texport let x15;\n\texport let x16;\n\texport let x17;\n\texport let x18;\n\texport let x19;\n\texport let x20;\n\texport let x21;\n\texport let x22;\n\texport let x23;\n\texport let x24;\n\texport let x25;\n\texport let x26;\n\texport let x27;\n\texport let x28;\n\texport let x29;\n\texport let x30;\n\texport let x31;\n\texport let x32;\n</script>\n<p {...potato}>{x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23 + x24 + x25 + x26 + x27 + x28 + x29 + x30 + x31 + x32}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'A is not defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-3/main.svelte",
    "content": "<script>\n\tlet x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31;\n</script>\n<A>foo</A>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-if/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t012345678910111213141516171819202122232425262728293031323334353637383940\n\t\texpected: true\n\t\tif: true\n\t\t<button></button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t112345678910111213141516171819202122232425262728293031323334353637383940\n\t\t\texpected: false\n\t\t\tif: false\n\t\t\t<div></div>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-if/main.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\texport let _a = [];\n\texport let _0 = '0';\n\texport let _1 = '1';\n\texport let _2 = '2';\n\texport let _3 = '3';\n\texport let _4 = '4';\n\texport let _5 = '5';\n\texport let _6 = '6';\n\texport let _7 = '7';\n\texport let _8 = '8';\n\texport let _9 = '9';\n\texport let _10 = '10';\n\texport let _11 = '11';\n\texport let _12 = '12';\n\texport let _13 = '13';\n\texport let _14 = '14';\n\texport let _15 = '15';\n\texport let _16 = '16';\n\texport let _17 = '17';\n\texport let _18 = '18';\n\texport let _19 = '19';\n\texport let _20 = '20';\n\texport let _21 = '21';\n\texport let _22 = '22';\n\texport let _23 = '23';\n\texport let _24 = '24';\n\texport let _25 = '25';\n\texport let _26 = '26';\n\texport let _27 = '27';\n\texport let _28 = '28';\n\texport let _29 = '29';\n\texport let _30 = '30';\n\texport let _31 = '31';\n\texport let _32 = '32';\n\texport let _33 = '33';\n\texport let _34 = '34';\n\texport let _35 = '35';\n\texport let _36 = '36';\n\texport let _37 = '37';\n\texport let _38 = '38';\n\texport let _39 = '39';\n\texport let _40 = '40';\n\n\tfunction update() {\n\t\t_0 = '1';\n\t}\n</script>\n\n\n{_0}{_1}{_2}{_3}{_4}{_5}{_6}{_7}{_8}{_9}{_10}{_11}{_12}{_13}{_14}{_15}{_16}{_17}{_18}{_19}{_20}{_21}{_22}{_23}{_24}{_25}{_26}{_27}{_28}{_29}{_30}{_31}{_32}{_33}{_34}{_35}{_36}{_37}{_38}{_39}{_40}\n\nexpected: {_a.indexOf(_0) && _0 === '0' && _1 === '1'}\n{#if _a.indexOf(_0) && _0 === '0' && _1 === '1'}\nif: true\n{:else}\nif: false\n<div out:fade></div>\n{/if}\n\n<button on:click={update}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-if-2/_config.js",
    "content": "import { test } from '../../test';\n\n// `bitmask-overflow-if` tests the case where the if condition is made of first 32 variables\n// this tests the case where the if condition is made of the next 32 variables\nexport default test({\n\thtml: `\n\t\t012345678910111213141516171819202122232425262728293031323334353637383940\n\t\texpected: true\n\t\tif: true\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent._40 = '-';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t0123456789101112131415161718192021222324252627282930313233343536373839-\n\t\t\texpected: false\n\t\t\tif: false\n\t\t\t<div></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-if-2/main.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\texport let _0 = '0';\n\texport let _1 = '1';\n\texport let _2 = '2';\n\texport let _3 = '3';\n\texport let _4 = '4';\n\texport let _5 = '5';\n\texport let _6 = '6';\n\texport let _7 = '7';\n\texport let _8 = '8';\n\texport let _9 = '9';\n\texport let _10 = '10';\n\texport let _11 = '11';\n\texport let _12 = '12';\n\texport let _13 = '13';\n\texport let _14 = '14';\n\texport let _15 = '15';\n\texport let _16 = '16';\n\texport let _17 = '17';\n\texport let _18 = '18';\n\texport let _19 = '19';\n\texport let _20 = '20';\n\texport let _21 = '21';\n\texport let _22 = '22';\n\texport let _23 = '23';\n\texport let _24 = '24';\n\texport let _25 = '25';\n\texport let _26 = '26';\n\texport let _27 = '27';\n\texport let _28 = '28';\n\texport let _29 = '29';\n\texport let _30 = '30';\n\texport let _31 = '31';\n\texport let _32 = '32';\n\texport let _33 = '33';\n\texport let _34 = '34';\n\texport let _35 = '35';\n\texport let _36 = '36';\n\texport let _37 = '37';\n\texport let _38 = '38';\n\texport let _39 = '39';\n\texport let _40 = '40';\n\texport let _a = ['40'];\n</script>\n\n\n{_0}{_1}{_2}{_3}{_4}{_5}{_6}{_7}{_8}{_9}{_10}{_11}{_12}{_13}{_14}{_15}{_16}{_17}{_18}{_19}{_20}{_21}{_22}{_23}{_24}{_25}{_26}{_27}{_28}{_29}{_30}{_31}{_32}{_33}{_34}{_35}{_36}{_37}{_38}{_39}{_40}\n\nexpected: {_a.indexOf(_40) > -1 && _40 === '40' && _39 === '39'}\n{#if _a.indexOf(_40) > -1 && _40 === '40' && _39 === '39'}\nif: true\n{:else}\nif: false\n<div out:fade></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot/Echo.svelte",
    "content": "<script>\n\texport let dummy;\n</script>\n\n<slot dummy={dummy}></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>0</p>\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>5</p>\n\t\t<p>6</p>\n\t\t<p>7</p>\n\t\t<p>8</p>\n\t\t<p>9</p>\n\t\t<p>10</p>\n\t\t<p>11</p>\n\t\t<p>12</p>\n\t\t<p>13</p>\n\t\t<p>14</p>\n\t\t<p>15</p>\n\t\t<p>16</p>\n\t\t<p>17</p>\n\t\t<p>18</p>\n\t\t<p>19</p>\n\t\t<p>20</p>\n\t\t<p>21</p>\n\t\t<p>22</p>\n\t\t<p>23</p>\n\t\t<p>24</p>\n\t\t<p>25</p>\n\t\t<p>26</p>\n\t\t<p>27</p>\n\t\t<p>28</p>\n\t\t<p>29</p>\n\t\t<p>30</p>\n\t\t<p>31</p>\n\t\t<p>32</p>\n\t\t<p>33</p>\n\t\t<p>34</p>\n\t\t<p>35</p>\n\t\t<p>36</p>\n\t\t<p>37</p>\n\t\t<p>38</p>\n\t\t<p>39</p>\n\t\t<p>40</p>\n\t\t<p>5:36</p>\n\t\t<p>6:37</p>\n\t\t<p>38</p>\n\t\t<p>0</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.reads = {};\n\n\t\tcomponent._0 = 'a';\n\t\tcomponent._30 = 'b';\n\t\tcomponent._31 = 'c';\n\t\tcomponent._32 = 'd';\n\t\tcomponent._40 = 'e';\n\n\t\tcomponent._5 = 'f';\n\t\tcomponent._6 = 'g';\n\t\tcomponent._36 = 'h';\n\t\tcomponent._37 = 'i';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a</p>\n\t\t\t<p>1</p>\n\t\t\t<p>2</p>\n\t\t\t<p>3</p>\n\t\t\t<p>4</p>\n\t\t\t<p>f</p>\n\t\t\t<p>g</p>\n\t\t\t<p>7</p>\n\t\t\t<p>8</p>\n\t\t\t<p>9</p>\n\t\t\t<p>10</p>\n\t\t\t<p>11</p>\n\t\t\t<p>12</p>\n\t\t\t<p>13</p>\n\t\t\t<p>14</p>\n\t\t\t<p>15</p>\n\t\t\t<p>16</p>\n\t\t\t<p>17</p>\n\t\t\t<p>18</p>\n\t\t\t<p>19</p>\n\t\t\t<p>20</p>\n\t\t\t<p>21</p>\n\t\t\t<p>22</p>\n\t\t\t<p>23</p>\n\t\t\t<p>24</p>\n\t\t\t<p>25</p>\n\t\t\t<p>26</p>\n\t\t\t<p>27</p>\n\t\t\t<p>28</p>\n\t\t\t<p>29</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t\t<p>33</p>\n\t\t\t<p>34</p>\n\t\t\t<p>35</p>\n\t\t\t<p>h</p>\n\t\t\t<p>i</p>\n\t\t\t<p>38</p>\n\t\t\t<p>39</p>\n\t\t\t<p>e</p>\n\t\t\t<p>f:h</p>\n\t\t\t<p>g:i</p>\n\t\t\t<p>38</p>\n\t\t\t<p>a</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(component.reads, {\n\t\t\t_0: 1,\n\t\t\t_5: 3,\n\t\t\t_6: 3,\n\t\t\t_30: 1,\n\t\t\t_31: 1,\n\t\t\t_32: 1,\n\t\t\t_36: 3,\n\t\t\t_37: 3,\n\t\t\t_40: 1\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot/main.svelte",
    "content": "<script>\n\timport Echo from './Echo.svelte';\n\timport { untrack } from \"svelte\";\n\n\texport let reads = {};\n\n\texport let _0 = '0';\n\texport let _1 = '1';\n\texport let _2 = '2';\n\texport let _3 = '3';\n\texport let _4 = '4';\n\texport let _5 = '5';\n\texport let _6 = '6';\n\texport let _7 = '7';\n\texport let _8 = '8';\n\texport let _9 = '9';\n\texport let _10 = '10';\n\texport let _11 = '11';\n\texport let _12 = '12';\n\texport let _13 = '13';\n\texport let _14 = '14';\n\texport let _15 = '15';\n\texport let _16 = '16';\n\texport let _17 = '17';\n\texport let _18 = '18';\n\texport let _19 = '19';\n\texport let _20 = '20';\n\texport let _21 = '21';\n\texport let _22 = '22';\n\texport let _23 = '23';\n\texport let _24 = '24';\n\texport let _25 = '25';\n\texport let _26 = '26';\n\texport let _27 = '27';\n\texport let _28 = '28';\n\texport let _29 = '29';\n\texport let _30 = '30';\n\texport let _31 = '31';\n\texport let _32 = '32';\n\texport let _33 = '33';\n\texport let _34 = '34';\n\texport let _35 = '35';\n\texport let _36 = '36';\n\texport let _37 = '37';\n\texport let _38 = '38';\n\texport let _39 = '39';\n\texport let _40 = '40';\n\n\tconst read = (value, label) => {\n\t\tuntrack(() => {\n\t\t\tif (!reads[label]) reads[label] = 0;\n\t\t\treads[label] += 1;\n\t\t});\n\n\t\treturn value;\n\t};\n\n\t$: foo = read(_6, '_6') + ':' + read(_37, '_37');\n\t$: bar = read(_38, '_38');\n</script>\n\n<Echo dummy={_0} let:dummy>\n\t<p>{read(_0, '_0')}</p>\n\t<p>{read(_1, '_1')}</p>\n\t<p>{read(_2, '_2')}</p>\n\t<p>{read(_3, '_3')}</p>\n\t<p>{read(_4, '_4')}</p>\n\t<p>{read(_5, '_5')}</p>\n\t<p>{read(_6, '_6')}</p>\n\t<p>{read(_7, '_7')}</p>\n\t<p>{read(_8, '_8')}</p>\n\t<p>{read(_9, '_9')}</p>\n\t<p>{read(_10, '_10')}</p>\n\t<p>{read(_11, '_11')}</p>\n\t<p>{read(_12, '_12')}</p>\n\t<p>{read(_13, '_13')}</p>\n\t<p>{read(_14, '_14')}</p>\n\t<p>{read(_15, '_15')}</p>\n\t<p>{read(_16, '_16')}</p>\n\t<p>{read(_17, '_17')}</p>\n\t<p>{read(_18, '_18')}</p>\n\t<p>{read(_19, '_19')}</p>\n\t<p>{read(_20, '_20')}</p>\n\t<p>{read(_21, '_21')}</p>\n\t<p>{read(_22, '_22')}</p>\n\t<p>{read(_23, '_23')}</p>\n\t<p>{read(_24, '_24')}</p>\n\t<p>{read(_25, '_25')}</p>\n\t<p>{read(_26, '_26')}</p>\n\t<p>{read(_27, '_27')}</p>\n\t<p>{read(_28, '_28')}</p>\n\t<p>{read(_29, '_29')}</p>\n\t<p>{read(_30, '_30')}</p>\n\t<p>{read(_31, '_31')}</p>\n\t<p>{read(_32, '_32')}</p>\n\t<p>{read(_33, '_33')}</p>\n\t<p>{read(_34, '_34')}</p>\n\t<p>{read(_35, '_35')}</p>\n\t<p>{read(_36, '_36')}</p>\n\t<p>{read(_37, '_37')}</p>\n\t<p>{read(_38, '_38')}</p>\n\t<p>{read(_39, '_39')}</p>\n\t<p>{read(_40, '_40')}</p>\n\n\t<p>{read(_5, '_5') + ':' + read(_36, '_36')}</p>\n\t<p>{foo}</p>\n\t<p>{bar}</p>\n\n\t<p>{dummy}</p>\n</Echo>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-2/Echo.svelte",
    "content": "<script>\n\texport let d1 = 'd1';\n\texport let d2 = 'd2';\n\texport let d3 = 'd3';\n\texport let d4 = 'd4';\n\texport let d5 = 'd5';\n\texport let d6 = 'd6';\n\texport let d7 = 'd7';\n\texport let d8 = 'd8';\n\texport let d9 = 'd9';\n\texport let d10 = 'd10';\n\texport let d11 = 'd11';\n\texport let d12 = 'd12';\n\texport let d13 = 'd13';\n\texport let d14 = 'd14';\n\texport let d15 = 'd15';\n\texport let d16 = 'd16';\n\texport let d17 = 'd17';\n\texport let d18 = 'd18';\n\texport let d19 = 'd19';\n\texport let d20 = 'd20';\n\texport let d21 = 'd21';\n\texport let d22 = 'd22';\n\texport let d23 = 'd23';\n\texport let d24 = 'd24';\n\texport let d25 = 'd25';\n\texport let d26 = 'd26';\n\texport let d27 = 'd27';\n\texport let d28 = 'd28';\n\texport let d29 = 'd29';\n\texport let d30 = 'd30';\n\texport let d31 = 'd31';\n\texport let d32 = 'd32';\n\texport let d33 = 'd33';\n\n\t$: dummy = d32 + ':' + d33;\n</script>\n\n<p>{d1}</p>\n<p>{d2}</p>\n<p>{d3}</p>\n<p>{d4}</p>\n<p>{d5}</p>\n<p>{d6}</p>\n<p>{d7}</p>\n<p>{d8}</p>\n<p>{d9}</p>\n<p>{d10}</p>\n<p>{d11}</p>\n<p>{d12}</p>\n<p>{d13}</p>\n<p>{d14}</p>\n<p>{d15}</p>\n<p>{d16}</p>\n<p>{d17}</p>\n<p>{d18}</p>\n<p>{d19}</p>\n<p>{d20}</p>\n<p>{d21}</p>\n<p>{d22}</p>\n<p>{d23}</p>\n<p>{d24}</p>\n<p>{d25}</p>\n<p>{d26}</p>\n<p>{d27}</p>\n<p>{d28}</p>\n<p>{d29}</p>\n<p>{d30}</p>\n<p>{d31}</p>\n<p>{d32}</p>\n<p>{d33}</p>\n\n<slot dummy={dummy}></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<p>d1</p>\n\t<p>d2</p>\n\t<p>d3</p>\n\t<p>d4</p>\n\t<p>d5</p>\n\t<p>d6</p>\n\t<p>d7</p>\n\t<p>d8</p>\n\t<p>d9</p>\n\t<p>d10</p>\n\t<p>d11</p>\n\t<p>d12</p>\n\t<p>d13</p>\n\t<p>d14</p>\n\t<p>d15</p>\n\t<p>d16</p>\n\t<p>d17</p>\n\t<p>d18</p>\n\t<p>d19</p>\n\t<p>d20</p>\n\t<p>d21</p>\n\t<p>d22</p>\n\t<p>d23</p>\n\t<p>d24</p>\n\t<p>d25</p>\n\t<p>d26</p>\n\t<p>d27</p>\n\t<p>d28</p>\n\t<p>d29</p>\n\t<p>d30</p>\n\t<p>d31</p>\n\t<p>2</p>\n\t<p>1</p>\n\t<p>0:1</p>\n\t<p>2:1</p>\n\t<p>0</p>\n\t<p>1</p>\n\t<p>2</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.reads = {};\n\n\t\tcomponent._0 = 'a';\n\t\tcomponent._1 = 'b';\n\t\tcomponent._2 = 'c';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>d1</p>\n\t\t\t<p>d2</p>\n\t\t\t<p>d3</p>\n\t\t\t<p>d4</p>\n\t\t\t<p>d5</p>\n\t\t\t<p>d6</p>\n\t\t\t<p>d7</p>\n\t\t\t<p>d8</p>\n\t\t\t<p>d9</p>\n\t\t\t<p>d10</p>\n\t\t\t<p>d11</p>\n\t\t\t<p>d12</p>\n\t\t\t<p>d13</p>\n\t\t\t<p>d14</p>\n\t\t\t<p>d15</p>\n\t\t\t<p>d16</p>\n\t\t\t<p>d17</p>\n\t\t\t<p>d18</p>\n\t\t\t<p>d19</p>\n\t\t\t<p>d20</p>\n\t\t\t<p>d21</p>\n\t\t\t<p>d22</p>\n\t\t\t<p>d23</p>\n\t\t\t<p>d24</p>\n\t\t\t<p>d25</p>\n\t\t\t<p>d26</p>\n\t\t\t<p>d27</p>\n\t\t\t<p>d28</p>\n\t\t\t<p>d29</p>\n\t\t\t<p>d30</p>\n\t\t\t<p>d31</p>\n\t\t\t<p>c</p>\n\t\t\t<p>b</p>\n\t\t\t<p>a:b</p>\n\t\t\t<p>c:b</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(component.reads, {\n\t\t\t_0: 2,\n\t\t\t_1: 2\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-2/main.svelte",
    "content": "<script>\n\timport Echo from './Echo.svelte';\n\timport { untrack } from \"svelte\";\n\n\texport let reads = {};\n\n\texport let _0 = '0';\n\texport let _1 = '1';\n\texport let _2 = '2';\n\n\tconst read = (value, label) => {\n\t\tuntrack(() => {\n\t\t\tif (!reads[label]) reads[label] = 0;\n\t\t\treads[label] += 1;\n\t\t});\n\n\t\treturn value;\n\t};\n\n\t$: bar = read(_0, '_0') + ':' + read(_1, '_1');\n</script>\n\n<Echo\n\tlet:dummy\n\td33={_1}\n\td32={_2}\n>\n\t<p>{bar}</p>\n\t<p>{dummy}</p>\n\t<p>{_0}</p>\n\t<p>{_1}</p>\n\t<p>{_2}</p>\n</Echo>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-3/Echo.svelte",
    "content": "<script>\n\tlet dummy = 0;\n\tfunction increment () {\n\t\tdummy = 1;\n\t}\n</script>\n\n<slot dummy={dummy}></slot>\n<button on:click={increment}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t<p>0</p>\n\t\t<button></button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\t// change from inside\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\t// change from outside\n\t\tcomponent._0 = 'a';\n\t\tcomponent._40 = 'b';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39b</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-3/main.svelte",
    "content": "<script>\n\timport Echo from './Echo.svelte';\n\n\texport let _0 = '_0', _1 = '_1', _2 = '_2', _3 = '_3', _4 = '_4', _5 = '_5', _6 = '_6', _7 = '_7', _8 = '_8', _9 = '_9', _10 = '_10', _11 = '_11', _12 = '_12', _13 = '_13', _14 = '_14', _15 = '_15', _16 = '_16', _17 = '_17', _18 = '_18', _19 = '_19', _20 = '_20', _21 = '_21', _22 = '_22', _23 = '_23', _24 = '_24', _25 = '_25', _26 = '_26', _27 = '_27', _28 = '_28', _29 = '_29', _30 = '_30', _31 = '_31', _32 = '_32', _33 = '_33', _34 = '_34', _35 = '_35', _36 = '_36', _37 = '_37', _38 = '_38', _39 = '_39', _40 = '_40';\n</script>\n\n<Echo let:dummy>\n\t<p>{_0}{_1}{_2}{_3}{_4}{_5}{_6}{_7}{_8}{_9}{_10}{_11}{_12}{_13}{_14}{_15}{_16}{_17}{_18}{_19}{_20}{_21}{_22}{_23}{_24}{_25}{_26}{_27}{_28}{_29}{_30}{_31}{_32}{_33}{_34}{_35}{_36}{_37}{_38}{_39}{_40}</p>\n\t<p>{dummy}</p>\n</Echo>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-4/Echo.svelte",
    "content": "<script>\n\texport let _0 = '_0', _1 = '_1', _2 = '_2', _3 = '_3', _4 = '_4', _5 = '_5', _6 = '_6', _7 = '_7', _8 = '_8', _9 = '_9', _10 = '_10', _11 = '_11', _12 = '_12', _13 = '_13', _14 = '_14', _15 = '_15', _16 = '_16', _17 = '_17', _18 = '_18', _19 = '_19', _20 = '_20', _21 = '_21', _22 = '_22', _23 = '_23', _24 = '_24', _25 = '_25', _26 = '_26', _27 = '_27', _28 = '_28', _29 = '_29', _30 = '_30', _31 = '_31', _32 = '_32', _33 = '_33', _34 = '_34', _35 = '_35', _36 = '_36', _37 = '_37', _38 = '_38', _39 = '_39', _40 = '_40';\t\n\tlet dummy = 0;\n\tfunction increment () {\n\t\tdummy = 1;\n\t}\n</script>\n\n<p>{_0}{_1}{_2}{_3}{_4}{_5}{_6}{_7}{_8}{_9}{_10}{_11}{_12}{_13}{_14}{_15}{_16}{_17}{_18}{_19}{_20}{_21}{_22}{_23}{_24}{_25}{_26}{_27}{_28}{_29}{_30}{_31}{_32}{_33}{_34}{_35}{_36}{_37}{_38}{_39}{_40}</p>\n<slot dummy={dummy}></slot>\n<button on:click={increment}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t<p>0</p>\n\t\t<p>0</p>\n\t\t<button></button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\t// change from inside\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t\t<p>0</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\t// change from outside\n\t\tcomponent._0 = 'a';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t\t<p>a</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\t// change from outside through props\n\t\tcomponent._40 = 'b';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39b</p>\n\t\t\t<p>a</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-4/main.svelte",
    "content": "<script>\n\timport Echo from './Echo.svelte';\n\n\texport let _0 = 0, _40;\n\t\n</script>\n\n<Echo _40={_40} let:dummy>\n\t<p>{_0}</p>\n\t<p>{dummy}</p>\n</Echo>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-5/Echo.svelte",
    "content": "<script>\n\texport let _0 = '_0', _1 = '_1', _2 = '_2', _3 = '_3', _4 = '_4', _5 = '_5', _6 = '_6', _7 = '_7', _8 = '_8', _9 = '_9', _10 = '_10', _11 = '_11', _12 = '_12', _13 = '_13', _14 = '_14', _15 = '_15', _16 = '_16', _17 = '_17', _18 = '_18', _19 = '_19', _20 = '_20', _21 = '_21', _22 = '_22', _23 = '_23', _24 = '_24', _25 = '_25', _26 = '_26', _27 = '_27', _28 = '_28', _29 = '_29', _30 = '_30', _31 = '_31', _32 = '_32', _33 = '_33', _34 = '_34', _35 = '_35', _36 = '_36', _37 = '_37', _38 = '_38', _39 = '_39', _40 = '_40';\t\n\texport let b = 'b';\n\tlet dummy = 0;\n\tfunction increment () {\n\t\tdummy = 1;\n\t}\n</script>\n\n<p>{_0}{_1}{_2}{_3}{_4}{_5}{_6}{_7}{_8}{_9}{_10}{_11}{_12}{_13}{_14}{_15}{_16}{_17}{_18}{_19}{_20}{_21}{_22}{_23}{_24}{_25}{_26}{_27}{_28}{_29}{_30}{_31}{_32}{_33}{_34}{_35}{_36}{_37}{_38}{_39}{_40}</p>\n<p>{b}</p>\n<slot dummy={dummy}></slot>\n<button on:click={increment}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t<p>b</p>\n\t\t<p>-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40</p>\n\t\t<p>0</p>\n\t\t<p>0</p>\n\t\t<button></button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\t// change from inside\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t\t<p>b</p>\n\t\t\t<p>-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40</p>\n\t\t\t<p>0</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\t// change from outside\n\t\tcomponent.a = 'AA';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t\t<p>b</p>\n\t\t\t<p>-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40</p>\n\t\t\t<p>AA</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\t// change from outside through props\n\t\tcomponent.b = 'BB';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40</p>\n\t\t\t<p>BB</p>\n\t\t\t<p>-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40</p>\n\t\t\t<p>AA</p>\n\t\t\t<p>1</p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-5/main.svelte",
    "content": "<script>\n\timport Echo from './Echo.svelte';\n\texport let _0 = '-0', _1 = '-1', _2 = '-2', _3 = '-3', _4 = '-4', _5 = '-5', _6 = '-6', _7 = '-7', _8 = '-8', _9 = '-9', _10 = '-10', _11 = '-11', _12 = '-12', _13 = '-13', _14 = '-14', _15 = '-15', _16 = '-16', _17 = '-17', _18 = '-18', _19 = '-19', _20 = '-20', _21 = '-21', _22 = '-22', _23 = '-23', _24 = '-24', _25 = '-25', _26 = '-26', _27 = '-27', _28 = '-28', _29 = '-29', _30 = '-30', _31 = '-31', _32 = '-32', _33 = '-33', _34 = '-34', _35 = '-35', _36 = '-36', _37 = '-37', _38 = '-38', _39 = '-39', _40 = '-40';\t\n\texport let a = 0, b;\n\t\n</script>\n\n<Echo b={b} let:dummy>\n\t<p>{_0}{_1}{_2}{_3}{_4}{_5}{_6}{_7}{_8}{_9}{_10}{_11}{_12}{_13}{_14}{_15}{_16}{_17}{_18}{_19}{_20}{_21}{_22}{_23}{_24}{_25}{_26}{_27}{_28}{_29}{_30}{_31}{_32}{_33}{_34}{_35}{_36}{_37}{_38}{_39}{_40}</p>\n\t<p>{a}</p>\n\t<p>{dummy}</p>\n</Echo>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-6/Slotted.svelte",
    "content": "<script>\n\tlet open = false;\n\tfunction toggle() {\n\t\topen = !open;\n\t}\n</script>\n\n<div on:click={toggle}>\n <slot name=\"target\" {open}></slot>\n\t\n\t<!-- This actually isn't necessary to reproduce. -->\n\t{#if open}\n \t  <slot name=\"content\"></slot>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// overflow bitmask + slot missing `let:`\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button slot=\"target\">Toggle inside 1</button>\n\t\t</div>\n\t\t<button>Toggle outside</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelectorAll('button')[1];\n\t\tconst div = target.querySelector('div');\n\t\tdiv?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<button slot=\"target\">Toggle inside 1</button>\n\t\t\t\t<div slot=\"content\">Open</div>\n\t\t\t</div>\n\t\t\t<button>Toggle outside</button>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<button slot=\"target\">Toggle inside 2</button>\n\t\t\t\t<div slot=\"content\">Open</div>\n\t\t\t</div>\n\t\t\t<button>Toggle outside</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/bitmask-overflow-slot-6/main.svelte",
    "content": "<script>\n\timport Slotted from './Slotted.svelte';\n\tlet lotsOfNumbers = Array.from({length: 50}, () => 1);\n\t\n\tlet [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah] = lotsOfNumbers;\n\t\n\tlet last = 1;\n\tfunction toggle () {\n\t\tlast = 2;\n\t}\n</script>\n\n<Slotted>\n\t<button slot=\"target\">\n\t\tToggle inside {last} \n\t</button>\n\t\n\t<div slot=\"content\">\n\t\tOpen\n\t</div>\n</Slotted>\n\n<button on:click={toggle}>Toggle outside</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/block-expression-assign/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.htmlEqual(target.innerHTML, `<div></div><button>inc</button> [0,0,0,0,0,0,0,0,0]`);\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div></div><button>inc</button> [0,0,0,0,0,0,0,0,0]`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/block-expression-assign/main.svelte",
    "content": "<script>\n    let a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;\n    function inc() {\n        a++;\n        b++;\n        c++;\n        d++;\n        e++;\n        f++;\n        g++;\n        h++;\n        i++;\n    }\n</script>\n\n{#if a = 0}{/if}\n\n{#each [b = 0] as x}{x,''}{/each}\n\n{#key c = 0}{/key}\n\n{#await d = 0}{/await}\n\n{#snippet snip()}{/snippet}\n\n{@render (e = 0, snip)()}\n\n{@html f = 0, ''}\n\n<div {@attach !!(g = 0)}></div>\n\n{#key 1}\n    {@const x = (h = 0)}\n    {x, ''}\n{/key}\n\n{#if 1}\n    {@const x = (i = 0)}\n    {x, ''}\n{/if}\n\n<button on:click={inc}>inc</button>\n[{a},{b},{c},{d},{e},{f},{g},{h},{i}]\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/block-expression-fn-call/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.htmlEqual(target.innerHTML, `<div></div><button data-foo=\"true\">inc</button> 12 - 12`);\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div></div><button data-foo=\"true\">inc</button> 13 - 12`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/block-expression-fn-call/main.svelte",
    "content": "<script>\n    let count1 = 1;\n    let count2 = 1;\n    function fn(ret) {\n        if (count1 > 100) return ret;\n        count1++;\n        count2++;\n        return ret;\n    }\n</script>\n\n{#if fn(false)}{:else if fn(true)}{/if}\n\n{#each fn([]) as x}{x, ''}{/each}\n\n{#key fn(1)}{/key}\n\n{#await fn(Promise.resolve())}{/await}\n\n{#snippet snip()}{/snippet}\n\n{@render fn(snip)()}\n\n{@html fn('')}\n\n<div {@attach fn(() => {})}></div>\n\n{#key 1}\n    {@const x = fn('')}\n    {x}\n{/key}\n\n<button data-foo={fn(true)} on:click={() => count1++}>{fn('inc')}</button>\n{count1} - {count2}\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/block-expression-member-access/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.htmlEqual(target.innerHTML, `<div></div><button>inc</button> 10 - 10`);\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div></div><button>inc</button> 11 - 10`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/block-expression-member-access/main.svelte",
    "content": "<script>\n    let count1 = 1;\n    let count2 = 1;\n    function fn(ret) {\n        if (count1 > 100) return ret;\n        count1++;\n        count2++;\n        return ret;\n    }\n\n    const obj = {\n        get true() { return fn(true) },\n        get false() { return fn(false) },\n        get array() { return fn([]) },\n        get string() { return fn('') },\n        get promise() { return fn(Promise.resolve()) },\n        get snippet() { return fn(snip) },\n        get attachment() { return fn(() => {}) },\n    }\n</script>\n\n{#if obj.false}{:else if obj.true}{/if}\n\n{#each obj.array as x}{x, ''}{/each}\n\n{#key obj.string}{/key}\n\n{#await obj.promise}{/await}\n\n{#snippet snip()}{/snippet}\n\n{@render obj.snippet()}\n\n{@html obj.string}\n\n<div {@attach obj.attachment}></div>\n\n{#key 1}\n    {@const x = obj.string}\n    {x}\n{/key}\n\n<button on:click={() => count1++}>inc</button>\n{count1} - {count2}\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-boolean/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div class=\"one\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-boolean/main.svelte",
    "content": "<div class:one={true}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-helper/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { user: { active: true } };\n\t},\n\n\thtml: '<div class=\"active\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.user = { active: false };\n\n\t\tassert.htmlEqual(target.innerHTML, `<div class></div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-helper/main.svelte",
    "content": "<script>\n  export let user;\n\n  function isActive(user) {\n  return user.active;\n}\n</script>\n\n<div class:active={isActive(user)}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-in-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: ['one', 'two', 'three'],\n\t\t\tselected: 'two'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div></div>\n\t\t<div class=\"selected\"></div>\n\t\t<div></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.selected = 'three';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div></div>\n\t\t\t<div class=\"\"></div>\n\t\t\t<div class=\"selected\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-in-each/main.svelte",
    "content": "<script>\n\texport let things;\n\texport let selected;\n</script>\n\n{#each things as thing}\n\t<div class:selected=\"{selected === thing}\"></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-shortcut/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true, bar: true };\n\t},\n\n\thtml: '<div class=\"foo bar\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"bar\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-shortcut/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n\texport let unused;\n</script>\n\n<div class:foo class:bar class:unused></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true, bar: true, myClass: 'one two' };\n\t},\n\n\thtml: '<div class=\"one two foo bar\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"one two bar\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-class/main.svelte",
    "content": "<script>\n\texport let myClass;\n\texport let foo;\n\texport let bar;\n\texport let unused;\n</script>\n\n<div class={myClass} class:foo class:bar class:unused></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-transition/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { open: false, border: true };\n\t},\n\thtml: '<p>foo</p>',\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.open = true;\n\t\traf.tick(100);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>foo</p><p class=\"red svelte-1yszte8 border\" style=\"\">bar</p>'\n\t\t);\n\n\t\tcomponent.open = false;\n\t\traf.tick(150);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>foo</p><p class=\"red svelte-1yszte8 border\" style=\"overflow: hidden; opacity: 0; border-top-width: 0.5px; border-bottom-width: 0.5px; min-height: 0;\">bar</p>'\n\t\t);\n\t\tcomponent.open = true;\n\t\traf.tick(250);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>foo</p><p class=\"red svelte-1yszte8 border\" style=\"\">bar</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-transition/main.svelte",
    "content": "<script>\n\timport { slide } from \"svelte/transition\";\n\texport let open = false;\n\texport let color = \"red\";\n\texport let border = false;\n</script>\n\n<p>foo</p>\n{#if open}\n\t<p class={color} class:border transition:slide|local={{ duration: 100 }}>bar</p>\n{/if}\n\n<style>\n\t.border {\n\t\tborder: 4px solid black;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div class=\"one two three\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-attribute/main.svelte",
    "content": "<div class=\"one\" class:two={true} class:three={true}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-dynamic-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { myClass: 'one two' };\n\t},\n\n\thtml: '<div class=\"one two three\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.myClass = 'one';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"one three\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-dynamic-attribute/main.svelte",
    "content": "<script>\n\texport let myClass;\n</script>\n\n<div class={myClass} class:three={true}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-dynamic-attribute-and-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tmyClass: 'one two',\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tattributes: { role: 'button' }\n\t\t};\n\t},\n\n\thtml: '<div class=\"one two three\" role=\"button\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.myClass = 'one';\n\t\tcomponent.attributes = {\n\t\t\t'aria-label': 'Test'\n\t\t};\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"one three\" aria-label=\"Test\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-dynamic-attribute-and-spread/main.svelte",
    "content": "<script>\n\texport let myClass;\n\texport let attributes = {};\n</script>\n\n<div class={myClass} class:three={true} {...attributes}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tmyClass: 'one two',\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tattributes: { role: 'button' }\n\t\t};\n\t},\n\n\thtml: '<div class=\"one two\" role=\"button\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.myClass = 'one';\n\t\tcomponent.attributes = {\n\t\t\t'aria-label': 'Test'\n\t\t};\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"one\" aria-label=\"Test\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-spread/main.svelte",
    "content": "<script>\n\texport let myClass;\n\texport let attributes = {};\n</script>\n\n<div class={myClass} {...attributes}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-spread-and-bind/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { primary: true };\n\t},\n\n\thtml: '<div class=\"test-class primary\" role=\"button\"></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.primary = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"test-class primary\" role=\"button\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/class-with-spread-and-bind/main.svelte",
    "content": "<script>\t\n\texport let primary = true;\n\tlet elem;\n</script>\n\n<div\n\tbind:this={elem}\n\tclass=\"test-class\"\n\tclass:primary\n  {...{ role: 'button' }} \n></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component/Widget.svelte",
    "content": "<p>i am a widget</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><p>i am a widget</p></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding/Counter.svelte",
    "content": "<script>\n\texport let count = 0;\n</script>\n\n<button on:click='{() => count += 1}'>+1</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<p>count: 0</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 1);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 1</p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 2);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\texport let x;\n</script>\n\n<Counter bind:count={x}/>\n<p>count: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-accessors/Nested.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<input bind:value />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-accessors/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\t\tassert.equal(input1.value, 'something');\n\t\tassert.equal(input2.value, 'something');\n\n\t\tinput1.value = 'abc';\n\n\t\tinput1.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\t\tassert.equal(input1.value, 'abc');\n\t\tassert.equal(input2.value, 'abc');\n\n\t\ttarget\n\t\t\t.querySelector('button')\n\t\t\t?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.equal(input1.value, 'Reset');\n\t\tassert.equal(input2.value, 'Reset');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-accessors/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\tlet value = 'something'\n\tlet c;\n</script>\n\n<Nested bind:this={c} bind:value />\n<input bind:value />\n\n<button on:click={() => {\n\tc.value = 'Reset';\n}}>Reset</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/Widget.svelte",
    "content": "<script>\n\tlet foo = 42;\n\texport { foo as bar };\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>42</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\tlet bar;\n</script>\n\n<Widget bind:bar/>\n\n<div>{bar}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback/Widget.svelte",
    "content": "<p>does nothing</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback/_config.js",
    "content": "import { test } from '../../test';\n// @ts-nocheck\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tlet count = 0;\n\n\t\t// @ts-ignore\n\t\tcomponent.$on('state', ({ changed }) => {\n\t\t\tif (changed.bar) count += 1;\n\t\t});\n\n\t\tcomponent.x = true;\n\t\tassert.equal(count, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let x = false;\n\texport let bar = {\n\t\tbaz: 42\n\t};\n</script>\n\n{#if x}\n\t<Widget bind:foo={bar.baz}/>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-b/Nested.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let value;\n\texport let id;\n\n\tconst initialValues = {\n\t\t'id-0': 'zero',\n\t\t'id-1': 'one',\n\t\t'id-2': 'two',\n\t\t'id-3': 'three'\n\t};\n\n\tonMount(() => {\n\t\tvalue = initialValues[id];\n\t});\n</script>\n\n<li>\n\t<slot></slot>\n</li>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-b/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // relies on onMount firing, which does not happen in SSR mode\n\n\tget props() {\n\t\treturn { count: 3 };\n\t},\n\n\thtml: `\n\t\t<input type='number'>\n\t\t<ol>\n\t\t\t<li>id-0: value is zero</li>\n\t\t\t<li>id-1: value is one</li>\n\t\t\t<li>id-2: value is two</li>\n\t\t</ol>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = '4';\n\t\tflushSync(() => input.dispatchEvent(new window.Event('input')));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='number'>\n\t\t\t<ol>\n\t\t\t\t<li>id-0: value is zero</li>\n\t\t\t\t<li>id-1: value is one</li>\n\t\t\t\t<li>id-2: value is two</li>\n\t\t\t\t<li>id-3: value is three</li>\n\t\t\t</ol>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-b/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let count;\n\texport let idToValue = Object.create(null);\n\tlet ids;\n\n\t$: ids = new Array(count)\n\t\t.fill(null)\n\t\t.map((_, i) => 'id-' + i);\n</script>\n\n<input type='number' bind:value={count}>\n\n<ol>\n\t{#each ids as id}\n\t\t<Nested {id} bind:value={idToValue[id]}>\n\t\t\t{id}: value is {idToValue[id]}\n\t\t</Nested>\n\t{/each}\n</ol>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-c/Nested.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let value;\n\texport let id;\n\n\tconst initialValues = {\n\t\t'id-0': 'zero',\n\t\t'id-1': 'one',\n\t\t'id-2': 'two',\n\t\t'id-3': 'three'\n\t};\n\n\tonMount(() => {\n\t\tvalue = initialValues[id];\n\t});\n</script>\n\n<li>\n\t<slot></slot>\n</li>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-c/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // relies on onMount firing, which does not happen in SSR mode\n\n\tget props() {\n\t\treturn { count: 3 };\n\t},\n\n\thtml: `\n\t\t<input type='number'>\n\t\t<ol>\n\t\t\t<li>id-2: value is two</li>\n\t\t\t<li>id-1: value is one</li>\n\t\t\t<li>id-0: value is zero</li>\n\t\t</ol>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = '4';\n\t\tflushSync(() => input.dispatchEvent(new window.Event('input')));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input type='number'>\n\t\t\t<ol>\n\t\t\t\t<li>id-3: value is three</li>\n\t\t\t\t<li>id-2: value is two</li>\n\t\t\t\t<li>id-1: value is one</li>\n\t\t\t\t<li>id-0: value is zero</li>\n\t\t\t</ol>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-c/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let count;\n\texport let idToValue = Object.create(null);\n\n\tfunction ids(count) {\n\t\treturn new Array(count)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => ({ id: 'id-' + i}))\n\t\t\t.reverse();\n\t}\n</script>\n\n<input type='number' bind:value={count}>\n\n<ol>\n\t{#each ids(count) as object (object.id)}\n\t\t<Nested bind:value={idToValue[object.id]} id={object.id}>\n\t\t\t{object.id}: value is {idToValue[object.id]}\n\t\t</Nested>\n\t{/each}\n</ol>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/One.svelte",
    "content": "<script>\n\timport Two from './Two.svelte';\n\n\texport let list;\n\texport let i;\n\n\tfunction handle_click() {\n\t\tlist = [...list, {}];\n\t}\n</script>\n\n{#each list as item, j}\n\t<Two bind:value={item.value} {i} {j}/>\n{/each}\n\n<button on:click={handle_click}>\n\tclick me\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/Two.svelte",
    "content": "<script>\n\texport let i, j;\n\texport let value = `${i}:${j}`;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t\t<button>click me</button>\n\n\t\t<p>{\"value\":\"0:0\"}</p>\n\t\t<p></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelectorAll('button')[1];\n\n\t\tbutton.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<button>click me</button>\n\n\t\t\t<p>{\"value\":\"0:0\"}</p>\n\t\t\t<p>{\"value\":\"1:0\"}</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/main.svelte",
    "content": "<script>\n\timport One from \"./One.svelte\";\n\n\tconst obj = {\n\t\ta: [{}],\n\t\tb: []\n\t};\n</script>\n\n<One bind:list={obj.a} i={0}/>\n<One bind:list={obj.b} i={1}/>\n\n<p>{obj.a.map(JSON.stringify)}</p>\n<p>{obj.b.map(JSON.stringify)}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/One.svelte",
    "content": "<script>\n\timport Two from './Two.svelte';\n\n\texport let list;\n\texport let i;\n\n\tfunction handle_click() {\n\t\tlist = [...list, {}];\n\t}\n</script>\n\n{#each list as item, j}\n\t<Two bind:value={item.value} {i} {j}/>\n{/each}\n\n<button on:click={handle_click}>\n\tclick me\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/Two.svelte",
    "content": "<script>\n\texport let i, j;\n\texport let value = { i, j };\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t\t<button>click me</button>\n\n\t\t<p>{\"value\":{\"i\":0,\"j\":0}}</p>\n\t\t<p></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelectorAll('button')[1];\n\n\t\tbutton.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<button>click me</button>\n\n\t\t\t<p>{\"value\":{\"i\":0,\"j\":0}}</p>\n\t\t\t<p>{\"value\":{\"i\":1,\"j\":0}}</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/main.svelte",
    "content": "<script>\n\timport One from \"./One.svelte\";\n\n\tconst obj = {\n\t\ta: [{}],\n\t\tb: []\n\t};\n</script>\n\n<One bind:list={obj.a} i={0}/>\n<One bind:list={obj.b} i={1}/>\n\n<p>{obj.a.map(JSON.stringify)}</p>\n<p>{obj.b.map(JSON.stringify)}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-f/One.svelte",
    "content": "<script>\n\timport Two from './Two.svelte';\n\n\texport let list;\n\texport let i;\n\n\tfunction handle_click() {\n\t\tlist = [...list, {}];\n\t}\n</script>\n\n{#each list as item, j}\n\t<Two bind:value={item.value} {i} {j}/>\n{/each}\n\n<button on:click={handle_click}>\n\tclick me\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-f/Two.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let i, j;\n\texport let value;\n\n\tonMount(() => {\n\t\tvalue = { i, j };\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-f/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t\t<button>click me</button>\n\n\t\t<p>{\"value\":{\"i\":0,\"j\":0}}</p>\n\t\t<p></p>\n\t`,\n\n\tssrHtml: `\n\t\t<button>click me</button>\n\t\t<button>click me</button>\n\n\t\t<p>{}</p>\n\t\t<p></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelectorAll('button')[1];\n\n\t\tbutton.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<button>click me</button>\n\n\t\t\t<p>{\"value\":{\"i\":0,\"j\":0}}</p>\n\t\t\t<p>{\"value\":{\"i\":1,\"j\":0}}</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-f/main.svelte",
    "content": "<script>\n\timport One from \"./One.svelte\";\n\n\tconst obj = {\n\t\ta: [{}],\n\t\tb: []\n\t};\n</script>\n\n<One bind:list={obj.a} i={0}/>\n<One bind:list={obj.b} i={1}/>\n\n<p>{obj.a.map(JSON.stringify)}</p>\n<p>{obj.b.map(JSON.stringify)}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-computed/Nested.svelte",
    "content": "<script>\n\texport let value;\n\texport let field;\n</script>\n\n<label>\n\t{field} <input bind:value>\n</label>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-computed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<label>firstname <input></label>\n\t\t<label>lastname <input></label>\n\t`,\n\tssrHtml: `\n\t\t<label>firstname <input value=\"\"></label>\n\t\t<label>lastname <input value=\"\"></label>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst input = new window.Event('input');\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[0].value = 'Ada';\n\t\tawait inputs[0].dispatchEvent(input);\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(component.values, {\n\t\t\tfirstname: 'Ada',\n\t\t\tlastname: ''\n\t\t});\n\n\t\tinputs[1].value = 'Lovelace';\n\t\tawait inputs[1].dispatchEvent(input);\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(component.values, {\n\t\t\tfirstname: 'Ada',\n\t\t\tlastname: 'Lovelace'\n\t\t});\n\n\t\tcomponent.values = {\n\t\t\tfirstname: 'Grace',\n\t\t\tlastname: 'Hopper'\n\t\t};\n\t\tassert.equal(inputs[0].value, 'Grace');\n\t\tassert.equal(inputs[1].value, 'Hopper');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-computed/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let fields = ['firstname', 'lastname'];\n\texport let values = {\n\t\tfirstname: '',\n\t\tlastname: ''\n\t};\n</script>\n\n{#each fields as field}\n\t<Nested {field} bind:value={values[field]}/>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Bar.svelte",
    "content": "<script>\n\texport let y = 'bar';\n</script>\n\n<p>y: {y}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Baz.svelte",
    "content": "<script>\n\texport let x = true;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Foo.svelte",
    "content": "<script>\n\texport let y = 'foo';\n</script>\n\n<p>y: {y}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>y: bar</p>\n\t\t<p>y: bar</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>y: bar</p>\n\t\t\t<p>y: bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\timport Baz from './Baz.svelte';\n\n\texport let y;\n\texport let x;\n</script>\n\n<p>y: {y}</p>\n\n{#if x}\n\t<Foo bind:y/>\n{:else}\n\t<Bar bind:y/>\n{/if}\n\n<Baz bind:x/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Bar.svelte",
    "content": "<script>\n\texport let y = 'bar';\n</script>\n\n<p>y: {y}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Baz.svelte",
    "content": "<script>\n\texport let x = true;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Foo.svelte",
    "content": "<script>\n\texport let y = 'foo';\n</script>\n\n<p>y: {y}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// This test failed in Svelte 4, because the Bar y binding is activated before the\n\t// Baz x binding, meaning that by the time Foo is created, we already\n\t// have a value for y which Foo won't override. Easily worked around,\n\t// probably impossible to 'fix', so this test is left here for info\n\t// purposes but will probably remain skipped indefinitely - or rather,\n\t// it's okay if it needs to be skipped again sometime in the future.\n\thtml: `\n\t\t<p>y: foo</p>\n\t\t<p>y: foo</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>y: foo</p>\n\t\t\t<p>y: foo</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\timport Baz from './Baz.svelte';\n\n\texport let y;\n\texport let x;\n</script>\n\n<p>y: {y}</p>\n\n<Baz bind:x/>\n\n{#if x}\n\t<Foo bind:y/>\n{:else}\n\t<Bar bind:y/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-deep/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<input bind:value>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-deep/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<p>foo</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=foo>\n\t\t<p>foo</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('input');\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'blah';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.deepEqual(component.deep, { name: 'blah' });\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>blah</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-deep/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let deep = {\n\t\tname: 'foo'\n\t};\n</script>\n\n<Widget bind:value={deep.name}/>\n\n<p>{deep.name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-deep2/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<input bind:value={value.name}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-deep2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<p>foo</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=foo>\n\t\t<p>foo</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('input');\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'blah';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.deepEqual(component.deep, { name: 'blah' });\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>blah</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-deep2/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let deep = {\n\t\tname: 'foo'\n\t};\n</script>\n\n<Widget bind:value={deep}/>\n\n<p>{deep.name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<input bind:value>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input><input><input>\n\t\t<p>foo, bar, baz</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=foo>\n\t\t<input value=bar>\n\t\t<input value=baz>\n\t\t<p>foo, bar, baz</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('input');\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[0].value = 'blah';\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.deepEqual(component.a, ['blah', 'bar', 'baz']);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input><input><input>\n\t\t\t<p>blah, bar, baz</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let a = ['foo', 'bar', 'baz'];\n</script>\n\n{#each a as x}\n\t<Widget bind:value={x}/>\n{/each}\n\n<p>{a.join(', ')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-nested/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<input bind:value>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-nested/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input><input><input>\n\t\t<p>foo, bar, baz</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=foo>\n\t\t<input value=bar>\n\t\t<input value=baz>\n\t\t<p>foo, bar, baz</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('input');\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[0].value = 'blah';\n\t\tinputs[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.deepEqual(component.a, [{ name: 'blah' }, { name: 'bar' }, { name: 'baz' }]);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input><input><input>\n\t\t\t<p>blah, bar, baz</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-nested/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let a = [{ name: 'foo' }, { name: 'bar' }, { name: 'baz' }];\n\texport let getName = x => x.name;\n</script>\n\n{#each a as x}\n\t<Widget bind:value={x.name}/>\n{/each}\n\n<p>{a.map(getName).join(', ')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-object/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<span>{value.id}</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ta: [{ id: 'foo' }, { id: 'bar' }, { id: 'baz' }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<span>foo</span><span>bar</span><span>baz</span>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = [{ id: 'yep' }, { id: 'nope' }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>yep</span><span>nope</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-object/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let a;\n</script>\n\n{#each a as x}\n\t<Widget bind:value={x}/>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-reassigned/Child.svelte",
    "content": "<script>\n\texport let value;\n\n\tvalue += 1;\n</script>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-reassigned/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>2, 3, 4</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>2, 3, 4</p>\n\t`,\n\n\tssrHtml: `\n\t\t<p>1, 2, 3</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>1, 2, 3</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-reassigned/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet numbers = [1, 2, 3];\n</script>\n\n<p>{numbers.join(', ')}</p>\n\n{#each numbers as n}\n\t<Child bind:value={n} />\n{/each}\n\n<p>{numbers.join(', ')}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-keyed/Child.svelte",
    "content": "<script>\n\timport InnerChild from './InnerChild.svelte';\n\n\texport let id = 1;\n\texport let count;\n\texport let increment;\n\n\tlet list;\n\t$: {\n\t\tlist = [];\n\t\tfor (let i = 0; i < count; ++i) {\n\t\t\tlist.push(i);\n\t\t}\n\t}\n</script>\n\n<div data-id={id}>\n\t{#each list as item (item)}\n\t\t<InnerChild val={item} {increment} />\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-keyed/InnerChild.svelte",
    "content": "<script>\n\texport let val = 1;\n\texport let increment;\n\n\t$: {\n\t\tincrement();\n\t}\n</script>\n\n<inner>\n\t{val}\n</inner>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-keyed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div data-id=\"1\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t</div>\n\t\t<div data-id=\"2\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t</div>\n\t\t<div data-id=\"3\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div data-id=\"1\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t\t<inner>2</inner>\n\t\t</div>\n\t\t<div data-id=\"2\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t\t<inner>2</inner>\n\t\t</div>\n\t\t<div data-id=\"3\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t\t<inner>2</inner>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait component.done;\n\t\t// In Svelte 4 this was 14, but in Svelte 5, the timing differences\n\t\t// because of async mean it's now 9.\n\t\tassert.equal(component.getCounter(), 9);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div data-id=\"3\">\n\t\t\t\t<inner>0</inner>\n\t\t\t\t<inner>1</inner>\n\t\t\t</div>\n\t\t\t<div data-id=\"2\">\n\t\t\t\t<inner>0</inner>\n\t\t\t\t<inner>1</inner>\n\t\t\t</div>\n\t\t\t<div data-id=\"1\">\n\t\t\t\t<inner>0</inner>\n\t\t\t\t<inner>1</inner>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-keyed/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet updateCounter = 0;\n\tlet promiseResolve;\n\texport const done = new Promise(resolve => {\n\t\tpromiseResolve = resolve;\n\t});\n\texport const getCounter = () => {\n\t\treturn updateCounter;\n\t};\n\n\tlet vals = [1, 2, 3];\n\tconst instances = [];\n\tlet count = 3;\n\n\tconst increment = () => {\n\t\t++updateCounter;\n\t};\n\n\tonMount(() => {\n\t\tcount = 2;\n\n\t\tsetTimeout(() => {\n\t\t\tvals = vals.reverse();\n\n\t\t\tsetTimeout(promiseResolve);\n\t\t});\n\t});\n</script>\n\n{#each vals as val, index (val)}\n\t<Child bind:this={instances[index]} id={val} {count} {increment} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-unkeyed/Child.svelte",
    "content": "<script>\n\timport InnerChild from './InnerChild.svelte';\n\n\texport let id = 1;\n\texport let count;\n\texport let increment;\n\n\tlet list;\n\t$: {\n\t\tlist = [];\n\t\tfor (let i = 0; i < count; ++i) {\n\t\t\tlist.push(i);\n\t\t}\n\t}\n</script>\n\n<div data-id={id}>\n\t{#each list as item}\n\t\t<InnerChild val={item} {increment} />\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-unkeyed/InnerChild.svelte",
    "content": "<script>\n\texport let val = 1;\n\texport let increment;\n\n\t$: {\n\t\tincrement();\n\t}\n</script>\n\n<inner>\n\t{val}\n</inner>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-unkeyed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div data-id=\"1\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t</div>\n\t\t<div data-id=\"2\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t</div>\n\t\t<div data-id=\"3\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div data-id=\"1\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t\t<inner>2</inner>\n\t\t</div>\n\t\t<div data-id=\"2\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t\t<inner>2</inner>\n\t\t</div>\n\t\t<div data-id=\"3\">\n\t\t\t<inner>0</inner>\n\t\t\t<inner>1</inner>\n\t\t\t<inner>2</inner>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait component.done;\n\t\t// With Svelte 5, this is 9. With Svelte 4 it was 13.\n\t\tassert.equal(component.getCounter(), 9);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div data-id=\"3\">\n\t\t\t\t<inner>0</inner>\n\t\t\t\t<inner>1</inner>\n\t\t\t</div>\n\t\t\t<div data-id=\"2\">\n\t\t\t\t<inner>0</inner>\n\t\t\t\t<inner>1</inner>\n\t\t\t</div>\n\t\t\t<div data-id=\"1\">\n\t\t\t\t<inner>0</inner>\n\t\t\t\t<inner>1</inner>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-each-remount-unkeyed/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet updateCounter = 0;\n\tlet promiseResolve;\n\texport const done = new Promise(resolve => {\n\t\tpromiseResolve = resolve;\n\t});\n\texport const getCounter = () => {\n\t\treturn updateCounter;\n\t};\n\n\tlet vals = [1, 2, 3];\n\tconst instances = [];\n\tlet count = 3;\n\n\tconst increment = () => {\n\t\t++updateCounter;\n\t};\n\n\tonMount(() => {\n\t\tcount = 2;\n\n\t\tsetTimeout(() => {\n\t\t\tvals = vals.reverse();\n\n\t\t\tsetTimeout(promiseResolve);\n\t\t});\n\t});\n</script>\n\n{#each vals as val, index (val)}\n\t<Child bind:this={instances[index]} id={val} {count} {increment} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-infinite-loop/A.svelte",
    "content": "<script>\n\timport B from './B.svelte';\n\n\texport let currentIdentifier;\n</script>\n\n<B bind:currentIdentifier />\n<B bind:currentIdentifier />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-infinite-loop/B.svelte",
    "content": "<script>\n\timport C from './C.svelte';\n\n\texport let list = [1, 2, 3, 2, 1];\n\texport let currentIdentifier;\n</script>\n\n{#each list as item}\n\t<p>\n\t\t<C identifier=\"{item}\" bind:currentIdentifier>\n\t\t\t{item}\n\t\t</C>\n\t</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-infinite-loop/C.svelte",
    "content": "<script>\n\texport let currentIdentifier;\n\texport let identifier;\n\n\tlet isCurrentlySelected;\n\n\tfunction toggle() {\n\t\tcurrentIdentifier = isCurrentlySelected ? null : identifier\n\t}\n\n\t$: isCurrentlySelected = currentIdentifier === identifier;\n</script>\n\n<span\n\ton:click=\"{toggle}\"\n\tclass=\"{isCurrentlySelected ? 'selected' : null}\"\n>\n\t<slot></slot>\n</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-infinite-loop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// Svelte 4/5 difference: The empty class strings are not added to the class attribute in this situation\n\thtml: `\n\t\t<p><span>1</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>3</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>1</span></p>\n\n\t\t<p><span>1</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>3</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>1</span></p>\n\n\t\t<p><span>1</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>3</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>1</span></p>\n\n\t\t<p><span>1</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>3</span></p>\n\t\t<p><span class='selected'>2</span></p>\n\t\t<p><span>1</span></p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst spans = target.querySelectorAll('span');\n\n\t\tspans[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.currentIdentifier, 1);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p><span class='selected'>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span class='selected'>1</span></p>\n\n\t\t\t<p><span class='selected'>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span class='selected'>1</span></p>\n\n\t\t\t<p><span class='selected'>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span class='selected'>1</span></p>\n\n\t\t\t<p><span class='selected'>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span class='selected'>1</span></p>\n\t\t`\n\t\t);\n\n\t\tspans[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.currentIdentifier, null);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p><span>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>1</span></p>\n\n\t\t\t<p><span>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>1</span></p>\n\n\t\t\t<p><span>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>1</span></p>\n\n\t\t\t<p><span>1</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>3</span></p>\n\t\t\t<p><span>2</span></p>\n\t\t\t<p><span>1</span></p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-infinite-loop/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\n\texport let currentIdentifier = 2;\n</script>\n\n<A bind:currentIdentifier />\n<A bind:currentIdentifier />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-nested/Bar.svelte",
    "content": "<script>\n\timport Baz from './Baz.svelte';\n\n\texport let x;\n</script>\n\n<button class='bar' on:click='{() => x = \"q\"}'>bar</button>\n<p>bar x: {x}</p>\n\n<Baz bind:x/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-nested/Baz.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<button class='baz' on:click='{() => x = \"r\"}'>baz</button>\n<p>baz x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-nested/Foo.svelte",
    "content": "<script>\n\timport Bar from './Bar.svelte';\n\n\texport let x;\n</script>\n\n<button class='foo' on:click='{() => x = \"p\"}'>foo</button>\n<p>foo x: {x}</p>\n\n<Bar bind:x/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-nested/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 'initial' };\n\t},\n\n\thtml: `\n\t\t<p>x: initial</p>\n\t\t<button class=\"foo\">foo</button>\n\t\t<p>foo x: initial</p>\n\t\t<button class=\"bar\">bar</button>\n\t\t<p>bar x: initial</p>\n\t\t<button class=\"baz\">baz</button>\n\t\t<p>baz x: initial</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst buttons = [...target.querySelectorAll('button')];\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 'p');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>x: p</p>\n\t\t\t<button class=\"foo\">foo</button>\n\t\t\t<p>foo x: p</p>\n\t\t\t<button class=\"bar\">bar</button>\n\t\t\t<p>bar x: p</p>\n\t\t\t<button class=\"baz\">baz</button>\n\t\t\t<p>baz x: p</p>\n\t\t`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 'q');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>x: q</p>\n\t\t\t<button class=\"foo\">foo</button>\n\t\t\t<p>foo x: q</p>\n\t\t\t<button class=\"bar\">bar</button>\n\t\t\t<p>bar x: q</p>\n\t\t\t<button class=\"baz\">baz</button>\n\t\t\t<p>baz x: q</p>\n\t\t`\n\t\t);\n\n\t\tbuttons[2].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 'r');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>x: r</p>\n\t\t\t<button class=\"foo\">foo</button>\n\t\t\t<p>foo x: r</p>\n\t\t\t<button class=\"bar\">bar</button>\n\t\t\t<p>bar x: r</p>\n\t\t\t<button class=\"baz\">baz</button>\n\t\t\t<p>baz x: r</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-nested/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let x;\n</script>\n\n<p>x: {x}</p>\n\n<Foo bind:x/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-non-leaky/Counter.svelte",
    "content": "<script>\n\tlet count = 0;\n</script>\n\n<button on:click='{() => count += 1}'>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-non-leaky/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<p>count: </p>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, undefined);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>1</button>\n\t\t\t<p>count: </p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, undefined);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>2</button>\n\t\t\t<p>count: </p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-non-leaky/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\tlet x;\n</script>\n\n<Counter bind:count={x}/>\n<p>count: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-onMount/Mount.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\tlet element;\n\tlet bound = false;\n\tonMount(() => {\n\t\tif (element) bound = true;\n\t});\n\n</script>\n\n<div bind:this={element}></div>\n<p>\n\tBound? {bound}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-onMount/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div id=\"target\"><div></div>\n\t\t\t<p>\n\t\t\t\tBound? true\n\t\t\t</p>\n\t\t</div>\n\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-onMount/main.svelte",
    "content": "<script>\n\timport Mount from './Mount.svelte';\n\timport { onMount, mount } from 'svelte';\n\n\tonMount(() => {\n\t\t// @ts-ignore\n\t\tmount(Mount, { target: document.querySelector('#target') });\n\t});\n</script>\n\n<div id=\"target\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/Counter.svelte",
    "content": "<script>\n\texport let count = 0;\n</script>\n\n<button on:click='{() => count += 1}'>+1</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<p>count: 10</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 11);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 11</p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 12);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 12</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\texport let x = 10;\n</script>\n\n<Counter bind:count={x}/>\n<p>count: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Bar.svelte",
    "content": "<script>\n\texport let x = 'no';\n</script>\n\n<p>Bar: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Foo.svelte",
    "content": "<script>\n\texport let x = 'yes';\n</script>\n\n<p>Foo: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Foo: yes</p>\n\t\t<p>x in parent: yes</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.a = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar: yes</p>\n\t\t\t<p>x in parent: yes</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = true;\n\t\tassert.equal(component.x, 'yes');\n\t\tcomponent.x = undefined;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Foo: </p>\n\t\t\t<p>x in parent: </p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar: no</p>\n\t\t\t<p>x in parent: no</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let a = true;\n\texport let x;\n</script>\n\n{#if a}\n\t<Foo bind:x/>\n{:else}\n\t<Bar bind:x/>\n{/if}\n\n<p>x in parent: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Bar.svelte",
    "content": "<script>\n\texport let x = 'no';\n</script>\n\n<p>Bar: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Foo.svelte",
    "content": "<script>\n\texport let x = 'yes';\n</script>\n\n<p>Foo: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Foo: yes</p>\n\t\t<p>x in parent: yes</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.a = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar: yes</p>\n\t\t\t<p>x in parent: yes</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = true;\n\t\tassert.equal(component.x, 'yes');\n\t\tcomponent.x = undefined;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Foo: </p>\n\t\t\t<p>x in parent: </p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar: no</p>\n\t\t\t<p>x in parent: no</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let a = true;\n\texport let x;\n</script>\n\n<svelte:component this=\"{a ? Foo : Bar}\" bind:x/>\n\n<p>x in parent: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-private-state/Bar.svelte",
    "content": "<script>\n\tlet x = 'no';\n</script>\n\n<p>Bar: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-private-state/Foo.svelte",
    "content": "<script>\n\tlet x = 'yes';\n</script>\n\n<p>Foo: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-private-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Foo: yes</p>\n\t\t<p>x in parent: </p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.a = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar: no</p>\n\t\t\t<p>x in parent: </p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = true;\n\t\tassert.equal(component.x, undefined);\n\t\tcomponent.x = 'maybe';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Foo: yes</p>\n\t\t\t<p>x in parent: maybe</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar: no</p>\n\t\t\t<p>x in parent: maybe</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-private-state/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let a = true;\n\texport let x;\n</script>\n\n<svelte:component this=\"{a ? Foo : Bar}\" bind:x/>\n\n<p>x in parent: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-reactive-property-no-extra-call/Component.svelte",
    "content": "<script>\n\texport let value;\n\texport let value2;\n</script>\n\n{value}{value2}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-reactive-property-no-extra-call/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component }) {\n\t\tassert.equal(component.object_updates, component.primitive_updates);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-reactive-property-no-extra-call/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\texport let primitive_updates = 0;\n\texport let object_updates = 0;\n\n\tconst obj = { foo: '' };\n\tlet foo = 'bar';\n\t$effect: if (obj) object_updates++;\n\t$effect: if (foo) primitive_updates++;\n</script>\n\n<Component bind:value={obj.foo} bind:value2={foo} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-reactive-statement/Button.svelte",
    "content": "<script>\n\texport let count\n\t\n\tfunction handleClick() {\n\t\tcount += 1;\n\t}\n</script>\n\n<button on:click={handleClick}>\n\tbutton {count}\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-reactive-statement/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>main 0</button>\n\t\t<button>button 0</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tconst buttons = target.querySelectorAll('button');\n\n\t\tbuttons[0].dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>main 1</button>\n\t\t\t<button>button 1</button>\n\t\t`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>main 2</button>\n\t\t\t<button>button 2</button>\n\t\t`\n\t\t);\n\n\t\t// reactive update, reset to 2\n\t\tbuttons[0].dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>main 2</button>\n\t\t\t<button>button 2</button>\n\t\t`\n\t\t);\n\n\t\t// bound to main, reset to 2\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>main 2</button>\n\t\t\t<button>button 2</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-reactive-statement/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\t\n\tlet count = 0;\n\n\t$: if (count > 2) {\n\t\tcount = 2;\n\t}\n\n\tfunction handleClick() {\n\t\tcount += 1;\n\t}\n</script>\n\n<button on:click={handleClick}>\n\tmain {count}\n</button>\n\n<Button bind:count />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-self-destroying/Nested.svelte",
    "content": "<script>\n\texport let show;\n</script>\n\n<button on:click=\"{() => show = false}\">Hide</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-self-destroying/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { show: true };\n\t},\n\n\thtml: `\n\t\t<button>Hide</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\ttarget.querySelector('button')?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.show, false);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Show</button>\n\t\t`\n\t\t);\n\n\t\ttarget.querySelector('button')?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.show, true);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Hide</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-self-destroying/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\texport let show;\n</script>\n\n{#if show}\n\t<Nested bind:show/>\n{:else}\n\t<button on:click=\"{() => show = true}\">Show</button>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-store/Input.svelte",
    "content": "<script>\n\texport let value = '';\n</script>\n\n<input bind:value />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-store/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input />\n\t\t<input />\n\t\t<div></div>\n\t`,\n\tssrHtml: `\n\t\t<input value=\"\"/>\n\t\t<input value=\"\"/>\n\t\t<div></div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tlet count = 0;\n\t\tcomponent.callback = () => {\n\t\t\tcount++;\n\t\t};\n\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\n\t\tinput1.value = '1';\n\t\tinput1.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<input />\n\t\t\t\t<input />\n\t\t\t\t<div>1</div>\n\t\t\t`\n\t\t);\n\t\tassert.equal(input1.value, '1');\n\t\tassert.equal(input2.value, '1');\n\t\tassert.equal(count, 1);\n\n\t\tinput2.value = '123';\n\t\tinput2.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<input />\n\t\t\t\t<input />\n\t\t\t\t<div>123</div>\n\t\t\t`\n\t\t);\n\t\tassert.equal(input1.value, '123');\n\t\tassert.equal(input2.value, '123');\n\t\tassert.equal(count, 2);\n\n\t\tinput1.value = '456';\n\t\tinput1.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<input />\n\t\t\t\t<input />\n\t\t\t\t<div>456</div>\n\t\t\t`\n\t\t);\n\t\tassert.equal(input1.value, '456');\n\t\tassert.equal(input2.value, '456');\n\t\tassert.equal(count, 3);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-binding-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\timport Input from './Input.svelte';\n\n\tlet value = writable({ value: '' });\n\n\texport let callback = () => {};\n\n\tvalue.subscribe(() => {\n\t\tcallback();\n\t})\n</script>\n\n<input bind:value={$value.value} />\n\n<Input bind:value={$value.value}/>\n\n<div>{$value.value}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n\texport let quux;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz} ({typeof baz})</p>\n<p>qux: {qux}</p>\n<p>quux: {quux}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tbar: 'lol',\n\t\t\tx: 2,\n\t\t\tcompound: 'piece of',\n\t\t\tgo: { deeper: 'core' }\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div><p>foo: lol</p>\n\t\t<p>baz: 42 (number)</p>\n\t\t<p>qux: this is a piece of string</p>\n\t\t<p>quux: core</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.bar = 'wut';\n\t\tcomponent.x = 3;\n\t\tcomponent.compound = 'rather boring';\n\t\tcomponent.go = { deeper: 'heart' };\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><p>foo: wut</p>\n\t\t\t<p>baz: 43 (number)</p>\n\t\t\t<p>qux: this is a rather boring string</p>\n\t\t\t<p>quux: heart</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let bar;\n\texport let x;\n\texport let compound;\n\texport let go;\n</script>\n\n<div>\n\t<Widget foo='{bar}' baz='{40 + x}' qux='this is a {compound} string' quux='{go.deeper}'/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic-late/Widget.svelte",
    "content": "<script>\n\texport let p;\n</script>\n\n<p>{p}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic-late/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tcomponent.q = 42;\n\t\tcomponent.foo = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>42</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic-late/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let foo = false;\n\texport let q;\n</script>\n\n{#if foo}\n\t<Widget p='{q}'/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic-shorthand/Widget.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>foo: {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic-shorthand/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 42 };\n\t},\n\n\thtml: '<div><p>foo: 42</p></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = 99;\n\n\t\tassert.htmlEqual(target.innerHTML, '<div><p>foo: 99</p></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-dynamic-shorthand/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let foo;\n</script>\n\n<div>\n\t<Widget {foo}/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-empty/Widget.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>foo: '{foo}'</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<div><p>foo: ''</p></div>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-empty/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget foo=''/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz} ({typeof baz})</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>foo: bar</p>\n\t\t\t<p>baz: 42 (number)</p>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget foo='bar' baz={42}/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static-boolean/Foo.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>x: {x} ({typeof x})</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static-boolean/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>x: true (boolean)</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static-boolean/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n</script>\n\n<Foo x/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static-boolean-regression/Link.svelte",
    "content": "<script>\n\texport let href;\n</script>\n\n<a href={href}>link</a>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static-boolean-regression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<a href='/cool'>link</a>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-data-static-boolean-regression/main.svelte",
    "content": "<script>\n\timport Link from './Link.svelte';\n</script>\n\n<Link x href=\"/cool\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-dynamic/Button.svelte",
    "content": "<button on:click><slot></slot></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>update handler</button>\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst [updateButton, button] = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\n\t\tawait updateButton.dispatchEvent(event);\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 11);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-dynamic/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\texport let count = 0;\n\tlet clickHandler = () => count += 1;\n\tfunction updateHandler(){\n\t\tclickHandler = () => count += 10;\n\t}\n</script>\n\n<button on:click={updateHandler}>update handler</button>\n<Button on:click={clickHandler}>{count}</Button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-modifier-once/Button.svelte",
    "content": "<button on:click><slot></slot></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-modifier-once/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-modifier-once/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\texport let count = 0;\n</script>\n\n<Button on:click|once=\"{() => count += 1}\">{count}</Button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-modifier-once-dynamic/Button.svelte",
    "content": "<button on:click><slot></slot></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-modifier-once-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>update handler</button>\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst [updateButton, button] = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait updateButton.dispatchEvent(event);\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 10);\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 10);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-handler-modifier-once-dynamic/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\texport let count = 0;\n\tlet clickHandler = () => count += 1;\n\tfunction updateHandler(){\n\t\tclickHandler = () => count += 10;\n\t}\n</script>\n\n<button on:click={updateHandler}>update handler</button>\n<Button on:click|once={clickHandler}>{count}</Button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-not-stale/Button.svelte",
    "content": "<button on:click><slot/></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-not-stale/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { value: 1 };\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\t/** @type {Array<{ value: number }>} */\n\t\tconst events = [];\n\t\tcomponent.$on('value', (/** @type {CustomEvent} */ event) => {\n\t\t\tevents.push(event.detail);\n\t\t});\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tbuttons[1].dispatchEvent(click);\n\n\t\tcomponent.value = 2;\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tbuttons[1].dispatchEvent(click);\n\n\t\tassert.deepEqual(events, [{ value: 1 }, { value: 1 }, { value: 2 }, { value: 2 }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-event-not-stale/main.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\timport Button from './Button.svelte';\n\n\tconst dispatch = createEventDispatcher();\n\n\texport let value;\n\n\tfunction handleClick() {\n\t\tdispatch('value', { value });\n\t}\n</script>\n\n<Button on:click=\"{handleClick}\">one</Button>\n<Button on:click=\"{() => dispatch('value', {value})}\">two</Button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events/Widget.svelte",
    "content": "<script>\n\timport { onDestroy, createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n\n\tonDestroy(() => {\n\t\tdispatch('destroy');\n\t});\n</script>\n\n<p>i am a widget</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\thtml: '<div><p>i am a widget</p></div>',\n\n\ttest({ assert, component }) {\n\t\tlet count = 0;\n\n\t\tcomponent.$on('widgetTornDown', function () {\n\t\t\t// @ts-expect-error TODO\n\t\t\tassert.equal(this, component);\n\t\t\tcount += 1;\n\t\t});\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(count, 1);\n\n\t\tcomponent.visible = true;\n\t\tcomponent.visible = false;\n\t\tassert.equal(count, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events/main.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\timport Widget from './Widget.svelte';\n\n\tconst dispatch = createEventDispatcher();\n\n\texport let visible;\n</script>\n\n<div>\n\t{#if visible}\n\t\t<Widget on:destroy='{() => dispatch(\"widgetTornDown\")}'/>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-console/Widget.svelte",
    "content": "<button on:click>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-console/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<button>click me</button>',\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\t/** @type {string[]} */\n\t\tconst messages = [];\n\n\t\tconst log = console.log;\n\t\tconsole.log = (msg) => {\n\t\t\tmessages.push(msg);\n\t\t};\n\n\t\ttry {\n\t\t\tbutton?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\t\tassert.deepEqual(messages, ['clicked']);\n\t\t} catch (err) {\n\t\t\tconsole.log = log;\n\t\t\tthrow err;\n\t\t}\n\n\t\tconsole.log = log;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-console/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget on:click=\"{() => console.log('clicked')}\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-data/Widget.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click='{() => dispatch(\"select\", { selection: \"foo\" })}'>select foo</button>\n<button on:click='{() => dispatch(\"select\", { selection: \"bar\" })}'>select bar</button>\n<button on:click='{() => dispatch(\"select\", { selection: \"baz\" })}'>select baz</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-data/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\t/** @type {string[]} */\n\t\tconst selected = [];\n\n\t\tcomponent.$on('select', (/** @type {CustomEvent} */ event) => {\n\t\t\tselected.push(event.detail);\n\t\t});\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tbuttons[2].dispatchEvent(click);\n\t\tbuttons[1].dispatchEvent(click);\n\t\tbuttons[0].dispatchEvent(click);\n\n\t\tassert.deepEqual(selected, ['bar', 'baz', 'bar', 'foo']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-data/main.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\timport Widget from './Widget.svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<div>\n\t<Widget on:select='{event => dispatch(\"select\", event.detail.selection)}'/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-each/Widget.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click='{() => dispatch(\"foo\")}'>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { items: ['a', 'b', 'c'] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t\t<button>click me</button>\n\t\t\t<button>click me</button>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\n\t\t/** @type {string[]} */\n\t\tconst clicks = [];\n\n\t\tcomponent.$on('foo', (/** @type {CustomEvent} */ event) => {\n\t\t\tclicks.push(event.detail);\n\t\t});\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(event);\n\t\tbuttons[2].dispatchEvent(event);\n\n\t\tassert.deepEqual(clicks, ['a', 'c']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-each/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n\n\texport let items;\n\n\tfunction foo(item) {\n\t\tdispatch('foo', item);\n\t}\n</script>\n\n<div>\n\t{#each items as item}\n\t\t<Widget on:foo='{() => foo(item)}'/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-nullish/Widget.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\tconst dispatch = createEventDispatcher();\n\texport let logs;\n\n\tfunction click() {\n\t\ttry {\n\t\t\tdispatch('click');\n\t\t} catch (error) {\n\t\t\tlogs.push(error);\n\t\t}\n\t}\n</script>\n<button on:click={click}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-nullish/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, window, target }) {\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\n\t\tawait button?.dispatchEvent(event);\n\t\tassert.equal(component.logs.length, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-nullish/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\texport let logs = [];\n</script>\n\n<Widget on:click={null} {logs} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-this/Inner.svelte",
    "content": "<script>\n  import { createEventDispatcher } from 'svelte';\n  const dispatch = createEventDispatcher();\n\n  export const exists = true;\n</script>\n\n<button on:click={() => dispatch('bar')}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-this/Widget.svelte",
    "content": "<script>\n  import Inner from './Inner.svelte';\n</script>\n\n<button on:click>click me</button>\n<Inner on:bar />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tbutton1.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tbutton2.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tassert.strictEqual(component.logs[0], button1);\n\t\tassert.ok(component.logs[1]?.exists);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-events-this/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\timport Inner from './Inner.svelte';\n\n\texport let logs = [];\n\texport { Inner };\n\n\tfunction foo() {\n\t\tlogs.push(this);\n\t}\n\tfunction bar() {\n\t\tlogs.push(this);\n\t}\n</script>\n\n<Widget on:click={foo} on:bar={bar} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-if-placement/Component.svelte",
    "content": "{#if true}\n\t<span>Component</span>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-if-placement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { flag: true };\n\t},\n\n\thtml: `\n\t\t<span>Before</span>\n\t\t<span>Component</span>\n\t\t<span>After</span>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.flag = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>Before</span>\n\t\t\t<span>Component</span>\n\t\t\t<span>After</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-if-placement/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\texport let flag;\n</script>\n\n<span>Before</span>\n{#if flag}\n\t<Component/>\n{:else}\n\t<Component/>\n{/if}\n<span>After</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-name-deconflicted/Nested.svelte",
    "content": "<script>\n\texport let nested;\n</script>\n\n<span>{nested}</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-name-deconflicted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>1</span>\n\t\t<span>2</span>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.list = [3, 4];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>3</span>\n\t\t\t<span>4</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-name-deconflicted/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let list = [1, 2];\n</script>\n\n{#each list as nested}\n\t{#if true}\n\t\t<Nested {nested}/>\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-name-deconflicted-globals/Countdown.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n<span>{count}</span>\n\n{#if count > 1}\n\t<!-- this shouldn't work — we have to use <svelte:self> instead -->\n\t<Countdown count={count - 1}/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-name-deconflicted-globals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'Countdown is not defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-name-deconflicted-globals/main.svelte",
    "content": "<script>\n\timport Countdown from './Countdown.svelte';\n</script>\n\n<Countdown count={5}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespace/Tooltip.svelte",
    "content": "<p>i am a widget</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespace/Widget.svelte",
    "content": "<script module>\n\timport Tooltip from './Tooltip.svelte';\n\n\texport const Widget = { Tooltip };\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>i am a widget</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespace/main.svelte",
    "content": "<script>\n\timport { Widget } from './Widget.svelte';\n\tlet widgets = [Widget];\n</script>\n\n{#each widgets as LazyWidget}\n\t<LazyWidget.Tooltip />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespaced/Foo.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>foo {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespaced/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 1 };\n\t},\n\n\thtml: `\n\t\t<p>foo 1</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 2;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>foo 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespaced/components.svelte",
    "content": "<script module>\n\timport Foo from './Foo.svelte';\n\n\texport const Components = { Foo };\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-namespaced/main.svelte",
    "content": "<script>\n\timport { Components } from './components.svelte';\n\n\texport let a;\n</script>\n\n<Components.Foo foo={a}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deep/Level1.svelte",
    "content": "<script>\n\timport Level2 from './Level2.svelte';\n\timport Level3 from './Level3.svelte';\n</script>\n\n<Level2>\n\t<Level3 />\n</Level2>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deep/Level2.svelte",
    "content": "<script>\n\timport Level3 from './Level3.svelte';\n</script>\n\n<span>level 2</span>\n<slot></slot>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deep/Level3.svelte",
    "content": "<span>level 3</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deep/_config.js",
    "content": "import { test } from '../../test';\nimport { unmount } from 'svelte';\n\nexport default test({\n\ttest({ component }) {\n\t\tunmount(component.l1);\n\t},\n\n\twarnings: ['Tried to unmount a component that was not mounted']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deep/main.svelte",
    "content": "<script>\n\timport Level1 from './Level1.svelte';\n\n\texport let l1;\n</script>\n\n<Level1 bind:this={l1} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deeper/Level1.svelte",
    "content": "<script>\n\timport Level2 from './Level2.svelte';\n\timport Level3 from './Level3.svelte';\n\t\n\texport let values;\n</script>\n\n<div class=\"level1\">\n\t{#each values as value}\n\t\t<h4>level 1 #{value}</h4>\n\t\t<Level2 condition=\"{value % 2}\">\n\t\t\t<Level3>\n\t\t\t\t<span>And more stuff goes in here</span>\n\t\t\t</Level3>\n\t\t</Level2>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deeper/Level2.svelte",
    "content": "<script>\n\texport let condition;\n</script>\n\n\n\n<div class=\"level2\">\n\t<h4>level 2</h4>\n\t{#if condition}\n\t\t<span>TRUE! <slot></slot></span>\n\t{:else}\n\t\t<span>FALSE! <slot></slot></span>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deeper/Level3.svelte",
    "content": "<div class=\"level3\">\n\t<h4>level 3</h4>\n\t<slot></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deeper/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { values: [1, 2, 3, 4] };\n\t},\n\n\ttest({ component }) {\n\t\tcomponent.values = [2, 3];\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-nested-deeper/main.svelte",
    "content": "<script>\n\timport Level1 from './Level1.svelte';\n\t\n\texport let values;\n</script>\n\n<Level1 {values}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-constructor/Sub.svelte",
    "content": "<div>Sub</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-constructor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tget props() {\n\t\treturn { selected: false };\n\t},\n\terror: '$$component is not a function'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-constructor/main.svelte",
    "content": "<script>\n\timport Sub from './Sub.svelte';\n\texport let selected;\n\tlet banana = {};\n\tlet component = banana;\n\t$: selected ? component = Sub : component = banana;\n</script>\n\n<svelte:component this={component} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-constructor2/Sub.svelte",
    "content": "<div>Sub</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-constructor2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\t// override process.env.HMR — this test only passes in prod mode because in dev mode we generate a helpful error\n\t\tdev: false\n\t},\n\n\tget props() {\n\t\treturn { componentName: 'Sub' };\n\t},\n\thtml: '<div>Sub</div>',\n\ttest({ assert, component, target }) {\n\t\tcomponent.componentName = 'Proxy';\n\t\tassert.htmlEqual(target.innerHTML, '<div>Sub</div>');\n\t\ttry {\n\t\t\tcomponent.componentName = 'banana';\n\t\t\tthrow new Error('Expected an error');\n\t\t} catch (err) {\n\t\t\tassert.include(/** @type {Error} */ (err).message, '$$component is not a function');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-constructor2/main.svelte",
    "content": "<script>\n\timport Sub from './Sub.svelte';\n\texport let componentName = 'Sub';\n\tlet proxy = new Proxy(Sub, {});\n\tlet banana = {};\n\tlet component;\n\t$: {\n\t\tif (componentName === 'Sub') component = Sub;\n\t\telse if (componentName === 'Proxy') component = proxy;\n\t\telse component = banana;\n\t};\n</script>\n\n<svelte:component this={component} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-void/Link.svelte",
    "content": "<p><slot></slot></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-void/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Hello</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-not-void/main.svelte",
    "content": "<script>\n\timport Link from './Link.svelte';\n</script>\n\n<Link>Hello</Link>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-prop-object/Child.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\nchild: {x.y}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-prop-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `child: 0 parent: 0 <button>inc x</button>`,\n\n\ttest({ assert, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `child: 1 parent: 1 <button>inc x</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-prop-object/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n\n\tlet x;\n\t$: if (!x) x = {y:0};\n</script>\n\n<Child x={x ?? {}} />\n \nparent: {x.y} \n<button on:click={() => x.y++}>inc x</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\taccessors: false,\n\thtml: '',\n\tasync test({ assert, target, component }) {\n\t\tcomponent.$set({\n\t\t\tfoo: 'bar',\n\t\t\tvisible: true\n\t\t});\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(target.innerHTML, '{\"foo\":\"bar\",\"visible\":true} {\"foo\":\"bar\"}');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-props/main.svelte",
    "content": "<script>\n\texport let visible;\n</script>\n\n{#if visible}\n\t{JSON.stringify($$props)} {JSON.stringify($$restProps)}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-props-added/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {};\n\t},\n\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tawait component.$set({ message: 'goodbye' });\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>goodbye</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-props-added/main.svelte",
    "content": "{#if 'message' in $$props}\n\t<p>{$$props.message}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-props-mutated/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nconst data = {\n\tmessage: 'hello'\n};\n\nexport default test({\n\tget props() {\n\t\tdata.message = 'hello';\n\n\t\treturn {\n\t\t\tdata\n\t\t};\n\t},\n\n\thtml: '<p>hello</p>',\n\n\ttest({ assert, component, target }) {\n\t\tdata.message = 'goodbye';\n\t\tcomponent.$set({ data });\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>goodbye</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-props-mutated/main.svelte",
    "content": "<script>\n\texport let data;\n</script>\n\n<p>{data.message}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-ref/Widget.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let isWidget;\n\n\tonMount(() => {\n\t\tisWidget = true;\n\t});\n</script>\n\n<p>i am a widget</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-ref/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><p>i am a widget</p></div>',\n\n\ttest({ assert, component }) {\n\t\tconst { widget } = component;\n\t\tassert.ok(widget.isWidget);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-ref/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\texport let widget;\n</script>\n\n<div>\n\t<Widget bind:this={widget}/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-shorthand-import/Widget.svelte",
    "content": "<p>This is the widget.</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-shorthand-import/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>This is the widget.</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-shorthand-import/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-attribute-order/Component.svelte",
    "content": "<slot name=\"footer\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-attribute-order/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Disable</button>\n\t\t<button slot=\"footer\">Button</button>\n\t\t<button slot=\"footer\">Button</button>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst [btn, btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.equal(btn1.disabled, true);\n\t\tassert.equal(btn2.disabled, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-attribute-order/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet disabled = false;\n</script>\n\n<button on:click={() => disabled = !disabled}>Disable</button>\n\n<Component>\n\t<button slot=\"footer\" disabled={disabled}>Button</button>\n</Component>\n\n<Component>\n\t<button disabled={disabled} slot=\"footer\">Button</button>\n</Component>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-chained/Inner.svelte",
    "content": "<slot/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-chained/Outer.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n</script>\n\n<Inner>\n\t<slot/>\n</Inner>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-chained/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'one',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.text = 'two';\n\t\tassert.htmlEqual(target.innerHTML, 'two');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-chained/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte';\n\n\texport let text = 'one';\n</script>\n\n<Outer>\n\t{text}\n</Outer>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named/Bar.svelte",
    "content": "<p>bar</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named/Foo.svelte",
    "content": "<p>foo</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named/Nested.svelte",
    "content": "<div>\n\t<slot/>\n\t<slot name='bar'/>\n\t<slot name='foo'/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\tHello\n\t\t\t<p>bar</p>\n\t\t\t<p>foo</p>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n</script>\n\n<Nested>\n\tHello\n\n\t<Foo slot='foo' />\n\t<Bar slot='bar' />\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-b/Hello.svelte",
    "content": "<script>\n  export let name;\n</script>\n\n<span>Hello {name}</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-b/Nested.svelte",
    "content": "<slot name=\"name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>Hello world</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-b/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport Hello from './Hello.svelte';\n\n\tlet name = 'world';\n</script>\n\n<Nested>\n\t<Hello slot=\"name\" {name} />\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-c/Hello.svelte",
    "content": "<span>Hello</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-c/Nested.svelte",
    "content": "<slot name=\"name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-c/World.svelte",
    "content": "<span>world</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-c/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>Hello</span>\n\t\t<span>world</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-component-named-c/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport Hello from './Hello.svelte';\n\timport World from './World.svelte';\n</script>\n\n<Nested>\n\t<Hello slot=\"name\" />\n</Nested>\n\n<Nested>\n\t<World slot=\"name\" />\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-each/Nested.svelte",
    "content": "<script>\n\tlet keys = ['a', 'b'];\n\n\tfunction setKey(key, value) {\n\t\tconsole.log(`setKey(${key}, ${value})`);\n\t}\n</script>\n\n{#each keys as key (key)}\n\t<slot {key} set={(value) => setKey(key, value)} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button type=\"button\">Set a</button>\n\t\t<button type=\"button\">Set b</button>\n\t`,\n\n\tasync test({ assert, target, window, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait btn1.dispatchEvent(click);\n\t\tassert.deepEqual(logs, ['setKey(a, value-a)']);\n\n\t\tawait btn2.dispatchEvent(click);\n\t\tassert.deepEqual(logs, ['setKey(a, value-a)', 'setKey(b, value-b)']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-each/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:set let:key>\n\t<button type=\"button\" on:click={() => set(`value-${key}`)}>Set {key}</button>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-each-nested/Nested.svelte",
    "content": "<script>\n\tlet keys = ['a', 'b'];\n\tlet items = ['c', 'd'];\n\n\tfunction setKey(key, value, item) {\n\t\tconsole.log(`setKey(${key}, ${value}, ${item})`);\n\t}\n</script>\n\n{#each items as item (item)}\n\t{#each keys as key (key)}\n\t\t<slot {key} {item} set={(value) => setKey(key, value, item)} />\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-each-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button type=\"button\">Set a-c</button>\n\t\t<button type=\"button\">Set b-c</button>\n\t\t<button type=\"button\">Set a-d</button>\n\t\t<button type=\"button\">Set b-d</button>\n\t`,\n\n\tasync test({ assert, target, window, logs }) {\n\t\tconst [btn1, btn2, btn3, btn4] = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait btn1.dispatchEvent(click);\n\t\tassert.deepEqual(logs, ['setKey(a, value-a-c, c)']);\n\n\t\tawait btn2.dispatchEvent(click);\n\t\tassert.deepEqual(logs, ['setKey(a, value-a-c, c)', 'setKey(b, value-b-c, c)']);\n\n\t\tawait btn3.dispatchEvent(click);\n\t\tassert.deepEqual(logs, [\n\t\t\t'setKey(a, value-a-c, c)',\n\t\t\t'setKey(b, value-b-c, c)',\n\t\t\t'setKey(a, value-a-d, d)'\n\t\t]);\n\n\t\tawait btn4.dispatchEvent(click);\n\t\tassert.deepEqual(logs, [\n\t\t\t'setKey(a, value-a-c, c)',\n\t\t\t'setKey(b, value-b-c, c)',\n\t\t\t'setKey(a, value-a-d, d)',\n\t\t\t'setKey(b, value-b-d, d)'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-each-nested/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:set let:key let:item>\n\t<button type=\"button\" on:click={() => set(`value-${key}-${item}`)}>Set {key}-{item}</button>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-let/Inner.svelte",
    "content": "<script>\n\tfunction setKey(key, value) {\n\t\tconsole.log(`setKey(${key}, ${value})`);\n\t}\n</script>\n\n<slot key=\"a\" set={setKey} />\n<slot key=\"b\" set={setKey} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-let/Nested.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n</script>\n\n<Inner let:key let:set>\n\t<slot {key} set={(value) => set(key, value)} />\n</Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button type=\"button\">Set a</button>\n\t\t<button type=\"button\">Set b</button>\n\t`,\n\n\tasync test({ assert, target, window, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait btn1.dispatchEvent(click);\n\t\tassert.deepEqual(logs, ['setKey(a, value-a)']);\n\n\t\tawait btn2.dispatchEvent(click);\n\t\tassert.deepEqual(logs, ['setKey(a, value-a)', 'setKey(b, value-b)']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-context-props-let/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:set let:key>\n\t<button type=\"button\" on:click={() => set(`value-${key}`)}>Set {key}</button>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-default/Nested.svelte",
    "content": "<p>\n\t<slot/>\n</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-default/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Hello</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-default/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\tHello\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-default-in-each/Nested.svelte",
    "content": "<script>\n\tlet promise = new Promise(resolve => resolve(10));\n</script>\n\n{#each {length: 3} as _, i}\n\t<slot item={i}/>\n{/each}\n\n{#await promise then value}\n\t<slot {value}/>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-default-in-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>0 - </div>\n\t\t<div>1 - </div>\n\t\t<div>2 - </div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-default-in-each/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:item let:value>\n\t<div>{item} - {value}</div>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-dynamic/Nested.svelte",
    "content": "<script>\n\texport let foo = 'a';\n</script>\n\n<slot>\n\t<span>{foo}</span>\n</slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>override default slot</p>\n\t`,\n\n\ttest({ component }) {\n\t\tcomponent.nested.foo = 'b';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-dynamic/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let nested;\n</script>\n\n<Nested bind:this={nested}>\n\t<p>override default slot</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-each-block/Nested.svelte",
    "content": "<div>\n\t<slot/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-each-block/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested>\n\t{#each things as thing}\n\t\t<span>{thing}</span>\n\t{/each}\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-empty/Nested.svelte",
    "content": "<p>no slot here</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>no slot here</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-empty/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-empty-b/Nested.svelte",
    "content": "<div>\n\t<slot name=\"slot1\" />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-empty-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><input slot=\"slot1\"></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-empty-b/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\";\n</script>\n<Nested>\n\t<input slot=\"slot1\">\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback/Nested.svelte",
    "content": "<div>\n\t<slot><p class='default'>default fallback content</p></slot>\n\t<slot name='bar'><p class='default'>bar fallback content</p></slot>\n\t<slot name='foo'><p class='default'>foo fallback content</p></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>not fallback</p>\n\t\t\t<p class='default'>bar fallback content</p>\n\t\t\t<p class='default'>foo fallback content</p>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<p>not fallback</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-2/Inner.svelte",
    "content": "<script>\n\timport { model } from \"./store.svelte\";\n\texport let value = '';\n</script>\n\n<input bind:value={$model} />\n{value}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-2/Outer.svelte",
    "content": "<script>\n\timport Inner from \"./Inner.svelte\";\n\texport let defaultValue = '';\n\texport let slotProps = '';\n</script>\n\n<slot {slotProps}><Inner value={defaultValue} /></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<input> <input> <input>',\n\tssrHtml: '<input value=\"Blub\"> <input value=\"Blub\"> <input value=\"Blub\">',\n\n\ttest({ assert, target, component, window }) {\n\t\tconst [input1, input2, inputFallback] = target.querySelectorAll('input');\n\n\t\t// TODO this works differently now, deduplicates to one subscription - ok?\n\t\t// assert.equal(component.getSubscriberCount(), 3);\n\n\t\tinput1.value = 'a';\n\t\tinput1.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\t\tinput1.value = 'ab';\n\t\tinput1.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\t\tassert.equal(input1.value, 'ab');\n\t\tassert.equal(input2.value, 'ab');\n\t\tassert.equal(inputFallback.value, 'ab');\n\n\t\tcomponent.props = 'hello';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input> hello\n\t\t\t<input> hello\n\t\t\t<input>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.fallback = 'world';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input> hello\n\t\t\t<input> hello\n\t\t\t<input> world\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-2/main.svelte",
    "content": "<script>\n\timport Outer from \"./Outer.svelte\";\n\timport Inner from \"./Inner.svelte\";\n\timport {model} from \"./store.svelte\";\n\n\texport let props = '';\n\texport let fallback = '';\n\n\texport function getSubscriberCount() {\n\t\treturn model.getCount();\n\t}\n</script>\n\n<Outer slotProps={props} defaultValue={fallback} let:slotProps>    \n\t<Inner value={slotProps} />\n</Outer>\n\n<Outer slotProps={props} defaultValue={fallback} let:slotProps>    \n\t<Inner value={slotProps} />\n</Outer>\n\n<Outer slotProps={props} defaultValue={fallback}>\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-2/store.svelte",
    "content": "<script module>\n\tlet value = 'Blub';\n\tlet count = 0;\n\tconst subscribers = new Set();\n\texport const model = {\n\t\tsubscribe(fn) {\n\t\t\tsubscribers.add(fn);\n\t\t\tcount++;\n\t\t\tfn(value);\n\t\t\treturn () => {\n\t\t\t\tcount--;\n\t\t\t\tsubscribers.delete(fn);\n\t\t\t};\n\t\t},\n\t\tset(v) {\n\t\t\tvalue = v;\n\t\t\tsubscribers.forEach((fn) => fn(v));\n\t\t},\n\t\tgetCount() {\n\t\t\treturn count;\n\t\t}\n\t};\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-3/Inner.svelte",
    "content": "<slot>\n\t<div>Hello</div>\n\t<div>world</div>\n\t<div>Bye</div>\n\t<div>World</div>\n</slot>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div>Hello World</div>\n\t<div>Hello</div><div>world</div><div>Bye</div><div>World</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-3/main.svelte",
    "content": "<script>\n\timport Inner from \"./Inner.svelte\";\n</script>\n\n<Inner>\n\t<div>Hello World</div>\n</Inner>\n\n<Inner></Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-4/Inner.svelte",
    "content": "<slot name=\"a\"><!-- placeholder--></slot>\n<slot name=\"b\"><!-- placeholder--> </slot>\n<slot name=\"c\"><!-- placeholder--> foobar </slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\tfoobar\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-4/main.svelte",
    "content": "<script>\n\timport Inner from \"./Inner.svelte\";\n</script>\n\n<Inner></Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-5/IconA.svelte",
    "content": "Icon A"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-5/IconB.svelte",
    "content": "Icon B"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-5/Inner.svelte",
    "content": "<script>\n\timport IconA from './IconA.svelte';\n\timport IconB from './IconB.svelte';\n\n\tlet variable = false;\n</script>\n\n<button on:click={() => variable = !variable}>Click Me</button>\n<div>\n\t<slot>\n\t\t<svelte:component this={variable ? IconA : IconB} />\n\t</slot>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>Click Me</button>\n\t<div>Icon B</div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Click Me</button>\n\t\t\t<div>Icon A</div>\n\t\t\t`\n\t\t);\n\n\t\tbtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Click Me</button>\n\t\t\t<div>Icon B</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-5/main.svelte",
    "content": "<script>\n\timport Inner from \"./Inner.svelte\";\n</script>\n\n<Inner></Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-6/Foo.svelte",
    "content": "<slot />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-6/Inner.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n</script>\n\n<Foo>\n\t<slot>\n\t\t{JSON.stringify($$props)}\n\t</slot>\n</Foo>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\n// $$props reactivity in slot fallback\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t{\"value\":\"\"}\n\t`,\n\tssrHtml: `\n\t\t<input value=\"\">\n\t\t{\"value\":\"\"}\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t{\"value\":\"abc\"}\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-6/main.svelte",
    "content": "<script>\n\timport Inner from \"./Inner.svelte\";\n\tlet value = '';\n</script>\n\n<input bind:value />\n\n<Inner {value} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-empty/Nested.svelte",
    "content": "<div>\n\t<slot><p class='default'>default fallback content</p></slot>\n\t<slot name='bar'>bar fallback</slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div>\n\t\t<p class=\"default\">default fallback content</p>\n\t\t<input slot=\"bar\">\n\t</div>\n\n\t<div>\n\t\t<p class=\"default\">default fallback content</p>\n\t\tbar fallback\n\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-fallback-empty/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\";\n</script>\n\n<Nested>\n\t<input slot=\"bar\">\n</Nested>\n\n<Nested>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-block/Nested.svelte",
    "content": "<div>\n\t<slot/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>unconditional</p>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>unconditional</p>\n\t\t\t\t<p>conditional</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-block/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let foo;\n</script>\n\n<Nested>\n\t<p>unconditional</p>\n\n\t{#if foo}\n\t\t<p>conditional</p>\n\t{/if}\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-block-before-node/Nested.svelte",
    "content": "<div>\n\t<slot/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-block-before-node/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>unconditional</p>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>conditional</p>\n\t\t\t\t<p>unconditional</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-block-before-node/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let foo;\n</script>\n\n<Nested>\n\t{#if foo}\n\t\t<p>conditional</p>\n\t{/if}\n\n\t<p>unconditional</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-else-block-before-node/Nested.svelte",
    "content": "<slot/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-else-block-before-node/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>disabled</p>\n\t\t<p>unconditional</p>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.enabled = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>enabled</p>\n\t\t\t<p>unconditional</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-if-else-block-before-node/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let enabled;\n</script>\n\n<Nested>\n\t{#if !enabled}\n\t\t<p>disabled</p>\n\t{:else}\n\t\t<p>enabled</p>\n\t{/if}\n\n\t<p>unconditional</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things} let:thing>\n\t<span>{thing}</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-aliased/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-aliased/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-aliased/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things} let:thing={x}>\n\t<span>{x}</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-b/Nested.svelte",
    "content": "<script>\n\tlet count = 0;\n</script>\n\n<button on:click=\"{() => count += 1}\">+1</button>\n<slot count={count}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-b/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<span>0</span>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<span>1</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-b/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:count>\n\t<span>{count}</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-c/Nested.svelte",
    "content": "<script>\n\tlet count = 0;\n</script>\n\n<button on:click=\"{() => count += 1}\">+1</button>\n<slot c={count}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-c/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<span>0 ()</span>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<span>1 ()</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-c/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:c let:count>\n\t<span>{c} ({count})</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-d/Nested.svelte",
    "content": "<script>\n\tlet foo = 'a';\n</script>\n\n<div on:click=\"{() => foo = 'b'}\">\n\t<slot {foo}></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-d/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>a</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tdiv?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>b</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-d/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:foo={bar}>\n\t<p>{bar}</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-destructured/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-destructured/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [{ num: 1 }, { num: 2 }, { num: 3 }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [{ num: 1 }, { num: 2 }, { num: 3 }, { num: 4 }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-destructured/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things} let:thing=\"{{ num }}\">\n\t<span>{num}</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-destructured-2/Nested.svelte",
    "content": "<script>\n\texport let props;\n</script>\n\n<slot value={props} data={Array.isArray(props) ? props[0] : props.a} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-destructured-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\thello world 0 hello\n\t\t\t<button>Increment</button>\n\t\t</div>\n\t\t<div>\n\t\t\thello world 0 hello\n\t\t\t<button>Increment</button>\n\t\t</div>\n\t\t<div>\n\t\t\thello world 0 hello\n\t\t\t<button>Increment</button>\n\t\t</div>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst [button1, button2, button3] = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 0 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 0 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tbutton2.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 0 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tbutton3.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-destructured-2/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\";\n\tlet c = 0, d = 0, e = 0;\n</script>\n\n<div>\n\t<Nested props={['hello', 'world']} let:value={pair} let:data={foo}>\n\t\t{pair[0]} {pair[1]} {c} {foo}\n\t</Nested>\n\n\t<button on:click={() => { c += 1; }}>Increment</button>\n</div>\n\n<div>\n\t<Nested props={['hello', 'world']} let:value={[a, b]} let:data={foo}>\n\t\t{a} {b} {d} {foo}\n\t</Nested>\n\n\t<button on:click={() => { d += 1; }}>Increment</button>\n</div>\n\n<div>\n\t<Nested props={{ a: 'hello', b: 'world' }} let:value={{ a, b }} let:data={foo}>\n\t\t{a} {b} {e} {foo}\n\t</Nested>\n\n\t<button on:click={() => { e += 1; }}>Increment</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-e/Nested.svelte",
    "content": "<script>\n\tlet fooText = 'foo';\n</script>\n\n<div>\n\t<slot someText={fooText}></slot>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-e/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>foo</p>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait div?.dispatchEvent(click);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>foo</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-e/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:someText={someText}>\n\t<p>{someText}</p>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-f/A.svelte",
    "content": "<script>\n\timport B from './B.svelte';\n\texport let x;\n</script>\n\n<B {x} let:reflected>\n\t<span>{reflected}</span>\n\t<slot {reflected} />\n</B>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-f/B.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<slot reflected={x}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-f/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>1</span>\n\t\t<span>1</span>\n\t`,\n\n\tasync test({ assert, target, component }) {\n\t\tcomponent.x = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>2</span>\n\t\t\t<span>2</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-f/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\texport let x = 1;\n</script>\n\n<A {x} let:reflected>\n\t<span>{reflected}</span>\n</A>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/A.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<slot name=\"foo\" reflected={x}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span slot=\"foo\" class=\"1\">1</span>\n\t\t0\n\t`,\n\ttest({ assert, target, component, window }) {\n\t\tcomponent.x = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span slot=\"foo\" class=\"2\">2</span>\n\t\t\t0\n\t\t`\n\t\t);\n\n\t\tconst span = target.querySelector('span');\n\t\tspan?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span slot=\"foo\" class=\"2\">2</span>\n\t\t\t2\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\texport let x = 1;\n\tlet y = 0;\n</script>\n\n<A {x}>\n\t<span \n\t\ton:click={() => y = reflected}\n\t\tslot=\"foo\"\n\t\tlet:reflected\n\t\tclass={reflected}\n\t>\n\t\t{reflected}\n\t</span>\n</A>\n{ y }"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-binding/Nested.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n<div>\n\t{#each items as item, index}\n\t\t<slot {index}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<label>1: <input></label>\n\t\t\t<label>2: <input></label>\n\t\t\t<label>3: <input></label>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<label>1: <input value=\"a\"></label>\n\t\t\t<label>2: <input value=\"b\"></label>\n\t\t\t<label>3: <input value=\"c\"></label>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[2].value = 'd';\n\t\tawait inputs[2].dispatchEvent(new window.Event('input'));\n\n\t\tassert.deepEqual(component.letters, ['a', 'b', 'd']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-binding/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let letters = ['a', 'b', 'c'];\n</script>\n\n<Nested items={letters} let:index>\n\t<label>\n\t\t{index + 1}: <input bind:value={letters[index]}>\n\t</label>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot/Inner.svelte",
    "content": "<slot/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot/Outer.svelte",
    "content": "<script>\n\texport let prop\n</script>\n\n<slot value={prop} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { prop: 'a' };\n\t},\n\n\thtml: 'a',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.prop = 'b';\n\t\tassert.htmlEqual(target.innerHTML, 'b');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte'\n\timport Inner from './Inner.svelte'\n\n\texport let prop\n</script>\n\n<Outer {prop} let:value>\n\t<Inner>{value}</Inner>\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot-2/Inner.svelte",
    "content": "<slot/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot-2/Outer.svelte",
    "content": "<script>\n\texport let prop\n</script>\n\n<slot value={prop} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot-2/_config.js",
    "content": "import { ok, test } from '../../test';\n\n/** @type {string[]} */\nlet logs;\n\n/** @param {string} value */\nfunction log(value) {\n\tlogs.push(value);\n}\n\nexport default test({\n\tget props() {\n\t\treturn { prop: 'a', log };\n\t},\n\thtml: '<button></button>',\n\tbefore_test() {\n\t\tlogs = [];\n\t},\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tawait button.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tassert.deepEqual(logs, ['a']);\n\n\t\tcomponent.prop = 'b';\n\t\tawait button.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tassert.deepEqual(logs, ['a', 'b']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-in-slot-2/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte'\n\timport Inner from './Inner.svelte'\n\n\texport let prop\n\texport let log;\n</script>\n\n<Outer {prop} let:value>\n\t<Inner><button on:click={() => { log(value); }}></button></Inner>\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-inline-function/Inner.svelte",
    "content": "<script>\n  export let log;\n  export let b;\n  function innerCall(a) {\n    log(`a: ${a}, b: ${b}`);\n  }\n</script>\n<slot name=\"inner_slot\" {innerCall} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-inline-function/Outer.svelte",
    "content": "<script>\n  import Inner from './Inner.svelte'\n  export let log;\n  export let a;\n\texport let b;\n</script>\n\n<Inner {log} {b}>\n  <svelte:fragment let:innerCall slot=\"inner_slot\">\n    <slot outerCall={() => innerCall(a)} />\n  </svelte:fragment>\n</Inner>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-inline-function/_config.js",
    "content": "import { ok, test } from '../../test';\n\n/** @type {string[]} */\nlet logs;\n\n/** @param {string} value */\nfunction log(value) {\n\tlogs.push(value);\n}\n\nexport default test({\n\thtml: '<button>click me</button>',\n\tget props() {\n\t\treturn { a: 'a', b: 'b', log };\n\t},\n\tbefore_test() {\n\t\tlogs = [];\n\t},\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tawait button.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tassert.deepEqual(logs, ['a: a, b: b']);\n\n\t\tcomponent.a = '1';\n\t\tcomponent.b = '2';\n\t\tawait button.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tassert.deepEqual(logs, ['a: a, b: b', 'a: 1, b: 2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-inline-function/main.svelte",
    "content": "<script>\n\timport Outer from \"./Outer.svelte\";\n\texport let log = [];\n\texport let a;\n\texport let b;\n</script>\n\n<Outer let:outerCall {log} {a} {b}>\n\t<button on:click={outerCall}>\n\t\tclick me\n\t</button>\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-missing-prop/Bar.svelte",
    "content": "<script>\n\texport let thing;\n</script>\n\n<p>{thing}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-missing-prop/Foo.svelte",
    "content": "<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-missing-prop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p></p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-missing-prop/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\tconst things = { '1': 'one' };\n</script>\n\n<Foo let:id>\n\t<Bar thing={things[id]}/>\n</Foo>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-mutated/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot {thing}/>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-mutated/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>mutate</button>\n\t\t<div>\n\t\t\t<span>hello</span>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate</button>\n\t\t\t\t<div>\n\t\t\t\t\t<span>bye</span>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-mutated/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\tlet things = [{ text: 'hello' }];\n</script>\n\n<button on:click={() => things[0].text = 'bye'}>mutate</button>\n<Nested {things} let:thing>\n\t<span>{thing.text}</span>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot name=\"foo\" {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<div slot=\"foo\"><span>1</span></div>\n\t\t\t<div slot=\"foo\"><span>2</span></div>\n\t\t\t<div slot=\"foo\"><span>3</span></div>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<div slot=\"foo\"><span>1</span></div>\n\t\t\t\t<div slot=\"foo\"><span>2</span></div>\n\t\t\t\t<div slot=\"foo\"><span>3</span></div>\n\t\t\t\t<div slot=\"foo\"><span>4</span></div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things}>\n\t<div slot=\"foo\" let:thing>\n\t\t<span>{thing}</span>\n\t</div>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named-2/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot name=\"foo\" {thing}/>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named-2/SlotInner.svelte",
    "content": "<script>\n\texport let thing;\n</script>\n<span>{thing}</span>\n<slot />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<div class=\"inner-slot\">1</div>\n\t\t\t<span>2</span>\n\t\t\t<div class=\"inner-slot\">2</div>\n\t\t\t<span>3</span>\n\t\t\t<div class=\"inner-slot\">3</div>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<div class=\"inner-slot\">1</div>\n\t\t\t\t<span>2</span>\n\t\t\t\t<div class=\"inner-slot\">2</div>\n\t\t\t\t<span>3</span>\n\t\t\t\t<div class=\"inner-slot\">3</div>\n\t\t\t\t<span>4</span>\n\t\t\t\t<div class=\"inner-slot\">4</div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-named-2/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport SlotInner from './SlotInner.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things}>\n\t<SlotInner slot=\"foo\" let:thing={data} thing={data}>\n\t\t<div class=\"inner-slot\">{data}</div>\n\t</SlotInner>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope/Nested.svelte",
    "content": "<slot thing={2} name=\"thing\"/>\n\t"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'thing is not defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n</script>\n\n<Nested let:thing>\n\t<svelte:fragment slot=\"thing\"><span>{thing}</span></svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-2/Nested.svelte",
    "content": "<slot />\n<slot thing={2} name=\"thing\"/>\n\t"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span></span><span>2</span>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-2/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:thing>\n\t<span>{thing}</span>\n\t<svelte:fragment slot=\"thing\" let:thing><span>{thing}</span></svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-3/Nested.svelte",
    "content": "<script>\n\tlet count = 0;\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n<div>\n\t<slot {count}></slot>\n\t<slot name=\"foo\" {count}></slot>\n\t<slot name=\"bar\"></slot>\n\n\t<button on:click={increment}>+1</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>count in default slot: 0</p>\n\t\t\t<p slot=\"foo\">count in foo slot: 0</p>\n\t\t\t<p slot=\"bar\">count in bar slot: 42</p>\n\t\t\t<button>+1</button>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>count in default slot: 1</p>\n\t\t\t\t<p slot=\"foo\">count in foo slot: 1</p>\n\t\t\t\t<p slot=\"bar\">count in bar slot: 42</p>\n\t\t\t\t<button>+1</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-3/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\tlet count = 42;\n</script>\n\n<Nested let:count>\n\t<p>\n\t\tcount in default slot: {count}\n\t</p>\n\n\t<p slot=\"foo\" let:count>\n\t\tcount in foo slot: {count}\n\t</p>\n\n\t<p slot=\"bar\">\n\t\tcount in bar slot: {count}\n\t</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-4/Nested.svelte",
    "content": "<slot name=\"inner\" text=\"hello world\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-4/Nested2.svelte",
    "content": "<script>\n\texport let text;\n</script>\n\n<div>\n\t{text}\n\t<hr />\n\t<slot name=\"footer\" />\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div>hello world <hr> <div slot=\"footer\">hello world</div></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-4/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\"\n\timport Nested2 from \"./Nested2.svelte\"\n</script>\n\n<Nested>\n\t<Nested2 slot=\"inner\" let:text {text}>\n\t\t<div slot=\"footer\">\n\t\t\t{text}\n\t\t</div>\n\t</Nested2>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-5/Nested.svelte",
    "content": "<slot name=\"inner\" text=\"hello\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-5/Nested2.svelte",
    "content": "<slot name=\"footer\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-5/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div slot=\"footer\">hello hello</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-scope-5/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\"\n\timport Nested2 from \"./Nested2.svelte\"\n</script>\n\n<Nested>\n\t<Nested2 slot=\"inner\" let:text>\n\t\t<div slot=\"footer\">\n\t\t\t{@const text2 = text}\n\t\t\t{text} {text2}\n\t\t</div>\n\t</Nested2>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-static/Nested.svelte",
    "content": "<slot value=\"Hi\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Hi</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-let-static/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:value>\n\t<p>{value}</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-name-with-hyphen/Nested.svelte",
    "content": "<div>\n\t<slot name=\"foo-bar\"/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-name-with-hyphen/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><p slot=\"foo-bar\">Hello</p></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-name-with-hyphen/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<p slot=\"foo-bar\">Hello</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named/Nested.svelte",
    "content": "<div>\n\t<slot/>\n\t<slot name='bar'/>\n\t<slot name='foo'/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\tHello\n\t\t\t<p slot='bar'>bar</p>\n\t\t\t<p slot='foo'>foo</p>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\tHello\n\n\t<p slot='foo'>foo</p>\n\t<p slot='bar'>bar</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-b/Nested.svelte",
    "content": "<slot name=\"name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span slot=\"name\">Hello world</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-b/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\tlet name = 'world';\n</script>\n\n<Nested>\n\t<span slot=\"name\">Hello {name}</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-c/Nested.svelte",
    "content": "<slot name=\"name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-c/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span slot=\"name\">Hello</span>\n\t\t<span slot=\"name\">world</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-c/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<span slot=\"name\">Hello</span>\n</Nested>\n\n<Nested>\n\t<span slot=\"name\">world</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-scope/Child.svelte",
    "content": "<script lang=\"ts\">\n\texport let onclick;\n</script>\n\n<button {onclick}>\n\t<slot />\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-scope/Parent.svelte",
    "content": "<slot name=\"item\" item={1} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-scope/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, [1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-named-scope/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Parent from './Parent.svelte';\n\timport Child from './Child.svelte';\n</script>\n\n<Parent>\n\t<Child slot=\"item\" let:item onclick={() => console.log(item)}>asd</Child>\n</Parent>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-names-sanitized/Nested.svelte",
    "content": "<div>\n\t<slot name=\"header1\" />\n\t<slot name=\"-header2_\" />\n\t<slot name=\"3header\" />\n\t<slot name=\"_header4\" />\n\t<slot name=\"header-5\" />\n\t<slot name=\"header&5\" />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-names-sanitized/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<h1 slot=\"header1\">Header 1</h1>\n\t\t\t<h2 slot=\"-header2_\">Header 2</h2>\n\t\t\t<h3 slot=\"3header\">Header 3</h3>\n\t\t\t<h4 slot=\"_header4\">Header 4</h4>\n\t\t\t<h5 slot=\"header-5\">Header 5</h5>\n\t\t\t<h5 slot=\"header&5\">Header 5b</h5>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-names-sanitized/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<h1 slot=\"header1\">Header 1</h1>\n\t<h2 slot=\"-header2_\">Header 2</h2>\n\t<h3 slot=\"3header\">Header 3</h3>\n\t<h4 slot=\"_header4\">Header 4</h4>\n\t<h5 slot=\"header-5\">Header 5</h5>\n\t<h5 slot=\"header&5\">Header 5b</h5>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested/Nested.svelte",
    "content": "<div>\n\t<slot name='foo'>\n\t\t<slot name='bar'></slot>\n\t</slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p slot='bar'>bar</p>\n\t\t</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<p slot='bar'>bar</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-component/Inner.svelte",
    "content": "<div class='inner'>\n\t<slot></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-component/Outer.svelte",
    "content": "<div class='outer'>\n\t<slot></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div class='outer'>\n\t\t\t<div class='inner'>foo</div>\n\t\t</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-component/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte';\n\timport Inner from './Inner.svelte';\n</script>\n\n<Outer>\n\t<Inner>foo</Inner>\n</Outer>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-if/Display.svelte",
    "content": "Display:\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-if/Input.svelte",
    "content": "<script>\n\tlet val;\n</script>\n\n<input bind:value={val} />\n<slot {val}></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-if/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n    <input>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'a';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\tDisplay: a\n\t\t`\n\t\t);\n\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\tDisplay: abc\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-if/main.svelte",
    "content": "<script>\n\timport Input from \"./Input.svelte\";\n\timport Display from \"./Display.svelte\";\n</script>\n\n<Input let:val={foo}>\n\t{#if foo}\n\t\t<Display>{foo}</Display>\n\t{/if}\n</Input>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-element/One.svelte",
    "content": "<script>\n\timport Two from './Two.svelte';\n</script>\n\n<Two>\n\t<div slot=\"b\">\n\t\t<div>\n\t\t\t<slot name=\"a\"></slot>\n\t\t</div>\n\t</div>\n</Two>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-element/Two.svelte",
    "content": "<slot name=\"b\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div slot=\"b\">\n\t\t\t<div>\n\t\t\t\t<div slot=\"a\">a</div>\n\t\t\t</div>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-element/main.svelte",
    "content": "<script>\n\timport One from './One.svelte';\n</script>\n\n<One>\n\t<div slot=\"a\">a</div>\n</One>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-slot/One.svelte",
    "content": "<script>\n\timport Two from './Two.svelte';\n\texport let a, b;\n</script>\n\n<Two {b}>\n\t<svelte:fragment slot=\"two\" let:two>\n\t\t<slot name=\"one\" one={a} two={two}></slot>\n\t</svelte:fragment>\n</Two>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-slot/Two.svelte",
    "content": "<script>\n  export let b;\n</script>\n<slot name=\"two\" two={b}></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p slot=\"one\">one: 1 two: 2</p>\n\t`,\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 3;\n\t\tcomponent.b = 4;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p slot=\"one\">one: 3 two: 4</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.a = 5;\n\t\tcomponent.b = 6;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p slot=\"one\">one: 5 two: 6</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-nested-in-slot/main.svelte",
    "content": "<script>\n\timport One from './One.svelte';\n\texport let a = 1;\n\texport let b = 2;\n</script>\n\n<One {a} {b}>\n\t<p slot='one' let:one let:two>one: {one} two: {two}</p>\n</One>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-slot/Component.svelte",
    "content": "<div>\n\t<slot name=\"test\" />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-slot/Forward.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<Component>\n\t<slot slot=\"test\" />\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><span>lol</span></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-slot/main.svelte",
    "content": "<script>\n\timport Forward from './Forward.svelte';\n</script>\n\n<Forward>\n\t<span>\n\t\tlol\n\t</span>\n</Forward>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-spread/Nested.svelte",
    "content": "<script>\n\texport let obj;\n\texport let c;\n\texport let d;\n</script>\n\n<slot {c} {...obj} {d} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {Record<string, number>} */\n\t\t\tobj: { a: 1, b: 42 },\n\t\t\tc: 5,\n\t\t\td: 10\n\t\t};\n\t},\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>42</p>\n\t\t<p>5</p>\n\t\t<p>10</p>\n\t`,\n\n\ttest({ assert, target, component }) {\n\t\tcomponent.obj = { a: 2, b: 50, c: 30 };\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2</p>\n\t\t\t<p>50</p>\n\t\t\t<p>30</p>\n\t\t\t<p>10</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.c = 22;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2</p>\n\t\t\t<p>50</p>\n\t\t\t<p>30</p>\n\t\t\t<p>10</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.d = 44;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2</p>\n\t\t\t<p>50</p>\n\t\t\t<p>30</p>\n\t\t\t<p>44</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.obj = { a: 9, b: 12 };\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>9</p>\n\t\t\t<p>12</p>\n\t\t\t<p>22</p>\n\t\t\t<p>44</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.c = 88;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>9</p>\n\t\t\t<p>12</p>\n\t\t\t<p>88</p>\n\t\t\t<p>44</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-spread/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let obj = {a: 1, b: 42}\n\texport let c = 5\n\texport let d = 10\n</script>\n\n<Nested {obj} {c} {d} let:a let:b let:c let:d>\n\t<p>{a}</p>\n\t<p>{b}</p>\n\t<p>{c}</p>\n\t<p>{d}</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-spread-props/Nested.svelte",
    "content": "<div>\n  <slot />\n  <div {...$$props}></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-spread-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<input />\n\t\t\t<div class=\"foo\"></div>\n\t\t</div>\n\t`,\n\tssrHtml: `\n\t\t<div>\n\t\t\t<input value=\"\" />\n\t\t\t<div class=\"foo\"></div>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.value = 'foo';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<input />\n\t\t\t\t<div class=\"foo\"></div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-spread-props/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\texport let value = '';\n</script>\n\n<Nested class=\"foo\">\n\t<input bind:value />\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-static-and-dynamic/Nested.svelte",
    "content": "<div>\n\t<slot name=\"a\"></slot>\n\t<slot name=\"b\"></slot>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-static-and-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<span slot=\"a\">static</span>\n\t\t\t<span slot=\"b\">0</span>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.dynamic += 1;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span slot=\"a\">static</span>\n\t\t\t\t<span slot=\"b\">1</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-static-and-dynamic/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\";\n\n\texport let dynamic = 0;\n</script>\n\n\n<Nested>\n\t<span slot=\"a\">static</span>\n\t<span slot=\"b\">{dynamic}</span>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-used-with-default-event/Nested.svelte",
    "content": "<script>\n\tfunction click() {}\n</script>\n\n<p>\n\t<slot><button on:click>Should not appear</button></slot>\n</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-used-with-default-event/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Hello</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-slot-used-with-default-event/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\tHello\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-static-at-symbol/Email.svelte",
    "content": "<script>\n\texport let address;\n</script>\n\n<a href='mailto:{address}'>email</a>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-static-at-symbol/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<a href='mailto:hello@example.com'>email</a>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-static-at-symbol/main.svelte",
    "content": "<script>\n\timport Email from './Email.svelte';\n</script>\n\n<Email address='hello@example.com'/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment/B.svelte",
    "content": "<script>\n  export let name;\n</script>\n\n<div>Hello</div>\n<div>{name}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment/Nested.svelte",
    "content": "<div>a: <slot name=\"a\"></slot></div>\n<div>b: <slot name=\"b\"></slot></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>a: content <span>a</span></div>\n\t\t<div>b: <div>Hello</div><div>world</div></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\";\n\timport B from './B.svelte';\n\tconst a = 'a';\n</script>\n<Nested>\n\t<svelte:fragment slot=\"a\">\n\t\tcontent <span>{ a }</span>\n\t</svelte:fragment>\n\t<svelte:fragment slot=\"b\">\n\t\t<B name=\"world\" />\n\t</svelte:fragment>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-2/Nested.svelte",
    "content": "<slot name=\"name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>Hello</span>\n\t\t<span>world</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-2/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"name\">\n\t\t<span>Hello</span>\n\t</svelte:fragment>\n</Nested>\n\n<Nested>\n\t<svelte:fragment slot=\"name\">\n\t\t<span>world</span>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things} let:thing>\n\t<span>{thing}</span>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-aliased/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot name=\"main\" {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-aliased/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-aliased/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things}>\n\t<svelte:fragment slot=\"main\" let:thing={x}>\n\t\t<span>{x}</span>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-b/Nested.svelte",
    "content": "<script>\n\tlet count = 0;\n</script>\n\n<button on:click=\"{() => count += 1}\">+1</button>\n<slot name=\"main\" count={count}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-b/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<span>0</span>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<span>1</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-b/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"main\" let:count>\n\t\t<span>{count}</span>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-c/Nested.svelte",
    "content": "<script>\n\tlet count = 0;\n</script>\n\n<button on:click=\"{() => count += 1}\">+1</button>\n<slot name='main' c={count}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-c/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<span>0 ()</span>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<span>1 ()</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-c/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"main\" let:c let:count>\n\t\t<span>{c} ({count})</span>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-d/Nested.svelte",
    "content": "<script>\n\tlet foo = 'a';\n</script>\n\n<div on:click=\"{() => foo = 'b'}\">\n\t<slot name=\"main\" {foo}></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-d/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p>a</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tdiv?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>b</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-d/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"main\" let:foo={bar}>\n\t\t<p>{bar}</p>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-destructured/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot name=\"item\" {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-destructured/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [{ num: 1 }, { num: 2 }, { num: 3 }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>1</span>\n\t\t\t<span>2</span>\n\t\t\t<span>3</span>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [{ num: 1 }, { num: 2 }, { num: 3 }, { num: 4 }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-destructured/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things}>\n\t<svelte:fragment slot=\"item\" let:thing=\"{{ num }}\">\n\t\t<span>{num}</span>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-destructured-2/Nested.svelte",
    "content": "<script>\n\texport let props;\n</script>\n\n<slot name=\"main\" value={props} data={Array.isArray(props) ? props[0] : props.a} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-destructured-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\thello world 0 hello\n\t\t\t<button>Increment</button>\n\t\t</div>\n\t\t<div>\n\t\t\thello world 0 hello\n\t\t\t<button>Increment</button>\n\t\t</div>\n\t\t<div>\n\t\t\thello world 0 hello\n\t\t\t<button>Increment</button>\n\t\t</div>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst [button1, button2, button3] = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 0 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 0 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tbutton2.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 0 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tbutton3.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\thello world 1 hello\n\t\t\t\t<button>Increment</button>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-destructured-2/main.svelte",
    "content": "<script>\n\timport Nested from \"./Nested.svelte\";\n\tlet c = 0, d = 0, e = 0;\n</script>\n\n<div>\n\t<Nested props={['hello', 'world']}>\n\t\t<svelte:fragment slot=\"main\" let:value={pair} let:data={foo}>\n\t\t\t{pair[0]} {pair[1]} {c} {foo}\n\t\t</svelte:fragment>\n\t</Nested>\n\n\t<button on:click={() => { c += 1; }}>Increment</button>\n</div>\n\n<div>\n\t<Nested props={['hello', 'world']}>\n\t\t<svelte:fragment slot=\"main\" let:value={[a, b]} let:data={foo}>\n\t\t\t{a} {b} {d} {foo}\n\t\t</svelte:fragment>\n\t</Nested>\n\n\t<button on:click={() => { d += 1; }}>Increment</button>\n</div>\n\n<div>\n\t<Nested props={{ a: 'hello', b: 'world' }}>\n\t\t<svelte:fragment slot=\"main\" let:value={{ a, b }} let:data={foo}>\n\t\t\t{a} {b} {e} {foo}\n\t\t</svelte:fragment>\n\t</Nested>\n\n\t<button on:click={() => { e += 1; }}>Increment</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-e/A.svelte",
    "content": "<script>\n\timport B from './B.svelte';\n\texport let x;\n</script>\n\n<B {x}>\n\t<svelte:fragment slot=\"main\" let:reflected>\n\t\t<span>{reflected}</span>\n\t\t<slot name=\"main\" {reflected} />\n\t</svelte:fragment>\n</B>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-e/B.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<slot name=\"main\" reflected={x}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-e/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>1</span>\n\t\t<span>1</span>\n\t`,\n\n\tasync test({ assert, target, component }) {\n\t\tcomponent.x = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>2</span>\n\t\t\t<span>2</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-e/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\texport let x = 1;\n</script>\n\n<A {x}>\n\t<svelte:fragment slot=\"main\" let:reflected>\n\t\t<span>{reflected}</span>\n\t</svelte:fragment>\t\n</A>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-f/A.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<slot name=\"foo\" reflected={x}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-f/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span class=\"1\">1</span>\n\t\t0\n\t`,\n\tasync test({ assert, target, component, window }) {\n\t\tcomponent.x = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span class=\"2\">2</span>\n\t\t\t0\n\t\t`\n\t\t);\n\n\t\tconst span = target.querySelector('span');\n\t\tawait span?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span class=\"2\">2</span>\n\t\t\t2\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-f/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\texport let x = 1;\n\tlet y = 0;\n</script>\n\n<A {x}>\n\t<svelte:fragment slot=\"foo\" let:reflected>\n\t\t<span \n\t\t\ton:click={() => y = reflected}\n\t\t\tclass={reflected}\n\t\t>\n\t\t\t{reflected}\n\t\t</span>\n\t</svelte:fragment>\n</A>\n{ y }"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-binding/Nested.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n<div>\n\t{#each items as item, index}\n\t\t<slot name=\"main\" {index}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<label>1: <input></label>\n\t\t\t<label>2: <input></label>\n\t\t\t<label>3: <input></label>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<label>1: <input value=\"a\"></label>\n\t\t\t<label>2: <input value=\"b\"></label>\n\t\t\t<label>3: <input value=\"c\"></label>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[2].value = 'd';\n\t\tawait inputs[2].dispatchEvent(new window.Event('input'));\n\n\t\tassert.deepEqual(component.letters, ['a', 'b', 'd']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-binding/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let letters = ['a', 'b', 'c'];\n</script>\n\n<Nested items={letters}>\n\t<svelte:fragment slot=\"main\" let:index>\n\t\t<label>\n\t\t\t{index + 1}: <input bind:value={letters[index]}>\n\t\t</label>\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-slot/Inner.svelte",
    "content": "<slot name=\"main\"/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-slot/Outer.svelte",
    "content": "<script>\n\texport let prop\n</script>\n\n<slot name=\"main\" value={prop} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { prop: 'a' };\n\t},\n\n\thtml: 'a',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.prop = 'b';\n\t\tassert.htmlEqual(target.innerHTML, 'b');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-in-slot/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte'\n\timport Inner from './Inner.svelte'\n\n\texport let prop\n</script>\n\n<Outer {prop}>\n\t<svelte:fragment slot=\"main\" let:value>\n\t\t<Inner>\n\t\t\t<svelte:fragment slot=\"main\">\n\t\t\t\t{value}\n\t\t\t</svelte:fragment>\n\t\t</Inner>\n\t</svelte:fragment>\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-named/Nested.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n<div>\n\t{#each things as thing}\n\t\t<slot name=\"foo\" {thing}/>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-named/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<div slot=\"foo\"><span>1</span></div>\n\t\t\t<div slot=\"foo\"><span>2</span></div>\n\t\t\t<div slot=\"foo\"><span>3</span></div>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [1, 2, 3, 4];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<div slot=\"foo\"><span>1</span></div>\n\t\t\t\t<div slot=\"foo\"><span>2</span></div>\n\t\t\t\t<div slot=\"foo\"><span>3</span></div>\n\t\t\t\t<div slot=\"foo\"><span>4</span></div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-named/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n<Nested {things}>\n\t<div slot=\"foo\" let:thing>\n\t\t<span>{thing}</span>\n\t</div>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-static/Nested.svelte",
    "content": "<slot value=\"Hi\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Hi</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-let-static/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested let:value>\n\t<p>{value}</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-nested/Child.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<svelte:fragment slot=\"name\">\n\t\t<slot />\n\t</svelte:fragment>\n</Nested>\n\n<Nested>\n\t<svelte:fragment slot=\"name\">\n\t\t<slot name=\"b\" />\n\t</svelte:fragment>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-nested/Nested.svelte",
    "content": "<slot name=\"name\"></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\tDefault\n\t\t<p>B slot</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-svelte-fragment-nested/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child>\n\t<svelte:fragment>\n\t\tDefault\n\t</svelte:fragment>\n\t<svelte:fragment slot=\"b\">\n\t\t<p>B slot</p>\n\t</svelte:fragment>\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-template-inline-mutation/Widget.svelte",
    "content": "<script>\n  let count = 0;\n</script>\n\n<button on:click=\"{() => count += 1}\">{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-template-inline-mutation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btns = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbtns[0].dispatchEvent(event);\n\t\tbtns[0].dispatchEvent(event);\n\t\tbtns[1].dispatchEvent(event);\n\t\tbtns[1].dispatchEvent(event);\n\t\tbtns[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(btns[1].innerHTML, '3');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-template-inline-mutation/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget />\n<Widget />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-transition/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst button = /** @type {HTMLButtonElement} */ (target.querySelector('#button'));\n\t\tconst container = target.querySelector('#container');\n\t\tok(button);\n\t\tok(container);\n\n\t\t// Multiple click on button\n\t\tbutton.click();\n\t\tbutton.click();\n\t\tbutton.click();\n\t\tbutton.click();\n\t\tbutton.click();\n\t\tbutton.click();\n\t\tbutton.click();\n\n\t\traf.tick(0);\n\t\tassert.equal(container.children.length, 1);\n\n\t\tflushSync();\n\n\t\traf.tick(501);\n\t\tassert.equal(container.children.length, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-transition/main.svelte",
    "content": "<script>\n\timport { slide } from 'svelte/transition';\n\tlet tag = 'div';\n\tfunction toggle() {\n\t\ttag = (tag) ? null : 'div';\n\t}\n</script>\n\n<button id=\"button\" on:click={toggle}>toggle</button> TAG={tag}\n\n<div id=\"container\">\n\t<svelte:element this={tag} transition:slide={{duration:500}}>CONTENT</svelte:element>\t\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Hello\n\n\t\t</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield/main.svelte",
    "content": "<script>\n\texport let test = true;\n</script>\n\n<p>\n\tHello\n\t{#if test}\n\t\t<slot></slot>\n\t{/if}\n</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-follows-element/Foo.svelte",
    "content": "<div>before</div>\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-follows-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>before</div>\n\t\ttest\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-follows-element/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n</script>\n\n<Foo>test</Foo>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-if/Widget.svelte",
    "content": "<script>\n\texport let show = false;\n</script>\n\n<p>\n\t{#if show}\n\t\t<slot></slot>\n\t{/if}\n</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><p></p></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst { widget } = component;\n\n\t\tassert.equal(widget.show, false);\n\n\t\twidget.show = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div><p>Hello</p></div>');\n\n\t\tcomponent.data = 'World';\n\t\tassert.htmlEqual(target.innerHTML, '<div><p>World</p></div>');\n\n\t\twidget.show = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div><p></p></div>');\n\n\t\tcomponent.data = 'Goodbye';\n\t\tassert.htmlEqual(target.innerHTML, '<div><p></p></div>');\n\n\t\twidget.show = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div><p>Goodbye</p></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-if/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let widget;\n\texport let data = \"Hello\";\n</script>\n\n<div>\n\t<Widget bind:this={widget}>{data}</Widget>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-multiple-in-each/Widget.svelte",
    "content": "<p><slot></slot></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-multiple-in-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Hello Alice</p>\n\t\t<p>Hello Bob</p>\n\t\t<p>Hello Charles</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.people = ['Alice', 'Charles', 'Bob'];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Hello Alice</p>\n\t\t\t<p>Hello Charles</p>\n\t\t\t<p>Hello Bob</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-multiple-in-each/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let people = [ 'Alice', 'Bob', 'Charles' ];\n</script>\n\n{#each people as person}\n\t<Widget>Hello {person}</Widget>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-multiple-in-if/Widget.svelte",
    "content": "<p class='widget'><slot></slot></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-multiple-in-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div><p class='widget'>Hello</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.arriving = false;\n\t\tassert.htmlEqual(target.innerHTML, \"<div><p class='widget'>Goodbye</p></div>\");\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-multiple-in-if/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let arriving = true;\n</script>\n\n<div>\n\t{#if arriving}\n\t\t<Widget>Hello</Widget>\n\t{:else}\n\t\t<Widget>Goodbye</Widget>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-nested-if/Inner.svelte",
    "content": "Inner"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-nested-if/Outer.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{#if foo}\n\t<slot></slot>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-nested-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\tOne\n\t\tInner\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(target.innerHTML, 'One\\nInner');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-nested-if/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte';\n\timport Inner from './Inner.svelte';\n\n\texport let foo = true;\n</script>\n\n<Outer {foo}>\n\tOne\n\t<Inner/>\n</Outer>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-parent/Widget.svelte",
    "content": "<p><slot></slot></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-parent/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div><p>Hello</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tassert.equal(component.data, 'Hello');\n\n\t\tcomponent.data = 'World';\n\t\tassert.equal(component.data, 'World');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><p>World</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-parent/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte'\n\texport let data = \"Hello\";\n</script>\n\n<div>\n\t<Widget>{data}</Widget>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-placement/Modal.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\tconst dispatch = createEventDispatcher();\n\tconst destroy = () => dispatch('destroy');\n</script>\n\n<div class='modal-background' on:click='{destroy}'></div>\n\n<div class='modal'>\n\t<slot></slot>\n\t<button on:click='{destroy}'>close modal</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-placement/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { showModal: true };\n\t},\n\n\thtml: `\n\t\t<div class='modal-background'></div>\n\n\t\t<div class='modal'>\n\t\t\t<h2>Hello!</h2>\n\t\t\t<button>close modal</button>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>show modal</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-placement/main.svelte",
    "content": "<script>\n\timport Modal from './Modal.svelte';\n\n\texport let showModal;\n</script>\n\n{#if showModal}\n\t<Modal on:destroy='{() => showModal = false}'>\n\t\t<h2>Hello!</h2>\n\t</Modal>\n{:else}\n\t<button on:click='{() => showModal = true}'>show modal</button>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-static/Widget.svelte",
    "content": "<b><slot></slot></b>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<b>Hello</b>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.name = 'World';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<b>Hello</b> World\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/component-yield-static/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let name = '';\n</script>\n\n<Widget>Hello</Widget> {name}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello worldworld!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag/main.svelte",
    "content": "<svelte:options runes={false} />\n{#if true}\n\t{@const foo = bar}\n\t{@const yoo = foo}\n\t{@const bar = 'world'}\n\t<h1>Hello {bar}{yoo}!</h1>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>12 120 70, 30+4=34</div>',\n\tasync test({ component, target, assert }) {\n\t\tcomponent.promise1 = Promise.resolve({ width: 5, height: 6 });\n\t\tcomponent.promise2 = Promise.reject({ width: 6, height: 7 });\n\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 300 110, 50+6=56</div>\n\t\t\t<div>42 420 130, 60+7=67</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.constant = 20;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then/main.svelte",
    "content": "<script>\n\texport let promise1 = {width: 3, height: 4};\n\texport let promise2 = {width: 5, height: 7};\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#await promise1 then box}\n\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t{@const perimeter = (box.width + box.height) * constant}\n\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\n\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n{/await}\n\n{#await promise2 catch box}\n\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t{@const perimeter = (box.width + box.height) * constant}\n\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\n\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>12 120 70, 30+4=34</div>',\n\tasync test({ component, target, assert }) {\n\t\tcomponent.promise1 = Promise.resolve({ width: 5, height: 6 });\n\t\tcomponent.promise2 = Promise.reject({ width: 6, height: 7 });\n\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 300 110, 50+6=56</div>\n\t\t\t<div>42 420 130, 60+7=67</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.constant = 20;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring/main.svelte",
    "content": "<script>\n\texport let promise1 = {width: 3, height: 4};\n\texport let promise2 = {width: 5, height: 7};\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#await promise1 then { width, height }}\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/await}\n\n{#await promise2 catch { width, height }}\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-computed-in-computed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>4, 12, 60</p>\n\t`,\n\n\tasync test({ component, target, assert }) {\n\t\tcomponent.permutation = [2, 3, 1];\n\t\tawait (component.promise1 = Promise.resolve({ length: 1, width: 2, height: 3 }));\n\t\ttry {\n\t\t\tawait (component.promise2 = Promise.reject({ length: 97, width: 98, height: 99 }));\n\t\t} catch (e) {\n\t\t\t// nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2, 11, 2</p>\n\t\t\t<p>9506, 28811, 98</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-computed-in-computed/main.svelte",
    "content": "<script>\n\texport let promise1 = {length: 5, width: 3, height: 4};\n\texport let promise2 = {length: 12, width: 5, height: 13};\n\texport let permutation = [1, 2, 3];\n\n\tfunction calculate(length, width, height) {\n\t\treturn { \n\t\t\t'1-Dimensions': [length, width, height],\n\t\t\t'2-Dimensions': [length * width, width * height, length * height],\n\t\t\t'3-Dimensions': [length * width * height, length + width + height, length * width + width * height + length * height]\n\t\t};\n\t}\n\n  const th = 'th';\n</script>\n\n{#await promise1 then { length, width, height }}\n\t{@const { [0]: a, [1]: b, [2]: c } = permutation}\n\t{@const { [`${a}-Dimensions`]: { [c - 1]: first }, [`${b}-Dimensions`]: { [b - 1]: second }, [`${c}-Dimensions`]: { [a - 1]: third } } = calculate(length, width, height) }\n\t<p>{first}, {second}, {third}</p>\n{/await}\n\n{#await promise2 catch { [`leng${th}`]: l, [`wid${th}`]: w, height: h }}\n\t{@const [a, b, c] = permutation}\n\t{@const { [`${a}-Dimensions`]: { [c - 1]: first }, [`${b}-Dimensions`]: { [b - 1]: second }, [`${c}-Dimensions`]: { [a - 1]: third } } = calculate(l, w, h) } \n\t<p>{first}, {second}, {third}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-computed-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>4, 12, 60</p>\n\t`,\n\n\tasync test({ component, target, assert }) {\n\t\tcomponent.permutation = [2, 3, 1];\n\t\tawait (component.promise1 = Promise.resolve({ length: 1, width: 2, height: 3 }));\n\t\ttry {\n\t\t\tawait (component.promise2 = Promise.reject({ length: 97, width: 98, height: 99 }));\n\t\t} catch (e) {\n\t\t\t// nothing\n\t\t}\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2, 11, 2</p>\n\t\t\t<p>9506, 28811, 98</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-computed-props/main.svelte",
    "content": "<script>\n\texport let promise1 = {length: 5, width: 3, height: 4};\n\texport let promise2 = {length: 12, width: 5, height: 13};\n\texport let permutation = [1, 2, 3];\n\n\tfunction calculate(length, width, height) {\n\t\treturn { \n\t\t\t'1-Dimensions': [length, width, height],\n\t\t\t'2-Dimensions': [length * width, width * height, length * height],\n\t\t\t'3-Dimensions': [length * width * height, length + width + height, length * width + width * height + length * height]\n\t\t};\n\t}\n</script>\n\n{#await promise1 then { length, width, height }}\n\t{@const [a, b, c] = permutation}\n\t{@const { [`${a}-Dimensions`]: { [c - 1]: first }, [`${b}-Dimensions`]: { [b - 1]: second }, [`${c}-Dimensions`]: { [a - 1]: third } } = calculate(length, width, height) }\n\t<p>{first}, {second}, {third}</p>\n{/await}\n\n{#await promise2 catch { length, width, height }}\n\t{@const [a, b, c] = permutation}\n\t{@const { [`${a}-Dimensions`]: { [c - 1]: first }, [`${b}-Dimensions`]: { [b - 1]: second }, [`${c}-Dimensions`]: { [a - 1]: third } } = calculate(length, width, height) } \n\t<p>{first}, {second}, {third}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-literals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>12 120 70, 30+4=34</div>',\n\tasync test({ component, target, assert }) {\n\t\tcomponent.promise1 = Promise.resolve({ width: 5, height: 6 });\n\t\tcomponent.promise2 = Promise.reject({ width: 6, height: 7 });\n\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 300 110, 50+6=56</div>\n\t\t\t<div>42 420 130, 60+7=67</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.constant = 20;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-literals/main.svelte",
    "content": "<script>\n\texport let promise1 = {width: 3, height: 4};\n\texport let promise2 = {width: 5, height: 7};\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { 'the-area': width * height, 'the-volume': width * height * constant };\n\t}\n</script>\n\n{#await promise1 then { width, height }}\n\t{@const {'the-area': area, 'the-volume': volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const { 0: _width, 1: _height, 2: sum } = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/await}\n\n{#await promise2 catch { width, height }}\n\t{@const {'the-area': area, 'the-volume': volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const { 0: _width, 1: _height, 2: sum } = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-nested-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>12 120 70, 30+4=34</div>',\n\tasync test({ component, target, assert }) {\n\t\tcomponent.promise1 = Promise.resolve({ width: 5, height: 6 });\n\t\tcomponent.promise2 = Promise.reject({ width: 6, height: 7 });\n\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 300 110, 50+6=56</div>\n\t\t\t<div>42 420 130, 60+7=67</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.constant = 20;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-await-then-destructuring-nested-rest/main.svelte",
    "content": "<script>\n\texport let promise1 = {width: 3, height: 4};\n\texport let promise2 = {width: 5, height: 7};\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#await promise1 then { width, height }}\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, ...[_height, ...[sum]]] = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/await}\n\n{#await promise2 catch { width, height }}\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, ...[_height, ...[sum]]] = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-component/Component.svelte",
    "content": "<script>\n  export let box;\n</script>\n\n<slot name=\"box1\" {box} />\n<slot name=\"box2\" width={box.width} height={box.height} />\n<slot {box} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div slot=\"box1\">\n\t\t\t<div>12 120 70, 30+4=34</div>\n\t\t</div>\n\t\t<div slot=\"box2\">\n\t\t\t<div>12 120 70, 30+4=34</div>\n\t\t</div>\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>12 120 70, 30+4=34</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.constant = 20;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div slot=\"box1\">\n\t\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t</div>\n\t\t\t<div slot=\"box2\">\n\t\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t</div>\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.box = { width: 5, height: 6 };\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div slot=\"box1\">\n\t\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t</div>\n\t\t\t<div slot=\"box2\">\n\t\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-component/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\texport let box = {width: 3, height: 4};\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n<Component {box}>\n\t<svelte:fragment slot=\"box1\" let:box>\n\t\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t\t{@const perimeter = (box.width + box.height) * constant}\n\t\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\t\n\t\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n\t</svelte:fragment>\n\n\t<svelte:fragment slot=\"box2\" let:width let:height>\n\t\t{@const {area, volume} = calculate(width, height, constant)}\n\t\t{@const perimeter = (width + height) * constant}\n\t\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\t\n\t\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n\t</svelte:fragment>\n\n\t<svelte:fragment let:box={{width, height}}>\n\t\t{@const {area, volume} = calculate(width, height, constant)}\n\t\t{@const perimeter = (width + height) * constant}\n\t\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\t\n\t\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n\t</svelte:fragment>\n</Component>\n\n<Component {box} let:box>\n\t<div slot=\"box1\" let:box>\n\t\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t\t{@const perimeter = (box.width + box.height) * constant}\n\t\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\t\n\t\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n\t</div>\n\n\t<div slot=\"box2\" let:width let:height>\n\t\t{@const {area, volume} = calculate(width, height, constant)}\n\t\t{@const perimeter = (width + height) * constant}\n\t\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\t\n\t\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n\t</div>\n\n\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t{@const perimeter = (box.width + box.height) * constant}\n\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\t\n\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n</Component>\n\n<Component {box} let:box={{width, height}}>\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\t\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-component-without-let/Component.svelte",
    "content": "<slot name=\"box1\" />\n<slot />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-component-without-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>static dynamic</div>\n\t\t<div>static dynamic</div>\n\t\t<div>static dynamic</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.props = 'xxx';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>static xxx</div>\n\t\t\t<div>static xxx</div>\n\t\t\t<div>static xxx</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-component-without-let/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\texport let props = \"dynamic\";\n</script>\n\n<Component>\n\t<svelte:fragment slot=\"box1\">\n\t\t{@const foo = \"static\"}\n\t\t{@const bar = props}\n\t\t<div>{foo} {bar}</div>\n\t</svelte:fragment>\n\n\t<svelte:fragment>\n\t\t{@const foo = \"static\"}\n\t\t{@const bar = props}\n\t\t<div>{foo} {bar}</div>\n\t</svelte:fragment>\n</Component>\n\n<Component>\n\t{@const foo = \"static\"}\n\t{@const bar = props}\n\t<div>{foo} {bar}</div>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>7</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.a = 5;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>9</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-dependencies/main.svelte",
    "content": "<script>\n\texport let value = 4;\n\texport let a = 3;\n\texport let b = 4;\n</script>\n\n{#each [value] as n}\n  {@const ab = a + b}\n\t<div>{ab}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-depends-on-const-tag/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<p>hello</p>\n\t\t<p>hello</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=\"hello\">\n\t\t<p>hello</p>\n\t\t<p>hello</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tflushSync(() => {\n\t\t\tinput.value = 'goodbye';\n\t\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<input>\n\t\t\t\t<p>goodbye</p>\n\t\t\t\t<p>goodbye</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-depends-on-const-tag/main.svelte",
    "content": "<svelte:options runes={false} />\n\n<script>\n\tlet message = 'hello';\n</script>\n\n<input bind:value={message} />\n\n{#if true}\n\t{@const m1 = message}\n\t{@const m2 = (() => m1)()}\n\n\t<p>{m1}</p>\n\t<p>{m2}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>35 350 120, 50+7=57</div>\n\t\t<div>48 480 140, 60+8=68</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.constant = 20;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>35 700 240, 100+7=107</div>\n\t\t\t<div>48 960 280, 120+8=128</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 3, height: 4 },\n\t\t\t{ width: 4, height: 5 },\n\t\t\t{ width: 5, height: 6 },\n\t\t\t{ width: 6, height: 7 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>20 400 180, 80+5=85</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{width: 3, height: 4},\n\t\t{width: 5, height: 7},\n\t\t{width: 6, height: 8},\n\t];\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#each boxes as box}\n\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t{@const perimeter = (box.width + box.height) * constant}\n\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\n\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-arrow/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<p>#FF0000</p>\n\t\t\t<p>#00FF00</p>\n\t\t\t<p>#0000FF</p>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.constant = 20;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>#FF0000</p>\n\t\t\t<p>#00FF00</p>\n\t\t\t<p>#0000FF</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.tags = [\n\t\t\t{\n\t\t\t\tname: 'Red',\n\t\t\t\tcolor: '#FF0000'\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Green',\n\t\t\t\tcolor: '#00FF00'\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Blue',\n\t\t\t\tcolor: '#0000FF'\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Black',\n\t\t\t\tcolor: '#000000'\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'White',\n\t\t\t\tcolor: '#FFFFFF'\n\t\t\t}\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>#FF0000</p>\n\t\t\t<p>#00FF00</p>\n\t\t\t<p>#0000FF</p>\n\t\t\t<p>#000000</p>\n\t\t\t<p>#FFFFFF</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-arrow/main.svelte",
    "content": "<script>\n\texport let tags = [\n\t\t{\n\t\t\tname: 'Red',\n\t\t\tcolor: '#FF0000'\n\t\t},\n\t\t{\n\t\t\tname: 'Green',\n\t\t\tcolor: '#00FF00'\n\t\t},\n\t\t{\n\t\t\tname: 'Blue',\n\t\t\tcolor: '#0000FF'\n\t\t}\n\t];\n</script>\n\n{#each tags as tag}\n\t{@const tagColor = tags.find(t => t.name === tag.name).color}\n\t<p>{tagColor}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-const/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<p>0</p>\n\t\t\t<p>bar: 1,2,3,1,1,2,3,2, num: 1</p>\n\t\t\t<p>bar: 0,2,4,1,0,2,4,2, num: 2</p>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>bar: 1,2,3,1,1,2,3,2, num: 1</p>\n\t\t\t\t<p>bar: 0,2,4,1,0,2,4,2, num: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.nums = [1, 2, 3];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>bar: 1,2,3,1,1,2,3,2,1,2,3,3, num: 1</p>\n\t\t\t\t<p>bar: 0,2,4,1,0,2,4,2,0,2,4,3, num: 2</p>\n\t\t\t\t<p>bar: -100,0,100,1,-100,0,100,2,-100,0,100,3, num: 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-const/main.svelte",
    "content": "<script>\n\texport let nums = [1, 2];\n\tlet foos = [\n\t\t{\n\t\t\tnums: [1, 2, 3],\n\t\t},\n\t\t{\n\t\t\tnums: [0, 2, 4],\n\t\t},\n\t\t{\n\t\t\tnums: [-100, 0, 100],\n\t\t},\n\t];\n\tlet foo = 0;\n</script>\n\n<p>{foo}</p>\n{#each nums as num, index}\n\t{@const bar = nums.map((num) => {\n\t\tconst func = (foos, num) => {\n\t\t\treturn [...foos.map((foo) => foo), num];\n\t\t}\n\t\treturn func(foos[index].nums, num);\n\t})}\n\t<p>bar: {bar}, num: {num}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>35 350 120, 50+7=57</div>\n\t\t<div>48 480 140, 60+8=68</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.constant = 20;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>35 700 240, 100+7=107</div>\n\t\t\t<div>48 960 280, 120+8=128</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 3, height: 4 },\n\t\t\t{ width: 4, height: 5 },\n\t\t\t{ width: 5, height: 6 },\n\t\t\t{ width: 6, height: 7 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>20 400 180, 80+5=85</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{width: 3, height: 4},\n\t\t{width: 5, height: 7},\n\t\t{width: 6, height: 8},\n\t];\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#each boxes as { width, height }}\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, _height, sum] = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-computed-in-computed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>6, 12, 8, 24</button>\n\t\t<button>45, 35, 63, 315</button>\n\t\t<button>60, 48, 80, 480</button>\n\t`,\n\n\tasync test({ component, target, assert }) {\n\t\tcomponent.boxes = [{ length: 10, width: 20, height: 30 }];\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>200, 600, 300, 6000</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-computed-in-computed/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{length: 2, width: 3, height: 4},\n\t\t{length: 9, width: 5, height: 7},\n\t\t{length: 10, width: 6, height: 8}\n\t];\n\n\tfunction calculate(length, width, height) {\n\t\treturn { \n\t\t\t\ttwoDimensions: {\n\t\t\t\tbottomArea: length * width,\n\t\t\t\tsideArea1: width * height,\n\t\t\t\tsideArea2: length * height\n\t\t\t},\n\t\t\tthreeDimensions: {\n\t\t\t\tvolume: length * width * height\n\t\t\t}\n\t\t};\n\t}\n\n\texport let dimension = 'Dimensions';\n\tfunction changeDimension() {\n\t\tdimension = 'DIMENSIONS';\n\t}\n\n\tlet area = 'Area';\n  let th = 'th';\n</script>\n\n{#each boxes as { [`leng${th}`]: length, [`wid${th}`]: width, height }}\n\t{@const {\n\t\t[`two${dimension}`]: areas,\n\t\t[`three${dimension}`]: {\n\t\t\tvolume\n\t\t}\n\t} = calculate(length, width, height)}\n  {@const {\n\t\ti = 1, \n\t\t[`bottom${area}`]: bottom, \n\t\t[`side${area}${i}`]: sideone, \n\t\t[`side${area}${i + 1}`]: sidetwo \n\t} = areas}\n\t<button on:click={changeDimension}>{bottom}, {sideone}, {sidetwo}, {volume}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-computed-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>6, 12, 8, 24</button>\n\t\t<button>45, 35, 63, 315</button>\n\t\t<button>60, 48, 80, 480</button>\n\t`,\n\n\tasync test({ component, target, assert }) {\n\t\tcomponent.boxes = [{ length: 10, width: 20, height: 30 }];\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>200, 600, 300, 6000</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-computed-props/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{length: 2, width: 3, height: 4},\n\t\t{length: 9, width: 5, height: 7},\n\t\t{length: 10, width: 6, height: 8}\n\t];\n\n\tfunction calculate(length, width, height) {\n\t\treturn { \n\t\t\t\ttwoDimensions: {\n\t\t\t\tbottomArea: length * width,\n\t\t\t\tsideArea1: width * height,\n\t\t\t\tsideArea2: length * height\n\t\t\t},\n\t\t\tthreeDimensions: {\n\t\t\t\tvolume: length * width * height\n\t\t\t}\n\t\t};\n\t}\n\n\texport let dimension = 'Dimensions';\n\tfunction changeDimension() {\n\t\tdimension = 'DIMENSIONS';\n\t}\n\n\tlet area = 'Area';\n</script>\n\n{#each boxes as { length, width, height }}\n\t{@const {\n\t\t[`two${dimension}`]: { \n\t\t\ti = 1, \n\t\t\t[`bottom${area}`]: bottom, \n\t\t\t[`side${area}${i}`]: sideone, \n\t\t\t[`side${area}${i + 1}`]: sidetwo \n\t\t},\n\t\t[`three${dimension}`]: {\n\t\t\tvolume\n\t\t}\n\t} = calculate(length, width, height)}\n\t<button on:click={changeDimension}>{bottom}, {sideone}, {sidetwo}, {volume}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-literals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>35 350 120, 50+7=57</div>\n\t\t<div>48 480 140, 60+8=68</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.constant = 20;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>35 700 240, 100+7=107</div>\n\t\t\t<div>48 960 280, 120+8=128</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 3, height: 4 },\n\t\t\t{ width: 4, height: 5 },\n\t\t\t{ width: 5, height: 6 },\n\t\t\t{ width: 6, height: 7 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>20 400 180, 80+5=85</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-literals/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{width: 3, height: 4},\n\t\t{width: 5, height: 7},\n\t\t{width: 6, height: 8},\n\t];\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { 'the-area': width * height, 'the-volume': width * height * constant };\n\t}\n</script>\n\n{#each boxes as { width, height }}\n\t{@const { 'the-area': area, 'the-volume': volume } = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const { 2: sum, 0: _width, 1: _height } = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-nested-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>35 350 120, 50+7=57</div>\n\t\t<div>48 480 140, 60+8=68</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.constant = 20;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>35 700 240, 100+7=107</div>\n\t\t\t<div>48 960 280, 120+8=128</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 3, height: 4 },\n\t\t\t{ width: 4, height: 5 },\n\t\t\t{ width: 5, height: 6 },\n\t\t\t{ width: 6, height: 7 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 240 140, 60+4=64</div>\n\t\t\t<div>20 400 180, 80+5=85</div>\n\t\t\t<div>30 600 220, 100+6=106</div>\n\t\t\t<div>42 840 260, 120+7=127</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-destructure-nested-rest/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{width: 3, height: 4},\n\t\t{width: 5, height: 7},\n\t\t{width: 6, height: 8},\n\t];\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#each boxes as { width, height }}\n\t{@const {area, volume} = calculate(width, height, constant)}\n\t{@const perimeter = (width + height) * constant}\n\t{@const [_width, ...[_height, ...[sum]]] = [width * constant, height, width * constant + height]}\n\t<div>{area} {volume} {perimeter}, {_width}+{_height}={sum}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-duplicated-variable1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 1</p>\n\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 2</p>\n\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 3</p>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t  <p>bar: 1,2,3,0,2,4,-100,0,100, num: 1</p>\n\t\t\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 2</p>\n\t\t\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 3</p>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.nums = [1, 2, 3, 4];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 1</p>\n\t\t\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 2</p>\n\t\t\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 3</p>\n\t\t\t\t<p>bar: 1,2,3,0,2,4,-100,0,100, num: 4</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-duplicated-variable1/main.svelte",
    "content": "<script>\n\texport let nums = [1, 2, 3];\n\tlet foos = [\n\t\t{\n\t\t\tnums: [1, 2, 3],\n\t\t},\n\t\t{\n\t\t\tnums: [0, 2, 4],\n\t\t},\n\t\t{\n\t\t\tnums: [-100, 0, 100],\n\t\t},\n\t];\n</script>\n\n{#each nums as num}\n\t{@const bar = foos.map((foos) => foos.nums)}\n\t<p>bar: {bar}, num: {num}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-duplicated-variable2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t    <p>foo: dummy-foo, num: dummy-num</p>\n\t\t  <p>bar: 1,2,3,2,, num: 1</p>\n\t\t\t<p>bar: 1,2,3,2,, num: 2</p>\n\t\t\t<p>bar: 1,2,3,2,, num: 3</p>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t  <p>foo: dummy-foo, num: dummy-num</p>\n\t\t\t  <p>bar: 1,2,3,2,, num: 1</p>\n\t\t\t\t<p>bar: 1,2,3,2,, num: 2</p>\n\t\t\t\t<p>bar: 1,2,3,2,, num: 3</p>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.nums = [1, 2, 3, 4];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t  <p>foo: dummy-foo, num: dummy-num</p>\n\t\t\t\t<p>bar: 1,2,3,2,4,, num: 1</p>\n\t\t\t\t<p>bar: 1,2,3,2,4,, num: 2</p>\n\t\t\t\t<p>bar: 1,2,3,2,4,, num: 3</p>\n\t\t\t\t<p>bar: 1,2,3,2,4,, num: 4</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-duplicated-variable2/main.svelte",
    "content": "<script>\n\texport let nums = [1, 2, 3];\n\tlet foos = [\n\t\t{\n\t\t\tnums: [1, 2, 3],\n\t\t},\n\t\t{\n\t\t\tnums: [0, 2, 4],\n\t\t},\n\t\t{\n\t\t\tnums: [-100, 0, 100],\n\t\t},\n\t];\n\tlet default_nums = [-1];\n\tlet foo = \"dummy-foo\";\n\tlet num = \"dummy-num\";\n</script>\n\n<p>foo: {foo}, num: {num}</p>\n{#each nums as num}\n\t{@const bar = foos.map((foo) =>\n\t\tfoo.nums.filter((num) => {\n      if (Object.keys($$slots).length) {\n        return false;\n\t\t\t} else if (Object.keys(foo).length) {\n\t\t\t\treturn nums.includes(num) || default_nums.includes(num);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}) || num\n\t)}\n\t<p>bar: {bar}, num: {num}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-duplicated-variable3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<p>0</p>\n\t\t\t<p>bar: 1,2,3,1,1,2,3,2, num: 1</p>\n\t\t\t<p>bar: 0,2,4,1,0,2,4,2, num: 2</p>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>bar: 1,2,3,1,1,2,3,2, num: 1</p>\n\t\t\t\t<p>bar: 0,2,4,1,0,2,4,2, num: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.nums = [1, 2, 3];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>bar: 1,2,3,1,1,2,3,2,1,2,3,3, num: 1</p>\n\t\t\t\t<p>bar: 0,2,4,1,0,2,4,2,0,2,4,3, num: 2</p>\n\t\t\t\t<p>bar: -100,0,100,1,-100,0,100,2,-100,0,100,3, num: 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-duplicated-variable3/main.svelte",
    "content": "<script>\n\texport let nums = [1, 2];\n\tlet foos = [\n\t\t{\n\t\t\tnums: [1, 2, 3],\n\t\t},\n\t\t{\n\t\t\tnums: [0, 2, 4],\n\t\t},\n\t\t{\n\t\t\tnums: [-100, 0, 100],\n\t\t},\n\t];\n\tlet foo = 0;\n</script>\n\n<p>{foo}</p>\n{#each nums as num, index}\n\t{@const bar = nums.map((num) => {\n\t\treturn (function (foos, num) {\n\t\t\treturn [...foos.map((foo) => foo), num];\n\t\t})(foos[index].nums, num);\n\t})}\n\t<p>bar: {bar}, num: {num}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>12 120 70, 30+4=34</div>\n\t\t<div>35 350 120, 50+7=57</div>\n\t\t<div>48 480 140, 60+8=68</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.boxes = [];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>10 * 2 = 20</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.constant = 35;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>35 * 2 = 70</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [{ width: 3, height: 4 }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>12 420 245, 105+4=109</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-else/main.svelte",
    "content": "<script>\n\texport let boxes = [\n\t\t{width: 3, height: 4},\n\t\t{width: 5, height: 7},\n\t\t{width: 6, height: 8},\n\t];\n\texport let constant = 10;\n\n\tfunction calculate(width, height, constant) {\n\t\treturn { area: width * height, volume: width * height * constant };\n\t}\n</script>\n\n{#each boxes as box}\n\t{@const {area, volume} = calculate(box.width, box.height, constant)}\n\t{@const perimeter = (box.width + box.height) * constant}\n\t{@const [width, height, sum] = [box.width * constant, box.height, box.width * constant + box.height]}\n\t<div>{area} {volume} {perimeter}, {width}+{height}={sum}</div>\n{:else}\n\t{@const double = constant + constant}\n\t<div>{constant} * 2 = {double}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<p>0</p>\n\t\t\t<p>bar: 1,2,3,1,1,2,3,2, num: 1</p>\n\t\t\t<p>bar: 0,2,4,1,0,2,4,2, num: 2</p>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>bar: 1,2,3,1,1,2,3,2, num: 1</p>\n\t\t\t\t<p>bar: 0,2,4,1,0,2,4,2, num: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.nums = [1, 2, 3];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>bar: 1,2,3,1,1,2,3,2,1,2,3,3, num: 1</p>\n\t\t\t\t<p>bar: 0,2,4,1,0,2,4,2,0,2,4,3, num: 2</p>\n\t\t\t\t<p>bar: -100,0,100,1,-100,0,100,2,-100,0,100,3, num: 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-function/main.svelte",
    "content": "<script>\n\texport let nums = [1, 2];\n\tlet foos = [\n\t\t{\n\t\t\tnums: [1, 2, 3],\n\t\t},\n\t\t{\n\t\t\tnums: [0, 2, 4],\n\t\t},\n\t\t{\n\t\t\tnums: [-100, 0, 100],\n\t\t},\n\t];\n\tlet foo = 0;\n</script>\n\n<p>{foo}</p>\n{#each nums as num, index}\n\t{@const bar = nums.map((num) => {\n\t\tfunction func(foos, num) {\n\t\t\treturn [...foos.map((foo) => foo), num];\n\t\t}\n\t\treturn func(foos[index].nums, num);\n\t})}\n\t<p>bar: {bar}, num: {num}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-update/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n// Test ensures that the `const` tag is coarse-grained in legacy mode (i.e. always fires an update when the array changes)\nexport default test({\n\thtml: `\n\t\t<button>Show</button>\n\t\t<p>0</p>\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t`,\n\tasync test({ target, assert }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Show</button>\n\t\t\t\t<p>0 show (v_item) show (item)</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>2 show (v_item) show (item)</p>\n\t\t\t\t<p>3</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-each-update/main.svelte",
    "content": "<script>\n\texport let items = {0:{clicked:false},length:4};\n</script>\n\n<button on:click={()=>{\n\titems[0].clicked=true;\n\titems[2]={clicked:true};\n}}>Show</button>\n\n{#each items as item, i}\n\t{@const v_item=item}\n\t<p>\n\t\t{i}\n\t\t{#if v_item?.clicked}\n\t\t\tshow (v_item)\n\t\t{/if}\n\t\t{#if item?.clicked}\n\t\t\tshow (item)\n\t\t{/if}\n\t</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-func-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t[12,13,14]\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-func-function/main.svelte",
    "content": "<script>\n\tconst func = 100;\n</script>\n\n{#if true}\n\t{@const [func_1] = [[12, 13, 14]]}\n\t{(() => JSON.stringify(func_1))()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>4 ^ 4 = 256</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.value = 3;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>3 ^ 4 = 81</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-hoisting/main.svelte",
    "content": "<script>\n\texport let value = 4;\n</script>\n\n{#each [value] as n}\n\t<div>{n} ^ 4 = {hypercubed}</div>\n\n\t{@const squared = n * n}\n\t{@const cubed = squared * n}\n\t{@const hypercubed = cubed * n}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>10 x 34</div>',\n\tget props() {\n\t\treturn { boxes: [{ width: 10, height: 34 }] };\n\t},\n\tasync test({ component, target, assert }) {\n\t\tcomponent.boxes = [{ width: 20, height: 40 }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>20 x 40</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [];\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.boxes = [{ width: 18, height: 48 }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>18 x 48</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if/main.svelte",
    "content": "<script>\n\texport let boxes;\n</script>\n\n{#if boxes.length > 0}\n\t{@const box = boxes[0]}\n\t{@const { width, height } = box}\n\t<div>{width} x {height}</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>20 x 40</div>',\n\tget props() {\n\t\treturn { boxes: [{ width: 20, height: 40 }] };\n\t},\n\tasync test({ component, target, assert }) {\n\t\tcomponent.boxes = [{ width: 30, height: 60 }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>30 x 60</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 20, height: 40 },\n\t\t\t{ width: 30, height: 50 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>20 x 40</div>\n\t\t<div>30 x 50</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 80, height: 70 },\n\t\t\t{ width: 90, height: 60 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>80 x 70</div>\n\t\t<div>90 x 60</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 20, height: 40 },\n\t\t\t{ width: 30, height: 50 },\n\t\t\t{ width: 30, height: 50 }\n\t\t];\n\t\tassert.htmlEqual(target.innerHTML, '<div>3</div>');\n\n\t\tcomponent.boxes = [];\n\t\tassert.htmlEqual(target.innerHTML, '<div>0</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if-else/main.svelte",
    "content": "<script>\n\texport let boxes;\n</script>\n\n{#if boxes.length === 2}\n\t{@const box1 = boxes[0]}\n\t{@const box2 = boxes[1]}\n\t{@const { width, height } = box1}\n\t<div>{width} x {height}</div>\n\t<div>{box2.width} x {box2.height}</div>\n{:else if boxes.length === 1}\n\t{@const box = boxes[0]}\n\t{@const { width, height } = box}\n\t<div>{width} x {height}</div>\n{:else}\n\t{@const length = boxes.length}\n\t<div>{length}</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if-else-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>20 x 40</div>\n\t\t<div>20 x 40</div>\n\t`,\n\tget props() {\n\t\treturn { boxes: [{ width: 20, height: 40 }] };\n\t},\n\tasync test({ component, target, assert }) {\n\t\tcomponent.boxes = [{ width: 40, height: 70 }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>40 x 70</div>\n\t\t\t<div>40 x 70</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [];\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 20, height: 40 },\n\t\t\t{ width: 30, height: 50 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>20 x 40</div>\n\t\t<div>30 x 50</div>\n\t\t<div>20 x 40</div>\n\t\t<div>30 x 50</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 80, height: 70 },\n\t\t\t{ width: 90, height: 60 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>80 x 70</div>\n\t\t<div>90 x 60</div>\n\t\t<div>80 x 70</div>\n\t\t<div>90 x 60</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [];\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if-else-if/main.svelte",
    "content": "<script>\n\texport let boxes;\n</script>\n\n{#if boxes.length > 1}\n\t{@const box1 = boxes[0]}\n\t{@const box2 = boxes[1]}\n\t{@const { width, height } = box1}\n\t<div>{width} x {height}</div>\n\t<div>{box2.width} x {box2.height}</div>\n{:else if boxes.length > 0}\n\t{@const box = boxes[0]}\n\t{@const { width, height } = box}\n\t<div>{width} x {height}</div>\n{/if}\n\n{#if boxes.length > 1}\n\t<div>{boxes[0].width} x {boxes[0].height}</div>\n\t<div>{boxes[1].width} x {boxes[1].height}</div>\n{:else if boxes.length > 0}\n\t{@const box = boxes[0]}\n\t{@const { width, height } = box}\n\t<div>{width} x {height}</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if-else-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>20 x 40</div>\n\t\t<div>20 x 40</div>\n\t`,\n\tget props() {\n\t\treturn { boxes: [{ width: 20, height: 40 }] };\n\t},\n\tasync test({ component, target, assert, raf }) {\n\t\tcomponent.boxes = [{ width: 40, height: 70 }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>40 x 70</div>\n\t\t\t<div>40 x 70</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [];\n\n\t\traf.tick(0);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 20, height: 40 },\n\t\t\t{ width: 30, height: 50 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>20 x 40</div>\n\t\t<div>30 x 50</div>\n\t\t<div>20 x 40</div>\n\t\t<div>30 x 50</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [\n\t\t\t{ width: 80, height: 70 },\n\t\t\t{ width: 90, height: 60 }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>80 x 70</div>\n\t\t<div>90 x 60</div>\n\t\t<div>80 x 70</div>\n\t\t<div>90 x 60</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.boxes = [];\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-if-else-outro/main.svelte",
    "content": "<script>\n\texport let boxes;\n\tfunction fade() {\n\t\treturn {\n\t\t\tduration: 0,\n\t\t}\n\t}\n</script>\n\n{#if boxes.length > 1}\n\t{@const box1 = boxes[0]}\n\t{@const box2 = boxes[1]}\n\t{@const { width, height } = box1}\n\t<div>{width} x {height}</div>\n\t<div>{box2.width} x {box2.height}</div>\n{:else if boxes.length > 0}\n\t{@const box = boxes[0]}\n\t{@const { width, height } = box}\n\t<div out:fade>{width} x {height}</div>\n{/if}\n\n{#if boxes.length > 1}\n\t<div>{boxes[0].width} x {boxes[0].height}</div>\n\t<div>{boxes[1].width} x {boxes[1].height}</div>\n{:else if boxes.length > 0}\n\t{@const box = boxes[0]}\n\t{@const { width, height } = box}\n\t<div out:fade>{width} x {height}</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-invalidate/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>[Y] A <button>Toggle</button></div>\n\t\t<div>[N] B <button>Toggle</button></div>\n\t\t<div>[N] C <button>Toggle</button></div>\n\t`,\n\ttest({ target, assert, window }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\t\tbtn1.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tbtn2.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>[N] A <button>Toggle</button></div>\n\t\t\t<div>[Y] B <button>Toggle</button></div>\n\t\t\t<div>[N] C <button>Toggle</button></div>\n\t\t`\n\t\t);\n\n\t\tbtn2.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>[N] A <button>Toggle</button></div>\n\t\t\t<div>[N] B <button>Toggle</button></div>\n\t\t\t<div>[N] C <button>Toggle</button></div>\n\t\t`\n\t\t);\n\n\t\tbtn3.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>[N] A <button>Toggle</button></div>\n\t\t\t<div>[N] B <button>Toggle</button></div>\n\t\t\t<div>[Y] C <button>Toggle</button></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-invalidate/main.svelte",
    "content": "<script>\n\tlet items = [\n\t\t{ name: 'A', selected: true },\n\t\t{ name: 'B', selected: false },\n\t\t{ name: 'C', selected: false },\n\t]\n</script>\n\n{#each items as item}\n\t{@const toggle = () => item.selected = !item.selected}\n\t<div>\n\t\t{item.selected ? '[Y]' : '[N]'}\n\t\t{item.name}\n\t\t<button on:click={toggle}>Toggle</button>\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-ordering/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>4 ^ 4 = 256</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.value = 3;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>3 ^ 4 = 81</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-ordering/main.svelte",
    "content": "<script>\n\texport let value = 4;\n</script>\n\n{#each [value] as n}\n\t<div>{n} ^ 4 = {hypercubed}</div>\n\n\t{@const squared = n * n}\n\t{@const cubed = squared * n}\n\t{@const hypercubed = cubed * n}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-shadow/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<b>7</b>\n\t\t<u>11</u>\n\t\t<u>15</u>\n\t\t<i>7</i>\n\t\t<b>19</b>\n\t\t<u>23</u>\n\t\t<u>27</u>\n\t\t<i>19</i>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tcomponent.numbers = [\n\t\t\t{\n\t\t\t\ta: 4,\n\t\t\t\tb: 5,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ a: 6, b: 7 },\n\t\t\t\t\t{ a: 8, b: 9 }\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ta: 10,\n\t\t\t\tb: 11,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ a: 12, b: 13 },\n\t\t\t\t\t{ a: 14, b: 15 }\n\t\t\t\t]\n\t\t\t}\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<b>9</b>\n\t\t\t<u>13</u>\n\t\t\t<u>17</u>\n\t\t\t<i>9</i>\n\t\t\t<b>21</b>\n\t\t\t<u>25</u>\n\t\t\t<u>29</u>\n\t\t\t<i>21</i>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-shadow/main.svelte",
    "content": "<script>\n\texport let numbers = [\n\t\t{\n\t\t\ta: 3,\n\t\t\tb: 4, \n\t\t\tchildren: [\n\t\t\t\t{ a: 5, b: 6 },\n\t\t\t\t{ a: 7, b: 8 }\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\ta: 9,\n\t\t\tb: 10, \n\t\t\tchildren: [\n\t\t\t\t{ a: 11, b: 12 },\n\t\t\t\t{ a: 13, b: 14 }\n\t\t\t]\n\t\t}\n\t];\n\n</script>\n\n{#each numbers as {a, b, children}}\n\t{@const ab = a + b}\n\t<b>{ab}</b>\n\t{#each children as {a, b}}\n\t\t{@const ab = a + b}\n\t\t<u>{ab}</u>\n\t{/each}\n\t<i>{ab}</i>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-shadow-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>3,6,9</p>\n\t\t<p>2</p>\n\t\t<p>3,6,9</p>\n\t\t<p>3</p>\n\t\t<p>3,6,9</p>\n\t`,\n\ttest({ component, target, assert }) {\n\t\tcomponent.baz = 5;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>1</p>\n\t\t\t<p>5,10,15</p>\n\t\t\t<p>2</p>\n\t\t\t<p>5,10,15</p>\n\t\t\t<p>3</p>\n\t\t\t<p>5,10,15</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.array = [3, 4, 5];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>3</p>\n\t\t\t<p>15,20,25</p>\n\t\t\t<p>4</p>\n\t\t\t<p>15,20,25</p>\n\t\t\t<p>5</p>\n\t\t\t<p>15,20,25</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/const-tag-shadow-2/main.svelte",
    "content": "<script>\n\texport let array = [1, 2, 3];\n\texport let baz = 3;\n\tconst foo = (item) => item;\n</script>\n\n{#each array as item}\n\t<p>{foo(item)}</p>\n\t{@const bar = array.map((item) => {\n\t\tconst bar = baz;\n\t\tconst foo = (item) => item * bar;\n\t\treturn foo(item);\n\t})}\n\t<p>{bar}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/constructor-prefer-passed-context/ChildComponent.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte';\n\tconst value = getContext('foo');\n</script>\n\n<div>Value in child component: {value}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/constructor-prefer-passed-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server', 'async-server'],\n\n\thtml: `\n\t\t<div><div>Value in child component: </div></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/constructor-prefer-passed-context/main.svelte",
    "content": "<script>\n\timport { setContext, mount } from 'svelte';\n\timport ChildComponent from './ChildComponent.svelte';\n\n\tsetContext('foo', true);\n\n\tfunction render(node) {\n\t\tmount(ChildComponent, {\n\t\t\ttarget: node,\n\t\t\tcontext: new Map()\n\t\t});\n\t}\n</script>\n\n<div use:render></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api/Tab.svelte",
    "content": "<script>\n\timport { getContext, onDestroy } from 'svelte';\n\timport { TABS } from './Tabs.svelte';\n\n\tconst tab = {};\n\tconst { registerTab, unregisterTab, selectTab, selectedTab } = getContext(TABS);\n\n\tregisterTab(tab);\n\n\tonDestroy(() => {\n\t\tunregisterTab(tab);\n\t});\n</script>\n\n<button class:selected=\"{$selectedTab === tab}\" on:click=\"{() => selectTab(tab)}\">\n\t<slot></slot>\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api/TabList.svelte",
    "content": "<div class=\"tab-list\">\n\t<slot></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api/TabPanel.svelte",
    "content": "<script>\n\timport { getContext, onDestroy } from 'svelte';\n\timport { TABS } from './Tabs.svelte';\n\n\tconst panel = {};\n\tconst { registerPanel, unregisterPanel, selectedPanel } = getContext(TABS);\n\tregisterPanel(panel);\n\n\tonDestroy(() => {\n\t\tunregisterPanel(panel);\n\t});\n</script>\n\n{#if $selectedPanel === panel}\n\t<slot></slot>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api/Tabs.svelte",
    "content": "\n\n<script module>\n\texport const TABS = {};\n</script>\n\n<script>\n\timport { setContext } from 'svelte';\n\timport { writable } from 'svelte/store';\n\n\tconst tabs = [];\n\tconst panels = [];\n\tconst selectedTab = writable(null);\n\tconst selectedPanel = writable(null);\n\n\tsetContext(TABS, {\n\t\tregisterTab: tab => {\n\t\t\ttabs.push(tab);\n\t\t\tselectedTab.update(current => current || tab);\n\t\t},\n\n\t\tunregisterTab: tab => {\n\t\t\tconst i = tabs.indexOf(tab);\n\t\t\ttabs.splice(i, 1);\n\t\t\tselectedTab.update(current => current === tab ? (tabs[i] || tabs[tabs.length - 1]) : current);\n\t\t},\n\n\t\tregisterPanel: panel => {\n\t\t\tpanels.push(panel);\n\t\t\tselectedPanel.update(current => current || panel);\n\t\t},\n\n\t\tunregisterPanel: panel => {\n\t\t\tconst i = panels.indexOf(panel);\n\t\t\tpanels.splice(i, 1);\n\t\t\tselectedPanel.update(current => current === panel ? (panels[i] || panels[panels.length - 1]) : current);\n\t\t},\n\n\t\tselectTab: tab => {\n\t\t\tconst i = tabs.indexOf(tab);\n\t\t\tselectedTab.set(tab);\n\t\t\tselectedPanel.set(panels[i]);\n\t\t},\n\n\t\tselectedTab,\n\t\tselectedPanel\n\t});\n</script>\n\n<div class=\"tabs\">\n\t<slot></slot>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // to ensure dev mode does not break context in some way\n\t},\n\thtml: `\n\t\t<div class=\"tabs\">\n\t\t\t<div class=\"tab-list\">\n\t\t\t\t<button class=\"selected\">small</button>\n\t\t\t\t<button>large</button>\n\t\t\t</div>\n\n\t\t\t<h2>Small panel</h2>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tlet buttons = target.querySelectorAll('button');\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"tab-list\">\n\t\t\t\t\t<button class=\"\">small</button>\n\t\t\t\t\t<button class=\"selected\">large</button>\n\t\t\t\t</div>\n\n\t\t\t\t<h2>Large panel</h2>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.show_medium = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"tab-list\">\n\t\t\t\t\t<button class=\"\">small</button>\n\t\t\t\t\t<button>medium</button>\n\t\t\t\t\t<button class=\"selected\">large</button>\n\t\t\t\t</div>\n\n\t\t\t\t<h2>Large panel</h2>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tbuttons = target.querySelectorAll('button');\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"tab-list\">\n\t\t\t\t\t<button class=\"\">small</button>\n\t\t\t\t\t<button class=\"selected\">medium</button>\n\t\t\t\t\t<button class=\"\">large</button>\n\t\t\t\t</div>\n\n\t\t\t\t<h2>Medium panel</h2>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.show_medium = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"tabs\">\n\t\t\t\t<div class=\"tab-list\">\n\t\t\t\t\t<button class=\"\">small</button>\n\t\t\t\t\t<button class=\"selected\">large</button>\n\t\t\t\t</div>\n\n\t\t\t\t<h2>Large panel</h2>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api/main.svelte",
    "content": "<script>\n\timport Tabs from './Tabs.svelte';\n\timport TabList from './TabList.svelte';\n\timport Tab from './Tab.svelte';\n\timport TabPanel from './TabPanel.svelte';\n\n\texport let show_medium = false;\n</script>\n\n<Tabs>\n\t<TabList>\n\t\t<Tab>small</Tab>\n\t\t{#if show_medium}<Tab>medium</Tab>{/if}\n\t\t<Tab>large</Tab>\n\t</TabList>\n\n\t<TabPanel>\n\t\t<h2>Small panel</h2>\n\t</TabPanel>\n\n\t{#if show_medium}\n\t\t<TabPanel>\n\t\t\t<h2>Medium panel</h2>\n\t\t</TabPanel>\n\t{/if}\n\n\t<TabPanel>\n\t\t<h2>Large panel</h2>\n\t</TabPanel>\n</Tabs>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-b/Leaf.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte';\n\timport { ID } from './Nested.svelte';\n\n\tconst name = getContext('test');\n</script>\n\n<div>{name}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-b/Nested.svelte",
    "content": "<script>\n\timport { getContext, setContext } from 'svelte';\n\n\texport let name = '';\n\n\tconst parentName = getContext('test');\n\tsetContext('test', parentName ? parentName + '/' + name : name);\n</script>\n\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>foo/bar</div>\n\t\t<div>foo/baz</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-b/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport Leaf from './Leaf.svelte';\n</script>\n\n<Nested name='foo'>\n\t<Nested name='bar'>\n\t\t<Leaf/>\n\t</Nested>\n\t<Nested name='baz'>\n\t\t<Leaf/>\n\t</Nested>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-c/Leaf.svelte",
    "content": "<script>\n\timport { hasContext } from 'svelte';\n\n\tconst has = hasContext('test');\n</script>\n\n<div>{has}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-c/Nested.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\n\texport let value = '';\n\n\tif (value) {\n\t\tsetContext('test', value);\n\t}\n</script>\n\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-c/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>true</div>\n\t\t<div>false</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-c/main.svelte",
    "content": "<script>\n  import Nested from \"./Nested.svelte\";\n  import Leaf from \"./Leaf.svelte\";\n</script>\n\n<Nested value=\"bar\">\n  <Leaf />\n</Nested>\n\n<Nested>\n  <Leaf />\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-d/Leaf.svelte",
    "content": "<script>\n\timport { getAllContexts } from 'svelte';\n\n\tconst context = getAllContexts();\n</script>\n\n{#each [...context.keys()] as key}\n\t<div>{key}: {context.get(key)}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-d/Nested.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n  setContext('a', 1);\n  setContext('b', 2);\n  setContext('c', 3);\n</script>\n\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-d/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>a: 1</div>\n\t\t<div>b: 2</div>\n\t\t<div>c: 3</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-api-d/main.svelte",
    "content": "<script>\n  import Nested from './Nested.svelte';\n  import Leaf from './Leaf.svelte';\n</script>\n\n<Nested>\n  <Leaf />\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-in-await/Child.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte';\n\tconst num = getContext('test');\n</script>\n\n<p>Context value: {num}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-in-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>...waiting</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait component.promise;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Context value: 123</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-in-await/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tsetContext('test', 123);\n\n\texport let promise = Promise.resolve();\n</script>\n\n{#await promise}\n\t<p>...waiting</p>\n{:then}\n\t<Child />\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-in-template/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `hello world`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-in-template/main.svelte",
    "content": "<script>\n\timport { getContext, setContext } from 'svelte';\n\n\tsetContext('val', 'hello world')\n\n\tconst get_val = () => {\n\t\treturn getContext('val');\n\t}\n</script>\n\n{get_val()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-setcontext-return/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>true</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/context-setcontext-return/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\tconst a = {};\n\tconst b = setContext('foo', a);\n</script>\n\n<div>{a === b}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/contextual-callback/Widget.svelte",
    "content": "<script>\n\texport let handleClick;\n</script>\n\n<button on:click={handleClick}>\n\tclick me\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/contextual-callback/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<button>click me</button>',\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button?.dispatchEvent(click);\n\n\t\tassert.equal(component.clicked, 'x');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/contextual-callback/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let clicked;\n</script>\n\n{#each ['x'] as letter}\n\t<Widget handleClick=\"{() => clicked = letter}\"/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/contextual-callback-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<select>\n\t\t\t<option value=\"please choose\">please choose</option>\n\t\t\t<option value=\"1\">1</option>\n\t\t\t<option disabled=\"\" value=\"2\">2</option>\n\t\t\t<option value=\"3\">3</option>\n\t\t\t<option disabled=\"\" value=\"4\">4</option>\n\t\t\t<option value=\"5\">5</option>\n\t\t</select>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/contextual-callback-b/main.svelte",
    "content": "<script>\n\tlet available = [1, 2, 3, 4, 5];\n\tlet taken = [2, 4];\n</script>\n\n<select>\n\t<option value=\"please choose\">please choose</option>\n\t{#each available as a}\n\t\t<option disabled=\"{!!taken.find(f => f == a)}\" value=\"{a}\">{a}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css/Widget.svelte",
    "content": "<p>test</p>\n\n<style>\n\tp {\n\t\tcolor: #f00;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst [control, test] = target.querySelectorAll('p');\n\n\t\tassert.equal(window.getComputedStyle(control).color, '');\n\t\tassert.equal(window.getComputedStyle(test).color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<p>control</p>\n<Widget/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-comments/_config.js",
    "content": "import { ok, test } from '../../test';\n\n// JSDOM makes this test pass when it should fail. weird\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tassert.equal(window.getComputedStyle(p).color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-comments/main.svelte",
    "content": "<p>red</p>\n\n<style>\n\t/*\n\t\tdiv {}\n\t*/\n\n\tp {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-space-in-attribute/Widget.svelte",
    "content": "<p class='foo bar'>red on black</p>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n\n\t[class*=\" bar\"] {\n\t\tbackground: black;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-space-in-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst [control, test] = target.querySelectorAll('p');\n\n\t\tassert.equal(window.getComputedStyle(control).color, '');\n\t\tassert.equal(window.getComputedStyle(control).backgroundColor, 'rgba(0, 0, 0, 0)');\n\n\t\tassert.equal(window.getComputedStyle(test).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(window.getComputedStyle(test).backgroundColor, 'rgb(0, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-space-in-attribute/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<p class='foo bar'>control</p>\n<Widget/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-vars-escape/Sub.svelte",
    "content": "<div>hi</div>\n\n<style>\n\tdiv {\n\t\tbackground-color: var(--color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-vars-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svelte-css-wrapper style=\"display: contents; --color: &quot; onload=&quot;alert('uhoh')&quot; data-nothing=&quot;not important;\">\n\t\t\t<div class=\"svelte-271qee\">hi</div>\n\t\t</svelte-css-wrapper>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/css-vars-escape/main.svelte",
    "content": "<script>\nimport Sub from './Sub.svelte';\n  export let attack = '\" onload=\"alert(\\'uhoh\\')\" data-nothing=\"not important';\n</script>\n\n<Sub --color={attack} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/custom-method/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<p>0</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(component.counter, 1);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(component.counter, 2);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>2</p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(component.foo(), 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/custom-method/main.svelte",
    "content": "<script>\n\texport let counter = 0;\n\n\tfunction add1() {\n\t\tcounter += 1;\n\t}\n\n\texport function foo() {\n\t\treturn 42;\n\t}\n</script>\n\n<button on:click='{add1}'>+1</button>\n\n<p>{counter}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-anchor/Anchor.svelte",
    "content": "<p>Anchor</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-anchor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Anchor</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-anchor/main.svelte",
    "content": "<script>\n\timport Anchor from './Anchor.svelte';\n</script>\n\n<Anchor/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-block-methods/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\thtml: '<div>deconflicted</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-block-methods/main.svelte",
    "content": "<script>\n\tconst create = 'deconflicted';\n</script>\n\n<div>{create}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-builtins/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span>got</span>',\n\n\ttest({ assert, component }) {\n\t\tassert.equal(component.foo, 'got');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-builtins/get.js",
    "content": "export function get() {\n\treturn 'got';\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-builtins/main.svelte",
    "content": "<script>\n\timport { get } from './get.js';\n\n\texport let foo = get();\n</script>\n\n<span>{foo}</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-builtins-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<svg><text>hello world</text></svg>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-builtins-2/main.svelte",
    "content": "<script>\n\tlet foo = 'hello world'\n</script>\n<svg>\n\t<text>{foo}</text>\n</svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-component-name-with-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tname: 'Set'\n\t},\n\n\thtml: '<p>true</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-component-name-with-global/main.svelte",
    "content": "<script>\n\tlet set = new Set(['x']);\n</script>\n\n<p>{set.has('x')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-component-name-with-module-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tname: 'Set'\n\t},\n\n\thtml: '<p>true</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-component-name-with-module-global/main.svelte",
    "content": "<script module>\n\tlet set = new Set(['x']);\n</script>\n\n<p>{set.has('x')}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-component-refs/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<ul>\n\t\t\t<li><input></li>\n\t\t\t<li>bar</li>\n\t\t\t<li>baz</li>\n\t\t</ul>\n\t`,\n\n\tssrHtml: `\n\t\t<ul>\n\t\t\t<li><input value=foo></li>\n\t\t\t<li>bar</li>\n\t\t\t<li>baz</li>\n\t\t</ul>\n\t`,\n\n\tget props() {\n\t\treturn {\n\t\t\tcomponents: [\n\t\t\t\t{ name: 'foo', edit: true },\n\t\t\t\t{ name: 'bar', edit: false },\n\t\t\t\t{ name: 'baz', edit: false }\n\t\t\t]\n\t\t};\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-component-refs/main.svelte",
    "content": "<script>\n\texport let components;\n\tlet name;\n</script>\n\n<ul>\n\t{#each components as component}\n\t\t<li>\n\t\t\t{#if component.edit}\n\t\t\t\t<input bind:this={name} bind:value={component.name} />\n\t\t\t{:else}\n\t\t\t\t{component.name}\n\t\t\t{/if}\n\t\t</li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contexts/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<ul><li>foo</li><li>bar</li><li>baz</li></ul>\n\t`,\n\n\tget props() {\n\t\treturn { components: ['foo', 'bar', 'baz'] };\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contexts/main.svelte",
    "content": "<script>\n\texport let components;\n</script>\n\n<ul>\n\t{#each components as component}\n\t\t<li>{component}</li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contextual-action/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {string[]} */\nlet result;\n\nexport default test({\n\tbefore_test() {\n\t\tresult = [];\n\t},\n\tget props() {\n\t\treturn {\n\t\t\t/** @param {string} str */\n\t\t\tcollect: (str) => result.push(str)\n\t\t};\n\t},\n\ttest({ assert }) {\n\t\tassert.deepEqual(result, ['import_action', 'each_action']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contextual-action/main.svelte",
    "content": "<script>\n\timport action from './util.js';\n\texport let collect;\n\n\tfunction each_action(_, fn) {\n\t\tfn('each_action');\n\t}\n\tconst array = [each_action];\n</script>\n\n<div use:action={collect}></div>\n\n<ul>\n\t{#each array as action}\n\t\t<div use:action={collect}></div>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contextual-action/util.js",
    "content": "export default function (_, fn) {\n\tfn('import_action');\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contextual-bind/Widget.svelte",
    "content": "<script>\n\texport let prop;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contextual-bind/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-contextual-bind/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\tconst values = ['foo', 'bar'];\n</script>\n\n{#each values as value}\n\t<Widget bind:value/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-ctx/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<h1>Hello world!</h1>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-ctx/main.svelte",
    "content": "<script>\n\tconst ctx = 'world';\n</script>\n\n<h1>Hello {ctx}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-elements-indexes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<i>one</i>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst { tagList } = component;\n\t\ttagList.push('two');\n\t\tcomponent.tagList = tagList;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<i>one</i>\n\t\t\t\t<i>two</i>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-elements-indexes/main.svelte",
    "content": "<script>\n\texport let tagList = ['one'];\n\n\tfunction remove(index) {\n\t\t// ...\n\t}\n</script>\n\n<div>\n\t{#each tagList as tag, i}\n\t\t<i on:click='{() => remove(i)}'>\n\t\t\t{tag}\n\t\t</i>\n\t{/each}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-globals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tname: 'window'\n\t},\n\n\thtml: `\n\t\t<p>I hereby declare Svelte the bestest framework.</p>\n\t\t<p>nintendo sixty four</p>\n\t\t<p>Woops.</p>\n\t\t<p>42</p>\n\t\t<p>false</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-globals/main.svelte",
    "content": "<script>\n\tconst document = 'I hereby declare Svelte the bestest framework.';\n\tconst console = 'nintendo sixty four';\n\tconst Error = 'Woops.';\n\tconst Object = 42;\n\tconst Map = false;\n\n\tconst everyone = [document, console, Error, Object, Map];\n</script>\n\n<svelte:head>\n\t<title>Cute test</title>\n</svelte:head>\n\n<svelte:window on:click></svelte:window>\n<svelte:body on:mouseenter></svelte:body>\n\n{#each everyone as someone (someone)}\n\t<p>{someone}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-non-helpers/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'ABCD',\n\n\ttest({ assert, component }) {\n\t\tassert.equal(component.compute(), 'ABCD');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-non-helpers/main.svelte",
    "content": "<script>\n\timport { addCss, addedCss, applyComputations, renderMainFragment } from './module.js';\n\n\texport let value = addCss + addedCss + applyComputations + renderMainFragment;\n\n\texport function compute() {\n\t\treturn value.toUpperCase();\n\t}\n</script>\n\n{compute()}\n\n<style>\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-non-helpers/module.js",
    "content": "export const addCss = 'a';\nexport const addedCss = 'b';\nexport const applyComputations = 'c';\nexport const renderMainFragment = 'd';\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-self/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>nested component</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-self/main.svelte",
    "content": "<script>\n\timport Main from './nested/main.svelte';\n</script>\n\n<Main/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-self/nested/main.svelte",
    "content": "<p>nested component</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-spread-i/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-spread-i/main.svelte",
    "content": "<script>\n\tconst attrs = {};\n</script>\n\n<i {...attrs}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'template'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-1/main.svelte",
    "content": "<script>\n\timport { template } from './module.js';\n\n\texport let value = template;\n</script>\n\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-1/module.js",
    "content": "export const template = 'template';\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'template'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-2/main.svelte",
    "content": "<script>\n\texport let value = template();\n\n\tfunction template() {\n\t\treturn 'template';\n\t}\n</script>\n\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<main>test</main>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-3/main.svelte",
    "content": "<main>test</main>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>test</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-template-4/main.svelte",
    "content": "<script>\n\tlet h1 = 'test';\n</script>\n\n<h1>{h1}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-value/Widget.svelte",
    "content": "<script>\n\texport let value = 'foo';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `\n\t\t<p>Reactive: foo</p>\n\t\t<p>Value: foo</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-value/main.svelte",
    "content": "<script>\n  import Widget from './Widget.svelte';\n\tlet value;\n\t$: reactive = value;\n</script>\n\n<Widget bind:value/>\n<p>Reactive: {reactive}</p>\n<p>Value: {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-vars/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>ab</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/deconflict-vars/main.svelte",
    "content": "<script>\n\tfunction throwError() {\n\t\tthrow new Error('nope');\n\t}\n\n\tconst createElement = throwError;\n\tconst createElement$ = throwError;\n\n\texport let value = template() + template$();\n\n\tfunction template() {\n\t\treturn 'a';\n\t}\n\n\tfunction template$() {\n\t\treturn 'b';\n\t}\n</script>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/default-data/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello world!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/default-data/main.svelte",
    "content": "<script>\n\texport let name = 'world';\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/default-data-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello world!</h1>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.name = () => 'everybody';\n\t\tassert.htmlEqual(target.innerHTML, '<h1>Hello everybody!</h1>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/default-data-function/main.svelte",
    "content": "<script>\n\texport let name = () => 'world';\n</script>\n\n<h1>Hello {name()}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/default-data-override/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'everybody' };\n\t},\n\n\thtml: '<h1>Hello everybody!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/default-data-override/main.svelte",
    "content": "<script>\n\texport let name = 'world';\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destroy-twice/_config.js",
    "content": "import { test } from '../../test';\nimport { unmount } from 'svelte';\n\nexport default test({\n\ttest({ component }) {\n\t\tunmount(component);\n\t\tunmount(component);\n\t},\n\n\twarnings: [\n\t\t'Tried to unmount a component that was not mounted',\n\t\t'Tried to unmount a component that was not mounted'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destroy-twice/main.svelte",
    "content": "<div/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-assignment-pattern-with-object-pattern/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>hello </div>\n\t\t<div>hello bar2</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-assignment-pattern-with-object-pattern/main.svelte",
    "content": "<script>\n\tconst hoge = {};\n\tconst { foo: { bar } = {} } = hoge;\n\n\n\tconst hoge2 = {};\n\tconst { foo2: { bar2 } = { bar2: \"bar2\" } } = hoge2;\n</script>\n\n<div>hello {bar}</div>\n<div>hello {bar2}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-1/A.svelte",
    "content": "<script>\n  import { writable } from 'svelte/store';\n\n  const THING = { a: 1, b: { c: 2, d: [3, 4, writable(5)] }, e: [6], h: 8 };\n  const default_g = 9;\n\n  export let { a, b: { c, d: [d_one,,d_three], f }, e: [e_one], g = default_g } = THING;\n  export const { a: A, b: { c: C } } = THING;\n</script>\n\n<div>\na: {a},\nb: {typeof b},\nc: {c},\nd_one: {d_one},\nd_three: {$d_three},\nf: {f},\ng: {g},\ne: {typeof e},\ne_one: {e_one},\nA: {A},\nC: {C}\n</div>\n<div>{JSON.stringify(THING)}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>a: 1, b: undefined, c: 2, d_one: 3, d_three: 5, f: , g: 9, e: undefined, e_one: 6, A: 1, C: 2</div>\n\t\t<div>{\"a\":1,\"b\":{\"c\":2,\"d\":[3,4,{}]},\"e\":[6],\"h\":8}</div>\n\t\t<br>\n\t\t<div>a: a, b: undefined, c: 2, d_one: d_one, d_three: 5, f: f, g: g, e: undefined, e_one: 6, A: 1, C: 2</div>\n\t\t<div>{\"a\":1,\"b\":{\"c\":2,\"d\":[3,4,{}]},\"e\":[6],\"h\":8}</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-1/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n</script>\n\n<A />\n<br />\n<A a=\"a\" d_one=\"d_one\" list_one=\"list_one\" f=\"f\" list_two_b=\"list_two_b\" g=\"g\" A=\"A\" C=\"C\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-2/A.svelte",
    "content": "<script>\n  import { writable } from 'svelte/store';\n\n  let default_b = 5;\n  const LIST = [1, { a: 2 }, [3, writable(4)]];\n  export const [x, { a: list_two_a, b: list_two_b = default_b }, [, y]] = LIST;\n  export let [m, { a: n, b: o = default_b }, [p, q]] = LIST;\n</script>\n\n<div>\n  x: {x},\n  list_two_a: {list_two_a},\n  list_two_b: {list_two_b},\n  y: {$y},\n  m: {m},\n  n: {n},\n  o: {o},\n  p: {p},\n  q: {$q}\n</div>\n<div>{JSON.stringify(LIST)}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: 1, n: 2, o: 5, p: 3, q: 4</div>\n\t\t<div>[1,{\"a\":2},[3,{}]]</div>\n\t\t<br><div>x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: m, n: n, o: o, p: p, q: q</div>\n\t\t<div>[1,{\"a\":2},[3,{}]]</div>\n\t`,\n\n\tasync test({ component, assert, target }) {\n\t\tawait component.update();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: 1, n: 2, o: 5, p: 3, q: 4</div>\n\t\t\t<div>[1,{\"a\":2},[3,{}]]</div>\n\t\t\t<br><div>x: 1, list_two_a: 2, list_two_b: 5, y: 4, m: MM, n: NN, o: OO, p: PP, q: QQ</div>\n\t\t\t<div>[1,{\"a\":2},[3,{}]]</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-2/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\timport { writable } from 'svelte/store';\n\n\tlet x = 'x',\n\t\tlist_two_a = 'list_two_a',\n\t\tlist_two_b = 'list_two_b',\n\t\ty = writable('y'),\n\t\tm = 'm',\n\t\tn = 'n',\n\t\to = 'o',\n\t\tp = 'p',\n\t\tq = writable('q');\n\n\texport function update() {\n\t\tx = 'XX';\n\t\tlist_two_a = 'LIST_TWO_A';\n\t\tlist_two_b = 'LIST_TWO_B';\n\t\ty = writable('YY');\n\t\tm = 'MM';\n\t\tn = 'NN';\n\t\to = 'OO';\n\t\tp = 'PP';\n\t\tq = writable('QQ');\n\t}\n</script>\n\n<A />\n<br />\n<A {x} {list_two_a} {list_two_b} {y} {m} {n} {o} {p} {q} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-3/A.svelte",
    "content": "<script>\n  import { writable } from 'svelte/store';\n\n  const { i, j, k } = { i: 9, j: 10, k: writable(11) }, l = 12, m = 13, n = writable(14);\n  let { a, b, c } = { a: 9, b: 10, c: writable(11) }, d = 12, e = 13, f = writable(14);\n\n  export { i, k, l, n, a, c, d, f };\n</script>\n\n<div>i: {i}, j: {j}, k: {$k}, l: {l}, m: {m}, n: {$n}, a: {a}, b: {b}, c: {$c}, d: {d}, e: {e}, f: {$f}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: 9, b: 10, c: 11, d: 12, e: 13, f: 14</div>\n\t\t<br>\n\t\t<div>i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: a, b: 10, c: c, d: d, e: 13, f: f</div>\n\t`,\n\tasync test({ component, target, assert }) {\n\t\tawait component.update();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: 9, b: 10, c: 11, d: 12, e: 13, f: 14</div>\n\t\t\t<br>\n\t\t\t<div>i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, a: aa, b: 10, c: cc, d: dd, e: 13, f: ff</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-3/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\timport { writable } from 'svelte/store';\n\n\tlet i = 'i',\n\t\tk = writable('k'),\n\t\tl = 'l',\n\t\tn = writable('n'),\n\t\ta = 'a',\n\t\tc = writable('c'),\n\t\td = 'd',\n\t\tf = writable('f');\n\n\texport function update() {\n\t\ti = 'ii';\n\t\tk = writable('kk');\n\t\tl = 'll';\n\t\tn = writable('nn');\n\t\ta = 'aa';\n\t\tc = writable('cc');\n\t\td = 'dd';\n\t\tf = writable('ff');\n\t}\n\n</script>\n\n<A />\n<br />\n<A {i} {k} {l} {n} {a} {c} {d} {f} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-4/A.svelte",
    "content": "<script>\n  import { writable } from 'svelte/store';\n\n  const THING = { a: 1, b: { c: 2, d: [3, 4, writable(5), 6, 7] }, e: [6], h: 8 };\n  const default_g = 9;\n\n  export let { a, b: { c, d: [d_one, ...[, ...[d_three, ...{ length }]]], f }, e: [e_one], g = default_g } = THING;\n  export const { a: A, b: { c: C } } = THING;\n</script>\n\n<div>\na: {a},\nb: {typeof b},\nc: {c},\nd_one: {d_one},\nd_three: {$d_three},\nlength: {length},\nf: {f},\ng: {g},\ne: {typeof e},\ne_one: {e_one},\nA: {A},\nC: {C}\n</div>\n<div>{JSON.stringify(THING)}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>a: 1, b: undefined, c: 2, d_one: 3, d_three: 5, length: 2, f: , g: 9, e: undefined, e_one: 6, A: 1, C: 2</div>\n\t\t<div>{\"a\":1,\"b\":{\"c\":2,\"d\":[3,4,{},6,7]},\"e\":[6],\"h\":8}</div>\n\t\t<br>\n\t\t<div>a: a, b: undefined, c: 2, d_one: d_one, d_three: 5, length: 7, f: f, g: g, e: undefined, e_one: 6, A: 1, C: 2</div>\n\t\t<div>{\"a\":1,\"b\":{\"c\":2,\"d\":[3,4,{},6,7]},\"e\":[6],\"h\":8}</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-4/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n</script>\n\n<A />\n<br />\n<A a=\"a\" d_one=\"d_one\" list_one=\"list_one\" f=\"f\" list_two_b=\"list_two_b\" g=\"g\" A=\"A\" C=\"C\" length={7} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-5/A.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\n\tlet default_b = 5;\n\tconst LIST = [1, 2, 3, { a: 4 }, [5, writable(6), writable(7), 8]];\n\texport const [\n\t\tx,\n\t\t,\n\t\t...[, { a: list_two_a, b: list_two_b = default_b }, [, ...{ length: y }]]\n\t] = LIST;\n\texport let [\n\t\tl,\n\t\tm,\n\t\t,\n\t\t...[{ a: n, b: o = default_b }, [p, q, ...[r, ...{ length: s }]]]\n\t] = LIST;\n</script>\n\n<div>\n\tx: {x}, list_two_a: {list_two_a}, list_two_b: {list_two_b}, y: {y}, l: {l}, m: {m},\n\tn: {n}, o: {o}, p: {p}, q: {$q}, r: {$r}, s: {s}\n</div>\n<div>{JSON.stringify(LIST)}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: 1, m: 2, n: 4, o: 5, p: 5, q: 6, r: 7, s: 1</div>\n\t\t<div>[1,2,3,{\"a\":4},[5,{},{},8]]</div>\n\t\t<br><div>x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: l, m: m, n: n, o: o, p: p, q: q, r: r, s: s</div>\n\t\t<div>[1,2,3,{\"a\":4},[5,{},{},8]]</div>\n\t`,\n\n\tasync test({ component, assert, target }) {\n\t\tawait component.update();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: 1, m: 2, n: 4, o: 5, p: 5, q: 6, r: 7, s: 1</div>\n\t\t\t<div>[1,2,3,{\"a\":4},[5,{},{},8]]</div>\n\t\t\t<br><div>x: 1, list_two_a: 4, list_two_b: 5, y: 3, l: LL, m: MM, n: NN, o: OO, p: PP, q: QQ, r: RR, s: SS</div>\n\t\t\t<div>[1,2,3,{\"a\":4},[5,{},{},8]]</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructured-props-5/main.svelte",
    "content": "<script>\n\timport A from \"./A.svelte\";\n\timport { writable } from \"svelte/store\";\n\n\tlet x = \"x\",\n\t\tlist_two_a = \"list_two_a\",\n\t\tlist_two_b = \"list_two_b\",\n\t\ty = writable(\"y\"),\n\t\tl = \"l\",\n\t\tm = \"m\",\n\t\tn = \"n\",\n\t\to = \"o\",\n\t\tp = \"p\",\n\t\tq = writable(\"q\"),\n\t\tr = writable(\"r\"),\n\t\ts = \"s\";\n\n\texport function update() {\n\t\tx = \"XX\";\n\t\tlist_two_a = \"LIST_TWO_A\";\n\t\tlist_two_b = \"LIST_TWO_B\";\n\t\ty = writable(\"YY\");\n\t\tl = \"LL\";\n\t\tm = \"MM\";\n\t\tn = \"NN\";\n\t\to = \"OO\";\n\t\tp = \"PP\";\n\t\tq = writable(\"QQ\");\n\t\tr = writable(\"RR\");\n\t\ts = \"SS\";\n\t}\n</script>\n\n<A />\n<br />\n<A {x} {list_two_a} {list_two_b} {y} {l} {m} {n} {o} {p} {q} {r} {s} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring/_config.js",
    "content": "import { test } from '../../test';\n\n// TODO err... what is going on here\nexport default test({\n\thtml: '<button>click me</button>',\n\n\tget props() {\n\t\treturn { foo: 42 };\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tconst event = new window.MouseEvent('click');\n\t\t// @ts-expect-error wut\n\t\tconst button = target.querySelector('button', { bubbles: true });\n\n\t\tlet count = 0;\n\t\tlet number = null;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring/main.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n\n\texport let foo;\n</script>\n\n<button on:click='{() => dispatch(\"foo\", { foo })}'>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring-assignment-array/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<ul>\n\t\t\t<li>Gruyere</li>\n\t\t\t<li>Compté</li>\n\t\t\t<li>Beaufort</li>\n\t\t\t<li>Abondance</li>\n\t\t</ul>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.swap(0, 1);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<ul>\n\t\t\t\t<li>Compté</li>\n\t\t\t\t<li>Gruyere</li>\n\t\t\t\t<li>Beaufort</li>\n\t\t\t\t<li>Abondance</li>\n\t\t\t</ul>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring-assignment-array/main.svelte",
    "content": "<script>\n\tlet cheese = [\n\t\t'Gruyere',\n\t\t'Compté',\n\t\t'Beaufort',\n\t\t'Abondance',\n\t];\n\n\texport function swap(a, b) {\n\t\t[cheese[a], cheese[b]] = [cheese[b], cheese[a]];\n\t}\n</script>\n\n<ul>\n\t{#each cheese as cheese}\n\t\t<li>{cheese}</li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring-between-exports/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: { bar: 42 } };\n\t},\n\thtml: `\n\t\t<h1>42</h2>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring-between-exports/main.svelte",
    "content": "<script>\n\texport let foo;\n\tconst { bar } = foo;\n\texport let baz;\n</script>\n\n<h1>{bar}</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring-one-value-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>false</button>\n\t<button>click handler marks foo as reactive</button>\n`,\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>true</button>\n\t\t\t<button>click handler marks foo as reactive</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/destructuring-one-value-reactive/main.svelte",
    "content": "<script> \n    import { writable } from 'svelte/store';\n\n\tlet { foo, toggleFoo } = (() => {\n\t\tconst foo = writable(false);\n\t\treturn { foo, toggleFoo: () => foo.update(f => !f) }\n\t})();\n</script>\n\n<button on:click={toggleFoo}>{$foo}</button>\n<button on:click={() => foo = null}>click handler marks foo as reactive</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dev-warning-each-block-require-arraylike/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO: needs fixing\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\terror: '{#each} only works with iterable values.'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dev-warning-each-block-require-arraylike/main.svelte",
    "content": "{#each {} as item}\n\t<div>{item}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dev-warning-readonly-computed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tget props() {\n\t\treturn { a: 42 };\n\t},\n\n\ttest({ assert, component }) {\n\t\ttry {\n\t\t\tcomponent.foo = 1;\n\t\t\tthrow new Error('Expected an error');\n\t\t} catch (err) {\n\t\t\t// @ts-ignore\n\t\t\tassert.equal(err.message, 'Cannot set property foo of #<Object> which has only a getter');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dev-warning-readonly-computed/main.svelte",
    "content": "<script>\n\texport let a;\n\n\texport function foo() {\n\t\treturn a + 1;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/document-binding-active/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// This test is slightly inaccurate, because blurring elements (or focusing the `<body>` directly)\n// doesn't trigger the relevant `focusin` event in JSDOM.\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn1.focus());\n\t\tassert.deepEqual(logs, ['...', 'BODY', 'one']);\n\n\t\tflushSync(() => btn2.focus());\n\t\tassert.deepEqual(logs, ['...', 'BODY', 'one', 'two']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/document-binding-active/main.svelte",
    "content": "<script>\n\tlet active;\n\n\t$: console.log(active?.id || active?.nodeName || '...');\n</script>\n\n<svelte:document bind:activeElement={active} />\n\n<button id=\"one\">one</button>\n<button id=\"two\">two</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/document-binding-fullscreen/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tbefore_test() {\n\t\tObject.defineProperties(window.document, {\n\t\t\tfullscreenElement: {\n\t\t\t\tvalue: null,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t},\n\n\tasync test({ assert, target, window, component }) {\n\t\tconst event = new window.Event('fullscreenchange');\n\n\t\tconst div = target.querySelector('div');\n\n\t\tObject.defineProperties(window.document, {\n\t\t\tfullscreenElement: {\n\t\t\t\tvalue: div,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\n\t\twindow.document.dispatchEvent(event);\n\n\t\tassert.equal(component.fullscreen, div);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/document-binding-fullscreen/main.svelte",
    "content": "<script>\n\texport let fullscreen;\n</script>\n\n<svelte:document bind:fullscreenElement={fullscreen}/>\n\n<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/document-event/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, window }) {\n\t\tassert.deepEqual(component.events, []);\n\n\t\tconst event1 = new window.Event('mouseenter');\n\t\twindow.document.body.dispatchEvent(event1);\n\t\tassert.deepEqual(component.events, ['enter']);\n\n\t\tconst event2 = new window.Event('mouseleave');\n\t\twindow.document.body.dispatchEvent(event2);\n\t\tassert.deepEqual(component.events, ['enter', 'leave']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/document-event/main.svelte",
    "content": "<script>\n\texport let events = [];\n\n\tfunction log(event) {\n\t\tevents.push(event);\n\t}\n</script>\n\n<svelte:body on:mouseenter='{() => log(\"enter\")}' on:mouseleave='{() => log(\"leave\")}'/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component/Bar.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>{x}, therefore Bar</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component/Foo.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>{x}, therefore Foo</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<p>true, therefore Foo</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>false, therefore Bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let x;\n</script>\n\n<svelte:component this=\"{ x ? Foo : Bar }\" x='{x}'/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings/Bar.svelte",
    "content": "<script>\n\texport let z;\n</script>\n\n<p>bar</p>\n<input type='checkbox' bind:checked={z}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings/Foo.svelte",
    "content": "<script>\n\texport let y;\n</script>\n\n<p>foo</p>\n<input bind:value={y}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<p>foo</p>\n\t\t<input>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tlet input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'abc';\n\t\tawait input.dispatchEvent(new window.Event('input'));\n\n\t\tassert.equal(component.y, 'abc');\n\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>bar</p>\n\t\t\t<input type='checkbox'>\n\t\t`\n\t\t);\n\n\t\tinput = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.checked = true;\n\t\tawait input.dispatchEvent(new window.Event('change'));\n\n\t\tassert.equal(component.z, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let x;\n\texport let y;\n\texport let z;\n</script>\n\n<svelte:component this=\"{ x ? Foo : Bar }\" bind:y bind:z/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated/Green.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>green {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated/Red.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>red {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true, foo: 'one' };\n\t},\n\n\thtml: `\n\t\t<p>green one</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>red one</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = 'two';\n\t\tcomponent.x = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>green two</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated/main.svelte",
    "content": "<script>\n\timport Green from './Green.svelte';\n\timport Red from './Red.svelte';\n\n\texport let x;\n\texport let foo;\n</script>\n\n<svelte:component this=\"{x ? Green : Red}\" bind:foo />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Green.svelte",
    "content": "<script>\n\texport let foo = 'green';\n</script>\n\n<p>green {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Red.svelte",
    "content": "<script>\n\texport let foo = 'red';\n</script>\n\n<p>red {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<p>parent green</p>\n\t\t<p>green green</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = undefined;\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>parent red</p>\n\t\t\t<p>red red</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = undefined;\n\t\tcomponent.x = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>parent green</p>\n\t\t\t<p>green green</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/main.svelte",
    "content": "<script>\n\timport Green from './Green.svelte';\n\timport Red from './Red.svelte';\n\n\texport let foo;\n\texport let x;\n</script>\n\n<p>parent {foo}</p>\n<svelte:component this=\"{x ? Green : Red}\" bind:foo />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-destroy-null/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\ttest({ component }) {\n\t\tcomponent.x = false;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-destroy-null/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n{#if x}\n\t<svelte:component this={null}/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-dirty/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {string[]} */\nlet calls = [];\n\nexport default test({\n\tget props() {\n\t\treturn { calls };\n\t},\n\n\tbefore_test() {\n\t\tcalls = [];\n\t},\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.deepEqual(calls.length, 1);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tawait button?.dispatchEvent(event);\n\n\t\tassert.deepEqual(calls.length, 1);\n\n\t\tcomponent.current_path = 'bar';\n\t\tassert.deepEqual(calls.length, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-dirty/main.svelte",
    "content": "<script>\n\texport let current_path = 'foo';\n\texport let calls;\n\tlet i = 0;\n\tfunction getComponent(path) {\n\t\tcalls.push(path);\n\t\treturn null;\n\t}\n\tfunction onClick() {\n\t\ti = i + 1;\n\t}\n</script>\n\n<svelte:component this={getComponent(current_path)} />\n<button on:click={onClick}>click me</button>\n{i}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-evals-props-once/Comp1.svelte",
    "content": "<script>\n  export let value;\n</script>\n\n<p>value(1) = {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-evals-props-once/Comp2.svelte",
    "content": "<script>\n  export let value;\n</script>\n\n<p>value(2) = {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-evals-props-once/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>value(1) = 1</p>\n\t\t<button>Toggle Component</button>\n\t`,\n\n\tasync test({ assert, component, window, target }) {\n\t\tconst button = target.querySelector('button');\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(new window.Event('click'));\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>value(2) = 2</p>\n\t\t\t\t<button>Toggle Component</button>\n\t\t\t`\n\t\t);\n\t\tassert.equal(component.n, 2);\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(new window.Event('click'));\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>value(1) = 3</p>\n\t\t\t\t<button>Toggle Component</button>\n\t\t\t`\n\t\t);\n\t\tassert.equal(component.n, 3);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-evals-props-once/main.svelte",
    "content": "<script>\n  import Comp1 from './Comp1.svelte';\n  import Comp2 from './Comp2.svelte';\n\n  export let n = 0;\n  let view = { comp: Comp1, fn: () => ++n };\n</script>\n\n<svelte:component this={view.comp} value={view.fn()}/>\n\n<button on:click={e => view.comp = view.comp === Comp1 ? Comp2 : Comp1}>Toggle Component</button>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-events/Bar.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click='{() => dispatch(\"select\", { id: \"bar\" })}'>select bar</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-events/Foo.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click='{() => dispatch(\"select\", { id: \"foo\" })}'>select foo</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-events/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<button>select foo</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\ttarget.querySelector('button')?.dispatchEvent(click);\n\t\tassert.equal(component.selected, 'foo');\n\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>select bar</button>\n\t\t`\n\t\t);\n\n\t\ttarget.querySelector('button')?.dispatchEvent(click);\n\t\tassert.equal(component.selected, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-events/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let x;\n\texport let selected;\n</script>\n\n<svelte:component this=\"{x ? Foo : Bar}\" on:select=\"{e => selected = e.detail.id}\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if/Bar.svelte",
    "content": "<p>Bar</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if/Foo.svelte",
    "content": "<p>Foo</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Foo</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = component.Bar;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport { Bar };\n\texport let x = Foo;\n</script>\n\n{#if x}\n\t<svelte:component this={x}/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if-initial-falsy/Foo.svelte",
    "content": "<p>Foo</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if-initial-falsy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>toggle component</button>\n\t\t<button>toggle show</button>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle component</button>\n\t\t\t\t<button>toggle show</button>\n\t\t\t\t<p>Foo</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => btn2.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle component</button>\n\t\t\t\t<button>toggle show</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-in-if-initial-falsy/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\t/** @type {typeof Foo | null} */\n\tlet component = null;\n\n\tlet show = true;\n</script>\n\n<button on:click={() => (component = component ? null : Foo)}>toggle component</button>\n<button on:click={() => (show = !show)}>toggle show</button>\n\n{#if show}\n\t<svelte:component this={component} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-inside-element/Bar.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>{x}, therefore Bar</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-inside-element/Foo.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>{x}, therefore Foo</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-inside-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<div><p>true, therefore Foo</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><p>false, therefore Bar</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-inside-element/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let x;\n</script>\n\n<div>\n\t<svelte:component this=\"{ x ? Foo : Bar }\" x='{x}'/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-nulled-out/Foo.svelte",
    "content": "<p>Foo</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-nulled-out/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Foo</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst Bar = component.Bar;\n\n\t\tcomponent.Bar = null;\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.Bar = Bar;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Foo</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-nulled-out/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let Bar = Foo;\n</script>\n\n<svelte:component this={Bar}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-nulled-out-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ component }) {\n\t\tcomponent.visible = true;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-nulled-out-intro/main.svelte",
    "content": "<script>\n\texport let visible = false;\n</script>\n\n{#if visible}\n\t<svelte:component this={null}/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-ref/Foo.svelte",
    "content": "<script>\n  export const test = true;\n</script>\n\nFoo\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-ref/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'Foo',\n\n\ttest({ assert, component }) {\n\t\tassert.ok(component.test);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-ref/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let test;\n</script>\n\n<svelte:component bind:this={test} this={Foo}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-slot/Bar.svelte",
    "content": "<h1>Bar</h1>\n<slot></slot>\n<slot name='other'></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-slot/Baz.svelte",
    "content": "<div>baz</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-slot/Foo.svelte",
    "content": "<h1>Foo</h1>\n<slot name='other'></slot>\n<slot></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<h1>Foo</h1>\n\t\t<div slot='other'>what goes up must come down</div>\n\t\t<p>element</p>\n\t\tyou're it\n\t\t<p>neither foo nor bar</p>\n\t\ttext\n\t\t<span>a</span>\n\t\t<span>b</span>\n\t\t<span>c</span>\n\t\t<div>baz</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Bar</h1>\n\t\t\t<p>element</p>\n\t\t\tyou're it\n\t\t\t<p>neither foo nor bar</p>\n\t\t\ttext\n\t\t\t<span>a</span>\n\t\t\t<span>b</span>\n\t\t\t<span>c</span>\n\t\t\t<div>baz</div>\n\t\t\t<div slot='other'>what goes up must come down</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-slot/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\timport Baz from './Baz.svelte';\n\n\texport let x;\n\texport let tag = 'you\\'re it';\n\texport let foo;\n\texport let bar;\n\texport let things = ['a', 'b', 'c'];\n</script>\n\n<svelte:component this=\"{ x ? Foo : Bar }\" x='{x}'>\n\t<p>element</p>\n\n\t{tag}\n\n\t{#if foo}\n\t\t<p>foo</p>\n\t{:else if bar}\n\t\t<p>bar</p>\n\t{:else}\n\t\t<p>neither foo nor bar</p>\n\t{/if}\n\n\ttext\n\n\t{#each things as thing}\n\t\t<span>{thing}</span>\n\t{/each}\n\n\t<Baz/>\n\n\t<div slot='other'>what goes up must come down</div>\n</svelte:component>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-spread-props/Comp1.svelte",
    "content": "<script>\n  export let value;\n  export let foo;\n  export let cb;\n</script>\n\n<p>value(1) = {value}</p>\n<p>foo={foo}</p>\n<p>typeof cb={typeof cb}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-spread-props/Comp2.svelte",
    "content": "<script>\n  export let value;\n  export let foo;\n  export let cb;\n</script>\n\n<p>value(2) = {value}</p>\n<p>foo={foo}</p>\n<p>typeof cb={typeof cb}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-spread-props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>value(1) = 1</p>\n\t\t<p>foo=bar</p>\n\t\t<p>typeof cb=function</p>\n\t\t<button>Toggle Component</button>\n\t`,\n\n\ttest({ assert, window, target }) {\n\t\tconst button = target.querySelector('button');\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(new window.Event('click'));\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>value(2) = 2</p>\n\t\t\t\t<p>foo=bar</p>\n\t\t\t\t<p>typeof cb=function</p>\n\t\t\t\t<button>Toggle Component</button>\n\t\t\t`\n\t\t);\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(new window.Event('click'));\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>value(1) = 1</p>\n\t\t\t\t<p>foo=bar</p>\n\t\t\t\t<p>typeof cb=function</p>\n\t\t\t\t<button>Toggle Component</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-spread-props/main.svelte",
    "content": "<script>\n\timport Comp1 from './Comp1.svelte';\n\timport Comp2 from './Comp2.svelte';\n\n\tlet view = Comp1;\n\n\t$: props = view === Comp1 ? { value: 1 } : { value: 2 };\n\tconst bar = \"bar\";\n\tfunction cb() {}\n</script>\n\n<svelte:component this={view} {...props} foo={bar} {cb} />\n\n<button on:click={(e) => (view = view === Comp1 ? Comp2 : Comp1)}>Toggle Component</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-this/Test.svelte",
    "content": "<script>\n  export let div;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, component, target }) {\n\t\t// Shouldn't error\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-this/main.svelte",
    "content": "<script>\n  import Test from './Test.svelte'\n\n  let div\n</script>\n\n<svelte:component this={Test} bind:div />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-update-existing-instance/Bar.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>Bar {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-update-existing-instance/Foo.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<p>Foo {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-update-existing-instance/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 0 };\n\t},\n\n\thtml: `\n\t\t<p>Bar 0</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 1;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Foo 1</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-component-update-existing-instance/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let x;\n</script>\n\n<svelte:component this=\"{ x ? Foo : Bar }\" x='{x}'/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-action-update/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {string[]} */\nlet logs = [];\n\nexport default test({\n\thtml: `\n\t\t<h1>tag is h1.</h1>\n\t`,\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string | false} */\n\t\t\ttag: 'h1',\n\t\t\t/** @param {string} log */\n\t\t\tpushLogs(log) {\n\t\t\t\tlogs.push(log);\n\t\t\t}\n\t\t};\n\t},\n\tafter_test() {\n\t\tlogs = [];\n\t},\n\n\tasync test({ assert, component, target }) {\n\t\tassert.equal(component.tag, 'h1');\n\n\t\tassert.deepEqual(logs, ['create: h1,opt1']);\n\t\tcomponent.opt = 'opt2';\n\n\t\tassert.equal(component.tag, 'h1');\n\t\tassert.deepEqual(logs, ['create: h1,opt1', 'update: h1,opt2']);\n\n\t\tcomponent.tag = 'h2';\n\n\t\tassert.equal(component.tag, 'h2');\n\t\tassert.deepEqual(logs, ['create: h1,opt1', 'update: h1,opt2', 'destroy', 'create: h2,opt2']);\n\t\tassert.htmlEqual(target.innerHTML, '<h2>tag is h2.</h2>');\n\n\t\tcomponent.tag = false;\n\t\tassert.deepEqual(logs, [\n\t\t\t'create: h1,opt1',\n\t\t\t'update: h1,opt2',\n\t\t\t'destroy',\n\t\t\t'create: h2,opt2',\n\t\t\t'destroy'\n\t\t]);\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-action-update/main.svelte",
    "content": "<script>\n  export let pushLogs;\n\texport let tag = \"h1\";\n  export let opt = \"opt1\";\n  function foo(node, {tag, opt}) {\n    pushLogs(`create: ${tag},${opt}`);\n    return {\n      update: ({tag, opt}) => pushLogs(`update: ${tag},${opt}`),\n      destroy: () => pushLogs('destroy'),\n    };\n  }\n</script>\n\n<svelte:element this={tag} use:foo={{tag, opt}}>tag is {tag}.</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-animation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t],\n\t\t\ttag: 'div'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t\t<div>b</div>\n\t\t<div>c</div>\n\t\t<div>d</div>\n\t\t<div>e</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.tag = 'p';\n\t\tassert.equal(target.querySelectorAll('p').length, 5);\n\n\t\tcomponent.tag = 'div';\n\t\tlet divs = target.querySelectorAll('div');\n\t\tdivs.forEach((div) => {\n\t\t\tdiv.getBoundingClientRect = function () {\n\t\t\t\tconst index = [...(this.parentNode?.children ?? [])].indexOf(this);\n\t\t\t\tconst top = index * 30;\n\n\t\t\t\treturn /** @type {DOMRect} */ ({\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 100,\n\t\t\t\t\ttop,\n\t\t\t\t\tbottom: top + 20\n\t\t\t\t});\n\t\t\t};\n\t\t});\n\n\t\tcomponent.things = [\n\t\t\t{ id: 5, name: 'e' },\n\t\t\t{ id: 2, name: 'b' },\n\t\t\t{ id: 3, name: 'c' },\n\t\t\t{ id: 4, name: 'd' },\n\t\t\t{ id: 1, name: 'a' }\n\t\t];\n\n\t\traf.tick(0);\n\n\t\tdivs = target.querySelectorAll('div');\n\t\tassert.equal(divs[0].style.transform, 'translate(0px, 120px)');\n\t\tassert.equal(divs[1].style.transform, '');\n\t\tassert.equal(divs[2].style.transform, '');\n\t\tassert.equal(divs[3].style.transform, '');\n\t\tassert.equal(divs[4].style.transform, 'translate(0px, -120px)');\n\n\t\traf.tick(100);\n\t\tassert.deepEqual([divs[0].style.transform, divs[4].style.transform], ['', '']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-animation/main.svelte",
    "content": "<script>\n\texport let things;\n\texport let tag;\n\n\tfunction flip(node, animation, params) {\n\t\tconst dx = animation.from.left - animation.to.left;\n\t\tconst dy = animation.from.top - animation.to.top;\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t, u) => `transform: translate(${u * dx}px, ${u * dy}px)`\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.id)}\n\t<svelte:element this={tag} animate:flip>{thing.name}</svelte:element>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-animation-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {() => DOMRect} */\nlet originalDivGetBoundingClientRect;\n/** @type {() => DOMRect} */\nlet originalSpanGetBoundingClientRect;\n/** @type {() => DOMRect} */\nlet originalParagraphGetBoundingClientRect;\n\nexport default test({\n\tmode: ['client', 'hydrate'], // no animations in SSR\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t],\n\t\t\ttag: 'div'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t\t<div>b</div>\n\t\t<div>c</div>\n\t\t<div>d</div>\n\t\t<div>e</div>\n\t`,\n\n\tbefore_test() {\n\t\toriginalDivGetBoundingClientRect = window.HTMLDivElement.prototype.getBoundingClientRect;\n\t\toriginalSpanGetBoundingClientRect = window.HTMLSpanElement.prototype.getBoundingClientRect;\n\t\toriginalParagraphGetBoundingClientRect =\n\t\t\twindow.HTMLParagraphElement.prototype.getBoundingClientRect;\n\n\t\twindow.HTMLDivElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect;\n\t\twindow.HTMLSpanElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect;\n\t\twindow.HTMLParagraphElement.prototype.getBoundingClientRect = fakeGetBoundingClientRect;\n\n\t\t/**\n\t\t * @this {HTMLElement}\n\t\t */\n\t\tfunction fakeGetBoundingClientRect() {\n\t\t\tconst index = [...(this.parentNode?.children ?? [])].indexOf(this);\n\t\t\tconst top = index * 30;\n\n\t\t\treturn /** @type {DOMRect} */ ({\n\t\t\t\tleft: 0,\n\t\t\t\tright: 100,\n\t\t\t\ttop,\n\t\t\t\tbottom: top + 20\n\t\t\t});\n\t\t}\n\t},\n\tafter_test() {\n\t\twindow.HTMLDivElement.prototype.getBoundingClientRect = originalDivGetBoundingClientRect;\n\t\twindow.HTMLSpanElement.prototype.getBoundingClientRect = originalSpanGetBoundingClientRect;\n\t\twindow.HTMLParagraphElement.prototype.getBoundingClientRect =\n\t\t\toriginalParagraphGetBoundingClientRect;\n\t},\n\n\tasync test({ assert, component, raf }) {\n\t\t// switch tag and things at the same time\n\t\tflushSync(() => {\n\t\t\tcomponent.update('p', [\n\t\t\t\t{ id: 5, name: 'e' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 1, name: 'a' }\n\t\t\t]);\n\t\t});\n\n\t\tconst ps = /** @type {NodeListOf<HTMLParagraphElement & { dy: number }>} */ (\n\t\t\tdocument.querySelectorAll('p')\n\t\t);\n\t\traf.tick(0);\n\t\tassert.equal(ps[0].dy, 120);\n\t\tassert.equal(ps[4].dy, -120);\n\n\t\traf.tick(50);\n\t\tassert.equal(ps[0].dy, 60);\n\t\tassert.equal(ps[4].dy, -60);\n\n\t\traf.tick(100);\n\t\tassert.equal(ps[0].dy, 0);\n\t\tassert.equal(ps[4].dy, 0);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.update('span', [\n\t\t\t\t{ id: 1, name: 'a' },\n\t\t\t\t{ id: 2, name: 'b' },\n\t\t\t\t{ id: 3, name: 'c' },\n\t\t\t\t{ id: 4, name: 'd' },\n\t\t\t\t{ id: 5, name: 'e' }\n\t\t\t]);\n\t\t});\n\n\t\tconst spans = /** @type {NodeListOf<HTMLSpanElement & { dy: number }>} */ (\n\t\t\tdocument.querySelectorAll('span')\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.equal(spans[0].dy, 120);\n\t\tassert.equal(spans[4].dy, -120);\n\n\t\traf.tick(150);\n\t\tassert.equal(spans[0].dy, 60);\n\t\tassert.equal(spans[4].dy, -60);\n\n\t\traf.tick(200);\n\t\tassert.equal(spans[0].dy, 0);\n\t\tassert.equal(spans[4].dy, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-animation-2/main.svelte",
    "content": "<script>\n\texport let things;\n\texport let tag;\n\n\tfunction flip(node, animation, params) {\n\t\tconst dx = animation.from.left - animation.to.left;\n\t\tconst dy = animation.from.top - animation.to.top;\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.dx = u * dx;\n\t\t\t\tnode.dy = u * dy;\n\t\t\t}\n\t\t};\n\t}\n\n\texport function update(new_tag, new_things) {\n\t\tthings = new_things;\n\t\ttag = new_tag;\n\t}\n</script>\n\n{#each things as thing (thing.id)}\n\t<svelte:element this={tag} animate:flip>{thing.name}</svelte:element>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { tag: 'div' };\n\t},\n\thtml: '<div style=\"color: red;\">Foo</div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.tag = 'h1';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1 style=\"color: red;\">Foo</h1>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-attribute/main.svelte",
    "content": "<script>\n  export let tag = 'div';\n</script>\n\n<svelte:element this={tag} style=\"color: red;\">Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-attribute-boolean/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { disabled: false };\n\t},\n\thtml: '<button>Click me</button>',\n\n\ttest({ assert, component, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tassert.equal(button.disabled, false);\n\n\t\tcomponent.disabled = true;\n\t\tassert.htmlEqual(target.innerHTML, '<button disabled>Click me</button>');\n\t\tassert.equal(button.disabled, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-attribute-boolean/main.svelte",
    "content": "<script>\n\texport let disabled = false;\n</script>\n\n<svelte:element {disabled} this={\"button\"}>Click me</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-attribute-spread/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tprops: {\n\t\t\t\tdisabled: true,\n\t\t\t\ttype: 'button',\n\t\t\t\t'data-named': 'foo'\n\t\t\t}\n\t\t};\n\t},\n\thtml: '<button disabled type=\"button\" data-named=\"foo\">Click me</button>',\n\n\ttest({ assert, component, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tassert.equal(button.disabled, true);\n\t\tassert.equal(button.type, 'button');\n\t\tassert.equal(button.dataset.named, 'foo');\n\n\t\tcomponent.props = { type: 'submit' };\n\t\tassert.htmlEqual(target.innerHTML, '<button type=\"submit\">Click me</button>');\n\t\tassert.equal(button.disabled, false);\n\t\tassert.equal(button.type, 'submit');\n\t\tassert.equal(button.dataset.named, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-attribute-spread/main.svelte",
    "content": "<script>\n\texport let props = {\n\t\tdisabled: false,\n\t\ttype: 'button',\n\t\t'data-named': 'foo'\n\t};\n</script>\n\n<svelte:element this={\"button\"} {...props}>Click me</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-binding-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tassert.equal(div, component.foo);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-binding-this/main.svelte",
    "content": "<script>\n  const tag = \"div\";\n  export let foo;\n</script>\n\n<svelte:element this={tag} bind:this={foo}></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-change-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { tag: 'div' };\n\t},\n\thtml: '<div>Foo</div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.tag = 'h1';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Foo</h1>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-change-tag/main.svelte",
    "content": "<script>\n  export let tag = 'div';\n</script>\n\n<svelte:element this={tag}>Foo</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-class-directive/Link.svelte",
    "content": "<script>\n\texport let item;\n</script>\n\n<svelte:element this={\"div\"} class:active={true}>\n\t{item.text}\n</svelte:element>\n\n<style>\n\t.active {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-class-directive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div class=\"svelte-1vsuzn0 active\">foo</div>\n\t\t<div class=\"svelte-1vsuzn0 active\">foo0</div>\n\t\t<div class=\"svelte-1vsuzn0 active\">foo0</div>\n\t\t<div class=\"svelte-1vsuzn0 active\">foo0</div>\n\t\t<div class=\"svelte-1vsuzn0 active\">foo1</div>\n\t\t<div class=\"svelte-1vsuzn0 active\">foo2</div>\n\t\t<div class=\"svelte-1vsuzn0 active\">foo3</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-class-directive/main.svelte",
    "content": "<script>\n\timport Link from \"./Link.svelte\";\n\tlet foo = [\n\t\t{ text: \"foo0\" },\n\t\t{ text: \"foo1\" },\n\t\t{ text: \"foo2\" },\n\t\t{ text: \"foo3\" },\n\t];\n</script>\n\n<Link item={{ text: \"foo\" }} />\n<Link item={foo[0]} />\n<Link bind:item={foo[0]} />\n{#each foo as item}\n\t<Link bind:item />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-empty-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-empty-tag/main.svelte",
    "content": "<script>\n  let tag = '';\n</script>\n\n<svelte:element this={tag}>Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-event-handler1/_config.js",
    "content": "import { test } from '../../test';\n\nlet clicked = false;\nfunction handler() {\n\tclicked = true;\n}\n\nexport default test({\n\tget props() {\n\t\treturn { handler };\n\t},\n\thtml: '<button>Foo</button>',\n\n\tbefore_test() {\n\t\tclicked = false;\n\t},\n\n\ttest({ assert, target }) {\n\t\tassert.equal(clicked, false);\n\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(click);\n\n\t\tassert.equal(clicked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-event-handler1/main.svelte",
    "content": "<script>\n  const tag = \"button\";\n  export let handler;\n</script>\n\n<svelte:element this={tag} on:click={handler}>Foo</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-event-handler2/_config.js",
    "content": "import { test } from '../../test';\n\nlet clicked = false;\nfunction handler() {\n\tclicked = true;\n}\n\nexport default test({\n\tget props() {\n\t\treturn { tag: 'div', handler };\n\t},\n\thtml: '<div>Foo</div>',\n\n\tbefore_test() {\n\t\tclicked = false;\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tassert.equal(clicked, false);\n\n\t\tcomponent.tag = 'button';\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(click);\n\n\t\tassert.equal(clicked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-event-handler2/main.svelte",
    "content": "<script>\n  export let tag;\n  export let handler;\n</script>\n\n<svelte:element this={tag} on:click={handler}>Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-event-handler3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<button>Click</button>',\n\n\ttest({ assert, logs, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tbutton?.click();\n\t\tbutton?.click();\n\n\t\tassert.deepEqual(logs, ['create', 'trigger', 'trigger', 'trigger']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-event-handler3/main.svelte",
    "content": "<script>\n\tlet makeHandler = null;\n\tmakeHandler = () => {\n\t\tconsole.log('create');\n\t\treturn () => console.log('trigger');\n\t};\n</script>\n\n<button on:click={makeHandler()}>Click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>Foo</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-expression/main.svelte",
    "content": "<svelte:element this={\"div\"}>Foo</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-invalid-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'server'], // SSR errors on render already\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tget props() {\n\t\treturn { tag: 123 };\n\t},\n\n\terror:\n\t\t'svelte_element_invalid_this_value\\n' +\n\t\t'The `this` prop on `<svelte:element>` must be a string, if defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-invalid-this/main.svelte",
    "content": "<script>\n  export let tag;\n</script>\n\n<svelte:element this={tag} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-invalid-this-content/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'server'],\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tget props() {\n\t\treturn { tag: true };\n\t},\n\n\terror:\n\t\t'svelte_element_invalid_this_value\\n' +\n\t\t'The `this` prop on `<svelte:element>` must be a string, if defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-invalid-this-content/main.svelte",
    "content": "<script>\n\texport let tag;\n</script>\n\n<svelte:element this={tag}>content</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-null-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-null-tag/main.svelte",
    "content": "<script>\n  let tag = null;\n</script>\n\n<svelte:element this={tag}>Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-pass-props/_config.js",
    "content": "import { test } from '../../test';\n\nlet clicked = false;\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttag: 'div',\n\t\t\tonClick: () => (clicked = true)\n\t\t};\n\t},\n\thtml: '<div style=\"display: inline;\">Foo</div>',\n\n\tasync test({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tawait div?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tassert.equal(clicked, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-pass-props/main.svelte",
    "content": "<script>\n  const tag = \"div\";\n  export let onClick;\n</script>\n\n<svelte:element this={tag} style=\"display: inline;\" on:click={onClick}>Foo</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-slot/Foo.svelte",
    "content": "<h1>Foo</h1>\n<div id=\"default\">\n\t<slot></slot>\n</div>\n<div id=\"other\">\n\t<slot name='other'></slot>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<h1>Foo</h1>\n\t\t<div id=\"default\">\n\t\t  <h1>This is default slot</h1>\n\t\t</div>\n\t\t<div id=\"other\">\n\t\t  <h1 slot='other'>This is other slot</h1>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.tag = 'h2';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>Foo</h1>\n\t\t\t<div id=\"default\">\n\t\t\t\t<h2>This is default slot</h2>\n\t\t\t</div>\n\t\t\t<div id=\"other\">\n\t\t\t\t<h2 slot='other'>This is other slot</h2>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-slot/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\texport let tag = \"h1\";\n</script>\n\n<Foo>\n\t<svelte:element this={tag}>This is default slot</svelte:element>\n\t<svelte:element this={tag} slot='other'>This is other slot</svelte:element>\n</Foo>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-spread-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div id=\"element\" class=\"element-handler\">this is a div</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-spread-attributes/main.svelte",
    "content": "<script>\n\tlet props = {\n\t\tid: \"element\",\n\t\tclass: \"element-handler\"\n\t}\n</script>\n\n<svelte:element this={\"div\"} {...props}>this is a div</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-store/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst foo = writable('div');\n</script>\n\n<svelte:element this={$foo}></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>Foo</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-string/main.svelte",
    "content": "<svelte:element this={\"div\"}>Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<svg xmlns=\"http://www.w3.org/2000/svg\"><path xmlns=\"http://www.w3.org/2000/svg\"></path></svg>',\n\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('path');\n\t\tassert.equal(svg?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg/main.svelte",
    "content": "<svelte:element this={\"svg\"} xmlns=\"http://www.w3.org/2000/svg\">\n    <svelte:element this={\"path\"} xmlns=\"http://www.w3.org/2000/svg\"></svelte:element>\n</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-implicit-namespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<svg xmlns=\"http://www.w3.org/2000/svg\"><path></path></svg>',\n\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('path');\n\t\tassert.equal(svg?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-implicit-namespace/main.svelte",
    "content": "<script>\n\t// ensure these are treated as dynamic, despite whatever\n\t// optimisations we might apply\n\texport let svg = 'svg';\n\texport let path = 'path';\n</script>\n\n<svelte:element this={svg} xmlns=\"http://www.w3.org/2000/svg\">\n\t<svelte:element this={path}></svelte:element>\n</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-inherit-namespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [svg1, svg2] = target.querySelectorAll('svg');\n\t\tconst [path1, path2] = target.querySelectorAll('path');\n\t\tconst [fO1, fO2] = target.querySelectorAll('foreignObject');\n\t\tconst [span1, span2] = target.querySelectorAll('span');\n\n\t\tassert.equal(svg1.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(path1.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tassert.equal(svg2.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(path2.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(fO1.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(span1.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t\tassert.equal(fO2.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(span2.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-inherit-namespace/main.svelte",
    "content": "<script>\n\tconst iconNode = [[\"path\", { \"d\": \"M21 12a9 9 0 1 1-6.219-8.56\" }]];\n</script>\n\n<svg>\n\t{#each iconNode as [tag, attrs]}\n\t\t<svelte:element this={tag} {...attrs}/>\n\t{/each}\n</svg>\n\n<svg>\n\t<svelte:element this={\"path\"}>\n\t\t<foreignObject>\n\t\t\t<svelte:element this={\"span\"}>ok</svelte:element>\n\t\t</foreignObject>\n\t\t<foreignObject>\n\t\t\t{#if true}\n\t\t\t\t<svelte:element this={\"span\"}>ok</svelte:element>\n\t\t\t{/if}\n\t\t</foreignObject>\n\t</svelte:element>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-inherit-namespace-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst path = target.querySelector('path');\n\n\t\tassert.equal(path?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-inherit-namespace-2/main.svelte",
    "content": "<svelte:options namespace=\"svg\" />\n\n<script>\n\timport Svg from \"./svg.svelte\";\n\n\tlet tag = \"path\";\n</script>\n\n<Svg>\n\t<svelte:element this=\"{tag}\" d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>\n</Svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-inherit-namespace-2/svg.svelte",
    "content": "<svg><slot></slot></svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-options-namespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<svg><rect fill=\"black\" width=\"10\" height=\"90\"></rect></svg>',\n\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('rect');\n\t\tassert.equal(svg?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-options-namespace/main.svelte",
    "content": "<script>\n\timport Rect from './rect.svelte';\n</script>\n\n<svg>\n\t<Rect />\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-svg-options-namespace/rect.svelte",
    "content": "<svelte:options namespace=\"svg\" />\n\n<script>\n\tconst tag = 'rect';\n</script>\n\n<svelte:element this={tag} fill=\"black\" width=\"10\" height=\"90\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-template-literals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { size: 1 };\n\t},\n\thtml: '<h1>This is h1 tag</h1>',\n\n\ttest({ assert, component, target }) {\n\t\tconst h1 = target.querySelector('h1');\n\t\tcomponent.size = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h2>This is h2 tag</h2>\n\t\t`\n\t\t);\n\n\t\tconst h2 = target.querySelector('h2');\n\t\tassert.notEqual(h1, h2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-template-literals/main.svelte",
    "content": "<script>\n  export let size;\n</script>\n\n<svelte:element this=\"{`h${size}`}\">This is h{size} tag</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-textarea/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<textarea></textarea>',\n\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<textarea></textarea>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-textarea/main.svelte",
    "content": "<svelte:element this={\"textarea\"}></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-transition/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst h1 = target.querySelector('h1');\n\t\tok(h1);\n\t\traf.tick(0);\n\t\tassert.equal(h1.style.opacity, '0');\n\n\t\traf.tick(150);\n\t\tcomponent.tag = 'h2';\n\t\tconst h2 = target.querySelector('h2');\n\t\tok(h2);\n\t\tassert.equal(h1.style.opacity, '');\n\t\tassert.equal(h2.style.opacity, '');\n\n\t\traf.tick(200);\n\t\tcomponent.visible = false;\n\t\traf.tick(250);\n\t\tassert.equal(h2.style.opacity, '0.5');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-transition/main.svelte",
    "content": "<script>\n\texport let tag = \"h1\";\n\texport let visible;\n\n\tfunction foo() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: t => {\n\t\t\t\treturn `opacity: ${t}`;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<svelte:element this={tag} transition:foo|global></svelte:element>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-undefined-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\ttest({ component, target, assert }) {\n\t\tcomponent.tag = 'h1';\n\t\tassert.htmlEqual(target.innerHTML, '<h1>Foo</h1>');\n\n\t\tcomponent.tag = null;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.tag = 'div';\n\t\tassert.htmlEqual(target.innerHTML, '<div>Foo</div>');\n\n\t\tcomponent.tag = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.tag = 'span';\n\t\tassert.htmlEqual(target.innerHTML, '<span>Foo</span>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-undefined-tag/main.svelte",
    "content": "<script>\n  export let tag;\n</script>\n\n<svelte:element this={tag}>Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-variable/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { tag: 'div', text: 'Foo' };\n\t},\n\thtml: '<div>Foo</div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tcomponent.tag = 'nav';\n\t\tcomponent.text = 'Bar';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<nav>Bar</nav>\n\t\t`\n\t\t);\n\n\t\tconst nav = target.querySelector('nav');\n\t\tassert.notEqual(div, nav);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-variable/main.svelte",
    "content": "<script>\n  export let tag = \"div\";\n  export let text = \"Foo\";\n</script>\n\n<svelte:element this={tag}>{text}</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { propTag: 'hr' };\n\t},\n\thtml: '<h1></h1><foo></foo><img><hr><input><br>',\n\n\ttest({ assert, component, target }) {\n\t\tassert.htmlEqual(target.innerHTML, '<h1></h1><foo></foo><img><hr><input><br>');\n\t\tcomponent.propTag = 'link';\n\t\tassert.htmlEqual(target.innerHTML, '<h1></h1><foo></foo><img><link><input><br>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-tag/main.svelte",
    "content": "<script>\n\texport let propTag;\n\tconst static_tag = 'input';\n\tconst func_tag = () => 'br';\n</script>\n\n<h1></h1>\n<svelte:element this=\"{'foo'}\"></svelte:element>\n<svelte:element this={\"img\"}></svelte:element>\n<svelte:element this=\"{propTag}\"></svelte:element>\n<svelte:element this=\"{static_tag}\"></svelte:element>\n<svelte:element this=\"{func_tag()}\"></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tget props() {\n\t\treturn { tag: 'br' };\n\t},\n\twarnings: ['`<svelte:element this=\"br\">` is a void element — it cannot have content']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-1/main.svelte",
    "content": "<script>\n\texport let tag;\n</script>\n\n<svelte:element this='{tag}'>foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tget props() {\n\t\treturn { tag: 'br' };\n\t},\n\twarnings: ['`<svelte:element this=\"br\">` is a void element — it cannot have content']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-2/main.svelte",
    "content": "<script>\n\texport let tag;\n</script>\n\n<svelte:element this='{tag}'><div>bar</div></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-3/Nested.svelte",
    "content": "<div>This is nested</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tget props() {\n\t\treturn { tag: 'br' };\n\t},\n\twarnings: ['`<svelte:element this=\"br\">` is a void element — it cannot have content']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-3/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\texport let tag;\n</script>\n\n<svelte:element this='{tag}'><Nested/></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-4/Nested.svelte",
    "content": "<div>This is nested</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tget props() {\n\t\treturn { tag: 'br' };\n\t},\n\thtml: '<br>',\n\twarnings: ['`<svelte:element this=\"br\">` is a void element — it cannot have content']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-4/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\texport let tag;\n</script>\n\n<svelte:element this='{tag}'><Nested/></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-5/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\twarnings: ['`<svelte:element this=\"input\">` is a void element — it cannot have content']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/dynamic-element-void-with-content-5/main.svelte",
    "content": "<script>\n\tconst tags = [{ t: 'div', content: 'hello world' }, { t: 'input' }];\n</script>\n\n{#each tags as tag}\n\t{tag.t} <br />\n\t<svelte:element this={tag.t}>\n\t\t{#if tag.t !== 'input'}{tag.content}{/if}\n\t</svelte:element>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['alpaca', 'baboon', 'capybara']\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>alpaca</p>\n\t\t<p>baboon</p>\n\t\t<p>capybara</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = ['alpaca', 'baboon', 'caribou', 'dogfish'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>alpaca</p>\n\t\t\t<p>baboon</p>\n\t\t\t<p>caribou</p>\n\t\t\t<p>dogfish</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.animals = [];\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block/main.svelte",
    "content": "<script>\n\texport let animals;\n</script>\n\n{#each animals as animal}\n\t<p>{animal}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-after-let/Child.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<slot value={value}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-after-let/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>a a</div>\n\t\t<div>b</div>\n\t\t<div>a a</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-after-let/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\tconst value = ['a'];\n</script>\n\n<div>\n\t{value[0]}\n\t{#each value as n}{n}{/each}\n</div>\n<div>\n\t<Child value={['b']} let:value>{value[0]}</Child>\n</div>\n<div>\n\t{value[0]}\n\t{#each value as n}{n}{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-array-literal/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>racoon</button>\n\t\t<button>eagle</button>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>racoon</button>\n\t\t\t<button>eagle</button>\n\t\t`\n\t\t);\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.Event('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tassert.equal(component.clicked, 'racoon');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-array-literal/main.svelte",
    "content": "<script>\n\texport let clicked = null;\n</script>\n\n{#each ['racoon', 'eagle'] as animal}\n\t<button on:click=\"{() => clicked = animal}\">{animal}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-component-no-props/Child.svelte",
    "content": "<p>hello</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-component-no-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>hello</p>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tawait component.remove();\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tawait component.add();\n\t\tassert.htmlEqual(target.innerHTML, '<p>hello</p>');\n\n\t\tawait component.remove();\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-component-no-props/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet items = [1];\n\n\texport function add() {\n\t\titems = [1];\n\t}\n\n\texport function remove() {\n\t\titems = [];\n\t}\n</script>\n\n{#each items as item}\n\t<Child/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-containing-component-in-if/Nested.svelte",
    "content": "<script>\n\texport let show;\n\texport let fields;\n</script>\n\n{#if show}\n\t{#each fields as field}\n\t\t<span>{field}</span>\n\t{/each}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-containing-component-in-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { show: false, fields: [1, 2] };\n\t},\n\n\thtml: '<div></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.show = true;\n\t\tcomponent.fields = [1, 2, 3];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.fields = [1, 2, 3, 4];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-containing-component-in-if/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let show;\n\texport let fields;\n</script>\n\n<div>\n\t<Nested {show} {fields}/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-containing-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst items = /** @type {Array<{ description: string; completed: boolean }>} */ (\n\t\t\tcomponent.items\n\t\t);\n\t\titems.forEach((item) => (item.completed = false));\n\n\t\tcomponent.currentFilter = 'all';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<ul><li>one</li><li>two</li><li>three</li></ul>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-containing-if/main.svelte",
    "content": "<script>\n\texport let items = [\n\t\t{ description: 'one', completed: false },\n\t\t{ description: 'two', completed: false },\n\t\t{ description: 'three', completed: false }\n\t];\n\texport let currentFilter = 'completed';\n\n\tfunction filter(item, currentFilter) {\n\t\tif ( currentFilter === 'all' ) return true;\n\t\tif ( currentFilter === 'completed' ) return item.completed;\n\t\tif ( currentFilter === 'active' ) return !item.completed;\n\t}\n</script>\n\n<ul>\n\t{#each items as item}\n\t\t{#if filter(item, currentFilter)}\n\t\t\t<li>{item.description}</li>\n\t\t{/if}\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-deconflict-name-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: { bar: ['x', 'y', 'z'] } };\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<input>\n\t\t<input>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=x>\n\t\t<input value=y>\n\t\t<input value=z>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[1].value = 'w';\n\t\tinputs[1].dispatchEvent(new window.MouseEvent('input'));\n\n\t\tassert.deepEqual(component.foo, {\n\t\t\tbar: ['x', 'w', 'z']\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-deconflict-name-context/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{#each foo.bar as bar}\n\t<input bind:value={bar}>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimalPawsEntries: [\n\t\t\t\t['raccoon', 'hands'],\n\t\t\t\t['eagle', 'wings']\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>raccoon: hands</p>\n\t\t<p>eagle: wings</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animalPawsEntries = [['foo', 'bar']];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>foo: bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array/main.svelte",
    "content": "<script>\n\texport let animalPawsEntries;\n</script>\n\n{#each animalPawsEntries as [animal, pawType]}\n\t<p>{animal}: {pawType}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-as-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tarray: [\n\t\t\t\t[1, 2, 3, 4, 5],\n\t\t\t\t[6, 7, 8],\n\t\t\t\t[9, 10, 11, 12]\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>First: 1, Third: 3, Length: 5</p>\n\t\t<p>First: 6, Third: 8, Length: 3</p>\n\t\t<p>First: 9, Third: 11, Length: 4</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.array = [[12, 13]];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>First: 12, Third: , Length: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-as-object/main.svelte",
    "content": "<script>\n\texport let array;\n</script>\n\n{#each array as { 0: first, '2': third, \"length\": length }}\n\t<p>First: {first}, Third: {third}, Length: {length}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-computed-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tarray: [\n\t\t\t\t[1, 2, 3, 4, 5],\n\t\t\t\t[6, 7, 8],\n\t\t\t\t[9, 10, 11, 12],\n\t\t\t\t[13, 14, 15, 16, 17, 18, 19, 20, 21, 22]\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>First: 1, Half: 3, Last: 5, Length: 5</p>\n\t\t<p>First: 6, Half: 7, Last: 8, Length: 3</p>\n\t\t<p>First: 9, Half: 11, Last: 12, Length: 4</p>\n\t\t<p>First: 13, Half: 18, Last: 22, Length: 10</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.array = [[23, 24, 25, 26, 27, 28, 29]];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>First: 23, Half: 26, Last: 29, Length: 7</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-computed-props/main.svelte",
    "content": "<script>\n\texport let array;\n</script>\n\n{#each array as { 0: first, length, [length - 1]: last, [Math.floor(length / 2)]: half }}\n\t<p>First: {first}, Half: {half}, Last: {last}, Length: {length}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-nested-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tarray: [\n\t\t\t\t[1, 2, 3, 4, 5],\n\t\t\t\t[6, 7, 8],\n\t\t\t\t[9, 10, 11, 12],\n\t\t\t\t[13, 14, 15, 16, 17, 18, 19, 20, 21, 22]\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>First: 1, Second: 2, Third: 3, Elements remaining: 2</p>\n\t\t<p>First: 6, Second: 7, Third: 8, Elements remaining: 0</p>\n\t\t<p>First: 9, Second: 10, Third: 11, Elements remaining: 1</p>\n\t\t<p>First: 13, Second: 14, Third: 15, Elements remaining: 7</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.array = [[23, 24, 25, 26, 27, 28, 29]];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>First: 23, Second: 24, Third: 25, Elements remaining: 4</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-nested-rest/main.svelte",
    "content": "<script>\n\texport let array;\n</script>\n\n{#each array as [first, second, ...[third, ...{ length }]]}\n\t<p>\n\t\tFirst: {first}, Second: {second}, Third: {third}, Elements remaining: {length}\n\t</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-sparse/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimalPawsEntries: [\n\t\t\t\t['raccoon', 'hands'],\n\t\t\t\t['eagle', 'wings']\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>hands</p>\n\t\t<p>wings</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animalPawsEntries = [['foo', 'bar']];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-array-sparse/main.svelte",
    "content": "<script>\n\texport let animalPawsEntries;\n</script>\n\n{#each animalPawsEntries as [, pawType]}\n\t<p>{pawType}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-default/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {Array<Record<string, any>>} */\n\t\t\tanimalEntries: [\n\t\t\t\t{\n\t\t\t\t\tanimal: 'raccoon',\n\t\t\t\t\tclass: 'mammal',\n\t\t\t\t\tspecies: 'P. lotor',\n\t\t\t\t\tkilogram: 25,\n\t\t\t\t\tbmi: 0.04\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tanimal: 'eagle',\n\t\t\t\t\tclass: 'bird',\n\t\t\t\t\tkilogram: 5.4\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tanimal: 'tiger',\n\t\t\t\t\tclass: 'mammal',\n\t\t\t\t\tkilogram: 10,\n\t\t\t\t\tpound: 30\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tanimal: 'lion',\n\t\t\t\t\tclass: 'mammal',\n\t\t\t\t\tkilogram: 10,\n\t\t\t\t\theight: 50\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tanimal: 'leopard',\n\t\t\t\t\tclass: 'mammal',\n\t\t\t\t\tkilogram: 30,\n\t\t\t\t\theight: 50,\n\t\t\t\t\tbmi: 10\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p class=\"mammal\">raccoon - P. lotor - 25kg (55 lb) - 30cm - 0.04</p>\n\t\t<p class=\"bird\">eagle - unknown - 5.4kg (12 lb) - 30cm - 0.006</p>\n\t\t<p class=\"mammal\">tiger - unknown - 10kg (30 lb) - 30cm - 0.011111111111111112</p>\n\t\t<p class=\"mammal\">lion - unknown - 10kg (22 lb) - 50cm - 0.004</p>\n\t\t<p class=\"mammal\">leopard - unknown - 30kg (66 lb) - 50cm - 10</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animalEntries = [{ animal: 'cow', class: 'mammal', species: '‎B. taurus' }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"mammal\">cow - ‎B. taurus - 50kg (110 lb) - 30cm - 0.05555555555555555</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-default/main.svelte",
    "content": "<script>\n\texport let animalEntries;\n\texport const defaultHeight = 30;\n</script>\n\n{#each animalEntries as { animal, species = 'unknown', kilogram: weight = 50, pound = (weight * 2.2).toFixed(0), height = defaultHeight, bmi = weight / (height * height), ...props } }\n\t<p {...props}>{animal} - {species} - {weight}kg ({pound} lb) - {height}cm - {bmi}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-default-before-initialised/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\terror: \"Cannot access 'c' before initialization\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-default-before-initialised/main.svelte",
    "content": "<script>\n\tlet array = [{a: 1, c: 2}];\n</script>\n\n{#each array as { a, b = c, c }}\n\t{a}{b}{c}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-default-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input />\n\t\t<input />\n\t`,\n\tssrHtml: `\n\t\t<input value=\"\" />\n\t\t<input value=\"hello\" />\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\t\tassert.equal(input1.value, '');\n\t\tassert.equal(input2.value, 'hello');\n\n\t\tconst inputEvent = new window.InputEvent('input');\n\n\t\tinput2.value = 'world';\n\t\tinput2.dispatchEvent(inputEvent);\n\t\tassert.equal(input2.value, 'world');\n\t\tassert.equal(component.array[1].value, 'world');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-default-binding/main.svelte",
    "content": "<script>\n\texport let array = [{ value: '' }, {}];\n</script>\n\n{#each array as { value = \"hello\" }}\n\t<input bind:value />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimalPawsEntries: [\n\t\t\t\t{ animal: 'raccoon', pawType: 'hands' },\n\t\t\t\t{ animal: 'eagle', pawType: 'wings' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>raccoon: hands</p>\n\t\t<p>eagle: wings</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animalPawsEntries = [{ animal: 'cow', pawType: 'hooves' }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>cow: hooves</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object/main.svelte",
    "content": "<script>\n\texport let animalPawsEntries;\n</script>\n\n{#each animalPawsEntries as { animal, pawType } }\n\t<p>{animal}: {pawType}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-binding/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tpeople: [{ name: { first: 'Doctor', last: 'Who' } }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<input>\n\t\t<input>\n\t\t<p>Doctor Who</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input value=Doctor>\n\t\t<input value=Who>\n\t\t<p>Doctor Who</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\n\t\tinputs[1].value = 'Oz';\n\t\tinputs[1].dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tconst { people } = component;\n\n\t\tassert.deepEqual(people, [{ name: { first: 'Doctor', last: 'Oz' } }]);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<input>\n\t\t\t<p>Doctor Oz</p>\n\t\t`\n\t\t);\n\n\t\tpeople[0].name.first = 'Frank';\n\t\tcomponent.people = people;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<input>\n\t\t\t<p>Frank Oz</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-binding/main.svelte",
    "content": "<script>\n\texport let people;\n</script>\n\n{#each people as { name: { first: f, last: l } } }\n\t<input bind:value={f}>\n\t<input bind:value={l}>\n\t<p>{f} {l}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-computed-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tfirstString: 'cats',\n\t\t\tsecondString: 'dogs',\n\t\t\tobjectsArray: [\n\t\t\t\t{\n\t\t\t\t\tdogs: 'woof',\n\t\t\t\t\tcats: 'meow',\n\t\t\t\t\tstac: 'stack',\n\t\t\t\t\tDOGS: 'WOOF'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdogs: 'A German sheppard',\n\t\t\t\t\tcats: 'A tailless cat',\n\t\t\t\t\tstac: 'A jenga tower',\n\t\t\t\t\tDOGS: 'A GERMAN SHEPPARD'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdogs: 'dogs',\n\t\t\t\t\tcats: 'cats',\n\t\t\t\t\tstac: 'stac',\n\t\t\t\t\tDOGS: 'DOGS'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>cats: meow</p>\n\t\t<p>dogs: woof</p>\n\t\t<p>stac: stack</p>\n\t\t<p>DOGS: WOOF</p>\n\t\t<p>cats: A tailless cat</p>\n\t\t<p>dogs: A German sheppard</p>\n\t\t<p>stac: A jenga tower</p>\n\t\t<p>DOGS: A GERMAN SHEPPARD</p>\n\t\t<p>cats: cats</p>\n\t\t<p>dogs: dogs</p>\n\t\t<p>stac: stac</p>\n\t\t<p>DOGS: DOGS</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-computed-props/main.svelte",
    "content": "<script>\n\texport let objectsArray;\n\texport let firstString;\n\texport let secondString;\n</script>\n\n{#each objectsArray as { [firstString]: firstProp, [secondString]: secondProp, [firstString.split('').reverse().join('')]: reverseFirst, [secondString.toUpperCase()]: upperSecond } }\n\t<p>{firstString}: {firstProp}</p>\n  <p>{secondString}: {secondProp}</p>\n\t<p>{firstString.split('').reverse().join('')}: {reverseFirst}</p>\n\t<p>{secondString.toUpperCase()}: {upperSecond}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-literal-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tobjectsArray: [\n\t\t\t\t{\n\t\t\t\t\t'foo-bar': 'FooBar',\n\t\t\t\t\t0: 'zero',\n\t\t\t\t\tprop: 'prop'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'foo-bar': 'foobar',\n\t\t\t\t\t0: 'null',\n\t\t\t\t\tprop: 'a prop'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t'foo-bar': 'FOO BAR',\n\t\t\t\t\t0: 'nada',\n\t\t\t\t\tprop: 'the prop'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>FooBar: prop zero</p>\n\t\t<p>foobar: a prop null</p>\n\t\t<p>FOO BAR: the prop nada</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.objectsArray = [{ 'foo-bar': 'Fool Ball', 0: 'nil', prop: 'one prop' }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Fool Ball: one prop nil</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-literal-props/main.svelte",
    "content": "<script>\n\texport let objectsArray;\n</script>\n\n{#each objectsArray as { 0: prop0, \"foo-bar\": propFooBar, prop: varProp } }\n\t<p>{propFooBar}: {varProp} {prop0}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-literal-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {Array<Record<string, any>>} */\n\t\t\tobjectsArray: [\n\t\t\t\t{\n\t\t\t\t\tquote: 'q1',\n\t\t\t\t\t'wrong-quote': 'wq1',\n\t\t\t\t\t16: '16',\n\t\t\t\t\t17: '17',\n\t\t\t\t\tclass: 'class'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tquote: 'q2',\n\t\t\t\t\t'wrong-quote': 'wq2',\n\t\t\t\t\t16: 'sixteen',\n\t\t\t\t\t17: 'seventeen',\n\t\t\t\t\tclass: 'glass'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tquote: 'q3',\n\t\t\t\t\t'wrong-quote': 'wq3',\n\t\t\t\t\t16: 'seize',\n\t\t\t\t\t17: 'dix-sept',\n\t\t\t\t\tclass: 'mass'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n    <p class=\"class\">Quote: q1, Wrong Quote: wq1, 16: 16, 17: 17</p>\n    <p class=\"glass\">Quote: q2, Wrong Quote: wq2, 16: sixteen, 17: seventeen</p>\n    <p class=\"mass\">Quote: q3, Wrong Quote: wq3, 16: seize, 17: dix-sept</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.objectsArray = [\n\t\t\t{ quote: 'new-quote', 'wrong-quote': 'wq4', 16: 'ten+six', 17: 'ten+seven', role: 'role' }\n\t\t];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p role=\"role\">Quote: new-quote, Wrong Quote: wq4, 16: ten+six, 17: ten+seven</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-literal-rest/main.svelte",
    "content": "<script>\n\texport let objectsArray;\n</script>\n\n{#each objectsArray as { \"quote\": quotedProp, \"wrong-quote\": wrongQuote, 16: sixteen, [10 + 7]: seventeen, ...props }}\n\t<p {...props}>Quote: {quotedProp}, Wrong Quote: {wrongQuote}, 16: {sixteen}, 17: {seventeen}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-reserved-key/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>bar</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-reserved-key/main.svelte",
    "content": "<script>\n\tconst foo = [{ in: 'bar' }];\n</script>\n\n{#each foo as { in: bar }}\n\t<p>{bar}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimalEntries: [\n\t\t\t\t{ animal: 'raccoon', class: 'mammal' },\n\t\t\t\t{ animal: 'eagle', class: 'bird' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p class=\"mammal\">raccoon</p>\n\t\t<p class=\"bird\">eagle</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animalEntries = [{ animal: 'cow', class: 'mammal' }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"mammal\">cow</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-destructured-object-rest/main.svelte",
    "content": "<script>\n\texport let animalEntries;\n</script>\n\n{#each animalEntries as { animal, ...props } }\n\t<p {...props}>{animal}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-dynamic-else-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['alpaca', 'baboon', 'capybara']\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>alpaca</p>\n\t\t<p>baboon</p>\n\t\t<p>capybara</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = [];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>no animals</p>\n\t\t`\n\t\t);\n\n\t\t// trigger an 'update' of the else block, to ensure that\n\t\t// nonexistent update method is not called\n\t\tcomponent.animals = [];\n\n\t\tcomponent.animals = ['wombat'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>wombat</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.animals = ['dinosaur'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>dinosaur</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-dynamic-else-static/main.svelte",
    "content": "<script>\n\texport let animals;\n</script>\n\n{#each animals as animal}\n\t<p>{animal}</p>\n{:else}\n\t<p>no animals</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['alpaca', 'baboon', 'capybara'],\n\t\t\tfoo: 'something else'\n\t\t};\n\t},\n\n\thtml: `\n\t\tbefore\n\t\t<p>alpaca</p>\n\t\t<p>baboon</p>\n\t\t<p>capybara</p>\n\t\tafter\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = [];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>no animals, but rather something else</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = 'something other';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>no animals, but rather something other</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.animals = ['wombat'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>wombat</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else/main.svelte",
    "content": "<script>\n\texport let animals;\n\texport let foo;\n</script>\n\nbefore\n{#each animals as animal}\n\t<p>{animal}</p>\n{:else}\n\t<p>no animals, but rather {foo}</p>\n{/each}\nafter\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-in-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>nothing</p>\n\t\t<p>after</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>nothing</p>\n\t\t\t<p>after</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-in-if/main.svelte",
    "content": "<script>\n\texport let visible = true;\n\tconst empty = [];\n</script>\n\n{#if visible}\n\t{#each empty as item}\n\t\t<p>{item}</p>\n\t{:else}\n\t\t<p>nothing</p>\n\t{/each}\n\n\t<p>after</p>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-mount-or-intro/Widget.svelte",
    "content": "Foo\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-mount-or-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { items: [] };\n\t},\n\thtml: 'No items.'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-mount-or-intro/main.svelte",
    "content": "<script>\n\texport let items;\n\n\timport Widget from './Widget.svelte';\n</script>\n\n{#each items as item}\n\t<Widget {item}/>\n{:else}\n\tNo items.\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-starts-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string[]} */\n\t\t\tanimals: [],\n\t\t\tfoo: 'something else'\n\t\t};\n\t},\n\n\thtml: `\n\t\tbefore\n\t\t<p>no animals, but rather something else</p>\n\t\tafter\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = ['wombat'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>wombat</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-else-starts-empty/main.svelte",
    "content": "<script>\n\texport let animals;\n\texport let foo;\n</script>\n\nbefore\n{#each animals as animal}\n\t<p>{animal}</p>\n{:else}\n\t<p>no animals, but rather {foo}</p>\n{/each}\nafter\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-empty-outro/Thing.svelte",
    "content": "<script>\n\texport let thing;\n</script>\n\n<p>{thing}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-empty-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true, empty: [] };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<p>text</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = false;\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-empty-outro/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let empty;\n\n\timport Thing from './Thing.svelte';\n</script>\n\n{#if visible}\n\t<div>\n\t\t{#each empty as thing}\n\t\t\t<Thing {thing}/>\n\t\t{/each}\n\n\t\t<p>text</p>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-func-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>5</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-func-function/main.svelte",
    "content": "{#each [1, 2, 3, 4, 5] as func}\n\t<p>{(() => func)()}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1, 2, 3</p>\n\t\t<p>2, 4, 6</p>\n\t\t<p>3, 6, 9</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.numbers = [4, 5];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>16, 20</p>\n\t\t\t<p>20, 25</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-function/main.svelte",
    "content": "{#each numbers as i}\n\t<p>{numbers.map(j => i * j).join(', ')}</p>\n{/each}\n\n<script>\n\texport let numbers = [1, 2, 3];\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-in-if-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tdummy: false,\n\t\t\tfruits: ['Apple', 'Banana', 'Tomato']\n\t\t};\n\t},\n\n\thtml: '<div><div>Apple</div><div>Banana</div><div>Tomato</div></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.dummy = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div><div>Apple</div><div>Banana</div><div>Tomato</div></div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-in-if-block/main.svelte",
    "content": "<script>\n\texport let fruits;\n</script>\n\n<div>\n\t{#if fruits}\n\t\t{#each fruits as fruit (fruit)}\n\t\t\t<div>{fruit}</div>\n\t\t{/each}\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-index-only/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: [0, 0, 0, 0, 0] };\n\t},\n\n\thtml: `\n\t\t<p>0</p>\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.things = [0, 0, 0];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>0</p>\n\t\t\t<p>1</p>\n\t\t\t<p>2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-index-only/main.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n{#each things as _, i}\n\t<p>{i}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-indexed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['adder', 'blue whale', 'chameleon']\n\t\t};\n\t},\n\thtml: '<p>0: adder</p><p>1: blue whale</p><p>2: chameleon</p><!---->'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-indexed/main.svelte",
    "content": "<script>\n\texport let animals;\n</script>\n\n{#each animals as animal, i}\n\t<p>{i}: {animal}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttodos: [\n\t\t\t\t{\n\t\t\t\t\tid: 123,\n\t\t\t\t\tdescription: 'implement keyed each blocks'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 234,\n\t\t\t\t\tdescription: 'implement client-side hydration'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>1: implement keyed each blocks</p>\n\t\t<p>2: implement client-side hydration</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst [p1, p2] = target.querySelectorAll('p');\n\n\t\tcomponent.todos = [{ id: 234, description: 'implement client-side hydration' }];\n\t\tassert.htmlEqual(target.innerHTML, '<p>1: implement client-side hydration</p>');\n\n\t\tconst [p3] = target.querySelectorAll('p');\n\n\t\tassert.ok(!target.contains(p1), 'first `<p>` element should be removed');\n\t\tassert.equal(p2, p3, 'second `<p>` element should be retained');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed/main.svelte",
    "content": "<script>\n\texport let todos;\n</script>\n\n{#each todos as todo, i (todo.id)}\n\t<p>{i+1}: {todo.description}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-bind-group/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<label><input type=\"checkbox\" value=\"Vanilla\"> Vanilla</label>\n\t\t<label><input type=\"checkbox\" value=\"Strawberry\"> Strawberry</label>\n\t\t<label><input type=\"checkbox\" value=\"Chocolate\"> Chocolate</label>\n\t\t<label><input type=\"checkbox\" value=\"Lemon\"> Lemon</label>\n\t\t<label><input type=\"checkbox\" value=\"Coconut\"> Coconut</label>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [input1, input2, input3, input4, input5] = target.querySelectorAll('input');\n\t\tconst event = new window.Event('change');\n\n\t\tinput3.checked = true;\n\t\tinput3.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"Chocolate\"> Chocolate</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Vanilla\"> Vanilla</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Strawberry\"> Strawberry</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Lemon\"> Lemon</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Coconut\"> Coconut</label>\n\t\t`\n\t\t);\n\n\t\tassert.equal(input1.checked, false);\n\t\tassert.equal(input2.checked, false);\n\t\tassert.equal(input3.checked, true);\n\t\tassert.equal(input4.checked, false);\n\t\tassert.equal(input5.checked, false);\n\n\t\tinput4.checked = true;\n\t\tinput4.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"Chocolate\"> Chocolate</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Lemon\"> Lemon</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Vanilla\"> Vanilla</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Strawberry\"> Strawberry</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Coconut\"> Coconut</label>\n\t\t`\n\t\t);\n\n\t\tassert.equal(input1.checked, false);\n\t\tassert.equal(input2.checked, false);\n\t\tassert.equal(input3.checked, true);\n\t\tassert.equal(input4.checked, true);\n\t\tassert.equal(input5.checked, false);\n\n\t\tinput3.checked = false;\n\t\tinput3.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<label><input type=\"checkbox\" value=\"Lemon\"> Lemon</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Chocolate\"> Chocolate</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Vanilla\"> Vanilla</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Strawberry\"> Strawberry</label>\n\t\t\t<label><input type=\"checkbox\" value=\"Coconut\"> Coconut</label>\n\t\t`\n\t\t);\n\n\t\tassert.equal(input1.checked, false);\n\t\tassert.equal(input2.checked, false);\n\t\tassert.equal(input3.checked, false);\n\t\tassert.equal(input4.checked, true);\n\t\tassert.equal(input5.checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-bind-group/main.svelte",
    "content": "<script>\n\tlet flavours = [\n\t\t'Vanilla',\n\t\t'Strawberry',\n\t\t'Chocolate',\n\t\t'Lemon',\n\t\t'Coconut'\n\t];\n\n\tlet choices = [];\n\n\t// Put choices first by sorting\n\t$: flavours = flavours.sort((a, b) => choices.includes(b) - choices.includes(a));\n</script>\n\n{#each flavours as flavour (flavour)}\n\t<label>\n\t\t<input type=checkbox bind:group={choices} value={flavour}>\n\t\t{flavour}\n\t</label>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-changed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttitles: [{ name: 'a' }, { name: 'b' }, { name: 'c' }]\n\t\t};\n\t},\n\n\thtml: '<div class=\"container\"><p>a</p><p>b</p><p>c</p></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.titles = [{ name: 'b' }, { name: 'c' }, { name: 'a' }];\n\n\t\tassert.htmlEqual(target.innerHTML, '<div class=\"container\"><p>b</p><p>c</p><p>a</p></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-changed/main.svelte",
    "content": "<script>\n\texport let titles;\n</script>\n<div class=\"container\">\n\t{#each titles as title (title.name)}\n\t\t<p>{title.name}</p>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-component-action/Component.svelte",
    "content": "<script>\n\texport let action;\n</script>\n\n<div use:action></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-component-action/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tassert.equal(component.count, 0);\n\n\t\tcomponent.arr = ['2'];\n\n\t\tassert.equal(component.count, 1);\n\n\t\tcomponent.arr = ['1', '2'];\n\n\t\tassert.equal(component.count, 2);\n\n\t\tcomponent.arr = ['2', '1'];\n\n\t\tassert.equal(component.count, 2);\n\n\t\tcomponent.arr = [];\n\n\t\tassert.equal(component.count, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-component-action/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\texport let arr = [];\n\texport let count = 0;\n\tfunction action(node, params) {\n\t\tcount += 1;\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tcount -= 1;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each arr as item (item)}\n\t<Component {action} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttodos: [\n\t\t\t\t{ id: 123, description: 'buy milk' },\n\t\t\t\t{ id: 234, description: 'drink milk' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>buy milk</p>\n\t\t<p>drink milk</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst [p1, p2] = target.querySelectorAll('p');\n\n\t\tcomponent.todos = [\n\t\t\t{ id: 123, description: 'buy beer' },\n\t\t\t{ id: 234, description: 'drink beer' }\n\t\t];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>buy beer</p>\n\t\t\t<p>drink beer</p>\n\t\t`\n\t\t);\n\n\t\tconst [p3, p4] = target.querySelectorAll('p');\n\n\t\tassert.equal(p1, p3);\n\t\tassert.equal(p2, p4);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-dynamic/main.svelte",
    "content": "<script>\n\texport let todos;\n</script>\n\n{#each todos as todo (todo.id)}\n\t<p>{todo.description}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-dynamic-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>Click Me</button>\n\t0\n\t<ul></ul>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Click Me</button>\n\t\t\t1\n\t\t\t<ul></ul>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-dynamic-2/main.svelte",
    "content": "<script>\n\tlet num = 0;\n\tlet cards = [];\n\t\n\tfunction click() {\n\t\t// updating cards via push should have no effect to the ul,\n\t\t// since its being mutated instead of reassigned\n\t\tcards.push(num++);\n\t}\n</script>\n<button on:click={click}>\n\tClick Me\n</button>\n\n{num}\n<ul>\n\t{#each cards as c, i (i)}\n\t\t<li>{c}</li>\n  {/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-dynamic-key/_config.js",
    "content": "import { test } from '../../test';\n\nlet count = 0;\nlet value = 'foo';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tvalue() {\n\t\t\t\tcount++;\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\t},\n\n\tbefore_test() {\n\t\tcount = 0;\n\t\tvalue = 'foo';\n\t},\n\n\thtml: `\n\t\t<div>foo</div>\n\t\t<div>foo</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tvalue = 'bar';\n\t\tcomponent.id = 1;\n\n\t\tassert.equal(count, 4);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>bar</div>\n\t\t\t<div>bar</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-dynamic-key/main.svelte",
    "content": "<script>\n\texport let id = 0;\n\texport let value;\n</script>\n\n{#each ['foo', 'bar'] as key (id + key)}\n\t<div>{value()}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['alpaca', 'baboon', 'capybara'],\n\t\t\tfoo: 'something else'\n\t\t};\n\t},\n\n\thtml: `\n\t\tbefore\n\t\t<p>alpaca</p>\n\t\t<p>baboon</p>\n\t\t<p>capybara</p>\n\t\tafter\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = [];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>no animals, but rather something else</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = 'something other';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>no animals, but rather something other</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.animals = ['wombat'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>wombat</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-else/main.svelte",
    "content": "<script>\n\texport let animals;\n\texport let foo;\n</script>\n\nbefore\n{#each animals as animal (animal)}\n\t<p>{animal}</p>\n{:else}\n\t<p>no animals, but rather {foo}</p>\n{/each}\nafter\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: [{ z: 1 }, { z: 2 }] };\n\t},\n\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-empty/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n{#each x as y (y.z)}{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-html/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\tJohnJill\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.names = component.names.reverse();\n\t\tassert.htmlEqual(target.innerHTML, 'JillJohn');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-html/main.svelte",
    "content": "<script>\n\texport let names = ['John', 'Jill'];\n</script>\n\n{#each names as name (name)}\n\t{@html name}\n{/each}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-html-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div><span>hello</span> John</div>\n\t\t<div><span>hello</span> Jill</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.names = component.names.reverse();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><span>hello</span> Jill</div>\n\t\t\t<div><span>hello</span> John</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-html-b/main.svelte",
    "content": "<script>\n\texport let names = ['John', 'Jill'];\n</script>\n\n{#each names as name (name)}\n\t<div>\n\t\t<span>hello</span>\n\t\t{@html name}\n\t</div>\n{/each}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-iife/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>1</div>\n\t\t<div>2</div>\n\t\t<div>3</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-iife/main.svelte",
    "content": "<script>\n\tconst arr = [1, 2, 3];\n</script>\n\n{#each arr as item ((() => item)())}\n\t<div>\n\t\t{item}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-index/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>0</div><div>1</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-index/main.svelte",
    "content": "{#each {length: 2} as item, i (`${i}`)}\n\t<div>{i}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-index-in-event-handler/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>remove</button>\n\t\t<button>remove</button>\n\t\t<button>remove</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\ttarget.querySelectorAll('button')[1].dispatchEvent(click);\n\t\ttarget.querySelectorAll('button')[1].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>remove</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-index-in-event-handler/main.svelte",
    "content": "<script>\n\tlet list = [\"a\", \"b\", \"c\"];\n\n\tconst remove = index => {\n\t\tlist.splice(index, 1);\n\t\tlist = list;\n\t};\n</script>\n\n{#each list as value, index (value)}\n\t{#if value}\n\t\t<button on:click=\"{e => remove(index)}\">\n\t\t\tremove\n\t\t</button>\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-nested/Child.svelte",
    "content": "<script>\n\texport let id;\n</script>\n\n{id}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t1\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.desks = [\n\t\t\t{\n\t\t\t\tid: 1,\n\t\t\t\tteams: []\n\t\t\t}\n\t\t];\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-nested/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\texport let desks = [\n\t\t{\n\t\t\tid: 1,\n\t\t\tteams: [{ id: 1 }]\n\t\t}\n\t];\n</script>\n\n{#each desks as desk (desk.id)}\n\t{#each desk.teams as team (team.id)}\n\t\t<Child id={team.id} />\n\t{/each}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-non-prop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { words: ['foo', 'bar', 'baz'] };\n\t},\n\n\thtml: `\n\t\t<p>foo</p>\n\t\t<p>bar</p>\n\t\t<p>baz</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst [p1, p2, p3] = target.querySelectorAll('p');\n\n\t\tcomponent.words = ['foo', 'baz'];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>foo</p>\n\t\t\t<p>baz</p>\n\t\t`\n\t\t);\n\n\t\tconst [p4, p5] = target.querySelectorAll('p');\n\n\t\tassert.ok(!target.contains(p2), '`<p>` element should be removed');\n\n\t\tassert.equal(p1, p4, 'first `<p>` element should be retained');\n\t\tassert.equal(p3, p5, 'last `<p>` element should be retained');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-non-prop/main.svelte",
    "content": "<script>\n\texport let words;\n</script>\n\n{#each words as word (word)}\n\t<p>{word}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-object-identity/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttodos: [\n\t\t\t\t{\n\t\t\t\t\tdescription: 'implement keyed each blocks'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdescription: 'implement client-side hydration'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>1: implement keyed each blocks</p>\n\t\t<p>2: implement client-side hydration</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst [p1, p2] = target.querySelectorAll('p');\n\n\t\tcomponent.todos = [component.todos[1]];\n\t\tassert.htmlEqual(target.innerHTML, '<p>1: implement client-side hydration</p>');\n\n\t\tconst [p3] = target.querySelectorAll('p');\n\n\t\tassert.ok(!target.contains(p1), 'first `<p>` element should be removed');\n\t\tassert.equal(p2, p3, 'second `<p>` element should be retained');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-object-identity/main.svelte",
    "content": "<script>\n\texport let todos;\n</script>\n\n{#each todos as todo, i (todo)}\n\t<p>{i+1}: {todo.description}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-random-permute/_config.js",
    "content": "import { test } from '../../test';\n\nconst VALUES = Array.from('abcdefghijklmnopqrstuvwxyz');\n\n/** @param {string} array */\nfunction toObjects(array) {\n\treturn array.split('').map((x) => ({ id: x }));\n}\n\nfunction permute() {\n\tconst values = VALUES.slice();\n\tconst number = Math.floor(Math.random() * VALUES.length);\n\tconst permuted = [];\n\tfor (let i = 0; i < number; i++) {\n\t\tpermuted.push(...values.splice(Math.floor(Math.random() * (number - i)), 1));\n\t}\n\n\treturn permuted.join('');\n}\n\nexport default test({\n\tget props() {\n\t\treturn { values: toObjects('abc') };\n\t},\n\n\thtml: '(a)(b)(c)',\n\n\ttest({ assert, component, target }) {\n\t\t/** @param {string} sequence */\n\t\tfunction test(sequence) {\n\t\t\tconst previous = target.textContent;\n\t\t\tconst expected = sequence\n\t\t\t\t.split('')\n\t\t\t\t.map((x) => `(${x})`)\n\t\t\t\t.join('');\n\t\t\tcomponent.values = toObjects(sequence);\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\texpected,\n\t\t\t\t`\\n${previous} -> ${expected}\\n${target.textContent}`\n\t\t\t);\n\t\t}\n\n\t\t// first, some fixed tests so that we can debug them\n\t\ttest('abc');\n\t\ttest('abcd');\n\t\ttest('abecd');\n\t\ttest('fabecd');\n\t\ttest('fabed');\n\t\ttest('beadf');\n\t\ttest('ghbeadf');\n\t\ttest('gf');\n\t\ttest('gc');\n\t\ttest('g');\n\t\ttest('');\n\t\ttest('abc');\n\t\ttest('duqbmineapjhtlofrskcg');\n\t\ttest('hdnkjougmrvftewsqpailcb');\n\t\ttest('bidhfacge');\n\t\ttest('kgjnempcboaflidh');\n\t\ttest('fekbijachgd');\n\t\ttest('kdmlgfbicheja');\n\n\t\t// then, we party\n\t\tfor (let i = 0; i < 100; i += 1) test(permute());\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-random-permute/main.svelte",
    "content": "<script>\n\texport let values;\n</script>\n\n{#each values as value (value.id)}\n\t({value.id})\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-recursive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttree: [\n\t\t\t\t{ id: 1, sub: null },\n\t\t\t\t{ id: 2, sub: [{ id: 11 }] }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>1</div>\n\t\t<div>2\\n<div>11</div></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.tree = [\n\t\t\t{ id: 1, sub: null },\n\t\t\t{ id: 2, sub: null }\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>1</div>\n\t\t\t<div>2</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-recursive/main.svelte",
    "content": "<script>\n\texport let tree;\n</script>\n\n{#each tree as item, i (item.id)}\n\t<div>\n\t\t{item.id}\n\t\t{#if item.sub}\n\t\t\t<svelte:self tree={item.sub}/>\n\t\t{/if}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-shift/Nested.svelte",
    "content": "<script>\n\texport let title;\n</script>\n\n<p>{title}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-shift/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ttitles: [{ name: 'a' }, { name: 'b' }, { name: 'c' }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>a</p>\n\t\t<p>b</p>\n\t\t<p>c</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.titles = [{ name: 'b' }, { name: 'c' }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.titles = [{ name: 'c' }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>c</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-shift/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let titles;\n</script>\n\n{#each titles as title (title.name)}\n\t<Nested title=\"{title.name}\"/>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-siblings/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tones: [{ text: '1' }],\n\t\t\ttwos: [{ text: '2' }]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>1</div>\n\t\t<div>2</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.ones = [{ text: '11' }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>11</div>\n\t\t\t<div>2</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-siblings/main.svelte",
    "content": "<script>\n\texport let ones;\n\texport let twos;\n</script>\n\n{#each ones as one (one.text)}\n\t<div>{one.text}</div>\n{/each}\n\n{#each twos as two (two.text)}\n\t<div>{two.text}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: [{ z: 1 }, { z: 2 }] };\n\t},\n\n\thtml: `\n\t\t<p>does not change</p>\n\t\t<p>does not change</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-static/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n{#each x as y (y.z)}\n\t<p>does not change</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-unshift/Nested.svelte",
    "content": "<script>\n\texport let title;\n</script>\n\n<p>{title}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-unshift/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { titles: [{ name: 'b' }, { name: 'c' }] };\n\t},\n\n\thtml: `\n\t\t<p>b</p>\n\t\t<p>c</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.titles = [{ name: 'a' }, { name: 'b' }, { name: 'c' }];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-keyed-unshift/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let titles;\n</script>\n\n{#each titles as title (title.name)}\n\t<Nested title=\"{title.name}\"/>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-random-permute/_config.js",
    "content": "import { test } from '../../test';\n\nconst VALUES = Array.from('abcdefghijklmnopqrstuvwxyz');\n\nfunction permute() {\n\tconst values = VALUES.slice();\n\tconst number = Math.floor(Math.random() * VALUES.length);\n\tconst permuted = [];\n\tfor (let i = 0; i < number; i++) {\n\t\tpermuted.push(...values.splice(Math.floor(Math.random() * (number - i)), 1));\n\t}\n\n\treturn {\n\t\tdata: permuted,\n\t\texpected: permuted.length ? `(${permuted.join(')(')})` : ''\n\t};\n}\n\nlet step = permute();\n\nexport default test({\n\tget props() {\n\t\treturn { values: step.data };\n\t},\n\n\tget html() {\n\t\treturn step.expected;\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tfor (let i = 0; i < 100; i++) {\n\t\t\tstep = permute();\n\t\t\tcomponent.values = step.data;\n\t\t\tassert.htmlEqual(target.innerHTML, step.expected);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-random-permute/main.svelte",
    "content": "<script>\n\texport let values;\n</script>\n\n{#each values as value}\n\t({value})\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-recursive-with-function-condition/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>OK</p>\n\t\t<p>OK</p>\n\t\t<pre>one</pre>\n\t\t<pre>two</pre>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-recursive-with-function-condition/main.svelte",
    "content": "<script>\nlet a = () => true;\nexport let data = [{ foo: [{ foo: [{bar: \"one\"}, {bar: \"two\"}] }] }];\n</script>\n\n{#each data as datum}\n\t{#if datum.foo && a()}\n\t\t<p>OK</p>\n\t\t<svelte:self data={datum.foo}/>\n\t{:else}\n\t\t<pre>{datum.bar}</pre>\n\t{/if}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-ref-import/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<input type=\"text\">`,\n\tssrHtml: `<input type=\"text\" value=\"\">`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-ref-import/main.svelte",
    "content": "<script>\n\timport { foo } from './utils';\n</script>\n\n{#each foo.bar as bar}\n\t<input type=\"text\" bind:value={bar.value} />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-ref-import/utils.js",
    "content": "export const foo = {\n\tget bar() {\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: ''\n\t\t\t}\n\t\t];\n\t}\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '(alpaca)(baboon)(capybara) (lemur)'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow/main.svelte",
    "content": "{#each animals as animal}\n\t({animal})\n{/each}\n\n({animal})\n\n<script>\n\texport let animal = 'lemur';\n\texport let animals = ['alpaca', 'baboon', 'capybara'];\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n    Hello\n    <input />\n\t`,\n\tssrHtml: `\n\t\tHello\n\t\t<input value=\"Hello\"/>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'abcd';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n        abcd\n        <input />\n      `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind/main.svelte",
    "content": "<script>\n\tlet a = [\n\t\t'Hello'\n\t];\n</script>\n\n{#each a as a}\n\t{a}\n\t<input bind:value={a} />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n    Hello\n    <input />\n\t`,\n\tssrHtml: `\n\t\tHello\n\t\t<input value=\"Hello\"/>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'abcd';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n        abcd\n        <input />\n      `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind-2/main.svelte",
    "content": "<script>\n\tlet a = [\n\t\t{ a: 'Hello' }\n\t];\n</script>\n\n{#each a as { a }}\n\t{a}\n\t<input bind:value={a} />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\tHello World\n\t\t\t<input />\n\t\t\t<input />\n\t\t</div>\n\t\t<div>\n\t\t\tSapper App\n\t\t\t<input />\n\t\t\t<input />\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\tHello World\n\t\t\t<input value=\"Hello\"/>\n\t\t\t<input value=\"World\"/>\n\t\t</div>\n\t\t<div>\n\t\t\tSapper App\n\t\t\t<input value=\"Sapper\"/>\n\t\t\t<input value=\"App\"/>\n\t\t</div>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst [input1, input2, input3, input4] = target.querySelectorAll('input');\n\t\tinput1.value = 'Awesome';\n\t\tinput1.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tAwesome World\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\tSapper App\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n      `\n\t\t);\n\n\t\tinput2.value = 'Svelte';\n\t\tinput2.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tAwesome Svelte\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\tSapper App\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tinput3.value = 'Foo';\n\t\tinput3.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tAwesome Svelte\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\tFoo App\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tinput4.value = 'Bar';\n\t\tinput4.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tAwesome Svelte\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\tFoo Bar\n\t\t\t\t\t<input />\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind-3/main.svelte",
    "content": "<script>\n\tlet a = [\n\t\t['Hello', 'World'],\n\t\t['Sapper', 'App'],\n\t]\n</script>\n\n{#each a as a}\n\t<div>\n\t\t{a[0]} {a[1]}\n\t\t<input bind:value={a[0]}>\n\t\t<input bind:value={a[1]}>\n\t</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\tb: Hello\n\t\t\t<input />\n\t\t</div>\n\t\t<button>Button</button>\n\t`,\n\tssrHtml: `\n\t\t<div>\n\t\t\tb: Hello\n\t\t\t<input value=\"Hello\" />\n\t\t</div>\n\t\t<button>Button</button>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tinput.value = 'Awesome';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tb: Awesome\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<button>Button</button>\n      `\n\t\t);\n\n\t\tbutton.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tc: World\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<button>Button</button>\n      `\n\t\t);\n\n\t\tassert.equal(input.value, 'World');\n\n\t\tinput.value = 'Svelte';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\tc: Svelte\n\t\t\t\t\t<input />\n\t\t\t\t</div>\n\t\t\t\t<button>Button</button>\n      `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-bind-4/main.svelte",
    "content": "<script>\n\tlet a = [\n\t\t{ a: { b: 'Hello', c: 'World' }, key: 'b' },\n\t];\n</script>\n\n{#each a as { a, key }}\n\t<div>\n\t\t{key}: {a[key]}\n\t\t<input bind:value={a[key]}>\n\t</div>\n{/each}\n\n<button on:click={() => a[0].key = 'c'}>Button</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-self/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tassert.equal(target.querySelectorAll('input').length, 3);\n\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tinput.value = 'svelte';\n\t\tawait input.dispatchEvent(new window.Event('input'));\n\n\t\tassert.equal(target.querySelectorAll('input').length, 3);\n\t\tassert.deepEqual(component.data, { a: 'svelte', b: 'B', c: 'C' });\n\t\tassert.deepEqual(component.x, ['a', 'b', 'c']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-scope-shadow-self/main.svelte",
    "content": "<script> \n\texport let x = ['a', 'b', 'c'];\n\texport let data = {\n\t\t'a': 'A',\n\t\t'b': 'B',\n\t\t'c': 'C',\n\t};\n\texport function getData() {\n\t\treturn data;\n\t}\n</script>\n\n{#each x as x}\n\t<input type=text bind:value={data[x]}>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string[]} */\n\t\t\titems: []\n\t\t};\n\t},\n\n\thtml: '',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.items = ['x'];\n\t\tassert.htmlEqual(target.innerHTML, 'foo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-static/main.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n{#each items as item}\n\tfoo\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\thtml: `\n\t\t<div>f</div>\n\t\t<div>o</div>\n\t\t<div>o</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-string/main.svelte",
    "content": "{#each 'foo' as c}\n\t<div>{c}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-text-node/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['alpaca', 'baboon', 'capybara']\n\t\t};\n\t},\n\n\thtml: '(alpaca)(baboon)(capybara)',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = ['caribou', 'dogfish'];\n\t\tassert.htmlEqual(target.innerHTML, '(caribou)(dogfish)');\n\t\tcomponent.animals = [];\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-text-node/main.svelte",
    "content": "<script>\n\texport let animals;\n</script>\n\n{#each animals as animal}\n\t({animal})\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-unkeyed-else-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tanimals: ['alpaca', 'baboon', 'capybara'],\n\t\t\tfoo: 'something else'\n\t\t};\n\t},\n\n\thtml: `\n\t\tbefore\n\t\t<p>alpaca</p>\n\t\t<p>baboon</p>\n\t\t<p>capybara</p>\n\t\tafter\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.animals = [];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>no animals, but rather something else</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = 'something other';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>no animals, but rather something other</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.animals = ['wombat'];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>wombat</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-unkeyed-else-2/main.svelte",
    "content": "<script>\n\texport let animals;\n\texport let foo;\n</script>\n\nbefore\n{#each animals as animal}\n\t<p>{animal}</p>\n{:else}\n\t<p>no animals, but rather {foo}</p>\n{/each}\nafter\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-with-iterable/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\n\t\t<p>1 0</p>\n\t\t<p>2 1</p>\n\n\t\t<p>1 0</p>\n\t\t<p>2 1</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.numbers = new Set([2, 3]);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2</p>\n\t\t\t<p>3</p>\n\n\t\t\t<p>2 0</p>\n\t\t\t<p>3 1</p>\n\n\t\t\t<p>2 0</p>\n\t\t\t<p>3 1</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-block-with-iterable/main.svelte",
    "content": "<script>\n\texport let numbers = new Set([1, 2]);\n</script>\n\n{#each numbers as i}\n\t<p>{i}</p>\n{/each}\n\n{#each numbers as i, index}\n\t<p>{i} {index}</p>\n{/each}\n\n{#each numbers as i, index (i)}\n\t<p>{i} {index}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-assignment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>Add</button>\n\t<span class=\"content\">1</span>\n\t<button>Test</button>\n\t<span class=\"content\">2</span>\n\t<button>Test</button>\n\t<span class=\"content\">3</span>\n\t<button>Test</button>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tlet [incrementBtn, ...buttons] = target.querySelectorAll('button');\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\t\tbuttons[0].dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Add</button>\n\t\t\t<span class=\"content\">2</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">2</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">3</span>\n\t\t\t<button>Test</button>\n\t\t`\n\t\t);\n\n\t\tbuttons[0].dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Add</button>\n\t\t\t<span class=\"content\">4</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">2</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">3</span>\n\t\t\t<button>Test</button>\n\t\t`\n\t\t);\n\n\t\tbuttons[2].dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tbuttons[2].dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Add</button>\n\t\t\t<span class=\"content\">4</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">2</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">12</span>\n\t\t\t<button>Test</button>\n\t\t`\n\t\t);\n\n\t\tincrementBtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Add</button>\n\t\t\t<span class=\"content\">4</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">2</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">12</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">4</span>\n\t\t\t<button>Test</button>\n\t\t`\n\t\t);\n\n\t\t[incrementBtn, ...buttons] = target.querySelectorAll('button');\n\n\t\tbuttons[3].dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Add</button>\n\t\t\t<span class=\"content\">4</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">2</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">12</span>\n\t\t\t<button>Test</button>\n\t\t\t<span class=\"content\">8</span>\n\t\t\t<button>Test</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-assignment/main.svelte",
    "content": "<script>\n  let obj = {\n    prop: \"foo\"\n  };\n\n  let arr = [1, 2, 3]\n</script>\n\n<button on:click={() => arr = [...arr, arr.length + 1]}>Add</button>\n{#each arr as o}\n  <span class=\"content\">{o}</span>\n  <button on:click={() => { o *= 2; }}>Test</button>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-assignment-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span class=\"content\">foo</span>\n\t\t<button>Test</button>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span class=\"content\">bar</span>\n\t\t\t<button>Test</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-assignment-2/main.svelte",
    "content": "<script>\n  let obj = {\n    prop: \"foo\"\n  };\n\n  export let arr = [obj]\n</script>\n\n{#each arr as o}\n  <span class=\"content\">{o.prop}</span>\n  <button on:click={ () => o = { ...o, prop: \"bar\" } }>Test</button>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>a</p><p>b</p><p>c</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-expression/main.svelte",
    "content": "{#each [ 'a', 'b', 'c' ] as letter}\n\t<p>{letter}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tcolumns: ['a', 'b', 'c'],\n\t\t\trows: [1, 2, 3]\n\t\t};\n\t},\n\n\thtml: '<div>a, 1</div><div>a, 2</div><div>a, 3</div><!----><div>b, 1</div><div>b, 2</div><div>b, 3</div><!----><div>c, 1</div><div>c, 2</div><div>c, 3</div><!----><!---->',\n\n\t// TODO\n\ttest() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-nested/main.svelte",
    "content": "<script>\n\texport let columns;\n\texport let rows;\n</script>\n\n{#each columns as x}\n\t{#each rows as y}\n\t\t<div>{x}, {y}</div>\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-nested-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tcategories: [\n\t\t\t\t{\n\t\t\t\t\tname: 'animals',\n\t\t\t\t\tthings: [{ name: 'aardvark' }, { name: 'buffalo' }, { name: 'chinchilla' }]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'countries',\n\t\t\t\t\tthings: [{ name: 'albania' }, { name: 'brazil' }, { name: 'china' }]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'people',\n\t\t\t\t\tthings: [{ name: 'alice' }, { name: 'bob' }, { name: 'carol' }, { name: 'dave' }]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\thtml: '<p>animals: aardvark</p><p>animals: buffalo</p><p>animals: chinchilla</p><!----><p>countries: albania</p><p>countries: brazil</p><p>countries: china</p><!----><p>people: alice</p><p>people: bob</p><p>people: carol</p><p>people: dave</p><!----><!---->',\n\ttest() {\n\t\t// TODO\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-nested-b/main.svelte",
    "content": "<script>\n\texport let categories;\n</script>\n\n{#each categories as category}\n\t{#each category.things as thing}\n\t\t<p>{category.name}: {thing.name}</p>\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>1</button>\n\t\t<button>2</button>\n\t\t<button>3</button>\n\t\t<p>1, 2, 3</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tlet buttons = target.querySelectorAll('button');\n\n\t\tflushSync(() => buttons[2].click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>2</button>\n\t\t\t\t<button>4</button>\n\t\t\t\t<p>1, 2, 4</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/each-blocks-update/main.svelte",
    "content": "<script>\n\tlet arr = [1, 2, 3];\n</script>\n\n{#each arr as n}\n\t<button on:click={() => n++}>{n}</button>\n{/each}\n\n<p>{arr.join(', ')}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/element-invalid-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<foo-bar>Hello</foo-bar>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/element-invalid-name/main.svelte",
    "content": "<foo-bar>Hello</foo-bar>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-component-destroy/Empty.svelte",
    "content": "\n<script>\n\timport { onDestroy } from 'svelte';\n\n\tonDestroy(() => {\n\t\tconsole.log('destroy');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-component-destroy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t  <button>destroy component</button>\n\t`,\n\n\ttest({ assert, target, window, logs }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst event = new window.MouseEvent('click');\n\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>destroy component</button>\n\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, ['destroy']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-component-destroy/main.svelte",
    "content": "<script>\n\timport Empty from './Empty.svelte';\n\tlet active = true;\n</script>\n\n<button on:click={() => active = false }>destroy component</button>\n\n<svelte:component this={active ? Empty : null} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-dom/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-dom/main.svelte",
    "content": "<script>\n\tconst a = 1 + 2;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-style-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/empty-style-block/main.svelte",
    "content": "<style></style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escape-template-literals/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<div>{value}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escape-template-literals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml:\n\t\t'<code>`${foo}\\\\n`</code>\\n`\\n<div title=\"`${foo}\\\\n`\">foo</div>\\n<div>`${foo}\\\\n`</div>' +\n\t\t'<div>/ $clicks: 0 `tim$es` \\\\</div><div>$dollars `backticks` pyramid /\\\\</div>' +\n\t\t'<p>${ ${ ${</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escape-template-literals/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<code>`$&#123;foo}\\n`</code>\n{@html \"`\"}\n<div title=\"`$&#123;foo}\\n`\">foo</div>\n<Widget value=\"`$&#123;foo}\\n`\"/>\n<div>\n\t/ $clicks: {0} `tim${\"e\"}s` \\\n</div>\n<div>\n\t$dollars `backticks` pyramid /\\\n</div>\n<p>\n\t${'{'}\n\t&dollar;{'{'}\n\t{'$'}{'{'}\n</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-attr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-attr/main.svelte",
    "content": "<noscript>\n\t<a href=\"</noscript><script>console.log('should not run')</script>\">test</a>\n</noscript>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-attr-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-attr-2/main.svelte",
    "content": "<script>\n\tconst x = `</noscript><script>console.log('should not run')<` + `/script>`\n</script>\n\n<noscript>\n\t<a href={x}>test</a>\n</noscript>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-attr-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, '<div title=\"&amp;<\">blah</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-attr-3/main.svelte",
    "content": "<div title=\"&amp;&lt;\">blah</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>&lt;marquee&gt;hello&lt;/marquee&gt;</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-expression/main.svelte",
    "content": "<p>{'<marquee>hello</marquee>'}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t@x\n\t\t@@x\n\t\t#foo\n\t\t##foo\n\t\t%1\n\t\t%%2\n\n\t\t<div>\n\t\t\t@x\n\t\t\t@@x\n\t\t\t#foo\n\t\t\t##foo\n\t\t\t%1\n\t\t\t%%2\n\t\t</div>\n\n\t\t<div>\n\t\t\t@x\n\t\t\t@@x\n\t\t\t#foo\n\t\t\t##foo\n\t\t\t%1\n\t\t\t%%2\n\t\t\t<span>inner</span>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/escaped-text/main.svelte",
    "content": "@x\n@@x\n#foo\n##foo\n%1\n%%2\n\n<div>\n\t@x\n\t@@x\n\t#foo\n\t##foo\n\t%1\n\t%%2\n</div>\n\n<div>\n\t@x\n\t@@x\n\t#foo\n\t##foo\n\t%1\n\t%%2\n\t<span>inner</span>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>toggle</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>toggle</button>\n\t\t\t<p>hello!</p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>toggle</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler/main.svelte",
    "content": "<script>\n\texport let visible;\n</script>\n\n<button on:click='{() => visible = !visible}'>toggle</button>\n\n{#if visible}\n\t<p>hello!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-async/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>nothing</button>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-async/main.svelte",
    "content": "<button on:click={async () => { await null; }}>nothing</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-console-log/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 42 };\n\t},\n\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\t/** @type {number[]} */\n\t\tconst messages = [];\n\n\t\tconst log = console.log;\n\t\tconsole.log = (msg) => messages.push(msg);\n\t\tbutton.dispatchEvent(event);\n\t\tconsole.log = log;\n\n\t\tassert.deepEqual(messages, [42]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-console-log/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<button on:click='{() => console.log(foo)}'>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-deconflicted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { click_handler: 'x' };\n\t},\n\n\thtml: `\n\t\t<button>x</button>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-deconflicted/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let click_handler;\n</script>\n\n<button on:click=\"{() => foo()}\">{click_handler}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-destructured/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>clicked: false</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>clicked: true</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-destructured/main.svelte",
    "content": "<script>\n\tfunction get_handlers() {\n\t\treturn {\n\t\t\thandle_click: () => {\n\t\t\t\tclicked = true;\n\t\t\t}\n\t\t};\n\t}\n\n\tlet clicked = false;\n\tconst { handle_click } = get_handlers();\n</script>\n\n<button on:click={handle_click}>\n\tclicked: {clicked}\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<p>\n\t\t<button>set handler 1</button>\n\t\t<button>set handler 2</button>\n\t</p>\n\t<p>0</p>\n\t<button>click</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [updateButton1, updateButton2, button] = target.querySelectorAll('button');\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tlet err = '';\n\t\twindow.addEventListener('error', (e) => {\n\t\t\te.preventDefault();\n\t\t\terr = e.message;\n\t\t});\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(err, '', err);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>\n\t\t\t\t<button>set handler 1</button>\n\t\t\t\t<button>set handler 2</button>\n\t\t\t</p>\n\t\t\t<p>0</p>\n\t\t\t<button>click</button>\n\t\t`\n\t\t);\n\n\t\tupdateButton1.dispatchEvent(event);\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>\n\t\t\t\t<button>set handler 1</button>\n\t\t\t\t<button>set handler 2</button>\n\t\t\t</p>\n\t\t\t<p>1</p>\n\t\t\t<button>click</button>\n\t\t`\n\t\t);\n\n\t\tupdateButton2.dispatchEvent(event);\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>\n\t\t\t\t<button>set handler 1</button>\n\t\t\t\t<button>set handler 2</button>\n\t\t\t</p>\n\t\t\t<p>2</p>\n\t\t\t<button>click</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic/main.svelte",
    "content": "<script>\n\tlet clickHandler;\n\tlet number = 0;\n\t\n\tfunction updateHandler1(){\n\t\tclickHandler = () => number = 1;\n\t}\n\n\tfunction updateHandler2(){\n\t\tclickHandler = () => number = 2;\n\t}\n\t\n\n</script>\n\n<p>\n<button on:click={updateHandler1}>set handler 1</button>\n<button on:click={updateHandler2}>set handler 2</button>\n</p>\n\n<p>{ number }</p>\n\n<button on:click={clickHandler}>click</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>toggle</button>\n\t\t<p>0</p>\n\t\t<button>handler_a</button>\n\t\t<button>handler_b</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [toggle, handler_a, handler_b] = target.querySelectorAll('button');\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\thandler_a.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(p.innerHTML, '1');\n\n\t\ttoggle.dispatchEvent(event);\n\t\tflushSync();\n\n\t\thandler_a.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(p.innerHTML, '2');\n\n\t\ttoggle.dispatchEvent(event);\n\t\tflushSync();\n\n\t\thandler_b.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(p.innerHTML, '1');\n\n\t\ttoggle.dispatchEvent(event);\n\t\tflushSync();\n\n\t\thandler_b.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(p.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-2/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet number = 0;\n\tconst handler_1 = () => number = 1;\n\tconst handler_2 = () => number = 2;\n\n\tlet flag = true;\n\n\t$: handler_a = flag ? handler_1 : handler_2;\n\tconst handler_b = writable();\n\t$: handler_b.set(flag ? handler_1 : handler_2);\n</script>\n\n<button on:click={() => flag = !flag}>toggle</button>\n\n<p>{number}</p>\n\n<button on:click={handler_a}>handler_a</button>\n<button on:click={$handler_b}>handler_b</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-bound-var/Nested.svelte",
    "content": "<script>\n  let text = 'Hello World';\n  export function updateText() {\n    text = 'Bye World';\n  }\n</script>\n{text}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-bound-var/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Click Me</button>\n\t\tHello World\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Click Me</button>\n\t\t\t\tBye World\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-bound-var/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\tlet nested;\n</script>\n\n<button on:click={nested && nested.updateText}>Click Me</button>\n\n<Nested bind:this={nested} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-expression/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>bar</button>',\n\n\tasync test({ assert, target, window }) {\n\t\tconst [button] = target.querySelectorAll('button');\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>foo</button>');\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>bar</button>');\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>foo</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-expression/main.svelte",
    "content": "<script>\n\tlet name = 'bar';\n\tfunction foo() {\n\t\tname = 'foo';\n\t}\n\tfunction bar() {\n\t\tname = 'bar';\n\t}\n\t\n</script>\n\n<button on:click={name === 'bar' ? foo : bar}>{name}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-hash/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<p>\n\t\t<button>set handler 1</button>\n\t\t<button>set handler 2</button>\n\t</p>\n\t<p>0</p>\n\t<button>click</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [updateButton1, updateButton2, button] = target.querySelectorAll('button');\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tlet err = '';\n\t\twindow.addEventListener('error', (e) => {\n\t\t\te.preventDefault();\n\t\t\terr = e.message;\n\t\t});\n\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(err, '', err);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>\n\t\t\t\t<button>set handler 1</button>\n\t\t\t\t<button>set handler 2</button>\n\t\t\t</p>\n\t\t\t<p>0</p>\n\t\t\t<button>click</button>\n\t\t`\n\t\t);\n\n\t\tupdateButton1.dispatchEvent(event);\n\t\tflushSync();\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>\n\t\t\t\t<button>set handler 1</button>\n\t\t\t\t<button>set handler 2</button>\n\t\t\t</p>\n\t\t\t<p>1</p>\n\t\t\t<button>click</button>\n\t\t`\n\t\t);\n\n\t\tupdateButton2.dispatchEvent(event);\n\t\tbutton.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>\n\t\t\t\t<button>set handler 1</button>\n\t\t\t\t<button>set handler 2</button>\n\t\t\t</p>\n\t\t\t<p>2</p>\n\t\t\t<button>click</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-hash/main.svelte",
    "content": "<script>\n\tlet clickHandler = {};\n\tlet number = 0;\n\t\n\tfunction updateHandler1(){\n\t\tclickHandler.f = () => number = 1;\n\t}\n\n\tfunction updateHandler2(){\n\t\tclickHandler.f = () => number = 2;\n\t}\n\t\n\n</script>\n\n<p>\n<button on:click={updateHandler1}>set handler 1</button>\n<button on:click={updateHandler2}>set handler 2</button>\n</p>\n\n<p>{ number }</p>\n\n<button on:click={clickHandler.f}>click</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-invalid/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<button>undef</button>\n\t<button>null</button>\n\t<button>invalid</button>`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst [buttonUndef, buttonNull, buttonInvalid] = target.querySelectorAll('button');\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tlet err = '';\n\t\twindow.addEventListener('error', (e) => {\n\t\t\te.preventDefault();\n\t\t\terr = e.message;\n\t\t});\n\n\t\t// All three should not throw if proper checking is done in runtime code\n\t\tawait buttonUndef.dispatchEvent(event);\n\t\tassert.equal(err, '', err);\n\n\t\tawait buttonNull.dispatchEvent(event);\n\t\tassert.equal(err, '', err);\n\n\t\t// TODO: Should this throw?\n\t\t// await buttonInvalid.dispatchEvent(event);\n\t\t// assert.equal(err, '', err);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-invalid/main.svelte",
    "content": "<script>\n\tlet handlerUndef;\n\tlet handlerNull;\n\tlet handlerInvalid;\n\n\thandlerUndef = undefined;\n\thandlerNull = null;\n\thandlerInvalid = 42;\n</script>\n\n<button on:click={handlerUndef}>undef</button>\n<button on:click={handlerNull}>null</button>\n<button on:click={handlerInvalid}>invalid</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-once/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-once/main.svelte",
    "content": "<script>\n\tlet f;\n\texport let count = 0;\n\tf = () => count += 1;\n</script>\n\n<button on:click|once=\"{f}\">{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-prevent-default/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true\n\t\t});\n\n\t\tawait button.dispatchEvent(event);\n\n\t\tassert.ok(component.default_was_prevented);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-prevent-default/main.svelte",
    "content": "<script>\n\texport let default_was_prevented;\n\tlet f;\n\n\tfunction handle_click(event) {\n\t\tdefault_was_prevented = event.defaultPrevented;\n\t}\n\tf = handle_click;\n</script>\n\n<button on:click|preventDefault={f}>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-self/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\n\t\tassert.ok(!component.inner_clicked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-self/main.svelte",
    "content": "<script>\n\texport let inner_clicked;\n\tlet f;\n\n\tfunction handle_click(event) {\n\t\tinner_clicked = true;\n\t}\n\tf = handle_click;\n</script>\n\n<div on:click|self={f}>\n\t<button>click me</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-stop-propagation/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', {\n\t\t\tbubbles: true\n\t\t});\n\n\t\tawait button.dispatchEvent(event);\n\n\t\tassert.ok(component.inner_clicked);\n\t\tassert.ok(!component.outer_clicked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-modifier-stop-propagation/main.svelte",
    "content": "<script>\n\texport let inner_clicked;\n\texport let outer_clicked;\n\tlet f1;\n\tlet f2;\n\n\tfunction handle_inner_click(event) {\n\t\tinner_clicked = true;\n\t}\n\n\tfunction handle_outer_click(event) {\n\t\touter_clicked = true;\n\t}\n\tf1 = handle_inner_click;\n\tf2 = handle_outer_click;\n</script>\n\n<div on:click={f2}>\n\t<button on:click|stopPropagation={f1}>click me</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-multiple/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.clickHandlerOne, 1);\n\t\tassert.equal(component.clickHandlerTwo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-dynamic-multiple/main.svelte",
    "content": "<script>\n\texport let clickHandlerOne = 0;\n\texport let clickHandlerTwo = 0;\n\tlet f1;\n\tlet f2;\n\n\tf1 = () => clickHandlerOne++;\n\tf2 = () => clickHandlerTwo++;\n</script>\n\n<button on:click='{f1}' on:click='{f2}'>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: ['foo', 'bar', 'baz'],\n\t\t\tselected: 'foo'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<button>foo</button>\n\t\t<button>bar</button>\n\t\t<button>baz</button>\n\t\t<p>selected: foo</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\t\t\t<button>baz</button>\n\t\t\t<p>selected: bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each/main.svelte",
    "content": "<script>\n\texport let items;\n\texport let selected;\n</script>\n\n{#each items as item}\n\t<button on:click='{() => selected = item}'>{item}</button>\n{/each}\n\n<p>selected: {selected}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-context/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: ['whatever'],\n\t\t\tfoo: 'wrong',\n\t\t\tbar: 'right'\n\t\t};\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tassert.equal(component.foo, 'right');\n\n\t\tcomponent.bar = 'left';\n\t\tbutton.dispatchEvent(event);\n\t\tassert.equal(component.foo, 'left');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-context/main.svelte",
    "content": "<script>\n\texport let items;\n\texport let foo;\n\texport let bar;\n</script>\n\n{#each items as item}\n\t<button on:click='{() => foo = bar}'>{item}</button>\n{/each}\n\n<p>foo: {foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-context-invalidation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>off</button>\n\t\t<button>on</button>\n\t\t<button>off</button>\n\t\t<p>on: 1</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>on</button>\n\t\t\t<button>on</button>\n\t\t\t<button>off</button>\n\t\t\t<p>on: 2</p>\n\t\t`\n\t\t);\n\n\t\tbuttons[2].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>on</button>\n\t\t\t<button>on</button>\n\t\t\t<button>on</button>\n\t\t\t<p>on: 3</p>\n\t\t`\n\t\t);\n\n\t\tassert.deepEqual(component.switches, [{ on: true }, { on: true }, { on: true }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-context-invalidation/main.svelte",
    "content": "<script>\n\texport let switches = [\n\t\t{ on: false },\n\t\t{ on: true },\n\t\t{ on: false }\n\t];\n</script>\n\n{#each switches as s}\n\t<button on:click=\"{() => s.on = !s.on}\">\n\t\t{s.on ? 'on' : 'off'}\n\t</button>\n{/each}\n\n<p>on: {switches.filter(s => !!s.on).length}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-deconflicted/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: [1], bar: [2], clicked: 'neither' };\n\t},\n\n\thtml: `\n\t\t<button>foo</button>\n\t\t<button>bar</button>\n\t\t<p>clicked: neither</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.clicked, 'foo');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\t\t\t<p>clicked: foo</p>\n\t\t`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(component.clicked, 'bar');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\t\t\t<p>clicked: bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-deconflicted/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let clicked;\n\texport let bar;\n</script>\n\n{#each foo as f}\n\t<button on:click='{() => clicked = \"foo\"}'>foo</button>\n{/each}\n\n{#each bar as b}\n\t<button on:click='{() => clicked = \"bar\"}'>bar</button>\n{/each}\n\n<p>clicked: {clicked}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-modifier/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\t// set first\n\t\tawait component.lists.update(() => [{ text: 'item1' }, { text: 'item2' }, { text: 'item3' }]);\n\n\t\tawait component.lists.update(() => [{ text: 'item3' }, { text: 'item2' }, { text: 'item1' }]);\n\n\t\tawait component.lists.update(() => [{ text: 'item1' }, { text: 'item2' }, { text: 'item3' }]);\n\n\t\tconst [item1, item2] = /** @type {NodeListOf<Element>} */ (target.querySelectorAll('div'));\n\t\tconst [item1Btn1, item1Btn2] = item1.querySelectorAll('button');\n\t\tconst [item2Btn1, item2Btn2] = item2.querySelectorAll('button');\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait item1Btn1.dispatchEvent(clickEvent);\n\t\tassert.equal(component.getNormalCount(), 1);\n\n\t\tawait item1Btn2.dispatchEvent(clickEvent);\n\t\tassert.equal(component.getModifierCount(), 1);\n\n\t\tawait item2Btn1.dispatchEvent(clickEvent);\n\t\tassert.equal(component.getNormalCount(), 2);\n\n\t\tawait item2Btn2.dispatchEvent(clickEvent);\n\t\tassert.equal(component.getModifierCount(), 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-modifier/main.svelte",
    "content": "<script>\n\timport {writable} from 'svelte/store'\n\t\n\tconst normal = writable(0);\n\tconst modifier = writable(0);\n\texport const lists = writable([]);\n\t\n\tconst click = (e, type) => {\n\t\tif(type === 'normal'){\n\t\t\t$normal++;\n\t\t}else{\n\t\t\t$modifier++;\n\t\t}\n\t}\n\n\texport function getNormalCount() {\n\t\treturn $normal;\n\t}\n\texport function getModifierCount() {\n\t\treturn $modifier;\n\t}\n</script>\n\n{#each $lists as item (item.text)}\n\t<div>\n\t\t{item.text}\n\t\t<button on:click={(e)=>click(e,'normal')}>\n\t\t\tNormal\n\t\t</button>\n\t\t<button on:click|preventDefault={(e)=> click(e,'modifier')}>\n\t\t\tModifier\n\t\t</button>\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { items: ['foo', 'bar', 'baz'] };\n\t},\n\n\thtml: `\n\t\t<button>foo</button>\n\t\t<button>bar</button>\n\t\t<button>baz</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click');\n\n\t\t/**\n\t\t * @type {any[]}\n\t\t */\n\t\tconst clicked = [];\n\n\t\tcomponent.$on('clicked', (/** @type {{ detail: { node: any; }; }} */ event) => {\n\t\t\tclicked.push(event.detail.node);\n\t\t});\n\n\t\tbuttons[1].dispatchEvent(event);\n\n\t\tassert.equal(clicked.length, 1);\n\t\tassert.equal(clicked[0].nodeName, 'BUTTON');\n\t\tassert.equal(clicked[0].textContent, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-each-this/main.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\texport let items;\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n{#each items as item}\n\t<button on:click='{e => dispatch(\"clicked\", { node: e.target })}'>{item}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-event-methods/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window }) {\n\t\tconst allow = target.querySelector('.allow-propagation');\n\t\tconst stop = target.querySelector('.stop-propagation');\n\n\t\tallow?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tstop?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tassert.equal(component.foo, true);\n\t\tassert.equal(component.bar, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-event-methods/main.svelte",
    "content": "<script>\n\texport let foo = false;\n\texport let bar = false;\n</script>\n\n<div on:click='{() => foo = true}'>\n\t<button class='allow-propagation'>click me</button>\n</div>\n\n<div on:click='{() => bar = true}'>\n\t<button class='stop-propagation' on:click='{event => event.stopPropagation()}'>click me</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-hoisted/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: [1], a: 42 };\n\t},\n\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(event);\n\t\tassert.equal(component.snapshot, 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-hoisted/main.svelte",
    "content": "<script>\n\texport let snapshot;\n\n\texport let foo;\n\texport let a;\n\n\texport function baz(a) {\n\t\tsnapshot = a;\n\t}\n</script>\n\n{#each foo as bar}\n\t<button on:click='{() => baz(a)}'>click me</button>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-body-once/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, window }) {\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait window.document.body.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\n\t\tawait window.document.body.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-body-once/main.svelte",
    "content": "<script>\n\texport let count = 0;\n</script>\n\n<svelte:body on:click|once=\"{() => count += 1}\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-bubble/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tawait button.click();\n\n\t\tassert.ok(component.default_was_prevented);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-bubble/button.svelte",
    "content": "<button on:click|preventDefault>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-bubble/main.svelte",
    "content": "<script>\n\timport Button from \"./button.svelte\";\n\n\texport let default_was_prevented;\n\n\tfunction handle_click(event) {\n\t\tdefault_was_prevented = event.defaultPrevented;\n\t}\n</script>\n\n<Button on:click={handle_click} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-once/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-once/main.svelte",
    "content": "<script>\n\texport let count = 0;\n</script>\n\n<button on:click|once=\"{() => count += 1}\">{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-once-duplicated/Button.svelte",
    "content": "<script>\n\tlet count = 0;\n</script>\n\n<button on:click|once=\"{() => count += 1}\">{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-once-duplicated/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>1</button>\n\t\t\t<button>0</button>`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>1</button>\n\t\t\t<button>1</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-once-duplicated/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n</script>\n\n<Button />\n<Button />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-prevent-default/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true\n\t\t});\n\n\t\tawait button.dispatchEvent(event);\n\n\t\tassert.ok(component.default_was_prevented);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-prevent-default/main.svelte",
    "content": "<script>\n\texport let default_was_prevented;\n\n\tfunction handle_click(event) {\n\t\tdefault_was_prevented = event.defaultPrevented;\n\t}\n</script>\n\n<button on:click|preventDefault={handle_click}>click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-self/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\n\t\tassert.ok(!component.inner_clicked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-self/main.svelte",
    "content": "<script>\n\texport let inner_clicked;\n\n\tfunction handle_click(event) {\n\t\tinner_clicked = true;\n\t}\n</script>\n\n<div on:click|self={handle_click}>\n\t<button>click me</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-stop-immediate-propagation/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.deepEqual(component.logs, ['click_1', 'click_2']);\n\n\t\tcomponent.click_2 = () => component.logs.push('22');\n\t\tawait button.dispatchEvent(event);\n\t\tassert.deepEqual(component.logs, ['click_1', 'click_2', 'click_1', '22']);\n\n\t\tcomponent.click_1 = () => component.logs.push('11');\n\t\tawait button.dispatchEvent(event);\n\t\tassert.deepEqual(component.logs, ['click_1', 'click_2', 'click_1', '22', '11', '22']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-stop-immediate-propagation/main.svelte",
    "content": "<script>\n\texport let logs = [];\n\n\texport let click_1 = () => {\n\t\tlogs.push('click_1');\n\t}\n\n\texport let click_2 = () => {\n\t\tlogs.push('click_2');\n\t}\n\n\texport let click_3 = () => {\n\t\tlogs.push('click_3');\n\t}\n</script>\n\n<button\n\ton:click={click_1}\n\ton:click|stopImmediatePropagation={click_2}\n\ton:click={click_3}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-stop-propagation/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t</div>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', {\n\t\t\tbubbles: true\n\t\t});\n\n\t\tawait button.dispatchEvent(event);\n\n\t\tassert.ok(component.inner_clicked);\n\t\tassert.ok(!component.outer_clicked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-stop-propagation/main.svelte",
    "content": "<script>\n\texport let inner_clicked;\n\texport let outer_clicked;\n\n\tfunction handle_inner_click(event) {\n\t\tinner_clicked = true;\n\t}\n\n\tfunction handle_outer_click(event) {\n\t\touter_clicked = true;\n\t}\n</script>\n\n<div on:click={handle_outer_click}>\n\t<button on:click|stopPropagation={handle_inner_click}>click me</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-trusted/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.trusted, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-modifier-trusted/main.svelte",
    "content": "<script>\n\texport let trusted = true;\n</script>\n\n<button on:click|trusted=\"{() => trusted = false}\">Only trusted events: {trusted?'true':'false'}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-multiple/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(event);\n\t\tassert.equal(component.clickHandlerOne, 1);\n\t\tassert.equal(component.clickHandlerTwo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-multiple/main.svelte",
    "content": "<script>\n\texport let clickHandlerOne = 0;\n\texport let clickHandlerTwo = 0;\n</script>\n\n<button on:click='{() => clickHandlerOne++}' on:click='{() => clickHandlerTwo++}'>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tflushSync(() => {\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['1 - 1']);\n\n\t\tflushSync(() => {\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['1 - 1', '2 - 2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/main.svelte",
    "content": "<script>\n\tlet referenced_directly = 0;\n\tlet not_referenced_directly = 0;\n\tlet css_based_on_not_referenced = '';\n\n\tfunction click() {\n\t\treferenced_directly += 1;\n\t\tnot_referenced_directly += 1;\n\t\tcss_based_on_not_referenced = not_referenced_directly % 2 == 1 ? 'background-color: red' : '';\n\t\tconsole.log(referenced_directly + ' - ' + not_referenced_directly); //only referenced_directly is increasing\n\t}\n</script>\n\n<button on:click={click} style={css_based_on_not_referenced}> increase both </button>\n{referenced_directly}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-removal/_config.js",
    "content": "import { test } from '../../test';\n\n// TODO gah, JSDOM appears to behave differently to real browsers here... probably need to raise an issue\n\nexport default test({\n\thtml: '<input>',\n\n\ttest({ assert, component }) {\n\t\tcomponent.input.focus();\n\n\t\t// this should NOT trigger blur event\n\t\tcomponent.visible = false;\n\t\tassert.ok(!component.blurred);\n\n\t\tcomponent.visible = true;\n\t\tcomponent.input.focus();\n\n\t\t// this SHOULD trigger blur event\n\t\tcomponent.input.blur();\n\t\tassert.ok(component.blurred);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-removal/main.svelte",
    "content": "<script>\n\texport let input;\n\texport let blurred = false;\n\texport let visible = true;\n</script>\n\n{#if visible}\n\t<input bind:this={input} on:blur='{() => blurred = true}'>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-sanitize/Component.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from \"svelte\";\n\n    const dispatch = createEventDispatcher();\n</script>\n\n<button on:click={() => dispatch('event-name')}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-sanitize/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>toggle</div>\n\t\t<button>toggle</button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tconst button = target.querySelector('button');\n\t\tok(div);\n\t\tok(button);\n\t\tconst event = new window.MouseEvent('some-event');\n\n\t\tdiv.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>toggle</div>\n\t\t\t<button>toggle</button>\n\t\t\t<p>hello!</p>\n\t\t`\n\t\t);\n\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>toggle</div>\n\t\t\t<button>toggle</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-sanitize/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\texport let visible;\n</script>\n\n<div on:some-event='{() => visible = !visible}'>toggle</div>\n<Component on:event-name={() => visible = !visible}></Component>\n\n{#if visible}\n\t<p>hello!</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-component/Widget.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click='{() => dispatch(\"foo\", { answer: 42 })}'>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-component/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst event = new window.MouseEvent('click');\n\n\t\tlet answer;\n\t\tcomponent.$on('foo', (/** @type {{ detail: { answer: any; }; }} */ event) => {\n\t\t\tanswer = event.detail.answer;\n\t\t});\n\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(event);\n\t\tassert.equal(answer, 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-component/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget on:foo/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-dynamic-component/Widget.svelte",
    "content": "<script>\n\timport { createEventDispatcher } from 'svelte';\n\n\tconst dispatch = createEventDispatcher();\n</script>\n\n<button on:click='{() => dispatch(\"foo\", { answer: 42 })}'>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-dynamic-component/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst event = new window.MouseEvent('click');\n\n\t\tlet answer;\n\t\tcomponent.$on('foo', (/** @type {{ detail: { answer: any; }; }} */ event) => {\n\t\t\tanswer = event.detail.answer;\n\t\t});\n\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(event);\n\t\tassert.equal(answer, 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-dynamic-component/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<svelte:component this={Widget} on:foo/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-sanitized/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>click me now</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst event = new window.Event('click-now');\n\n\t\tlet clicked;\n\t\tcomponent.$on('click-now', () => {\n\t\t\tclicked = true;\n\t\t});\n\n\t\t// @ts-ignore\n\t\tbutton.dispatchEvent(event);\n\t\tassert.ok(clicked);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-shorthand-sanitized/main.svelte",
    "content": "<button on:click-now>click me now</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-this-methods/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\t// Click events don't focus elements in JSDOM – obviously they would\n\t\t// in real browsers. More realistically, you'd use this for e.g.\n\t\t// this.select(), but that's harder to test than this.focus()\n\n\t\tconst wont = target.querySelector('.wont-focus');\n\t\tconst will = target.querySelector('.will-focus');\n\t\tok(wont);\n\t\tok(will);\n\n\t\twont.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tassert.equal(window.document.activeElement, window.document.body);\n\n\t\twill.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\t\tassert.equal(window.document.activeElement, will);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-this-methods/main.svelte",
    "content": "<input class='wont-focus'>\n<input class='will-focus' on:click='{e => e.target.focus()}'>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst input = target.querySelector('input');\n\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<input>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/main.svelte",
    "content": "<input on:click />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/export-function-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'Compile plz'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/export-function-hoisting/main.svelte",
    "content": "<script>\n\texport function one () {\n    two()\n\t}\n\n\texport function two () {\n\t\treturn one()\n\t}\n</script>\n\nCompile plz\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/fragment-trailing-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nconst message = 'the quick brown fox jumps over the lazy dog';\n// In Svelte 4 this was `<span>${c} </span>` - whitespace behavior change\nconst expected = [...message].map((c) => `<span>${c}</span>`).join('');\n\nexport default test({\n\tget props() {\n\t\treturn { message };\n\t},\n\n\tasync test({ assert, target }) {\n\t\tconst firstSpanList = target.children[0];\n\t\tassert.htmlEqualWithOptions(firstSpanList.innerHTML, expected, {\n\t\t\twithoutNormalizeHtml: true,\n\t\t\tpreserveComments: false\n\t\t});\n\n\t\tconst secondSpanList = target.children[1];\n\t\tassert.htmlEqualWithOptions(secondSpanList.innerHTML, expected, {\n\t\t\twithoutNormalizeHtml: true,\n\t\t\tpreserveComments: false\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/fragment-trailing-whitespace/main.svelte",
    "content": "<script>\n    let message = \"the quick brown fox jumps over the lazy dog\"\n</script>\n\n<div id=\"first\">\n    {#each message as char}\n        <span>{char} </span>\n    {/each}\n</div>\n\n<div id=\"second\">{#each message as char}<span>{char} </span>{/each}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/function-expression-inline/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\nexport default test({\n\thtml: `\n\t\t<button>click me</button>\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<p>2</p>\n\t\t\t<p>4</p>\n\t\t\t<p>6</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/function-expression-inline/main.svelte",
    "content": "<script>\n\tlet list = [1, 2, 3];\n</script>\n\n<button on:click={event => {\n\tlist = list.map(item => {\n\t\treturn item * 2;\n\t});\n}}>click me</button>\n\n{#each list as number}\n\t<p>{number}</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/function-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { greeting: 'Good day' };\n\t},\n\n\thtml: '<h1>Good day, world</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/function-hoisting/main.svelte",
    "content": "<script>\n\texport let greeting = 'Hello'\n\tlet name = 'world';\n\n  // both functions, and `name` are hoistable, but hoistMe does not get hoisted\n\tfunction hoistMeMaybe () {\n\t\treturn hoistMe(name) // comment out this line => hoistMe is hoisted\n\t}\n\n\tfunction hoistMe (name) {\n\t\treturn name\n\t}\n</script>\n\n<h1>{greeting}, {hoistMeMaybe()}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/function-in-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tnumbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\t\t};\n\t},\n\n\thtml: '1, 3, 5, 7, 9',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.numbers = [10, 11, 12, 13, 14, 15, 16];\n\n\t\tassert.htmlEqual(target.innerHTML, '11, 13, 15');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/function-in-expression/main.svelte",
    "content": "<script>\n\texport let numbers;\n</script>\n\n{numbers.filter(x => x % 2).join(', ')}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-accessible-directly/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, 'NaN');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-accessible-directly/main.svelte",
    "content": "{NaN}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-accessible-directly-process/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello world!</h1>',\n\n\tbefore_test() {\n\t\tprocess.env.TMP_VAR = 'world';\n\t},\n\n\tafter_test() {\n\t\tdelete process.env.TMP_VAR;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-accessible-directly-process/main.svelte",
    "content": "<h1>Hello {process.env.TMP_VAR}!</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-not-dereferenced/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 10 };\n\t},\n\n\thtml: '5',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 3;\n\t\tassert.htmlEqual(target.innerHTML, '3');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-not-dereferenced/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n{Math.min(x, 5)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-not-overwritten-by-bindings/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div class=\"todo done\">\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\">\n\t\t</div>\n\n\t\t<div class=\"todo done\">\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\">\n\t\t</div>\n\n\t\t<div class=\"todo \">\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\">\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div class=\"todo done\">\n\t\t\t<input type=\"checkbox\" checked>\n\t\t\t<input type=\"text\" value=\"Buy some milk\">\n\t\t</div>\n\n\t\t<div class=\"todo done\">\n\t\t\t<input type=\"checkbox\" checked>\n\t\t\t<input type=\"text\" value=\"Do the laundry\">\n\t\t</div>\n\n\t\t<div class=\"todo \">\n\t\t\t<input type=\"checkbox\">\n\t\t\t<input type=\"text\" value=\"Find life's true purpose\">\n\t\t</div>\n\t`,\n\n\tget props() {\n\t\treturn {\n\t\t\ttodos: {\n\t\t\t\tfirst: { description: 'Buy some milk', done: true },\n\t\t\t\tsecond: {\n\t\t\t\t\tdescription: 'Do the laundry',\n\t\t\t\t\tdone: true\n\t\t\t\t},\n\t\t\t\tthird: {\n\t\t\t\t\tdescription: \"Find life's true purpose\",\n\t\t\t\t\tdone: false\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tconst input = /** @type {HTMLInputElement} */ (\n\t\t\tdocument.querySelectorAll('input[type=\"checkbox\"]')[2]\n\t\t);\n\t\tconst change = new window.Event('change');\n\n\t\tinput.checked = true;\n\t\tinput.dispatchEvent(change);\n\t\tflushSync();\n\n\t\tassert.ok(component.todos.third.done);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"todo done\">\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\">\n\t\t\t</div>\n\n\t\t\t<div class=\"todo done\">\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\">\n\t\t\t</div>\n\n\t\t\t<div class=\"todo done\">\n\t\t\t\t<input type=\"checkbox\">\n\t\t\t\t<input type=\"text\">\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-not-overwritten-by-bindings/main.svelte",
    "content": "<script>\n\texport let todos;\n</script>\n\n{#each Object.keys(todos) as key}\n\t<div class='todo {todos[key].done ? \"done\": \"\"}'>\n\t\t<input type='checkbox' bind:checked={todos[key].done}>\n\t\t<input type='text' bind:value={todos[key].description}>\n\t</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-shadowed-by-data/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 10 };\n\t},\n\n\thtml: 'potato',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 3;\n\t\tassert.htmlEqual(target.innerHTML, 'potato');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-shadowed-by-data/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let Math = {\n\t\tmin ( a, b ) {\n\t\t\treturn 'potato';\n\t\t}\n\t};\n</script>\n\n{Math.min(x, 5)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-shadowed-by-each-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>Alert1</p><p>Alert2</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-shadowed-by-each-binding/main.svelte",
    "content": "<script>\n\tconst alerts = ['Alert1', 'Alert2'];\n</script>\n\n{#each alerts as alert}\n\t<p>{alert}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-shadowed-by-helpers/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 10 };\n\t},\n\n\thtml: 'potato',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 3;\n\t\tassert.htmlEqual(target.innerHTML, 'potato');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/globals-shadowed-by-helpers/main.svelte",
    "content": "<script>\n\texport let x;\n\n\tconst Math = {\n\t\tmin ( a, b ) {\n\t\t\treturn 'potato';\n\t\t}\n\t};\n</script>\n\n{Math.min(x, 5)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/hash-in-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { links: ['a', 'b', 'c'] };\n\t},\n\n\thtml: `\n\t\t<a href=\"x#a\">x#a</a>\n\t\t<a href=\"x#b\">x#b</a>\n\t\t<a href=\"x#c\">x#c</a>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.links = ['d', 'e', 'f'];\n\n\t\tconst links = [...target.querySelectorAll('a')];\n\n\t\tassert.deepEqual(\n\t\t\t// Vitest/JSDom does prepend the base URL, so we need to strip it\n\t\t\tlinks.map((l) => l.href.slice(l.href.lastIndexOf('/') + 1)),\n\t\t\t['x#d', 'x#e', 'x#f']\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<a href=\"x#d\">x#d</a>\n\t\t\t<a href=\"x#e\">x#e</a>\n\t\t\t<a href=\"x#f\">x#f</a>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/hash-in-attribute/main.svelte",
    "content": "<script>\n\texport let links;\n</script>\n\n{#each links as link}\n\t<a href=\"x#{link}\">x#{link}</a>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-detached-in-dynamic-component/A.svelte",
    "content": "<svelte:head>\n\t<meta name=\"description\" content=\"A\"/>\n</svelte:head>\n\nA"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-detached-in-dynamic-component/B.svelte",
    "content": "<svelte:head>\n\t<meta name=\"description\" content=\"B\"/>\n</svelte:head>\n\nB"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-detached-in-dynamic-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\tA\n\t`,\n\n\ttest({ assert, component, window }) {\n\t\tcomponent.x = false;\n\n\t\tconst meta = window.document.querySelectorAll('meta');\n\n\t\tassert.equal(meta.length, 1);\n\t\tassert.equal(meta[0].name, 'description');\n\t\tassert.equal(meta[0].content, 'B');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-detached-in-dynamic-component/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\texport let x = true;\n</script>\n\n<svelte:component this=\"{x ? A : B}\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-if-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { condition: false };\n\t},\n\n\ttest({ assert, component, window }) {\n\t\tassert.equal(window.document.title, '');\n\n\t\tcomponent.condition = true;\n\t\tassert.equal(window.document.title, 'woo!!!');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-if-block/main.svelte",
    "content": "<script>\n\texport let condition;\n</script>\n\n<svelte:head>\n\t{#if condition}\n\t\t<title>woo!!!</title>\n\t{/if}\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-if-else-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { condition: false };\n\t},\n\n\ttest({ assert, component, window }) {\n\t\tassert.equal(window.document.title, '');\n\t\tassert.equal(Boolean(window.document.getElementById('meta')), true);\n\n\t\tcomponent.condition = true;\n\t\tassert.equal(window.document.title, 'woo!!!');\n\t\tassert.equal(window.document.getElementById('meta'), null);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-if-else-block/main.svelte",
    "content": "<script>\n\texport let condition;\n</script>\n\n<svelte:head>\n\t{#if condition}\n\t\t<title>woo!!!</title>\n\t{:else}\n\t\t<meta id=\"meta\" name=\"title\" content=\"woo!!!\"/>\n\t{/if}\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-if-else-raw-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nconst foo = '<script type=\"application/json\">{ \"foo\": \"true\" }</script>';\nconst bar = '<script type=\"application/json\">{ \"bar\": \"true\" }</script>';\n\nexport default test({\n\tget props() {\n\t\treturn { condition: false, foo, bar };\n\t},\n\n\ttest({ assert, component, window }) {\n\t\tassert.equal(window.document.head.innerHTML.includes(foo), false);\n\t\tassert.equal(window.document.head.innerHTML.includes(bar), true);\n\n\t\tcomponent.condition = true;\n\t\tassert.equal(window.document.head.innerHTML.includes(foo), true);\n\t\tassert.equal(window.document.head.innerHTML.includes(bar), false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-if-else-raw-dynamic/main.svelte",
    "content": "<script>\n\texport let condition, foo, bar;\n</script>\n\n<svelte:head>\n\t{#if condition}\n\t\t{@html foo}\n\t{:else}\n\t\t{@html bar}\n\t{/if}\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-raw-dynamic/Bar.svelte",
    "content": "<script>\n\texport let bar;\n</script>\n\n<svelte:head>\n\t<meta id=\"meta\" name=\"title\" content=\"bar!!!\"/>\n\t{#if true}\n\t\t{@html bar}\n\t{/if}\n\t<title>bar!!!</title>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-raw-dynamic/Foo.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<svelte:head>\n\t{@html foo}\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-raw-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nconst foo = '<script type=\"application/json\">{ \"foo\": \"true\" }</script>';\nconst bar = '<script type=\"application/json\">{ \"bar\": \"true\" }</script>';\n\nexport default test({\n\tget props() {\n\t\treturn { condition: 1, foo, bar };\n\t},\n\n\ttest({ assert, component, window }) {\n\t\tassert.equal(window.document.head.innerHTML.includes(foo), true);\n\n\t\tcomponent.condition = 3;\n\t\tassert.equal(window.document.head.innerHTML.includes(foo), false);\n\n\t\tcomponent.condition = 2;\n\t\tassert.equal(window.document.title, 'bar!!!');\n\t\tassert.equal(window.document.head.innerHTML.includes(bar), true);\n\t\tassert.equal(Boolean(window.document.getElementById('meta')), true);\n\n\t\tcomponent.condition = 3;\n\t\tassert.equal(window.document.head.innerHTML.includes(bar), false);\n\t\tassert.equal(window.document.getElementById('meta'), null);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-raw-dynamic/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\timport Bar from './Bar.svelte';\n\n\texport let condition, foo, bar;\n</script>\n\n{#if condition === 1}\n\t<Foo {foo} />\n{:else if condition === 2}\n\t<Bar {bar} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { adjective: 'custom' };\n\t},\n\n\ttest({ assert, component, window }) {\n\t\tassert.equal(window.document.title, 'a custom title');\n\n\t\tcomponent.adjective = 'different';\n\t\tassert.equal(window.document.title, 'a different title');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-dynamic/main.svelte",
    "content": "<script>\n\texport let adjective;\n</script>\n\n<svelte:head>\n\t<title>a {adjective} title</title>\n\t<meta name='twitter:creator' content='@sveltejs'>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-dynamic-simple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 'A Title' };\n\t},\n\n\ttest({ assert, component, window }) {\n\t\tassert.equal(window.document.title, 'A Title');\n\n\t\tcomponent.foo = 'Also A Title';\n\t\tassert.equal(window.document.title, 'Also A Title');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-dynamic-simple/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<svelte:head>\n\t<title>{foo}</title>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, window }) {\n\t\tassert.equal(window.document.title, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-empty/main.svelte",
    "content": "<svelte:head>\n\t<title></title>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, window }) {\n\t\tassert.equal(window.document.title, 'changed');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-static/main.svelte",
    "content": "<svelte:head>\n\t<title>changed</title>\n\t<meta name='twitter:creator' content='@sveltejs'>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-static-dynamic-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, window }) {\n\t\tassert.equal(window.document.title, 'changed');\n\n\t\tconst meta = window.document.head.querySelector('meta');\n\t\tassert.htmlEqual(meta?.outerHTML || '', `<meta name='twitter:creator' content='@sveltejs'>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/head-title-static-dynamic-element/main.svelte",
    "content": "<script>\n\tlet x = 'sveltejs'\n</script>\n\n<svelte:head>\n\t<title>changed</title>\n\t<meta name='twitter:creator' content='@{x}'>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/hello-world/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\thtml: '<h1>Hello world!</h1>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.name = 'everybody';\n\t\tassert.htmlEqual(target.innerHTML, '<h1>Hello everybody!</h1>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/hello-world/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<h1>Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/helpers/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>sdrawkcab</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/helpers/main.svelte",
    "content": "<script>\n\tfunction reverse(str) {\n\t\tlet reversed = '';\n\t\tlet i = str.length;\n\t\twhile ( i-- ) reversed += str[i];\n\t\treturn reversed;\n\t}\n</script>\n\n<p>{reverse('backwards')}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/helpers-not-call-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>1,4,9</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/helpers-not-call-expression/main.svelte",
    "content": "<script>\n\texport let numbers = [ 1, 2, 3 ];\n\n\tconst square = num => num * num;\n</script>\n\n<p>{numbers.map(square)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>*</span>\n\t\t<span>*</span>\n\t\t<span>*</span>\n\t\t<span>*</span>\n\t\t<span>*</span>\n\n\t\t<span></span>\n\t\t<span>A</span>\n\t\t<span>€</span>\n\t\t<span>€</span>\n\n\t\t<span>&amp;stringnotanentity;</span>\n\n\t\t<span>different &amp;rect and ▭</span>\n\n\t\t<span>©otherstring</span>\n\n\t\t<span>©=otherstring</span>\n\n\t\t<span>©=otherstring</span>\n\n\t\t<span>©123</span>\n\n\t\t<span>Ÿotherstring</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities/main.svelte",
    "content": "<span>&ast;</span>\n<span>&midast;</span>\n<span>&#x0002A;</span>\n<span>&#x0002A</span>\n<span>&#42;</span>\n\n<span>&#10;</span>\n<span>&#65;</span>\n<span>&#128;</span>\n<span>&#128</span>\n\n<span>&stringnotanentity;</span>\n\n<span>different &rect and &rect;</span>\n\n<span>&copyotherstring</span>\n\n<span>&copy=otherstring</span>\n\n<span>&copy;=otherstring</span>\n\n<span>&copy123</span>\n\n<span>&#x9fotherstring</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-alongside-expressions/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>&lt;p&gt; &amp; &gt; &lt;/p&gt;</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-alongside-expressions/main.svelte",
    "content": "<script>\n\texport let str = '>';\n</script>\n\n<div>&lt;p&gt; &amp; {str} &lt;/p&gt;</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span data-xxx=\"&amp;copy=value\" style=\"&amp;copy=value\"></span>\n\n\t\t<span data-xxx=\"&amp;copy=value\" style=\"&amp;copy=value\"></span>\n\n\t\t<span data-xxx=\"©\" style=\"©\"></span>\n\n\t\t<span data-xxx=\"©=value\" style=\"©=value\"></span>\n\n\t\t<span data-xxx=\"&amp;copyotherstring=value\" style=\"&amp;copyotherstring=value\"></span>\n\n\t\t<span data-xxx=\"&amp;copy123=value\" style=\"&amp;copy123=value\"></span>\n\n\t\t<span data-xxx=\"&amp;rect=value\" style=\"&amp;rect=value\"></span>\n\n\t\t<span data-xxx=\"▭=value\" style=\"▭=value\"></span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-attributes/main.svelte",
    "content": "<span data-xxx=\"&copy=value\" style=\"&copy=value\"></span>\n\n<span data-xxx=\"&copy=value\" style=\"&copy=value\"></span>\n\n<span data-xxx=\"&copy\" style=\"&copy\"></span>\n\n<span data-xxx=\"&copy;=value\" style=\"&copy;=value\"></span>\n\n<span data-xxx=\"&copyotherstring=value\" style=\"&copyotherstring=value\"></span>\n\n<span data-xxx=\"&copy123=value\" style=\"&copy123=value\"></span>\n\n<span data-xxx=\"&rect=value\" style=\"&rect=value\"></span>\n\n<span data-xxx=\"&rect;=value\" style=\"&rect;=value\"></span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-component-slot/Component.svelte",
    "content": "<div>\n\t<slot />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-component-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>&nbsp;</div>\n\n\t\t<div>\n\t\t\t<span>&nbsp;</span>\n\t\t</div>\n\n\t\t<div>&nbsp;</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-component-slot/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte'\n</script>\n\n<Component>&nbsp;</Component>\n\n<Component>\n\t<span>&nbsp;</span>\n</Component>\n\n<Component>\n\t{@html \"&nbsp;\"}\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-elements/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>this &lt;em&gt;should&lt;/em&gt; not be <span>&lt;strong&gt;bold&lt;/strong&gt;</span></p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-entities-inside-elements/main.svelte",
    "content": "<p>this &lt;em&gt;should&lt;/em&gt; not be <span>&lt;strong&gt;bold&lt;/strong&gt;</span></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-non-entities-inside-elements/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>'foo'<span></span></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/html-non-entities-inside-elements/main.svelte",
    "content": "<div>'foo'<span></span></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\thtml: '<p>i am visible</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(target.innerHTML, '<p>i am visible</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block/main.svelte",
    "content": "<script>\n\texport let visible;\n</script>\n\n{#if visible}\n\t<p>i am visible</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-component-store-function-conditionals/Widget.svelte",
    "content": "<p>OK</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-component-store-function-conditionals/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>OK</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-component-store-function-conditionals/main.svelte",
    "content": "<script>\n\timport {writable} from 'svelte/store';\n\timport Widget from './Widget.svelte';\n\tlet a = (writable({}));\n\tlet b = () => true;\n</script>\n<!-- if (reactive && non-reactive) -->\n{#if $a || b() }\n\t\t<Widget></Widget>\n{:else}\n\t<pre>fail</pre>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-component-without-outro/Widget.svelte",
    "content": "<div>A wild component appears</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-component-without-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true };\n\t},\n\n\thtml: '<div>A wild component appears</div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-component-without-outro/main.svelte",
    "content": "<script>\n\texport let foo;\n\n\timport Widget from './Widget.svelte';\n</script>\n\n{#if foo}\n\t<Widget/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-compound-outro-no-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'blah blah blah blah'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-compound-outro-no-dependencies/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst foo = writable(true);\n</script>\n\n{#if $foo}\n\tblah\n{:else}\n\t{#if bar()}\n\t\t<Bar/>\n\t{/if}\n{/if}\n\n{#if $foo}\n\tblah\n{:else}\n\t{#if bar}\n\t\t<Baz/>\n\t{/if}\n{/if}\n\n{#if $foo}\n\tblah\n{:else if bar()}\n\t<Bar/>\n{/if}\n\n{#if $foo}\n\tblah\n{:else if bar}\n\t<Bar/>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-conservative-update/_config.js",
    "content": "import { test } from '../../test';\n\nlet count = 0;\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tfoo: 'potato',\n\t\t\tfn: () => {\n\t\t\t\tcount += 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\t},\n\n\thtml: '<p>potato</p>',\n\n\tbefore_test() {\n\t\tcount = 0;\n\t},\n\ttest({ assert, component, target }) {\n\t\tassert.equal(count, 1);\n\n\t\tcomponent.foo = 'soup';\n\t\tassert.equal(count, 1);\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>soup</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-conservative-update/main.svelte",
    "content": "<script>\n\texport let fn;\n\texport let foo;\n</script>\n\n{#if fn()}\n\t<p>{foo}</p>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true, bar: false };\n\t},\n\n\thtml: `\n\t\t<p>foo</p>\n\t\t<p>not bar</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>not foo</p>\n\t\t\t<p>not bar</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.bar = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>not foo</p>\n\t\t\t<p>bar</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>foo</p>\n\t\t\t<p>bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n</script>\n\n{#if foo}\n\t<p>foo</p>\n{:else}\n\t<p>not foo</p>\n{/if}\n\n{#if bar}\n\t<p>bar</p>\n{:else}\n\t<p>not bar</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-conservative-update/_config.js",
    "content": "import { test } from '../../test';\n\nlet a = true;\nlet count_a = 0;\nlet count_b = 0;\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tfoo: 'potato',\n\t\t\tfn: () => {\n\t\t\t\tcount_a += 1;\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tother_fn: () => {\n\t\t\t\tcount_b += 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\t},\n\n\thtml: '<p>potato</p>',\n\n\tbefore_test() {\n\t\ta = true;\n\t\tcount_a = 0;\n\t\tcount_b = 0;\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tassert.equal(count_a, 1);\n\t\tassert.equal(count_b, 0);\n\n\t\ta = false;\n\t\tcomponent.foo = 'soup';\n\t\tassert.equal(count_a, 2);\n\t\tassert.equal(count_b, 1);\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>SOUP</p>');\n\n\t\tcomponent.foo = 'salad';\n\t\tassert.equal(count_a, 3);\n\t\tassert.equal(count_b, 1);\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>SALAD</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-conservative-update/main.svelte",
    "content": "<script>\n\texport let fn;\n\texport let other_fn;\n\texport let foo;\n</script>\n\n{#if fn(foo)}\n\t<p>{foo}</p>\n{:else if other_fn()}\n\t<p>{foo.toUpperCase()}</p>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-in-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { array: [true, false] };\n\t},\n\thtml: `\n\t\t<div>foo</div>\n\t\t<div>bar</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-in-each/main.svelte",
    "content": "<script>\n\texport let array;\n</script>\n\n{#each array as item}\n\t{#if item}\n\t\t<div>foo</div>\n\t{:else}\n\t\t<div>bar</div>\n\t{/if}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-partial-outro/Foo.svelte",
    "content": "foo"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-partial-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 1, y: false };\n\t},\n\n\thtml: `\n\t\t<span>1</span>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 2;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>2</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-partial-outro/main.svelte",
    "content": "<script>\n\texport let y = false;\n\texport let x = 'x';\n\n\timport Foo from './Foo.svelte';\n</script>\n\n{#if y}\n\t<Foo/>\n{:else}\n\t<span>{x}</span>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\n\t\tbtn2.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Toggle foo</button>\n\t\t\t<button>Toggle bar</button>\n\t\t\t<hr>\n\t\t\tfoo: false, bar: true\n\t\t\t<hr>\n\t\t\tbar!\n\t\t`\n\t\t);\n\n\t\tbtn1.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Toggle foo</button>\n\t\t\t<button>Toggle bar</button>\n\t\t\t<hr>\n\t\t\tfoo: true, bar: true\n\t\t\t<hr>\n\t\t\tfoo!\n\t\t`\n\t\t);\n\n\t\tbtn2.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Toggle foo</button>\n\t\t\t<button>Toggle bar</button>\n\t\t\t<hr>\n\t\t\tfoo: true, bar: false\n\t\t\t<hr>\n\t\t\tfoo!\n\t\t`\n\t\t);\n\n\t\tbtn1.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Toggle foo</button>\n\t\t\t<button>Toggle bar</button>\n\t\t\t<hr>\n\t\t\tfoo: false, bar: false\n\t\t\t<hr>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-else-update/main.svelte",
    "content": "<script>\n\tlet foo = false\n\tlet bar = [false];\n</script>\n\n<button on:click={() => foo = !foo}>\n\tToggle foo\n</button>\n<button on:click={() => bar[0] = !bar[0]}>\n\tToggle bar\n</button>\n\n<hr>\n{@html `foo: ${foo}, bar: ${bar.every(x => x)}`}\n<hr>\n\n{#if foo}\n\tfoo!\n{:else if bar.every(x => x)}\n\tbar!\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-elseif/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 11 };\n\t},\n\n\thtml: `\n\t\t<p>x is greater than 10</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 4;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>x is less than 5</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.x = 6;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>x is between 5 and 10</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-elseif/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n{#if x > 10}\n\t<p>x is greater than 10</p>\n{:else if x < 5}\n\t<p>x is less than 5</p>\n{:else}\n\t<p>x is between 5 and 10</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-elseif-no-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 11 };\n\t},\n\n\thtml: `\n\t\t<p>x is greater than 10</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 4;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>x is less than 5</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.x = 6;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-elseif-no-else/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n{#if x > 10}\n\t<p>x is greater than 10</p>\n{:else if x < 5}\n\t<p>x is less than 5</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-elseif-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 11 };\n\t},\n\n\thtml: `\n\t\tbefore-if-after\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 4;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore-elseif-after\n\t\t`\n\t\t);\n\n\t\tcomponent.x = 6;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore-else-after\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-elseif-text/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\nbefore-{#if x > 10}if{:else if x < 5}elseif{:else}else{/if}-after\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>two is greater than one</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-expression/main.svelte",
    "content": "{#if 2 > 1}\n\t<p>two is greater than one</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-first/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false };\n\t},\n\n\thtml: '<div><div>before me</div></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div><div>i am visible</div><div>before me</div></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-first/main.svelte",
    "content": "<script>\n\texport let visible;\n</script>\n\n<div>\n\t{#if visible}\n\t\t<div>i am visible</div>\n\t{/if}\n\t<div>before me</div>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-no-outro-else-with-outro/Widget.svelte",
    "content": "<div>A wild component appears</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-no-outro-else-with-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tx: 'x'\n\t},\n\thtml: `\n\t\t<div>A wild component appears</div>\n\t\t<p>x</p>\n\t\t<input type=text>\n\t`,\n\n\tssrHtml: `\n\t\t<div>A wild component appears</div>\n\t\t<p>x</p>\n\t\t<input type=text value=x>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 'y';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>A wild component appears</div>\n\t\t\t<p>y</p>\n\t\t\t<input type=text>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-no-outro-else-with-outro/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let x = 'x';\n\n\timport Widget from './Widget.svelte';\n</script>\n\n{#if foo}\n\t<p>foo</p>\n{:else}\n\t<Widget/>\n\t<p>{x}</p>\n\t<input type=\"text\" bind:value={x} />\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-or/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: true, b: false };\n\t},\n\n\thtml: '<p>i am visible</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t\tcomponent.b = true;\n\t\tassert.htmlEqual(target.innerHTML, '<p>i am visible</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-or/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n</script>\n\n{#if a || b}\n\t<p>i am visible</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-computed-function/Foo.svelte",
    "content": "foo"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-computed-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true };\n\t},\n\n\thtml: 'foo',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = false;\n\t\tassert.htmlEqual(target.innerHTML, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-computed-function/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte'\n  export let foo = true\n\t$: bar = () => true\n</script>\n\n{#if foo}\n\t<Foo />\n{:else if bar()}\n\tbar\n{:else}\n\telse\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-nested-else/Component.svelte",
    "content": "<div></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-nested-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ component }) {\n\t\t// Would cause \"TypeError: Cannot read property 'o' of undefined\"\n\t\tcomponent.foo = false;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-nested-else/main.svelte",
    "content": "<script>\n\texport let foo = true;\n\n\timport Component from './Component.svelte';\n</script>\n\n{#if foo}\n\t{#if false}\n\t\t<Component/>\n\t{:else if false}\n\t\t<Component/>\n\t{/if}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-unique-select-block-type/Component.svelte",
    "content": "<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-unique-select-block-type/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div></div>\n\t\t<div></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-outro-unique-select-block-type/main.svelte",
    "content": "<script>\n\texport let foo = true;\n\n\timport Component from './Component.svelte';\n</script>\n\n{#if foo}\n\t<Component/>\n{:else}\n\t<Component/>\n{/if}\n\n{#if foo}\n\t<div></div>\n{:else}\n\t<div></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-dynamic-contents/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 42 };\n\t},\n\n\thtml: '<p>42</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = 43;\n\t\tassert.htmlEqual(target.innerHTML, '<p>43</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-dynamic-contents/main.svelte",
    "content": "<script>\n\texport let foo;\n\n\tconst show = () => true;\n</script>\n\n{#if show()}\n\t<p>{foo}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-else/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'eee'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-else/main.svelte",
    "content": "{#if \"Eva\".startsWith('E')}\n\teee\n{:else}\n\trrr\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-else-and-outros/EEE.svelte",
    "content": "eee"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-else-and-outros/RRR.svelte",
    "content": "rrr"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-else-and-outros/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'eee'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-else-and-outros/main.svelte",
    "content": "<script>\n\timport EEE from './EEE.svelte';\n\timport RRR from './RRR.svelte';\n</script>\n\n{#if \"Eva\".startsWith('E')}\n\t<EEE/>\n{:else}\n\t<RRR/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-elseif-else-and-outros/RRR.svelte",
    "content": "rrr"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-elseif-else-and-outros/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'eee'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-static-with-elseif-else-and-outros/main.svelte",
    "content": "<script>\n\timport RRR from './RRR.svelte';\n\n\texport let x;\n</script>\n\n{#if \"Eva\".startsWith('E')}\n\teee\n{:else if x}\n  def\n{:else}\n\t<RRR/>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-widget/Widget.svelte",
    "content": "<p>Widget</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-widget/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\thtml: `\n\t\tbefore\n\t\t<p>Widget</p>\n\t\tafter\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\n\t\t\tafter\n\t\t`\n\t\t);\n\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbefore\n\t\t\t<p>Widget</p>\n\t\t\tafter\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-block-widget/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let visible;\n</script>\n\nbefore\n{#if visible}\n\t<Widget />\n{/if}\nafter\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-in-keyed-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: [\n\t\t\t\t{ id: 1, name: 'one' },\n\t\t\t\t{ id: 2, name: 'two' }\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<ul>\n\t\t\t<li>one</li>\n\t\t\t<li>two</li>\n\t\t</ul>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/if-in-keyed-each/main.svelte",
    "content": "<script>\n\texport let items;\n</script>\n\n<ul>\n\t{#each items as item (item.id)}\n\t\t{#if item.id}\n\t\t\t<li>{item.name}</li>\n\t\t{/if}\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-attribute/_config.js",
    "content": "import { test } from '../../test';\nimport counter from './counter.js';\n\nexport default test({\n\t// TODO worth it to fix? arguably it's correct to always call the function, or rather it's undefined behavior as you shouldn't rely on render side effects\n\t// to fix it we would need to create many more signals (computeds) for this, or introduce some kind of dirty bitmask\n\tget props() {\n\t\treturn { x: 1, y: 2 };\n\t},\n\n\thtml: `\n\t\t<p>1</p>\n\t\t<p class='2'></p>\n\t`,\n\n\ttest({ assert, component }) {\n\t\tcounter.count = 0;\n\n\t\tcomponent.x = 3;\n\t\tassert.equal(counter.count, 0);\n\n\t\tcomponent.x = 4;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\n\t\tcomponent.x = 5;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-attribute/counter.js",
    "content": "export default {\n\tcount: 0\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-attribute/main.svelte",
    "content": "<script>\n\timport counter from './counter.js';\n\n\texport let x;\n\texport let y;\n\n\tfunction myHelper(value) {\n\t\tcounter.count += 1;\n\t\treturn value;\n\t}\n</script>\n\n<p>{x}</p>\n<p class='{myHelper(y)}'></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-attribute-compound/_config.js",
    "content": "import { test } from '../../test';\nimport counter from './counter.js';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 1, y: 2 };\n\t},\n\n\thtml: `\n\t\t<p>1</p>\n\t\t<p class='-2-'></p>\n\t`,\n\n\ttest({ assert, component }) {\n\t\tcounter.count = 0;\n\n\t\tcomponent.x = 3;\n\t\tassert.equal(counter.count, 0);\n\n\t\tcomponent.x = 4;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\n\t\tcomponent.x = 5;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-attribute-compound/counter.js",
    "content": "export default {\n\tcount: 0\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-attribute-compound/main.svelte",
    "content": "<script>\n\timport counter from './counter.js';\n\n\texport let x;\n\texport let y;\n\n\tfunction myHelper(value) {\n\t\tcounter.count += 1;\n\t\treturn value;\n\t}\n</script>\n\n<p>{x}</p>\n<p class='-{myHelper(y)}-'></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-raw/_config.js",
    "content": "import { test } from '../../test';\nimport counter from './counter.js';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 1, y: 2 };\n\t},\n\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t`,\n\n\ttest({ assert, component }) {\n\t\tcounter.count = 0;\n\n\t\tcomponent.x = 3;\n\t\tassert.equal(counter.count, 0);\n\n\t\tcomponent.x = 4;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\n\t\tcomponent.x = 5;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-raw/counter.js",
    "content": "export default {\n\tcount: 0\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-raw/main.svelte",
    "content": "<script>\n\timport counter from './counter.js';\n\n\texport let x;\n\texport let y;\n\n\tfunction myHelper(value) {\n\t\tcounter.count += 1;\n\t\treturn value;\n\t}\n</script>\n\n<p>{x}</p>\n<p>{@html myHelper(y)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-tag/_config.js",
    "content": "import { test } from '../../test';\nimport counter from './counter.js';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 1, y: 2 };\n\t},\n\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t`,\n\n\ttest({ assert, component }) {\n\t\tcounter.count = 0;\n\n\t\tcomponent.x = 3;\n\t\tassert.equal(counter.count, 0);\n\n\t\tcomponent.x = 4;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\n\t\tcomponent.x = 5;\n\t\tcomponent.y = 5;\n\t\tassert.equal(counter.count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-tag/counter.js",
    "content": "export default {\n\tcount: 0\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ignore-unchanged-tag/main.svelte",
    "content": "<script>\n\timport counter from './counter.js';\n\n\texport let x;\n\texport let y;\n\n\tfunction myHelper(value) {\n\t\tcounter.count += 1;\n\t\treturn value;\n\t}\n</script>\n\n<p>{x}</p>\n<p>{myHelper(y)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-before-after-update/ImmutableTodo.svelte",
    "content": "<svelte:options immutable />\n\n<script>\n\timport { afterUpdate, beforeUpdate } from 'svelte';\n\n\texport let todo;\n\n\tlet btn;\n\n\t$: console.log('$:'+ todo.id);\n\n\tbeforeUpdate(() => {\n\t\tconsole.log('beforeUpdate:'+ todo.id);\n\t})\n\n\tafterUpdate(() => {\n\t\tconsole.log('afterUpdate:'+ todo.id);\n\t});\n</script>\n\n<button bind:this={btn} on:click>\n\t{todo.done ? 'X' : ''}\n\t{todo.id}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-before-after-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\timmutable: true,\n\n\thtml: '<button>1</button> <button>2</button> <button>3</button>',\n\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, [\n\t\t\t'$:1',\n\t\t\t'beforeUpdate:1',\n\t\t\t'$:2',\n\t\t\t'beforeUpdate:2',\n\t\t\t'$:3',\n\t\t\t'beforeUpdate:3',\n\t\t\t'afterUpdate:1',\n\t\t\t'afterUpdate:2',\n\t\t\t'afterUpdate:3',\n\t\t\t'beforeUpdate:1',\n\t\t\t'beforeUpdate:2',\n\t\t\t'beforeUpdate:3'\n\t\t]);\n\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tlogs.length = 0;\n\t\tbutton1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>X 1</button> <button>2</button> <button>3</button>'\n\t\t);\n\t\tassert.deepEqual(logs, ['$:1', 'beforeUpdate:1', 'afterUpdate:1']);\n\n\t\tlogs.length = 0;\n\t\tbutton2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>X 1</button> <button>X 2</button> <button>3</button>'\n\t\t);\n\t\tassert.deepEqual(logs, ['$:2', 'beforeUpdate:2', 'afterUpdate:2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-before-after-update/main.svelte",
    "content": "<script>\n\timport ImmutableTodo from './ImmutableTodo.svelte';\n\n\tlet todos = [\n\t\t{ id: 1, done: false },\n\t\t{ id: 2, done: false },\n\t\t{ id: 3, done: false }\n\t];\n\n\tfunction toggle(id) {\n\t\ttodos = todos.map((todo) => {\n\t\t\tif (todo.id === id) {\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tdone: !todo.done\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn todo;\n\t\t});\n\t}\n</script>\n\n{#each todos as todo}\n\t<ImmutableTodo {todo} on:click={() => toggle(todo.id)} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-each-equals/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\timmutable: true,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Update</button><ul><li>test !!!</li></ul>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-each-equals/main.svelte",
    "content": "<script>\n\tlet items = [{id:1,value: \"test\"}]\n\tconst update = () => {\n\t\tconst clone = items.slice();\n\t\tclone[0].value += \" !!!\";\n\t\titems = clone;\n\t}\n</script>\n\n<button on:click={update} >Update</button>\n\n<ul>\n\t{#each items as item (item.id)}\n\t\t<li>{item.value}</li>\n\t{/each}\n</ul>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-mutate-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\timmutable: true,\n\n\thtml: '<button>0</button> <button>0</button>',\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>0</button> <button>0</button>');\n\n\t\tbutton2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button> <button>2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-mutate-object/main.svelte",
    "content": "<script>\n\tlet name = { value: 0 };\n</script>\n\n<button onclick={() => name.value++}>{name.value}</button>\n<button onclick={() => (name = { value: name.value + 1 })}>{name.value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-nested/Nested.svelte",
    "content": "<script>\n\timport { beforeUpdate, onMount } from 'svelte';\n\n\tlet mounted = false;\n\texport let count = 0;\n\texport let foo = { bar: 'baz' };\n\n\tonMount(() => {\n\t\tmounted = true;\n\t});\n\n\tbeforeUpdate(() => {\n\t\tif (mounted) count += 1;\n\t});\n</script>\n\n<h3>Called {count} times.</h3>\n<p>{foo.bar} {mounted}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\timmutable: true,\n\n\thtml: `\n\t\t<div>\n\t\t\t<h3>Called 1 times.</h3>\n\t\t\t<p>baz true</p>\n\t\t</div>\n\t`,\n\n\tssrHtml: `\n\t\t<div>\n\t\t\t<h3>Called 0 times.</h3>\n\t\t\t<p>baz false</p>\n\t\t</div>`,\n\n\ttest({ assert, component, target }) {\n\t\tconst nested = component.nested;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<h3>Called 1 times.</h3>\n\t\t\t\t<p>baz true</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\t// eslint-disable-next-line no-self-assign\n\t\tnested.foo = nested.foo;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<h3>Called 1 times.</h3>\n\t\t\t\t<p>baz true</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-nested/main.svelte",
    "content": "<script>\n\texport let nested;\n\n\timport Nested from './Nested.svelte';\n</script>\n\n<div>\n\t<Nested bind:this={nested} />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-option/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\timmutable: true,\n\n\thtml: '<div><h3>Called 1 times.</h3></div>',\n\n\ttest({ assert, component, target }) {\n\t\t// eslint-disable-next-line no-self-assign\n\t\tcomponent.foo = component.foo;\n\t\tassert.htmlEqual(target.innerHTML, '<div><h3>Called 1 times.</h3></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-option/main.svelte",
    "content": "<script>\n\texport let count = 0;\n\texport let foo = { bar: 'baz' };\n\n\t$: if (foo) count += 1;\n</script>\n\n<div>\n\t<h3>Called {count} times.</h3>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-svelte-meta/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><h3>Called 1 times.</h3></div>',\n\n\ttest({ assert, component, target }) {\n\t\t// eslint-disable-next-line no-self-assign\n\t\tcomponent.foo = component.foo;\n\t\tassert.htmlEqual(target.innerHTML, '<div><h3>Called 1 times.</h3></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-svelte-meta/main.svelte",
    "content": "<svelte:options immutable/>\n\n<script>\n\texport let count = 0;\n\texport let foo = { bar: 'baz' };\n\n\t$: if (foo) count += 1;\n</script>\n\n<div>\n\t<h3>Called {count} times.</h3>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-svelte-meta-false/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\timmutable: true,\n\n\thtml: '<div><h3>Called 1 times.</h3></div>',\n\n\ttest({ assert, component, target }) {\n\t\t// eslint-disable-next-line no-self-assign\n\t\tcomponent.foo = component.foo;\n\t\tassert.htmlEqual(target.innerHTML, '<div><h3>Called 2 times.</h3></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/immutable-svelte-meta-false/main.svelte",
    "content": "<svelte:options immutable={false}/>\n\n<script>\n\texport let count = 0;\n\texport let foo = { bar: 'baz' };\n\n\t$: if (foo) count += 1;\n</script>\n\n<div>\n\t<h3>Called {count} times.</h3>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/imported-renamed-components/ComponentOne.svelte",
    "content": "One\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/imported-renamed-components/ComponentTwo.svelte",
    "content": "Two\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/imported-renamed-components/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'OneTwo'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/imported-renamed-components/main.svelte",
    "content": "<script>\n\timport ComponentOne from './ComponentOne.svelte';\n\timport ComponentTwo from './ComponentTwo.svelte';\n\n\tconst RenamedComponentOne = ComponentOne;\n\tconst RenamedComponentTwo = ComponentTwo;\n</script>\n\n<RenamedComponentOne/><RenamedComponentTwo/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/initial-state-assign/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { bar: 'bar' };\n\t},\n\thtml: `\n\t\t\"foo\"\n\t\t\"bar\"\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/initial-state-assign/main.svelte",
    "content": "<script>\n\texport let foo = 'foo';\n\texport let bar;\n</script>\n\n{JSON.stringify(foo)}\n{JSON.stringify(bar)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 1, b: 2 };\n\t},\n\thtml: '<p>1 + 2 = 3</p>',\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 3;\n\t\tcomponent.b = 4;\n\t\tassert.htmlEqual(target.innerHTML, '<p>3 + 4 = 7</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n</script>\n\n<p>{a} + {b} = {a + b}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div><svg aria-hidden=\"true\" height=\"14\" width=\"13\"><use xlink:href=\"test#done\"></use></svg></div`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions-3/main.svelte",
    "content": "<script>\n\timport { sprites } from './sprites.js'\n</script>\n\n<div>\n\t<svg width=\"13\" height=\"14\" aria-hidden=\"true\">\n    <use xlink:href=\"{sprites['a']}#done\"></use>\n  </svg>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions-3/sprites.js",
    "content": "export const sprites = {\n\ta: 'test'\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions-subtree/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span class=\"red\">A</span>\\n<div><span class=\"red\">B</span></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-expressions-subtree/main.svelte",
    "content": "<span class={(() => 'red')()}>A</span>\n<div>\n  <span class={(() => 'red')()}>B</span>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div style=\"color: red;\"></div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tconst styles = window.getComputedStyle(div);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style/main.svelte",
    "content": "<div style=\"color: red;\"></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-become-undefined/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tassert.htmlEqual(target.innerHTML, '<div style=\"background: red;\"></div>');\n\t\tdiv.dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<div style=\"\"></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-become-undefined/main.svelte",
    "content": "<script>\n\tlet bg = \"red\";\n\n\tconst handle = () => {\n\t\t\tbg = undefined;\n\t};\n</script>\n\n<div style:background={bg} on:click={handle}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p style=\"color: red;\"></p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive/main.svelte",
    "content": "<script>\n\texport let myColor = \"red\";\n</script>\n\n<div>\n\t<p style:color={myColor}></p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-and-style-attr/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"height: 40px; color: red;\"></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t\tassert.equal(styles.height, '40px');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-and-style-attr/main.svelte",
    "content": "<script>\n\texport let color = 'red';\n</script>\n\n<p style=\"height: 40px;\" style:color={color}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-and-style-attr-merged/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"height: 40px; color: red;\"></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t\tassert.equal(styles.height, '40px');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-and-style-attr-merged/main.svelte",
    "content": "<script>\n\texport let color = 'red';\n</script>\n\n<p style=\"height: 40px; color: blue;\" style:color={color}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-css-vars/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p style=\"--border-color: red;\"></p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.myColor = 'blue';\n\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"--border-color: blue;\"></p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-css-vars/main.svelte",
    "content": "<script>\n\texport let myColor = \"red\";\n</script>\n\n<p style:--border-color={myColor}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: red;\"></p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.myColor = 'blue';\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"color: blue;\"></p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-dynamic/main.svelte",
    "content": "<script>\n\texport let myColor = \"red\";\n</script>\n\n<p style:color={myColor}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div style=\"--css-variable: &quot; onload=&quot;alert('uhoh')&quot; data-nothing=&quot;not important;\"></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.attack = '\" onload=\"alert(\\'uhoh2\\')\" data-nothing=\"not important';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div style=\"--css-variable: &quot; onload=&quot;alert('uhoh2')&quot; data-nothing=&quot;not important;\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-escape/main.svelte",
    "content": "<script>\n  export let attack = '\" onload=\"alert(\\'uhoh\\')\" data-nothing=\"not important';\n</script>\n\n<div style:--css-variable={attack}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-falsy-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"--a: 0;\"></p>\n\t\t<p style=\"--b: false;\"></p>\n\t\t<p></p>\n\t\t<p></p>\n\t\t<p></p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-falsy-value/main.svelte",
    "content": "<p style:--a={0}></p>\n<p style:--b={false}></p>\n<p style:--c=\"\"></p>\n<p style:--d={undefined}></p>\n<p style:--e={null}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-multiple/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: red; width: 65px; font-weight: 700;\"></p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tlet styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\n\t\tcomponent.myColor = 'pink';\n\t\tcomponent.width = '100vh';\n\t\tcomponent.absolute = true;\n\t\tcomponent.bold = false;\n\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p style=\"color: pink; width: 100vh; font-weight: 100; position: absolute;\"></p>'\n\t\t);\n\t\tassert.equal(styles.color, 'rgb(255, 192, 203)');\n\t\tassert.equal(styles.width, '100vh');\n\t\tassert.equal(styles.fontWeight, '100');\n\t\tassert.equal(styles.position, 'absolute');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-multiple/main.svelte",
    "content": "<script>\n\texport let myColor = \"red\";\n\texport let width = \"65px\";\n\texport let absolute = false;\n\texport let bold = true;\n</script>\n\n<p\n\tstyle:color={myColor}\n\tstyle:width\n\tstyle:position={absolute ? \"absolute\" : null}\n\tstyle:font-weight={bold ? 700 : 100}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-null-style/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: red;\">red</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-null-style/main.svelte",
    "content": "<p style:color=\"red\" style={null}>red</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-shorthand/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: red;\"></p>\n\t\t<p style=\"color: red;\"></p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst [p1, p2] = target.querySelectorAll('p');\n\n\t\tassert.equal(window.getComputedStyle(p1).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(window.getComputedStyle(p2).color, 'rgb(255, 0, 0)');\n\n\t\tcomponent.color = 'blue';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p style=\"color: blue;\"></p>\n\t\t\t<p style=\"color: blue;\"></p>\n\t\t`\n\t\t);\n\n\t\tassert.equal(window.getComputedStyle(p1).color, 'rgb(0, 0, 255)');\n\t\tassert.equal(window.getComputedStyle(p2).color, 'rgb(0, 0, 255)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-shorthand/main.svelte",
    "content": "<script>\n\texport let color = \"red\";\n</script>\n\n<p style:color></p>\n\n{#each [1] as _}\n\t<p style:color></p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-shorthand-declaration-only/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: red;\"></p>\n\t\t<p style=\"color: red;\"></p>\n\t\t<button></button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [p1, p2] = target.querySelectorAll('p');\n\n\t\tassert.equal(window.getComputedStyle(p1).color, 'rgb(255, 0, 0)');\n\t\tassert.equal(window.getComputedStyle(p2).color, 'rgb(255, 0, 0)');\n\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p style=\"color: green;\"></p>\n\t\t\t<p style=\"color: green;\"></p>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\tassert.equal(window.getComputedStyle(p1).color, 'rgb(0, 128, 0)');\n\t\tassert.equal(window.getComputedStyle(p2).color, 'rgb(0, 128, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-shorthand-declaration-only/main.svelte",
    "content": "<script>\n\tlet color = \"red\";\n\n\tfunction change(){\n\t\tcolor = \"green\";\n\t}\n</script>\n\n<p style:color></p>\n\n{#each [1] as _}\n\t<p style:color></p>\n{/each}\n\n<button on:click={change}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p id=\"my-id\" style=\"width: 65px; color: blue;\"></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(0, 0, 255)');\n\t\tassert.equal(styles.width, '65px');\n\t\tassert.equal(p.id, 'my-id');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread/main.svelte",
    "content": "<p {...{ id: \"my-id\", style: \"width: 65px\" }} style:color=\"blue\"></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread-and-attr/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: green;\"></p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tlet styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(0, 128, 0)');\n\n\t\tcomponent.color = null;\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"\"></p>');\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, '');\n\n\t\tcomponent.spread = { style: 'color: yellow; padding: 30px;' };\n\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"padding: 30px;\"></p>');\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, '');\n\t\tassert.equal(styles.padding, '30px');\n\n\t\tcomponent.spread = {};\n\t\tcomponent.style = 'color: blue; background-color: green;';\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"background-color: green;\"></p>');\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, '');\n\t\tassert.equal(styles.backgroundColor, 'rgb(0, 128, 0)');\n\n\t\tcomponent.color = 'purple';\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"background-color: green; color: purple;\"></p>');\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(128, 0, 128)');\n\t\tassert.equal(styles.backgroundColor, 'rgb(0, 128, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread-and-attr/main.svelte",
    "content": "<script>\n\texport let spread = { style: 'color: red;' };\n\texport let color = 'green';\n\texport let style = 'color: blue;';\n</script>\n\n<p\n\tstyle:color\n\t{style}\n\t{...spread}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread-and-attr-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p></p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread-and-attr-empty/main.svelte",
    "content": "<script>\n\texport let spread = { style: 'color: red;' };\n\texport let color = null;\n\texport let style = 'color: blue';\n</script>\n\n<p\n\tstyle:color\n\t{...spread}\n\t{style}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread-dynamic/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p id=\"my-id\" style=\"width: 65px; color: blue;\"></p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(0, 0, 255)');\n\t\tassert.equal(styles.width, '65px');\n\t\tassert.equal(p.id, 'my-id');\n\n\t\tcomponent.color = 'red';\n\n\t\tassert.htmlEqual(target.innerHTML, '<p id=\"my-id\" style=\"width: 65px; color: red;\"></p>');\n\n\t\tcomponent.obj = { style: 'height: 72px;' };\n\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"height: 72px; color: red;\"></p>');\n\n\t\tcomponent.obj = { style: 'border-radius: 2px; color: orange' };\n\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"border-radius: 2px; color: red;\"></p>');\n\n\t\tcomponent.obj = {};\n\n\t\tassert.htmlEqual(target.innerHTML, '<p style=\"color: red;\"></p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-spread-dynamic/main.svelte",
    "content": "<script>\n  export let color = 'blue';\n  export let obj = { id: 'my-id', style: 'width: 65px' };\n</script>\n<p {...obj} style:color={color}></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-string/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: red;\"></p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-string/main.svelte",
    "content": "<p style:color=\"red\"></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-string-variable/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"color: green; transform: translateX(45px); border: 100px solid pink;\"></p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(0, 128, 0)');\n\t\tassert.equal(styles.transform, 'translateX(45px)');\n\t\tassert.equal(styles.border, '100px solid pink');\n\n\t\tcomponent.translate_x = '100%';\n\t\tcomponent.border_width = 20;\n\t\tcomponent.border_color = 'yellow';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p style=\"color: green; transform: translateX(100%); border: 20px solid yellow;\"></p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-string-variable/main.svelte",
    "content": "<script>\n\texport let translate_x = \"45px\";\n\texport let border_width = 100;\n\texport let border_color;\n</script>\n\n<p style:color={\"green\"} style:transform=\"translateX({translate_x})\" style:border=\"{border_width}px solid {border_color || 'pink'}\"></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-string-variable-kebab-case/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div style=\"background-image: url(https://raw.githubusercontent.com/sveltejs/branding/master/svelte-vertical.png); --css-variable: rgba(0, 0, 0, 1);\"></div>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tconst styles = window.getComputedStyle(div);\n\n\t\tassert.equal(\n\t\t\t// @ts-ignore\n\t\t\tstyles['background-image'],\n\t\t\t'url(https://raw.githubusercontent.com/sveltejs/branding/master/svelte-vertical.png)'\n\t\t);\n\t\tassert.equal(styles.getPropertyValue('--css-variable'), 'rgba(0, 0, 0, 1)');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div style=\"background-image: url(https://raw.githubusercontent.com/sveltejs/branding/master/svelte-vertical.png); --css-variable: rgba(0, 0, 0, 1);\"></div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-string-variable-kebab-case/main.svelte",
    "content": "<script>\n\tlet url =\n\t\t\"https://raw.githubusercontent.com/sveltejs/branding/master/svelte-vertical.png\";\n\n\tlet alpha = 1;\n</script>\n\n<div\n\tstyle:background-image=\"url({url})\"\n\tstyle:--css-variable=\"rgba(0, 0, 0, {alpha})\"\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-update-object-property/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"background-color: green; font-size: 12px;\"></p>\n\t`,\n\n\ttest({ assert, target, window, component }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tconst styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.backgroundColor, 'rgb(0, 128, 0)');\n\t\tassert.equal(styles.fontSize, '12px');\n\n\t\t{\n\t\t\tcomponent.modify = true;\n\t\t\tconst p = target.querySelector('p');\n\t\t\tok(p);\n\t\t\tconst styles = window.getComputedStyle(p);\n\t\t\tassert.equal(styles.backgroundColor, 'rgb(0, 128, 0)');\n\t\t\tassert.equal(styles.fontSize, '50px');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-directive-update-object-property/main.svelte",
    "content": "<script>\n\tlet settings = {\n\t\tfontSize: 12,\n\t\tbg: 'green'\n\t};\n\texport let modify = false;\n\t$: if (modify) {\n\t\tsettings.fontSize = 50;\n\t}\n</script>\n\n<p style:font-size=\"{settings.fontSize}px\" style=\"background-color: {settings.bg}\"></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-important/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p class=\"svelte-y94hdy\" style=\"color: red !important; font-size: 20px !important; opacity: 1;\">red</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tlet styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\t\tassert.equal(styles.fontSize, '20px');\n\n\t\tcomponent.color = 'green';\n\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.equal(styles.color, 'rgb(0, 128, 0)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-important/main.svelte",
    "content": "<script>\n\texport let color = `red`;\n</script>\n\n<p style=\"color: {color} !important; font-size: 20px !important; opacity: 1;\">{color}</p>\n\n<style>\n\tp {\n\t\tcolor: blue !important;\n\t\tfont-size: 10px !important;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-optimisation-bailout/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p style=\"opacity: 0.5; color: red;\">color: red;</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tlet styles = window.getComputedStyle(p);\n\t\tassert.equal(styles.opacity, '0.5');\n\t\tassert.equal(styles.color, 'rgb(255, 0, 0)');\n\n\t\tcomponent.styles = 'font-size: 20px';\n\n\t\tstyles = window.getComputedStyle(p);\n\t\tassert.equal(styles.opacity, '0.5');\n\t\tassert.equal(styles.color, '');\n\t\tassert.equal(styles.fontSize, '20px');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/inline-style-optimisation-bailout/main.svelte",
    "content": "<script>\n\texport let styles = `color: red;`;\n</script>\n\n<p style=\"opacity: 0.5; {styles}\">{styles}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/innerhtml-interpolated-literal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<span class=\"a/42\"/>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/innerhtml-interpolated-literal/main.svelte",
    "content": "<div>\n\t<span class=\"a/{42}\"/>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/innerhtml-with-comments/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>\n\t\t\tStyle:\n\t\t\t<a href=\"https://getbootstrap.com/\" target=\"_blank\">Bootstrap</a>.\n\t\t</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/innerhtml-with-comments/main.svelte",
    "content": "<span>\n\tStyle:\n\t<!-- prettier-ignore -->\n\t<a href=\"https://getbootstrap.com/\" target=\"_blank\">Bootstrap</a>.\n</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/input-list/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input list='suggestions'>\n\t\t<datalist id='suggestions'>\n\t\t\t<option value='foo'></option>\n\t\t\t<option value='bar'></option>\n\t\t\t<option value='baz'></option>\n\t\t</datalist>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/input-list/main.svelte",
    "content": "<input list='suggestions'>\n<datalist id='suggestions'>\n\t<option value='foo'/><option value='bar'/><option value='baz'/>\n</datalist>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-auto-subscription-self-assignment/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: '[]',\n\n\ttest({ assert, component, target }) {\n\t\tflushSync(() => component.go());\n\t\tassert.htmlEqual(target.innerHTML, '[42]');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-auto-subscription-self-assignment/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst foo = writable([]);\n\t$: bar = $foo;\n\texport function go() {\n\t\t$foo.push(42);\n\t\t$foo = $foo;\n\t}\n</script>\n\n{JSON.stringify(bar)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-destructuring/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<button>bar</button>\n\n\t\t<p>x: 0</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\n\t\t\t<p>x: 1</p>\n\t\t`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\n\t\t\t<p>x: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-destructuring/main.svelte",
    "content": "<script>\n\tlet x = 0;\n\n\tfunction foo() {\n\t\t({ x } = { x: 1 });\n\t}\n\n\tfunction bar() {\n\t\t([x] = [2]);\n\t}\n</script>\n\n<button on:click={foo}>foo</button>\n<button on:click={bar}>bar</button>\n\n<p>x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-loop-scope/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<p>x: 0</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<p>x: 42</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-loop-scope/main.svelte",
    "content": "<script>\n\tlet x = 0;\n\n\tfunction foo() {\n\t\t(() => {\n\t\t\tfor (let x = 0; x < 10; x++) {}\n\t\t\tx = 42;\n\t\t})();\n\t}\n</script>\n\n<button on:click={foo}>foo</button>\n\n<p>x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-multiple-assignments/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 0, bar: 0 };\n\t},\n\n\thtml: `\n\t\t<button>click me</button>\n\t\t<p>foo: 0</p>\n\t\t<p>bar: 0</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.foo, 4);\n\t\tassert.equal(component.bar, 2);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<p>foo: 4</p>\n\t\t\t<p>bar: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-multiple-assignments/main.svelte",
    "content": "<script>\n\texport let foo, bar;\n\n\tfunction click() {\n\t\tfoo = 4; bar = 2;\n\t}\n</script>\n\n<button on:click={click}>click me</button>\n\n<p>foo: {foo}</p>\n<p>bar: {bar}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<p>x: 0</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<p>x: 1</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-script-update/main.svelte",
    "content": "<script>\n\tlet x = 0;\n\n\tfunction foo() {\n\t\tx++;\n\t}\n</script>\n\n<button on:click={foo}>foo</button>\n\n<p>x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-destructuring/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<button>bar</button>\n\n\t\t<p>x: 0</p>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\n\t\t\t<p>x: 1</p>\n\t\t`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<button>bar</button>\n\n\t\t\t<p>x: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-destructuring/main.svelte",
    "content": "<script>\n\tlet x = 0;\n</script>\n\n<button on:click=\"{() => ({ x } = { x: 1 })}\">foo</button>\n<button on:click=\"{() => ([x] = [2])}\">bar</button>\n\n<p>x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-loop-scope/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<p>x: 0</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<p>x: 42</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-loop-scope/main.svelte",
    "content": "<script>\n\tlet x = 0;\n</script>\n\n<button on:click=\"{() => {\n\t(() => {\n\t\tfor (let x = 0; x < 10; x++) {}\n\t\tx = 42;\n\t})();\n}}\">foo</button>\n\n<p>x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-multiple-assignments/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 0, bar: 0 };\n\t},\n\n\thtml: `\n\t\t<button>click me</button>\n\t\t<p>foo: 0</p>\n\t\t<p>bar: 0</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.foo, 4);\n\t\tassert.equal(component.bar, 2);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click me</button>\n\t\t\t<p>foo: 4</p>\n\t\t\t<p>bar: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-multiple-assignments/main.svelte",
    "content": "<script>\n\texport let foo, bar;\n</script>\n\n<button on:click=\"{() => { foo = 4; bar = 2; }}\">click me</button>\n\n<p>foo: {foo}</p>\n<p>bar: {bar}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>foo</button>\n\t\t<p>x: 0</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>foo</button>\n\t\t\t<p>x: 1</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-template-update/main.svelte",
    "content": "<script>\n\tlet x = 0;\n</script>\n\n<button on:click=\"{() => x++}\">foo</button>\n\n<p>x: {x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-update-expression/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>0</p>\n\t\t<button>foo++</button>\n\t\t<button>++foo</button>\n\t\t<p>0</p>\n\t\t<button>bar.bar++</button>\n\t\t<button>++bar.bar</button>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst [foo, bar] = target.querySelectorAll('p');\n\t\tconst [button1, button2, button3, button4] = target.querySelectorAll('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton1.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(foo.innerHTML, '1');\n\t\tassert.equal(bar.innerHTML, '0');\n\n\t\tbutton2.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(foo.innerHTML, '2');\n\t\tassert.equal(bar.innerHTML, '0');\n\n\t\tbutton3.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(foo.innerHTML, '2');\n\t\tassert.equal(bar.innerHTML, '1');\n\n\t\tbutton4.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(foo.innerHTML, '2');\n\t\tassert.equal(bar.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/instrumentation-update-expression/main.svelte",
    "content": "<script>\n\tlet foo = 0;\n\tlet bar = { bar: 0 };\n</script>\n\n<p>{foo}</p>\n\n<button on:click={() => foo++}>foo++</button>\n<button on:click={() => ++foo}>++foo</button>\n\n<p>{bar.bar}</p>\n\n<button on:click={() => bar.bar++}>bar.bar++</button>\n<button on:click={() => ++bar.bar}>++bar.bar</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/internal-state/Foo.svelte",
    "content": "<script>\n\tlet internal = 1;\n</script>\n\n<p>internal: {internal}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/internal-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>internal: 1</p>\n\t\t<button>click me</button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click');\n\n\t\tawait button?.dispatchEvent(click);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>internal: 1</p>\n\t\t\t<button>click me</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/internal-state/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\t\n\tlet x = 2;\n</script>\n\n<Foo internal={x}/>\n\n<button on:click=\"{() => x += 1}\">click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/invalidation-in-if-condition/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<button>false 0</button>',\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>true 1</button>');\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>false 1</button>');\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>true 2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/invalidation-in-if-condition/main.svelte",
    "content": "<script>\n\tlet current = { active: false };\n\tlet count = 0;\n\n\tfunction toggle() {\n\t\tif (current.active = !current.active) {\n\t\t\tcount += 1;\n\t\t}\n\t}\n</script>\n\n<button on:click={toggle}>{current.active} {count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/isolated-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\tbefore\n\t\t<h1>after</h1>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/isolated-text/main.svelte",
    "content": "before\n\n<!---->\n\n<h1>after</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>0</div><div>0</div>',\n\tasync test({ assert, component, target }) {\n\t\tlet [div1, div2] = target.querySelectorAll('div');\n\n\t\tcomponent.value = 5;\n\t\tassert.htmlEqual(target.innerHTML, '<div>5</div><div>0</div>');\n\t\tassert.notStrictEqual(div1, target.querySelectorAll('div')[0]);\n\t\tassert.strictEqual(div2, target.querySelectorAll('div')[1]);\n\t\t[div1, div2] = target.querySelectorAll('div');\n\n\t\tcomponent.reactive = 10;\n\t\tassert.htmlEqual(target.innerHTML, '<div>5</div><div>10</div>');\n\t\tassert.strictEqual(div1, target.querySelectorAll('div')[0]);\n\t\tassert.strictEqual(div2, target.querySelectorAll('div')[1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block/main.svelte",
    "content": "<script>\n\texport let value = 0;\n\texport let reactive = 0;\n</script>\n\n{#key value}\n\t<div>{value}</div>\n{/key}\n\n<div>{reactive}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-2/_config.js",
    "content": "import { test } from '../../test';\n\n// with reactive content beside `key`\nexport default test({\n\thtml: '<div>00</div>',\n\tasync test({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tcomponent.reactive = 2;\n\t\tassert.htmlEqual(target.innerHTML, '<div>02</div>');\n\t\tassert.strictEqual(div, target.querySelector('div'));\n\n\t\tcomponent.value = 5;\n\t\tassert.htmlEqual(target.innerHTML, '<div>52</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-2/main.svelte",
    "content": "<script>\n\texport let value = 0;\n\texport let reactive = 0;\n</script>\n\n{#key value}\n\t<div>{value}{reactive}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-3/_config.js",
    "content": "import { test } from '../../test';\n\n// key is not used in the template\nexport default test({\n\thtml: '<div></div>',\n\tasync test({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\n\t\tcomponent.value = 5;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-3/main.svelte",
    "content": "<script>\n\texport let value = 0;\n</script>\n\n{#key value}\n\t<div></div>\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-array/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>1</div>',\n\tasync test({ assert, component, target }) {\n\t\tlet div = target.querySelector('div');\n\t\tawait component.append(2);\n\t\tassert.htmlEqual(target.innerHTML, '<div>1,2</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\n\t\tdiv = target.querySelector('div');\n\n\t\tcomponent.array = [3, 4];\n\t\tassert.htmlEqual(target.innerHTML, '<div>3,4</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-array/main.svelte",
    "content": "<script>\n\texport let array = [1];\n\n\texport function append(value) {\n\t\tarray.push(value);\n\t\tarray = array;\n\t}\n</script>\n\n{#key array}\n\t<div>{array.join(',')}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-array-immutable/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>1</div>',\n\tasync test({ assert, component, target }) {\n\t\tlet div = target.querySelector('div');\n\t\tawait component.append(2);\n\t\tassert.htmlEqual(target.innerHTML, '<div>1</div>');\n\t\tassert.strictEqual(div, target.querySelector('div'));\n\n\t\tdiv = target.querySelector('div');\n\n\t\tcomponent.array = [3, 4];\n\t\tassert.htmlEqual(target.innerHTML, '<div>3,4</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-array-immutable/main.svelte",
    "content": "<svelte:options immutable />\n\n<script>\n\texport let array = [1];\n\n\texport function append(value) {\n\t\tarray.push(value);\n\t\tarray = array;\n\t}\n</script>\n\n{#key array}\n\t<div>{array.join(',')}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-component-slot/Component1.svelte",
    "content": "<slot/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-component-slot/Component2.svelte",
    "content": "<script>\n\timport { onMount } from \"svelte\";\n\n\texport let logs;\n\n\tonMount(() => {\n\t\tlogs.push(\"mount\");\n\t\treturn () => {\n\t\t\tlogs.push(\"unmount\");\n\t\t};\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-component-slot/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {string[]} */\nlet logs = [];\n\nexport default test({\n\thtml: '<button>Reset!</button>',\n\tget props() {\n\t\treturn { logs };\n\t},\n\n\tbefore_test() {\n\t\tlogs = [];\n\t},\n\n\ttest({ assert, target }) {\n\t\tassert.deepEqual(logs, ['mount']);\n\n\t\tconst button = target.querySelector('button');\n\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['mount', 'unmount', 'mount']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-component-slot/main.svelte",
    "content": "<script>\n\timport Component1 from './Component1.svelte'\n\timport Component2 from './Component2.svelte'\n\n\tlet reset = false\n\texport let logs;\n</script>\n\n<Component1>\n\t{#key reset}\n\t\t<Component2 {logs} />\n\t{/key}\n</Component1>\n\n<button on:click={() => reset = !reset}>\n\tReset!\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>000</div>',\n\tasync test({ assert, component, target }) {\n\t\tlet div = target.querySelector('div');\n\t\tcomponent.value = 2;\n\t\tassert.htmlEqual(target.innerHTML, '<div>200</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\n\t\tdiv = target.querySelector('div');\n\n\t\tcomponent.anotherValue = 5;\n\t\tassert.htmlEqual(target.innerHTML, '<div>250</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\n\t\tdiv = target.querySelector('div');\n\n\t\tcomponent.thirdValue = 9;\n\t\tassert.htmlEqual(target.innerHTML, '<div>259</div>');\n\t\tassert.strictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-expression/main.svelte",
    "content": "<script>\n\texport let value = 0;\n\texport let anotherValue = 0;\n\texport let thirdValue = 0;\n</script>\n\n{#key value + anotherValue}\n\t<div>{value}{anotherValue}{thirdValue}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-expression-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<div>3</div>',\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\n\t\tcomponent.mutate();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>5</div>');\n\t\tassert.strictEqual(div, target.querySelector('div'));\n\n\t\tcomponent.reassign();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>7</div>');\n\t\tassert.strictEqual(div, target.querySelector('div'));\n\n\t\tcomponent.changeKey();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>7</div>');\n\t\tassert.notStrictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-expression-2/main.svelte",
    "content": "<script>\n\tlet obj = { key: 1, value: 3 };\n\n\texport function mutate() {\n\t\tobj.value = 5;\n\t}\n\texport function reassign() {\n\t\tobj = { key: 1, value: 7 };\n\t}\n\texport function changeKey() {\n\t\tobj.key = 3;\n\t}\n</script>\n\n{#key obj.key}\n\t<div>{obj.value}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-post-hydrate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div>\n\t<div><span class=\"name\">item 1</span><span>something</span></div>\n\t<div><span class=\"name\">item 2</span><span>something</span></div>\n\t<div><span class=\"name\">item 3</span><span>something</span></div>\n\t</div>\n\t`,\n\ttest({ assert, component, target }) {\n\t\tcomponent.sortById = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>\n\t\t<div><span class=\"name\">item 3</span><span>something</span></div>\n\t\t<div><span class=\"name\">item 2</span><span>something</span></div>\n\t\t<div><span class=\"name\">item 1</span><span>something</span></div>\n\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-post-hydrate/main.svelte",
    "content": "<script>\n  export let sortById = true;\n  let items = [\n    { id: 1, name: \"item 1\", value: 3 },\n    { id: 2, name: \"item 2\", value: 2 },\n    { id: 3, name: \"item 3\", value: 1 },\n  ];\n\n  $: items = items.sort((a, b) => { return sortById ? a.id - b.id : a.value - b.value; });\n</script>\n\n<div>\n  {#each items as item (item.id)}\n  <div>\n    {#if item.name}\n      <span class=\"name\">\n        {item.name}\n      </span>\n    {/if}\n    <span>something</span>\n  </div>\n  {/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>00</div>',\n\tasync test({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tcomponent.anotherValue = 2;\n\t\tassert.htmlEqual(target.innerHTML, '<div>02</div>');\n\t\tassert.strictEqual(div, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-static/main.svelte",
    "content": "<script>\n\tlet value = 0;\n\texport let anotherValue = 0;\n</script>\n\n{#key value}\n\t<div>{value}{anotherValue}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-static-if/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<section>\n\t\t\t<div>Second</div>\n\t\t</section>\n\t\t<button>Click</button>\n\t`,\n\tasync test({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.dispatchEvent(new window.Event('click', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<section>\n\t\t\t\t<div>First</div>\n\t\t\t\t<div>Second</div>\n\t\t\t</section>\n\t\t\t<button>Click</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-static-if/main.svelte",
    "content": "<script>\n\tlet slide = 0;\n\tlet num = false;\n\t\n\tconst changeNum = () => num = !num;\n</script>\n\n<section>\n\t{#key slide}\n\t\t{#if num}\n\t\t\t<div>First</div>\n\t\t{/if}\n\t{/key}\n\t<div>Second</div>\n</section>\n\n<button on:click={changeNum}>Click</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-transition/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>0</div>',\n\tasync test({ assert, component, target, raf }) {\n\t\tcomponent.value = 2;\n\n\t\tconst [div1, div2] = /** @type {NodeListOf<HTMLDivElement & { foo: number; oof: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\tassert.htmlEqual(div1.outerHTML, '<div>0</div>');\n\t\tassert.htmlEqual(div2.outerHTML, '<div>2</div>');\n\n\t\traf.tick(0);\n\n\t\tassert.equal(div1.foo, 1);\n\t\tassert.equal(div1.oof, 0);\n\n\t\tassert.equal(div2.foo, 0);\n\t\tassert.equal(div2.oof, 1);\n\n\t\traf.tick(200);\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>2</div>');\n\t\tassert.equal(div2, target.querySelector('div'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-transition/main.svelte",
    "content": "<script>\n\texport let value = 0;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.foo = t;\n\t\t\t\tnode.oof = u;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#key value}\n\t<div transition:foo>{value}</div>\n{/key}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-transition-global/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<div>0</div><button>toggle</button>',\n\tasync test({ assert, component, target, raf }) {\n\t\tcomponent.value = 2;\n\n\t\tconst [button] = /** @type {NodeListOf<HTMLButtonElement>} */ (\n\t\t\ttarget.querySelectorAll('button')\n\t\t);\n\n\t\traf.tick(0);\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>2</div><button>toggle</button>');\n\n\t\tflushSync(() => {\n\t\t\tbutton.click();\n\t\t});\n\n\t\traf.tick(0);\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-transition-global/main.svelte",
    "content": "<script>\n\texport let value = 0;\n\texport let toggle = true;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.foo = t;\n\t\t\t\tnode.oof = u;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if toggle}\n\t{#key value}\n\t\t<div in:foo|global>{value}</div>\n\t{/key}\n{/if}\n\n<button on:click={() => toggle = !toggle}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-transition-local/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, y: 1 };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tlet div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, undefined);\n\n\t\t// play both in and out transition when changed with `{#key}`\n\t\tcomponent.y = 2;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div><div></div>');\n\t\tconst [leaving, incoming] = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.equal(leaving.foo, 0.5);\n\t\tassert.equal(incoming.foo, 0.5);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tassert.equal(leaving.foo, 0);\n\t\tassert.equal(incoming.foo, 1);\n\n\t\t// do not play out transition when removed by `{#if}`\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t// do not play in transition when added back with `{#if}`\n\t\tcomponent.x = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tdiv = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\tassert.equal(div.foo, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/key-block-transition-local/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\n\tfunction foo(node, _params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#key y}\n\t\t<div transition:foo|local></div>\n\t{/key}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-bind-read-index/Component.svelte",
    "content": "<script>\n\texport let item;\n\tconsole.log(item);\n\titem = 1;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-bind-read-index/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst p = target.querySelector('p');\n\t\tassert.equal(p?.innerHTML, '1');\n\t\tassert.deepEqual(logs, [0]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-bind-read-index/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tconst items = [0];\n</script>\n\n{#each items as item, idx(item)}\n\t<Component bind:item />\n{/each}\n\n<p>{items}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-dev-unique/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\terror: 'each_key_duplicate\\nKeyed each block has duplicate key `1` at indexes 0 and 3'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-dev-unique/main.svelte",
    "content": "<script>\n\tconst array = [1, 2, 3, 1];\n</script>\n\n{#each array as item (item)}\n\t{item}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-dev-unique-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tlet button = target.querySelector('button');\n\n\t\tbutton?.click();\n\n\t\tassert.throws(flushSync, /each_key_duplicate/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-dev-unique-update/main.svelte",
    "content": "<script>\n\tlet data = [\n\t\t[0, 0],\n\t\t[0, 4],\n\t\t[1, 4],\n\t];\n\n\tfunction add() {\n\t\tconst n = [0, 0]\n\t\tdata.push(n);\n\t\tdata = data;\n\t}\n</script>\n\n<button onclick={add}>add</button>\n\n<ul>\n\t\t{#each data as d (d.join(\"\"))}\n\t\t\t<li> {d}</li>\n\t\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-index-same/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '1'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-index-same/main.svelte",
    "content": "{#each [1] as item, i (i)}\n\t{item}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-index-same-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>0</div><div>1</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/keyed-each-index-same-2/main.svelte",
    "content": "{#each [\"a\", \"b\"] as result, i (i)}\n  <div>{i}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/let-directive-and-const-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'foo'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/let-directive-and-const-tag/component.svelte",
    "content": "<slot data='foo'></slot>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/let-directive-and-const-tag/main.svelte",
    "content": "<script>\n    import Component from './component.svelte';\n</script>\n<Component let:data>\n    {@const thing = data}\n    {thing}\n</Component>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-next-tick/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tawait tick();\n\t\tassert.deepEqual(component.snapshots, ['before 0', 'after 1']);\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tawait tick();\n\t\tassert.deepEqual(component.snapshots, ['before 0', 'after 1', 'before 1', 'after 2']);\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tawait tick();\n\t\tassert.deepEqual(component.snapshots, [\n\t\t\t'before 0',\n\t\t\t'after 1',\n\t\t\t'before 1',\n\t\t\t'after 2',\n\t\t\t'before 2',\n\t\t\t'after 2'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-next-tick/main.svelte",
    "content": "<script>\n\timport { tick } from 'svelte';\n\n\texport let snapshots = [];\n\n\tlet count = 0;\n\tlet buttons = [];\n\n\tfunction increment() {\n\t\tcount += 1;\n\t\tlog();\n\t}\n\n\tfunction log() {\n\t\tsnapshots.push(`before ${buttons[0].textContent}`);\n\n\t\ttick().then(() => {\n\t\t\tsnapshots.push(`after ${buttons[0].textContent}`);\n\t\t});\n\t}\n</script>\n\n<button bind:this={buttons[0]} on:click={increment}>{count}</button>\n<button bind:this={buttons[1]} on:click={log}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-onmount-infinite-loop/Child.svelte",
    "content": "Child\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-onmount-infinite-loop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tconst { count } = component;\n\t\tassert.deepEqual(count, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-onmount-infinite-loop/main.svelte",
    "content": "<script>\n\timport { onMount, mount } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet root;\n\texport let count = 0;\n\n\tonMount(() => {\n\t\tif (count < 5) {\n\t\t\tcount++;\n\t\t\tmount(Child, { target: root });\n\t\t}\n\t});\n</script>\n\n<div bind:this={root}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-afterUpdate/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tbefore_test() {\n\t\tconst context = {\n\t\t\tfillStyle: '',\n\t\t\tfillRect() {}\n\t\t};\n\t\t// @ts-ignore\n\t\tHTMLCanvasElement.prototype.getContext = () => {\n\t\t\treturn context;\n\t\t};\n\t},\n\tasync test({ assert, target, component }) {\n\t\tconst canvas = /** @type {HTMLCanvasElement} */ (target.querySelector('canvas'));\n\t\tconst ctx = canvas.getContext('2d');\n\t\tassert.equal(ctx?.fillStyle, 'hsl(0, 100%, 40%)');\n\n\t\tcanvas.click();\n\t\tflushSync();\n\t\tassert.equal(ctx?.fillStyle, 'hsl(10, 100%, 40%)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-afterUpdate/main.svelte",
    "content": "<script>\n\timport { onMount, afterUpdate } from 'svelte';\n\t\n\tlet hue = 0;\n\tlet show_hue = false;\n\tlet canvas;\n\tlet ctx;\n\n\tonMount(() => {\n\t\tctx = canvas.getContext('2d');\n\t});\n\n\tafterUpdate(() => {\n\t\tif (canvas !== null) {\n\t\t\tctx.fillStyle = `hsl(${hue}, 100%, 40%)`;\n\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\n\t\t}\n\t});\n</script>\n\n<canvas bind:this={canvas} on:click={() => hue += 10} />\n<div class=\"info\">\n\t<p>click the canvas</p>\n\t<label>\n\t\t<input type=\"checkbox\" bind:checked={show_hue}> show hue\n\t</label>\n\t{#if show_hue}\n\t\t<p>hue is {hue}</p>\n\t{/if}\n</div>\n\n<style>\n\tcanvas {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground-color: #ddd;\n\t}\n\n\t.info {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 2em;\n\t\tcolor: white;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-afterUpdate2/Child.svelte",
    "content": "<script>\n\timport { beforeUpdate, afterUpdate } from \"svelte\";\n\n\texport let a;\n\texport let b;\n\n\tbeforeUpdate(() => {\n\t\tconsole.log('before');\n\t});\n\n\tbeforeUpdate(()=>{\n\t\tconsole.log(`before ${a}, ${b}`);\n\t});\n\n\tafterUpdate(() => {\n\t\tconsole.log('after');\n\t});\n\n\tafterUpdate(()=>{\n\t\tconsole.log(`after ${a}, ${b}`);\n\t});\n</script>\n\n<p>a: {a}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-afterUpdate2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\t\tok(button1);\n\t\tok(button2);\n\n\t\tbutton1.click();\n\t\tflushSync();\n\n\t\tbutton2.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'before',\n\t\t\t'before 0, 0',\n\t\t\t'after',\n\t\t\t'after 0, 0',\n\t\t\t'before',\n\t\t\t'before 1, 0',\n\t\t\t'after',\n\t\t\t'after 1, 0',\n\t\t\t'before',\n\t\t\t'before 1, 1',\n\t\t\t'after',\n\t\t\t'after 1, 1'\n\t\t]);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a: 1</button>\n\t\t\t\t<button>b: 1</button>\n\t\t\t\t<p>a: 1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-afterUpdate2/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n\n\tlet a = 0;\n\tlet b = 0;\n</script>\n\n<button on:click={() => a += 1}>a: {a}</button>\n<button on:click={() => b += 1}>b: {b}</button>\n<Child {a} {b}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-beforeUpdate/Child.svelte",
    "content": "<script>\n\texport let name;\n\t$: console.log('name in child: ' + name);\n</script>\n\n<p>welcome, dan</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-beforeUpdate/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst input = /** @type {HTMLInputElement} */ (target.querySelector('input'));\n\t\tassert.equal(input?.value, 'rich');\n\n\t\tassert.deepEqual(logs, []);\n\n\t\tconst inputEvent = new window.InputEvent('input');\n\t\tinput.value = 'dan';\n\t\tawait input.dispatchEvent(inputEvent);\n\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['name in child: dan']);\n\n\t\tlogs.length = 0;\n\n\t\tinput.value = 'da';\n\t\tawait input.dispatchEvent(inputEvent);\n\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-beforeUpdate/main.svelte",
    "content": "<script>\n\timport { beforeUpdate } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet name = 'rich';\n\tlet allowed = false;\n\n\tbeforeUpdate(() => {\n\t\t// if your name's not dan, you're not coming in\n\t\tallowed = name === 'dan';\n\t});\n</script>\n\n<input bind:value={name} />\n\n{#if allowed}\n\t<Child name={name} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order/_config.js",
    "content": "import { test } from '../../test';\nimport order from './order.js';\n\nexport default test({\n\tbefore_test() {\n\t\torder.length = 0;\n\t},\n\ttest({ assert }) {\n\t\tassert.deepEqual(order, ['beforeUpdate', 'render', 'onMount', 'afterUpdate']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order/main.svelte",
    "content": "<script>\n\timport { onMount, beforeUpdate, afterUpdate } from 'svelte';\n\n\timport order from './order.js';\n\n\tfunction identity(x) {\n\t\torder.push('render');\n\t\treturn x;\n\t}\n\n\tbeforeUpdate(() => {\n\t\torder.push('beforeUpdate');\n\t});\n\n\tafterUpdate(() => {\n\t\torder.push('afterUpdate');\n\t});\n\n\tonMount(() => {\n\t\torder.push('onMount');\n\t});\n</script>\n\n{identity(42)}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order/order.js",
    "content": "export default [];\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order-for-children/Item.svelte",
    "content": "<script>\n\timport { afterUpdate, beforeUpdate, onMount } from 'svelte';\n\timport order from './order.js';\n\n\texport let index;\n\texport let n;\n\n\tfunction logRender (n) {\n\t\torder.push(`${index}: render ${n}`);\n\t\treturn index;\n\t}\n\n\tbeforeUpdate(() => {\n\t\torder.push(`${index}: beforeUpdate ${n}`);\n\t});\n\n\tafterUpdate(() => {\n\t\torder.push(`${index}: afterUpdate ${n}`);\n\t});\n\n\tonMount(() => {\n\t\torder.push(`${index}: onMount ${n}`);\n\t});\n</script>\n\n<li>\n\t{logRender(n)}\n</li>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order-for-children/_config.js",
    "content": "import { test } from '../../test';\nimport order from './order.js';\n\nlet n = 0;\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tn\n\t\t};\n\t},\n\tbefore_test() {\n\t\torder.length = 0;\n\t\tn = 0;\n\t},\n\ttest({ assert, compileOptions, component }) {\n\t\tassert.deepEqual(order, [\n\t\t\t'parent: beforeUpdate 0',\n\t\t\t'1: beforeUpdate 0',\n\t\t\t'1: render 0',\n\t\t\t'2: beforeUpdate 0',\n\t\t\t'2: render 0',\n\t\t\t'3: beforeUpdate 0',\n\t\t\t'3: render 0',\n\t\t\t'parent: render 0',\n\t\t\t'1: onMount 0',\n\t\t\t'1: afterUpdate 0',\n\t\t\t'2: onMount 0',\n\t\t\t'2: afterUpdate 0',\n\t\t\t'3: onMount 0',\n\t\t\t'3: afterUpdate 0',\n\t\t\t'parent: onMount 0',\n\t\t\t'parent: afterUpdate 0'\n\t\t]);\n\n\t\torder.length = 0;\n\n\t\tcomponent.n += 1;\n\n\t\tassert.deepEqual(order, [\n\t\t\t'parent: beforeUpdate 1',\n\t\t\t'1: beforeUpdate 1',\n\t\t\t'1: render 1',\n\t\t\t'2: beforeUpdate 1',\n\t\t\t'2: render 1',\n\t\t\t'3: beforeUpdate 1',\n\t\t\t'3: render 1',\n\t\t\t'parent: render 1',\n\t\t\t'1: afterUpdate 1',\n\t\t\t'2: afterUpdate 1',\n\t\t\t'3: afterUpdate 1',\n\t\t\t'parent: afterUpdate 1'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order-for-children/main.svelte",
    "content": "<script>\n\timport { afterUpdate, beforeUpdate, onMount } from 'svelte';\n\timport order from './order.js';\n\timport Item from './Item.svelte';\n\n\texport let n = 0;\n\n\tfunction logRender (n) {\n\t\torder.push(`parent: render ${n}`);\n\t\treturn 'parent';\n\t}\n\n\tbeforeUpdate(() => {\n\t\torder.push(`parent: beforeUpdate ${n}`);\n\t})\n\n\tafterUpdate(() => {\n\t\torder.push(`parent: afterUpdate ${n}`);\n\t})\n\n\tonMount(() => {\n\t\torder.push(`parent: onMount ${n}`);\n\t})\n</script>\n\n{logRender(n)}\n<ul>\n\t{#each [1,2,3] as index}\n\t\t<Item {index} {n} />\n\t{/each}\n</ul>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/lifecycle-render-order-for-children/order.js",
    "content": "/** @type {string[]} */\nexport default [];\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/mixed-let-export/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 42 };\n\t},\n\n\thtml: `\n\t\t42\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/mixed-let-export/main.svelte",
    "content": "<script>\n  let a, b, c, d;\n\n  export { a, c }\n</script>\n\n{a}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>42</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context/main.svelte",
    "content": "<script module>\n\tconst foo = 42;\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-bind/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\thtml: '<div>object</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-bind/main.svelte",
    "content": "<script context='module'>\n\tlet foo;\n</script>\n\n<script>\n\timport { onMount } from 'svelte';\n\tlet bar;\n\tonMount(() => bar = foo);\n</script>\n\n<div bind:this={foo}>{typeof bar}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-export/Foo.svelte",
    "content": "<script module>\n\texport const foo = 42;\n</script>\n<script>\n  let foo = 100;\n  console.log(foo);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-export/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>(42)(99)</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-export/main.svelte",
    "content": "<script>\n\timport { foo } from './Foo.svelte';\n\texport let bar = 99;\n</script>\n\n<p>({foo})({bar})</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-export-referenced-in-template/Foo.svelte",
    "content": "<script module>\n\texport function foo() {\n\t\treturn 42;\n\t}\n</script>\n\n<button on:click={foo}>foo</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-export-referenced-in-template/_config.js",
    "content": "import { test } from '../../test';\n\n// test itself might look weird, but it tests that the compilation output doesn't contain a dangling `export;` due to false hoisting\nexport default test({\n\thtml: '<p>(42)(99)</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-export-referenced-in-template/main.svelte",
    "content": "<script>\n\timport { foo } from './Foo.svelte';\n\texport let bar = 99;\n</script>\n\n<p>({foo()})({bar})</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-with-instance-script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>(42)(99)</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/module-context-with-instance-script/main.svelte",
    "content": "<script module>\n\tconst foo = 42;\n</script>\n\n<script>\n\texport let bar = 99;\n</script>\n\n<p>({foo})({bar})</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/mutation-correct-return-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [true]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/mutation-correct-return-value/main.svelte",
    "content": "<script>\n\texport let a = {};\n\tconsole.log((a.b = true));\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/mutation-tracking-across-sibling-scopes/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tassert.htmlEqual(component.div.innerHTML, '<div>+</div><div>-</div>');\n\n\t\tconst event = new window.Event('change');\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.checked = false;\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(component.div.innerHTML, '<div>-</div><div>-</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/mutation-tracking-across-sibling-scopes/main.svelte",
    "content": "{#each things as thing}\n\t<div>\n\t\t<input type=checkbox bind:checked={thing.ok} />\n\t</div>\n{/each}\n\n<div bind:this={div}>\n\t{#each things as other}\n\t\t<div>\n\t\t\t{other.ok ? '+' : '-'}\n\t\t</div>\n\t{/each}\n</div>\n\n<script>\n\tconst things = [{ ok: true }, { ok: false }];\n\texport let div;\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/names-deconflicted/Widget.svelte",
    "content": "<script>\n\texport let index;\n\texport let widget;\n</script>\n\n<p>{index + 1}: {widget.name}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/names-deconflicted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>1: foo</p><p>2: bar</p><p>3: baz</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.widgets = [{ name: 'bish' }, { name: 'bosh' }];\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>1: bish</p><p>2: bosh</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/names-deconflicted/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let widgets = [\n\t\t{ name: 'foo' },\n\t\t{ name: 'bar' },\n\t\t{ name: 'baz' }\n\t];\n</script>\n\n{#each widgets as widget, i}\n\t<Widget widget='{widget}' index='{i}'/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/names-deconflicted-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tarray: [\n\t\t\t\t[0, 0, 0],\n\t\t\t\t[0, 0, 0],\n\t\t\t\t[0, 0, 0]\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<span>[ 0, 0 ]</span><span>[ 0, 1 ]</span><span>[ 0, 2 ]</span>\n\t\t</div><div>\n\t\t\t<span>[ 1, 0 ]</span><span>[ 1, 1 ]</span><span>[ 1, 2 ]</span>\n\t\t</div><div>\n\t\t\t<span>[ 2, 0 ]</span><span>[ 2, 1 ]</span><span>[ 2, 2 ]</span>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/names-deconflicted-nested/main.svelte",
    "content": "<script>\n\texport let array;\n</script>\n\n{#each array as row, i}\n\t<div>\n\t\t{#each row as cell, j}\n\t\t\t<span>[ {i}, {j} ]</span>\n\t\t{/each}\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/namespace-html/_config.js",
    "content": "import { ok, test } from '../../test';\n\n// Checks that the template function is correct when there's a svg before a div\nexport default test({\n\thtml: `\n\t\t<svg viewBox='0 0 100 100' id='one'>\n\t\t\t<text textLength=100>hellooooo</text>\n\t\t</svg>\n\n\t\t<math>\n\t\t\t<mrow></mrow>\n\t\t</math>\n\n\t\t<div class=\"hi\">hi</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tok(svg);\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tconst math = target.querySelector('math');\n\t\tok(math);\n\t\tassert.equal(math.namespaceURI, 'http://www.w3.org/1998/Math/MathML');\n\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/namespace-html/main.svelte",
    "content": "<svg viewbox='0 0 100 100' id='one'>\n\t<text textlength=100>hellooooo</text>\n</svg>\n\n<math>\n\t<mrow></mrow>\n</math>\n\n<div class=\"hi\">hi</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nbsp/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span>&nbsp;</span>',\n\n\ttest({ assert, target }) {\n\t\tconst text = target.querySelector('span')?.textContent;\n\t\tassert.equal(text?.charCodeAt(0), 160);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nbsp/main.svelte",
    "content": "<span>&nbsp;</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nbsp-div/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>&nbsp;hello</div>\n\t<div>&nbsp;hello&nbsp;&nbsp;</div>\n\t<div>&nbsp;hello&nbsp; &nbsp;hello</div>`,\n\n\ttest({ assert, target }) {\n\t\tconst divList = target.querySelectorAll('div');\n\t\tassert.equal(divList[0].textContent?.charCodeAt(0), 160);\n\t\tassert.equal(divList[1].textContent?.charCodeAt(0), 160);\n\t\tassert.equal(divList[1].textContent?.charCodeAt(6), 160);\n\t\tassert.equal(divList[1].textContent?.charCodeAt(7), 160);\n\t\tassert.equal(divList[2].textContent?.charCodeAt(0), 160);\n\t\tassert.equal(divList[2].textContent?.charCodeAt(6), 160);\n\t\tassert.equal(divList[2].textContent?.charCodeAt(7), 32); //normal space\n\t\tassert.equal(divList[2].textContent?.charCodeAt(8), 160);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nbsp-div/main.svelte",
    "content": "<script>\n\tlet name = 'hello';\n</script>\n\n<div>&nbsp;{name}</div>\n<div>&nbsp;{name}&nbsp;&nbsp;</div>\n<div>&nbsp;{name}&nbsp; &nbsp;{name}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-destructure-assignment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>5</p>\n\t\t<p>6</p>\n\n\t\t<h1>Bag'ol stores</h1>\n\t\t<p>4</p>\n\t\t<p>5</p>\n\t\t<p>6</p>\n\n\t\t<button>Click me!</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>7</p>\n\t\t\t<p>8</p>\n\t\t\t<p>9</p>\n\t\t\t<p>10</p>\n\t\t\t<p>11</p>\n\t\t\t<p>12</p>\n\n\t\t\t<h1>Bag'ol stores</h1>\n\t\t\t<p>14</p>\n\t\t\t<p>13</p>\n\t\t\t<p>12</p>\n\n\t\t\t<button>Click me!</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-destructure-assignment/main.svelte",
    "content": "<script>\n\timport { get, writable } from 'svelte/store'\n\n\tlet bagOlStores = writable({\n\t\tfirstNonStore: 1,\n\t\tsecondNonStore: 2,\n\t\tthirdNonStore: 3,\n\t\tfirstStore: writable(4),\n\t\tsecondStore: writable(5),\n\t\tthirdStore: writable(6)\n\t});\n\n\tlet { firstNonStore, secondNonStore, thirdNonStore, firstStore, secondStore, thirdStore } = $bagOlStores;\n\n\tfunction changeStores() {\n\t\t$bagOlStores = ({\n\t\t\tthirdStore,\n\t\t\t$secondStore,\n\t\t\t$firstStore,\n\t\t\tfirstNonStore,\n\t\t\tsecondNonStore,\n\t\t\tthirdNonStore,\n\t\t} = {\n\t\t\tfirstNonStore: 7,\n\t\t\tsecondNonStore: 8,\n\t\t\tthirdNonStore: 9,\n\t\t\t$firstStore: 10,\n\t\t\t$secondStore: 11,\n\t\t\tfirstStore: writable(14),\n\t\t\tsecondStore: writable(13),\n\t\t\tthirdStore: writable(12)\n\t\t});\n\t}\n</script>\n\n<p>{firstNonStore}</p>\n<p>{secondNonStore}</p>\n<p>{thirdNonStore}</p>\n<p>{$firstStore}</p>\n<p>{$secondStore}</p>\n<p>{$thirdStore}</p>\n\n<h1>Bag'ol stores</h1>\n<p>{get($bagOlStores.firstStore)}</p>\n<p>{get($bagOlStores.secondStore)}</p>\n<p>{get($bagOlStores.thirdStore)}</p>\n\n<button on:click={changeStores}>Click me!</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-destructure-assignment-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t\t<p>3</p>\n\t\t<p>4</p>\n\t\t<p>5</p>\n\t\t<p>6</p>\n\n\t\t<h1>Bag'ol stores</h1>\n\t\t<p>6</p>\n\t\t<p></p>\n\t\t<p></p>\n\n\t\t<button>Click me!</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>7</p>\n\t\t\t<p>8</p>\n\t\t\t<p>9</p>\n\t\t\t<p>10</p>\n\t\t\t<p>11</p>\n\t\t\t<p>12</p>\n\n\t\t\t<h1>Bag'ol stores</h1>\n\t\t\t<p>12</p>\n\t\t\t<p>14</p>\n\t\t\t<p>15</p>\n\n\t\t\t<button>Click me!</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-destructure-assignment-2/main.svelte",
    "content": "<script>\n\timport { get, writable } from 'svelte/store'\n\n\tlet bagOlStores = writable([1, 2, 3, writable(4), writable(5), writable(6)]);\n\n\tlet firstNonStore, secondNonStore, thirdNonStore, firstStore, secondStore, thirdStore;\n\t([firstNonStore, secondNonStore, thirdNonStore, firstStore, secondStore, thirdStore] = $bagOlStores);\n\n\tfunction changeStores() {\n\t\t$bagOlStores = ([\n\t\t\tfirstNonStore,\n\t\t\tsecondNonStore,\n\t\t\tthirdNonStore,\n\t\t\tfirstStore,\n\t\t\t$secondStore,\n\t\t\tthirdStore\n\t\t] = [\n\t\t\t7,\n\t\t\t8,\n\t\t\t9,\n\t\t\twritable(10),\n\t\t\t11,\n\t\t\twritable(12),\n\t\t\twritable(14),\n\t\t\twritable(15)\n\t\t]);\n\t}\n</script>\n\n<p>{firstNonStore}</p>\n<p>{secondNonStore}</p>\n<p>{thirdNonStore}</p>\n<p>{$firstStore}</p>\n<p>{$secondStore}</p>\n<p>{$thirdStore}</p>\n\n<h1>Bag'ol stores</h1>\n<p>{get($bagOlStores[5])}</p>\n<p>{get($bagOlStores[6])}</p>\n<p>{get($bagOlStores[7])}</p>\n\n<button on:click={changeStores}>Click me!</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-detach-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tvisible: false,\n\t\t\trows: [1, 2, 3],\n\t\t\tcols: ['a', 'b', 'c']\n\t\t};\n\t},\n\n\thtml: '',\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"cell\">1, a</div>\n\t\t\t\t<div class=\"cell\">1, b</div>\n\t\t\t\t<div class=\"cell\">1, c</div>\n\t\t\t</div>\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"cell\">2, a</div>\n\t\t\t\t<div class=\"cell\">2, b</div>\n\t\t\t\t<div class=\"cell\">2, c</div>\n\t\t\t</div>\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"cell\">3, a</div>\n\t\t\t\t<div class=\"cell\">3, b</div>\n\t\t\t\t<div class=\"cell\">3, c</div>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.visible = false;\n\t\traf.tick(0);\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-detach-each/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let rows;\n\texport let cols;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => node.foo = t\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t{#each rows as row}\n\t\t<div out:foo class=\"row\">\n\t\t\t{#each cols as col}\n\t\t\t\t<div out:foo class=\"cell\">{row}, {col}</div>\n\t\t\t{/each}\n\t\t</div>\n\t{/each}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-detach-if-false/Folder.svelte",
    "content": "<script>\n\texport let dir;\n\texport let open = true;\n\n\tfunction get_items() {\n\t\treturn dir === 'a'\n\t\t\t? [\n\t\t\t\t{\n\t\t\t\t\tfilename: 'a/b',\n\t\t\t\t\tisDir: true\n\t\t\t\t}\n\t\t\t]\n\t\t\t: [\n\t\t\t\t{\n\t\t\t\t\tfilename: 'a/b/c',\n\t\t\t\t\tisDir: false\n\t\t\t\t}\n\t\t\t];\n\t}\n</script>\n\n<li>\n\t<span>{dir}</span>\n\n\t{#if open}\n\t\t<ul>\n\t\t\t{#each get_items() as item (item.filename)}\n\t\t\t\t{#if item.isDir}\n\t\t\t\t\t<svelte:self dir={item.filename}/>\n\t\t\t\t{:else}\n\t\t\t\t\t<li>{item.filename}</li>\n\t\t\t\t{/if}\n\t\t\t{/each}\n\t\t</ul>\n\t{/if}\n</li>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-detach-if-false/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<li>\n\t\t\t<span>a</span>\n\t\t\t<ul>\n\t\t\t\t<li>\n\t\t\t\t\t<span>a/b</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>a/b/c</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</li>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.folder.open = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<li>\n\t\t\t\t<span>a</span>\n\t\t\t</li>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-detach-if-false/main.svelte",
    "content": "<script>\n\texport let folder;\n\n\timport Folder from './Folder.svelte';\n</script>\n\n<Folder bind:this={folder} dir=\"a\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-if-block-not-remounted/Span.svelte",
    "content": "<span><slot></slot></span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-if-block-not-remounted/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true, value: 'one' };\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<input>\n\t\t\t<span>x</span>\n\t\t</div>\n\t`,\n\n\ttest({ component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tdiv.appendChild = div.insertBefore = () => {\n\t\t\tthrow new Error('DOM was mutated');\n\t\t};\n\n\t\tcomponent.value = 'two';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/nested-transition-if-block-not-remounted/main.svelte",
    "content": "<script>\n\texport let x;\n\n\timport Span from './Span.svelte';\n</script>\n\n<div>\n\t{#if x}\n\t\t<input on:input=\"{() => value = this.value}\">\n\t\t<Span>x</Span>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/observable-auto-subscribe/Nested.svelte",
    "content": "<script>\n\texport let observable;\n</script>\n\n<p>value: {$observable}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/observable-auto-subscribe/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\n/** @type {string | number} */\nlet value = 'initial';\n\n/** @type {Array<((value: any) => void)>} */\nlet subscribers = [];\nconst observable = {\n\t/** @param {(value: any) => void} fn */\n\tsubscribe: (fn) => {\n\t\tsubscribers.push(fn);\n\n\t\tfn(value);\n\n\t\treturn {\n\t\t\tunsubscribe: () => {\n\t\t\t\tconst i = subscribers.indexOf(fn);\n\t\t\t\tsubscribers.splice(i, 1);\n\t\t\t}\n\t\t};\n\t}\n};\n\nexport default test({\n\tbefore_test() {\n\t\tvalue = 'initial';\n\t\tsubscribers = [];\n\t},\n\n\tget props() {\n\t\treturn { observable, visible: false };\n\t},\n\n\thtml: '',\n\n\tasync test({ assert, component, target }) {\n\t\tassert.equal(subscribers.length, 0);\n\n\t\tcomponent.visible = true;\n\n\t\tassert.equal(subscribers.length, 1);\n\t\tassert.htmlEqual(target.innerHTML, '<p>value: initial</p>');\n\t\tvalue = 42;\n\t\tsubscribers.forEach((fn) => {\n\t\t\tfn(value);\n\t\t});\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<p>value: 42</p>');\n\n\t\tcomponent.visible = false;\n\n\t\tassert.equal(subscribers.length, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/observable-auto-subscribe/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let observable;\n\texport let visible;\n</script>\n\n{#if visible}\n\t<Nested {observable}/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-before-cleanup/Top.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\timport container from './container.js';\n\n\tlet element;\n\n\tonDestroy(() => {\n\t\tcontainer.div = element;\n\t});\n</script>\n\n<div bind:this={element}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-before-cleanup/_config.js",
    "content": "import { test } from '../../test';\nimport container from './container.js';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tcontainer.div = null;\n\n\t\tconst div = target.querySelector('div');\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(container.div, div);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-before-cleanup/container.js",
    "content": "export default {\n\tdiv: null\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-before-cleanup/main.svelte",
    "content": "<script>\n\timport Top from './Top.svelte';\n\n\texport let top;\n\texport let visible = true;\n</script>\n\n{#if visible}\n\t<Top bind:this={top}></Top>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-deep/A.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\timport B from './B.svelte';\n\n\tlet yes = 1;\n\n\tonDestroy(() => destroyed.push('A'));\n</script>\n\n<div>\n\t{#if yes}\n\t\t<B/>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-deep/B.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\timport C from './C.svelte';\n\n\tlet yes = 1;\n\n\tonDestroy(() => destroyed.push('B'));\n</script>\n\n<div>\n\t{#if yes}\n\t\t<C/>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-deep/C.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\n\tlet yes = 1;\n\n\tonDestroy(() => destroyed.push('C'));\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-deep/_config.js",
    "content": "import { test } from '../../test';\nimport { destroyed, reset } from './destroyed.js';\n\nexport default test({\n\tbefore_test() {\n\t\treset();\n\t},\n\n\ttest({ assert, component }) {\n\t\tcomponent.visible = false;\n\t\tassert.deepEqual(destroyed, ['C', 'B', 'A']);\n\t},\n\n\ttest_ssr({ assert }) {\n\t\tassert.deepEqual(destroyed, ['C', 'B', 'A']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-deep/destroyed.js",
    "content": "/** @type {string[]} */\nexport const destroyed = [];\n\nexport const reset = () => (destroyed.length = 0);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-deep/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\n\texport let visible = true;\n</script>\n\n{#if visible}\n\t<A/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access/Component.svelte",
    "content": "<script>\n\timport { onDestroy } from \"svelte\";\n\texport let checked;\n\texport let count;\n\tonDestroy(() => {\n\t\tconsole.log(count, checked);\n\t});\n</script>\n\n<p>{count}</p>\n\n<button onclick={()=> count-- }></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\t\tlet ps = [...target.querySelectorAll('p')];\n\n\t\tfor (const p of ps) {\n\t\t\tassert.equal(p.innerHTML, '0');\n\t\t}\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\t// prop update normally if we are not unmounting\n\t\tfor (const p of ps) {\n\t\t\tassert.equal(p.innerHTML, '1');\n\t\t}\n\n\t\tflushSync(() => {\n\t\t\tbtn3.click();\n\t\t});\n\n\t\t// binding still works and update the value correctly\n\t\tfor (const p of ps) {\n\t\t\tassert.equal(p.innerHTML, '0');\n\t\t}\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\t// the five components guarded by `count < 2` unmount and log\n\t\tassert.deepEqual(logs, [1, true, 1, true, 1, true, 1, true, 1, true]);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\t// the three components guarded by `show` unmount and log\n\t\tassert.deepEqual(logs, [\n\t\t\t1,\n\t\t\ttrue,\n\t\t\t1,\n\t\t\ttrue,\n\t\t\t1,\n\t\t\ttrue,\n\t\t\t1,\n\t\t\ttrue,\n\t\t\t1,\n\t\t\ttrue,\n\t\t\t2,\n\t\t\ttrue,\n\t\t\t2,\n\t\t\ttrue,\n\t\t\t2,\n\t\t\ttrue\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\tlet show = true;\n\tlet count = 0;\n\t$: spread = { checked: show, count };\n</script>\n\n<button onclick={()=> count++ }></button>\n<button onclick={()=> show = !show }></button>\n\n<!-- count with bind -->\n{#if count < 2}\n\t<Component bind:count bind:checked={show} />\n{/if}\n\n<!-- spread syntax -->\n{#if count < 2}\n\t<Component {...spread} />\n{/if}\n\n<!-- normal prop -->\n{#if count < 2}\n\t<Component {count} checked={show} />\n{/if}\n\n<!-- prop only accessed in destroy -->\n{#if show}\n\t<Component {count} checked={show} />\n{/if}\n\n<!-- dynamic component -->\n<svelte:component this={count < 2 ? Component : undefined} {count} checked={show} />\n\n<!-- dynamic component spread -->\n<svelte:component this={count < 2 ? Component : undefined} {...spread} />\n\n<!-- dynamic component with prop only accessed on destroy -->\n<svelte:component this={show ? Component : undefined} {count} checked={show} />\n\n<!-- dynamic component with prop only accessed on destroy spread -->\n<svelte:component this={show ? Component : undefined} {...spread} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access-2/Component.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\n\texport let my_prop;\n\n\tonDestroy(() => {\n\t\tconsole.log(my_prop.foo);\n\t});\n</script>\n\n{my_prop.foo}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access-2/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['bar']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access-2/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet value = { foo: 'bar' };\n</script>\n\n<button\n\tonclick={() => {\n\t\tvalue = undefined;\n\t}}>Reset value</button\n>\n\n{#if value !== undefined}\n\t<Component my_prop={value} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access-3/Component.svelte",
    "content": "<script lang=\"ts\">\n\texport let ref;\n</script>\n\n<input bind:this={ref} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access-3/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/ondestroy-prop-access-3/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tlet state = { title: 'foo' };\n</script>\n\n{#if state}\n\t{@const attributes = { title: state.title }}\n\t<Component {...attributes} />\n{/if}\n<button\n\tonclick={() => {\n\t\tstate = undefined;\n\t}}\n>\n\tDel\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-async/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-async/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\tonMount(async () => {\n\t\tawait 123\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-external/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['mounted']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-external/main.svelte",
    "content": "<script module>\n\timport { onMount } from 'svelte';\n\n\tclass MyClass {\n\t\tconstructor() {\n\t\t\tonMount(() => console.log('mounted'));\n\t\t}\n\t}\n</script>\n\n<script>\n\tnew MyClass();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready/Widget.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let x;\n\n\texport let inDocument;\n\n\tonMount(() => {\n\t\tinDocument = document.contains(x);\n\t});\n</script>\n\n<p bind:this={x}>{inDocument}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // uses oncreate\n\n\thtml: '<div><p>true</p></div>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div><p>true</p>\\n<p>true</p></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let foo;\n</script>\n\n<div>\n\t<Widget/>\n\n\t{#if foo}\n\t\t<Widget/>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready-nested/ParentWidget.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let foo;\n</script>\n\n<Widget/>{#if foo}<Widget/>{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready-nested/Widget.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let x;\n\n\texport let inDocument;\n\n\tonMount(() => {\n\t\tinDocument = document.contains(x);\n\t});\n</script>\n\n<p bind:this={x}>{inDocument}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // uses oncreate\n\n\thtml: '<div><p>true</p>\\n<p>true</p></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-fires-when-ready-nested/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\timport ParentWidget from './ParentWidget.svelte';\n</script>\n\n<div>\n\t<Widget/>\n\t<ParentWidget />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-sibling-order/Nested.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\timport result from './result.js';\n\n\texport let name;\n\n\tonMount(() => {\n\t\tresult.push(`onMount ${name}`);\n\t});\n</script>\n\n<p>{name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-sibling-order/_config.js",
    "content": "import { test } from '../../test';\nimport result from './result.js';\n\nexport default test({\n\ttest({ assert }) {\n\t\tassert.deepEqual(result, ['onMount foo', 'onMount bar']);\n\n\t\tresult.pop();\n\t\tresult.pop();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-sibling-order/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested name='foo'/>\n<Nested name='bar'/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/onmount-sibling-order/result.js",
    "content": "export default [];\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/option-without-select/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 'hello' };\n\t},\n\n\thtml: \"<option value='hello'>hello</option>\",\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = 'goodbye';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<option value='goodbye'>goodbye</option>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/option-without-select/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<option value='{foo}'>{foo}</option>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/paren-wrapped-expressions/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 'foo', b: true, c: [1, 2, 3] };\n\t},\n\n\thtml: `\n\t\t<span>foo</span>\n\t\t<span class=\"foo\"></span>\n\t\t<span>true</span>\n\t\t<span>1</span>\n\t\t<span>2</span>\n\t\t<span>3</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/paren-wrapped-expressions/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n\texport let c;\n</script>\n\n<span>{ (a) }</span>\n<span class='{ (a) }'></span>\n{#if (b) }\n\t<span>true</span>\n{/if}\n{#each (c) as x}\n\t<span>{x}</span>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/pre-tag/.editorconfig",
    "content": "[main.svelte]\ntrim_trailing_whitespace = unset\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/pre-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'server'], // output is correct, but test suite chokes on the extra ssr comment which is harmless\n\twithoutNormalizeHtml: 'only-strip-comments', // because whitespace inside pre tags is significant\n\t// Note how we're testing against target.innerHTML which already removed the redundant first newline\n\thtml: `<pre id=\"pre\">  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</pre> <div id=\"div\">A\n  B <span>C\n    D</span> E\n  F</div> <div id=\"div-with-pre\"><pre>    A\n    B\n    <span>\n      C\n      D\n    </span>\n    E\n    F\n  </pre></div> <div id=\"pre-with-leading-newline\"><pre>leading newline</pre> <pre>  leading newline and spaces</pre> <pre>\nleading newlines</pre></div> <div id=\"pre-without-leading-newline\"><pre>without spaces</pre> <pre>  with spaces  </pre> <pre>${' '}\nnewline after leading space</pre></div> <pre id=\"pre-with-multiple-leading-newlines\">\n\nmultiple leading newlines</pre>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/pre-tag/main.svelte",
    "content": "<pre id=\"pre\">\n  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</pre>\n\n<div id=\"div\">\n  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</div>\n\n<div id=\"div-with-pre\">\n  <pre>\n    A\n    B\n    <span>\n      C\n      D\n    </span>\n    E\n    F\n  </pre>\n</div>\n\n<div id=\"pre-with-leading-newline\">\n  <pre>\nleading newline</pre>\n  <pre>\n  leading newline and spaces</pre>\n  <pre>\n\nleading newlines</pre>\n</div>\n\n<div id=\"pre-without-leading-newline\">\n  <pre>without spaces</pre>\n  <pre>  with spaces  </pre>\n  <pre> \nnewline after leading space</pre>\n</div>\n\n<pre id=\"pre-with-multiple-leading-newlines\">\n\n\nmultiple leading newlines</pre>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/preload/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, mod }) {\n\t\tassert.deepEqual(mod.preload({ foo: 1 }), { bar: 2 });\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/preload/main.svelte",
    "content": "<script module>\n\texport function preload({ foo }) {\n\t\treturn {\n\t\t\tbar: foo * 2\n\t\t};\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/preserve-comments/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // a separate SSR test exists\n\n\tcompileOptions: {\n\t\tpreserveComments: true\n\t},\n\n\thtml: `\n    <p>before</p>\n    <!-- a comment -->\n    <p>after</p>\n  `\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/preserve-comments/main.svelte",
    "content": "<p>before</p>\n<!-- a comment -->\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/preserve-whitespaces/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tpreserveWhitespace: true\n\t},\n\n\thtml: `<pre id=\"pre\">  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</pre>\n\n<div id=\"div\">\n  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</div>\n\n<div id=\"div-with-pre\">\n  <pre>    A\n    B\n    <span>\n      C\n      D\n    </span>\n    E\n    F\n  </pre>\n</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/preserve-whitespaces/main.svelte",
    "content": "<pre id=\"pre\">\n  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</pre>\n\n<div id=\"div\">\n  A\n  B\n  <span>\n    C\n    D\n  </span>\n  E\n  F\n</div>\n\n<div id=\"div-with-pre\">\n  <pre>\n    A\n    B\n    <span>\n      C\n      D\n    </span>\n    E\n    F\n  </pre>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-accessors/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\taccessors: false,\n\n\ttest({ assert, component }) {\n\t\tassert.equal(component.foo1, 42);\n\t\tassert.equal(component.foo2(), 42);\n\t\tassert.equal(component.bar, undefined);\n\n\t\tassert.throws(() => {\n\t\t\tcomponent.foo1 = null;\n\t\t}, /Cannot set property foo1 of/);\n\n\t\tassert.throws(() => {\n\t\t\tcomponent.foo2 = null;\n\t\t}, /Cannot set property foo2 of/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-accessors/main.svelte",
    "content": "<script>\n\texport const foo1 = 42;\n\texport const foo2 = () => 42;\n\texport let bar = 42;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-const/Nested.svelte",
    "content": "<script>\n\texport let a;\n\texport const b = 2;\n</script>\n\n<p>a: {a}</p>\n<p>b: {b}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-const/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 3, b: 4 };\n\t},\n\n\thtml: `\n\t\t<p>a: 3</p>\n\t\t<p>b: 2</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.$set({\n\t\t\ta: 5,\n\t\t\tb: 6\n\t\t});\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 5</p>\n\t\t\t<p>b: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-const/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let a;\n\texport let b;\n</script>\n\n<Nested a={a} b={b}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-exports/_config.js",
    "content": "import { test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\ts1: writable(42),\n\t\t\ts2: writable(43),\n\t\t\tp1: 2,\n\t\t\tp3: 3,\n\t\t\ta1: writable(1),\n\t\t\ta2: 4,\n\t\t\ta6: writable(29),\n\t\t\tfor: 'loop',\n\t\t\tcontinue: '...'\n\t\t};\n\t},\n\n\thtml: `\n\t\t$s1=42\n\t\t$s2=43\n\t\tp1=2\n\t\tp3=3\n\t\t$v1=1\n\t\tv2=4\n\t\tvi1=4\n\t\t$vs1=1\n\t\tvl0=hello\n\t\tvl1=test\n\t\t$s3=29\n\t\tloop...\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-exports/main.svelte",
    "content": "<script>\n  // export multiple subscribables in one line\n  export let u1, s1, u2, s2\n\n  let p1, p2, p3\n\n  // export previously declared props\n  export { p1, p3 }\n\n  // aliased props <component a1={...} a2={...}> assign to v1, v2\n  let v1, v2\n  export { v1 as a1, v2 as a2 }\n\n  // aliased export with initializer\n  let vi1 = v2\n  export { vi1 as a3 }\n\n  // aliased subscribable export\n  let vs1 = v1\n  export { vs1 as a4 }\n\n  // literal initializer\n  let vl0 = 'hello'\n  export { vl0 }\n\n  // aliased with literal initializer\n  let vl1 = 'test'\n  export { vl1 as a5 }\n\n  // aliased store surrounded by non-aliased non-stores\n  let n1, n2, s3\n  export { n1, s3 as a6, n2 }\n\n  // keyword exports\n  let k1, k2\n  export { k1 as for, k2 as continue }\n\n</script>\n\n$s1={$s1}\n$s2={$s2}\np1={p1}\np3={p3}\n$v1={$v1}\nv2={v2}\nvi1={vi1}\n$vs1={$vs1}\nvl0={vl0}\nvl1={vl1}\n$s3={$s3}\n{k1}{k2}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-no-change/Nested.svelte",
    "content": "<script>\n\texport let primitive;\n\texport let object;\n\t$: primitive && console.log('primitive');\n\t$: object && console.log('object');\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-no-change/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\taccessors: false,\n\ttest({ assert, logs, target }) {\n\t\tassert.deepEqual(logs, ['primitive', 'object']);\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['primitive', 'object', 'object']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-no-change/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\tlet value = { count: 1 };\n</script>\n\n<button on:click={() => value = { count: 1 }}>reassign</button>\n<Nested primitive={value.count} object={value} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-not-action/Nested.svelte",
    "content": "<script>\n\texport let user;\n</script>\n\n<h1>Hello {user.name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-not-action/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { currentUser: { name: 'world' } };\n\t},\n\n\thtml: `\n\t\t<h1>Hello world!</h1>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-not-action/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\texport let currentUser;\n</script>\n\n<Nested user={currentUser}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-p-is-null/Child.svelte",
    "content": "<script>\n\t$: x = Object.keys($$restProps).length;\n\t$: y = Object.keys($$props).length;\n</script>\n\n{x} {y}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-p-is-null/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '0 0'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-p-is-null/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte'\n</script>\n\n<Child {...undefined} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-quoted/Nested.svelte",
    "content": "{$$props['x-y-z']}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-quoted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 1 };\n\t},\n\n\thtml: '1',\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.foo = 2;\n\t\tassert.htmlEqual(target.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-quoted/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let foo;\n</script>\n\n<Nested x-y-z={foo}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-subscribable/_config.js",
    "content": "import { test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\tget props() {\n\t\treturn { b: writable(42) };\n\t},\n\n\thtml: `\n\t\t42\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-subscribable/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n\texport let c;\n</script>\n\n{$b}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-without-semicolon/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello world!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-without-semicolon/main.svelte",
    "content": "<h1>Hello {name}!</h1>\n\n<script>\n\texport let name='world'\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-without-semicolon-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\thtml: '<h1>Hello world!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/prop-without-semicolon-b/main.svelte",
    "content": "<h1>Hello {name}!</h1>\n\n<script>\n\texport let name\n\t(() => {})()\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props/RenderProps.svelte",
    "content": "<script></script>\n\n<p>{JSON.stringify($$props)}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 1 };\n\t},\n\n\thtml: `\n\t\t<p>{\"x\":1}</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>{\"x\":2}</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props/main.svelte",
    "content": "<script>\n\timport RenderProps from './RenderProps.svelte';\n\n\texport let x;\n</script>\n\n<RenderProps {x}>\n\t<p>some (unused) slotted content, to create an internal prop</p>\n</RenderProps>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive/Nested.svelte",
    "content": "<script>\n\tlet props;\n\t$: {\n\t\tlet { foo, bar, baz, ...others } = $$props;\n\t\tprops = others;\n\t}\n</script>\n\n<p>{props.qux}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 1, b: 2, c: 3, d: 4 };\n\t},\n\n\thtml: `\n\t\t<p>4</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.d = 5;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>5</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let a;\n\texport let b;\n\texport let c;\n\texport let d;\n</script>\n\n<Nested foo={a} bar={b} baz={c} qux={d}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-b/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 1, b: 2 };\n\t},\n\n\thtml: `\n\t\t<p>a: 1</p>\n\t\t<p>b: 2</p>\n\t\t<p>c: 3</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.$set({ a: 4 });\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 4</p>\n\t\t\t<p>b: 2</p>\n\t\t\t<p>c: 6</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.$set({ b: 5 });\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 4</p>\n\t\t\t<p>b: 5</p>\n\t\t\t<p>c: 9</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-b/main.svelte",
    "content": "<script>\n\texport let a;\n\t$: c = a + $$props.b;\n</script>\n\n<p>a: {a}</p>\n<p>b: {$$props.b}</p>\n<p>c: {c}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-destroy/Child.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\n\texport let data;\n\t\n\tonDestroy(() => {\n\t\tdata;\n\t});\n</script>\n\n{data ? '' : null}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-destroy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['should fire once']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-destroy/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet active = true;\n\tlet data = { example: 'This is some example data' };\n\n\tfunction log(data) {\n\t\tconsole.log('should fire once');\n\t\treturn data;\n\t}\n</script>\n\n<button on:click={() => active = false}>Hide</button>\n\n{#if active}\n\t<Child data={log(data)} />\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-only-with-change/Comp.svelte",
    "content": "<script>\n  export let id;\n  export let callback;\n\n  $: $$props, callback(id);\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-only-with-change/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {string[]} */\nlet callbacks = [];\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @param {string} value */\n\t\t\tcallback: (value) => callbacks.push(value),\n\t\t\tval1: '1',\n\t\t\tval2: '2'\n\t\t};\n\t},\n\n\tbefore_test() {\n\t\tcallbacks = [];\n\t},\n\n\tasync test({ assert, component }) {\n\t\tassert.equal(callbacks.length, 2);\n\t\tassert.equal(JSON.stringify(callbacks), '[\"1\",\"2\"]');\n\n\t\tcomponent.val1 = '3';\n\t\tassert.equal(callbacks.length, 3);\n\t\tassert.equal(JSON.stringify(callbacks), '[\"1\",\"2\",\"1\"]');\n\n\t\tcomponent.val1 = '4';\n\t\tassert.equal(callbacks.length, 4);\n\t\tassert.equal(JSON.stringify(callbacks), '[\"1\",\"2\",\"1\",\"1\"]');\n\n\t\tcomponent.val2 = '5';\n\t\tassert.equal(callbacks.length, 5);\n\t\tassert.equal(JSON.stringify(callbacks), '[\"1\",\"2\",\"1\",\"1\",\"2\"]');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-only-with-change/main.svelte",
    "content": "<script>\n\timport Comp from './Comp.svelte';\n\texport let callback;\n\texport let val1, val2;\n</script>\n\n<Comp id=\"1\" {callback} value={val1} />\n<Comp id=\"2\" {callback} value={val2} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-slot/Comp.svelte",
    "content": "<slot props={$$props}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-slot/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<h1>hi</h1>\n\t\t<button>Change</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>changed</h1>\n\t\t\t<button>Change</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reactive-slot/main.svelte",
    "content": "<script>\n\timport Comp from './Comp.svelte'\n\tlet p = \"hi\"\n</script>\n\n<Comp someprop={p} let:props>\n\t<h1>\n\t\t{props.someprop}\n\t</h1>\n</Comp>\n\n<button on:click={()=> p = \"changed\"}>Change\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reassign/App.svelte",
    "content": "<script>\n\t$: $$props.a = $$props.a * 2;\n</script>\n\n<p>{$$props.a} {$$props.b}</p>\n<button on:click={() => $$props.b = 'b'}>update</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reassign/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>increment</button>\n\t\t<p>0 </p>\n\t\t<button>update</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>increment</button>\n\t\t\t<p>2 </p>\n\t\t\t<button>update</button>\n\t\t`\n\t\t);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>increment</button>\n\t\t\t<p>4 b</p>\n\t\t\t<button>update</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/props-reassign/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\tlet a = 0;\n</script>\n\n<button on:click={() => a++}>increment</button>\n<App {a} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-first-child/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<span>foo</span>' };\n\t},\n\n\ttest({ assert, component, target, variant }) {\n\t\tconst span = target.querySelector('span');\n\t\tok(span);\n\t\tif (variant === 'dom') {\n\t\t\tassert.ok(!span.previousSibling);\n\t\t} else {\n\t\t\tassert.equal(span.previousSibling?.textContent, '1tbe2lq'); // hash of the value\n\t\t}\n\n\t\tcomponent.raw = '<span>bar</span>';\n\t\tassert.htmlEqual(target.innerHTML, '<div><span>bar</span></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-first-child/main.svelte",
    "content": "<script>\n\texport let raw;\n\texport let maybe;\n</script>\n\n<div>{@html raw}{#if maybe}after{/if}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-first-last-child/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<span>foo</span>' };\n\t},\n\n\ttest({ assert, component, target, variant }) {\n\t\tconst span = target.querySelector('span');\n\t\tok(span);\n\t\tif (variant === 'dom') {\n\t\t\tassert.ok(!span.previousSibling);\n\t\t} else {\n\t\t\t// hydration: previous is the ssr comment\n\t\t\tassert.ok(!span.previousSibling?.previousSibling);\n\t\t}\n\t\t// next is the anchor\n\t\tassert.ok(!span.nextSibling?.nextSibling);\n\n\t\tcomponent.raw = '<span>bar</span>';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-first-last-child/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\n<div>{@html raw}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-last-child/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<span>foo</span>' };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst span = target.querySelector('span');\n\t\tok(span);\n\n\t\t// In Svelte 5 we have an anchor after the raw fragment\n\t\tassert.ok(span.nextSibling);\n\t\tassert.ok(!span.nextSibling?.nextSibling);\n\n\t\tcomponent.raw = '<span>bar</span>';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-last-child/main.svelte",
    "content": "<script>\n\texport let maybe;\n\texport let raw;\n</script>\n\n<div>{#if maybe}after{/if}{@html raw}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-next-previous-sibling/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<span>foo</span>' };\n\t},\n\n\ttest({ assert, component, target, variant }) {\n\t\tconst span = target.querySelector('span');\n\t\tif (variant === 'dom') {\n\t\t\tassert.equal(span?.previousSibling?.nodeName, 'BR');\n\t\t\t// next.next because of comment anchor before which @html is inserted\n\t\t\tassert.equal(span?.nextSibling?.nextSibling?.nodeName, 'BR');\n\t\t} else {\n\t\t\t// ssr comments inbetween\n\t\t\tassert.equal(span?.previousSibling?.nodeName, '#comment');\n\t\t\tassert.equal(span?.previousSibling?.previousSibling?.nodeName, 'BR');\n\t\t\tassert.equal(span?.nextSibling?.nodeName, '#comment');\n\t\t\tassert.equal(span?.nextSibling?.nextSibling?.nodeName, 'BR');\n\t\t}\n\n\t\tcomponent.raw = '<span>bar</span>';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-next-previous-sibling/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\nbefore<br>{@html raw}<br>after\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-next-sibling/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<span>foo</span>' };\n\t},\n\n\ttest({ assert, component, target, variant }) {\n\t\tconst span = target.querySelector('span');\n\t\tif (variant === 'dom') {\n\t\t\tassert.equal(span?.previousSibling?.nodeName, 'BR');\n\t\t} else {\n\t\t\t// ssr comment inbetween\n\t\t\tassert.equal(span?.previousSibling?.nodeName, '#comment');\n\t\t\tassert.equal(span?.previousSibling?.previousSibling?.nodeName, 'BR');\n\t\t}\n\n\t\tcomponent.raw = '<span>bar</span>';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-next-sibling/main.svelte",
    "content": "<script>\n\texport let raw;\n\texport let maybe;\n</script>\n\nbefore<br>{@html raw}{#if maybe}after{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-previous-sibling/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<span>foo</span>' };\n\t},\n\n\ttest({ assert, component, target, variant }) {\n\t\tconst span = target.querySelector('span');\n\t\tif (variant === 'dom') {\n\t\t\tassert.equal(span?.previousSibling?.nodeName, 'BR');\n\t\t} else {\n\t\t\t// ssr comment inbetween\n\t\t\tassert.equal(span?.previousSibling?.nodeName, '#comment');\n\t\t\tassert.equal(span?.previousSibling?.previousSibling?.nodeName, 'BR');\n\t\t}\n\n\t\tcomponent.raw = '<span>bar</span>';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-anchor-previous-sibling/main.svelte",
    "content": "<script>\n\texport let raw;\n\texport let maybe;\n</script>\n\nbefore<br>{@html raw}{#if maybe}after{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-as-root/RawMustache.svelte",
    "content": "<script>\n\texport let content;\n</script>\n\n{@html content}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-as-root/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Switch</button>\n\t\t<p>Another first line</p>\n\t\t<p>This line should be last.</p>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Switch</button>\n\t\t\t\t<p>First line</p>\n\t\t\t\t<p>This line should be last.</p>\n\t\t\t`\n\t\t);\n\n\t\tbtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Switch</button>\n\t\t\t\t<p>Another first line</p>\n\t\t\t\t<p>This line should be last.</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-as-root/main.svelte",
    "content": "<script>\n\timport RawMustache from './RawMustache.svelte';\n\n\tlet content1 = `<p>First line</p>`;\n\tlet content2 = `<p>Another first line</p>`;\n\n\tlet show = false;\n\t$: content = show ? content1 : content2;\n</script>\n\n<button on:click={() => show = !show}>\n\tSwitch\n</button>\n\n<RawMustache {content} />\n\n<p>This line should be last.</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-before-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>x<span>baz</span></p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-before-element/main.svelte",
    "content": "<p>{@html 'x'}<span>baz</span></p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-inside-head/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tassert.htmlEqual(\n\t\t\twindow.document.head.innerHTML,\n\t\t\t'<style>body { color: blue; }</style><style>body { color: green; }</style>'\n\t\t);\n\n\t\tflushSync(() => btn.dispatchEvent(clickEvent));\n\n\t\tassert.htmlEqual(\n\t\t\twindow.document.head.innerHTML,\n\t\t\t'<style>body { color: red; }</style><style>body { color: green; }</style>'\n\t\t);\n\n\t\tflushSync(() => btn.dispatchEvent(clickEvent));\n\n\t\tassert.htmlEqual(\n\t\t\twindow.document.head.innerHTML,\n\t\t\t'<style>body { color: blue; }</style><style>body { color: green; }</style>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-inside-head/main.svelte",
    "content": "<script>\n\tlet content1 = `<style>body { color: red; }</style>`;\n\tlet content2 = `<style>body { color: blue; }</style>`\n\n\tlet show = false;\n\t$: content = show ? content1 : content2;\n</script>\n\n<button on:click={() => show = !show}>\n\tSwitch\n</button>\n\n<svelte:head>\n\t{@html content}\n\t<style>body { color: green; }</style>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-inside-slot/Component.svelte",
    "content": "<slot />\n<p>This line should be last.</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-inside-slot/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Switch</button>\n\t\t<p>Another first line</p>\n\t\t<p>This line should be last.</p>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Switch</button>\n\t\t\t\t<p>First line</p>\n\t\t\t\t<p>This line should be last.</p>\n\t\t\t`\n\t\t);\n\n\t\tbtn.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Switch</button>\n\t\t\t\t<p>Another first line</p>\n\t\t\t\t<p>This line should be last.</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustache-inside-slot/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet content1 = `<p>First line</p>`;\n\tlet content2 = `<p>Another first line</p>`\n\n\tlet show = false;\n\t$: content = show ? content1 : content2;\n</script>\n\n<button on:click={() => show = !show}>\n\tSwitch\n</button>\n\n<Component>\n\t{@html content}\n</Component>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustaches/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\traw: '<span><em>raw html!!!\\\\o/</span></em>'\n\t\t};\n\t},\n\n\thtml: 'before<span><em>raw html!!!\\\\o/</span></em>after',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.raw = '';\n\t\tassert.htmlEqual(target.innerHTML, 'beforeafter');\n\t\tcomponent.raw = 'how about <strong>unclosed elements?';\n\t\tassert.htmlEqual(target.innerHTML, 'beforehow about <strong>unclosed elements?</strong>after');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustaches/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\nbefore{@html raw}after\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustaches-preserved/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<p>does not change</p>' };\n\t},\n\n\thtml: '<div><p>does not change</p></div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst p = target.querySelector('p');\n\n\t\tcomponent.raw = '<p>does not change</p>';\n\t\tassert.htmlEqual(target.innerHTML, '<div><p>does not change</p></div>');\n\t\tassert.strictEqual(target.querySelector('p'), p);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustaches-preserved/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\n<div>{@html raw}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustaches-td-tr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { raw: '<tr><td>1</td><td>2</td></tr>' };\n\t},\n\n\thtml: `\n\t\t<table>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>5</td><td>7</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1</td><td>2</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-mustaches-td-tr/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\n<table>\n\t<tbody>\n\t\t<tr>\n\t\t\t<td>5</td><td>7</td>\n\t\t</tr>\n\t\t{@html raw}\n\t</tbody>\n</table>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-svg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.show = true;\n\t\tassert.htmlEqual(target.innerHTML, '<svg><circle cx=\"200\" cy=\"500\" r=\"200\"></circle></svg>');\n\t\tassert.instanceOf(target.querySelector('svg'), SVGElement);\n\t\tassert.instanceOf(target.querySelector('circle'), SVGElement);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/raw-svg/main.svelte",
    "content": "<script>\n\texport let show = false;\n</script>\n\n{#if show}\n\t<svg>{@html '<circle cx=\"200\" cy=\"500\" r=\"200\"></circle>'}</svg>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-assignment-rhs/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>1 1</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-assignment-rhs/main.svelte",
    "content": "<script>\n  let foo;\n  let bar;\n  bar = (foo = 1);\n</script>\n\n<h1>{foo} {bar}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>2 2</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration/main.svelte",
    "content": "<script>\n  let eid = 1;\n  let foo;\n  let employees = [\n    {id: eid = (foo = 2), name: 'xxx'},\n  ]\n</script>\n\n<h1>{foo} {eid}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n// destructure to store\nexport default test({\n\thtml: '<h1>2 2 xxx 5 6 9 10 2</h1>',\n\tasync test({ assert, target, component }) {\n\t\tcomponent.update();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<h1>11 11 yyy 12 13 14 15 11</h1>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet eid = writable(1);\n\tlet foo;\n\tlet u;\n\tlet v;\n\tlet w;\n\tlet x;\n\tlet y;\n\t[u, v, w] = [\n\t\t{id: eid = writable(foo = 2), name: 'xxx'},\n\t\t5,\n\t\twritable(6)\n\t];\n\t({ a: x, b: y } = { a: writable(9), b: writable(10) });\n\t$: z = u.id;\n\n\texport function update() {\n\t\t[u, v, w] = [\n\t\t\t{id: eid = writable(foo = 11), name: 'yyy'},\n\t\t\t12,\n\t\t\twritable(13)\n\t\t];\n\t\t({ a: x, b: y } = { a: writable(14), b: writable(15) });\n\t}\n</script>\n\n<h1>{foo} {$eid} {u.name} {v} {$w} {$x} {$y} {$z}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n// destructure to store value\nexport default test({\n\thtml: '<h1>2 2 xxx 5 6 9 10 2</h1>',\n\tasync test({ assert, target, component }) {\n\t\tcomponent.update();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<h1>11 11 yyy 12 13 14 15 11</h1>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-2/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet eid = writable(1);\n\tlet foo;\n\tconst u = writable(2);\n\tconst v = writable(3);\n\tconst w = writable(4);\n\tconst x = writable(5);\n\tconst y = writable(6);\n\t[$u, $v, $w] = [\n\t\t{id: eid = writable(foo = 2), name: 'xxx'},\n\t\t5,\n\t\t6\n\t];\n\t({ a: $x, b: $y } = { a: 9, b: 10 });\n\t$: z = $u.id;\n\n\texport function update() {\n\t\t[$u, $v, $w] = [\n\t\t\t{id: eid = writable(foo = 11), name: 'yyy'},\n\t\t\t12,\n\t\t\t13\n\t\t];\n\t\t({ a: $x, b: $y } = { a: 14, b: 15 });\n\t}\n</script>\n\n<h1>{foo} {$eid} {$u.name} {$v} {$w} {$x} {$y} {$z}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { store } from './store.js';\n\nexport default test({\n\thtml: '<h1>0</h1>',\n\tbefore_test() {\n\t\tstore.reset();\n\t},\n\ttest({ assert, target }) {\n\t\tstore.set(42);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<h1>42</h1>');\n\n\t\tassert.equal(store.numberOfTimesSubscribeCalled(), 1);\n\t},\n\ttest_ssr({ assert }) {\n\t\tassert.equal(store.numberOfTimesSubscribeCalled(), 1);\n\t\tassert.equal(store.isSubscribed(), false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/main.svelte",
    "content": "<script>\n\timport { store } from './store';\n</script>\n\n<h1>{$store}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/store.js",
    "content": "import { writable } from 'svelte/store';\nconst _store = writable(0);\nlet count = 0;\nlet is_subscribed = false;\n\nexport const store = {\n\t..._store,\n\n\t/** @param {(value: any) => void} fn */\n\tsubscribe(fn) {\n\t\tcount++;\n\t\tis_subscribed = true;\n\t\tconst unsub = _store.subscribe(fn);\n\t\treturn () => {\n\t\t\tis_subscribed = false;\n\t\t\tunsub();\n\t\t};\n\t},\n\treset() {\n\t\tcount = 0;\n\t\tis_subscribed = false;\n\t\t_store.set(0);\n\t},\n\tnumberOfTimesSubscribeCalled() {\n\t\treturn count;\n\t},\n\tisSubscribed() {\n\t\treturn is_subscribed;\n\t}\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-declaration/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>1 1</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-declaration/main.svelte",
    "content": "<script>\n\tlet foo;\n\tlet bar = (foo = 1);\n\tfunction a() {\n\t\tbar = (foo = 1);\n\t}\n</script>\n\n<h1>{foo} {bar}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-for-loop-head/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>0 0</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-for-loop-head/main.svelte",
    "content": "<script>\n\tlet foo1;\n\tlet foo2;\n\tfor (let bar = (foo1 = 0); bar < 5; bar += 1) {\n\t\tfoo2 = foo1;\n\t}\n\tfunction a() {\n\t\tfor (let bar = (foo1 = 0); bar < 5; bar += 1) {\n\t\t\tfoo2 = foo1;\n\t\t}\n\t}\n</script>\n\n<h1>{foo1} {foo2}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-prevent-loop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>1 / 1</button>',\n\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, [2, 1]);\n\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, [2, 1, 2, 1]);\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>3 / 2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-assignment-prevent-loop/main.svelte",
    "content": "<script>\n\tlet count1 = 0;\n\tlet count2 = 0;\n\n\tfunction increaseCount1() {\n\t\tcount1++;\n\t}\n\n\t$: if (count2 < 10) {\n\t\tconsole.log(1);\n\t\tincreaseCount1();\n\t}\n\n\t$: if (count1 < 10) {\n\t\tconsole.log(2);\n\t\tcount2++;\n\t}\n</script>\n\n<button on:click={() => count1++}>{count1} / {count2}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-block-break/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>1 2</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-block-break/main.svelte",
    "content": "<script>\n\tlet foo = 0;\n\tlet bar;\n\t$: {\n\t\tbar = foo + 1;\n\t\tif (foo) {\n\t\t\tbreak $;\n\t\t}\n\t\tbar = foo + 2;\n\t}\n\tfoo = 1;\n</script>\n\n<h1>{foo} {bar}</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-compound-operator/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<p>count: 0</p>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 2);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 2</p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 6);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 6</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-compound-operator/main.svelte",
    "content": "<script>\n\texport let x = 0;\n\n\t$: x *= 2;\n</script>\n\n<button on:click='{() => x += 1}'>+1</button>\n<p>count: {x}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-function/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>50</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.range = [50, 100];\n\t\tassert.htmlEqual(target.innerHTML, '<p>75</p>');\n\n\t\tcomponent.range = [50, 60];\n\t\tassert.htmlEqual(target.innerHTML, '<p>55</p>');\n\n\t\tcomponent.x = 8;\n\t\tassert.htmlEqual(target.innerHTML, '<p>58</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-function/main.svelte",
    "content": "<script>\n\texport let domain = [0, 10];\n\texport let range = [0, 100];\n\texport let x = 5;\n\n\tlet scale;\n\n\t$: scale = num => {\n\t\tconst t = domain[0] + (num - domain[0]) / (domain[1] - domain[0]);\n\t\treturn range[0] + t * (range[1] - range[0]);\n\t};\n</script>\n\n<p>{scale(x)}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-function-called-reassigned/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\n/** @type {string[]} */\nlet value;\nlet called = 0;\n\n/** @param {string[]} _value */\nfunction callback(_value) {\n\tcalled++;\n\tvalue = _value;\n}\n\nexport default test({\n\tget props() {\n\t\treturn { callback };\n\t},\n\tbefore_test() {\n\t\tcalled = 0;\n\t},\n\ttest({ assert, target, window }) {\n\t\tassert.equal(called, 1);\n\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'h';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.equal(called, 2);\n\t\tassert.equal(value.length, 3);\n\t\tassert.equal(value[0], 'h');\n\t\tassert.equal(value[1], '2');\n\t\tassert.equal(value[2], '3');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-function-called-reassigned/main.svelte",
    "content": "<script>\n\tconst refs = ['1','2','3']\n\texport let callback = () => {};\n\n\t$: callback(refs);\n</script>\n\n{#each refs as ref}\n\t<input bind:value={ref} />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-function-inline/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>0</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.selected = 3;\n\t\tassert.htmlEqual(target.innerHTML, '<p>3</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-function-inline/main.svelte",
    "content": "<script>\n\tlet list = [0, 1, 2, 3, 4];\n\texport let selected = 0;\n</script>\n\n<p>{list.filter(x => x === selected)}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\nimport { reset_numbers } from './data';\n\nexport default test({\n\thtml: `\n\t\timport\n\t\t<p>1 + 2 + 3 + 4 = 10</p>\n\t\tlocal\n\t\t<p>1 + 2 + 3 + 4 = 10</p>\n\t\t<button>Add a number</button>\n\t`,\n\tbefore_test() {\n\t\treset_numbers();\n\t},\n\tasync test({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tflushSync(() => {\n\t\t\tbtn.dispatchEvent(clickEvent);\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\timport\n\t\t\t<p>1 + 2 + 3 + 4 + 5 = 15</p>\n\t\t\tlocal\n\t\t\t<p>1 + 2 + 3 + 4 + 5 = 15</p>\n\t\t\t<button>Add a number</button>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn.dispatchEvent(clickEvent);\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\timport\n\t\t\t<p>1 + 2 + 3 + 4 + 5 + 6 = 21</p>\n\t\t\tlocal\n\t\t\t<p>1 + 2 + 3 + 4 + 5 + 6 = 21</p>\n\t\t\t<button>Add a number</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement/data.js",
    "content": "export let numbers = [1, 2, 3, 4];\n\nexport function reset_numbers() {\n\tnumbers = [1, 2, 3, 4];\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement/main.svelte",
    "content": "<script>\n\timport { numbers } from './data.js';\n\tconst local_numbers = [1, 2, 3, 4];\n\n\tfunction addNumber() {\n\t\tnumbers[numbers.length] = numbers.length + 1;\n\t\tlocal_numbers[local_numbers.length] = local_numbers.length + 1;\n\t}\n\n\t$: sum = numbers.reduce((t, n) => t + n, 0);\n\t$: local_sum = local_numbers.reduce((t, n) => t + n, 0);\n</script>\n\nimport <p>{numbers.join(' + ')} = {sum}</p>\nlocal <p>{local_numbers.join(' + ')} = {local_sum}</p>\n\n<button on:click={addNumber}>\n\tAdd a number\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>prop value</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement-2/data.js",
    "content": "export const obj = {\n\tprop: 'prop value'\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement-2/main.svelte",
    "content": "<script>\n\timport { obj } from './data.js';\n\n\t$: prop = obj.prop;\n\tobj.foo = 'a different prop';\n</script>\n\n<p>{prop}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement-module/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport state from './state.js';\n\nexport default test({\n\thtml: '<button>0</button>',\n\n\tbefore_test() {\n\t\tstate.count = 0;\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>0</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement-module/main.svelte",
    "content": "<script module>\n\timport state from './state.js';\n\n\tfunction update() {\n\t\tstate.count += 1;\n\t}\n</script>\n\n<button on:click={update}>{state.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-import-statement-module/state.js",
    "content": "export default {\n\tcount: 0\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-statement-indirect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<h1>2</h1>\n\t\t<button>Increment</button>\n\t`,\n\ttest({ assert, target }) {\n\t\ttarget\n\t\t\t.querySelector('button')\n\t\t\t?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>4</h1>\n\t\t\t<button>Increment</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-statement-indirect/main.svelte",
    "content": "<script>\n\tlet count = 1;\n\t// Could be a let or simplified, but this tests that it still works like this\n\t$: indirect_double = 2;\n\t$: if (count > 0) {\n\t\tindirect_double = count * 2;\n\t}\n</script>\n\n<h1>{indirect_double}</h1>\n<button on:click={() => count++}>Increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-statement-module-vars/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\ta: moduleA\n\t\tb: moduleB\n\t\tmoduleA: moduleA\n\t\tmoduleB: moduleB\n\t`,\n\tasync test({ assert, target, component }) {\n\t\tawait component.updateModuleA();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta: moduleA\n\t\t\tb: moduleB\n\t\t\tmoduleA: moduleA\n\t\t\tmoduleB: moduleB\n\t\t`\n\t\t);\n\n\t\tcomponent.reset();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-statement-module-vars/main.svelte",
    "content": "<script module>\n\tlet moduleA = 'moduleA';\n\tlet moduleB = 'moduleB';\n</script>\n<script>\n\texport function updateModuleA() {\n\t\tmoduleA = 'something else';\n\t}\n\n\texport function reset() {\n\t\tmoduleA = 'moduleA';\n\t}\n\n\t$: a = moduleA;\n\t$: b = moduleB;\n</script>\na: {a}\nb: {b}\nmoduleA: {moduleA}\nmoduleB: {moduleB}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-statement-store/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>3</button>`,\n\tasync test({ assert, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-statement-store/main.svelte",
    "content": "<script>\n\tlet x = 1;\n\tlet y = true;\n\t$: array = y ? [1, 2] : [1];\n\t$: count = array.length === 2 && x ? 1 : 0;\n\t$: sum = count + array.length;\n</script>\n\n<button\n\ton:click={() => {\n\t\t// order is important here: x must be updated before y\n\t\t// in order to test that $: still runs in the correct order\n\t\tx = 2;\n\t\ty = false;\n\t}}>{sum}</button\n>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-update-expression/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>+1</button>\n\t<p>count: 1</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tassert.equal(component.x, 1);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 3);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 3</p>\n\t\t`\n\t\t);\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.equal(component.x, 5);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>+1</button>\n\t\t\t<p>count: 5</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-update-expression/main.svelte",
    "content": "<script>\n\texport let x = 0;\n\n  $: x++;\n\n  function onClick() {\n    x += 1;\n  }\n</script>\n\n<button on:click='{() => x += 1}'>+1</button>\n<p>count: {x}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-assign-properties/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>false</button><button>false</button><button>false</button><button>false</button>`,\n\ttest({ assert, target }) {\n\t\tconst [button1, button2, button3, button4] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>true</button><button>false</button><button>false</button><button>false</button>`\n\t\t);\n\n\t\tbutton2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>true</button><button>true</button><button>false</button><button>false</button>`\n\t\t);\n\n\t\tbutton3.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>true</button><button>true</button><button>true</button><button>false</button>`\n\t\t);\n\n\t\tbutton4.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>true</button><button>true</button><button>true</button><button>true</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-assign-properties/main.svelte",
    "content": "<script>\n\tlet array;\n\t$: {\n\t\t// test that this doesn't rerun on array change\n\t\tarray = []\n\t\tarray[0] = [false, false];\n\t\tarray[1] = [false, false];\n\t}\n</script>\n\n{#each array as row, i}\n\t{#each row as item, j}\n\t\t<button on:click={() => array[i][j] = !array[i][j]}>{item}</button>\n\t{/each}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-assign-property/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<h1>Hello world!</h1>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-assign-property/main.svelte",
    "content": "<script>\n\t$: user = {};\n\t$: user.name = 'world';\n</script>\n\n<h1>Hello {user.name}!</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-coerce/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '1-1',\n\n\ttest: ({ assert, component, target }) => {\n\t\tcomponent.a.b[0] = 2;\n\t\tcomponent.a = component.a; // eslint-disable-line no-self-assign\n\n\t\tassert.htmlEqual(target.innerHTML, '2-2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-coerce/main.svelte",
    "content": "<script>\n\texport let a = { b: [1] };\n\n\tconst identity = x => x;\n</script>\n\n{a.b}-{identity(a.b)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-coerce-precedence/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<h1>true</h1>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-coerce-precedence/main.svelte",
    "content": "<h1>{1 === 1}</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-dependency-not-referenced/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>42</p>\n\t\t<p>42</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.updateStore(undefined);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p></p><p>42</p>');\n\n\t\tcomponent.updateStore(33);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>33</p><p>42</p>');\n\n\t\tcomponent.updateStore(undefined);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p></p><p>42</p>');\n\n\t\tcomponent.updateVar(undefined);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p></p><p></p>');\n\n\t\tcomponent.updateVar(33);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p></p><p>33</p>');\n\n\t\tcomponent.updateVar(undefined);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p></p><p></p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-dependency-not-referenced/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet store = writable(42);\n\tlet variable = 42;\n\tlet value;\n\tlet value2;\n\t$: value = $store;\n\t$: value2 = variable;\n\n\texport function updateStore(value) {\n\t\tstore.set(value);\n\t}\n\texport function updateVar(value) {\n\t\tvariable = value;\n\t}\n</script>\n\n<p>{ value }</p>\n<p>{ value2 }</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-function/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '1-2',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.update();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '3-4');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-function/main.svelte",
    "content": "<script>\n\tlet foo = () => 1;\n\n\tvar bar = function() {\n\t\treturn 2;\n\t}\n\n\texport function update() {\n\t\tfoo = () => 3;\n\t\tbar = () => 4;\n\t}\n</script>\n\n{foo()}-{bar()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-function-hoist/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// TODO: This passes but unclear what the test is actually testing\n\thtml: `\n\t\t<button>Click me</button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\n\t\tawait button?.dispatchEvent(event);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>4</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-function-hoist/main.svelte",
    "content": "<script>\n\tlet num = 2;\n\t$: square = num * num;\n\n\tfunction onClick() {\n\t\tthis.innerHTML = square;\n\t}\n</script>\n\n<button on:click={onClick}>Click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-function-hoist-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Click me</button>\n\t`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tconst button = target.querySelector('button');\n\n\t\tawait button?.dispatchEvent(event);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>A,B,C</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-function-hoist-b/main.svelte",
    "content": "<script>\n\tlet array = ['a', 'b', 'c'];\n\t$: uppercase = array.map(str => str.toUpperCase());\n\n\tfunction onClick() {\n\t\tthis.innerHTML = uppercase.join(',');\n\t}\n</script>\n\n<button on:click={onClick}>Click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-mutate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '{\"bar\":42}'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-mutate/main.svelte",
    "content": "<script>\n\tlet foo = {};\n\tlet bar = 42;\n\t$: foo.bar = bar;\n</script>\n\n{JSON.stringify(foo)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-mutate-const/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Mutate a</button>\n\t\t<div>{}</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton?.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Mutate a</button>\n\t\t\t<div>{\"foo\":42}</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-value-mutate-const/main.svelte",
    "content": "<script>\n\tconst a = {};\n\tconst b = {};\n\t$: b.foo = a.foo;\n</script>\n\n<button on:click={() => a.foo = 42}>Mutate a</button>\n<div>{JSON.stringify(b)}</div>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1 + 2 = 3</p>\n\t\t<p>3 * 3 = 9</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 3;\n\t\tassert.equal(component.c, 5);\n\t\tassert.equal(component.cSquared, 25);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>3 + 2 = 5</p>\n\t\t\t<p>5 * 5 = 25</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values/main.svelte",
    "content": "<script>\n\texport let a = 1;\n\texport let b = 2;\n\texport let c;\n\texport let cSquared;\n\n\t$: c = a + b;\n\t$: cSquared = c * c;\n</script>\n\n<p>{a} + {b} = {c}</p>\n<p>{c} * {c} = {cSquared}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-deconflicted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span>waiting</span>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 'ready';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>ready</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-deconflicted/main.svelte",
    "content": "<script>\n\texport let x = 'waiting';\n\n\tlet state;\n\t$: state = x;\n</script>\n\n<span>{state}</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-exported/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 1 };\n\t},\n\n\thtml: `\n\t\t<p>1 1 1</p>\n\t`,\n\n\ttest({ assert, component }) {\n\t\tassert.equal(component.y, 1);\n\t\tassert.equal(component.z, 1);\n\n\t\tcomponent.x = 2;\n\t\tassert.equal(component.y, 2);\n\t\tassert.equal(component.z, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-exported/main.svelte",
    "content": "<script>\n\texport let x, y\n\n\t$: y = x;\n\n\texport let z;\n\t$: z = x;\n</script>\n\n<p>{x} {y} {z}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-fixed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>4</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>4</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-fixed/main.svelte",
    "content": "<script>\n  const num = 2;\n  $: squared = num * num;\n</script>\n\n<p>{squared}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-function-dependency/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>2</p>',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.y = 2;\n\t\tassert.equal(component.x, 4);\n\t\tassert.htmlEqual(target.innerHTML, '<p>4</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-function-dependency/main.svelte",
    "content": "<script>\n\tlet _x;\n\n\tfunction getX () {\n\t\treturn _x;\n\t}\n\n\texport let y = 1;\n\n\tlet xGetter;\n\texport let x;\n\n\t$: {\n\t\t_x = y * 2;\n\t\txGetter = getX;\n\t}\n\n\t$: x = xGetter();\n</script>\n\n<p>{x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-implicit/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1 + 2 = 3</p>\n\t\t<p>3 * 3 = 9</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 3;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>3 + 2 = 5</p>\n\t\t\t<p>5 * 5 = 25</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-implicit/main.svelte",
    "content": "<script>\n\texport let a = 1;\n\texport let b = 2;\n\n\t$: c = a + b;\n\t$: cSquared = c * c;\n</script>\n\n<p>{a} + {b} = {c}</p>\n<p>{c} * {c} = {cSquared}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-implicit-destructured/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { coords: [0, 0], numbers: { answer: 42 } };\n\t},\n\n\thtml: `\n\t\t<p>0,0</p>\n\t\t<p>42</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.coords = [1, 2];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>1,2</p>\n\t\t\t<p>42</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.numbers = { answer: 43 };\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>1,2</p>\n\t\t\t<p>43</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-implicit-destructured/main.svelte",
    "content": "<script>\n\texport let coords;\n\texport let numbers;\n\n\t$: [x, y] = coords;\n\t$: ({ answer } = numbers);\n</script>\n\n<p>{x},{y}</p>\n<p>{answer}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-implicit-self-dependency/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1 / 1</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.num = 3;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>3 / 3</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.num = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2 / 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-implicit-self-dependency/main.svelte",
    "content": "<script>\n\texport let num = 1;\n\n\t$: max = Math.max(num, max || 0);\n</script>\n\n<p>{num} / {max}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-no-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>10 - 90</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.width = 50;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>10 - 40</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-no-dependencies/main.svelte",
    "content": "<script>\n\texport let width = 100;\n\n\tconst padding = 10;\n\n\t$: x1 = padding;\n\t$: x2 = width - padding;\n</script>\n\n<p>{x1} - {x2}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-no-implicit-member-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, window }) {\n\t\tassert.equal(window.document.title, 'foo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-no-implicit-member-expression/main.svelte",
    "content": "<script>\n\t$: document.title = 'foo';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-non-cyclical/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 42 };\n\t},\n\n\thtml: `\n\t\t<p>42 42</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = 43;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>43 43</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-non-cyclical/main.svelte",
    "content": "<script>\n\texport let x = 42\n\n\tlet a;\n\tlet b;\n\n\t$: a = b;\n\t$: b = (function(a) {\n\t\treturn a;\n\t}(x));\n</script>\n\n<p>{a} {b}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-non-cyclical-declaration-order-independent/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>2+2=4</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2+2=4</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-non-cyclical-declaration-order-independent/main.svelte",
    "content": "<script>\n\t$: c = a + b;\n\t$: a = 2;\n\t$: b = a;\n</script>\n\n<p>{a}+{b}={c}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-overwrite/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>doubled: 2</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 2;\n\n\t\tassert.equal(component.doubled, 4);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>doubled: 4</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.doubled = 3;\n\n\t\tassert.equal(component.doubled, 3);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>doubled: 3</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-overwrite/main.svelte",
    "content": "<script>\n\texport let a = 1;\n\texport let doubled;\n\n\t$: doubled = a * 2;\n</script>\n\n<p>doubled: {doubled}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-second-order/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tassert.equal(component.qux, 2);\n\n\t\tcomponent.foo = 2;\n\t\tassert.equal(component.qux, 4);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-second-order/main.svelte",
    "content": "<script>\n\texport let foo = 1, bar, baz, qux;\n\n\t$: {\n\t\tbar = foo;\n\t\tbaz = foo;\n\t}\n\n\t$: {\n\t\tqux = bar + baz;\n\t}\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-self-dependency/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1 + 2 = 3</p>\n\t\t<p>Times calculated: 1</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 3;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>3 + 2 = 5</p>\n\t\t\t<p>Times calculated: 2</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-self-dependency/main.svelte",
    "content": "<script>\n\texport let a = 1;\n\texport let b = 2;\n\tlet c;\n\n\tlet count = 0;\n\n\t$: {\n\t\tc = a + b;\n\t\tcount = count + 1;\n\t}\n</script>\n\n<p>{a} + {b} = {c}</p>\n<p>Times calculated: {count}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-self-dependency-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>count: 0</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.count = 5;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>count: 5</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.count = 50;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>count: 9</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-self-dependency-b/main.svelte",
    "content": "<script>\n\texport let count = 0;\n\n\t$: if (count >= 10) {\n\t\tcount = 9;\n\t}\n</script>\n\n<p>count: {count}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-store-destructured-undefined/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p></p>\n\t\t<p></p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-store-destructured-undefined/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst store = writable([]);\n\t$: ({ foo1 } = $store);\n\t$: [foo2] = $store;\n</script>\n\n<p>{foo1}</p>\n<p>{foo2}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-subscript-assignment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component }) {\n\t\tassert.deepEqual(component.foo, {});\n\t\tcomponent.bar = 'hello';\n\t\tassert.deepEqual(component.foo, { hello: true });\n\t\tcomponent.bar = 'world';\n\t\tassert.deepEqual(component.foo, { hello: true, world: true });\n\t\tcomponent.bar = false;\n\t\tassert.deepEqual(component.foo, { hello: true, world: true });\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-subscript-assignment/main.svelte",
    "content": "<script>\n\texport let foo = {};\n\texport let bar;\n\t$: if (bar) {\n\t\tfoo[bar] = true;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-text-node/_config.js",
    "content": "import { test } from '../../test';\nimport { create_deferred } from '../../../helpers';\nimport { flushSync } from 'svelte';\n\n/** @type {ReturnType<typeof create_deferred>} */\nlet deferred;\n\nexport default test({\n\tbefore_test() {\n\t\tdeferred = create_deferred();\n\t},\n\n\tget props() {\n\t\treturn { deferred };\n\t},\n\n\thtml: '<div>same text</div>',\n\n\tasync test({ assert, target }) {\n\t\tawait deferred.promise;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>same text text</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-text-node/main.svelte",
    "content": "<script>\n\texport let deferred;\n\tlet text = 'same';\n\tsetTimeout(() => {\n\t\ttext = 'same text';\n\t\tdeferred.resolve();\n\t}, 5);\n</script>\n\n<div>{text} text</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-uninitialised/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>aca</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/reactive-values-uninitialised/main.svelte",
    "content": "<script>\n\texport let a = 'a';\n\tlet b;\n\t$: c = a;\n\n\tfunction foo() {\n\t\tb = c === 'a' ? 'b' : 'c';\n\t}\n\tfoo();\n</script>\n\n<p>{a}{b}{c}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/renamed-instance-exports/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, component }) {\n\t\tassert.equal(component.bar1, 42);\n\t\tassert.equal(component.bar2, 42);\n\t\tassert.throws(() => {\n\t\t\tcomponent.bar1 = 100;\n\t\t}, /Cannot set property bar1 of .+ which has only a getter/);\n\t\tcomponent.bar2 = 100;\n\t\tassert.equal(component.bar1, 42);\n\t\tassert.equal(component.bar2, 100);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/renamed-instance-exports/main.svelte",
    "content": "<script>\n\tconst foo1 = 42;\n\tlet foo2 = 42;\n\texport { foo1 as bar1, foo2 as bar2 };\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props/App.svelte",
    "content": "<script>\n\texport let a;\n\texport function b() {}\n\texport let c = 1;\n\n\t$: length = Object.keys($$restProps).length;\n\t$: values = Object.values($$restProps);\n</script>\n<div>Length: {length}</div>\n<div>Values: {values.join(',')}</div>\n\n<div {...$$restProps}></div>\n<div {...$$props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 3, b: 4, c: 5, d: 6 };\n\t},\n\thtml: `\n\t\t<div>Length: 3</div>\n\t\t<div>Values: 4,5,1</div>\n\t\t<div d=\"4\" e=\"5\" foo=\"1\"></div>\n\t\t<div a=\"1\" b=\"2\" c=\"3\" d=\"4\" e=\"5\" foo=\"1\"></div>\n\t\t<button></button><button></button><button></button><button></button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [btn1, btn2, btn3, btn4] = target.querySelectorAll('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\n\t\tbtn1.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 3</div>\n\t\t\t<div>Values: 4,5,1</div>\n\t\t\t<div d=\"4\" e=\"5\" foo=\"1\"></div>\n\t\t\t<div a=\"31\" b=\"32\" c=\"3\" d=\"4\" e=\"5\" foo=\"1\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\n\t\tbtn2.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 3</div>\n\t\t\t<div>Values: 34,5,1</div>\n\t\t\t<div d=\"34\" e=\"5\" foo=\"1\"></div>\n\t\t\t<div a=\"31\" b=\"32\" c=\"3\" d=\"34\" e=\"5\" foo=\"1\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\n\t\tbtn3.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 3</div>\n\t\t\t<div>Values: 34,5,31</div>\n\t\t\t<div d=\"34\" e=\"5\" foo=\"31\"></div>\n\t\t\t<div a=\"31\" b=\"32\" c=\"3\" d=\"34\" e=\"5\" foo=\"31\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\n\t\tbtn4.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 4</div>\n\t\t\t<div>Values: 34,5,31,2</div>\n\t\t\t<div d=\"34\" e=\"5\" foo=\"31\" bar=\"2\"></div>\n\t\t\t<div a=\"31\" b=\"32\" c=\"3\" d=\"34\" e=\"5\" foo=\"31\" bar=\"2\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\tlet a = 1, b = 2, c = 3, d = 4, e = 5;\n\tlet f = { foo: 1 };\n\n\tfunction updateProps() {\n\t\ta = 31;\n\t\tb = 32;\n\t}\n\tfunction updateRest() {\n\t\td = 34;\n\t}\n\tfunction updateSpread() {\n\t\tf.foo = 31;\n\t}\n\tfunction updateSpread2() {\n\t\tf.bar = 2;\n\t}\n</script>\n\n<App {a} {b} {c} {d} {e} {...f} />\n<button on:click={updateProps}></button>\n<button on:click={updateRest}></button>\n<button on:click={updateSpread}></button>\n<button on:click={updateSpread2}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-delete/App.svelte",
    "content": "<script>\n\tfunction prune() {\n\t\t$$restProps.a\n\t\tdelete $$restProps.a\n\t\t// should be idempotent\n\t\tdelete $$restProps.a\n\t}\n</script>\n\n<button on:click={prune}>delete a</button>\n\n{JSON.stringify($$restProps)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-delete/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>delete a</button>\\n{\"a\":1,\"b\":2}`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>delete a</button>\\n{\"b\":2}`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-delete/main.svelte",
    "content": "<script>\n\timport App from \"./App.svelte\";\n</script>\n\n<App a={1} b={2} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-no-alias/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tx: 1,\n\t\ty: 2,\n\t\tz: 3\n\t},\n\thtml: `<pre>{\"x\":1,\"z\":3}</pre>`,\n\n\tasync test({ assert, target, component }) {\n\t\tcomponent.y = 4;\n\t\tassert.htmlEqual(target.innerHTML, `<pre>{\"x\":1,\"z\":3}</pre>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-no-alias/main.svelte",
    "content": "<script>\n\tlet x;\n\texport { x as y };\n</script>\n\n<pre>{JSON.stringify($$restProps)}</pre>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-reassign/App.svelte",
    "content": "<script>\n\t$: $$restProps.c = $$restProps.c ?? 'c';\n</script>\n\n<p>{$$restProps.a} {$$restProps.b} {$$restProps.c}</p>\n<button on:click={() => $$restProps.b = 'b'}>update</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-reassign/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>increment</button>\n\t\t<p>0 c</p>\n\t\t<button>update</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>increment</button>\n\t\t\t<p>1 c</p>\n\t\t\t<button>update</button>\n\t\t`\n\t\t);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>increment</button>\n\t\t\t<p>1 b c</p>\n\t\t\t<button>update</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-reassign/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\tlet a = 0;\n</script>\n\n<button on:click={() => a++}>increment</button>\n<App {a} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-without-props/App.svelte",
    "content": "<script>\n\texport let a;\n\texport function b() {}\n\texport let c = 1;\n\n\t$: length = Object.keys($$restProps).length;\n\t$: values = Object.values($$restProps);\n</script>\n<div>Length: {length}</div>\n<div>Values: {values.join(',')}</div>\n\n<div {...$$restProps}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-without-props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { a: 3, b: 4, c: 5, d: 6 };\n\t},\n\thtml: `\n\t\t<div>Length: 3</div>\n\t\t<div>Values: 4,5,1</div>\n\t\t<div d=\"4\" e=\"5\" foo=\"1\"></div>\n\t\t<button></button><button></button><button></button><button></button>\n\t`,\n\ttest({ assert, target, window }) {\n\t\tconst [btn1, btn2, btn3, btn4] = target.querySelectorAll('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\n\t\tbtn1.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 3</div>\n\t\t\t<div>Values: 4,5,1</div>\n\t\t\t<div d=\"4\" e=\"5\" foo=\"1\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\n\t\tbtn2.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 3</div>\n\t\t\t<div>Values: 34,5,1</div>\n\t\t\t<div d=\"34\" e=\"5\" foo=\"1\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\n\t\tbtn3.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 3</div>\n\t\t\t<div>Values: 34,5,31</div>\n\t\t\t<div d=\"34\" e=\"5\" foo=\"31\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\n\t\tbtn4.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Length: 4</div>\n\t\t\t<div>Values: 34,5,31,2</div>\n\t\t\t<div d=\"34\" e=\"5\" foo=\"31\" bar=\"2\"></div>\n\t\t\t<button></button><button></button><button></button><button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/rest-props-without-props/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\tlet a = 1, b = 2, c = 3, d = 4, e = 5;\n\tlet f = { foo: 1 };\n\n\tfunction updateProps() {\n\t\ta = 31;\n\t\tb = 32;\n\t}\n\tfunction updateRest() {\n\t\td = 34;\n\t}\n\tfunction updateSpread() {\n\t\tf.foo = 31;\n\t}\n\tfunction updateSpread2() {\n\t\tf.bar = 2;\n\t}\n</script>\n\n<App {a} {b} {c} {d} {e} {...f} />\n<button on:click={updateProps}></button>\n<button on:click={updateRest}></button>\n<button on:click={updateSpread}></button>\n<button on:click={updateSpread2}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/script-style-non-top-level/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<style>div { color: red; }</style>\n\t\t\t<script>\\`<>\\`</script>\n\t\t</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/script-style-non-top-level/main.svelte",
    "content": "<div>\n\t<style>div { color: red; }</style>\n\t<script>`<>`</script>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { item: { name: 'One', key: 'a' } };\n\t},\n\n\thtml: `\n\t\t<select>\n\t\t\t<option value=\"a\">One</option>\n\t\t\t<option value=\"b\">Two</option>\n\t\t\t<option value=\"c\">Three</option>\n\t\t</select>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option value=\"a\">One</option>\n\t\t\t\t<option value=\"b\">Two</option>\n\t\t\t\t<option value=\"c\">Three</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\n\t\tassert.equal(target.querySelector('select')?.value, 'a');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select/main.svelte",
    "content": "<script>\n\texport let item;\n</script>\n\n<select>\n\t<option value=\"{item.key}\">{item.name}</option>\n\t<option value=\"b\">Two</option>\n\t<option value=\"c\">Three</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-bind-array/_config.js",
    "content": "import { test } from '../../test';\n\nconst items = [{ id: 'a' }, { id: 'b' }];\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 'b', items };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\n\t\tcomponent.foo = items[0].id;\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-bind-array/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let items;\n</script>\n\n<select bind:value={foo}>\n\t{#each items as item}\n\t\t<option value='{item.id}'>{item.id}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-bind-in-array/_config.js",
    "content": "import { test } from '../../test';\n\nconst items = [{ id: 'a' }, { id: 'b' }];\n\nexport default test({\n\tget props() {\n\t\treturn { items };\n\t},\n\n\ttest({ assert, component }) {\n\t\tconst items = component.items;\n\n\t\tassert.equal(items[0].id, 'a');\n\t\tassert.equal(items[1].id, 'b');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-bind-in-array/main.svelte",
    "content": "<script>\n  export let items;\n</script>\n\n{#each items as item}\n  <select bind:value={item.id}>\n    <option value='a'>a</option>\n    <option value='b'>b</option>\n  </select>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-change-handler/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\toptions: [{ id: 'a' }, { id: 'b' }, { id: 'c' }],\n\t\t\tselected: 'b'\n\t\t};\n\t},\n\n\ttest({ assert, component, target, window }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tassert.equal(select.value, 'b');\n\n\t\tconst event = new window.Event('change');\n\n\t\tselect.value = 'c';\n\t\tselect.dispatchEvent(event);\n\n\t\tassert.equal(select.value, 'c');\n\t\tassert.equal(component.lastChangedTo, 'c');\n\t\tassert.equal(component.selected, 'c');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-change-handler/main.svelte",
    "content": "<script>\n\texport let selected;\n\texport let options;\n\texport let lastChangedTo;\n\n\texport function updateLastChangedTo(result) {\n\t\tlastChangedTo = result;\n\t}\n</script>\n\n<select bind:value={selected} on:change=\"{() => updateLastChangedTo(selected)}\">\n\t{#each options as option}\n\t\t<option value=\"{option.id}\">{option.id}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-in-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, variant }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option${variant === 'hydrate' ? ' selected' : ''} value=\"a\">A</option>\n\t\t\t\t<option value=\"b\">B</option>\n\t\t\t</select>\n\t\t\tselected: a\n\t\t`\n\t\t);\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst event = new window.Event('change');\n\t\tselect.value = 'b';\n\t\tselect.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option${variant === 'hydrate' ? ' selected' : ''} value=\"a\">A</option>\n\t\t\t\t<option value=\"b\">B</option>\n\t\t\t</select>\n\t\t\tselected: b\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-in-each/main.svelte",
    "content": "<script>\n\tlet entries = [{selected: 'a' }]\n</script>\n\n{#each entries as entry}\n\t<select bind:value={entry.selected}>\n\t\t<option value='a'>A</option>\n\t\t<option value='b'>B</option>\n\t</select>\n\tselected: {entry.selected}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-lazy-options/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tawait Promise.resolve();\n\n\t\tconst options = target.querySelectorAll('option');\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t\tassert.equal(options[2].selected, false);\n\t\tassert.equal(options[3].selected, false);\n\t\tassert.equal(options[4].selected, true);\n\t\tassert.equal(options[5].selected, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-lazy-options/main.svelte",
    "content": "<script>\n\tlet value = 'bar';\n\tlet value_bound = 'bar';\n\tlet options = {};\n\n\tfunction loadOptions() {\n\t\toptions = {\n\t\t\tfoo: 'Foo',\n\t\t\tbar: 'Bar',\n\t\t\tbaz: 'Baz',\n\t\t};\n\t}\n</script>\n\n<select {value}>\n\t{#each Object.entries(options) as [key, value] (key)}\n\t\t<option value={key}>\n\t\t\t{value}\n\t\t</option>\n\t{/each}\n</select>\n\n<select bind:value={value_bound}>\n\t{#each Object.entries(options) as [key, value] (key)}\n\t\t<option value={key}>\n\t\t\t{value}\n\t\t</option>\n\t{/each}\n</select>\n\n<button on:click={loadOptions}>\n\tLoad options\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-multiple-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\n\t\tcomponent.attrs = { value: ['2'] };\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-multiple-spread/main.svelte",
    "content": "<script>\n\timport Select from './select.svelte';\n\n\texport let attrs = { value: ['1'] };\n</script>\n\n<Select {attrs} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-multiple-spread/select.svelte",
    "content": "<script>\n\texport let attrs;\n</script>\n\n<select multiple  {...attrs}>\n\t<option value=\"1\">option 1</option>\n\t<option value=\"2\">option 2</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-multiple-spread-and-bind/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\n\t\tcomponent.value = ['2'];\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-multiple-spread-and-bind/main.svelte",
    "content": "<script>\n\timport Select from './select.svelte';\n\n\texport let value = ['1'];\n\texport let other = {};\n</script>\n\n<Select {value} {other} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-multiple-spread-and-bind/select.svelte",
    "content": "<script>\n\texport let value;\n\texport let other;\n</script>\n\n<select multiple bind:value {...other}>\n\t<option value=\"1\">option 1</option>\n\t<option value=\"2\">option 2</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-no-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tassert.equal(select?.childNodes.length, 3);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-no-whitespace/main.svelte",
    "content": "<select>\n\t<option>a</option>\n\t<option>b</option>\n\t<option>c</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-one-way-bind/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 'a' };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\n\t\tcomponent.foo = 'b';\n\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-one-way-bind/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<select value=\"{foo}\">\n\t<option>a</option>\n\t<option>b</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-one-way-bind-object/_config.js",
    "content": "import { test } from '../../test';\n\nconst items = [{ id: 'a' }, { id: 'b' }];\n\nexport default test({\n\tget props() {\n\t\treturn { foo: items[0], items };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\n\t\tcomponent.foo = component.items[1];\n\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-one-way-bind-object/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let items;\n</script>\n\n<select value=\"{foo}\">\n\t<option value='{items[0]}'>a</option>\n\t<option value='{items[1]}'>b</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-one-way-bind-object-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nconst items = [{ id: 'a' }, { id: 'b' }];\n\nexport default test({\n\tget props() {\n\t\treturn { foo: [items[0]], items };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\n\t\tcomponent.foo = [component.items[1]];\n\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-one-way-bind-object-multiple/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let items;\n</script>\n\n<select value=\"{foo}\" multiple>\n\t<option value='{items[0]}'>a</option>\n\t<option value='{items[1]}'>b</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-options-spread-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<select>\n\t\t\t<option value=\"value\" class=\"option\">Label</option>\n\t\t</select>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-options-spread-attributes/main.svelte",
    "content": "<select>\n\t<option {...{ value: 'value', class: 'option' }}>Label</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, window }) {\n\t\tconst selects = document.querySelectorAll('select');\n\n\t\tconst event1 = new window.Event('change');\n\t\tselects[0].value = 'b';\n\t\tselects[0].dispatchEvent(event1);\n\n\t\tconst event2 = new window.Event('change');\n\t\tselects[1].value = 'b';\n\t\tselects[1].dispatchEvent(event2);\n\n\t\tassert.deepEqual(component.log, [1, 2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/select-props/main.svelte",
    "content": "<script>\n\texport let foo = [ 1, 2 ];\n\texport let log = [];\n\n\texport function handler(bar) {\n\t\tlog = log.concat(bar);\n\t}\n</script>\n\n{#each foo as bar}\n\t<select on:change='{() => handler(bar)}'>\n\t\t<option>a</option>\n\t\t<option>b</option>\n\t</select>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { depth: 5 };\n\t},\n\n\thtml: `\n\t\t<span>5</span>\n\t\t<span>4</span>\n\t\t<span>3</span>\n\t\t<span>2</span>\n\t\t<span>1</span>\n\t\t<span>0</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference/main.svelte",
    "content": "<script>\n\texport let depth;\n</script>\n\n<span>{depth}</span>\n{#if depth > 0}\n\t<svelte:self depth='{depth - 1}'/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference-component/Countdown.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n{#if count > 0}\n\t<slot count={count-1}></slot>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '5 4 3 2 1 0'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference-component/main.svelte",
    "content": "<script>\n\timport Countdown from './Countdown.svelte';\n\texport let count = 5;\n</script>\n\n{count}\n\n<Countdown {count} let:count>\n\t<svelte:self {count} />\n</Countdown>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference-tree/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tfile: {\n\t\t\t\tname: '/',\n\t\t\t\ttype: 'folder',\n\t\t\t\tchildren: [\n\t\t\t\t\t{ name: 'foo.jpg', type: 'image' },\n\t\t\t\t\t{ name: 'bar.jpg', type: 'image' },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'baz',\n\t\t\t\t\t\ttype: 'folder',\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name: '.DS_Store', type: 'junk' },\n\t\t\t\t\t\t\t{ name: 'README.md', type: 'markdown' }\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t};\n\t},\n\n\thtml: `\n\t\t<article class='file folder'>\n\t\t\t<span class='name'>/</span>\n\n\t\t\t<ul>\n\t\t\t\t<li>\n\t\t\t\t\t<article class='file image'>\n\t\t\t\t\t\t<span class='name'>foo.jpg</span>\n\t\t\t\t\t</article>\n\t\t\t\t</li><li>\n\t\t\t\t\t<article class='file image'>\n\t\t\t\t\t\t<span class='name'>bar.jpg</span>\n\t\t\t\t\t</article>\n\t\t\t\t</li><li>\n\t\t\t\t\t<article class='file folder'>\n\t\t\t\t\t\t<span class='name'>baz</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<article class='file junk'>\n\t\t\t\t\t\t\t\t\t<span class='name'>.DS_Store</span>\n\t\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t\t</li><li>\n\t\t\t\t\t\t\t\t<article class='file markdown'>\n\t\t\t\t\t\t\t\t\t<span class='name'>README.md</span>\n\t\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</article>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</article>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/self-reference-tree/main.svelte",
    "content": "<script>\n\texport let file;\n</script>\n\n<article class='file {file.type}'>\n\t<span class='name'>{file.name}</span>\n\n\t{#if file.type === 'folder'}\n\t\t<ul>\n\t\t\t{#each file.children as child}\n\t\t\t\t<li><svelte:self file='{child}'/></li>\n\t\t\t{/each}\n\t\t</ul>\n\t{/if}\n</article>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/semicolon-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/semicolon-hoisting/main.svelte",
    "content": "<script>\n    let time = new Date()\n    let timeZone = 'UTC'\n    ;(() => {\n    })()\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-oncreate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // uses oncreate\n\n\thtml: '<p>2</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-oncreate/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let foo = 1;\n\n\tonMount(() => {\n\t\tfoo = 2;\n\t});\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-onstate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>1</p>\n\t\t<p>2</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = 2;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>2</p>\n\t\t\t<p>4</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-onstate/main.svelte",
    "content": "<script>\n\texport let foo = 1;\n\texport let bar;\n\n\t$: {\n\t\tbar = foo * 2;\n\t}\n</script>\n\n<p>{foo}</p>\n<p>{bar}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-onstate-dedupes-renders/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n\n\t$: {\n\t\tif (foo.x !== bar.x) {\n\t\t\tthrow new Error('mismatch');\n\t\t}\n\t}\n</script>\n\n<div>{foo.x}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-onstate-dedupes-renders/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ component }) {\n\t\tcomponent.foo = { x: 2 };\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-in-onstate-dedupes-renders/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let foo = { x: 1 };\n\texport let bar = { x: 1 };\n\n\t$: {\n\t\tbar = foo;\n\t}\n</script>\n\n<Widget foo='{foo}' bar='{bar}'/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-null-text-node/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {number | null} */\n\t\t\tfoo: null\n\t\t};\n\t},\n\n\thtml: 'foo is ',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = 42;\n\t\tassert.htmlEqual(target.innerHTML, 'foo is 42');\n\n\t\tcomponent.foo = null;\n\t\tassert.htmlEqual(target.innerHTML, 'foo is ');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-null-text-node/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\nfoo is {foo}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-prevents-loop/Foo.svelte",
    "content": "<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-prevents-loop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-prevents-loop/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let visible = true;\n\texport let answer = 42;\n</script>\n\n{#if visible}\n\t<Foo bind:answer/>\n{:else}\n\t<Foo bind:answer/>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-undefined-attr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<div draggable='false'></div>\",\n\n\tssrHtml: \"<div foo='1' draggable='false'></div>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/set-undefined-attr/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let foo = 1;\n\texport let bar;\n\texport let _class;\n\n\tonMount(() => {\n\t\tfoo = undefined;\n\t});\n</script>\n\n<div {foo} {bar} class={_class} draggable='false'></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/shorthand-method-in-template/Foo.svelte",
    "content": "<script>\n\texport let bar;\n</script>\n\n{bar.answer()}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/shorthand-method-in-template/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '42'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/shorthand-method-in-template/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n</script>\n\n<Foo bar={{\n\tanswer() {\n\t\treturn 42;\n\t}\n}} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-component-prop/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<div>{value}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-component-prop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tget props() {\n\t\treturn { foo: 'foo' };\n\t},\n\thtml: '<div>foo @ foo # foo</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-component-prop/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\texport let foo;\n</script>\n\n<Widget value='foo @ {foo} # foo'>\n</Widget>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-expression-function-body/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '@foo'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-expression-function-body/main.svelte",
    "content": "{(() => '@foo')()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-static-at/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '@foo'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-static-at/main.svelte",
    "content": "@foo"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-static-hash/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '#foo'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/sigil-static-hash/main.svelte",
    "content": "#foo"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/single-static-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<span>test</span>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/single-static-element/main.svelte",
    "content": "<span>test</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/single-text-node/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'text'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/single-text-node/main.svelte",
    "content": "text\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot/A.svelte",
    "content": "<script>\n\tlet data = '';\n\n\tif ($$slots.b) {\n\t\tdata = 'foo';\n\t}\n\n\texport function getData() {\n\t\treturn data;\n\t}\n\n\tfunction toString(data) {\n\t\tconst result = {};\n\t\tconst sortedKeys = Object.keys(data).sort();\n\t\tsortedKeys.forEach((key) => (result[key] = data[key]));\n\t\treturn JSON.stringify(result);\n\t}\n</script>\n\n<slot />\n<slot name=\"a\" />\n\n$$slots: {toString($$slots)}\n\n{#if $$slots.b}\n\t<div>\n\t\t<slot name=\"b\" />\n\t</div>\n{:else}\n\tSlot b is not available\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>bye</span><span>world</span>\n\t\t<span slot=\"a\">hello world</span>\n\t\t$$slots: {\"a\":true,\"default\":true}\n\t\tSlot b is not available\n\n\t\t<span>bye world</span>\n\t\t<span slot=\"a\">hello world</span>\n\t\t$$slots: {\"a\":true,\"b\":true,\"default\":true}\n\t\t<div><span slot=\"b\">hello world</span></div>\n\t`,\n\n\tasync test({ assert, component }) {\n\t\tassert.equal(component.getA(), '');\n\t\tassert.equal(component.getB(), 'foo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot/main.svelte",
    "content": "<script>\n  import A from './A.svelte';\n  let a, b;\n\n  export function getA() {\n    return a.getData();\n  }\n  export function getB() {\n    return b.getData();\n  }\n</script>\n\n<A bind:this={a}>\n  <span slot=\"a\">hello world</span>\n  <span>bye</span>\n  <span>world</span>\n</A>\n\n<A bind:this={b}>\n  <span slot=\"a\">hello world</span>\n  <span slot=\"b\">hello world</span>\n  <span>bye world</span>\n</A>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-children-prop/A.svelte",
    "content": "<script>\n  export let children;\n</script>\n\n{children}\n<slot />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-children-prop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `foo bar foo`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-children-prop/main.svelte",
    "content": "<script>\n\timport A from \"./A.svelte\"; \n</script>\n\n<A children=\"foo\">\n\tbar\n</A>\n\n<A children=\"foo\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-if-block-update-no-anchor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { enabled: false };\n\t},\n\ttest({ assert, target, component }) {\n\t\tassert.htmlEqual(target.innerHTML, '<span></span>');\n\t\tcomponent.enabled = true;\n\t\tassert.htmlEqual(target.innerHTML, '<span>enabled</span>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-if-block-update-no-anchor/main.svelte",
    "content": "<script>\n\texport let enabled = false;\n</script>\n\n<span>\n\t<slot>\n\t\t{#if enabled}enabled{/if}\n\t</slot>\n</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-in-custom-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<custom-element>\n\t\t\t<header slot='header'>header header header</header>\n\t\t</custom-element>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-in-custom-element/main.svelte",
    "content": "<custom-element>\n\t<header slot='header'>header header header</header>\n</custom-element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-in-dynamic-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<dynamic-element>\n\t\t\t<header slot='header'>header header header</header>\n\t\t</dynamic-element>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-in-dynamic-element/main.svelte",
    "content": "<script>\n\texport let tagName = 'dynamic-element'\n</script>\n\n<svelte:element this={tagName}>\n\t<header slot='header'>header header header</header>\n</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-let-forwarding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div><div slot=\"x\">5</div></div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-let-forwarding/inner.svelte",
    "content": "<div>\n\t<slot name=\"x\" foo={5} />\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-let-forwarding/main.svelte",
    "content": "<script>\n\timport Outer from './outer.svelte';\n</script>\n\n<Outer>\n\t<div slot=\"x\" let:foo>\n\t\t{foo}\n\t</div>\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-let-forwarding/outer.svelte",
    "content": "<script>\n\timport Inner from './inner.svelte';\n</script>\n\n<Inner>\n\t<slot name=\"x\" slot=\"x\" let:foo {foo}>\n\t\t\t{foo}\n\t</slot>\n</Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-svg/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst circle = target.querySelector('circle');\n\t\tok(circle);\n\t\tassert.equal(circle.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-svg/main.svelte",
    "content": "<script>\n\timport Points from './points.svelte';\n</script>\n\n<svg>\n\t<Points />\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/slot-svg/points.svelte",
    "content": "<slot>\n\t<circle cx={10} cy={10} r={5} />\n</slot>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n\texport let quux;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz} ({typeof baz})</p>\n<p>qux: {qux}</p>\n<p>quux: {quux}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tprops: {\n\t\t\t\tfoo: 'lol',\n\t\t\t\tbaz: 40 + 2,\n\t\t\t\tqux: `this is a ${'piece of'} string`,\n\t\t\t\tquux: 'core'\n\t\t\t}\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div><p>foo: lol</p>\n\t\t<p>baz: 42 (number)</p>\n\t\t<p>qux: named</p>\n\t\t<p>quux: core</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.props = {\n\t\t\tfoo: 'wut',\n\t\t\tbaz: 40 + 3,\n\t\t\tqux: `this is a ${'rather boring'} string`,\n\t\t\tquux: 'heart'\n\t\t};\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><p>foo: wut</p>\n\t\t\t<p>baz: 43 (number)</p>\n\t\t\t<p>qux: named</p>\n\t\t\t<p>quux: heart</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let props;\n</script>\n\n<div>\n\t<Widget {...props} qux=\"named\"/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-2/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n\texport let quux;\n\texport let selected;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz} ({typeof baz})</p>\n<p>qux: {qux}</p>\n<p>quux: {quux}</p>\n<p>selected: {selected}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tlist: [\n\t\t\t\t{\n\t\t\t\t\tfoo: 'lol',\n\t\t\t\t\tbaz: 40 + 2,\n\t\t\t\t\tqux: 5,\n\t\t\t\t\tquux: 'core'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfoo: 'lolzz',\n\t\t\t\t\tbaz: 50 + 2,\n\t\t\t\t\tqux: 1,\n\t\t\t\t\tquux: 'quuxx'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div>\n\t\t\t<p>foo: lol</p>\n\t\t\t<p>baz: 42 (number)</p>\n\t\t\t<p>qux: 0</p>\n\t\t\t<p>quux: core</p>\n\t\t\t<p>selected: true</p>\n\t\t\t<p>foo: lolzz</p>\n\t\t\t<p>baz: 52 (number)</p>\n\t\t\t<p>qux: 0</p>\n\t\t\t<p>quux: quuxx</p>\n\t\t\t<p>selected: false</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.list = [\n\t\t\t{\n\t\t\t\tfoo: 'lol',\n\t\t\t\tbaz: 40 + 3,\n\t\t\t\tqux: 8,\n\t\t\t\tquux: 'heart'\n\t\t\t},\n\t\t\t{\n\t\t\t\tfoo: 'lolzz',\n\t\t\t\tbaz: 50 + 3,\n\t\t\t\tqux: 8,\n\t\t\t\tquux: 'heartxx'\n\t\t\t}\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>foo: lol</p>\n\t\t\t\t<p>baz: 43 (number)</p>\n\t\t\t\t<p>qux: 0</p>\n\t\t\t\t<p>quux: heart</p>\n\t\t\t\t<p>selected: true</p>\n\t\t\t\t<p>foo: lolzz</p>\n\t\t\t\t<p>baz: 53 (number)</p>\n\t\t\t\t<p>qux: 0</p>\n\t\t\t\t<p>quux: heartxx</p>\n\t\t\t\t<p>selected: false</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.qux = 1;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>\n\t\t\t\t<p>foo: lol</p>\n\t\t\t\t<p>baz: 43 (number)</p>\n\t\t\t\t<p>qux: 1</p>\n\t\t\t\t<p>quux: heart</p>\n\t\t\t\t<p>selected: false</p>\n\t\t\t\t<p>foo: lolzz</p>\n\t\t\t\t<p>baz: 53 (number)</p>\n\t\t\t\t<p>qux: 1</p>\n\t\t\t\t<p>quux: heartxx</p>\n\t\t\t\t<p>selected: true</p>\n\t\t\t</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-2/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let list;\n\texport let qux = 0;\n</script>\n\n<div>\n\t{#each list as item, index (item.foo)}\n\t\t<Widget {...item} qux={qux} selected={qux === index} />\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic/Foo.svelte",
    "content": "<script>\n\texport let a;\n</script>\n\n<p>a: {a}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { a: 1 } };\n\t},\n\n\thtml: `\n\t\t<p>a: 1</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.props = {\n\t\t\ta: 2\n\t\t};\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>a: 2</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let props;\n</script>\n\n<svelte:component this={Foo} {...props} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-non-object/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz}</p>\n<p>qux: {qux}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-non-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { foo: 'lol', baz: 40 + 2 } };\n\t},\n\n\thtml: `\n\t\t<div><p>foo: lol</p>\n\t\t<p>baz: 42</p>\n\t\t<p>qux: named</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst html = `\n\t\t\t<div><p>foo: </p>\n\t\t\t<p>baz: </p>\n\t\t\t<p>qux: named</p>\n\t\t`;\n\n\t\t// test undefined\n\t\t// @ts-ignore\n\t\tcomponent.props = undefined;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\t// set object props\n\t\t// @ts-ignore\n\t\tcomponent.props = this.props.props;\n\t\t// @ts-ignore\n\t\tassert.htmlEqual(target.innerHTML, this.html);\n\n\t\t// test null\n\t\t// @ts-ignore\n\t\tcomponent.props = null;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\t// set object props\n\t\t// @ts-ignore\n\t\tcomponent.props = this.props.props;\n\t\t// @ts-ignore\n\t\tassert.htmlEqual(target.innerHTML, this.html);\n\n\t\t// test boolean\n\t\t// @ts-ignore\n\t\tcomponent.props = true;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\t// set object props\n\t\t// @ts-ignore\n\t\tcomponent.props = this.props.props;\n\t\t// @ts-ignore\n\t\tassert.htmlEqual(target.innerHTML, this.html);\n\n\t\t// test number\n\t\t// @ts-ignore\n\t\tcomponent.props = 123;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-non-object/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let props;\n</script>\n\n<div>\n\t<Widget {...props} qux=\"named\"/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-non-object-multiple-dependencies/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n\texport let corge;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz}</p>\n<p>qux: {qux}</p>\n<p>corge: {corge}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { foo: 'lol', baz: 40 + 2 } };\n\t},\n\n\thtml: `\n\t\t<div><p>foo: lol</p>\n\t\t<p>baz: 42</p>\n\t\t<p>qux: named</p>\n\t\t<p>corge: b</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst html = `\n\t\t\t<div><p>foo: </p>\n\t\t\t<p>baz: </p>\n\t\t\t<p>qux: named</p>\n\t\t\t<p>corge: b</p>\n\t\t`;\n\n\t\t// test undefined\n\t\t// @ts-ignore\n\t\tcomponent.props = undefined;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\t// set object props\n\t\t// @ts-ignore\n\t\tcomponent.props = this.props.props;\n\t\t// @ts-ignore\n\t\tassert.htmlEqual(target.innerHTML, this.html);\n\n\t\t// test null\n\t\t// @ts-ignore\n\t\tcomponent.props = null;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\t// set object props\n\t\t// @ts-ignore\n\t\tcomponent.props = this.props.props;\n\t\t// @ts-ignore\n\t\tassert.htmlEqual(target.innerHTML, this.html);\n\n\t\t// test boolean\n\t\t// @ts-ignore\n\t\tcomponent.props = true;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\t// set object props\n\t\t// @ts-ignore\n\t\tcomponent.props = this.props.props;\n\t\t// @ts-ignore\n\t\tassert.htmlEqual(target.innerHTML, this.html);\n\n\t\t// test number\n\t\t// @ts-ignore\n\t\tcomponent.props = 123;\n\t\tassert.htmlEqual(target.innerHTML, html);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-non-object-multiple-dependencies/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let props;\n\n\texport let corge = false;\n\texport let a = 'a';\n\texport let b = 'b';\n</script>\n\n<div>\n\t<Widget corge={corge ? a : b} {...props} qux=\"named\"/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-undefined/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { a: 1 } };\n\t},\n\n\thtml: '',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.props = {\n\t\t\ta: 2\n\t\t};\n\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-dynamic-undefined/main.svelte",
    "content": "<script>\n\texport let props;\n</script>\n\n<svelte:component this={undefined} {...props} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-immutable/Widget.svelte",
    "content": "Hello World!"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-immutable/_config.js",
    "content": "import { test } from '../../test';\n\nconst obj = {\n\tx: 1,\n\ty: 2,\n\tz: 3\n};\n\nexport default test({\n\tget props() {\n\t\treturn { obj };\n\t},\n\n\ttest({ assert }) {\n\t\tassert.deepEqual(obj, { x: 1, y: 2, z: 3 });\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-immutable/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let obj;\n</script>\n\n<Widget {...obj} x={2} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-literal/Widget.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>foo: {foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-literal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div><p>foo: bar</p></div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-literal/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget {...{ foo: 'bar' }}/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-multiple-dependencies/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n</script>\n\n{foo} {baz}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-multiple-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'b baz',\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(target.innerHTML, 'a baz');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-multiple-dependencies/main.svelte",
    "content": "<script>\n\texport let foo = false;\n\texport let a = 'a';\n\texport let b = 'b';\n\texport let bar = { baz: 'baz' };\n\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget foo={foo ? a : b} {...bar}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-side-effects/Widget.svelte",
    "content": "<script>\n\texport let i;\n\texport let foo;\n\texport let qux;\n</script>\n\n<p>i: {i}</p>\n<p>foo: {foo}</p>\n<p>qux: {qux}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-side-effects/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {};\n\t},\n\n\thtml: `\n\t\t<div><p>i: 1</p>\n\t\t<p>foo: foo</p>\n\t\t<p>qux: named</p>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = 'lol';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><p>i: 2</p>\n\t\t\t<p>foo: lol</p>\n\t\t\t<p>qux: named</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-side-effects/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let foo = 'foo';\n\n\tlet i = 0\n\n\tconst getProps = (foo) => {\n\t\ti += 1;\n\t\treturn { foo,  i };\n\t}\n</script>\n\n<div>\n\t<Widget {...getProps(foo)} qux=\"named\"/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-with-bind/Widget.svelte",
    "content": "<script>\n\texport let value;\n</script>\n\n<p>{value}</p>\n<input bind:value/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-with-bind/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>foo</p>\n\t\t<input>\n\t`,\n\n\tssrHtml: `\n\t\t<p>foo</p>\n\t\t<input value=foo>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'bar';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>bar</p>\n\t\t\t<input>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-component-with-bind/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let props = {};\n\texport let x = 'foo';\n</script>\n\n<svelte:component this={Widget} {...props} bind:value={x} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-each-component/Nested.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n</script>\n\n<div data-a={a} data-b={b}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-each-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div data-a=\"1\" data-b=\"2\"></div>\n\t\t<div data-a=\"3\" data-b=\"4\"></div>\n\t`,\n\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ a: 1, b: 2 },\n\t\t\t\t{ a: 3, b: 4 }\n\t\t\t]\n\t\t};\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst { things } = component;\n\n\t\tcomponent.things = things.reverse();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div data-a=\"3\" data-b=\"4\"></div>\n\t\t\t<div data-a=\"1\" data-b=\"2\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-each-component/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let things;\n</script>\n\n{#each things as thing}\n\t<Nested {...thing}/>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-each-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div data-a=\"1\" data-b=\"2\"></div>\n\t\t<div data-c=\"3\" data-d=\"4\"></div>\n\t`,\n\n\tget props() {\n\t\treturn {\n\t\t\tthings: [\n\t\t\t\t{ 'data-a': 1, 'data-b': 2 },\n\t\t\t\t{ 'data-c': 3, 'data-d': 4 }\n\t\t\t]\n\t\t};\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst { things } = component;\n\n\t\tcomponent.things = things.reverse();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div data-c=\"3\" data-d=\"4\"></div>\n\t\t\t<div data-a=\"1\" data-b=\"2\"></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-each-element/main.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n{#each things as thing}\n\t<div {...thing}></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<div data-named=\"value\" data-foo=\"bar\">red</div>',\n\n\ttest({ assert, component, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tassert.equal(div.dataset.foo, 'bar');\n\t\tassert.equal(div.dataset.named, 'value');\n\n\t\tcomponent.color = 'blue';\n\t\tcomponent.props = { 'data-foo': 'baz', 'data-named': 'qux' };\n\t\tassert.htmlEqual(target.innerHTML, '<div data-named=\"value\" data-foo=\"baz\">blue</div>');\n\t\tassert.equal(div.dataset.foo, 'baz');\n\t\tassert.equal(div.dataset.named, 'value');\n\n\t\tcomponent.color = 'blue';\n\t\tcomponent.props = {};\n\t\tassert.htmlEqual(target.innerHTML, '<div data-named=\"value\">blue</div>');\n\t\tassert.equal(div.dataset.foo, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element/main.svelte",
    "content": "<script>\n\texport let props = {\n\t\t'data-foo': 'bar',\n\t\t'data-named': 'qux'\n\t};\n\texport let color = 'red';\n</script>\n\n<div {...props} data-named=\"value\">{color}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-boolean/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { disabled: true } };\n\t},\n\n\thtml: `\n\t\t<button disabled>click me</button>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tassert.ok(button.disabled);\n\n\t\tcomponent.props = { disabled: false };\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>click me</button>');\n\t\tassert.ok(!button.disabled);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-boolean/main.svelte",
    "content": "<script>\n\texport let props;\n</script>\n\n<button {...props} >click me</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<div class='foo svelte-u3t2mm bar'>hello</div>\",\n\ttest({ assert, component, target }) {\n\t\tcomponent.blah = 'goodbye';\n\t\tassert.htmlEqual(target.innerHTML, \"<div class='foo svelte-u3t2mm bar'>goodbye</div>\");\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-class/main.svelte",
    "content": "<script>\n\texport let blah = 'hello';\n</script>\n\n<div class:bar={true} {...{ class: 'foo' }}>{blah}</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n\t.bar {\n\t\tbackground: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { 'data-foo': 'bar' } };\n\t},\n\n\thtml: '<input data-foo=\"bar\">'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input/main.svelte",
    "content": "<script>\n\texport let value;\n\texport let props;\n</script>\n\n<input bind:value {...props}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-bind-group-with-value-attr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { props: { 'data-foo': 'bar' } };\n\t},\n\n\thtml: '<input data-foo=\"bar\" type=\"radio\" value=\"abc\">',\n\n\tasync test({ assert, target }) {\n\t\tconst input = /** @type {HTMLInputElement & { __value: string }} */ (\n\t\t\ttarget.querySelector('input')\n\t\t);\n\t\tassert.equal(input.value, 'abc');\n\t\tassert.equal(input.__value, 'abc');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-bind-group-with-value-attr/main.svelte",
    "content": "<script>\n\texport let props;\n\tlet radioValue;\n</script>\n\n<input type=\"radio\" value=\"abc\" {...props} bind:group={radioValue} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-each-block-keyed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\t\tassert.equal(input1.value, 'value1');\n\t\tassert.equal(input2.value, 'value2');\n\n\t\tcomponent.items = component.items.reverse();\n\t\tassert.equal(input1.value, 'value1');\n\t\tassert.equal(input2.value, 'value2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-each-block-keyed/main.svelte",
    "content": "<script>\n\texport let items = ['value1', 'value2'];\n</script>\n\n{#each items as item (item)}\n\t<input value={item} {...{}} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-select/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst [option1, option2] = select;\n\n\t\tlet selections = Array.from(select.selectedOptions);\n\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(!selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\n\t\tcomponent.value = 'Hello';\n\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(!selections.includes(option2));\n\n\t\tcomponent.spread = { value: 'World' };\n\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(!selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-select/main.svelte",
    "content": "<script>\n  export let value = 'World';\n  export let spread = {};\n</script>\n\n<select {value} {...spread}>\n  <option>Hello</option>\n  <option>World</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-select-multiple/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst [option1, option2] = /** @type {NodeListOf<HTMLOptionElement>} */ (select.childNodes);\n\n\t\tlet selections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 2);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\n\t\tconst event = new window.Event('change');\n\n\t\tinput1.checked = false;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(!selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\n\t\tinput2.checked = false;\n\t\tinput2.dispatchEvent(event);\n\t\tflushSync();\n\t\tinput1.checked = true;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(!selections.includes(option2));\n\n\t\tcomponent.spread = { value: ['Hello', 'World'] };\n\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 2);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-select-multiple/main.svelte",
    "content": "<script>\n  let value = ['Hello', 'World'];\n  export let spread = {};\n</script>\n\n<select multiple {value} {...spread}>\n  <option>Hello</option>\n  <option>World</option>\n</select>\n\n<input type=\"checkbox\" value=\"Hello\" bind:group={value}>\n<input type=\"checkbox\" value=\"World\" bind:group={value}>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value/InputOne.svelte",
    "content": "<script>\n  import { omit } from './utils.js';\n\n  export let value;\n\t\n\tfunction onInput(e) {  \n    value = e.target.value;\n  }\n\n  $: props = omit($$props, 'value');\n</script>\n\n<input\n\ttype=\"text\"\n\t{...props}\n\ton:input={onInput}\n\t{value}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value/InputTwo.svelte",
    "content": "<script>\n  import { omit } from './utils.js';\n\n  export let value;\n\t\n\tfunction onInput(e) {  \n    value = e.target.value;\n  }\n\n  $: props = omit($$props, 'value', 'minlength');\n</script>\n\t\n<input\n\ttype=\"text\"\n\tminlength=\"10\"\n\tvalue={value}\n  {...props}\n\ton:input={onInput}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, window }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\n\t\t// we are not able emulate user interaction in jsdom,\n\t\t// therefore, jsdom could not validate minlength / maxlength\n\n\t\t// we simulate user input with\n\t\t// setting input.value + dispatchEvent\n\n\t\t// and we determine if svelte does not set the `input.value` again by\n\t\t// spying on the setter of `input.value`\n\n\t\tconst spy1 = spyOnValueSetter(input1, input1.value);\n\t\tconst spy2 = spyOnValueSetter(input2, input2.value);\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput1.value = '12345';\n\t\tspy1.reset();\n\t\tawait input1.dispatchEvent(event);\n\n\t\t// In Svelte 5, the value will always fire as the effects for setting\n\t\t// the value and spreading happen in different parts.\n\n\t\t// assert.ok(!spy1.isSetCalled());\n\n\t\tinput2.value = '12345';\n\t\tspy2.reset();\n\t\tawait input2.dispatchEvent(event);\n\n\t\t// Same as above.\n\t\t// assert.ok(!spy2.isSetCalled());\n\n\t\tspy1.reset();\n\t\tcomponent.val1 = '56789';\n\t\tassert.ok(spy1.isSetCalled());\n\n\t\tspy2.reset();\n\t\tcomponent.val2 = '56789';\n\t\t// Same as above.\n\t\t// assert.ok(spy2.isSetCalled());\n\t}\n});\n\n/**\n * @param {HTMLInputElement} input\n * @param {string} initialValue\n */\nfunction spyOnValueSetter(input, initialValue) {\n\tlet value = initialValue;\n\tlet isSet = false;\n\tObject.defineProperty(input, 'value', {\n\t\tget() {\n\t\t\treturn value;\n\t\t},\n\t\tset(_value) {\n\t\t\tvalue = _value;\n\t\t\tisSet = true;\n\t\t}\n\t});\n\n\treturn {\n\t\tisSetCalled() {\n\t\t\treturn isSet;\n\t\t},\n\t\treset() {\n\t\t\tisSet = false;\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value/main.svelte",
    "content": "<script>\n\timport InputOne from './InputOne.svelte';\n\timport InputTwo from './InputTwo.svelte';\n\texport let val1 = '';\n\texport let val2 = '';\n</script>\n\n<InputOne bind:value={val1} required minlength=\"10\" />\n<InputTwo bind:value={val2} required minlength=\"10\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value/utils.js",
    "content": "export function omit(obj, ...keysToOmit) {\n\treturn Object.keys(obj).reduce((acc, key) => {\n\t\tif (keysToOmit.indexOf(key) === -1) acc[key] = obj[key];\n\t\treturn acc;\n\t}, {});\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value-undefined/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tcomponent.value = undefined;\n\n\t\tassert.equal(input.value, '');\n\n\t\tcomponent.value = 'foobar';\n\n\t\tassert.equal(input.value, 'foobar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-input-value-undefined/main.svelte",
    "content": "<script>\n\texport let value = '';\n</script>\n\n<input {value} {...{}} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {Record<string, any>} */\n\t\t\ta: { 'data-one': 1, 'data-two': 2 },\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tc: { 'data-b': 'overridden' },\n\t\t\td: 'deeeeee'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div data-one=\"1\" data-two=\"2\" data-b=\"overridden\" data-d=\"deeeeee\" >test</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = {\n\t\t\t'data-one': 10\n\t\t};\n\t\tcomponent.c = {\n\t\t\t'data-c': 'new'\n\t\t};\n\t\tcomponent.d = 'DEEEEEE';\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div data-one=\"10\" data-b=\"b\" data-c=\"new\" data-d=\"DEEEEEE\" >test</div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-multiple/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let c;\n\texport let d;\n</script>\n\n<div {...a} data-b=\"b\" {...c} data-d={d} >test</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-multiple-dependencies/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<div class='b' title='baz'></div>\",\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = true;\n\t\tassert.htmlEqual(target.innerHTML, \"<div class='a' title='baz'></div>\");\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-multiple-dependencies/main.svelte",
    "content": "<script>\n\texport let foo = false;\n\texport let a = 'a';\n\texport let b = 'b';\n\texport let bar = { title: 'baz' };\n</script>\n\n<div class={foo ? a : b} {...bar}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-readonly/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // DOM and SSR output is different, a separate SSR test exists\n\thtml: '<input form=\"qux\" list=\"quu\" />',\n\n\ttest({ assert, target }) {\n\t\tconst div = /** @type {HTMLDivElement & { value: string }} */ (target.querySelector('input'));\n\t\tassert.equal(div.value, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-readonly/main.svelte",
    "content": "<script>\n\tlet props = {\n\t\tvalue: 'bar',\n\t\tform: 'qux',\n\t\tlist: 'quu',\n\t};\n</script>\n\n<input {...props} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-removal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<input>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-removal/main.svelte",
    "content": "<input placeholder='foo' {...{ placeholder: null }}>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-scope/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div class=\"foo svelte-xg5rbo\">red</div>\n\t\t<div class=\"qux svelte-xg5rbo\">red</div>\n\t\t<div class=\"bar svelte-xg5rbo\">red and bold</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-scope/main.svelte",
    "content": "<style>\n\tdiv { color: red; }\n\t.bar { font-weight: bold; }\n</style>\n\n<div {...{ class: 'bar' }} class='foo'>red</div>\n\n<div class='foo' {...{ class: 'qux' }}>red</div>\n\n<div {...{ class: 'bar' }}>red and bold</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/Select.svelte",
    "content": "<script>\n\texport let options = [];\n\texport let value = \"\";\n\texport let label = \"\";\n</script>\n\n<select bind:value {...$$restProps}>\n\t{#each options as option}\n\t\t<option>{option}</option>\n\t{/each}\n</select>\n<p>{label}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\n\t\tassert.equal(select.value, '1');\n\n\t\tcomponent.label = 'hoge';\n\n\t\tassert.equal(select.value, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/main.svelte",
    "content": "<script>\n\timport Select from \"./Select.svelte\";\n\tlet value = {\n\t\ta: \"1\",\n\t\tb: \"1\",\n\t};\n\tconst options = [\"1\", \"2\", \"3\"];\n\texport let label = \"test\";\n</script>\n\n<Select bind:value={value.a} {options} label={label} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-from-import/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div>\n\t\t<p class=\"tooltip\">static stuff</p>\n\t</div>\n\t<div>\n\t\t<p class=\"tooltip\">dynamic stuff</p>\n\t</div>\n\t<button>unused</button>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-from-import/main.svelte",
    "content": "<script>\n\timport { spread } from './spread.js';\n\tlet dynamic = 'dynamic';\n</script>\n\n<div>\n\t<p {...spread()}>static stuff</p>\n</div>\n\n<div>\n\t<p {...spread()}>{dynamic} stuff</p>\n</div>\n\n<button on:click={() => dynamic = ''}>unused</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-from-import/spread.js",
    "content": "export function spread() {\n\treturn {\n\t\tclass: 'tooltip',\n\t\tid: null\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-own-props/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n\texport let quux;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz} ({typeof baz})</p>\n<p>qux: {qux}</p>\n<p>quux: {quux}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-own-props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tfoo: 'lol',\n\t\t\tbaz: 40 + 2,\n\t\t\tqux: `this is a ${'piece of'} string`,\n\t\t\tquux: 'core'\n\t\t};\n\t},\n\n\thtml: `\n\t\t<div><p>foo: lol</p>\n\t\t<p>baz: 42 (number)</p>\n\t\t<p>qux: named</p>\n\t\t<p>quux: core</p></div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.$set({\n\t\t\tfoo: 'wut',\n\t\t\tbaz: 40 + 3,\n\t\t\tqux: `this is a ${'rather boring'} string`,\n\t\t\tquux: 'heart'\n\t\t});\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div><p>foo: wut</p>\n\t\t\t<p>baz: 43 (number)</p>\n\t\t\t<p>qux: named</p>\n\t\t\t<p>quux: heart</p></div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-own-props/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget {...$$props} qux=\"named\"/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-reuse-levels/Nested.svelte",
    "content": "<script>\n\timport { beforeUpdate } from 'svelte';\n\n\texport let a, b, c;\n\n\tlet changed = {};\n\tlet previous = {};\n\n\tbeforeUpdate(() => {\n\t\tchanged.a = a !== previous.a;\n\t\tchanged.b = b !== previous.b;\n\t\tchanged.c = c !== previous.c;\n\n\t\tprevious.a = a;\n\t\tprevious.b = b;\n\t\tprevious.c = c;\n\t});\n</script>\n\n<pre>{JSON.stringify({ a, b, c })}</pre>\n<pre>{JSON.stringify(changed)}</pre>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-reuse-levels/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<pre>{\"a\":1,\"b\":[1],\"c\":42}</pre>\n\t\t<pre>{\"a\":true,\"b\":true,\"c\":true}</pre>\n\t`,\n\n\tssrHtml: `\n\t\t<pre>{\"a\":1,\"b\":[1],\"c\":42}</pre>\n\t\t<pre>{}</pre>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.a = 2;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<pre>{\"a\":2,\"b\":[1],\"c\":42}</pre>\n\t\t\t<pre>{\"a\":true,\"b\":false,\"c\":false}</pre>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-reuse-levels/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let a = 1;\n\tlet x = {};\n</script>\n\n<Nested {...x} {a} b={[1]} c={42}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-width-height-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// https://github.com/sveltejs/svelte/issues/6752\n\thtml: '<img height=\"100%\" width=\"100%\" alt=\"\" />'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spread-width-height-attributes/main.svelte",
    "content": "<img height=\"100%\" width=\"100%\" alt=\"\" {...$$restProps} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spring/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>0</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/spring/main.svelte",
    "content": "<script>\n\timport { spring } from 'svelte/motion';\n\n\tconst x = spring(0);\n\tx.set(1);\n</script>\n\n<p>{$x}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/state-deconflicted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tstate: 'deconflicted',\n\t\t\tstates: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', '...and some others']\n\t\t};\n\t},\n\n\thtml: `\n\t\t<p>Current state: deconflicted</p>\n\n\t\t<ul>\n\t\t\t<li>Alabama</li>\n\t\t\t<li>Alaska</li>\n\t\t\t<li>Arizona</li>\n\t\t\t<li>Arkansas</li>\n\t\t\t<li>...and some others</li>\n\t\t</ul>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.states = [\n\t\t\t'Maine',\n\t\t\t'Maryland',\n\t\t\t'Massachusetts',\n\t\t\t'Michigan',\n\t\t\t'Minnesota',\n\t\t\t'Mississippi',\n\t\t\t'Missouri',\n\t\t\t'Montana'\n\t\t];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>Current state: deconflicted</p>\n\n\t\t\t<ul>\n\t\t\t\t<li>Maine</li>\n\t\t\t\t<li>Maryland</li>\n\t\t\t\t<li>Massachusetts</li>\n\t\t\t\t<li>Michigan</li>\n\t\t\t\t<li>Minnesota</li>\n\t\t\t\t<li>Mississippi</li>\n\t\t\t\t<li>Missouri</li>\n\t\t\t\t<li>Montana</li>\n\t\t\t</ul>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/state-deconflicted/main.svelte",
    "content": "<script>\n\texport let state;\n\texport let states;\n</script>\n\n<p>Current state: {state}</p>\n\n<ul>\n\t{#each states as state}\n\t\t<li>{state}</li>\n\t{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/state-imported-function/Data.svelte.js",
    "content": "export let obj = $state({ a: 1, b: 2 });\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/state-imported-function/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>Replace</button>\\n9,10,11`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/state-imported-function/main.svelte",
    "content": "<script>\n\timport { obj } from \"./Data.svelte.js\";\n\n\tfunction replaceProp() {\n\t\tObject.assign(obj, {a:9, b:10, c:11});\n\t}\n</script>\n\n<button onclick={replaceProp}>Replace</button>\n\n{Object.values(obj)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/static-svelte-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p></p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.notEqual(p, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/static-svelte-element/main.svelte",
    "content": "<div>\n\t<svelte:element this={\"p\"} />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/static-svelte-element2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<p></p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.notEqual(p, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/static-svelte-element2/main.svelte",
    "content": "<script>\n\tconst p = 'p';\n</script>\n\n<div>\n\t<svelte:element this={p} />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\tget props() {\n\t\treturn { count: writable(0) };\n\t},\n\n\thtml: `\n\t\t<button>count 0</button>\n\t\t<p>doubled: 0</p>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>count 1</button>\n\t\t\t<p>doubled: 2</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.count.set(42);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>count 42</button>\n\t\t\t<p>doubled: 84</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates/main.svelte",
    "content": "<script>\n\timport { derived } from 'svelte/store';\n\n\texport let count;\n\tconst doubled = derived(count, $count => $count * 2);\n</script>\n\n<button on:click=\"{() => $count += 1}\">count {$count}</button>\n<p>doubled: {$doubled}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates-destructure/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>$userName1: user1</div>\n\t\t<div>$userName2: </div>\n\t\t<div>$userName3: </div>\n\t\t<div>$userName4: user4</div>\n\t\t<div>$userName5: </div>\n\t\t<div>$userName6: user6</div>\n\t\t<div>$userName7: </div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates-destructure/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet userName1 = writable('init1');\n\tlet userName2 = writable('init2');\n\tlet userName3 = writable('init3');\n\tlet userName4 = writable('init4');\n\tlet userName5 = writable('init5');\n\tlet userName6 = writable('init6');\n\tlet userName7 = writable('init7');\n\t\n\tlet obj = {\n\t\tuserName1: 'user1', \n\t\tuserName2: 'user2', \n\t\tuserName3: 'user3', \n\t\t$userName4: 'user4',\n\t\tuserName5: 'user5',\n\t\t$userName6: 'user6',\n\t\tuserName7: 'user7',\n\t};\n\t\n\t({userName1: $userName1, $userName2 } = obj);\n\t({$userName3} = obj);\n\t({$userName4} = obj);\n\t({$userName5, $userName6, $userName7} = obj);\n</script>\n\n<div>$userName1: {$userName1}</div>\n<div>$userName2: {$userName2}</div>\n<div>$userName3: {$userName3}</div>\n<div>$userName4: {$userName4}</div>\n<div>$userName5: {$userName5}</div>\n<div>$userName6: {$userName6}</div>\n<div>$userName7: {$userName7}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates-property/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>a: {\"foo\":3,\"bar\":2}</p>\n\t\t<p>b: {\"foo\":3}</p>\n\t\t<button></button>\n\t\t<button></button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbtn1.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: {\"foo\":4,\"bar\":2}</p>\n\t\t\t<p>b: {\"foo\":4,\"baz\":0}</p>\n\t\t\t<button></button>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\n\t\tbtn2.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: {\"foo\":5,\"bar\":2}</p>\n\t\t\t<p>b: {\"foo\":5,\"qux\":0}</p>\n\t\t\t<button></button>\n\t\t\t<button></button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates-property/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst a = writable({ foo: 1, bar: 2 });\n\t$a.foo = 3;\n\n\tconst b = writable({ foo: 1, bar: 2 });\n\t$b = { foo: 3 };\n\n\tfunction update() {\n\t\t$a.foo = $a.foo + 1;\n\t\t$b = { foo: $b.foo + 1, qux: 0 };\n\t}\n</script>\n\n<p>a: {JSON.stringify($a)}</p>\n<p>b: {JSON.stringify($b)}</p>\n\n<button on:click={() => {\n\t$a.foo = $a.foo + 1;\n\t$b = { foo: $b.foo + 1, baz: 0 };\n}} />\n\n<button on:click={update}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates-reactive/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { writable } from 'svelte/store';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tget props() {\n\t\treturn { c: writable(0) };\n\t},\n\n\thtml: `\n\t\t<p>a: 0</p>\n\t\t<p>b: 0</p>\n\t\t<p>c: 0</p>\n\n\t\t<button>+1</button>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tflushSync(() => button.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 1</p>\n\t\t\t<p>b: 1</p>\n\t\t\t<p>c: 1</p>\n\n\t\t\t<button>+1</button>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => component.c.set(42));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>a: 42</p>\n\t\t\t<p>b: 42</p>\n\t\t\t<p>c: 42</p>\n\n\t\t\t<button>+1</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-assignment-updates-reactive/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst a = writable();\n\tconst b = writable();\n\texport let c;\n\n\t$: $a = $b;\n\t$: $b = $c;\n\n\tfunction increment() {\n\t\t$c += 1;\n\t}\n</script>\n\n<p>a: {$a}</p>\n<p>b: {$b}</p>\n<p>c: {$c}</p>\n\n<button on:click={increment}>+1</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-resubscribe-immediate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '{\"answer\":4}'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-resubscribe-immediate/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet value = writable({ foo: 1, bar: 2 });\n\t$value.foo = $value.foo + $value.bar; // 3\n\t$value.bar = $value.foo * $value.bar; // 6\n\n\t// should resubscribe immediately\n\tvalue = writable({ foo: $value.foo + 2, bar: $value.bar - 2 }); // { foo: 5, bar: 4 }\n\n\t// should mutate the store value\n\t$value.baz = $value.foo + $value.bar; // { foo: 5, bar: 4, baz: 9 }\n\n\t// should resubscribe immediately\n\tvalue = writable({ qux: $value.baz - $value.foo }); // { qux: 4 }\n\n\t// making sure instrumentation returns the expression value\n\t$value = {\n\t\tone: writable(\n\t\t\t$value = {\n\t\t\t\ttwo: ({ $value } = { $value: { fred: $value.qux } }) // { fred: 4 }\n\t\t\t} // { two: { $value: { fred: 4 } } }\n\t\t) // { one: { two: { $value: { fred: 4 } } } }\n\t};\n\n\tconst one = $value.one;\n\n\tvalue.update(val => ({ answer: $one.two.$value.fred })); // { answer: 4 }\n</script>\n\n{JSON.stringify($value)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\tget props() {\n\t\treturn { count: writable(0) };\n\t},\n\n\thtml: `\n\t\t<button>count 0</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>count 1</button>\n\t\t`\n\t\t);\n\n\t\tcomponent.count.set(42);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>count 42</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe/main.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n<button on:click=\"{() => count.update(n => n + 1)}\">count {$count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-event-callback/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `\n\t<input class=\"input\" placeholder=\"Type here\" type=\"text\">\n\tDirty: false\n\tValid: false\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'foo';\n\t\tconst inputEvent = new window.InputEvent('input');\n\n\t\tflushSync(() => input.dispatchEvent(inputEvent));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<input class=\"input\" placeholder=\"Type here\" type=\"text\">\n\t\tDirty: true\n\t\tValid: true\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-event-callback/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\texport function createValidator() {\n\t\tconst { subscribe, set } = writable({ dirty: false, valid: false });\n\n\t\tfunction action(node, binding) {\n\t\t\treturn {\n\t\t\t\tupdate(value) {\n\t\t\t\t\tset({ dirty: true, valid: value !== '' });\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\treturn [{ subscribe }, action];\n\t}\n\tconst [validity, validate] = createValidator();\n\tlet email = null;\n</script>\n\n<input class=\"input\"\n\ttype=\"text\"\n\tbind:value={email}\n\tplaceholder=\"Type here\"\n\tuse:validate={email}\n/>\n\nDirty: {$validity.dirty}\nValid: {$validity.valid}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-immediate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>42</p>\n\t`,\n\n\tasync test({ assert, component }) {\n\t\tassert.equal(component.initial_foo, 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-immediate/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet foo = writable(42);\n\texport let initial_foo = $foo;\n</script>\n\n<p>{initial_foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-immediate-multiple-vars/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>42</p>\n\t`,\n\n\tasync test({ assert, component }) {\n\t\tassert.equal(component.initial_foo, 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-immediate-multiple-vars/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst foo = writable(42), bar = 'something else';\n\texport let initial_foo = $foo;\n</script>\n\n<p>{initial_foo}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-implicit/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\tget props() {\n\t\treturn { count: writable(0) };\n\t},\n\n\thtml: `\n\t\t<button>count 0</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbutton.dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>count 1</button>\n\t\t`\n\t\t);\n\n\t\tcomponent.count.set(42);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>count 42</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-implicit/main.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n<button on:click=\"{() => count.update(n => n + 1)}\">count {$count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { writable } from 'svelte/store';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tget props() {\n\t\treturn { count: writable(0) };\n\t},\n\n\thtml: `\n\t\t<button>double 0</button>\n\t`,\n\n\ttest({ assert, component, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tflushSync(() => button.dispatchEvent(click));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>double 2</button>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => component.count.set(42));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>double 84</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration/main.svelte",
    "content": "<script>\n\texport let count;\n\n\tlet double;\n\t$: double = $count * 2;\n</script>\n\n<button on:click=\"{() => count.update(n => n + 1)}\">double {double}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/App.svelte",
    "content": "<script>\n\texport let store_container;\n\n\t$: ({ store } = store_container);\n\t$: value = $store;\n</script>\n<div>{value}</div>\n<div>{$store}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>Hello World</div>\n\t\t<div>Hello World</div>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.update_value('Hi Svelte');\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>Hi Svelte</div>\n\t\t\t<div>Hi Svelte</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\timport Child from './App.svelte';\n\n\tconst store_container = { store: writable('Hello World') };\n\n\texport function update_value(value) {\n\t\tstore_container.store = writable(value);\n\t}\n</script>\n\n<Child {store_container} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-script/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { writable } from 'svelte/store';\n\nlet count = writable(0);\n\nexport default test({\n\tget props() {\n\t\tcount = writable(0);\n\t\treturn { count };\n\t},\n\n\thtml: `\n\t\t<button>+1</button>\n\t`,\n\n\tasync test({ assert, component, target, window }) {\n\t\tassert.equal(component.get_count(), 0);\n\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait button.dispatchEvent(click);\n\t\tassert.equal(component.get_count(), 1);\n\n\t\tawait count.set(42);\n\t\tassert.equal(component.get_count(), 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-script/main.svelte",
    "content": "<script>\n\texport let count;\n\n\texport function get_count() {\n\t\treturn $count;\n\t}\n</script>\n\n<button on:click=\"{() => count.update(n => n + 1)}\">+1</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-missing-global-script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'missingGlobal is not defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-missing-global-script/main.svelte",
    "content": "<script>\n\t$: $missingGlobal;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-missing-global-template/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'missingGlobal is not defined'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-missing-global-template/main.svelte",
    "content": "<p>{$missingGlobal}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-nullish/_config.js",
    "content": "import { test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\thtml: `\n\t\t<p></p>\n\t`,\n\tasync test({ assert, component, target }) {\n\t\tcomponent.store = writable('foo');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>foo</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-nullish/main.svelte",
    "content": "<script>\n\texport let store;\n</script>\n\n<p>{$store}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-removed-store/_config.js",
    "content": "import { test } from '../../test';\nimport { writable } from 'svelte/store';\n\nexport default test({\n\thtml: `\n\t\t<p></p>\n\t`,\n\ttest({ assert, component, target }) {\n\t\tcomponent.store = writable('foo');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>foo</p>\n\t\t`\n\t\t);\n\t\tcomponent.store = undefined;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p></p>\n\t\t`\n\t\t);\n\t\tcomponent.store = writable('bar');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>bar</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-removed-store/main.svelte",
    "content": "<script>\n\texport let store;\n</script>\n\n<p>{$store}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-dev-mode-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tget props() {\n\t\treturn { count: 0 };\n\t},\n\n\terror: 'store_invalid_shape\\n`count` is not a store with a `subscribe` method'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-dev-mode-error/main.svelte",
    "content": "<script>\n\texport let count;\n</script>\n\n<button on:click={() => count.update((n) => n + 1)}>count {$count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'changed';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>changed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst items = writable([\n\t\t { id: 0, text: 'initial' }\n\t]);\n</script>\n\n{#each $items as item}\n\t<input bind:value={item.text}>\n{/each}\n\n<p>{$items[0].text}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding-deep/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'changed';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>changed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding-deep/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet itemStore = writable({prop: {things: [{name: \"item store\"}]}});\n</script>\n\n{#each $itemStore.prop.things as thing }\n\t<input bind:value={thing.name} >\n{/each}\n\n<p>{$itemStore.prop.things[0].name}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding-destructuring/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'changed';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>changed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding-destructuring/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst items = writable([\n\t\t { id: 0, text: 'initial' }\n\t]);\n</script>\n\n{#each $items as { text }}\n\t<input bind:value={text}>\n{/each}\n\n<p>{$items[0].text}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding-logical/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\t\tinput.value = 'changed';\n\t\tinput.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<input>\n\t\t\t<p>changed</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-each-binding-logical/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst items = writable([\n\t\t{ id: 0, text: 'initial' }\n\t]);\n</script>\n\n{#each $items ?? [] as item}\n\t<input bind:value={item.text}>\n{/each}\n\n<p>{$items[0].text}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imported/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: { dev: true }, // tests `@validate_store` code generation\n\n\thtml: `\n\t\t<p>42</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imported/foo.js",
    "content": "import { writable } from 'svelte/store';\n\nexport default writable(42);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imported/main.svelte",
    "content": "<script>\n\timport foo from './foo.js';\n\tconst answer = $foo;\n</script>\n\n<p>{answer}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imported-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>42</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imported-module/foo.js",
    "content": "import { writable } from 'svelte/store';\n\nexport default writable(42);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imported-module/main.svelte",
    "content": "<script module>\n\timport foo from './foo.js';\n</script>\n\n<script>\n\tconst answer = $foo;\n</script>\n\n<p>{answer}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imports-hoisted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: { dev: true }, // tests `@validate_store` code generation\n\n\thtml: `\n\t\t<p>42</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imports-hoisted/foo.js",
    "content": "import { writable } from 'svelte/store';\n\nexport default writable(42);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-imports-hoisted/main.svelte",
    "content": "<script>\n\timport foo from './foo.js';\n\tfoo.bar = 'baz';\n\tconst answer = $foo;\n</script>\n\n<p>{answer}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-increment-updates-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '0',\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.increment();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-increment-updates-reactive/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst foo = writable(0);\n\n\texport function increment() {\n\t\t$foo++;\n\t}\n</script>\n\n{$foo}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-invalidation-while-update-1/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `\n\t\t<input>\n\t\t<div></div>\n\t\t<div>simple</div>\n\t\t<button>click me</button>\n\t`,\n\tssrHtml: `\n\t\t<input value=\"\">\n\t\t<div></div>\n\t\t<div>simple</div>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tconst button = target.querySelector('button');\n\t\tok(input);\n\t\tok(button);\n\n\t\tconst inputEvent = new window.InputEvent('input');\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tinput.value = 'foo';\n\t\tflushSync(() => input.dispatchEvent(inputEvent));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<input>\n\t\t<div>foo</div>\n\t\t<div>foo</div>\n\t\t<button>click me</button>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => button.dispatchEvent(clickEvent));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<input>\n\t\t<div>foo</div>\n\t\t<div>clicked</div>\n\t\t<button>click me</button>\n\t\t`\n\t\t);\n\n\t\tinput.value = 'bar';\n\t\tflushSync(() => input.dispatchEvent(inputEvent));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<input>\n\t\t<div>bar</div>\n\t\t<div>bar</div>\n\t\t<button>click me</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-invalidation-while-update-1/main.svelte",
    "content": "<script>\n\timport {writable} from 'svelte/store';\n\n\tfunction action(node, binding) {\n\t\treturn {\n\t\t\tupdate: (value) => s.set(value),\n\t\t}    \n\t}\n\tlet s = writable(\"simple\");\n\tlet v = \"\";\n\t\n\tfunction click() {\n\t\ts.set('clicked');\n\t}\n</script>\n\n<input bind:value={v} use:action={v}>\n<div>{v}</div>\n<div>{$s}</div>\n<button on:click={click}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-invalidation-while-update-2/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `\n\t\t<div></div>\n\t\t<div>simple</div>\n\t\t<input>\n\t\t<button>click me</button>\n\t`,\n\tssrHtml: `\n\t\t<div></div>\n\t\t<div>simple</div>\n\t\t<input value=\"\">\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst input = target.querySelector('input');\n\t\tconst button = target.querySelector('button');\n\t\tok(input);\n\t\tok(button);\n\n\t\tconst inputEvent = new window.InputEvent('input');\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tinput.value = 'foo';\n\t\tflushSync(() => input.dispatchEvent(inputEvent));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>foo</div>\n\t\t<div>foo</div>\n\t\t<input>\n\t\t<button>click me</button>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => button.dispatchEvent(clickEvent));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>foo</div>\n\t\t<div>clicked</div>\n\t\t<input>\n\t\t<button>click me</button>\n\t\t`\n\t\t);\n\n\t\tinput.value = 'bar';\n\t\tflushSync(() => input.dispatchEvent(inputEvent));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<div>bar</div>\n\t\t<div>bar</div>\n\t\t<input>\n\t\t<button>click me</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-invalidation-while-update-2/main.svelte",
    "content": "<script>\n\timport {writable} from 'svelte/store';\n\n\tfunction action(node, binding) {\n\t\treturn {\n\t\t\tupdate: (value) => s.set(value),\n\t\t}    \n\t}\n\tlet s = writable(\"simple\");\n\tlet v = \"\";\n\t\n\tfunction click() {\n\t\ts.set('clicked');\n\t}\n</script>\n\n<div>{v}</div>\n<div>{$s}</div>\n<input bind:value={v} use:action={v}>\n<button on:click={click}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-reference/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: { dev: true }, // tests `@validate_store` code generation\n\n\thtml: `<button>clicks:\\n0</button>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-reference/main.svelte",
    "content": "<script>\n\timport {writable} from 'svelte/store'\n\tlet store = writable(0)\n</script>\n\n<button onclick={() => {\n\tif(store && $store){\n\n\t}\n}}>\n\tclicks: {$store}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-reschedule/Child.svelte",
    "content": "<script lang=\"ts\">\n\timport { count } from './stores';\n\n\tlet n = 0;\n\n\t$: $count = n;\n</script>\n\n<button onclick={() => n += 1}>{$count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-reschedule/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => button1.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>1</button>`);\n\n\t\tflushSync(() => button1.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button><button>2</button>`);\n\n\t\tflushSync(() => button2.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>1</button>`);\n\n\t\tflushSync(() => button2.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button><button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-reschedule/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child />\n<Child />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-reschedule/stores.js",
    "content": "import { writable } from 'svelte/store';\n\nexport const count = writable(0);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<h1>0</h1>\n\t\t<button>+1</button>\n\t\t<button>reset</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\t\tconst click = new window.MouseEvent('click', { bubbles: true });\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>1</h1>\n\t\t\t<button>+1</button>\n\t\t\t<button>reset</button>\n\t\t`\n\t\t);\n\n\t\tbuttons[1].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>0</h1>\n\t\t\t<button>+1</button>\n\t\t\t<button>reset</button>\n\t\t`\n\t\t);\n\n\t\tbuttons[0].dispatchEvent(click);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<h1>1</h1>\n\t\t\t<button>+1</button>\n\t\t\t<button>reset</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet foo = writable(0);\n</script>\n\n<h1>{$foo}</h1>\n<button on:click=\"{() => foo.update(n => n + 1)}\">+1</button>\n<button on:click=\"{() => foo = writable(0)}\">reset</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '42'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-b/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet foo = writable(0);\n\tfoo = writable(42);\n</script>\n\n{$foo}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-c/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '31 42'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-c/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst context = {\n\t\tstore1: writable(31),\n\t\tstore2: writable(42)\n\t};\n\tlet store1;\n\tlet store2;\n\t({\n\t\tstore1,\n\t\tstore2\n\t} = context);\n</script>\n\n{$store1}\n{$store2}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-export/_config.js",
    "content": "import { test } from '../../test';\n\nlet unsubscribeCalled = false;\n\n/** @param {any} val */\nconst fakeStore = (val) => ({\n\t/** @param {(val: any) => void} cb */\n\tsubscribe: (cb) => {\n\t\tcb(val);\n\t\treturn {\n\t\t\tunsubscribe: () => {\n\t\t\t\tunsubscribeCalled = true;\n\t\t\t}\n\t\t};\n\t}\n});\n\nexport default test({\n\tget props() {\n\t\treturn { foo: fakeStore(1) };\n\t},\n\thtml: `\n\t\t<h1>1</h1>\n\t`,\n\n\tasync test({ assert, component, target }) {\n\t\tcomponent.foo = fakeStore(5);\n\n\t\tassert.htmlEqual(target.innerHTML, '<h1>5</h1>');\n\n\t\tassert.ok(unsubscribeCalled);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-export/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\texport let foo = writable(0);\n</script>\n\n<h1>{$foo}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-observable/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '42'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-resubscribe-observable/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tfunction fake_observable(store) {\n\t\treturn { subscribe: cb => ({ unsubscribe: store.subscribe(cb) }) };\n\t}\n\n\tlet foo = fake_observable(writable(0));\n\tfoo = fake_observable(writable(42));\n</script>\n\n{$foo}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-shadow-scope-declaration/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-shadow-scope-declaration/main.svelte",
    "content": "<script>\n\tfunction test(store) {\n\t\t// allow declaring $store as parameter\n\t\t// it's not referring to the store value of the\n\t\t// `store` variable in the upper scope\n\t\treturn derived(store, $store => {\n\n\t\t});\n\t}\n\n\tfunction test2(store) {\n\t\t// allow declaring the `$store` variable\n\t\t// it is not referring to the store value of the `store` variable\n\t\tlet $store;\n\t}\n</script>\n\n<div\n\ton:test={(store) => {\n\t\tderived(store, $store => {});\n\t}}\n\ton:test2={(store) => {\n\t\tlet $store;\n\t}}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-unreferenced/Nested.svelte",
    "content": "<script>\n\timport { count } from './store.js';\n</script>\n\n<p>count: {$count}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-unreferenced/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { count } from './store.js';\n\nexport default test({\n\thtml: '<p>count: 0</p>',\n\n\tbefore_test() {\n\t\tcount.set(0);\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.increment();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>count: 1</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-unreferenced/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport { count } from './store.js';\n\n\texport function increment() {\n\t\t$count++;\n\t}\n</script>\n\n<Nested />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-unreferenced/store.js",
    "content": "import { writable } from 'svelte/store';\n\nexport const count = writable(0);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-updated-in-reactive-statement/Child.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\timport { store } from './state.js';\n\n\texport let value;\n\n\tconst copy = writable(value);\n\n\t$: {\n\t\tcopy.set(value);\n\t\tstore.set({ value });\n\t}\n</script>\n\n<p>{$copy}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-updated-in-reactive-statement/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { store } from './state.js';\n\nexport default test({\n\thtml: '<p>0</p><button>1</button>',\n\n\tbefore_test() {\n\t\tstore.set({ value: 0 });\n\t},\n\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\t\tflushSync(() => button?.click());\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>1</p><button>1</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-updated-in-reactive-statement/main.svelte",
    "content": "<script>\n\timport { store } from './state.js';\n\timport Child from './Child.svelte';\n</script>\n\n<Child value={$store.value} />\n\n<button on:click={() => store.set({ value: 1 })}>1</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/store-updated-in-reactive-statement/state.js",
    "content": "import { writable } from 'svelte/store';\n\nexport const store = writable({ value: 0 });\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 0, y: 0, width: 100, height: 100 };\n\t},\n\n\thtml: '<svg><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"></rect></svg>',\n\n\ttest({ assert, component, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('rect');\n\t\tok(svg);\n\t\tok(rect);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 150;\n\t\tcomponent.height = 50;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<svg><rect x=\"0\" y=\"0\" width=\"150\" height=\"50\"></rect></svg>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<svg>\n\t<rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-attributes/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg>\n\t\t\t<g>\n\t\t\t\t<circle class='red'/>\n\t\t\t</g>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst circle = target.querySelector('circle');\n\t\tok(circle);\n\t\tassert.equal(circle.getAttribute('class'), 'red');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-attributes/main.svelte",
    "content": "<svg>\n\t<g>\n\t\t<circle class='red'/>\n\t</g>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-child-component-declared-namespace/Rect.svelte",
    "content": "<svelte:options namespace=\"http://www.w3.org/2000/svg\"/>\n\n<script>\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-child-component-declared-namespace/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 0, y: 0, width: 100, height: 100 };\n\t},\n\n\thtml: '<svg><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"></rect></svg>',\n\n\ttest({ assert, component, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('rect');\n\t\tok(svg);\n\t\tok(rect);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 150;\n\t\tcomponent.height = 50;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<svg><rect x=\"0\" y=\"0\" width=\"150\" height=\"50\"></rect></svg>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-child-component-declared-namespace/main.svelte",
    "content": "<script>\n\timport Rect from './Rect.svelte';\n\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<svg>\n\t<Rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-child-component-declared-namespace-shorthand/Rect.svelte",
    "content": "<svelte:options namespace=\"svg\"/>\n\n<script>\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-child-component-declared-namespace-shorthand/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 0, y: 0, width: 100, height: 100 };\n\t},\n\n\thtml: '<svg><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"></rect></svg>',\n\n\ttest({ assert, component, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('rect');\n\t\tok(svg);\n\t\tok(rect);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 150;\n\t\tcomponent.height = 50;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<svg><rect x=\"0\" y=\"0\" width=\"150\" height=\"50\"></rect></svg>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-child-component-declared-namespace-shorthand/main.svelte",
    "content": "<script>\n\timport Rect from './Rect.svelte';\n\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<svg>\n\t<Rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-class/_config.js",
    "content": "import { ok, test } from '../../test';\n\n// this looks like another JSDOM quirk — svg.className = 'foo' behaves\n// differently from browsers. So this test succeeds even when it should fail\nexport default test({\n\thtml: \"<svg class='foo'></svg>\",\n\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tok(svg);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(svg.getAttribute('class'), 'foo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-class/main.svelte",
    "content": "<svg class='foo'></svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-each-block-anchor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: ['a'], bar: ['c'] };\n\t},\n\n\thtml: `\n\t\t<svg>\n\t\t\t<g class='foo'>a</g>\n\t\t\t<g class='bar'>c</g>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.foo = ['a', 'b'];\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svg>\n\t\t\t\t<g class='foo'>a</g>\n\t\t\t\t<g class='foo'>b</g>\n\t\t\t\t<g class='bar'>c</g>\n\t\t\t</svg>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-each-block-anchor/main.svelte",
    "content": "<script>\n\texport let foo;\n\texport let bar;\n</script>\n\n<svg>\n\t{#each foo as x}\n\t\t<g class='foo'></g>\n\t{/each}\n\n\t{#each bar as y}\n\t\t<g class='bar'></g>\n\t{/each}\n</svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-each-block-namespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg>\n\t\t\t<circle cx='0' cy='100' r='100' fill='red'/><circle cx='100' cy='100' r='100' fill='green'/><circle cx='200' cy='100' r='100' fill='blue'/>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst circles = target.querySelectorAll('circle');\n\t\tassert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circles[2].namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-each-block-namespace/main.svelte",
    "content": "<script>\n\texport let colours = [ 'red', 'green', 'blue' ];\n</script>\n\n<svg>\n\t{#each colours as colour, i}\n\t\t<circle cx='{i * 100}' cy='100' r='100' fill='{colour}'/>\n\t{/each}\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-foreignobject-namespace/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg>\n\t\t\t<foreignObject x=\"0\" y=\"0\" width=\"100\" height=\"100\">\n\t\t\t\t<p>some text</p>\n\t\t\t</foreignObject>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst foreignObject = target.querySelector('foreignObject');\n\t\tok(foreignObject);\n\t\tassert.equal(foreignObject.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tassert.equal(p.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-foreignobject-namespace/main.svelte",
    "content": "<svg>\n\t<foreignObject x=\"0\" y=\"0\" width=\"100\" height=\"100\">\n\t\t<p>some text</p>\n\t</foreignObject>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<svg width=\"100\" height=\"60\">\n\t\t\t\t<circle cx=\"25\" cy=\"30\" r=\"24\" fill=\"#FFD166\"></circle>\n\t\t\t\t<circle cx=\"75\" cy=\"30\" r=\"24\" fill=\"#118AB2\"></circle>\n\t\t\t</svg>\n\t\t`,\n\ttest({ assert, target, component }) {\n\t\tlet svg = target.querySelector('svg');\n\t\tok(svg);\n\t\tlet circles = target.querySelectorAll('circle');\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(2, circles.length);\n\t\tassert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 200;\n\t\tcomponent.height = 120;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svg width=\"200\" height=\"120\">\n\t\t\t\t<circle cx=\"50\" cy=\"60\" r=\"24\" fill=\"#FFD166\"></circle>\n\t\t\t\t<circle cx=\"150\" cy=\"60\" r=\"24\" fill=\"#118AB2\"></circle>\n\t\t\t</svg>\n\t\t`\n\t\t);\n\t\tsvg = target.querySelector('svg');\n\t\tok(svg);\n\t\tcircles = target.querySelectorAll('circle');\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(2, circles.length);\n\t\tassert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag/main.svelte",
    "content": "<script>\n\texport let width = 100\n\texport let height = 60\n\t$: circle = `<circle cx=\"${width/4}\" cy=\"${height/2}\" r=\"24\" fill=\"#FFD166\"/>`\n</script>\n\n<svg width=\"{width}\" height=\"{height}\">\n  {@html circle}\n  <circle cx=\"{width/4*3}\" cy=\"{height/2}\" r=\"24\" fill=\"#118AB2\"/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag2/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<svg width=\"100\" height=\"60\">\n\t\t\t\t<rect>\n\t\t\t\t\t<circle cx=\"25\" cy=\"30\" r=\"24\" fill=\"#FFD166\"></circle>\n\t\t\t\t\t<circle cx=\"75\" cy=\"30\" r=\"24\" fill=\"#118AB2\"></circle>\n\t\t\t\t</rect>\n\t\t\t</svg>\n\t\t`,\n\ttest({ assert, target, component }) {\n\t\tlet svg = target.querySelector('svg');\n\t\tok(svg);\n\t\tlet circles = target.querySelectorAll('circle');\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(2, circles.length);\n\t\tassert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 200;\n\t\tcomponent.height = 120;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svg width=\"200\" height=\"120\">\n\t\t\t\t<rect>\n\t\t\t\t\t<circle cx=\"50\" cy=\"60\" r=\"24\" fill=\"#FFD166\"></circle>\n\t\t\t\t\t<circle cx=\"150\" cy=\"60\" r=\"24\" fill=\"#118AB2\"></circle>\n\t\t\t\t</rect>\n\t\t\t</svg>\n\t\t`\n\t\t);\n\t\tsvg = target.querySelector('svg');\n\t\tok(svg);\n\t\tcircles = target.querySelectorAll('circle');\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(2, circles.length);\n\t\tassert.equal(circles[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circles[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag2/main.svelte",
    "content": "<script>\n\texport let width = 100\n\texport let height = 60\n\t$: circle = `<circle cx=\"${width/4}\" cy=\"${height/2}\" r=\"24\" fill=\"#FFD166\"/>`\n</script>\n\n<svg width=\"{width}\" height=\"{height}\">\n\t<rect>\n\t\t{@html circle}\n\t\t<circle cx=\"{width/4*3}\" cy=\"{height/2}\" r=\"24\" fill=\"#118AB2\"/>\n\t</rect>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag3/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t\t<svg>\n\t\t\t\t<foreignObject><!-- HTML_TAG_START --><circle cx=\"25\" cy=\"30\" r=\"24\" fill=\"#FFD166\"></circle><!-- HTML_TAG_END --></foreignObject>\n\t\t\t</svg>\n\t\t`,\n\ttest({ assert, target, component }) {\n\t\tlet svg = target.querySelector('svg');\n\t\tlet circle = target.querySelector('circle');\n\t\tok(svg);\n\t\tok(circle);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circle.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\n\t\tcomponent.width = 200;\n\t\tcomponent.height = 120;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svg>\n\t\t\t  <foreignObject>\n\t\t\t\t  <circle cx=\"50\" cy=\"60\" r=\"24\" fill=\"#FFD166\"></circle>\n\t\t\t\t</foreignObject>\n\t\t\t</svg>\n\t\t`\n\t\t);\n\n\t\tsvg = target.querySelector('svg');\n\t\tcircle = target.querySelector('circle');\n\t\tok(svg);\n\t\tok(circle);\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circle.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag3/main.svelte",
    "content": "<script>\n\texport let width = 100;\n\texport let height = 60;\n\t$: circle = `<circle cx=\"${width / 4}\" cy=\"${height / 2}\" r=\"24\" fill=\"#FFD166\"></circle>`;\n</script>\n\n<svg>\n\t<foreignObject>\n\t\t{@html circle}\n\t</foreignObject>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag4/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, component }) {\n\t\tlet svg = target.querySelector('svg');\n\t\tok(svg);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.htmlEqual(\n\t\t\tsvg.outerHTML,\n\t\t\t'<svg height=\"24\" style=\"border:1px solid red;\" width=\"24\"><path d=\"M17 11h1a3 3 0 0 1 0 6h-1\"></path><path d=\"M9 12v6\"></path><path d=\"M13 12v6\"></path><path d=\"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z\"></path><path d=\"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8\"></path></svg>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-html-tag4/main.svelte",
    "content": "<script>\n\tlet content = '<path d=\"M17 11h1a3 3 0 0 1 0 6h-1\" /><path d=\"M9 12v6\" /><path d=\"M13 12v6\" /><path d=\"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z\" /><path d=\"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8\" />'\n</script>\n\n<svg width=\"24\" height=\"24\" style=\"border:1px solid red;\">\n\t{@html content}\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-multiple/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 0, y: 0, width: 100, height: 100 };\n\t},\n\n\thtml: `\n\t\t<svg><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"></rect></svg>\n\t\t<svg><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"></rect></svg>\n\t`,\n\n\ttest({ assert, component, target }) {\n\t\tconst svgs = target.querySelectorAll('svg');\n\t\tconst rects = target.querySelectorAll('rect');\n\n\t\tassert.equal(svgs[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(svgs[0].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rects[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rects[1].namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 150;\n\t\tcomponent.height = 50;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<svg><rect x=\"0\" y=\"0\" width=\"150\" height=\"50\"></rect></svg>\n\t\t\t<svg><rect x=\"0\" y=\"0\" width=\"150\" height=\"50\"></rect></svg>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-multiple/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<svg>\n\t<rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n</svg>\n\n<svg>\n\t<rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-no-whitespace/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tok(svg);\n\n\t\tassert.equal(svg.childNodes.length, 2);\n\t\tassert.equal(svg.childNodes[0].nodeName, 'rect');\n\t\tassert.equal(svg.childNodes[1].nodeName, 'rect');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-no-whitespace/main.svelte",
    "content": "<svg>\n\t<rect/>\n\n\t<rect/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-slot-namespace/Widget.svelte",
    "content": "<svg>\n\t<slot />\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-slot-namespace/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<svg>\n\t\t\t\t<line x1=\"0\" y1=\"0\" x2=\"100\" y2=\"100\" />\n\t\t\t</svg>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\n\t\tconst line = target.querySelector('line');\n\t\tok(line);\n\t\tassert.equal(line.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-slot-namespace/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte'\n</script>\n\n<div>\n\t<Widget>\n\t\t<line x1=\"0\" y1=\"0\" x2=\"100\" y2=\"100\" />\n\t</Widget>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg height=\"400\" width=\"400\">\n\t\t\t<rect x=\"50\" y=\"50\" width=\"100\" height=\"75\" fill=\"#ff0000\"></rect>\n\t\t</svg>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-spread/main.svelte",
    "content": "<script>\n\tconst style = { fill: '#ff0000', x: '50', y: '50', width: '100', height: '75'};\n</script>\n\n<svg width=\"400\" height=\"400\">\n\t<rect {...style}/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-tspan-preserve-space/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<svg><text x=0 y=50><tspan>foo</tspan> bar<tspan>foo</tspan> bar</text></svg>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-tspan-preserve-space/main.svelte",
    "content": "<svg><text x=0 y=50><tspan>foo</tspan> {\"bar\"}<tspan>foo</tspan> bar</text></svg>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-with-style/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 'bar' };\n\t},\n\n\thtml: `\n\t\t<svg>\n\t\t\t<circle class=\"svelte-i03x00\" cx=50 cy=50 r=50 />\n\t\t\t<circle class=\"foo svelte-i03x00\" cx=150 cy=50 r=50 />\n\t\t\t<circle class=\"bar svelte-i03x00\" cx=250 cy=50 r=50 />\n\t\t</svg>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-with-style/main.svelte",
    "content": "<script>\n\texport let x;\n</script>\n\n<svg>\n\t<circle cx=50 cy=50 r=50/>\n\t<circle class='foo' cx=150 cy=50 r=50/>\n\t<circle class='{x}' cx=250 cy=50 r=50/>\n</svg>\n\n<style>\n\tcircle {\n\t\tfill: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-xlink/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg>\n\t\t\t<defs>\n\t\t\t\t<circle id='stamp' r='10' fill='blue'/>\n\t\t\t</defs>\n\n\t\t\t<use xlink:href='#stamp' x='20' y='20'/>\n\t\t</svg>\n\t`,\n\ttest({ assert, target }) {\n\t\tconst use = target.querySelector('use');\n\t\tok(use);\n\n\t\t// @ts-ignore\n\t\tconst href = use.attributes['xlink:href'];\n\n\t\tassert.equal(href.namespaceURI, 'http://www.w3.org/1999/xlink');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-xlink/main.svelte",
    "content": "<svg>\n\t<defs>\n\t\t<circle id='stamp' r='10' fill='blue'/>\n\t</defs>\n\n\t<use xlink:href='#stamp' x='20' y='20'/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-xmlns/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: 0, y: 0, width: 100, height: 100 };\n\t},\n\n\thtml: '<svg xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"></rect></svg>',\n\n\ttest({ assert, component, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst rect = target.querySelector('rect');\n\t\tok(svg);\n\t\tok(rect);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tcomponent.width = 150;\n\t\tcomponent.height = 50;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"0\" y=\"0\" width=\"150\" height=\"50\"></rect></svg>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/svg-xmlns/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<svg xmlns='http://www.w3.org/2000/svg'>\n\t<rect x='{x}' y='{y}' width='{width}' height='{height}'/>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/table-nesting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n        <table class=\"abc\">\n            <tbody>\n                <tr>\n                    <td>Hello world</td>\n                </tr>\n            </tbody>\n        </table>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/table-nesting/main.svelte",
    "content": "\n\n<table class=\"abc\">\n    <tbody>\n        <tr>\n            <td>Hello world</td>\n        </tr>\n    </tbody>\n</table>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-dom/App.svelte",
    "content": "<script>\n\tlet name = 'World';\n</script>\n\n<div>Hello {name}</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-dom/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tcompileOptions: {\n\t\tcssHash: () => 'svelte-xyz'\n\t},\n\n\tasync test({ assert, component, window }) {\n\t\tassert.htmlEqual(\n\t\t\twindow.document.head.innerHTML,\n\t\t\t'<style>div.svelte-xyz\\n{\\ncolor:\\nred;\\n}</style>'\n\t\t);\n\t\tassert.htmlEqual(component.div.innerHTML, '<div class=\"svelte-xyz\">Hello World</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-dom/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\timport { onMount, mount, unmount } from 'svelte';\n\n\texport let div;\n\n\tonMount(() => {\n\t\tconst app = mount(App, {\n\t\t\ttarget: div\n\t\t});\n\n\t\treturn () => {\n\t\t\tunmount(app);\n\t\t}\n\t});\n</script>\n\n<div bind:this={div}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-dom-detached/App.svelte",
    "content": "<script>\n\tlet name = 'World';\n</script>\n\n<div>Hello {name}</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-dom-detached/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tcompileOptions: {\n\t\tcssHash: () => 'svelte-xyz'\n\t},\n\n\tasync test({ assert, component, window }) {\n\t\tassert.htmlEqual(\n\t\t\twindow.document.head.innerHTML,\n\t\t\t'<style>div.svelte-xyz\\n{\\ncolor:\\nred;\\n}</style>'\n\t\t);\n\t\tassert.htmlEqual(component.div.innerHTML, '<div class=\"svelte-xyz\">Hello World</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-dom-detached/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\timport { onMount, mount, unmount } from 'svelte';\n\n\texport let div;\n\n\tonMount(() => {\n\t\tdiv = document.createElement('div');\n\n\t\tconst app = mount(App, {\n\t\t\ttarget: div\n\t\t});\n\n\t\treturn () => {\n\t\t\tunmount(app);\n\t\t}\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-shadow-dom/App.svelte",
    "content": "<script>\n\tlet name = 'World';\n</script>\n\n<div>Hello {name}</div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-shadow-dom/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tcompileOptions: {\n\t\tcssHash: () => 'svelte-xyz'\n\t},\n\n\tasync test({ assert, component, window }) {\n\t\tassert.htmlEqual(\n\t\t\twindow.document.head.innerHTML,\n\t\t\t'<style>div.svelte-xyz\\n{\\ncolor:\\nred;\\n}</style>'\n\t\t);\n\t\tassert.htmlEqual(\n\t\t\tcomponent.div.shadowRoot.innerHTML,\n\t\t\t'<div class=\"svelte-xyz\">Hello World</div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/target-shadow-dom/main.svelte",
    "content": "<script>\n\timport App from './App.svelte';\n\timport { onMount, mount, unmount } from 'svelte';\n\n\texport let div;\n\tonMount(() => {\n\t\tconst root = div.attachShadow({ mode: 'open' });\n\n\t\tconst app = mount(App, {\n\t\t\ttarget: root\n\t\t});\n\n\t\treturn () => {\n\t\t\tunmount(app);\n\t\t}\n\t});\n</script>\n\n<div bind:this={div}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/template/_config.js",
    "content": "import { COMMENT_NODE } from '#client/constants';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<template id=\"t1\">\n\t    <div>foo</div>\n\t</template>\n\t<template id=\"t2\">123</template>\n\t<template id=\"t3\">1<b>B</b>1</template>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst template = /** @type {HTMLTemplateElement} */ (target.querySelector('#t1'));\n\t\tassert.htmlEqual(\n\t\t\ttemplate.innerHTML,\n\t\t\t`\n\t\t<div>foo</div>\n   \t    `\n\t\t);\n\t\tconst content = /** @type {DocumentFragment} */ (template.content.cloneNode(true));\n\t\tconst div = content.children[0];\n\t\tassert.htmlEqual(\n\t\t\tdiv.outerHTML,\n\t\t\t`\n\t\t\t<div>foo</div>\n\t\t`\n\t\t);\n\n\t\tconst template2 = /** @type {HTMLTemplateElement} */ (target.querySelector('#t2'));\n\t\tassert.equal(template2.childNodes.length, 0);\n\t\tassert.equal(template2.content.childNodes.length, 1);\n\t\tassert.equal(template2.content.firstChild?.textContent, '123');\n\t\tassert.htmlEqual(template2.innerHTML, '123');\n\n\t\tconst template3 = /** @type {HTMLTemplateElement} */ (target.querySelector('#t3'));\n\t\t// test: (with hydration from ssr rendered html)\n\t\t// out of order render.\n\t\t// <template>1{@html '2'}3</template>  may render as <template>321</template> for ssr+hydration case.\n\t\t// we bypass it by using symmetric siblings. hence <template> is not fully stable for this edge case.\n\n\t\t// get all childNodes of template3 except comments\n\t\tlet childNodes = [];\n\t\tfor (const node of template3.content.childNodes) {\n\t\t\tif (node.nodeType !== COMMENT_NODE) {\n\t\t\t\tchildNodes.push(/** @type {Element} */ (node));\n\t\t\t}\n\t\t}\n\n\t\tassert.equal(childNodes.length, 3);\n\t\tassert.equal(childNodes[0].textContent, '1');\n\t\tassert.equal(childNodes[1].outerHTML, '<b>B</b>');\n\t\tassert.equal(childNodes[2].textContent, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/template/main.svelte",
    "content": "<template id=\"t1\">\n\t<div>foo</div>\n</template>\n<template id=\"t2\">123</template>\n<template id=\"t3\">1{@html '<b>B</b>'}1</template>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-bind-value-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<textarea></textarea>',\n\tssrHtml:\n\t\t\"<textarea>test'\\\"&gt;&lt;/textarea&gt;&lt;script&gt;alert('BIM');&lt;/script&gt;</textarea>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-bind-value-escape/main.svelte",
    "content": "<script>\n\tlet value = `test'\"></textarea><script>alert('BIM');</` + `script>`;\n</script>\n\n<textarea bind:value />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-children/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'], // SSR behaviour is awkwardly different\n\n\tget props() {\n\t\treturn { foo: 42 };\n\t},\n\n\thtml: '<textarea></textarea>',\n\n\ttest({ assert, component, target }) {\n\t\tconst textarea = /** @type {HTMLTextAreaElement} */ (target.querySelector('textarea'));\n\t\tassert.strictEqual(textarea.value, '\\t<p>not actually an element. 42</p>\\n');\n\n\t\tcomponent.foo = 43;\n\t\tassert.strictEqual(textarea.value, '\\t<p>not actually an element. 43</p>\\n');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-children/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<textarea>\n\t<p>not actually an element. {foo}</p>\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-content/.editorconfig",
    "content": "[main.svelte]\ntrim_trailing_whitespace = unset\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-content/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\twithoutNormalizeHtml: true,\n\t// Unable to test `html` with `<textarea>` content\n\t// as the textarea#value will not show within `innerHtml`\n\tssrHtml: `<!--[--><textarea id=\"textarea\">  A\n  B\n</textarea> <div id=\"div-with-textarea\"><textarea>    A\n    B\n  </textarea></div> <div id=\"textarea-with-leading-newline\"><textarea>leading newline</textarea> <textarea>  leading newline and spaces</textarea> <textarea>\nleading newlines</textarea></div> <div id=\"textarea-without-leading-newline\"><textarea>without spaces</textarea> <textarea>  with spaces  </textarea> <textarea>${' '}\nnewline after leading space</textarea></div> <textarea id=\"textarea-with-multiple-leading-newlines\">\n\nmultiple leading newlines</textarea> <div id=\"div-with-textarea-with-multiple-leading-newlines\"><textarea>\n\nmultiple leading newlines</textarea></div><!--]-->`,\n\ttest({ assert, target }) {\n\t\t// Test for <textarea> tag\n\t\tconst elementTextarea = /** @type {HTMLTextAreaElement} */ (target.querySelector('#textarea'));\n\t\t// Test for <textarea> tag in non <textarea> tag\n\t\tconst elementDivWithTextarea = /** @type {HTMLDivElement} */ (\n\t\t\ttarget.querySelector('#div-with-textarea')\n\t\t);\n\t\t// Test for <textarea> tag with leading newline\n\t\tconst elementTextareaWithLeadingNewline = target.querySelector(\n\t\t\t'#textarea-with-leading-newline'\n\t\t);\n\t\tconst elementTextareaWithoutLeadingNewline = target.querySelector(\n\t\t\t'#textarea-without-leading-newline'\n\t\t);\n\t\tconst elementTextareaWithMultipleLeadingNewline = target.querySelector(\n\t\t\t'#textarea-with-multiple-leading-newlines'\n\t\t);\n\t\tconst elementDivWithTextareaWithMultipleLeadingNewline = target.querySelector(\n\t\t\t'#div-with-textarea-with-multiple-leading-newlines'\n\t\t);\n\n\t\tok(elementTextareaWithLeadingNewline);\n\t\tok(elementTextareaWithoutLeadingNewline);\n\t\tok(elementTextareaWithMultipleLeadingNewline);\n\t\tok(elementDivWithTextareaWithMultipleLeadingNewline);\n\n\t\tassert.equal(\n\t\t\telementTextarea.value,\n\t\t\t`  A\n  B\n`\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementDivWithTextarea.children[0]).value,\n\t\t\t`    A\n    B\n  `\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithLeadingNewline.children[0]).value,\n\t\t\t'leading newline'\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithLeadingNewline.children[1]).value,\n\t\t\t'  leading newline and spaces'\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithLeadingNewline.children[2]).value,\n\t\t\t'\\nleading newlines'\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithoutLeadingNewline.children[0]).value,\n\t\t\t'without spaces'\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithoutLeadingNewline.children[1]).value,\n\t\t\t'  with spaces  '\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithoutLeadingNewline.children[2]).value,\n\t\t\t' \\nnewline after leading space'\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (elementTextareaWithMultipleLeadingNewline).value,\n\t\t\t'\\n\\nmultiple leading newlines'\n\t\t);\n\t\tassert.equal(\n\t\t\t/** @type {HTMLTextAreaElement} */ (\n\t\t\t\telementDivWithTextareaWithMultipleLeadingNewline.children[0]\n\t\t\t).value,\n\t\t\t'\\n\\nmultiple leading newlines'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-content/main.svelte",
    "content": "<textarea id=\"textarea\">\n  A\n  B\n</textarea>\n\n<div id=\"div-with-textarea\">\n  <textarea>\n    A\n    B\n  </textarea>\n</div>\n\n<div id=\"textarea-with-leading-newline\">\n  <textarea>\nleading newline</textarea>\n  <textarea>\n  leading newline and spaces</textarea>\n  <textarea>\n\nleading newlines</textarea>\n</div>\n\n<div id=\"textarea-without-leading-newline\">\n  <textarea>without spaces</textarea>\n  <textarea>  with spaces  </textarea>\n  <textarea> \nnewline after leading space</textarea>\n</div>\n\n<textarea id=\"textarea-with-multiple-leading-newlines\">\n\n\nmultiple leading newlines</textarea>\n\n<div id=\"div-with-textarea-with-multiple-leading-newlines\">\n  <textarea>\n\n\nmultiple leading newlines</textarea>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: 42 };\n\t},\n\n\thtml: '<textarea></textarea>',\n\tssrHtml: '<textarea>42</textarea>',\n\n\ttest({ assert, component, target }) {\n\t\tconst textarea = /** @type {HTMLTextAreaElement} */ (target.querySelector('textarea'));\n\t\tassert.strictEqual(textarea.value, '42');\n\n\t\tcomponent.foo = 43;\n\t\tassert.strictEqual(textarea.value, '43');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-value/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<textarea value='{foo}'/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-value-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<textarea></textarea>',\n\tssrHtml:\n\t\t\"<textarea>test'\\\"&gt;&lt;/textarea&gt;&lt;script&gt;alert('BIM');&lt;/script&gt;</textarea>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/textarea-value-escape/main.svelte",
    "content": "<textarea value={`test'\"></textarea><script>alert('BIM');</script>`} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/this-in-function-expressions/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tconst [, btn] = /** @type {NodeListOf<HTMLButtonElement & { x: number }>} */ (\n\t\t\ttarget.querySelectorAll('button')\n\t\t);\n\t\tconst clickEvent = new window.MouseEvent('click', { bubbles: true });\n\n\t\tawait btn.dispatchEvent(clickEvent);\n\n\t\tassert.equal(btn.x, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/this-in-function-expressions/main.svelte",
    "content": "<button on:click=\"{() => { this.x = 1; }}\"></button>\n<button on:click=\"{function () { this.x = 1; }}\"></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-abort/_config.js",
    "content": "import { test } from '../../test';\n\n// expect aborting halfway through outro transition\n// to behave the same in `{#if}` block as in `{:else}` block\nexport default test({\n\thtml: `\n\t\t<div>a</div>\n\n\t\t<div>a</div>\n\t`,\n\n\tasync test({ assert, component, target, raf }) {\n\t\tcomponent.visible = false;\n\n\t\traf.tick(25);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div style=\"opacity: 0.75;\">a</div>\n\t\t\t<div style=\"opacity: 0.75;\">a</div>\n\t\t`\n\t\t);\n\n\t\t// abort 1/4 through the outro transition\n\t\tawait component.$set({\n\t\t\tvisible: true,\n\t\t\tarray: ['a', 'b', 'c']\n\t\t});\n\n\t\traf.tick(25);\n\n\t\traf.tick(50);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t// because outro is aborted it will be finished earlier with the intro than the new items\n\t\t\t`\n\t\t\t<div style=\"\">a</div>\n\t\t\t<div style=\"opacity: 0.25;\">b</div>\n\t\t\t<div style=\"opacity: 0.25;\">c</div>\n\n\t\t\t<div style=\"\">a</div>\n\t\t\t<div style=\"opacity: 0.25;\">b</div>\n\t\t\t<div style=\"opacity: 0.25;\">c</div>\n\t\t`\n\t\t);\n\n\t\t// intros of new items almost finished, aborted outro shouldn't overlap re-intro\n\t\traf.tick(75);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div style=\"\">a</div>\n\t\t\t<div style=\"opacity: 0.5;\">b</div>\n\t\t\t<div style=\"opacity: 0.5;\">c</div>\n\n\t\t\t<div style=\"\">a</div>\n\t\t\t<div style=\"opacity: 0.5;\">b</div>\n\t\t\t<div style=\"opacity: 0.5;\">c</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-abort/main.svelte",
    "content": "<script>\n\texport let array = ['a'];\n\texport let visible = true;\n\n\tfunction slide(_) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t) => `opacity: ${t}`\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t{#each array as item}\n\t\t<div transition:slide|global>{item}</div>\n\t{/each}\n{/if}\n\n{#if !visible}{:else}\n\t{#each array as item}\n\t\t<div transition:slide|global>{item}</div>\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-and-js/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tlet ended = 0;\n\t\tdiv.addEventListener('introend', () => {\n\t\t\tended += 1;\n\t\t});\n\n\t\tassert.equal(div.style.scale, '0');\n\t\tassert.deepEqual(logs, ['tick: 0']);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.style.scale, '0.5');\n\t\tassert.deepEqual(logs, ['tick: 0', 'tick: 0.5']);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.style.scale, '');\n\t\tassert.deepEqual(logs, ['tick: 0', 'tick: 0.5', 'tick: 1']);\n\n\t\tassert.equal(ended, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-and-js/main.svelte",
    "content": "<script>\n\tlet visible = false;\n\n\tfunction foo() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t) => {\n\t\t\t\treturn `scale: ${t}`;\n\t\t\t},\n\t\t\ttick: (t) => {\n\t\t\t\tconsole.log(`tick: ${t}`);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button on:click={() => (visible = !visible)}>toggle</button>\n\n{#if visible}\n\t<div transition:foo></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-deferred-removal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = false;\n\n\t\traf.tick(150);\n\n\t\tconst outer = /** @type {HTMLSpanElement} */ (target.querySelector('.outer'));\n\t\tconst inner = /** @type {HTMLSpanElement} */ (target.querySelector('.inner'));\n\n\t\tassert.deepEqual([outer.style.cssText, inner.style.cssText], ['opacity: 0.25;', '']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-deferred-removal/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 200,\n\t\t\tcss: t => {\n\t\t\t\treturn `opacity: ${t}`;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: t => {\n\t\t\t\treturn `left: ${t * 100}px`;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<span class='outer' out:foo>\n\t\t<span class='inner' out:bar>\n\t\t\tdouble transition\n\t\t</span>\n\t</span>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-duration/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.style.opacity, '0.5');\n\n\t\tcomponent.visible = false;\n\n\t\traf.tick(75);\n\t\tassert.equal(div.style.opacity, '0.25');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-duration/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: t => {\n\t\t\t\treturn `opacity: ${t}`;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo></div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-iframe/Foo.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: t => {\n\t\t\t\treturn `opacity: ${t}`;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-iframe/Frame.svelte",
    "content": "<script>\nimport { onMount, onDestroy, tick } from 'svelte';\nimport { createClassComponent } from 'svelte/legacy'\n\nexport let component;\n\nlet frame;\nlet doc;\nlet content;\n\n$: mountComponent(doc, component);\n$: updateProps($$props);\n\nfunction mountComponent(doc) {\n  if (content) content.$destroy();\n  if (doc && component) {\n    const { component, ...props } = $$props;\n    // When this test is migrated to runes, use mount/unmount and $state for updating props instead\n    content = createClassComponent({ component, target: doc.body, props });\n  }\n}\n\nfunction updateProps(props) {\n  if (content) {\n    const { component, ...rest } = props;\n    content.$set(rest);\n  }\n}\n\nfunction loadHandler() {\n  doc = frame.contentDocument;\n  // import styles\n  Array.from(document.querySelectorAll('style, link[rel=\"stylesheet\"]'))\n    .forEach(node => doc.head.appendChild(node.cloneNode(true)));\n}\n\nonMount(async () => {\n  await tick();\n  if (frame.contentDocument.readyState === 'complete' && frame.contentDocument.defaultView) {\n    loadHandler();\n  } else {\n    frame.addEventListener('load', loadHandler);\n  }\n});\n\nonDestroy(() => {\n  if (frame) frame.removeEventListener('load', loadHandler);\n  if (content) content.$destroy();\n});\n</script>\n\n<iframe bind:this={frame} title=\"frame\"></iframe>\n\n<style>\niframe {\n  border: none;\n  width: 100%;\n  height: 100%;\n}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-iframe/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, raf }) {\n\t\tconst frame = /** @type {HTMLIFrameElement} */ (target.querySelector('iframe'));\n\t\tawait tick();\n\t\tawait tick(); // TODO investigate why this second tick is necessary. without it, `Foo.svelte` initializes with `visible = true`, incorrectly\n\n\t\tcomponent.visible = true;\n\t\tconst div = frame.contentDocument?.querySelector('div');\n\t\tok(div);\n\n\t\traf.tick(25);\n\n\t\tcomponent.visible = false;\n\n\t\traf.tick(25);\n\t\tassert.equal(div.style.opacity, '0.25');\n\n\t\traf.tick(35);\n\t\tassert.equal(div.style.opacity, '0.15');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-iframe/main.svelte",
    "content": "<script>\n\timport Frame from './Frame.svelte';\n\timport Foo from './Foo.svelte';\n\n\texport let visible;\n</script>\n\n<Frame component={Foo} {visible}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-in-out-in/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tassert.equal(div.style.scale, '0');\n\n\t\traf.tick(50);\n\t\tcomponent.visible = false;\n\n\t\t// both in and out styles\n\t\tassert.equal(div.style.scale, '0.5');\n\t\tassert.equal(div.style.opacity, '1');\n\t\tassert.equal(div.style.rotate, '360deg');\n\n\t\traf.tick(75);\n\n\t\tassert.equal(div.style.scale, '0.75'); // intro continues while outro plays\n\t\tassert.equal(div.style.opacity, '0.75');\n\t\tassert.equal(div.style.rotate, '270deg');\n\n\t\tcomponent.visible = true;\n\n\t\t// reset original styles\n\t\tassert.equal(div.style.scale, '0');\n\t\tassert.equal(div.style.opacity, '1');\n\t\tassert.equal(div.style.rotate, '360deg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-in-out-in/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: t => {\n\t\t\t\treturn `scale: ${t}`;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: t => {\n\t\t\t\treturn `rotate: ${t * 360}deg; opacity: ${t}`;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:foo out:bar></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-in-out-in-with-param/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tassert.equal(div.style.color, 'blue');\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(div.style.color, 'yellow');\n\n\t\t// change param\n\t\traf.tick(1);\n\t\tcomponent.param = true;\n\t\tcomponent.visible = true;\n\n\t\tassert.equal(div.style.color, 'red');\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(div.style.color, 'green');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-css-in-out-in-with-param/main.svelte",
    "content": "<script>\n\texport let visible = false;\n\texport let param = false;\n\n\tfunction getInParam() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t) => {\n\t\t\t\treturn `color: ${param ? 'red' : 'blue'}`;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction getOutParam() {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t) => {\n\t\t\t\treturn `color: ${param ? 'green' : 'yellow'}`;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:getInParam out:getOutParam></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-inert/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, raf }) {\n\t\tconst a = target.querySelector('button.a');\n\t\tconst b = target.querySelector('button.b');\n\t\tok(a);\n\t\tok(b);\n\n\t\t// check and abort halfway through the outro transition\n\t\tcomponent.visible = false;\n\t\traf.tick(50);\n\t\tassert.ok(target.querySelector('button.a')?.inert);\n\t\tassert.ok(target.querySelector('button.b')?.inert);\n\n\t\tcomponent.visible = true;\n\t\tassert.ok(!target.querySelector('button.a')?.inert);\n\t\tassert.ok(!target.querySelector('button.b')?.inert);\n\n\t\t// let it transition out completely and then back in\n\t\tcomponent.visible = false;\n\t\traf.tick(101);\n\t\tcomponent.visible = true;\n\t\traf.tick(150);\n\t\tassert.ok(!target.querySelector('button.a')?.inert);\n\t\tassert.ok(!target.querySelector('button.b')?.inert);\n\t\traf.tick(151);\n\t\tassert.ok(!target.querySelector('button.a')?.inert);\n\t\tassert.ok(!target.querySelector('button.b')?.inert);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-inert/main.svelte",
    "content": "<script>\n\texport let visible = true;\n\n\tfunction slide(_, params) {\n\t\treturn params;\n\t}\n</script>\n\n{#if visible}\n\t<button class=\"a\" transition:slide={{ duration: 100 }}>\n\t\tfoo\n\t</button>\n\t<button class=\"b\" out:slide={{ duration: 100 }}>\n\t\tbar\n\t</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-bidi/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false };\n\t},\n\n\ttest({ assert, component, target, raf, logs }) {\n\t\tcomponent.visible = true;\n\t\tconst span = /** @type {HTMLSpanElement & { foo: number }} */ (target.querySelector('span'));\n\n\t\traf.tick(50);\n\t\tassert.equal(span.foo, 0.5);\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(span.foo, 0.5);\n\n\t\traf.tick(75);\n\t\tassert.equal(span.foo, 0.25);\n\n\t\tcomponent.visible = true;\n\t\traf.tick(100);\n\t\tassert.equal(span.foo, 0.5);\n\n\t\tassert.deepEqual(logs, ['transition']); // should only run once\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-bidi/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node) {\n\t\tconsole.log('transition');\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t) => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<span transition:foo>hello</span>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-intro-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false };\n\t},\n\n\ttest({ assert, component, target, raf, logs }) {\n\t\tcomponent.visible = true;\n\t\tconst span = /** @type {HTMLSpanElement & { foo: number, bar: number }} */ (\n\t\t\ttarget.querySelector('span')\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.equal(span.foo, 0.5);\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(span.foo, 0.5);\n\n\t\traf.tick(75);\n\t\tassert.equal(span.foo, 0.75);\n\t\tassert.equal(span.bar, 0.75);\n\n\t\tcomponent.visible = true;\n\t\traf.tick(100);\n\t\tassert.equal(span.foo, 0.25);\n\t\tassert.equal(span.bar, 1);\n\n\t\tassert.deepEqual(logs, ['in', 'out', 'in']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-intro-outro/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node) {\n\t\tconsole.log('in');\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t) => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar(node) {\n\t\tconsole.log('out');\n\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t) => {\n\t\t\t\tnode.bar = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<span in:foo out:bar>hello</span>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = false;\n\t\tconst span = /** @type {HTMLSpanElement & { foo: number }} */ (target.querySelector('span'));\n\n\t\traf.tick(50);\n\t\tassert.equal(span.foo, 0.5);\n\n\t\tcomponent.visible = true;\n\t\tassert.equal(span.foo, 1);\n\n\t\traf.tick(75);\n\t\tassert.equal(span.foo, 1);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>hello</span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-outro/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<span out:foo>hello</span>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-outro-in-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: ['one', 'two', 'three'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tconst { things } = component;\n\n\t\tcomponent.things = [];\n\t\tlet spans = /** @type {NodeListOf<HTMLSpanElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('span')\n\t\t);\n\n\t\traf.tick(25);\n\t\tassert.equal(spans[0].foo, 0.75);\n\t\tassert.equal(spans[1].foo, undefined);\n\t\tassert.equal(spans[2].foo, undefined);\n\n\t\t// intermediate ticks necessary for testing purposes, so that time\n\t\t// elapses after the initial delay animation's onfinish callback runs\n\t\traf.tick(50);\n\t\traf.tick(100);\n\n\t\traf.tick(125);\n\t\tassert.equal(spans[0].foo, 0);\n\t\tassert.equal(spans[1].foo, 0.25);\n\t\tassert.equal(spans[2].foo, 0.75);\n\n\t\tcomponent.things = things;\n\n\t\traf.tick(225);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span>one</span>\n\t\t\t<span>two</span>\n\t\t\t<span>three</span>\n\t\t`\n\t\t);\n\n\t\tassert.equal(spans[0].foo, 1);\n\t\tassert.equal(spans[1].foo, 1);\n\t\tassert.equal(spans[2].foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-aborted-outro-in-each/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tdelay: params.delay,\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing, i}\n\t<span out:foo=\"{{delay: i * 50}}\">{thing}</span>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number, oof: number }} */ (\n\t\t\ttarget.querySelector('div')\n\t\t);\n\n\t\traf.tick(0);\n\n\t\tassert.equal(div.foo, 0);\n\t\tassert.equal(div.oof, 1);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\t\tassert.equal(div.oof, 0.5);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-args/main.svelte",
    "content": "<script>\n\texport let visible = false;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.foo = t;\n\t\t\t\tnode.oof = u;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo></div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-args-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\traf.tick(0);\n\n\t\tconst div = /** @type {HTMLDivElement & { value: any }} */ (target.querySelector('div'));\n\n\t\tassert.equal(div.value, 0);\n\n\t\traf.tick(200);\n\n\t\tdiv.value = 'test';\n\t\tcomponent.visible = false;\n\t\tassert.equal(div.value, 'test');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-args-dynamic/main.svelte",
    "content": "<script>\n\texport let visible = false;\n\texport let value = 0;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: () => {\n\t\t\t\tnode.value = value;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo={{value}}></div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-await-block/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\n/** @type {Promise<any>} */\nlet promise;\n\nexport default test({\n\tget props() {\n\t\tpromise = new Promise((f) => {\n\t\t\tfulfil = f;\n\t\t});\n\t\treturn { promise };\n\t},\n\n\tintro: true,\n\n\ttest({ assert, target, raf }) {\n\t\tconst p = /** @type {HTMLParagraphElement & { foo: number }} */ (target.querySelector('p'));\n\n\t\traf.tick(0);\n\n\t\tassert.equal(p.className, 'pending');\n\t\tassert.equal(p.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(p.foo, 0.5);\n\n\t\tfulfil(42);\n\n\t\treturn promise.then(() => {\n\t\t\traf.tick(80);\n\t\t\tconst ps = /** @type {NodeListOf<HTMLParagraphElement & { foo: number }>} */ (\n\t\t\t\ttarget.querySelectorAll('p')\n\t\t\t);\n\t\t\tassert.equal(ps[0].className, 'pending');\n\t\t\tassert.equal(ps[1].className, 'then');\n\t\t\tassert.equal(ps[0].foo, 0.2);\n\t\t\tassert.equal(ps[1].foo, 0.3);\n\t\t\traf.tick(100);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-await-block/main.svelte",
    "content": "<script>\n\texport let promise;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#await promise}\n\t<p class='pending' transition:foo|global>loading...</p>\n{:then value}\n\t<p class='then' transition:foo>{value}</p>\n{:catch error}\n\t<p class='catch' transition:foo>{error.message}</p>\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-await-block-outros/_config.js",
    "content": "import { test } from '../../test';\n\n/** @type {(value: any) => void} */\nlet fulfil;\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tpromise: new Promise((f) => {\n\t\t\t\tfulfil = f;\n\t\t\t})\n\t\t};\n\t},\n\tintro: true,\n\n\tasync test({ assert, target, component, raf }) {\n\t\tassert.htmlEqual(target.innerHTML, '<p class=\"pending\" foo=\"0.0\">loading...</p>');\n\n\t\tlet time = 0;\n\n\t\traf.tick((time += 50));\n\t\tassert.htmlEqual(target.innerHTML, '<p class=\"pending\" foo=\"0.5\">loading...</p>');\n\n\t\tawait fulfil(42);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"pending\" foo=\"0.5\">loading...</p>\n\t\t\t<p class=\"then\" foo=\"0.0\">42</p>\n\t\t`\n\t\t);\n\n\t\t// see the transition 30% complete\n\t\traf.tick((time += 30));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"pending\" foo=\"0.2\">loading...</p>\n\t\t\t<p class=\"then\" foo=\"0.3\">42</p>\n\t\t`\n\t\t);\n\n\t\t// completely transition in the {:then} block\n\t\traf.tick((time += 70));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">42</p>\n\t\t`\n\t\t);\n\n\t\t// update promise #1\n\t\tcomponent.promise = new Promise((f) => {\n\t\t\tfulfil = f;\n\t\t});\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">42</p>\n\t\t\t<p class=\"pending\" foo=\"0.0\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 100));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"pending\" foo=\"1.0\">loading...</p>\n\t\t`\n\t\t);\n\n\t\tawait fulfil(43);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"pending\" foo=\"1.0\">loading...</p>\n\t\t\t<p class=\"then\" foo=\"0.0\">43</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 100));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">43</p>\n\t\t`\n\t\t);\n\n\t\t// update promise #2\n\t\tcomponent.promise = new Promise((f) => {\n\t\t\tfulfil = f;\n\t\t});\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">43</p>\n\t\t\t<p class=\"pending\" foo=\"0.0\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 50));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.5\">43</p>\n\t\t\t<p class=\"pending\" foo=\"0.5\">loading...</p>\n\t\t`\n\t\t);\n\n\t\tawait fulfil(44);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.5\">44</p>\n\t\t\t<p class=\"pending\" foo=\"0.5\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 100));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">44</p>\n\t\t`\n\t\t);\n\n\t\t// update promise #3 - quick succession\n\t\tcomponent.promise = new Promise((f) => {\n\t\t\tfulfil = f;\n\t\t});\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">44</p>\n\t\t\t<p class=\"pending\" foo=\"0.0\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 40));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.6\">44</p>\n\t\t\t<p class=\"pending\" foo=\"0.4\">loading...</p>\n\t\t`\n\t\t);\n\n\t\tawait fulfil(45);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.6\">45</p>\n\t\t\t<p class=\"pending\" foo=\"0.4\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 20));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.8\">45</p>\n\t\t\t<p class=\"pending\" foo=\"0.2\">loading...</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.promise = new Promise((f) => {\n\t\t\tfulfil = f;\n\t\t});\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.8\">45</p>\n\t\t\t<p class=\"pending\" foo=\"0.2\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 10));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.7\">45</p>\n\t\t\t<p class=\"pending\" foo=\"0.3\">loading...</p>\n\t\t`\n\t\t);\n\n\t\tawait fulfil(46);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.7\">46</p>\n\t\t\t<p class=\"pending\" foo=\"0.3\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 10));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"0.8\">46</p>\n\t\t\t<p class=\"pending\" foo=\"0.2\">loading...</p>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 20));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p class=\"then\" foo=\"1.0\">46</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-await-block-outros/main.svelte",
    "content": "<script>\n\texport let promise;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.setAttribute('foo', t.toFixed(1));\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#await promise}\n\t<p class='pending' transition:foo|global>loading...</p>\n{:then value}\n\t<p class='then' transition:foo>{value}</p>\n{:catch error}\n\t<p class='catch' transition:foo>{error.message}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\traf.tick(0);\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\tassert.equal(div.foo, 42);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 42);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-context/main.svelte",
    "content": "<script>\n\texport let x = 42;\n\texport let visible = false;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = x;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo></div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-deferred/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\treturn Promise.resolve().then(() => {\n\t\t\traf.tick(0);\n\n\t\t\tconst [, div] = target.querySelectorAll('div');\n\t\t\t// @ts-ignore\n\t\t\tassert.equal(div.foo, 0);\n\n\t\t\traf.tick(50);\n\t\t\t// @ts-ignore\n\t\t\tassert.equal(div.foo, 0.5);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-deferred/main.svelte",
    "content": "<script>\n\texport let visible;\n\tlet foo_text;\n\tlet bar_text;\n\tfunction foo(node, params) {\n\t\tfoo_text = node.textContent;\n\t\treturn () => {\n\t\t\tif (bar_text !== `b`) {\n\t\t\t\tthrow new Error(`foo ran prematurely`);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tduration: 100,\n\t\t\t\ttick: t => {\n\t\t\t\t\tnode.foo = t;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n\tfunction bar(node, params) {\n\t\tbar_text = node.textContent;\n\t\treturn () => {\n\t\t\tif (foo_text !== `a`) {\n\t\t\t\tthrow new Error(`bar ran prematurely`);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tduration: 100,\n\t\t\t\ttick: t => {\n\t\t\t\t\tnode.foo = t;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo>a</div>\n{:else}\n\t<div transition:bar>b</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-deferred-b/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\treturn Promise.resolve().then(() => {\n\t\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('.foo'));\n\n\t\t\traf.tick(0);\n\n\t\t\tassert.equal(div.foo, 0);\n\n\t\t\traf.tick(50);\n\t\t\tassert.equal(div.foo, 0.5);\n\t\t\traf.tick(100);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-deferred-b/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tlet foo_text;\n\tlet bar_text;\n\n\tfunction foo(node, { duration = 100 }) {\n\t\tfoo_text = node.textContent;\n\n\t\treturn () => {\n\t\t\tif (bar_text !== `b`) {\n\t\t\t\tthrow new Error(`foo ran prematurely`);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tduration,\n\t\t\t\ttick: t => {\n\t\t\t\t\tnode.foo = t;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n\n\tfunction bar(node, { duration = 100 }) {\n\t\tbar_text = node.textContent;\n\n\t\treturn () => {\n\t\t\tif (foo_text !== `a`) {\n\t\t\t\tthrow new Error(`bar ran prematurely`);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tduration,\n\t\t\t\ttick: t => {\n\t\t\t\t\tnode.foo = t;\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div class=\"foo\" in:foo>a</div>\n{:else}\n\t<div out:bar>b</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-deferred-option-direction/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = true;\n\n\t\tconst div_in = /** @type {HTMLDivElement & { directions: string }} */ (\n\t\t\ttarget.querySelector('#in')\n\t\t);\n\t\tconst div_out = /** @type {HTMLDivElement & { directions: string }} */ (\n\t\t\ttarget.querySelector('#out')\n\t\t);\n\t\tconst div_bothin = /** @type {HTMLDivElement & { directions: string }} */ (\n\t\t\ttarget.querySelector('#both-in')\n\t\t);\n\t\tconst div_bothout = /** @type {HTMLDivElement & { directions: string }} */ (\n\t\t\ttarget.querySelector('#both-out')\n\t\t);\n\n\t\tassert.equal(div_in.directions, 'in,in');\n\t\tassert.equal(div_out.directions, 'out,out');\n\t\tassert.equal(div_bothin.directions, 'both,in');\n\t\tassert.equal(div_bothout.directions, 'both,out');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-deferred-option-direction/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, _params, options) {\n\t\tnode.directions = options.direction;\n\n\t\treturn (opts) => {\n\t\t\tnode.directions += \",\" + opts.direction;\n\n\t\t\treturn {\n\t\t\t\tduration: 10\n\t\t\t};\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div id=\"both-in\" transition:foo></div>\n\t<div id=\"in\" in:foo></div>\n{/if}\n\n{#if !visible}\n\t<div id=\"out\" out:foo></div>\n\t<div id=\"both-out\" transition:foo={{ duration: 500 }}></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-delay/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.visible = false;\n\n\t\traf.tick(125);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 1);\n\n\t\traf.tick(175);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(250);\n\t\tassert.equal(div.foo, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-delay/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tdelay: 50,\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo>delayed</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-delay-in-out/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement & { foo: number, bar: number }} */ (\n\t\t\ttarget.querySelector('div')\n\t\t);\n\n\t\traf.tick(0);\n\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(div.bar, undefined);\n\n\t\traf.tick(200);\n\t\tassert.equal(div.bar, 1);\n\n\t\traf.tick(300);\n\t\tassert.equal(div.bar, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-delay-in-out/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tdelay: 50,\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar(node, params) {\n\t\treturn {\n\t\t\tdelay: 50,\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.bar = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:foo out:bar>delayed</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-destroyed-before-end/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = false;\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.$destroy();\n\n\t\traf.tick(100);\n\t},\n\n\twarnings: ['Tried to unmount a component that was not mounted']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-destroyed-before-end/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo>destroy me</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-dynamic-component/A.svelte",
    "content": "<script>\n\tfunction a(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.a = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:a>a</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-dynamic-component/B.svelte",
    "content": "<script>\n\tfunction b(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.b = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:b>b</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-dynamic-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true };\n\t},\n\n\thtml: `\n\t\t<div>a</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>a</div>\n\t\t\t<div>b</div>\n\t\t`\n\t\t);\n\n\t\tconst [a, b] = /** @type {NodeListOf<HTMLDivElement & { a: number, b: number }>}} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(25);\n\n\t\tassert.equal(a.a, 0.75);\n\t\tassert.equal(b.b, 0.25);\n\n\t\traf.tick(100);\n\n\t\tassert.equal(a.a, 0);\n\t\tassert.equal(b.b, 1);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>b</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-dynamic-component/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\texport let x;\n</script>\n\n<svelte:component this=\"{x ? A : B}\"/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-dynamic-if-block-bidi/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\tasync test({ assert, component, target, raf }) {\n\t\t// @ts-expect-error\n\t\tglobal.count = 0;\n\n\t\tcomponent.visible = true;\n\t\t// @ts-expect-error\n\t\tassert.equal(global.count, 1);\n\t\tconst div = /** @type {HTMLDivElement & { foo: Number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(75);\n\t\tcomponent.name = 'everybody';\n\t\tassert.equal(div.foo, 0.75);\n\t\tassert.htmlEqual(div.innerHTML, 'hello everybody!');\n\n\t\tcomponent.visible = false;\n\t\tcomponent.name = 'again';\n\t\tassert.htmlEqual(div.innerHTML, 'hello everybody!');\n\n\t\traf.tick(125);\n\t\tassert.equal(div.foo, 0.25);\n\n\t\tcomponent.visible = true;\n\t\traf.tick(175);\n\t\tassert.equal(div.foo, 0.75);\n\t\tassert.htmlEqual(div.innerHTML, 'hello again!');\n\n\t\traf.tick(200);\n\t\tassert.equal(div.foo, 1);\n\n\t\traf.tick(225);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-dynamic-if-block-bidi/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let name;\n\n\tfunction foo(node, params) {\n\t\tglobal.count += 1;\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo>hello {name}!</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: ['a', 'b', 'c'] };\n\t},\n\n\tintro: true,\n\n\ttest({ assert, component, target, raf }) {\n\t\tlet divs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\traf.tick(0);\n\t\tassert.equal(divs[0].foo, 0);\n\t\tassert.equal(divs[1].foo, 0);\n\t\tassert.equal(divs[2].foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, 0.5);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, 0.5);\n\n\t\tcomponent.things = ['a', 'b', 'c', 'd'];\n\t\tdivs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, 0.5);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, 0.5);\n\t\tassert.equal(divs[3].foo, 0);\n\n\t\traf.tick(75);\n\t\tassert.equal(divs[0].foo, 0.75);\n\t\tassert.equal(divs[1].foo, 0.75);\n\t\tassert.equal(divs[2].foo, 0.75);\n\t\tassert.equal(divs[3].foo, 0.25);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-intro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing}\n\t<div in:foo|global>{thing}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-intro-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false, things: ['a', 'b', 'c'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst divs = /** @type {NodeListOf<HTMLDivElement & { foo: number, bar: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(0);\n\t\tassert.equal(divs[0].foo, 0);\n\t\tassert.equal(divs[1].foo, 0);\n\t\tassert.equal(divs[2].foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, 0.5);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, 0.5);\n\n\t\tcomponent.visible = false;\n\n\t\traf.tick(70);\n\t\tassert.equal(divs[0].foo, 0.7);\n\t\tassert.equal(divs[1].foo, 0.7);\n\t\tassert.equal(divs[2].foo, 0.7);\n\n\t\tassert.equal(divs[0].bar, 0.8);\n\t\tassert.equal(divs[1].bar, 0.8);\n\t\tassert.equal(divs[2].bar, 0.8);\n\n\t\tcomponent.visible = true;\n\n\t\traf.tick(100);\n\t\tassert.equal(divs[0].foo, 0.3);\n\t\tassert.equal(divs[1].foo, 0.3);\n\t\tassert.equal(divs[2].foo, 0.3);\n\n\t\tassert.equal(divs[0].bar, 1);\n\t\tassert.equal(divs[1].bar, 1);\n\t\tassert.equal(divs[2].bar, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-intro-outro/main.svelte",
    "content": "<script>\n\texport let things;\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.bar = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing}\n\t{#if visible}\n\t\t<div in:foo out:bar>{thing}</div>\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-keyed-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [{ name: 'a' }, { name: 'b' }, { name: 'c' }]\n\t\t};\n\t},\n\n\tintro: true,\n\n\ttest({ assert, component, target, raf }) {\n\t\tlet divs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(0);\n\t\tassert.equal(divs[0].foo, 0);\n\t\tassert.equal(divs[1].foo, 0);\n\t\tassert.equal(divs[2].foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, 0.5);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, 0.5);\n\n\t\tcomponent.things = [{ name: 'a' }, { name: 'woo!' }, { name: 'b' }, { name: 'c' }];\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>a</div>\n\t\t\t<div>woo!</div>\n\t\t\t<div>b</div>\n\t\t\t<div>c</div>\n\t\t`\n\t\t);\n\t\tdivs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, 0.5);\n\t\tassert.equal(divs[1].foo, 0);\n\t\tassert.equal(divs[2].foo, 0.5);\n\t\tassert.equal(divs[3].foo, 0.5);\n\n\t\traf.tick(75);\n\t\tassert.equal(divs[0].foo, 0.75);\n\t\tassert.equal(divs[1].foo, 0.25);\n\t\tassert.equal(divs[2].foo, 0.75);\n\t\tassert.equal(divs[3].foo, 0.75);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-keyed-intro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.name)}\n\t<div in:foo|global>{thing.name}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-keyed-intro-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [{ name: 'a' }, { name: 'b' }, { name: 'c' }]\n\t\t};\n\t},\n\n\tintro: true,\n\n\ttest({ assert, component, target, raf }) {\n\t\tconst divs = /** @type {NodeListOf<HTMLDivElement & { foo: number, i: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\tdivs[0].i = 0; // for debugging\n\t\tdivs[1].i = 1;\n\t\tdivs[2].i = 2;\n\n\t\traf.tick(0);\n\t\tassert.equal(divs[0].foo, 0);\n\t\tassert.equal(divs[1].foo, 0);\n\t\tassert.equal(divs[2].foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(divs[0].foo, 1);\n\t\tassert.equal(divs[1].foo, 1);\n\t\tassert.equal(divs[2].foo, 1);\n\n\t\tcomponent.things = [{ name: 'a' }, { name: 'c' }];\n\n\t\tconst divs2 = target.querySelectorAll('div');\n\t\tassert.strictEqual(divs[0], divs2[0]);\n\t\tassert.strictEqual(divs[1], divs2[1]);\n\t\tassert.strictEqual(divs[2], divs2[2]);\n\n\t\traf.tick(150);\n\t\tassert.equal(divs[0].foo, 1);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, 1);\n\n\t\tcomponent.things = [{ name: 'a' }, { name: 'b' }, { name: 'c' }];\n\n\t\traf.tick(175);\n\t\tassert.equal(divs[0].foo, 1);\n\t\tassert.equal(divs[1].foo, 0.75);\n\t\tassert.equal(divs[2].foo, 1);\n\n\t\traf.tick(225);\n\t\tconst divs3 = target.querySelectorAll('div');\n\t\tassert.strictEqual(divs[0], divs3[0]);\n\t\tassert.strictEqual(divs[1], divs3[1]);\n\t\tassert.strictEqual(divs[2], divs3[2]);\n\n\t\tassert.equal(divs[0].foo, 1);\n\t\tassert.equal(divs[1].foo, 1);\n\t\tassert.equal(divs[2].foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-keyed-intro-outro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.name)}\n\t<div transition:foo|global>{thing.name}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-keyed-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tthings: [{ name: 'a' }, { name: 'b' }, { name: 'c' }]\n\t\t};\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tconst divs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\tcomponent.things = [{ name: 'a' }, { name: 'c' }];\n\n\t\tconst divs2 = target.querySelectorAll('div');\n\n\t\traf.tick(0);\n\t\tassert.strictEqual(divs[0], divs2[0]);\n\t\tassert.strictEqual(divs[1], divs2[1]);\n\t\tassert.strictEqual(divs[2], divs2[2]);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, undefined);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, undefined);\n\t\traf.tick(100);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-keyed-outro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing (thing.name)}\n\t<div out:foo>{thing.name}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: ['a', 'b', 'c'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tconst divs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\tcomponent.things = ['a'];\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, undefined);\n\t\tassert.equal(divs[1].foo, 0.5);\n\t\tassert.equal(divs[2].foo, 0.5);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, '<div>a</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-block-outro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing}\n\t<div out:foo>{thing}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-else-block-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: ['a', 'b', 'c'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.things = [];\n\t\tconst div = /** @type {HTMLDivElement & { foo: Number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(200);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(300);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(400);\n\t\tassert.equal(div.foo, 1);\n\n\t\traf.tick(500);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-else-block-intro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing}\n\t<p>{thing}</p>\n{:else}\n\t<div in:foo>else</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-else-block-intro-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { things: ['a', 'b', 'c'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.things = [];\n\t\tlet div = /** @type {HTMLDivElement & { foo: number, bar: number }} */ (\n\t\t\ttarget.querySelector('div')\n\t\t);\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(200);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(300);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(400);\n\t\tassert.equal(div.foo, 1);\n\n\t\traf.tick(600);\n\t\tcomponent.things = ['a', 'b', 'c'];\n\n\t\traf.tick(700);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0.75);\n\n\t\traf.tick(800);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0.5);\n\n\t\traf.tick(900);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0.25);\n\n\t\t// test outro before intro complete\n\t\traf.tick(1000);\n\t\tcomponent.things = [];\n\t\tdiv = /** @type {HTMLDivElement & { foo: number, bar: number }} */ (\n\t\t\ttarget.querySelector('div')\n\t\t);\n\n\t\traf.tick(1200);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.things = ['a', 'b', 'c'];\n\t\traf.tick(1300);\n\t\tassert.equal(div.foo, 0.75);\n\t\tassert.equal(div.bar, 0.75);\n\n\t\traf.tick(1400);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0.5);\n\n\t\traf.tick(2000);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-else-block-intro-outro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.bar = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing}\n\t<p>{thing}</p>\n{:else}\n\t<div in:foo out:bar>else</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-else-block-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\t/** @type {string[]} */\n\t\t\tthings: []\n\t\t};\n\t},\n\ttest({ assert, component, target, raf }) {\n\t\tconst div = /** @type {HTMLDivElement & { foo: Number }} */ (target.querySelector('div'));\n\t\tcomponent.things = ['a', 'b', 'c'];\n\n\t\traf.tick(200);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(300);\n\t\tassert.equal(div.foo, 0.25);\n\n\t\traf.tick(400);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(500);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-else-block-outro/main.svelte",
    "content": "<script>\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each things as thing}\n\t<p>{thing}</p>\n{:else}\n\t<div out:foo>else</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-keyed-unchanged/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { numbers: [1, 2, 3, 4, 5] };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst divs1 = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\tassert.equal(divs1[0].foo, undefined);\n\n\t\tcomponent.numbers = [1, 2, 5, 4, 3];\n\t\tconst divs2 = target.querySelectorAll('div');\n\n\t\tassert.equal(divs1[0], divs2[0]);\n\t\tassert.equal(divs1[1], divs2[1]);\n\t\tassert.equal(divs1[2], divs2[4]);\n\t\tassert.equal(divs1[3], divs2[3]);\n\t\tassert.equal(divs1[4], divs2[2]);\n\n\t\tassert.equal(divs1[0].foo, undefined);\n\t\tassert.equal(divs1[1].foo, undefined);\n\t\tassert.equal(divs1[2].foo, undefined);\n\t\tassert.equal(divs1[3].foo, undefined);\n\t\tassert.equal(divs1[4].foo, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-keyed-unchanged/main.svelte",
    "content": "<script>\n\texport let numbers;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each numbers as num, i (num)}\n\t<div transition:foo>{num}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-outro-cancelled/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<section></section>',\n\ttest({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.add();\n\t\t\tcomponent.add();\n\t\t});\n\n\t\tlet time = 0;\n\n\t\traf.tick(0);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<section>\n\t\t\t\t<div t=\"0\">Thing 1</div>\n\t\t\t\t<div t=\"0\">Thing 2</div>\n\t\t\t</section>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 400));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<section>\n\t\t\t\t<div t=\"1\">Thing 1</div>\n\t\t\t\t<div t=\"1\">Thing 2</div>\n\t\t\t</section>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.toggle();\n\t\t});\n\t\t// transition halfway\n\t\traf.tick((time += 200));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<section t=\"0.5\">\n\t\t\t\t<div t=\"1\">Thing 1</div>\n\t\t\t\t<div t=\"1\">Thing 2</div>\n\t\t\t</section>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.toggle();\n\t\t});\n\t\t// transition back\n\t\traf.tick((time += 200));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<section t=\"1\">\n\t\t\t\t<div t=\"1\">Thing 1</div>\n\t\t\t\t<div t=\"1\">Thing 2</div>\n\t\t\t</section>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.remove(1);\n\t\t});\n\n\t\traf.tick((time += 400));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<section t=\"1\">\n\t\t\t\t<div t=\"1\">Thing 2</div>\n\t\t\t</section>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-outro-cancelled/main.svelte",
    "content": "<script>\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick(t) {\n\t\t\t\tnode.setAttribute('t', t);\n\t\t\t}\n\t\t};\n\t}\n\n\tlet shown = true;\n\tlet _id = 1;\n\tlet items = [];\n\n\texport const toggle = () => (shown = !shown);\n\texport const add = () => {\n\t\titems = items.concat({ _id, name: `Thing ${_id}` });\n\t\t_id++;\n\t};\n\texport const remove = (id) => (items = items.filter(({ _id }) => _id !== id));\n</script>\n\n{#if shown}\n\t<section transition:fade>\n\t\t{#each items as thing (thing._id)}\n\t\t\t<div in:fade|local out:fade|local>{thing.name}</div>\n\t\t{/each}\n\t</section>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-unchanged/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { numbers: [1, 2, 3, 4, 5] };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tconst divs1 = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\tassert.equal(divs1[0].foo, undefined);\n\n\t\tcomponent.numbers = [1, 2, 5, 4, 3];\n\t\tconst divs2 = target.querySelectorAll('div');\n\n\t\tassert.equal(divs1[0], divs2[0]);\n\t\tassert.equal(divs1[1], divs2[1]);\n\t\tassert.equal(divs1[2], divs2[2]);\n\t\tassert.equal(divs1[3], divs2[3]);\n\t\tassert.equal(divs1[4], divs2[4]);\n\n\t\tassert.equal(divs1[0].foo, undefined);\n\t\tassert.equal(divs1[1].foo, undefined);\n\t\tassert.equal(divs1[2].foo, undefined);\n\t\tassert.equal(divs1[3].foo, undefined);\n\t\tassert.equal(divs1[4].foo, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-each-unchanged/main.svelte",
    "content": "<script>\n\texport let numbers;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each numbers as num, i}\n\t<div transition:foo>{num}</div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-events/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tvisible: false,\n\t\t\tthings: ['a', 'b', 'c', 'd']\n\t\t};\n\t},\n\n\t// intro: true,\n\n\thtml: `\n\t\t<p>waiting...</p>\n\t`,\n\n\tasync test({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>introstart</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.deepEqual(component.intros.sort(), ['a', 'b', 'c', 'd']);\n\t\tassert.equal(component.intro_count, 4);\n\n\t\tawait raf.tick(100);\n\t\tassert.equal(component.intro_count, 0);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>introend</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.visible = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>outrostart</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\n\t\traf.tick(150);\n\t\tassert.deepEqual(component.outros.sort(), ['a', 'b', 'c', 'd']);\n\t\tassert.equal(component.outro_count, 4);\n\n\t\traf.tick(200);\n\t\tassert.equal(component.outro_count, 0);\n\n\t\tcomponent.visible = true;\n\n\t\tawait raf.tick(250);\n\t\tassert.deepEqual(component.intros.sort(), ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd']);\n\t\tassert.equal(component.intro_count, 4);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>introstart</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-events/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let things;\n\texport let visible;\n\n\texport let intros = [];\n\texport let outros = [];\n\texport let intro_count = 0;\n\texport let outro_count = 0;\n\n\tlet status = 'waiting...';\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction introstart(e) {\n\t\tintros.push(e.target.textContent);\n\t\tintro_count += 1;\n\t\tstatus = 'introstart';\n\t}\n\n\tfunction introend(e) {\n\t\tintro_count -= 1;\n\t\tstatus = 'introend';\n\t}\n\n\tfunction outrostart(e) {\n\t\toutros.push(e.target.textContent);\n\t\toutro_count += 1;\n\t\tstatus = 'outrostart';\n\t}\n\n\tfunction outroend(e) {\n\t\toutro_count -= 1;\n\t\tstatus = 'outroend';\n\t}\n</script>\n\n<p>{status}</p>\n\n{#each things as thing}\n\t{#if visible}\n\t\t<p\n\t\t\ttransition:foo\n\t\t\ton:introstart={introstart}\n\t\t\ton:introend={introend}\n\t\t\ton:outrostart={outrostart}\n\t\t\ton:outroend={outroend}\n\t\t>{thing}</p>\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-events-in-out/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tvisible: false,\n\t\t\tthings: ['a', 'b', 'c', 'd']\n\t\t};\n\t},\n\n\t// intro: true,\n\n\thtml: `\n\t\t<p>waiting...</p>\n\t`,\n\n\tasync test({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>introstart</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\n\t\tawait raf.tick(50);\n\n\t\tassert.deepEqual(component.intros.sort(), ['a', 'b', 'c', 'd']);\n\t\tassert.equal(component.intro_count, 4);\n\n\t\tawait raf.tick(100);\n\t\tassert.equal(component.intro_count, 0);\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>introend</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\n\t\tcomponent.visible = false;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>outrostart</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\n\t\tawait raf.tick(150);\n\t\tassert.deepEqual(component.outros.sort(), ['a', 'b', 'c', 'd']);\n\t\tassert.equal(component.outro_count, 4);\n\n\t\tawait raf.tick(200);\n\t\tassert.equal(component.outro_count, 0);\n\n\t\tcomponent.visible = true;\n\n\t\tawait raf.tick(250);\n\t\tassert.deepEqual(component.intros.sort(), ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd']);\n\t\tassert.equal(component.intro_count, 4);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>introstart</p>\n\t\t\t<p>a</p>\n\t\t\t<p>b</p>\n\t\t\t<p>c</p>\n\t\t\t<p>d</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-events-in-out/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\texport let things;\n\texport let visible;\n\n\texport let intros = [];\n\texport let outros = [];\n\texport let intro_count = 0;\n\texport let outro_count = 0;\n\n\tlet status = 'waiting...';\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction introstart(e) {\n\t\tintros.push(e.target.textContent);\n\t\tintro_count += 1;\n\t\tstatus = 'introstart';\n\t}\n\n\tfunction introend(e) {\n\t\tintro_count -= 1;\n\t\tstatus = 'introend';\n\t}\n\n\tfunction outrostart(e) {\n\t\toutros.push(e.target.textContent);\n\t\toutro_count += 1;\n\t\tstatus = 'outrostart';\n\t}\n\n\tfunction outroend(e) {\n\t\toutro_count -= 1;\n\t\tstatus = 'outroend';\n\t}\n</script>\n\n<p>{status}</p>\n\n{#each things as thing}\n\t{#if visible}\n\t\t<p\n\t\t\tin:foo\n\t\t\tout:foo\n\t\t\ton:introstart={introstart}\n\t\t\ton:introend={introend}\n\t\t\ton:outrostart={outrostart}\n\t\t\ton:outroend={outroend}\n\t\t>{thing}</p>\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-bidi/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\t// @ts-expect-error\n\t\tglobal.count = 0;\n\n\t\tcomponent.visible = true;\n\t\t// @ts-expect-error\n\t\tassert.equal(global.count, 1);\n\t\tconst div = /** @type {HTMLDivElement & { foo: Number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(300);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\tcomponent.visible = false;\n\t\t// @ts-expect-error\n\t\tassert.equal(global.count, 1);\n\n\t\traf.tick(500);\n\t\tassert.equal(div.foo, 0.25);\n\n\t\tcomponent.visible = true;\n\t\traf.tick(700);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(800);\n\t\tassert.equal(div.foo, 1);\n\n\t\traf.tick(900);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-bidi/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\tglobal.count += 1;\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo>foo bidi</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-in-each-block-bidi/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { threshold: 5 };\n\t},\n\n\thtml: `\n\t\t<div>1</div>\n\t\t<div>2</div>\n\t\t<div>3</div>\n\t\t<div>4</div>\n\t\t<div>5</div>\n\t`,\n\n\tintro: true,\n\n\ttest({ assert, component, target, raf }) {\n\t\tconst divs = /** @type {NodeListOf<HTMLDivElement & { foo: Number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(0);\n\t\tassert.equal(divs[0].foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(divs[0].foo, 1);\n\n\t\tcomponent.threshold = 4;\n\t\tassert.equal(divs[4].foo, 1);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>1</div>\n\t\t\t<div>2</div>\n\t\t\t<div>3</div>\n\t\t\t<div>4</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.threshold = 3;\n\t\tassert.equal(divs[3].foo, 1);\n\n\t\traf.tick(300);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>1</div>\n\t\t\t<div>2</div>\n\t\t\t<div>3</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-in-each-block-bidi/main.svelte",
    "content": "<script>\n\texport let threshold;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as number}\n\t{#if threshold >= number}\n\t\t<div transition:foo|global>{number}</div>\n\t{/if}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-in-each-block-bidi-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false, threshold: 5 };\n\t},\n\n\thtml: `\n\t\t<div>1</div>\n\t\t<div>2</div>\n\t\t<div>3</div>\n\t\t<div>4</div>\n\t\t<div>5</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\traf.tick(100);\n\n\t\tcomponent.threshold = 4;\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>1</div>\n\t\t\t<div>2</div>\n\t\t\t<div>3</div>\n\t\t\t<div>4</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-in-each-block-bidi-2/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let threshold;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as number}\n\t{#if visible}\n\t\t{#if threshold >= number}\n\t\t\t<div transition:foo>{number}</div>\n\t\t{/if}\n\t{:else}\n\t\t{#if threshold >= number}\n\t\t\t<div transition:foo>{number}</div>\n\t\t{/if}\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-in-each-block-bidi-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false, threshold: 5 };\n\t},\n\n\thtml: `\n\t\t<div>1</div>\n\t\t<div>2</div>\n\t\t<div>3</div>\n\t\t<div>4</div>\n\t\t<div>5</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\traf.tick(100);\n\n\t\tcomponent.threshold = 4;\n\t\traf.tick(150);\n\t\tcomponent.threshold = 5;\n\t\traf.tick(200);\n\n\t\tcomponent.threshold = 5.5;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>1</div>\n\t\t\t<div>2</div>\n\t\t\t<div>3</div>\n\t\t\t<div>4</div>\n\t\t\t<div>5</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-in-each-block-bidi-3/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let threshold;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#each [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as number}\n\t{#if visible}\n\t\t{#if threshold >= number}\n\t\t\t<div transition:foo>{number}</div>\n\t\t{/if}\n\t{:else}\n\t\t{#if threshold >= number}\n\t\t\t<div transition:foo>{number}</div>\n\t\t{/if}\n\t{/if}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(window.getComputedStyle(div).opacity, '0');\n\n\t\traf.tick(200);\n\t\tassert.equal(window.getComputedStyle(div).opacity, '0.5');\n\n\t\traf.tick(400);\n\t\tassert.equal(window.getComputedStyle(div).opacity, '1');\n\n\t\traf.tick(500);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-intro/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction fade(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.style.opacity = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:fade>fades in</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-intro-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tlet div = /** @type {HTMLDivElement & { foo: Number, bar: number }} */ (\n\t\t\ttarget.querySelector('div')\n\t\t);\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(200);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(400);\n\t\tassert.equal(div.foo, 1);\n\n\t\traf.tick(500);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.visible = false;\n\t\traf.tick(600);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0.75);\n\n\t\traf.tick(900);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0);\n\n\t\t// test outro before intro complete\n\t\traf.tick(1000);\n\t\tcomponent.visible = true;\n\t\tdiv = /** @type {HTMLDivElement & { foo: Number, bar: number }} */ (\n\t\t\ttarget.querySelector('div')\n\t\t);\n\n\t\traf.tick(1200);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.visible = false;\n\t\traf.tick(1300);\n\t\tassert.equal(div.foo, 0.75);\n\t\tassert.equal(div.bar, 0.75);\n\n\t\traf.tick(1400);\n\t\tassert.equal(div.foo, 1);\n\t\tassert.equal(div.bar, 0.5);\n\n\t\traf.tick(2000);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-intro-outro/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction bar(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.bar = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:foo out:bar>foo then bar</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-outro-timeout/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement} */ (target.querySelector('div'));\n\n\t\tcomponent.visible = false;\n\t\tassert.equal(window.getComputedStyle(div).opacity, '1');\n\n\t\traf.tick(200);\n\t\tassert.equal(window.getComputedStyle(div).opacity, '0.5');\n\n\t\traf.tick(400);\n\t\tassert.equal(window.getComputedStyle(div).opacity, '0');\n\n\t\traf.tick(600);\n\t\tassert.equal(target.querySelector('div'), undefined);\n\t\tflushSync();\n\t\tassert.equal(component.div, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-outro-timeout/main.svelte",
    "content": "<script>\n\texport let div;\n\texport let visible;\n\n\tfunction fade(node, params) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.style.opacity = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div out:fade style=\"opacity: 1;\" bind:this={div}>yes</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-dynamic-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { z: 'z' };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tassert.equal(target.querySelector('div'), component.no);\n\n\t\tcomponent.x = true;\n\n\t\traf.tick(25);\n\t\tassert.equal(component.yes.foo, undefined);\n\t\tassert.equal(component.no.foo, 0.75);\n\n\t\traf.tick(75);\n\t\tassert.equal(component.yes.foo, undefined);\n\t\tassert.equal(component.no.foo, 0.25);\n\n\t\traf.tick(100);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-dynamic-outro/main.svelte",
    "content": "<script>\n\texport let yes;\n\texport let no;\n\n\texport let x;\n\texport let z;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t<div bind:this={yes} out:foo>{z}</div>\n{:else}\n\t<div bind:this={no} out:foo>{z}</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tintro: true,\n\n\ttest({ assert, component, target, raf }) {\n\t\tassert.equal(target.querySelector('div'), component.no);\n\n\t\traf.tick(0);\n\t\tassert.equal(component.no.foo, 0);\n\n\t\traf.tick(200);\n\t\tassert.equal(component.no.foo, 0.5);\n\n\t\traf.tick(500);\n\t\tcomponent.x = true;\n\t\tassert.equal(component.no, null);\n\t\tassert.equal(component.yes.foo, 0);\n\n\t\traf.tick(700);\n\t\tassert.equal(component.yes.foo, 0.5);\n\n\t\traf.tick(1000);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-intro/main.svelte",
    "content": "<script>\n\texport let yes;\n\texport let no;\n\n\texport let x;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 400,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t<div bind:this={yes} in:foo>yes</div>\n{:else}\n\t<div bind:this={no} in:foo|global>no</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-not-dynamic-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, component, target, raf }) {\n\t\tconst t = target.querySelector('#t');\n\n\t\tawait (component.condition = false);\n\n\t\tlet time = 0;\n\t\traf.tick((time += 25));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div id=\"t\" foo=\"0.75\">TRUE</div>\n\t\t\t<div id=\"f\">FALSE</div>\n\t\t`\n\t\t);\n\n\t\t// toggling back in the middle of the out transition\n\t\t// will reuse the previous element\n\t\tawait (component.condition = true);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div id=\"t\" foo=\"1\">TRUE</div>\n\t\t\t<div id=\"f\">FALSE</div>\n\t\t`\n\t\t);\n\t\tassert.equal(target.querySelector('#t'), t);\n\n\t\traf.tick((time += 25));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div id=\"t\" foo=\"1\">TRUE</div>\n\t\t\t<div id=\"f\" foo=\"0.75\">FALSE</div>\n\t\t`\n\t\t);\n\n\t\traf.tick((time += 75));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div id=\"t\" foo=\"1\">TRUE</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-not-dynamic-outro/main.svelte",
    "content": "<script>\n\texport let condition = true;\n\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.setAttribute('foo', t);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if condition}\n\t<div id=\"t\" out:foo>TRUE</div>\n{:else}\n\t<div id=\"f\" out:foo>FALSE</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tassert.equal(target.querySelector('div'), component.no);\n\n\t\tcomponent.x = true;\n\n\t\traf.tick(25);\n\t\tassert.equal(component.yes.foo, undefined);\n\t\tassert.equal(component.no.foo, 0.75);\n\n\t\traf.tick(75);\n\t\tassert.equal(component.yes.foo, undefined);\n\t\tassert.equal(component.no.foo, 0.25);\n\n\t\traf.tick(100);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-else-block-outro/main.svelte",
    "content": "<script>\n\texport let yes;\n\texport let no;\n\n\texport let x;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t<div bind:this={yes} out:foo>yes</div>\n{:else}\n\t<div bind:this={no} out:foo>no</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-elseif-block-outro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, y: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tassert.equal(target.querySelector('div'), component.no);\n\n\t\tcomponent.x = true;\n\t\tcomponent.y = false;\n\n\t\traf.tick(25);\n\t\tassert.equal(component.yes.foo, undefined);\n\t\tassert.equal(component.no.foo, 0.75);\n\n\t\traf.tick(75);\n\t\tassert.equal(component.yes.foo, undefined);\n\t\tassert.equal(component.no.foo, 0.25);\n\n\t\traf.tick(100);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-elseif-block-outro/main.svelte",
    "content": "<script>\n\texport let yes;\n\texport let no;\n\n\texport let x;\n\texport let y;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t<div bind:this={yes} out:foo>yes</div>\n{:else if y}\n\t<div bind:this={no} out:foo>no</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-outro-unrelated-component-binding-update/Component.svelte",
    "content": "<script>\n\texport let condition;\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\tlet bool = true;\n</script>\n\n<button on:click={() => (condition = false)}></button>\n<button on:click={() => (bool = !bool)}></button>\n{#if bool}\n\t<div out:foo></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-outro-unrelated-component-binding-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, window, raf }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst event = new window.MouseEvent('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(event);\n\t\tflushSync();\n\t\traf.tick(500);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-outro-unrelated-component-binding-update/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\tlet condition = true;\n</script>\n\n{#if condition}\n\t<Component bind:condition />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-outro-unrelated-component-store-update/Component.svelte",
    "content": "<script>\n\texport let condition;\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\t$condition;\n\tlet bool = true;\n</script>\n\n<button on:click={() => (bool = !bool)}></button>\n{#if bool}\n\t<div out:foo></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-outro-unrelated-component-store-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, component, raf }) {\n\t\tawait component.condition.set(false);\n\t\traf.tick(500);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-if-outro-unrelated-component-store-update/main.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\timport Component from \"./Component.svelte\";\n\texport let condition = writable(true);\n</script>\n\n{#if $condition}\n\t<button on:click={() => ($condition = false)} id=\"1\"></button>\n\t<Component {condition} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-initial/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-initial/main.svelte",
    "content": "<script>\n\texport let visible = false;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo></div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-enabled-by-option/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tintro: true,\n\n\tmode: ['client', 'server'],\n\n\ttest({ assert, target, raf }) {\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-enabled-by-option/main.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:foo|global></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-skipped-by-default/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, raf }) {\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, undefined);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-skipped-by-default/main.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:foo></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-skipped-by-default-nested/Widget.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:foo></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-skipped-by-default-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, raf }) {\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\tassert.equal(div.foo, undefined);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-intro-skipped-by-default-nested/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget/>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, y: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tlet div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\tassert.equal(div.foo, undefined);\n\n\t\tcomponent.y = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tdiv = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.x = false;\n\t\tcomponent.y = true;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.x = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tdiv = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\tcomponent.y = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(120);\n\t\tassert.equal(div.foo, 0.8);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#if y}\n\t\t<div transition:foo></div>\n\t{/if}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-and-global/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, y: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\t// first, toggle x — first element should snap in\n\t\t// and out while second one transitions\n\t\tcomponent.x = true;\n\n\t\tlet divs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\t\traf.tick(0);\n\t\tassert.equal(divs[0].foo, undefined);\n\t\tassert.equal(divs[1].foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(divs[0].foo, undefined);\n\t\tassert.equal(divs[1].foo, 0.5);\n\n\t\traf.tick(100);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>snaps if x changes</div>\n\t\t\t<div>transitions if x changes</div>\n\t\t`\n\t\t);\n\n\t\traf.tick(150);\n\t\tassert.equal(divs[0].foo, undefined);\n\t\tassert.equal(divs[1].foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t// then toggle y\n\t\tcomponent.y = false;\n\t\tcomponent.x = true;\n\t\tcomponent.y = true;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>snaps if x changes</div>\n\t\t\t<div>transitions if x changes</div>\n\t\t`\n\t\t);\n\t\tdivs = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(250);\n\t\tassert.equal(divs[0].foo, 0.5);\n\t\tassert.equal(divs[1].foo, 0.5);\n\n\t\traf.tick(300);\n\t\tassert.equal(divs[0].foo, 1);\n\t\tassert.equal(divs[1].foo, 1);\n\n\t\tcomponent.y = false;\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>snaps if x changes</div>\n\t\t\t<div>transitions if x changes</div>\n\t\t`\n\t\t);\n\n\t\traf.tick(320);\n\t\tassert.equal(divs[0].foo, 0.8);\n\t\tassert.equal(divs[1].foo, 0.8);\n\n\t\traf.tick(400);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-and-global/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#if y}\n\t\t<div transition:foo>snaps if x changes</div>\n\t\t<div transition:foo|global>transitions if x changes</div>\n\t{/if}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-await/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {(value?: any) => void} */\nlet fulfil;\n\nconst promise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, promise };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\t\tfulfil();\n\n\t\treturn promise.then(() => {\n\t\t\tflushSync();\n\t\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\t\traf.tick(0);\n\t\t\tassert.equal(div.foo, 0);\n\n\t\t\traf.tick(100);\n\t\t\tassert.equal(div.foo, 1);\n\n\t\t\tcomponent.x = false;\n\t\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\t\traf.tick(150);\n\t\t\tassert.equal(div.foo, 1);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-await/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let promise;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#await promise then value}\n\t\t<div transition:foo|local></div>\n\t{/await}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-component/Widget.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:foo|local></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-component/main.svelte",
    "content": "<script>\n\texport let x;\n\n\timport Widget from './Widget.svelte';\n</script>\n\n{#if x}\n\t<Widget/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, things: ['a'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div1 = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div1.foo, undefined);\n\n\t\traf.tick(100);\n\t\tassert.equal(div1.foo, undefined);\n\n\t\tcomponent.things = ['a', 'b'];\n\t\tassert.htmlEqual(target.innerHTML, '<div></div><div></div>');\n\n\t\tconst div2 = /** @type {HTMLDivElement & { foo: number }} */ (\n\t\t\ttarget.querySelector('div:last-child')\n\t\t);\n\t\traf.tick(100);\n\t\tassert.equal(div1.foo, undefined);\n\t\tassert.equal(div2.foo, 0);\n\n\t\traf.tick(200);\n\t\tassert.equal(div1.foo, undefined);\n\t\tassert.equal(div2.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-each/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#each things as thing}\n\t\t<div transition:foo|local></div>\n\t{/each}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-each-keyed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, things: ['a'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div1 = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div1.foo, undefined);\n\n\t\traf.tick(100);\n\t\tassert.equal(div1.foo, undefined);\n\n\t\tcomponent.things = ['a', 'b'];\n\t\tassert.htmlEqual(target.innerHTML, '<div></div><div></div>');\n\n\t\tconst div2 = /** @type {HTMLDivElement & { foo: number }} */ (\n\t\t\ttarget.querySelector('div:last-child')\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.equal(div1.foo, undefined);\n\t\tassert.equal(div2.foo, 0);\n\n\t\traf.tick(200);\n\t\tassert.equal(div1.foo, undefined);\n\t\tassert.equal(div2.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-each-keyed/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#each things as thing (thing)}\n\t\t<div transition:foo|local></div>\n\t{/each}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, y: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tlet div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, undefined);\n\n\t\tcomponent.y = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tdiv = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.x = false;\n\t\tcomponent.y = true;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\n\t\tcomponent.x = true;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\t\tdiv = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\tcomponent.y = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-local-nested-if/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#if y}\n\t\t<div transition:foo|local></div>\n\t{/if}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-await/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {(value?: any) => void} */\nlet fulfil;\n\nconst promise = new Promise((f) => {\n\tfulfil = f;\n});\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, promise };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\t\tfulfil();\n\n\t\treturn promise.then(async () => {\n\t\t\tflushSync();\n\t\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\t\traf.tick(0);\n\t\t\tassert.equal(div.foo, 0);\n\n\t\t\traf.tick(100);\n\t\t\tassert.equal(div.foo, 1);\n\n\t\t\tcomponent.x = false;\n\t\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\t\traf.tick(150);\n\t\t\tassert.equal(div.foo, 0.5);\n\n\t\t\traf.tick(200);\n\t\t\tassert.htmlEqual(target.innerHTML, '');\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-await/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let promise;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#await promise then value}\n\t\t<div transition:foo|global></div>\n\t{/await}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-component/Widget.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:foo></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-component/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let x;\n</script>\n\n{#if x}\n\t<Widget/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, things: ['a'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#each things as thing}\n\t\t<div transition:foo|global></div>\n\t{/each}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-delete/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: true, things: ['a', 'b', 'c'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>a</div>\n\t\t\t<div>b</div>\n\t\t\t<div>c</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.things = ['a'];\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>a</div>\n\t\t`\n\t\t);\n\n\t\tcomponent.visible = false;\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-delete/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t{#each things as thing}\n\t\t<div transition:foo>{thing}</div>\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-keyed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, things: ['a'] };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-keyed/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let things;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#each things as thing (thing)}\n\t\t<div transition:foo|global></div>\n\t{/each}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-keyed-2/Widget.svelte",
    "content": "<script>\n\texport let things;\n</script>\n\n{#each things as thing (thing)}\n  <div></div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-keyed-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: true, things: ['a', 'b'] };\n\t},\n\n\ttest({ assert, component, target }) {\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-each-keyed-2/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let things;\n\n\timport Widget from './Widget.svelte';\n</script>\n\n{#if x}\n\t<Widget {things}/>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { x: false, y: true };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.x = true;\n\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\n\t\tcomponent.x = false;\n\t\tassert.htmlEqual(target.innerHTML, '<div></div>');\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-if/main.svelte",
    "content": "<script>\n\texport let x;\n\texport let y;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if x}\n\t{#if y}\n\t\t<div transition:foo|global></div>\n\t{/if}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-intro/Child.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tdelay: 50,\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<div transition:foo><slot></slot></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-intro/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\traf.tick(125);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(150);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-nested-intro/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\texport let visible;\n</script>\n\n{#if visible}\n\t<Child>delayed</Child>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-option-direction/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tcomponent.visible = true;\n\n\t\tconst div_in = /** @type {HTMLDivElement & { direction: string }} */ (\n\t\t\ttarget.querySelector('#in')\n\t\t);\n\t\tconst div_out = /** @type {HTMLDivElement & { direction: string }} */ (\n\t\t\ttarget.querySelector('#out')\n\t\t);\n\t\tconst div_both = /** @type {HTMLDivElement & { direction: string }} */ (\n\t\t\ttarget.querySelector('#both')\n\t\t);\n\n\t\tassert.equal(div_in.direction, 'in');\n\t\tassert.equal(div_out.direction, 'out');\n\t\tassert.equal(div_both.direction, 'both');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-option-direction/main.svelte",
    "content": "<script>\n\texport let visible = false;\n\n\tfunction foo(node, _params, options) {\n\t\tnode.direction = options.direction;\n\n\t\treturn {\n\t\t\tduration: 10\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div id=\"both\" transition:foo></div>\n\t<div id=\"in\" in:foo></div>\n{/if}\n\n{#if !visible}\n\t<div id=\"out\" out:foo></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-parameterised/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 100);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 200);\n\n\t\traf.tick(101);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-parameterised/main.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t * params.k;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div in:foo='{{k: 200}}'>fades in</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-parameterised-with-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { duration: 200 };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(0);\n\t\tassert.equal(div.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 100);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 200);\n\n\t\traf.tick(101);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-parameterised-with-state/main.svelte",
    "content": "<script>\n\texport let visible;\n\texport let duration;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t * params.k;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:foo='{{k: duration}}'>fades in</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot/Nested.svelte",
    "content": "<script>\n\texport let visible;\n</script>\n\n<div>\n\t{#if visible}\n\t\t<slot/>\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { visible: false };\n\t},\n\n\thtml: `\n\t\t<div></div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tcomponent.visible = true;\n\t\tconst p = /** @type {HTMLParagraphElement & { foo: number }} */ (target.querySelector('p'));\n\n\t\traf.tick(0);\n\t\tassert.equal(p.foo, 0);\n\n\t\traf.tick(50);\n\t\tassert.equal(p.foo, 0.5);\n\n\t\tcomponent.visible = false;\n\n\t\traf.tick(75);\n\t\tassert.equal(p.foo, 0.25);\n\n\t\traf.tick(100);\n\t\tassert.equal(p.foo, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let visible;\n\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<Nested {visible}>\n\t<p transition:foo>slotted</p>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-2/Nested.svelte",
    "content": "<script>\n\texport let visible;\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot></slot>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// cancelled the transition halfway\nexport default test({\n\thtml: `\n\t\t<div>Foo</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>Bar</div>');\n\n\t\traf.tick(75);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-2/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\tlet name = 'Foo';\n\tlet visible = true;\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tname = 'Bar';\n\t}\n</script>\n\n<Nested {visible}>\n\t{name}\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-3/Nested.svelte",
    "content": "<script>\n\tlet visible = true;\n\tlet data = 'Foo';\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tdata = 'Bar';\n\t}\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot {data}></slot>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>Foo</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>Bar</div>');\n\n\t\traf.tick(75);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-3/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\tlet nested;\n\n\texport function show() {\n\t\tnested.show();\n\t}\n\texport function hide() {\n\t\tnested.hide();\n\t}\n</script>\n\n<Nested bind:this={nested} let:data>\n\t{data}\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-4-cancelled/Nested.svelte",
    "content": "<script>\n\texport let visible;\n\texport let slotProps;\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot {slotProps}></slot>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-4-cancelled/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// updated props in the middle of transitions\n// and cancelled the transition halfway\nexport default test({\n\thtml: `\n\t\t<div>outside Foo Foo Foo</div>\n\t\t<div>inside Foo Foo Foo</div>\n\t`,\n\tget props() {\n\t\treturn { props: 'Foo' };\n\t},\n\n\tasync test({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst [, div] = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Foo Bar</div>\n\t\t\t<div>inside Foo Foo Foo</div>\n\t\t`\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.props = 'Bar';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Foo Foo Foo</div>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Bar Bar Bar</div>\n\t\t`\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-4-cancelled/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\tlet visible = true;\n\tlet state = 'Foo';\n\tlet slotProps = 'Foo';\n\texport let props;\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tstate = 'Bar';\n\t\tslotProps = 'Bar';\n\t}\n</script>\n\n<div>outside {state} {props} {slotProps}</div>\n<Nested {visible} {slotProps} let:slotProps>\n\tinside {state} {props} {slotProps}\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-5-cancelled-overflow/Nested.svelte",
    "content": "<script>\n\texport let visible;\n\texport let slotProps;\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot {slotProps}></slot>\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-5-cancelled-overflow/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// updated props in the middle of transitions\n// and cancelled the transition halfway\n// + spreaded props + overflow context\n\nexport default test({\n\thtml: `\n\t\t<div>outside Foo Foo Foo</div>\n\t\t<div>inside Foo Foo Foo</div>\n\t\t0\n\t`,\n\tget props() {\n\t\treturn { props: 'Foo' };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst [, div] = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.props = 'Bar';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Foo Foo Foo</div>\n\t\t\t0\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Bar Bar Bar</div>\n\t\t\t0\n\t\t`\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-5-cancelled-overflow/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0, a12=0,a13=0,a14=0,a15=0,a16=0,a17=0,a18=0,a19=0,a20=0,a21=0, a22=0,a23=0,a24=0,a25=0,a26=0,a27=0,a28=0,a29=0,a30=0,a31=0,a32=0,a33=0;\n\n\tlet visible = true;\n\tlet state = 'Foo';\n\tlet slotProps = 'Foo';\n\texport let props;\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tstate = 'Bar';\n\t\tslotProps = 'Bar';\n\t}\n</script>\n\n<div>outside {state} {props} {slotProps}</div>\n\n<Nested {visible} {slotProps} let:slotProps>\n\tinside {state} {props} {slotProps}\n</Nested>\n\n{a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26+a27+a28+a29+a30+a31+a32+a33}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-6-spread-cancelled/Nested.svelte",
    "content": "<script>\n\texport let visible;\n\texport let slotProps;\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot {...slotProps}></slot>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-6-spread-cancelled/Nested2.svelte",
    "content": "<script>\n\texport let visible;\n\tlet slotProps = { slotProps: 'XXX' };\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot {...slotProps}></slot>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-6-spread-cancelled/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// updated props in the middle of transitions\n// and cancelled the transition halfway\n// with spreaded props\n\nexport default test({\n\thtml: `\n\t\t<div>outside Foo Foo Foo</div>\n\t\t<div>inside Foo Foo Foo</div>\n\t\t<div>inside Foo Foo XXX</div>\n\t`,\n\tget props() {\n\t\treturn { props: 'Foo' };\n\t},\n\n\ttest({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst [, div] = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.props = 'Bar';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Foo Foo Foo</div>\n\t\t\t<div>inside Foo Foo XXX</div>\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Bar Bar Bar</div>\n\t\t\t<div>inside Bar Bar XXX</div>\n\t\t`\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-6-spread-cancelled/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\timport Nested2 from './Nested2.svelte';\n\n\tlet visible = true;\n\tlet state = 'Foo';\n\tlet slotProps = { slotProps: 'Foo' };\n\texport let props;\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tstate = 'Bar';\n\t\tslotProps = { slotProps: 'Bar' };\n\t}\n</script>\n\n<div>outside {state} {props} {slotProps.slotProps}</div>\n<Nested {visible} {slotProps} let:slotProps>\n\tinside {state} {props} {slotProps}\n</Nested>\n<Nested2 {visible} let:slotProps>\n\tinside {state} {props} {slotProps}\n</Nested2>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-7-spread-cancelled-overflow/Nested.svelte",
    "content": "<script>\n\texport let visible;\n\texport let slotProps;\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot {...slotProps}></slot>\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-7-spread-cancelled-overflow/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// updated props in the middle of transitions\n// and cancelled the transition halfway\n// + spreaded props + overflow context\n\nexport default test({\n\thtml: `\n\t\t<div>outside Foo Foo Foo</div>\n\t\t<div>inside Foo Foo Foo</div>\n\t\t0\n\t`,\n\tget props() {\n\t\treturn { props: 'Foo' };\n\t},\n\n\tasync test({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst [, div] = /** @type {NodeListOf<HTMLDivElement & { foo: number }>} */ (\n\t\t\ttarget.querySelectorAll('div')\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tcomponent.props = 'Bar';\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Foo Foo Foo</div>\n\t\t\t0\n\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>outside Bar Bar Bar</div>\n\t\t\t<div>inside Bar Bar Bar</div>\n\t\t\t0\n\t\t`\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-7-spread-cancelled-overflow/main.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\n\texport let a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0, a12=0,a13=0,a14=0,a15=0,a16=0,a17=0,a18=0,a19=0,a20=0,a21=0, a22=0,a23=0,a24=0,a25=0,a26=0,a27=0,a28=0,a29=0,a30=0,a31=0,a32=0,a33=0;\n\n\tlet visible = true;\n\tlet state = 'Foo';\n\tlet slotProps = { slotProps: 'Foo' };\n\texport let props;\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tstate = 'Bar';\n\t\tslotProps = { slotProps: 'Bar' };\n\t}\n</script>\n\n<div>outside {state} {props} {slotProps.slotProps}</div>\n\n<Nested {visible} {slotProps} let:slotProps>\n\tinside {state} {props} {slotProps}\n</Nested>\n\n{a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26+a27+a28+a29+a30+a31+a32+a33}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-fallback/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>Foo</div>\n\t`,\n\n\ttest({ assert, component, target, raf }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.hide();\n\t\t});\n\t\tconst div = /** @type {HTMLDivElement & { foo: number }} */ (target.querySelector('div'));\n\n\t\traf.tick(50);\n\t\tassert.equal(div.foo, 0.5);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.show();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<div>Bar</div>');\n\n\t\traf.tick(75);\n\t\tassert.equal(div.foo, 0.75);\n\n\t\traf.tick(100);\n\t\tassert.equal(div.foo, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/transition-js-slot-fallback/main.svelte",
    "content": "<script>\n\tlet visible = true;\n\tlet data = 'Foo';\n\n\texport function show() {\n\t\tvisible = true;\n\t}\n\texport function hide() {\n\t\tvisible = false;\n\t\tdata = 'Bar';\n\t}\n\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: t => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if visible}\n\t<div transition:fade>\n\t\t<slot>{data}</slot>\n\t</div>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/unchanged-expression-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Hello world, what's up? this & that</p>\n\t\t<p>Hello world, what's up? this & that</p>\n\t\t<p>Hello world, what's up?<span></span> this & that</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/unchanged-expression-escape/main.svelte",
    "content": "<script>\n\tlet name = 'world';\n</script>\n\n<p>Hello {name}, what's up? this & that</p>\n<p>Hello world, what's up? this & that</p>\n<p>Hello {name}, what's up?<span /> this & that</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/unchanged-expression-xss/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: \"<p>&lt;b\\nstyle='color:\\nred;'&gt;RED?!?&lt;/b&gt;</p>\"\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/unchanged-expression-xss/main.svelte",
    "content": "<script>\n  const content = `<b style='color: red;'>RED?!?</b>`\n</script>\n\n<p>{content}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/value-attribute-isolated-update/_config.js",
    "content": "import { test, ok } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst input = target.querySelector('input[type=text]');\n\t\tconst button = target.querySelector('button');\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst checkbox = target.querySelector('input[type=checkbox]');\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(input);\n\t\tok(button);\n\t\tok(checkbox);\n\t\tok(textarea);\n\n\t\tflushSync(() => {\n\t\t\tinput.value = 'foo';\n\t\t\tcheckbox.click();\n\t\t\ttextarea.innerHTML = 'bar';\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.equal(input.value, 'foo');\n\t\tassert.equal(checkbox.checked, true);\n\t\tassert.equal(textarea.innerHTML, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/value-attribute-isolated-update/main.svelte",
    "content": "<script>\n\tlet count = 0;\n\tlet value = { value: \"\" };\n\tlet checked = { value: false };\n</script>\n\n<input type=\"text\" value={value.value} />\n\n<textarea value={value.value}></textarea>\n\n<input type=\"checkbox\" checked={checked.value} />\n\n<button on:click={()=>count++}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/variable-assigned-store-state/Test.svelte",
    "content": "<script>\n\texport let store;\n\n\tlet currentStore;\n\tfunction update(){\n\t\tcurrentStore = store\n\t}\n</script>\n\n<button on:click={update}></button>\n<p>{$currentStore}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/variable-assigned-store-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.equal(p?.innerHTML, '');\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.equal(p?.innerHTML, '1');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.equal(p?.innerHTML, '1');\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.equal(p?.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/variable-assigned-store-state/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store'\n\timport Test from './Test.svelte'\n\tlet counter = 1\n\tlet store = writable(counter)\n</script>\n\n<button on:click={() => store = writable(++counter)}></button>\n<Test {store} />"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/whitespace-each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { characters: ['a', 'b', 'c'] };\n\t},\n\n\ttest({ assert, target }) {\n\t\tassert.equal(target.textContent, 'abc');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/whitespace-each-block/main.svelte",
    "content": "<script>\n\texport let characters;\n</script>\n\n{#each characters as char}\n\t<span>{char} </span>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/whitespace-list/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { one: 'one', two: 'two', three: 'three' };\n\t},\n\n\thtml: `\n\t\t<ul>\n\t\t\t<li>one</li>\n\t\t\t<li>two</li>\n\t\t\t<li>three</li>\n\t\t</ul>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst ul = /** @type {HTMLElement} */ (target.querySelector('ul'));\n\n\t\tassert.equal(ul.childNodes.length, 5);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/whitespace-list/main.svelte",
    "content": "<script>\n\texport let one;\n\texport let two;\n\texport let three;\n</script>\n\n<ul>\n\t<li>{one}</li>\n\t<li>{two}</li>\n\t<li>{three}</li>\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/whitespace-normal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { name: 'world' };\n\t},\n\n\ttest({ assert, target }) {\n\t\tassert.equal(target.textContent, 'Hello world! How are you?');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/whitespace-normal/main.svelte",
    "content": "<script>\n\texport let name;\n</script>\n\n<h1>Hello <strong>{name}!</strong> <span>How are you?</span></h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-update/_config.js",
    "content": "import { test } from '../../test';\nimport { vi } from 'vitest';\n\n/** @type {Window['scrollTo']} */\nlet original_scrollTo;\n\nexport default test({\n\tbefore_test() {\n\t\tvi.useFakeTimers();\n\n\t\tObject.defineProperties(window, {\n\t\t\tpageYOffset: {\n\t\t\t\tvalue: 0,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true\n\t\t\t},\n\t\t\tpageXOffset: {\n\t\t\t\tvalue: 0,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true\n\t\t\t}\n\t\t});\n\t\toriginal_scrollTo = window.scrollTo;\n\n\t\t// @ts-ignore\n\t\twindow.scrollTo = (x, y) => {\n\t\t\twindow.scrollX = x;\n\t\t\twindow.pageYOffset = y;\n\t\t};\n\t},\n\n\tafter_test() {\n\t\tvi.useRealTimers();\n\t\twindow.scrollTo = original_scrollTo;\n\t},\n\n\tasync test({ assert, component, window }) {\n\t\tassert.equal(window.pageYOffset, 0);\n\n\t\t// clear the previous 'scrolling' state\n\t\tawait vi.runAllTimersAsync();\n\t\tcomponent.scrollY = 100;\n\n\t\tawait vi.runAllTimersAsync();\n\t\tassert.equal(window.pageYOffset, 100);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-update/main.svelte",
    "content": "<script>\n\texport let scrollY;\n</script>\n\n<svelte:window bind:scrollY/>\n\n<div style='width: 100%; height: 9999px;'></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-update-2/Child.svelte",
    "content": "<script>\n\tlet scrollY;\n</script>\n\n<svelte:window bind:scrollY/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-update-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {Window['scrollTo']} */\nlet original_scrollTo;\n\nexport default test({\n\tbefore_test() {\n\t\toriginal_scrollTo = window.scrollTo;\n\n\t\t// @ts-ignore\n\t\twindow.scrollTo = (x, y) => {\n\t\t\twindow.scrollX = x;\n\t\t\twindow.scrollY = y;\n\t\t};\n\t},\n\n\tafter_test() {\n\t\twindow.scrollTo = original_scrollTo;\n\t},\n\n\tasync test({ assert, component, window, target }) {\n\t\twindow.scrollTo(0, 500);\n\n\t\tconst button = target.querySelector('button');\n\t\tflushSync(() => button?.click());\n\n\t\tassert.equal(window.scrollY, 500);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-update-2/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet show = false;\n</script>\n\n<div style='width: 100%; height: 9999px;'></div>\n\n<button on:click={() => show = !show}>toggle</button>\n\n{#if show}\n\t<Child />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-binding-multiple-handlers/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<button>Click</button>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-binding-multiple-handlers/main.svelte",
    "content": "<script>\n\texport let width;\n\texport let height;\n</script>\n\n<svelte:window bind:innerWidth={width} bind:innerHeight={height}/>\n<button on:click={() => {}}>Click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-binding-resize/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<div>1024x768</div><div>1</div>',\n\n\tbefore_test() {\n\t\tObject.defineProperties(window, {\n\t\t\tinnerWidth: {\n\t\t\t\tvalue: 1024,\n\t\t\t\tconfigurable: true\n\t\t\t},\n\t\t\tinnerHeight: {\n\t\t\t\tvalue: 768,\n\t\t\t\tconfigurable: true\n\t\t\t},\n\t\t\tdevicePixelRatio: {\n\t\t\t\tvalue: 1,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t},\n\n\tmode: ['client', 'hydrate'],\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.Event('resize');\n\n\t\tObject.defineProperties(window, {\n\t\t\tinnerWidth: {\n\t\t\t\tvalue: 567,\n\t\t\t\tconfigurable: true\n\t\t\t},\n\t\t\tinnerHeight: {\n\t\t\t\tvalue: 456,\n\t\t\t\tconfigurable: true\n\t\t\t},\n\t\t\tdevicePixelRatio: {\n\t\t\t\tvalue: 2,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\n\t\twindow.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>567x456</div><div>2</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-binding-resize/main.svelte",
    "content": "<script>\n\texport let width;\n\texport let height;\n\texport let devicePixelRatio;\n</script>\n\n<svelte:window bind:innerWidth={width} bind:innerHeight={height} bind:devicePixelRatio={devicePixelRatio}/>\n\n<div>{width}x{height}</div>\n<div>{devicePixelRatio}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-binding-scroll-store/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {Window['scrollTo']} */\nlet original_scrollTo;\n\nexport default test({\n\tbefore_test() {\n\t\tObject.defineProperties(window, {\n\t\t\tscrollY: {\n\t\t\t\tvalue: 0,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\t\toriginal_scrollTo = window.scrollTo;\n\n\t\t// @ts-ignore\n\t\twindow.scrollTo = (x, y) => {};\n\t},\n\n\tafter_test() {\n\t\twindow.scrollTo = original_scrollTo;\n\t},\n\n\ttest({ assert, target, window }) {\n\t\tassert.equal(window.scrollY, 0);\n\n\t\tconst event = new window.Event('scroll');\n\t\tObject.defineProperties(window, {\n\t\t\tscrollY: {\n\t\t\t\tvalue: 234,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\n\t\twindow.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p style=\"position: fixed; top: 1em; left: 1em;\">scroll\\ny\\nis\\n234.\\n234\\n*\\n234\\n=\\n54756</p><div style=\"height: 9999px\"></div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-binding-scroll-store/main.svelte",
    "content": "<script>\n\timport { writable, derived } from 'svelte/store';\n\tconst y = writable(0);\n\tconst y_squared = derived(y, $y => $y * $y);\n</script>\n\n<svelte:window bind:scrollY={$y}/>\n\n<p style=\"position: fixed; top: 1em; left: 1em;\">\n\tscroll y is {$y}. {$y} * {$y} = {$y_squared}\n</p>\n\n<div style=\"height: 9999px\">\n\t\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-event/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<div>x</div>',\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.Event('resize');\n\n\t\tObject.defineProperties(window, {\n\t\t\tinnerWidth: {\n\t\t\t\tvalue: 567,\n\t\t\t\tconfigurable: true\n\t\t\t},\n\t\t\tinnerHeight: {\n\t\t\t\tvalue: 456,\n\t\t\t\tconfigurable: true\n\t\t\t}\n\t\t});\n\n\t\twindow.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div>567x456</div>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-event/main.svelte",
    "content": "<script>\n\texport let width;\n\texport let height;\n</script>\n\n<svelte:window on:resize={function () {\n\t// TODO for some reason this.innerWidth doesn't work as the this context is not the window object during test\n\twidth = window.innerWidth, height = window.innerHeight;\n}}/>\n\n<div>{width}x{height}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-event-context/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { foo: true };\n\t},\n\n\thtml: 'true',\n\n\tskip: /^v4/.test(process.version), // node 4 apparently does some dumb stuff\n\n\tasync test({ assert, component, target, window }) {\n\t\tconst event = new window.Event('click');\n\n\t\twindow.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(component.foo, false);\n\t\tassert.htmlEqual(target.innerHTML, 'false');\n\n\t\twindow.dispatchEvent(event);\n\t\tflushSync();\n\t\tassert.equal(component.foo, true);\n\t\tassert.htmlEqual(target.innerHTML, 'true');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-event-context/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<svelte:window on:click='{() => foo = !foo}'/>\n\n{foo}"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-event-custom/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<p>escaped: false</p>',\n\n\ttest({ assert, target, window }) {\n\t\tconst event = new window.KeyboardEvent('keydown', {\n\t\t\tkey: 'Escape'\n\t\t});\n\n\t\twindow.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>escaped: true</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/samples/window-event-custom/main.svelte",
    "content": "<script>\n\texport let escaped = false;\n\n\tfunction esc(node, callback) {\n\t\tfunction onKeyDown(event) {\n\t\t\tif (event.key === 'Escape') callback(event);\n\t\t}\n\t\tnode.addEventListener('keydown', onKeyDown);\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tnode.removeEventListener('keydown', onKeyDown);\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<svelte:window use:esc=\"{() => escaped = true}\" />\n\n<p>escaped: {escaped}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/shared.ts",
    "content": "import * as fs from 'node:fs';\nimport { setImmediate } from 'node:timers/promises';\nimport { globSync } from 'tinyglobby';\nimport { createClassComponent } from 'svelte/legacy';\nimport { proxy } from 'svelte/internal/client';\nimport { flushSync, hydrate, mount, unmount } from 'svelte';\nimport { render } from 'svelte/server';\nimport { afterAll, assert, beforeAll, beforeEach } from 'vitest';\nimport { async_mode, compile_directory, fragments } from '../helpers.js';\nimport { assert_html_equal, assert_html_equal_with_options } from '../html_equal.js';\nimport { raf } from '../animation-helpers.js';\nimport type { CompileOptions } from '#compiler';\nimport { suite_with_variants, type BaseTest } from '../suite.js';\nimport { clear } from '../../src/internal/client/reactivity/batch.js';\nimport { hydrating } from '../../src/internal/client/dom/hydration.js';\nimport { ssr_context } from '../../src/internal/server/context.js';\n\ntype Assert = typeof import('vitest').assert & {\n\thtmlEqual(a: string, b: string, description?: string): void;\n\thtmlEqualWithOptions(\n\t\ta: string,\n\t\tb: string,\n\t\topts: {\n\t\t\tpreserveComments: boolean;\n\t\t\twithoutNormalizeHtml: boolean;\n\t\t},\n\t\tdescription?: string\n\t): void;\n};\n\n// TODO remove this shim when we can\n// @ts-expect-error\nPromise.withResolvers = () => {\n\tlet resolve;\n\tlet reject;\n\n\tconst promise = new Promise((f, r) => {\n\t\tresolve = f;\n\t\treject = r;\n\t});\n\n\treturn { promise, resolve, reject };\n};\n\nexport interface RuntimeTest<Props extends Record<string, any> = Record<string, any>>\n\textends BaseTest {\n\t/** Use e.g. `mode: ['client']` to indicate that this test should never run in server/hydrate modes */\n\tmode?: Array<'server' | 'async-server' | 'client' | 'hydrate'>;\n\t/** Temporarily skip specific modes, without skipping the entire test */\n\tskip_mode?: Array<'server' | 'async-server' | 'client' | 'hydrate'>;\n\t/** Skip if running with process.env.SVELTE_NO_ASYNC */\n\tskip_no_async?: boolean;\n\t/** Skip if running without process.env.SVELTE_NO_ASYNC */\n\tskip_async?: boolean;\n\thtml?: string;\n\tssrHtml?: string;\n\tcompileOptions?: Partial<CompileOptions>;\n\tprops?: Props;\n\tserver_props?: Props;\n\tid_prefix?: string;\n\tbefore_test?: () => void;\n\tafter_test?: () => void;\n\ttest?: (args: {\n\t\tvariant: 'dom' | 'hydrate';\n\t\tassert: Assert;\n\t\tcompileOptions: CompileOptions;\n\t\tcomponent: Props & {\n\t\t\t[key: string]: any;\n\t\t};\n\t\tinstance: Record<string, any>;\n\t\tmod: any;\n\t\tok: typeof ok;\n\t\traf: {\n\t\t\ttick: (ms: number) => void;\n\t\t};\n\t\ttarget: HTMLElement;\n\t\twindow: Window & {\n\t\t\tEvent: typeof Event;\n\t\t\tInputEvent: typeof InputEvent;\n\t\t\tKeyboardEvent: typeof KeyboardEvent;\n\t\t\tMouseEvent: typeof MouseEvent;\n\t\t};\n\t\tlogs: any[];\n\t\twarnings: any[];\n\t\terrors: any[];\n\t\thydrate: Function;\n\t}) => void | Promise<void>;\n\ttest_ssr?: (args: {\n\t\tlogs: any[];\n\t\twarnings: any[];\n\t\tassert: Assert;\n\t\tvariant: 'ssr' | 'async-ssr';\n\t}) => void | Promise<void>;\n\taccessors?: boolean;\n\timmutable?: boolean;\n\tintro?: boolean;\n\tload_compiled?: boolean;\n\terror?: string;\n\truntime_error?: string;\n\twarnings?: string[];\n\terrors?: string[];\n\texpect_unhandled_rejections?: boolean;\n\twithoutNormalizeHtml?: boolean | 'only-strip-comments';\n\trecover?: boolean;\n\ttransformError?: (error: unknown) => unknown;\n}\n\ndeclare global {\n\tvar __svelte:\n\t\t| {\n\t\t\t\th?: Map<string, unknown>;\n\t\t  }\n\t\t| undefined;\n}\n\nlet unhandled_rejection: Error | null = null;\n\nfunction unhandled_rejection_handler(err: Error) {\n\tunhandled_rejection = err;\n}\n\nconst listeners = process.rawListeners('unhandledRejection');\n\nbeforeAll(() => {\n\t// @ts-expect-error TODO huh?\n\tprocess.prependListener('unhandledRejection', unhandled_rejection_handler);\n});\n\nbeforeEach(() => {\n\tdelete globalThis?.__svelte?.h;\n});\n\nafterAll(() => {\n\tprocess.removeListener('unhandledRejection', unhandled_rejection_handler);\n});\n\n// eslint-disable-next-line no-console\nlet console_log = console.log;\n\n// eslint-disable-next-line no-console\nlet console_warn = console.warn;\n\n// eslint-disable-next-line no-console\nlet console_error = console.error;\n\nexport function runtime_suite(runes: boolean) {\n\treturn suite_with_variants<RuntimeTest, 'hydrate' | 'ssr' | 'async-ssr' | 'dom', CompileOptions>(\n\t\t['dom', 'hydrate', 'ssr', 'async-ssr'],\n\t\t(variant, config, test_name) => {\n\t\t\tif (!async_mode && (config.skip_no_async || test_name.startsWith('async-'))) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (async_mode && config.skip_async) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (variant === 'hydrate') {\n\t\t\t\tif (config.mode && !config.mode.includes('hydrate')) return 'no-test';\n\t\t\t\tif (config.skip_mode?.includes('hydrate')) return true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tvariant === 'dom' &&\n\t\t\t\t(config.skip_mode?.includes('client') || (config.mode && !config.mode.includes('client')))\n\t\t\t) {\n\t\t\t\treturn 'no-test';\n\t\t\t}\n\n\t\t\tif (variant === 'ssr') {\n\t\t\t\tif (\n\t\t\t\t\t(config.mode && !config.mode.includes('server')) ||\n\t\t\t\t\t(!config.test_ssr &&\n\t\t\t\t\t\tconfig.html === undefined &&\n\t\t\t\t\t\tconfig.ssrHtml === undefined &&\n\t\t\t\t\t\tconfig.error === undefined &&\n\t\t\t\t\t\tconfig.runtime_error === undefined &&\n\t\t\t\t\t\t!config.mode?.includes('server'))\n\t\t\t\t) {\n\t\t\t\t\treturn 'no-test';\n\t\t\t\t}\n\t\t\t\tif (config.skip_mode?.includes('server')) return true;\n\t\t\t}\n\n\t\t\tif (variant === 'async-ssr') {\n\t\t\t\tif (!runes || !async_mode) return 'no-test';\n\t\t\t\tif (\n\t\t\t\t\t(config.mode && !config.mode.includes('async-server')) ||\n\t\t\t\t\t(!config.test_ssr &&\n\t\t\t\t\t\tconfig.html === undefined &&\n\t\t\t\t\t\tconfig.ssrHtml === undefined &&\n\t\t\t\t\t\tconfig.error === undefined &&\n\t\t\t\t\t\tconfig.runtime_error === undefined &&\n\t\t\t\t\t\t!config.mode?.includes('async-server'))\n\t\t\t\t) {\n\t\t\t\t\treturn 'no-test';\n\t\t\t\t}\n\t\t\t\tif (config.skip_mode?.includes('async-server')) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\t(config, cwd) => {\n\t\t\treturn common_setup(cwd, runes, config);\n\t\t},\n\t\tasync (config, cwd, variant, common) => {\n\t\t\tawait run_test_variant(cwd, config, variant, common, runes);\n\t\t}\n\t);\n}\n\nasync function common_setup(cwd: string, runes: boolean | undefined, config: RuntimeTest) {\n\tconst force_hmr = process.env.HMR && config.compileOptions?.dev !== false && !config.error;\n\n\tconst compileOptions: CompileOptions = {\n\t\tgenerate: 'client',\n\t\trootDir: cwd,\n\t\tdev: force_hmr ? true : undefined,\n\t\thmr: force_hmr ? true : undefined,\n\t\texperimental: {\n\t\t\tasync: runes && async_mode\n\t\t},\n\t\tfragments,\n\t\t...config.compileOptions,\n\t\timmutable: config.immutable,\n\t\taccessors: 'accessors' in config ? config.accessors : true,\n\t\trunes:\n\t\t\tconfig.compileOptions && 'runes' in config.compileOptions\n\t\t\t\t? config.compileOptions.runes\n\t\t\t\t: runes\n\t};\n\n\t// load_compiled can be used for debugging a test. It means the compiler will not run on the input\n\t// so you can manipulate the output manually to see what fixes it, adding console.logs etc.\n\tif (!config.load_compiled) {\n\t\tawait compile_directory(cwd, 'client', compileOptions);\n\t\tawait compile_directory(cwd, 'server', compileOptions);\n\t}\n\n\treturn compileOptions;\n}\n\nasync function run_test_variant(\n\tcwd: string,\n\tconfig: RuntimeTest,\n\tvariant: 'dom' | 'hydrate' | 'ssr' | 'async-ssr',\n\tcompileOptions: CompileOptions,\n\trunes: boolean\n) {\n\tlet unintended_error = false;\n\n\tlet logs: string[] = [];\n\tlet warnings: string[] = [];\n\tlet errors: string[] = [];\n\tlet manual_hydrate = false;\n\n\t{\n\t\t// use some crude static analysis to determine if logs/warnings are intercepted.\n\t\t// we do this instead of using getters on the `test` parameters so that we can\n\t\t// squelch logs in SSR tests while printing temporary logs in other cases\n\t\tlet str = config.test?.toString() ?? '';\n\t\tlet n = 0;\n\t\tlet i = 0;\n\t\twhile (i < str.length) {\n\t\t\tif (str[i] === '(') n++;\n\t\t\tif (str[i] === ')' && --n === 0) break;\n\t\t\ti++;\n\t\t}\n\n\t\tlet ssr_str = config.test_ssr?.toString() ?? '';\n\t\tlet sn = 0;\n\t\tlet si = 0;\n\t\twhile (si < ssr_str.length) {\n\t\t\tif (ssr_str[si] === '(') sn++;\n\t\t\tif (ssr_str[si] === ')' && --sn === 0) break;\n\t\t\tsi++;\n\t\t}\n\n\t\tif (str.slice(0, i).includes('logs') || ssr_str.slice(0, si).includes('logs')) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log = (...args) => {\n\t\t\t\tlogs.push(...args);\n\t\t\t};\n\t\t}\n\n\t\tif (str.slice(0, i).includes('hydrate')) {\n\t\t\tmanual_hydrate = true;\n\t\t}\n\n\t\tif (\n\t\t\tstr.slice(0, i).includes('warnings') ||\n\t\t\tconfig.warnings ||\n\t\t\tssr_str.slice(0, si).includes('warnings')\n\t\t) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn = (...args) => {\n\t\t\t\tif (typeof args[0] === 'string' && args[0].startsWith('%c[svelte]')) {\n\t\t\t\t\t// TODO convert this to structured data, for more robust comparison?\n\n\t\t\t\t\tlet message = args[0];\n\t\t\t\t\tmessage = message.slice(message.indexOf('%c', 2) + 2);\n\n\t\t\t\t\t// Remove the \"https://svelte.dev/e/...\" link at the end\n\t\t\t\t\tconst lines = message.split('\\n');\n\t\t\t\t\tif (lines.at(-1)?.startsWith('https://svelte.dev/e/')) {\n\t\t\t\t\t\tlines.pop();\n\t\t\t\t\t}\n\t\t\t\t\tmessage = lines.join('\\n');\n\n\t\t\t\t\twarnings.push(message);\n\t\t\t\t} else {\n\t\t\t\t\twarnings.push(...args);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (str.slice(0, i).includes('errors') || config.errors) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error = (...args) => {\n\t\t\t\terrors.push(...args);\n\t\t\t};\n\t\t}\n\t}\n\n\ttry {\n\t\tunhandled_rejection = null;\n\n\t\tif (config.expect_unhandled_rejections) {\n\t\t\tlisteners.forEach((listener) => {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tprocess.removeListener('unhandledRejection', listener);\n\t\t\t});\n\t\t}\n\n\t\t// hack to support transition tests\n\t\traf.reset();\n\n\t\t// Put things we need on window for testing\n\t\tconst styles = globSync('**/*.css', { cwd: `${cwd}/_output/client` })\n\t\t\t.map((file) => fs.readFileSync(`${cwd}/_output/client/${file}`, 'utf-8'))\n\t\t\t.join('\\n')\n\t\t\t.replace(/\\/\\*<\\/?style>\\*\\//g, '');\n\n\t\twindow.location.href = '';\n\t\twindow.document.title = '';\n\t\twindow.document.head.innerHTML = styles ? `<style>${styles}</style>` : '';\n\t\twindow.document.body.innerHTML = '<main></main>';\n\n\t\twindow.addEventListener('error', (e) => {\n\t\t\tunhandled_rejection = e.error;\n\t\t\te.preventDefault();\n\t\t});\n\n\t\tglobalThis.requestAnimationFrame = globalThis.setTimeout;\n\n\t\tlet mod = await import(`${cwd}/_output/client/main.svelte.js`);\n\n\t\tconst target = window.document.querySelector('main') as HTMLElement;\n\n\t\tlet snapshot = undefined;\n\n\t\tif (variant === 'hydrate' || variant === 'ssr' || variant === 'async-ssr') {\n\t\t\tif (ssr_context !== null) {\n\t\t\t\tthrow new Error('ssr_context was not cleared');\n\t\t\t}\n\n\t\t\tconfig.before_test?.();\n\t\t\t// ssr into target\n\t\t\tconst SsrSvelteComponent = (await import(`${cwd}/_output/server/main.svelte.js`)).default;\n\t\t\tconst render_result = render(SsrSvelteComponent, {\n\t\t\t\tprops: config.server_props ?? config.props ?? {},\n\t\t\t\tidPrefix: config.id_prefix,\n\t\t\t\ttransformError: config.transformError\n\t\t\t});\n\t\t\tconst rendered =\n\t\t\t\tvariant === 'async-ssr' || (variant === 'hydrate' && compileOptions.experimental?.async)\n\t\t\t\t\t? await render_result\n\t\t\t\t\t: render_result;\n\t\t\tconst { body, head } = rendered;\n\n\t\t\tconst prefix = variant === 'async-ssr' ? 'async_' : '';\n\t\t\tfs.writeFileSync(`${cwd}/_output/${prefix}rendered.html`, body);\n\t\t\ttarget.innerHTML = body;\n\n\t\t\tif (head) {\n\t\t\t\tfs.writeFileSync(`${cwd}/_output/${prefix}rendered_head.html`, head);\n\t\t\t\twindow.document.head.innerHTML = window.document.head.innerHTML + head;\n\t\t\t}\n\n\t\t\tif (variant === 'hydrate') {\n\t\t\t\t// @ts-expect-error TODO\n\t\t\t\tif (config.snapshot) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tsnapshot = config.snapshot(target);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ssr_context !== null) {\n\t\t\t\tthrow new Error('ssr_context was not cleared');\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.innerHTML = '';\n\t\t}\n\n\t\tif (variant === 'ssr' || variant === 'async-ssr') {\n\t\t\tif (config.ssrHtml) {\n\t\t\t\tassert_html_equal_with_options(target.innerHTML, config.ssrHtml, {\n\t\t\t\t\tpreserveComments:\n\t\t\t\t\t\tconfig.withoutNormalizeHtml === 'only-strip-comments' ? false : undefined,\n\t\t\t\t\twithoutNormalizeHtml: !!config.withoutNormalizeHtml\n\t\t\t\t});\n\t\t\t} else if (config.html) {\n\t\t\t\tassert_html_equal_with_options(target.innerHTML, config.html, {\n\t\t\t\t\tpreserveComments:\n\t\t\t\t\t\tconfig.withoutNormalizeHtml === 'only-strip-comments' ? false : undefined,\n\t\t\t\t\twithoutNormalizeHtml: !!config.withoutNormalizeHtml\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (config.test_ssr) {\n\t\t\t\tawait config.test_ssr({\n\t\t\t\t\tlogs,\n\t\t\t\t\twarnings,\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tassert: {\n\t\t\t\t\t\t...assert,\n\t\t\t\t\t\thtmlEqual: assert_html_equal,\n\t\t\t\t\t\thtmlEqualWithOptions: assert_html_equal_with_options\n\t\t\t\t\t},\n\t\t\t\t\tvariant\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tlogs.length = warnings.length = 0;\n\n\t\t\tconfig.before_test?.();\n\n\t\t\tlet instance: any;\n\t\t\tlet props: any;\n\t\t\tlet hydrate_fn: Function = () => {\n\t\t\t\tthrow new Error('Ensure dom mode is skipped');\n\t\t\t};\n\n\t\t\tconst run_hydratables_init = () => {\n\t\t\t\tif (variant !== 'hydrate') return;\n\t\t\t\tconst script = [...document.head.querySelectorAll('script').values()].find((script) =>\n\t\t\t\t\tscript.textContent?.includes('window.__svelte ??= {}')\n\t\t\t\t)?.textContent;\n\t\t\t\tif (!script) return;\n\t\t\t\t(0, eval)(script);\n\t\t\t};\n\n\t\t\tif (runes) {\n\t\t\t\tprops = proxy({ ...(config.props || {}) });\n\n\t\t\t\t// @ts-expect-error\n\t\t\t\tglobalThis.__svelte.uid = 1;\n\n\t\t\t\tif (manual_hydrate && variant === 'hydrate') {\n\t\t\t\t\thydrate_fn = () => {\n\t\t\t\t\t\trun_hydratables_init();\n\t\t\t\t\t\tinstance = hydrate(mod.default, {\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\tprops,\n\t\t\t\t\t\t\tintro: config.intro,\n\t\t\t\t\t\t\trecover: config.recover ?? false\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\trun_hydratables_init();\n\t\t\t\t\tconst render = variant === 'hydrate' ? hydrate : mount;\n\t\t\t\t\tinstance = render(mod.default, {\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tprops,\n\t\t\t\t\t\tintro: config.intro,\n\t\t\t\t\t\trecover: config.recover ?? false,\n\t\t\t\t\t\ttransformError: config.transformError\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trun_hydratables_init();\n\t\t\t\tinstance = createClassComponent({\n\t\t\t\t\tcomponent: mod.default,\n\t\t\t\t\tprops: config.props,\n\t\t\t\t\ttarget,\n\t\t\t\t\tintro: config.intro,\n\t\t\t\t\trecover: config.recover ?? false,\n\t\t\t\t\thydrate: variant === 'hydrate'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (config.error) {\n\t\t\t\tunintended_error = true;\n\t\t\t\tassert.fail('Expected a runtime error');\n\t\t\t}\n\n\t\t\tif (config.html) {\n\t\t\t\tflushSync();\n\t\t\t\tassert_html_equal_with_options(target.innerHTML, config.html, {\n\t\t\t\t\tpreserveComments:\n\t\t\t\t\t\tconfig.withoutNormalizeHtml === 'only-strip-comments' ? false : undefined,\n\t\t\t\t\twithoutNormalizeHtml: !!config.withoutNormalizeHtml\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (config.test) {\n\t\t\t\t\tflushSync();\n\n\t\t\t\t\tif (variant === 'hydrate' && cwd.includes('async-')) {\n\t\t\t\t\t\t// wait for pending boundaries to render\n\t\t\t\t\t\tawait Promise.resolve();\n\t\t\t\t\t}\n\n\t\t\t\t\tawait config.test({\n\t\t\t\t\t\t// @ts-expect-error TS doesn't get it\n\t\t\t\t\t\tassert: {\n\t\t\t\t\t\t\t...assert,\n\t\t\t\t\t\t\thtmlEqual: assert_html_equal,\n\t\t\t\t\t\t\thtmlEqualWithOptions: assert_html_equal_with_options\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\tcomponent: runes ? props : instance,\n\t\t\t\t\t\tinstance,\n\t\t\t\t\t\tmod,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tsnapshot,\n\t\t\t\t\t\twindow,\n\t\t\t\t\t\traf,\n\t\t\t\t\t\tcompileOptions,\n\t\t\t\t\t\tlogs,\n\t\t\t\t\t\twarnings,\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\thydrate: hydrate_fn\n\t\t\t\t\t});\n\n\t\t\t\t\tflushSync();\n\t\t\t\t}\n\n\t\t\t\tif (config.runtime_error && !unhandled_rejection) {\n\t\t\t\t\tunintended_error = true;\n\t\t\t\t\tassert.fail('Expected a runtime error');\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (runes) {\n\t\t\t\t\tunmount(instance);\n\t\t\t\t} else {\n\t\t\t\t\tinstance.$destroy();\n\t\t\t\t}\n\n\t\t\t\tif (config.warnings) {\n\t\t\t\t\tassert.deepEqual(warnings, config.warnings);\n\t\t\t\t} else if (warnings.length && console.warn === console_warn) {\n\t\t\t\t\tunintended_error = true;\n\t\t\t\t\tconsole_warn.apply(console, warnings);\n\t\t\t\t\tassert.fail('Received unexpected warnings');\n\t\t\t\t}\n\n\t\t\t\tif (config.errors) {\n\t\t\t\t\tassert.deepEqual(errors, config.errors);\n\t\t\t\t} else if (errors.length && console.error === console_error) {\n\t\t\t\t\tunintended_error = true;\n\t\t\t\t\tconsole_error.apply(console, errors);\n\t\t\t\t\tassert.fail('Received unexpected errors');\n\t\t\t\t}\n\n\t\t\t\tassert_html_equal(\n\t\t\t\t\ttarget.innerHTML,\n\t\t\t\t\t'',\n\t\t\t\t\t'Expected component to unmount and leave nothing behind after it was destroyed'\n\t\t\t\t);\n\n\t\t\t\t// uncaught errors like during template effects flush\n\t\t\t\tif (unhandled_rejection) {\n\t\t\t\t\tif (!config.expect_unhandled_rejections) {\n\t\t\t\t\t\tthrow unhandled_rejection; // eslint-disable-line no-unsafe-finally\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\tif (config.runtime_error) {\n\t\t\tassert.include((err as Error).message, config.runtime_error);\n\t\t} else if (config.error && !unintended_error) {\n\t\t\tassert.include((err as Error).message, config.error);\n\t\t} else {\n\t\t\tthrow err;\n\t\t}\n\t} finally {\n\t\tif (hydrating) {\n\t\t\tthrow new Error('Hydration state was not cleared');\n\t\t}\n\n\t\tconfig.after_test?.();\n\n\t\t// Free up the microtask queue\n\t\t// 1. Vitest's test runner which uses setInterval can log progress\n\t\t// 2. Any expected unhandled rejections are ran before we reattach the listeners\n\t\tawait setImmediate();\n\n\t\tif (config.expect_unhandled_rejections) {\n\t\t\tlisteners.forEach((listener) => {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tprocess.on('unhandledRejection', listener);\n\t\t\t});\n\t\t}\n\n\t\tconsole.log = console_log;\n\t\tconsole.warn = console_warn;\n\t\tconsole.error = console_error;\n\n\t\tclear();\n\t}\n}\n\nexport function ok(value: any): asserts value {\n\tif (!value) {\n\t\tthrow new Error(`Expected truthy value, got ${value}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-legacy/test.ts",
    "content": "// @vitest-environment jsdom\nimport { runtime_suite, ok } from './shared.js';\n\ndeclare global {\n\tinterface Element {\n\t\tinert: boolean;\n\t}\n}\n\nconst { test, run } = runtime_suite(false);\n\nexport { test, ok };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/keyed-each-unique/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tlet button = target.querySelector('button');\n\n\t\tbutton?.click();\n\n\t\tassert.throws(flushSync, 'https://svelte.dev/e/each_key_duplicate');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/keyed-each-unique/main.svelte",
    "content": "<script>\n\tlet data = $state([1, 2, 3, 4, 5]);\n</script>\n\n<button onclick={() => data = [1, 1, 3, 1]}>add</button>\n{#each data as d (d)}\n\t{d}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/keyed-each-unique-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tlet button = target.querySelector('button');\n\n\t\tbutton?.click();\n\n\t\tassert.throws(flushSync, 'https://svelte.dev/e/each_key_duplicate');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/keyed-each-unique-2/main.svelte",
    "content": "<script>\n\tlet data = $state([1, 2, 3]);\n</script>\n\n<button onclick={() => data = [1, 1, 1]}>add</button>\n{#each data as d (d)}\n\t{d}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/keyed-each-unique-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'each_key_duplicate'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/keyed-each-unique-3/main.svelte",
    "content": "<script>\n\tlet data = [1, 1, 1];\n</script>\n\n{#each data as d (d)}\n\t{d}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/production/main.svelte",
    "content": "<script>\n    import { DEV } from \"esm-env\";\n\n    if (DEV) {\n        throw new Error(\"Dev-only code must not run\");\n    }\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/production-internals/Child.svelte",
    "content": "<script>\n\tlet { foo = $bindable(42) } = $props();\n</script>\n\n{foo};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/production-internals/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ target }) {\n\t\tlet button = target.querySelector('button');\n\n\t\tbutton?.click();\n\n\t\tflushSync();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/samples/production-internals/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n\n\tlet foo;\n\n\tfunction onerror(err) {\n\t\t// re-throw if it isn't the production error\n\t\t// do in a such way because config.error is checked via `includes`\n\t\tif (err.message !== 'https://svelte.dev/e/props_invalid_value') {\n\t\t\tthrow err;\n\t\t}\n\t}\n</script>\n\n<svelte:boundary {onerror}>\n\t<Child bind:foo />\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-production/test.ts",
    "content": "// @vitest-environment jsdom\n\nimport { vi } from 'vitest';\nimport { runtime_suite, ok } from '../runtime-legacy/shared';\n\nvi.mock('esm-env', async (importEnv) => {\n\treturn {\n\t\t...(await importEnv()),\n\t\tDEV: false\n\t};\n});\n\nconst { test, run } = runtime_suite(true);\n\nexport { test, ok };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/1000-reading-derived-effects/Component.svelte",
    "content": "<script>\n\tconst der = $derived(false);\n\n\t$effect(() => {\n\t\tder\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/1000-reading-derived-effects/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/1000-reading-derived-effects/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tconst arr = Array.from({length: 10001});\n</script>\n\n{#each arr}\n\t<Component />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/abort-signal-derived-set-state/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, errors }) {\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/abort-signal-derived-set-state/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { getAbortSignal } from \"svelte\";\n\n\tlet aborted = $state(0);\n\n\tlet count = $state(0);\n\n\tlet der = $derived.by(()=>{\n\t\tconst signal = getAbortSignal();\n\n\t\tsignal.addEventListener(\"abort\", () => {\n\t\t\ttry{\n\t\t\t\taborted++;\n\t\t\t}catch(e){\n\t\t\t\tconsole.error(e);\n\t\t\t}\n\t\t});\n\t\treturn count;\n\t})\n</script>\n\n{der}\n\n<button onclick={() => count++}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/accessors-props/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<p>0</p>`,\n\n\tasync test({ assert, target, instance }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tflushSync(() => {\n\t\t\tinstance.count++;\n\t\t});\n\t\tassert.equal(p.innerHTML, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/accessors-props/main.svelte",
    "content": "<script>\n\tlet { count=0 } = $props();\n\n\texport {\n\t\tcount\n\t}\n</script>\n\n<p>{count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-context/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.deepEqual(logs, ['update', 0, 1]);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.deepEqual(logs, ['update', 0, 1, 'destroy', 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-context/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t/**\n\t * @param {Element} _\n\t * @param {number} count\n\t */\n\tfunction action(_, count) {\n\t\treturn {\n\t\t\tcount,\n\t\t\t/** @param {number} count */\n\t\t\tupdate(count) {\n\t\t\t\tconsole.log('update', this.count, (this.count = count));\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tconsole.log('destroy', this.count);\n\t\t\t},\n\t\t}\n\t};\n</script>\n\n{#if count < 2}\n\t<button use:action={count} onclick={() => count++}>\n\t\t{count}\n\t</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-sequence/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['1', '2', '3', '4', '5', '6']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-sequence/main.svelte",
    "content": "<script>\n\tconst action = (element) => {\n\t\tconsole.log(element.id);\n\t};\n</script>\n\n<div use:action id=\"5\">\n\t<div use:action id=\"3\">\n\t\t<div use:action id=\"1\">\n\t\t</div>\n\t\t<div use:action id=\"2\">\n\t\t</div>\n\t</div>\n\t<div use:action id=\"4\">\n\t</div>\n</div>\n<div use:action id=\"6\">\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-state-arg/_config.js",
    "content": "import { test } from '../../test';\nimport { tick } from 'svelte';\n\nexport default test({\n\thtml: `<button>mutate</button><button>reassign</button><div>0</div>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>mutate</button><button>reassign</button><div>1</div>`\n\t\t);\n\n\t\tbtn2.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>mutate</button><button>reassign</button><div>2</div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-state-arg/main.svelte",
    "content": "<script>\n    let foo = $state({ count: 0 });\n    let count = $state(0);\n\n    function action() {\n        return {\n            update(foo) {\n                count = foo.count;\n            }\n        }\n    }\n</script>\n\n<button onclick={() => foo.count++}>mutate</button>\n<button onclick={() => foo = {...foo, count: foo.count + 1 }}>reassign</button>\n<div use:action={foo}>{count}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-state-arg-deep/Task.svelte",
    "content": "<script>\n  const { prop } = $props()\n\n  let trackedState = $state(0)\n  const getTrackedState = () => trackedState\n\n  function dummyAction(el, { getTrackedState, propFromComponent }) {\n    $effect(() => {\n      console.log(\"action $effect: \", { buttonClicked: getTrackedState() })\n    })\n  }\n</script>\n\n<div\n  class=\"container\"\n  use:dummyAction={{ getTrackedState, propFromComponent: prop }}\n>\n  {JSON.stringify(prop)}\n</div>\n\n<button\n  onclick={() => {\n    trackedState += 1\n  }}\n>\n  update tracked state\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-state-arg-deep/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<div class=\"container\">{\"text\":\"initial\"}</div><button>update tracked state</button><button>Update prop</button>`,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div class=\"container\">{\"text\":\"updated\"}</div><button>update tracked state</button><button>Update prop</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div class=\"container\">{\"text\":\"updated\"}</div><button>update tracked state</button><button>Update prop</button>`\n\t\t);\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'action $effect: ',\n\t\t\t{ buttonClicked: 0 },\n\t\t\t'action $effect: ',\n\t\t\t{ buttonClicked: 1 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-state-arg-deep/main.svelte",
    "content": "<script>\n  import Task from \"./Task.svelte\"\n\n  let task = $state({ text: \"initial\" })\n</script>\n\n<Task prop={task} />\n\n<button onclick={() => {\n  task = { text: \"updated\" }\n}}>\n  Update prop\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-void-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<input><input>`,\n\n\tasync test({ assert, target }) {\n\t\tconst inputs = target.querySelectorAll('input');\n\t\tassert.equal(inputs[0].value, 'set from action');\n\t\tassert.equal(inputs[1].value, 'set from action');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/action-void-element/main.svelte",
    "content": "<script>\n\t/** @param {HTMLInputElement} node */\n\tfunction action(node) {\n\t\tnode.value = 'set from action';\n\t}\n</script>\n\n<input use:action>\n<svelte:element this={'input'} use:action />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ambiguous-source/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0 / 0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1 / 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ambiguous-source/main.svelte",
    "content": "<script>\n  import { setup } from './utils.js';\n\n  let { num } = $state(setup());\n  let { num: num_frozen } = $state(setup());\n</script>\n\n<button on:click={() => { num++; num_frozen++; }}>{num} / {num_frozen}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ambiguous-source/utils.js",
    "content": "export function setup() {\n\treturn { num: 0 };\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-delete-item/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ target, assert, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\n\t\tassert.deepEqual(logs[0], [0, , 2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-delete-item/main.svelte",
    "content": "<script>\n\tconst arr = [0, 1, 2];\n</script>\n\n<button onclick={() => {\n\tdelete arr[1];\n\tconsole.log(arr);\n}}>del</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-lastindexof/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, logs }) {\n\t\tassert.equal(logs[0], logs[1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-lastindexof/main.svelte",
    "content": "<script>\n\tconst arr = [0, 1, 2];\n\tconsole.log(arr.lastIndexOf(2));\n\tconsole.log(arr.lastIndexOf(2, arr.length - 1));\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-sort-in-effect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t/**\n\t * Ensure that sorting an array inside an $effect works correctly\n\t * and re-runs when the array changes (e.g., when items are added).\n\t */\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\t// initial render — array should be sorted\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add item</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>50</p>\n\t\t\t\t<p>100</p>\n\t\t\t`\n\t\t);\n\n\t\t// add first item (20); effect should re-run and sort the array\n\t\tflushSync(() => button?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add item</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>20</p>\n\t\t\t\t<p>50</p>\n\t\t\t\t<p>100</p>\n\t\t\t`\n\t\t);\n\n\t\t// add second item (80); effect should re-run and sort the array\n\t\tflushSync(() => button?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add item</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>20</p>\n\t\t\t\t<p>50</p>\n\t\t\t\t<p>80</p>\n\t\t\t\t<p>100</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-sort-in-effect/main.svelte",
    "content": "<script>\n\tlet arr = $state([100, 0, 50]);\n\tlet nextValues = [20, 80];\n\tlet valueIndex = 0;\n\n\t$effect(() => {\n\t\tarr.sort((a, b) => a - b);\n\t});\n\n\tfunction addItem() {\n\t\tif (valueIndex < nextValues.length) {\n\t\t\tarr.push(nextValues[valueIndex]);\n\t\t\tvalueIndex++;\n\t\t}\n\t}\n</script>\n\n<button onclick={addItem}>add item</button>\n{#each arr as x}\n\t<p>{x}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-to-string/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>add</button><span>1,2,3,4</span>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/array-to-string/main.svelte",
    "content": "<script>\n\tlet array = $state([1, 2, 3]);\n\n\tfunction addToArray() {\n\t\tarray.push(array.length + 1);\n\t}\n</script>\n\n<button onclick={addToArray}>add</button>\n\n<span>{array}</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assign-prop-to-prop/Test.svelte",
    "content": "<script>\n\tlet z = 8;\n\tlet { a, b = a, c = b * b, d = z * b + c } = $props();\n</script>\n\n<p>{a}</p>\n<p>{b}</p>\n<p>{c}</p>\n<p>{d}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assign-prop-to-prop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>5</p><p>5</p><p>25</p><p>65</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assign-prop-to-prop/main.svelte",
    "content": "<script>\n\timport Test from './Test.svelte'\n</script>\n\n<Test a={5} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assignment-value-stale-lazy-rhs/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ assert, target }) {\n\t\tconst button = /** @type {HTMLElement} */ (target.querySelector('button'));\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>go</button><p>count1: 0, count2: 0</p>`);\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>go</button><p>count1: 1, count2: 1</p>`);\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>go</button><p>count1: 2, count2: 1</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assignment-value-stale-lazy-rhs/main.svelte",
    "content": "<script>\n\tlet count1 = $state(0);\n\tlet count2 = $state(0);\n\tlet cache = $state({});\n\n\tfunction go() {\n\t\tcount1++;\n\t\tconst value = cache.value ??= get_value();\n\t}\n\n\tfunction get_value() {\n\t\tcount2++;\n\t\treturn 42;\n\t}\n</script>\n\n<button onclick={go}>go</button>\n<p>count1: {count1}, count2: {count2}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assignment-value-stale-lazy-rhs-async/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ assert, target }) {\n\t\tconst button = /** @type {HTMLElement} */ (target.querySelector('button'));\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>go</button><p>count1: 0, count2: 0</p>`);\n\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>go</button><p>count1: 1, count2: 1</p>`);\n\n\t\t// additional tick necessary in legacy mode because it's using Promise.resolve() which finishes before the await in the component,\n\t\t// causing the cache to not be set yet, which would result in count2 becoming 2\n\t\tawait tick();\n\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>go</button><p>count1: 2, count2: 1</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/assignment-value-stale-lazy-rhs-async/main.svelte",
    "content": "<script>\n\tlet count1 = $state(0);\n\tlet count2 = $state(0);\n\tlet cache = $state({});\n\n\tasync function go() {\n\t\tcount1++;\n\t\tconst value = cache.value ??= await get_value();\n\t}\n\n\tfunction get_value() {\n\t\tcount2++;\n\t\treturn 42;\n\t}\n</script>\n\n<button onclick={go}>go</button>\n<p>count1: {count1}, count2: {count2}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-abort-signal/_config.js",
    "content": "import { settled, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [reset, resolve] = target.querySelectorAll('button');\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, ['aborted']);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-abort-signal/main.svelte",
    "content": "<script>\n\timport { getAbortSignal } from 'svelte';\n\n\tlet deferred = $state(Promise.withResolvers());\n\n\tfunction load(deferred) {\n\t\tconst signal = getAbortSignal();\n\n\t\treturn new Promise((fulfil, reject) => {\n\t\t\tsignal.onabort = (e) => {\n\t\t\t\tconsole.log('aborted');\n\t\t\t\treject(e.currentTarget.reason);\n\t\t\t};\n\n\t\t\tdeferred.promise.then(fulfil, reject);\n\t\t});\n\t}\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve('hello')}>resolve</button>\n\n<svelte:boundary>\n\t<h1>{await load(deferred)}</h1>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-action-blockers/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\tasync test({ assert, logs }) {\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['ready']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-action-blockers/main.svelte",
    "content": "<script>\n\n\t// Wait a macrotask to make sure the effect doesn't run before the microtask-Promise.resolve() resolves, masking a bug\n\tawait new Promise(r => setTimeout(r));\n\n\tfunction run(_, arg) {\n\t\tconsole.log(arg);\n\t}\n\n\tlet value = $state('ready');\n</script>\n\n<div use:run={value}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-blockers/Child.svelte",
    "content": "<script>\n    let props = $props();\n</script>\n\n<div {...props}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-blockers/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\tasync test({ assert, logs }) {\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['ready', 'ready']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-blockers/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n\n\t// Wait a macrotask to make sure the effect doesn't run before the microtask-Promise.resolve() resolves, masking a bug\n\tawait new Promise(r => setTimeout(r));\n\n\tfunction createAttachment(value) {\n\t\treturn () => {\n\t\t\tconsole.log(value);\n\t\t};\n\t}\n\n\tlet attachment = $state('ready');\n</script>\n\n<div {@attach createAttachment(attachment)}></div>\n<Child {@attach createAttachment(attachment)} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-hydration-mismatch/Inner.svelte",
    "content": "<script>\n  let { children } = $props()\n</script>\n<div>{@render children?.()}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-hydration-mismatch/Outer.svelte",
    "content": "<script>\n  let { children } = $props()\n</script>\n<div>{@render children?.()}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-hydration-mismatch/Trigger.svelte",
    "content": "<script lang='ts'>\n  import type { Attachment } from 'svelte/attachments'\n\n  export function action(): Attachment<HTMLElement> {\n    return ()=>{}\n  }\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-hydration-mismatch/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<div><div>foo</div></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attach-hydration-mismatch/main.svelte",
    "content": "<script>\n  import Outer from './Outer.svelte'\n  import Inner from './Inner.svelte'\n  import Trigger from './Trigger.svelte'\n\n  const data = $derived(await Promise.resolve(['a', 'b']))\n  let trigger = $state()\n</script>\n\n<Outer>\n  <Inner {@attach trigger?.action}>\n    foo\n  </Inner>\n</Outer>\n\n<Trigger bind:this={trigger} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attachment/Inner.svelte",
    "content": "<script>\n\tfunction renderContent(node) {\n\t\tnode.textContent = 'foo';\n\t}\n \n\tconst test = await Promise.resolve('foo');\n</script>\n\n<p>{test}</p>\n<div {@attach renderContent}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attachment/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button> <p>foo</p><div>foo</div>');\n\n\t\tconst [toggle] = target.querySelectorAll('button');\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button>');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button> <p>foo</p><div>foo</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attachment/main.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n\n\tlet show = $state(true);\n</script>\n\n<svelte:boundary>\n\t<button onclick={() => show = !show}>toggle</button>\n\t{#if show}\n\t\t<Inner />\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attachment-in-block/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<div>attachment ran</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attachment-in-block/main.svelte",
    "content": "{#if await true}\n\t<div\n\t\t{@attach (node) => {\n\t\t\tnode.textContent = 'attachment ran';\n\t\t}}\n\t>\n\t\tattachment did not run\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attribute/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>cool</button>\n\t\t<button>neat</button>\n\t\t<button>reset</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [cool, neat, reset] = target.querySelectorAll('button');\n\n\t\tcool.click();\n\t\tawait tick();\n\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tassert.htmlEqual(p.outerHTML, '<p class=\"cool\">hello</p>');\n\n\t\treset.click();\n\t\tassert.htmlEqual(p.outerHTML, '<p class=\"cool\">hello</p>');\n\n\t\tneat.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.outerHTML, '<p class=\"neat\">hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attribute/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred.resolve('cool')}>cool</button>\n<button onclick={() => deferred.resolve('neat')}>neat</button>\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n\n<svelte:boundary>\n\t<p class={await deferred.promise}>hello</p>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attribute-without-state/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p data-foo=\"bar\">hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-attribute-without-state/main.svelte",
    "content": "<svelte:boundary>\n\t<p data-foo={await 'bar'}>hello</p>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [reset, one, two, reject] = target.querySelectorAll('button');\n\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>reset</button><button>one</button><button>two</button><button>reject</button> waiting'\n\t\t);\n\n\t\tone.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>reset</button><button>one</button><button>two</button><button>reject</button> one_res'\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>reset</button><button>one</button><button>two</button><button>reject</button> waiting'\n\t\t);\n\n\t\ttwo.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>reset</button><button>one</button><button>two</button><button>reject</button> two_res'\n\t\t);\n\n\t\treset.click();\n\t\treject.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>reset</button><button>one</button><button>two</button><button>reject</button> reject_catch'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-await/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve(\"one\")}>one</button>\n<button onclick={() => deferred.resolve(\"two\")}>two</button>\n<button onclick={() => deferred.reject(\"reject\")}>reject</button>\n\n<svelte:boundary>\n\t{#await await deferred.promise + \"_res\"}\n\t\twaiting\n\t{:then res}\n\t\t{res}\n\t{:catch err}\n\t\t{err}_catch\n\t{/await}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-await-block/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>1</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-await-block/main.svelte",
    "content": "<script>\n    let foo = $derived(await 1);\n</script>\n\n{#await foo then x}\n    <p>{x}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-await-store-mutate/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n// ensure in-place object mutations stay reactive in async\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst button = /** @type {HTMLElement} */ (target.querySelector('button'));\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<p>count: 1, computed: 10</p><button>mutate</button>`);\n\n\t\tbutton.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<p>count: 2, computed: 20</p><button>mutate</button>`);\n\n\t\tbutton.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<p>count: 3, computed: 30</p><button>mutate</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-await-store-mutate/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst data = writable({ count: 1 });\n\n\tfunction mutate_count() {\n\t\tdata.update(d => {\n\t\t\td.count++;\n\t\t\treturn d;\n\t\t});\n\t}\n\n\tasync function compute(d) {\n\t\treturn Promise.resolve(d.count * 10);\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>count: {$data.count}, computed: {await compute($data)}</p>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n\n<button onclick={mutate_count}>mutate</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-batch-timing/Component.svelte",
    "content": "<script lang=\"ts\">\n\tlet { ref } = $props();\n\n\tlet tick = $state(0);\n\tlet ref_exists = $state(true);\n \n\t$effect(() => {\n\t\ttick;\n\t\tref_exists = ref !== null;\n\t});\n</script>\n\n<p>{ref_exists}</p>\n<button onclick={() => tick++}>check</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-batch-timing/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n// This test regresses against batches deactivating other batches than themselves\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick(); // settle initial await\n\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>div</div>\n\t\t\t\t<p>true</p>\n\t\t\t\t<button>check</button>\n\t\t\t\t<p></p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-batch-timing/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\tlet ref = $state(null);\n\n\tlet foo = $derived(await 1);\n</script>\n\n<div bind:this={ref}>div</div>\n\n<Component {ref} />\n\n{#if foo} \n\t<p></p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-bind-factory-function-remote/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: 'true true true true true',\n\n\tasync test({ assert, target }) {\n\t\tawait new Promise((resolve) => setTimeout(resolve, 10));\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, 'true true true true true');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-bind-factory-function-remote/main.svelte",
    "content": "<script>\n\tlet checked = $derived(await new Promise((r) => setTimeout(() => r(true)), 10));\n\n\tconst checkedFactory = () => {\n\t\treturn () => checked;\n\t}\n\n\tfunction indirectCheckedFactory() {\n\t\treturn checkedFactory();\n\t}\n\n\tfunction callFactory(factory) {\n\t\treturn factory();\n\t}\n\n\tfunction indirectCallFactory() {\n\t\treturn callFactory(indirectCheckedFactory);\n\t}\n\n\tfunction indirectChecked2() {\n\t\tconst indirect = () => checkedFactory()();\n\t\treturn indirect;\n\t}\n</script>\n\n<!-- force into separate effects -->\n{#if true}\n\t{checkedFactory()()}\n{/if}\n{#if true}\n\t{indirectCheckedFactory()()}\n{/if}\n{#if true}\n\t{callFactory(checkedFactory)()}\n{/if}\n{#if true}\n\t{indirectCallFactory()()}\n{/if}\n{#if true}\n\t{indirectChecked2()()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-bindable-prop/Child.svelte",
    "content": "<script>\n\tawait Promise.resolve();\n\tlet { value = $bindable(\"test\") } = $props();\n</script>\n\n<button onclick={() => value = 'updated'}>update</button>\n{value}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-bindable-prop/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: `\n\t\t<button>update</button> initial <p>initial</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>update</button>\n\t\t\t\tinitial\n\t\t\t\t<p>initial</p>\n\t\t\t`\n\t\t);\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>update</button>\n\t\t\t\tupdated\n\t\t\t\t<p>updated</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-bindable-prop/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet value = $state('initial');\n</script>\n\n<Child bind:value />\n<p>{value}</p>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-after-await/Child.svelte",
    "content": "<script>\n\tlet { value = $bindable() } = $props();\n</script>\n\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-after-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: 'value value <div>false</div> <input value=\"value\"> <input value=\"value\">',\n\n\tasync test({ assert, target, logs }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, 'value value <div>true</div> <input> <input>');\n\t\tassert.deepEqual(logs, [false, 'value', true, 'value']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-after-await/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\t\n\tawait Promise.resolve();\n\n\tlet ref = $state(null);\n\n\t$effect(() => console.log(!!ref, value))\n\n\tlet value = $state('value');\n</script>\n\n<Child bind:value />\n<Child bind:value={() => value, v => value = v} />\n<div bind:this={ref}>{!!ref}</div>\n<input bind:value />\n<input bind:value={() => value, v => value = v} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-update-while-focused/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tinput.focus();\n\t\tinput.value = '3';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.equal(input.value, '3');\n\t\tassert.htmlEqual(target.innerHTML, `<p>3</p> <input type=\"number\" />`);\n\n\t\tinput.focus();\n\t\tinput.value = '1';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.equal(input.value, '2');\n\t\tassert.htmlEqual(target.innerHTML, `<p>2</p> <input type=\"number\" />`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-update-while-focused/main.svelte",
    "content": "<script>\n\tlet value = $state(0)\n\tconst min = 2\n\tconst max = 5\n\n\t$effect(() => {\n\t\tsetValue()\n\t})\n\n\tfunction setValue() {\n\t\tif (value < min) {\n\t\t\tvalue = min\n\t\t}\n\t\tif (value > max) {\n\t\t\tvalue = max\n\t\t}\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{await value}</p>\n\t<input type=\"number\" bind:value />\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-update-while-focused-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [shift] = target.querySelectorAll('button');\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tinput.focus();\n\t\tinput.value = '1';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>shift</button><input type=\"number\" /> <p>0</p>`);\n\t\tassert.equal(input.value, '1');\n\n\t\tinput.focus();\n\t\tinput.value = '2';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>shift</button><input type=\"number\" /> <p>0</p>`);\n\t\tassert.equal(input.value, '2');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>shift</button><input type=\"number\" /> <p>1</p>`);\n\t\tassert.equal(input.value, '2');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>shift</button><input type=\"number\" /> <p>2</p>`);\n\t\tassert.equal(input.value, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-update-while-focused-2/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n\n\tlet resolvers = [];\n\tlet input;\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => {\n\tinput?.focus();\n\tresolvers.shift()?.();\n}}>shift</button>\n\n<svelte:boundary>\n\t<input bind:this={input} type=\"number\" bind:value={count} />\n\t<p>{await push(count)}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-update-while-focused-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [shift] = target.querySelectorAll('button');\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tconst [select] = target.querySelectorAll('select');\n\n\t\tselect.focus();\n\t\tselect.value = 'three';\n\t\tselect.dispatchEvent(new InputEvent('change', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<select>\n\t\t\t\t\t<option>one</option>\n\t\t\t\t\t<option>two</option>\n\t\t\t\t\t<option>three</option>\n\t\t\t\t</select>\n\t\t\t\t<p>two</p>\n\t\t\t`\n\t\t);\n\t\tassert.equal(select.value, 'three');\n\n\t\tselect.focus();\n\t\tselect.value = 'one';\n\t\tselect.dispatchEvent(new InputEvent('change', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<select>\n\t\t\t\t\t<option>one</option>\n\t\t\t\t\t<option>two</option>\n\t\t\t\t\t<option>three</option>\n\t\t\t\t</select>\n\t\t\t\t<p>two</p>\n\t\t\t`\n\t\t);\n\t\tassert.equal(select.value, 'one');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<select>\n\t\t\t\t\t<option>one</option>\n\t\t\t\t\t<option>two</option>\n\t\t\t\t\t<option>three</option>\n\t\t\t\t</select>\n\t\t\t\t<p>three</p>\n\t\t\t`\n\t\t);\n\t\tassert.equal(select.value, 'one');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<select>\n\t\t\t\t\t<option>one</option>\n\t\t\t\t\t<option>two</option>\n\t\t\t\t\t<option>three</option>\n\t\t\t\t</select>\n\t\t\t\t<p>one</p>\n\t\t\t`\n\t\t);\n\t\tassert.equal(select.value, 'one');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-binding-update-while-focused-3/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet selected = $state('two');\n\n\tlet resolvers = [];\n\tlet select;\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => {\n\tselect?.focus();\n\tresolvers.shift()?.();\n}}>shift</button>\n\n<svelte:boundary>\n\t<select bind:this={select} bind:value={selected}>\n\t\t<option>one</option>\n\t\t<option>two</option>\n\t\t<option>three</option>\n\t</select>\n\n\t<p>{await push(selected)}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-destroy-during-init/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>false</p>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-destroy-during-init/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tlet deferreds = [];\n\n\tfunction push() {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push(deferred);\n\t\treturn deferred.promise;\n\t}\n</script>\n\n<button onclick={() => count += 1}>increment</button>\n<button onclick={() => deferreds.shift()?.resolve(count)}>shift</button>\n\n<svelte:boundary>\n\t{#if count % 2 === 0}\n\t\t<p>true</p>\n\t\t<p>{await push()}</p>\n\t{:else}\n\t\t<p>false</p>\n\t\t<p>{await push()}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-effect-queueing/A.svelte",
    "content": "<script>\n\tlet open = $state(false);\n\tlet menuOptionsEl = $state(null);\n</script>\n\n<button onclick={() => open = !open}>\n\ttoggle\n\n\t\t{#if open}\n\t\t\t<!-- bind:this uses effect, which is scheduled, causing queued_root_effects to be filled again -->\n\t\t\t<span bind:this={menuOptionsEl}>\n\t\t\t\tA\n\t\t\t</span>\n\t\t{/if}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-effect-queueing/B.svelte",
    "content": "B"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-effect-queueing/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [fork, commit, toggle] = target.querySelectorAll('button');\n\n\t\tfork.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<button>toggle</button>\n\t\t`\n\t\t);\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<button>toggle <span>A</span></button>\n\t\t`\n\t\t);\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<button>toggle</button>\n\t\t`\n\t\t);\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<button>toggle <span>A</span></button>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\tB\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-effect-queueing/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { fork } from 'svelte';\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\tlet open = $state(true);\n\tlet f;\n</script>\n\n\n<button onclick={() => {\n\tf = fork(() => {\n\t\topen = !open;\n\t})\n}}>fork</button>\n<button onclick={() => {\n\tf.commit()\n}}>commit</button>\n\n{#if open}\n\t<A />\n{:else}\n\t<B />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-reject-during-init/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, 'loading');\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'nope');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-reject-during-init/main.svelte",
    "content": "<svelte:boundary>\n\t{#if await Promise.reject(new Error('nope'))}\n\t\thi\n\t{/if}\n\n\t{#snippet pending()}loading{/snippet}\n\t{#snippet failed(e)}{e.message}{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-reject-each-during-init/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [increment, resolve, reject] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\treject.click();\n\t\tawait tick();\n\n\t\tresolve.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<button>reject</button>\n\t\t\t\t<p>false</p>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\t},\n\n\texpect_unhandled_rejections: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-reject-each-during-init/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tlet deferreds = [];\n\n\tfunction push() {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push(deferred);\n\t\treturn deferred.promise;\n\t}\n</script>\n\n<button onclick={() => count += 1}>increment</button>\n<button onclick={() => deferreds.shift()?.resolve([count])}>resolve</button>\n<button onclick={() => deferreds.shift()?.reject(new Error('oops'))}>reject</button>\n\n<svelte:boundary>\n\t{#if count % 2 === 0}\n\t\t<p>true</p>\n\t\t{#each await push() as count}<p>{count}</p>{/each}\n\t{:else}\n\t\t<p>false</p>\n\t\t{#each await push() as count}<p>{count}</p>{/each}\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-rerun/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [override, release, resolve] = target.querySelectorAll('button');\n\n\t\tresolve.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>override</button>\n\t\t\t\t<button>release</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>before</p>\n\t\t\t\t<p>before</p>\n\t\t\t`\n\t\t);\n\n\t\toverride.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>override</button>\n\t\t\t\t<button>release</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>during</p>\n\t\t\t\t<p>during</p>\n\t\t\t`\n\t\t);\n\n\t\trelease.click();\n\t\tawait tick();\n\n\t\tresolve.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>override</button>\n\t\t\t\t<button>release</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>after</p>\n\t\t\t\t<p>after</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-rerun/main.svelte",
    "content": "<script lang=ts>\n\tlet deferred = Promise.withResolvers();\n\tlet value = $state();\n\tlet override = $state();\n\tlet current = $derived(override ?? value);\n\tlet promise = $state(update(['before']));\n\n\tasync function update (v) {\n\t\tdeferred = Promise.withResolvers();\n\t\tawait deferred.promise;\n\t\tvalue = v;\n\t};\n\n\tfunction indirect() {\n\t\toverride;\n\t\treturn promise.then(() => current);\n\t}\n</script>\n\n<button onclick={() => {\n\toverride = ['during'];\n}}>override</button>\n\n<button onclick={() => {\n\toverride = null;\n\tpromise = update(['after']);\n}}>release</button>\n\n<button onclick={() => {\n\tdeferred.resolve(null);\n}}>resolve</button>\n\n<svelte:boundary>\n\t{#each await indirect() as entry}\n\t\t<p>{entry}</p>\n\t{/each}\n\n\t{#each current as entry}\n\t\t<p>{entry}</p>\n\t{/each}\n\n\t{#snippet pending()}\n\t\t<p>pending...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-resolve/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>0</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>even</p>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>even</p>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>odd</p>\n\t\t\t\t<p>loading...</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>odd</p>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-block-resolve/main.svelte",
    "content": "<script>\n\tlet resolvers = [];\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count += 1}>{$state.eager(count)}</button>\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n\n<svelte:boundary>\n\t{#if await push(count) % 2 === 0}\n\t\t<p>even</p>\n\t{:else}\n\t\t<p>odd</p>\n\t{/if}\n\n\t{#key count}\n\t\t<svelte:boundary>\n\t\t\t<p>{await push(count)}</p>\n\n\t\t\t{#snippet pending()}\n\t\t\t\t<p>loading...</p>\n\t\t\t{/snippet}\n\t\t</svelte:boundary>\n\t{/key}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-nav-race/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>a</button>\n\t\t<button>b</button>\n\t\t<button>resolve a</button>\n\t\t<button>resolve b</button>\n\t\t<p>pending a</p>\n\t`,\n\tasync test({ assert, target }) {\n\t\tconst [a, b, resolve_a, resolve_b] = target.querySelectorAll('button');\n\n\t\tresolve_a.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>resolve a</button>\n\t\t\t\t<button>resolve b</button>\n\t\t\t\t<p>page a</p>\n\t\t\t`\n\t\t);\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>resolve a</button>\n\t\t\t\t<button>resolve b</button>\n\t\t\t\t<p>pending b</p>\n\t\t\t`\n\t\t);\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>resolve a</button>\n\t\t\t\t<button>resolve b</button>\n\t\t\t\t<p>pending a</p>\n\t\t\t`\n\t\t);\n\n\t\tresolve_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>resolve a</button>\n\t\t\t\t<button>resolve b</button>\n\t\t\t\t<p>pending a</p>\n\t\t\t`\n\t\t);\n\n\t\tresolve_a.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>resolve a</button>\n\t\t\t\t<button>resolve b</button>\n\t\t\t\t<p>page a</p>\n\t\t\t`\n\t\t);\n\n\t\tawait new Promise((r) => setTimeout(r, 100));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-nav-race/main.svelte",
    "content": "<script>\n\tlet page = $state('a');\n\n\t/** @type {Array<() => void>} */\n\tconst a = [];\n\t/** @type {Array<() => void>} */\n\tconst b = [];\n\n\tfunction gate(next) {\n\t\tconst deferred = Promise.withResolvers();\n\n\t\tif (next === 'a') a.push(deferred.resolve);\n\t\telse b.push(deferred.resolve);\n\n\t\treturn deferred.promise;\n\t}\n\n\tfunction nav(next) {\n\t\tpage = next;\n\t}\n\n\tconst to_render = $derived(page === 'a' ? snippet_a : snippet_b);\n</script>\n\n<button onclick={() => nav('a')}>a</button>\n<button onclick={() => nav('b')}>b</button>\n<button onclick={() => a.shift()?.()}>resolve a</button>\n<button onclick={() => b.shift()?.()}>resolve b</button>\n \n{#snippet snippet_a()}\n\t<svelte:boundary>\n\t\t{@const _a = await gate('a')}\n\t\t<p>page a</p>\n\n\t\t{#snippet pending()}\n\t\t\t<p>pending a</p>\n\t\t{/snippet}\n\t</svelte:boundary>\n{/snippet}\n\n{#snippet snippet_b()}\n\t<svelte:boundary>\n\t\t{@const _b = await gate('b')}\n\t\t<p>page b</p>\n\n\t\t{#snippet pending()}\n\t\t\t<p>pending b</p>\n\t\t{/snippet}\n\t</svelte:boundary>\n{/snippet}\n\n{@render to_render()} \n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-pending-live/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>increment</button>\n\t\t<button>shift</button>\n\t\t<p>0</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>resolved</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-pending-live/main.svelte",
    "content": "<script>\n\tlet resolvers = [];\n\n\tfunction push(value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tresolvers.push(() => deferred.resolve(value));\n\t\treturn deferred.promise;\n\t}\n\n\tfunction shift() {\n\t\tresolvers.shift()?.();\n\t}\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count += 1}>\n\tincrement\n</button>\n\n<button onclick={shift}>\n\tshift\n</button>\n\n<svelte:boundary>\n\t<p>{await push('resolved')}</p>\n\n\t{#snippet pending()}\n\t\t<p>{count}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-reset/Test.svelte",
    "content": "<script>\n\tasync function c(a) {\n\t\t\tawait Promise.resolve()\n\t\t\tif (a) {\n\t\t\t\tthrow new Error('error');\n\t\t\t} else {\n\t\t\t\treturn 'ok';\n\t\t\t}\n\t}\n\n\tlet a = $state();\n\tlet b = $derived(await c(a));\n</script>\n\n<button onclick={() => a = 1}>{b}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-reset/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tlet [btn] = target.querySelectorAll('button');\n\t\tbtn.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>reset</button>');\n\n\t\t[btn] = target.querySelectorAll('button');\n\t\tbtn.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>ok</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-reset/main.svelte",
    "content": "<script>\n\timport Test from './Test.svelte';\n</script>\n\n<svelte:boundary>\n\t<Test />\n\n\t{#snippet pending()}pending{/snippet}\n\t{#snippet failed(_, reset)}\n\t\t<button onclick={reset}>reset</button>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-update-while-pending/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [shift, increment] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\tloading\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\tloading\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\tloading\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t1\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-boundary-update-while-pending/main.svelte",
    "content": "<script>\n\tlet queue = [];\n\n\tfunction push(value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tqueue.push(() => deferred.resolve(value));\n\t\treturn deferred.promise;\n\t}\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => queue.shift()()}>shift</button>\n<button onclick={() => count++}>increment</button>\n\n<svelte:boundary>\n\t{await push(count)}\n\t{#snippet pending()}loading{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-child-effect/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>shift</button>\n\t\t<p>loading</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tawait tick();\n\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>+</button>\n\t\t\t\t<p>A</p>\n\t\t\t\t<p>a</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => button2.click());\n\t\tflushSync(() => button2.click());\n\n\t\tbutton1.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>+</button>\n\t\t\t\t<p>AA</p>\n\t\t\t\t<p>aa</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton1.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>+</button>\n\t\t\t\t<p>AAA</p>\n\t\t\t\t<p>aaa</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-child-effect/main.svelte",
    "content": "<script>\n\tlet input = $state('a');\n\n\tlet queue = [];\n\n\tfunction push(value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tqueue.push(() => deferred.resolve(value));\n\t\treturn deferred.promise;\n\t}\n</script>\n\n<button onclick={() => queue.shift()()}>shift</button>\n\n<svelte:boundary>\n\t<button onclick={() => input += 'a'}>+</button>\n\t<p>{await push(input.toUpperCase())}</p>\n\n\t{#if true}\n\t\t<p>{input}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-class-directive/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `loading`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div class=\"one\">one</div>\n\t\t\t\t<div class=\"two\">two</div>\n\t\t\t\t<div style=\"color: red;\">red</div>\n\t\t\t\t<div style=\"color: blue;\">blue</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-class-directive/main.svelte",
    "content": "<svelte:boundary>\n\t<div class:one={await true} {...{}}>one</div>\n\t<div class:two={await true}>two</div>\n\n\t<div style:color={await 'red'} {...{}}>red</div>\n\t<div style:color={await 'blue'}>blue</div>\n\n\t{#snippet pending()}\n\t\tloading\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-clear-batch-between-runs/Child.svelte",
    "content": "<script>\n\tlet { x, y, deferred } = $props();\n\n\ty = await deferred.promise;\n</script>\n\n<p>x: {x}</p>\n\n<svelte:boundary>\n\t{#snippet pending()}\n\t\t<p>Loading...</p>\n\t{/snippet}\n\n\t<p>y: {y}</p>\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-clear-batch-between-runs/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>x</button>\n\t\t<button>y</button>\n\t\t<p>loading...</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tawait tick();\n\n\t\tbutton2.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>x</button>\n\t\t\t\t<button>y</button>\n\t\t\t\t<p>x: x2</p>\n\t\t\t\t<p>y: y2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-clear-batch-between-runs/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet x = $state('x1');\n\tlet y = $state('y1');\n\n\tconst deferred = Promise.withResolvers();\n</script>\n\n<button onclick={() => x = 'x2'}>x</button>\n<button onclick={() => deferred.resolve('y2')}>y</button>\n\n<svelte:boundary>\n\t<Child {x} {y} {deferred} />\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-component-exports/Child.svelte",
    "content": "<script>\n\texport function foo() {\n\t\tconsole.log('foo');\n\t}\n\n\tconst value = await Promise.resolve('bar');\n\n\texport const bar = () => console.log(value);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-component-exports/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tawait tick();\n\t\tconst [log] = target.querySelectorAll('button');\n\n\t\tlog.click();\n\t\tassert.deepEqual(logs, ['foo', 'bar']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-component-exports/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet child;\n</script>\n\n<Child bind:this={child} />\n<button onclick={() => {\n\tchild.foo();\n\tchild.bar();\n}}>log</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-const/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: `<h1>Hello, world!</h1> 5 01234 5 sync 6 5 0 10`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<h1>Hello, world!</h1> 5 01234 5 sync 6 5 0 10`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-const/main.svelte",
    "content": "<script>\n\tlet name = $state('world');\n</script>\n\n<svelte:boundary>\n\t{@const sync = 'sync'}\n\t{@const number = await Promise.resolve(5)}\n\t{@const after_async = number + 1}\n\t{@const { length, 0: first } = await '01234'}\n\n\t{#snippet greet()}\n\t\t{@const greeting = await `Hello, ${name}!`}\n\t\t<h1>{greeting}</h1>\n\t\t{number}\n\t\t{#if number > 4 && after_async && greeting}\n\t\t\t{@const length = await number}\n\t\t\t{#each { length }, index}\n\t\t\t\t{@const i = await index}\n\t\t\t\t{i}\n\t\t\t{/each}\n\t\t{/if}\n\t{/snippet}\n\n\t{@render greet()}\n\t{number} {sync} {after_async} {length} {first}\n\n\t{#if sync}\n\t\t{@const double = number * 2}\n\t\t{double}\n\t{/if}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-const-wait/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tprops: {\n\t\ta_promise: Promise.resolve(10),\n\t\tb_promise: Promise.resolve(20)\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<p>30</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-const-wait/main.svelte",
    "content": "<script>\n\tlet { a_promise, b_promise } = $props();\n</script>\n\n<svelte:boundary>\n\t{@const a = await a_promise}\n\t{#if true}\n\t\t<svelte:boundary>\n\t\t\t{@const b = await b_promise}\n\t\t\t{#if true}\n\t\t\t\t{@const sum = a + b}\n\t\t\t\t<p>{sum}</p>\n\t\t\t{/if}\n\t\t</svelte:boundary>\n\t{/if}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-context-throws-after-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test() {\n\t\t// else runtime_error is checked too soon\n\t\tawait tick();\n\t},\n\truntime_error: 'set_context_after_init'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-context-throws-after-await/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\n\tawait Promise.resolve('hi');\n\n\tsetContext('key', 'value');\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived/Child.svelte",
    "content": "<script>\n\tlet { promise, num } = $props();\n\n\tlet value = $derived(num + (await promise));\n\n\t$effect(() => {\n\t\tconsole.log(`$effect ${value} ${num}`);\n\t});\n\n\t$effect.pre(() => {\n\t\tconsole.log(`$effect.pre ${value} ${num}`);\n\t});\n</script>\n\n<p>{value}{console.log(`template ${value} ${num}`)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived/_config.js",
    "content": "import { flushSync, settled, tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>resolve a</button>\n\t\t<button>resolve b</button>\n\t\t<button>reset</button>\n\t\t<button>increment</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [resolve_a, resolve_b, reset, increment] = target.querySelectorAll('button');\n\n\t\tflushSync(() => resolve_a.click());\n\t\tawait tick();\n\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tassert.htmlEqual(p.innerHTML, '1a');\n\n\t\tflushSync(() => increment.click());\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '2a');\n\n\t\treset.click();\n\t\tassert.htmlEqual(p.innerHTML, '2a');\n\n\t\tresolve_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '2b');\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'outside boundary 1',\n\t\t\t'$effect.pre 1a 1',\n\t\t\t'template 1a 1',\n\t\t\t'$effect 1a 1',\n\t\t\t'$effect.pre 2a 2',\n\t\t\t'template 2a 2',\n\t\t\t'outside boundary 2',\n\t\t\t'$effect 2a 2',\n\t\t\t'$effect.pre 2b 2',\n\t\t\t'template 2b 2',\n\t\t\t'$effect 2b 2'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet deferred = $state(Promise.withResolvers());\n\tlet num = $state(1);\n</script>\n\n<button onclick={() => deferred.resolve('a')}>resolve a</button>\n<button onclick={() => deferred.resolve('b')}>resolve b</button>\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => num += 1}>increment</button>\n\n<svelte:boundary>\n\t<Child promise={deferred.promise} {num} />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n\n{console.log(`outside boundary ${num}`)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-destructured/Child.svelte",
    "content": "<script>\n\tlet count = $state(1);\n\tlet arr = $state([1,2]);\n\n\t// More complex init\n\tlet { squared, cubed } = $derived(await {\n\t\tsquared: count ** 2,\n\t\tcubed: count ** 3\n\t});\n\t// Simple init with multiple destructurings after await\n\tlet { toFixed, toString } = $derived(count);\n\n\t// Simple init with array destructurings after await\n\tlet [a, b] = $derived(arr);\n</script>\n\n<button onclick={() => count++}>increment</button>\n\n<p>{count} ** 2 = {squared}</p>\n<p>{count} ** 3 = {cubed}</p>\n<p>{typeof toFixed} {typeof toString}</p>\n<p>{a} {b}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-destructured/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>1 ** 2 = 1</p>\n\t\t\t\t<p>1 ** 3 = 1</p>\n\t\t\t\t<p>function function</p>\n\t\t\t\t<p>1 2</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>2 ** 2 = 4</p>\n\t\t\t\t<p>2 ** 3 = 8</p>\n\t\t\t\t<p>function function</p>\n\t\t\t\t<p>1 2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-destructured/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-in-if/Child.svelte",
    "content": "<script>\n\tlet n = $derived(await 1);\n</script>\n\n<p>{n}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-in-if/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-in-if/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = true}>show</button>\n\n<svelte:boundary>\n\t{#if show}\n\t\t<Child />\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-in-multiple-effects/Component.svelte",
    "content": "<script>\n\timport { untrack } from \"svelte\";\n\n\tlet { double } = $props();\n\n\t// Test setup:\n\t// - component initialized while pending work\n\t// - derived that depends on mulitple sources\n\t// - indirect updates to subsequent deriveds\n\t// - two sibling effects where the former influences the latter\n\t// - first effect reads derived of second inside untrack\n\tlet x = $state(0);\n\tconst other = $derived(double + x);\n\tconst another = $derived(other + 1);\n\tconst another2 = $derived(another + 1);\n\n\t$effect(() => {\n\t\tuntrack(() => {\n\t\t\tanother2;\n\t\t\tx++\n\t\t});\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(another2);\n\t})\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-in-multiple-effects/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [5]);\n\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [5, 7]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-in-multiple-effects/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tlet count = $state(0);\n\tconst double = $derived(count * 2);\n</script>\n\n<svelte:boundary>\n\t{await new Promise((r) => {\n\t\t// long enough for the test to do all its other stuff while this is pending\n\t\tsetTimeout(r, 10);\n\t})}\n\t{#snippet pending()}{/snippet}\n</svelte:boundary>\n\n<button onclick={() => count += 1}>{count}</button>\n\n{#if count > 0}\n\t<Component {double} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-indirect/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a, b, resolve] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\t\tb.click();\n\t\tawait tick();\n\t\tresolve.click();\n\t\tawait tick();\n\t\tresolve.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n                <button>a</button>\n                <button>b</button>\n                <button>resolve</button>\n\t\t\t\thi\n                1\n            `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-indirect/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet a_b = $derived(a * b);\n\n\tconst queued = [];\n\n\tfunction push(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise(resolve => {\n\t\t\tqueued.push(() => resolve(value));\n\t\t});\n\t}\n</script>\n\n<button onclick={() => (a++)}>a</button>\n<button onclick={() => (b++)}>b</button>\n<button onclick={() => (queued.shift()?.())}>resolve</button>\n<!-- a_b called in a block effect before being called in an async effect -->\n{#if a_b}hi{/if}\n{await push(a_b)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-invalidation-during-init/Child.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n\n\tlet d = $derived({\n\t\tvalue: await promise\n\t});\n</script>\n\n<p>{(await d).value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-invalidation-during-init/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>switch to d2</button>\n\t\t<button>resolve d1</button>\n\t\t<button>resolve d2</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target, errors }) {\n\t\tconst [toggle, resolve1, resolve2] = target.querySelectorAll('button');\n\n\t\ttoggle.click();\n\t\tresolve1.click();\n\t\tresolve2.click();\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>switch to d2</button>\n\t\t\t\t<button>resolve d1</button>\n\t\t\t\t<button>resolve d2</button>\n\t\t\t\t<p>two</p>\n\t\t\t`\n\t\t);\n\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-invalidation-during-init/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet d1 = $state(Promise.withResolvers());\n\tlet d2 = $state(Promise.withResolvers());\n\n\tlet deferred = $state.raw(d1);\n</script>\n\n<button onclick={() => deferred = d2}>switch to d2</button>\n<button onclick={() => d1.resolve('one')}>resolve d1</button>\n<button onclick={() => d2.resolve('two')}>resolve d2</button>\n\n<svelte:boundary>\n\t<Child promise={deferred.promise} />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-module/Child.svelte",
    "content": "<script>\n\timport { create_derived } from './state.svelte.js';\n\n\tlet { promise, num } = $props();\n\n\tlet derived = await create_derived(\n\t\t() => promise,\n\t\t() => num\n\t);\n\n\t$effect(() => {\n\t\tconsole.log(`$effect ${derived.value} ${num}`);\n\t});\n\n\t$effect.pre(() => {\n\t\tconsole.log(`$effect.pre ${derived.value} ${num}`);\n\t});\n</script>\n\n<p>{derived.value}{console.log(`template ${derived.value} ${num}`)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-module/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>a</button>\n\t\t<button>b</button>\n\t\t<button>increment</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [reset, a, b, increment] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>42</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>84</p>\n\t\t\t`\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>84</p>\n\t\t\t`\n\t\t);\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>86</p>\n\t\t\t`\n\t\t);\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'outside boundary 1',\n\t\t\t'$effect.pre 42 1',\n\t\t\t'template 42 1',\n\t\t\t'$effect 42 1',\n\t\t\t'$effect.pre 84 2',\n\t\t\t'template 84 2',\n\t\t\t'outside boundary 2',\n\t\t\t'$effect 84 2',\n\t\t\t'$effect.pre 86 2',\n\t\t\t'template 86 2',\n\t\t\t'$effect 86 2'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-module/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet num = $state(1);\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve(42)}>a</button>\n<button onclick={() => deferred.resolve(43)}>b</button>\n<button onclick={() => num += 1}>increment</button>\n\n<svelte:boundary>\n\t<Child promise={deferred.promise} {num} />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n\n{console.log(`outside boundary ${num}`)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-module/state.svelte.js",
    "content": "export async function create_derived(get_promise, get_num) {\n\tlet value = $derived((await get_promise()) * get_num());\n\n\treturn {\n\t\tget value() {\n\t\t\treturn value;\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-reverse-order/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [increment, pop] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tpop.click();\n\t\tawait tick();\n\n\t\tpop.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tpop.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-reverse-order/main.svelte",
    "content": "\n<script>\n\tlet count = $state(0);\n\n\tlet deferreds = [];\n\n\tclass X {\n\t\tconstructor(promise) {\n\t\t\tthis.promise = promise;\n\t\t}\n\t\t\n\t\tget then() {\n\t\t\tcount;\n\n\t\t\treturn (resolve) => this.promise.then(() => count).then(resolve)\n\t\t}\n\t}\n\n\tfunction push() {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push(deferred);\n\t\treturn new X(deferred.promise);\n\t}\n</script>\n\n<button onclick={() => count += 1}>increment</button>\n<button onclick={() => deferreds.pop()?.resolve(count)}>pop</button>\n\n<svelte:boundary>\n\t<p>{await push()}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-title-update/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst p = target.querySelector('p');\n\t\tassert.equal(p?.innerHTML, 'hello');\n\t\tassert.equal(window.document.title, 'hello');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-title-update/main.svelte",
    "content": "<script>\n\tlet promise = Promise.resolve('hello');\n\tconst value = $derived(await promise);\n</script>\n\n<svelte:head>\n\t<title>{value}</title>\n</svelte:head>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unchanging/Component.svelte",
    "content": "<script lang=\"ts\">\n\tlet queue: Array<{ deferred: PromiseWithResolvers<number>; value: number }> = [];\n\tlet inited = false;\n\n\tfunction push(value: number) {\n\t\tconst deferred = Promise.withResolvers<number>();\n\t\tqueue.push({ deferred, value });\n\n\t\tif (!inited) {\n\t\t\tinited = true;\n\t\t\tshift();\n\t\t}\n\n\t\treturn deferred.promise;\n\t}\n\n\tfunction shift() {\n\t\tconst next = queue.shift();\n\t\tnext?.deferred.resolve(next.value);\n\t}\n\n\tlet n = $state(0);\n\tlet current = $derived(await push(n));\n</script>\n\n<button onclick={shift}>shift</button>\n<button onclick={() => n += 1}>increment</button>\n\n<p>{n}: {Math.min(current, 3)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unchanging/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<p>pending...</p>`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>0: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tconst [shift, increment] = target.querySelectorAll('button');\n\t\tconst [p] = target.querySelectorAll('p');\n\n\t\tfor (let i = 1; i < 5; i += 1) {\n\t\t\tflushSync(() => increment.click());\n\t\t}\n\n\t\tfor (let i = 1; i < 5; i += 1) {\n\t\t\tshift.click();\n\t\t\tawait tick();\n\n\t\t\tassert.equal(p.innerHTML, `${i}: ${Math.min(i, 3)}`);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unchanging/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<svelte:boundary>\n\t<Component />\n\n\t{#snippet pending()}\n\t\t<p>pending...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unmount-undefined-props/Child.svelte",
    "content": "<script>\n\tlet { id } = $props();\n\n\t// BUG: This logs 'undefined' on unmount when parent has async derived\n\tconst data = $derived(await Promise.resolve(id).then((x) => {\n\t\tconsole.log('promise resolved with:', x);\n\t\treturn x;\n\t}));\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unmount-undefined-props/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['promise resolved with:', 'some-id']);\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['promise resolved with:', 'some-id']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unmount-undefined-props/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\t// This async derived in parent triggers the bug\n\tconst something = $derived(await Promise.resolve('test'));\n\n\tlet active = $state('some-id');\n</script>\n\n{#if active}\n\t<Child id={active} />\n{/if}\n\n<button onclick={() => active = undefined}>close</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unowned/Component.svelte",
    "content": "<script>\n\tlet { double } = $props();\n\tdouble; // derived is first read outside an active_reaction\n</script>\n\n<p>{double}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unowned/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>2</button>\n\t\t\t\t<p>4</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-unowned/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tlet count = $state(0);\n\tconst double = $derived(count * 2);\n</script>\n\n<svelte:boundary>\n\t{await new Promise((r) => {\n\t\t// long enough for the test to do all its other stuff while this is pending\n\t\tsetTimeout(r, 10);\n\t})}\n\t{#snippet pending()}{/snippet}\n</svelte:boundary>\n\n<button onclick={() => count += 1}>{count}</button>\n\n{#if count > 0}\n\t<Component {double} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-with-effect-and-boundary/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>baz: 69</p>\n\t\t\t\t<p></p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-derived-with-effect-and-boundary/main.svelte",
    "content": "<script>\n\tlet foo = $state(null);\n\n\t$effect(() => {\n\t\tfoo = 69;\n\t});\n\n\tlet bar = $derived(await 1);\n\n\tlet baz = $derived(foo ? foo * bar : null);\n\n\tconst qux = \"qux\";\n</script>\n\n<p>baz: {baz}</p>\n\n<svelte:boundary>\n\t{#snippet pending()}\n\t\t<p>Loading...</p>\n\t{/snippet}\n\n\t{#if qux}\n\t\t<p></p>\n\t{/if}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-discard-obsolete-batch/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [increment, shift, pop] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>1 = 1</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>3</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>1 = 1</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>3</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>1 = 1</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>3</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>3 = 3</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>5</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>3 = 3</p>\n\t\t\t`\n\t\t);\n\n\t\tpop.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>5</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>5 = 5</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-discard-obsolete-batch/main.svelte",
    "content": "<script>\n\timport { getAbortSignal } from 'svelte';\n\n\tconst queue = [];\n\n\tfunction push(value) {\n\t\tif (value === 1) return 1;\n\t\tconst d = Promise.withResolvers();\n\n\t\tqueue.push(() => d.resolve(value));\n\n\t\tconst signal = getAbortSignal();\n\t\tsignal.onabort = () => d.reject(signal.reason);\n\n\t\treturn d.promise;\n\t}\n\n\tfunction shift() {\n\t\tqueue.shift()?.();\n\t}\n\n\tfunction pop() {\n\t\tqueue.pop()?.();\n\t}\n\n\tlet n = $state(1);\n</script>\n\n<button onclick={() => n++}>\n\t{$state.eager(n)}\n</button>\n\n<button onclick={shift}>shift</button>\n<button onclick={pop}>pop</button>\n\n<p>{n} = {await push(n)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-dynamic-component/Component.svelte",
    "content": "Hi"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-dynamic-component/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: 'Hi Hi Hi Hi',\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'Hi Hi Hi Hi');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-dynamic-component/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte'\n\tconst X = $derived(await Promise.resolve(Component))\n\tconst Y = await Promise.resolve(Component)\n</script>\n\n<X />\n<svelte:component this={X} />\n<Y />\n<svelte:component this={Y} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>abc</button>\n\t\t<button>defg</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, abc, defg] = target.querySelectorAll('button');\n\n\t\tabc.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>abc</button>\n\t\t\t\t<button>defg</button>\n\t\t\t\t<p>a</p><p>b</p><p>c</p>`\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>abc</button>\n\t\t\t\t<button>defg</button>\n\t\t\t\t<p>a</p><p>b</p><p>c</p>`\n\t\t);\n\n\t\tdefg.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>abc</button>\n\t\t\t\t<button>defg</button>\n\t\t\t\t<p>d</p><p>e</p><p>f</p><p>g</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve(['a', 'b', 'c'])}>abc</button>\n<button onclick={() => deferred.resolve(['d', 'e', 'f', 'g'])}>defg</button>\n\n<svelte:boundary>\n\t{#each await deferred.promise as item}\n\t\t<p>{item}</p>\n\t{/each}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-await-item/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>step 1</button><button>step 2</button><button>step 3</button><p>pending</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [button1, button2, button3] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>step 1</button><button>step 2</button><button>step 3</button><p>a</p><p>b</p><p>c</p>'\n\t\t);\n\n\t\tbutton2.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>step 1</button><button>step 2</button><button>step 3</button><p>a</p><p>b</p><p>c</p>'\n\t\t);\n\n\t\tbutton3.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>step 1</button><button>step 2</button><button>step 3</button><p>b</p><p>c</p><p>d</p><p>e</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-await-item/main.svelte",
    "content": "<script>\n\tlet items = $state([\n\t\tPromise.withResolvers(),\n\t\tPromise.withResolvers(),\n\t\tPromise.withResolvers()\n\t]);\n</script>\n\n<button onclick={() => {\n\titems[0].resolve('a');\n\titems[1].resolve('b');\n\titems[2].resolve('c');\n}}>step 1</button>\n\n<button onclick={() => {\n\titems = [\n\t\tPromise.withResolvers(),\n\t\tPromise.withResolvers(),\n\t\tPromise.withResolvers(),\n\t\tPromise.withResolvers()\n\t]\n}}>step 2</button>\n\n<button onclick={() => {\n\titems[0].resolve('b');\n\titems[1].resolve('c');\n\titems[2].resolve('d');\n\titems[3].resolve('e');\n}}>step 3</button>\n\n<svelte:boundary>\n\t{#each items as deferred}\n\t\t<p>{await deferred.promise}</p>\n\t{/each}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-await-stale-rows/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst spam = /** @type {HTMLButtonElement} */ (target.querySelector('button.spam'));\n\t\tconst resolve = /** @type {HTMLButtonElement} */ (target.querySelector('button.resolve'));\n\n\t\tresolve.click();\n\t\tawait tick();\n\n\t\tfor (let i = 0; i < 5; i += 1) {\n\t\t\tspam.click();\n\t\t\tawait tick();\n\t\t}\n\n\t\tfor (let i = 0; i < 5; i += 1) {\n\t\t\tresolve.click();\n\t\t\tawait tick();\n\t\t}\n\n\t\tassert.equal(target.querySelectorAll('div').length, 1);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button class=\"spam\">Spam</button>\n\t\t\t\t<button class=\"resolve\">Resolve</button>\n\t\t\t\t<div>5</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-await-stale-rows/main.svelte",
    "content": "<script>\n\tlet value = $state({ id: '0' });\n\tconst resolvers = [];\n\n\tfunction wait() {\n\t\tconst promise = Promise.withResolvers();\n\t\tresolvers.push(promise.resolve);\n\t\treturn promise.promise;\n\t}\n\n\tfunction spam() {\n\t\tvalue.id = `${Number(value.id) + 1}`;\n\t}\n</script>\n\n<button class=\"spam\" onclick={spam}>Spam</button>\n<button class=\"resolve\" onclick={() => resolvers.shift()?.()}>Resolve</button>\n\n<svelte:boundary>\n\t{#each [value.id] as s (s)}\n\t\t{await wait()}\n\t\t<div>{s}</div>\n\t{/each}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-await-store-update/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst button = /** @type {HTMLElement} */ (target.querySelector('button'));\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li data-item=\"1\"><span>10</span><span>20</span></li></ul><button>add</button>`\n\t\t);\n\n\t\tbutton.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li data-item=\"1\"><span>10</span><span>20</span></li><li data-item=\"2\"><span>20</span><span>40</span></li></ul><button>add</button>`\n\t\t);\n\n\t\tbutton.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li data-item=\"1\"><span>10</span><span>20</span></li><li data-item=\"2\"><span>20</span><span>40</span></li><li data-item=\"3\"><span>30</span><span>60</span></li></ul><button>add</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-await-store-update/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst items = writable([{ id: 1 }]);\n\n\tfunction add_item() {\n\t\titems.update(arr => [...arr, { id: arr.length + 1 }]);\n\t}\n\n\tfunction query(item) {\n\t\treturn Promise.resolve([item.id * 10, item.id * 20]);\n\t}\n</script>\n\n<svelte:boundary>\n\t<ul>\n\t\t{#each $items as item (item.id)}\n\t\t\t<li data-item={item.id}>\n\t\t\t\t{#each await query(item) as value}\n\t\t\t\t\t<span>{value}</span>\n\t\t\t\t{/each}\n\t\t\t</li>\n\t\t{/each}\n\t</ul>\n\t\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n\n<button onclick={add_item}>add</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-const-await-error-boundary/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// this test doesn't fail without the associated fix — the error gets\n\t// swallowed somewhere. but keeping it around for illustration\n\tskip: true,\n\n\tmode: ['client'],\n\n\tasync test({ assert, target, errors, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, ['Simulated TypeError']);\n\t\tassert.deepEqual(errors, []);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Trigger</button>\n\t\t\t\t<p>Error Caught: Simulated TypeError</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-const-await-error-boundary/main.svelte",
    "content": "<script>\n\tlet index = $state(0);\n\n\tasync function fn(id) {\n\t\tif (id === 2) throw new Error('Simulated TypeError');\n\t\treturn id;\n\t}\n\n\tfunction onerror(error) {\n\t\tconsole.log(error.message);\n\t}\n</script>\n\n<button onclick={() => (index = 1)}>Trigger</button>\n\n<svelte:boundary {onerror}>\n\t{#snippet pending()}\n\t\t<p>Loading...</p>\n\t{/snippet}\n\n\t{#snippet failed(error)}\n\t\t<p>Error Caught: {error.message}</p>\n\t{/snippet}\n\n\t{#each [[1], [2]][index] as id (id)}\n\t\t{@const result = await fn(id)}\n\t\t<p>{result}</p>\n\t{/each}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-derived/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick(); // settle initial await\n\n\t\tconst checkBox = target.querySelector('input');\n\n\t\tcheckBox?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<input type=\"checkbox\"/>\n\t\t\t\t<p>true</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-derived/main.svelte",
    "content": "<script>\n\tlet checked = $state(false);\n\n\tconst foo = $derived(await checked);\n</script>\n\n<input type=\"checkbox\" bind:checked />\n\n{#each checked === foo && [1]}\n\t<p>{checked}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-item-duplication/Component.svelte",
    "content": "<script>\n\tlet { message, another } = $props()\n</script>\n\n<p>{message}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-item-duplication/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tssrHtml: `<p>item 1</p><p>item 2</p><p>item 3</p>`,\n\thtml: `<p>item 1</p><p>item 2</p><p>item 3</p>`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>item 1</p><p>item 2</p><p>item 3</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-item-duplication/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte'\n\n\tconst messages = await Promise.resolve([\"item 1\", \"item 2\", \"item 3\"])\n\tconst another = { test: 'test' }\n</script>\n\n{#each messages as message}\n\t<Component {message} {another} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-keyed/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>one</button>\n\t\t<button>two</button>\n\t\t<button>three</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, one, two, three] = target.querySelectorAll('button');\n\n\t\tone.click();\n\t\tawait tick();\n\n\t\tconst [div] = target.querySelectorAll('div');\n\t\tassert.htmlEqual(div.innerHTML, '<p>a</p><p>b</p><p>c</p>');\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(div.innerHTML, '<p>a</p><p>b</p><p>c</p>');\n\n\t\ttwo.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(div.innerHTML, '<p>d</p><p>e</p><p>f</p><p>g</p>');\n\n\t\treset.click();\n\t\tawait tick();\n\t\tthree.click();\n\t\tawait tick();\n\n\t\tassert.include(target.innerHTML, '<p>each_key_duplicate');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-keyed/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve(['a', 'b', 'c'])}>one</button>\n<button onclick={() => deferred.resolve(['d', 'e', 'f', 'g'])}>two</button>\n<button onclick={() => deferred.resolve(['d', 'e', 'f', 'd'])}>three</button>\n\n<svelte:boundary>\n\t<div>\n\t\t{#each await deferred.promise as item (item)}\n\t\t\t<p>{item}</p>\n\t\t{/each}\n\t</div>\n\n\t{#snippet failed(e)}\n\t\t<p>{e.message}</p>\n\t{/snippet}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-preserve-pending/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [add, shift] = target.querySelectorAll('button');\n\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>2</p>\n\t\t\t\t<p>3</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>2</p>\n\t\t\t\t<p>3</p>\n\t\t\t\t<p>4</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-preserve-pending/main.svelte",
    "content": "<script>\n\tlet values = $state([1]);\n\n\tconst queue = [];\n\n\tfunction push(v) {\n\t\tif (v === 1) return v;\n\n\t\tconst p = Promise.withResolvers();\n\t\tqueue.push(() => p.resolve(v));\n\t\treturn p.promise;\n\t}\n\n\tfunction shift() {\n\t\tconst fn = queue.shift();\n\t\tif (fn) fn();\n\t}\n\n\tfunction addValue() {\n\t\tvalues = [...values, values.length + 1];\n\t}\n</script>\n\n<button onclick={addValue}>add</button>\n<button onclick={shift}>shift</button>\n\n{#each values as v}\n\t<p>{await push(v)}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-sibling/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'hydrate', 'client'],\n\tssrHtml: `<ul><li>1</li></ul> <button>add</button>`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [add] = target.querySelectorAll('button');\n\n\t\tadd.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<ul><li>1</li><li>2</li></ul> <button>add</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-each-sibling/main.svelte",
    "content": "<script>\n\tlet array = $state(Promise.resolve([1]));\n</script>\n\n<ul>\n{#each await array as item}\n\t<li>{item}</li>\n{/each}\n</ul>\n\n<button onclick={() => array = Promise.resolve([1, 2])}>add</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-eager-derived/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>clicks: 0 - 0 - 0</button> <button>shift</button> <p>true - true</p>`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>clicks: 1 - 1 - 1</button> <button>shift</button> <p>false - false</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-eager-derived/main.svelte",
    "content": "<script>\n\t\n\tlet count = $state(0);\n\tconst delayedCount = $derived(await push(count));\n\tconst derivedCount = $derived(count);\n\n\tlet resolvers = [];\n\n\tfunction push(value) {\n        if (!value) return value;\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => count += 1}>\n\tclicks: {count} - {delayedCount} - {derivedCount}\n</button> \n<button onclick={() => resolvers.shift()?.()}>shift</button>\n\n<p>{$state.eager(count) !== count} - {$state.eager(derivedCount) !== derivedCount}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-after-await/Child.svelte",
    "content": "<script>\n\t$effect(() => {\n\t\tconsole.log('before');\n\t});\n\n\tawait 1;\n\n\t$effect(() => {\n\t\tconsole.log('after');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-after-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, []);\n\t\tawait tick();\n\t\tassert.deepEqual(logs, ['before', 'after']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-after-await/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet pending()}{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-after-boundary/Child.svelte",
    "content": "<script>\n\t$effect(() => {\n\t\tconsole.log('in effect')\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-after-boundary/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [shift] = target.querySelectorAll('button');\n\n\t\tawait tick();\n\t\tassert.deepEqual(logs, []);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['in effect']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-after-boundary/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet resolvers = [];\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n\n<svelte:boundary>\n\t<p>{await push('hello')}</p>\n\t<Child />\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-conservative/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tawait tick();\n\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tassert.deepEqual(logs, [false]);\n\t\tassert.htmlEqual(target.innerHTML, '<button>increment</button><p>0</p>');\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [false]);\n\t\tassert.htmlEqual(target.innerHTML, '<button>increment</button><p>1</p>');\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [false, true]);\n\t\tassert.htmlEqual(target.innerHTML, '<button>increment</button><p>2</p>');\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [false, true]);\n\t\tassert.htmlEqual(target.innerHTML, '<button>increment</button><p>3</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-conservative/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n\tlet two_or_larger = $derived(count >= 2);\n\n\t$effect(() => {\n\t\tconsole.log(two_or_larger);\n\t});\n</script>\n\n<svelte:boundary>\n\t<button onclick={() => count += 1}>increment</button>\n\t<p>{await count}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-pending/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tshift.click();\n\t\tshift.click();\n\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>pending: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>pending: 3</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>pending: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>pending: 1</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>pending: 0</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-pending/main.svelte",
    "content": "<script>\n\tlet value = $state(0);\n\tlet deferreds = [];\n\n\tfunction push(value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push({ value, deferred });\n\t\treturn deferred.promise;\n\t}\n\n\tfunction shift() {\n\t\tconst d = deferreds.shift();\n\t\td?.deferred.resolve(d.value);\n\t}\n</script>\n\n<button onclick={() => value++}>increment</button>\n<button onclick={() => shift()}>shift</button>\n\n<svelte:boundary>\n\t<p>{await push(value)}</p>\n\t<p>{await push(value)}</p>\n\t<p>{await push(value)}</p>\n\n\t<p>pending: {$effect.pending()}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-pending-nested/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>loading...</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tshift.click();\n\t\tshift.click();\n\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>inner pending: 0</p>\n\t\t\t\t<p>outer pending: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>inner pending: 3</p>\n\t\t\t\t<p>outer pending: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>inner pending: 2</p>\n\t\t\t\t<p>outer pending: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>0</p>\n\t\t\t\t<p>inner pending: 1</p>\n\t\t\t\t<p>outer pending: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>inner pending: 0</p>\n\t\t\t\t<p>outer pending: 0</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-pending-nested/main.svelte",
    "content": "<script>\n\tlet value = $state(0);\n\tlet deferreds = [];\n\n\tfunction push(value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push({ value, deferred });\n\t\treturn deferred.promise;\n\t}\n\n\tfunction shift() {\n\t\tconst d = deferreds.shift();\n\t\td?.deferred.resolve(d.value);\n\t}\n</script>\n\n<button onclick={() => value++}>increment</button>\n<button onclick={() => shift()}>shift</button>\n\n<svelte:boundary>\n\t<svelte:boundary>\n\t\t<p>{await push(value)}</p>\n\t\t<p>{await push(value)}</p>\n\t\t<p>{await push(value)}</p>\n\t\t<p>inner pending: {$effect.pending()}</p>\n\t</svelte:boundary>\n\t<p>outer pending: {$effect.pending()}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-triggers-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>2</p>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-effect-triggers-await/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet data = $state(Promise.resolve(0));\n\n\tlet count = $state(0);\n\tlet unrelated = $state(0);\n\n\t$effect(() => {\n\t\tdata = Promise.resolve(count)\n\t\tunrelated = count;\n\t});\n</script>\n\n<svelte:boundary>\n\t<button onclick={() => count += 1}>increment</button>\n\t<p>{JSON.stringify((await data), null, 2)}</p>\n\t{#if true}\n\t\t<!-- inside if block to force it into a different render effect -->\n\t\t<p>{unrelated}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>step 1</button><button>step 2</button><button>step 3</button><p>pending</p>`,\n\n\tasync test({ assert, target }) {\n\t\tlet [button1, button2, button3] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>step 1</button><button>step 2</button><button>step 3</button><p>oops!</p><button data-id=\"reset\">reset</button>'\n\t\t);\n\n\t\tbutton2.click();\n\n\t\tconst reset = /** @type {HTMLButtonElement} */ (target.querySelector('[data-id=\"reset\"]'));\n\t\treset.click();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>step 1</button><button>step 2</button><button>step 3</button><p>pending</p>'\n\t\t);\n\n\t\tbutton3.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>step 1</button><button>step 2</button><button>step 3</button><h1>wheee</h1>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred.reject(new Error('oops!'))}>step 1</button>\n<button onclick={() => deferred = Promise.withResolvers()}>step 2</button>\n<button onclick={() => deferred.resolve('wheee')}>step 3</button>\n\n<svelte:boundary>\n\t<h1>{await deferred.promise}</h1>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n\n\t{#snippet failed(error, reset)}\n\t\t<p>{error.message}</p>\n\t\t<button data-id=\"reset\" onclick={reset}>reset</button>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate', 'async-server', 'client'],\n\tssrHtml: '<p>caught: error</p>',\n\ttransformError: (error) => {\n\t\tif (error !== 'catch me') throw 'wrong error object';\n\t\treturn 'error';\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught: error</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary/main.svelte",
    "content": "<svelte:boundary>\n\t{#snippet failed(error)}\n\t\t<p>caught: {error}</p>\n\t{/snippet}\n\n\t{await Promise.reject('catch me')}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate', 'async-server', 'client'],\n\tssrHtml: '<p>caught: error (hello)</p>',\n\ttransformError: () => {\n\t\treturn 'error';\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught: error (hello)</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary-2/child.svelte",
    "content": "<script>\n\timport { get } from \"./main.svelte\";\n\n    let { error } = $props();\n    const context = get()\n</script>\n\n{#if error}\n    <p>caught: {await error} ({context})</p>\n{:else}\n\t{await Promise.reject('catch me')}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary-2/main.svelte",
    "content": "<script module>\n\timport { createContext } from \"svelte\";\n\timport Child from \"./child.svelte\";\n\n\tconst [ get, set ] = createContext();\n\texport {get};\n</script>\n\n<script>\n\tset('hello');\n</script>\n\n<svelte:boundary>\n\t{#snippet failed(error)}\n\t\t<Child {error} />\n\t{/snippet}\n\n\t<Child />\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate', 'async-server', 'client'],\n\tssrHtml: '<p>caught: error (hello)</p>',\n\ttransformError: () => {\n\t\treturn Promise.resolve('error');\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught: error (hello)</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/child.svelte",
    "content": "<script>\n\timport { get } from \"./main.svelte\";\n\n    let { error } = $props();\n    const context = get()\n</script>\n\n{#if error}\n    <p>caught: {await error} ({context})</p>\n{:else}\n\t{(() => {\n        throw 'catch me';\n    })()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/main.svelte",
    "content": "<script module>\n\timport { createContext } from \"svelte\";\n\timport Child from \"./child.svelte\";\n\n\tconst [ get, set ] = createContext();\n\texport {get};\n</script>\n\n<script>\n\tset('hello');\n</script>\n\n<svelte:boundary>\n\t{#snippet failed(error)}\n\t\t<Child {error} />\n\t{/snippet}\n\n\t<Child />\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-in-block-expression/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `loading`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'oops');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-in-block-expression/main.svelte",
    "content": "<svelte:boundary>\n\t{#each (await Promise.reject(new Error('oops'))) as x}\n\t\thi\n\t{/each}\n\n\t{#snippet pending()}loading{/snippet}\n\t{#snippet failed()}oops{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-in-script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'hydrate'],\n\terror: 'oops'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-in-script/main.svelte",
    "content": "<script>\n\tawait 1;\n\n\tthrow new Error('oops');\n</script>\n\n<h1>hello</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-recovery/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>clicks: 0</button>\n\t\t<p>pending...</p>\n\t`,\n\n\tcompileOptions: {\n\t\t// this tests some behaviour that was broken in dev\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 0</button>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tlet [button] = target.querySelectorAll('button');\n\t\tlet [p] = target.querySelectorAll('p');\n\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 1</button>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 2</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 3</button>\n\t\t\t\t<button>retry</button>\n\t\t\t`\n\t\t);\n\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tawait tick();\n\n\t\tbutton2.click();\n\t\tawait tick();\n\n\t\t[p] = target.querySelectorAll('p');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 4</button>\n\t\t\t\t<p>4</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 5</button>\n\t\t\t\t<p>5</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-error-recovery/main.svelte",
    "content": "<script lang=ts>\n\tlet count = $state(0);\n\n\tfunction process(count) {\n\t\tif (count === 3) throw new Error('kaboom');\n\t\treturn count;\n\t}\n</script>\n\n<button onclick={() => count++}>\n\tclicks: {count}\n</button>\n\n<svelte:boundary>\n\t<p>{await process(count)}</p>\n\n\t{#snippet pending()}\n\t\t<p>pending...</p>\n\t{/snippet}\n\n\t{#snippet failed(error, reset)}\n\t\t<button onclick={reset}>retry</button>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-expression/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>hello</button>\n\t\t<button>goodbye</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target, raf }) {\n\t\tconst [reset, hello, goodbye] = target.querySelectorAll('button');\n\n\t\thello.click();\n\t\traf.tick(0);\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>goodbye</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\treset.click();\n\t\traf.tick(0);\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>goodbye</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t\t<p>updating...</p>\n\t\t\t`\n\t\t);\n\n\t\tgoodbye.click();\n\t\tawait Promise.resolve();\n\t\traf.tick(0);\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>goodbye</button>\n\t\t\t\t<h1>goodbye</h1>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-expression/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve('hello')}>hello</button>\n<button onclick={() => deferred.resolve('goodbye')}>goodbye</button>\n\n<svelte:boundary>\n\t<h1>{await deferred.promise}</h1>\n\n\t{#if $effect.pending()}\n\t\t<p>updating...</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst [shift, increment, commit] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>commit</button>\n\t\t\t\t<p>count: 0</p>\n\t\t\t\t<p>eager: 0</p>\n\t\t\t\t<p>even</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\t// nothing updates until commit\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>commit</button>\n\t\t\t\t<p>count: 0</p>\n\t\t\t\t<p>eager: 0</p>\n\t\t\t\t<p>even</p>\n\t\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\n\t\t// nothing updates until commit\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>commit</button>\n\t\t\t\t<p>count: 1</p>\n\t\t\t\t<p>eager: 1</p>\n\t\t\t\t<p>odd</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tcommit.click();\n\t\tawait tick();\n\n\t\t// eager state updates on commit\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>commit</button>\n\t\t\t\t<p>count: 1</p>\n\t\t\t\t<p>eager: 2</p>\n\t\t\t\t<p>odd</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>commit</button>\n\t\t\t\t<p>count: 2</p>\n\t\t\t\t<p>eager: 2</p>\n\t\t\t\t<p>even</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet count = $state(0);\n\n\tconst resolvers = [];\n\tlet f = null;\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n<button onclick={async () => {\n\tf = await fork(() => {\n\t\tcount += 1;\n\t});\n}}>increment</button>\n<button onclick={() => f?.commit()}>commit</button>\n\n<p>count: {count}</p>\n<p>eager: {$state.eager(count)}</p>\n\n<svelte:boundary>\n\t{#if await push(count) % 2 === 0}\n\t\t<p>even</p>\n\t{:else}\n\t\t<p>odd</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-attributes/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [fork, commit] = target.querySelectorAll('button');\n\n\t\tfork.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<p style=\"\">foo</p>\n\t\t\t<p style=\"\">foo</p>\n\t\t\t<p>foo</p>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<p style=\"color: red;\">foo</p>\n\t\t\t<p style=\"color: red;\" data-attached=true>foo</p>\n\t\t\t<p data-attached=true>foo</p>\n\t\t`\n\t\t);\n\n\t\tfork.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<p style=\"color: red;\">foo</p>\n\t\t\t<p style=\"color: red;\" data-attached=true>foo</p>\n\t\t\t<p data-attached=true>foo</p>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork</button>\n\t\t\t<button>commit</button>\n\t\t\t<p style=\"\">foo</p>\n\t\t\t<p style=\"\">foo</p>\n\t\t\t<p>foo</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-attributes/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\timport { createAttachmentKey } from \"svelte/attachments\";\n\n\tlet style = $state('');\n\tlet attach = $state(undefined);\n\n\tlet forked;\n</script>\n\n<button onclick={()=>{\n\tforked = fork(()=>{\n\t\tstyle = style ? '' : 'color: red';\n\t\tattach = attach ? undefined : (node) => {\n\t\t\tnode.setAttribute('data-attached', 'true');\n\t\t\treturn () => node.removeAttribute('data-attached');\n\t\t};\n\t})\n}}>fork</button>\n\n<button onclick={()=>{\n\tforked.commit();\n}}>commit</button>\n\n<!-- force $.attribute_effect, which uses a block effect -->\n<p {...{style}}>foo</p>\n<p {...{style, [createAttachmentKey()]: attach}}>foo</p>\n<p {@attach attach}>foo</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-derived/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [1, 2]);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [1, 2, 2, 3]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-derived/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet s = $state(1);\n\tlet d = $derived(s);\n</script>\n\n<button onclick={async () => {\n\tconst f = fork(() => {\n\t\ts = s + 1;\n\t});\n\n\tconsole.log(d);\n\tawait f.commit();\n\tconsole.log(d);\n}}>++</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-derived-writable/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tbtn.click();\n\t\tawait tick();\n\t\t// d should be 10 (real-world: s=1, d=1*10) before commit, not 20 (fork: s=2, d=2*10)\n\t\t// After commit, d should be 99 (the written value)\n\t\tassert.deepEqual(logs, [10, 99]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-derived-writable/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet s = $state(1);\n\tlet d = $derived(s * 10);\n</script>\n\n<button onclick={async () => {\n\tconst f = fork(() => {\n\t\t// First modify s, then write to d\n\t\t// If d is evaluated in fork context, it would see s=2 and compute d=20\n\t\t// But it should evaluate in real-world context to get d=10\n\t\ts = 2;\n\t\td = 99;\n\t});\n\n\t// Should be 10 (real-world value: s=1, so d=1*10=10), not 20 (fork value)\n\tconsole.log(d);\n\tawait f.commit();\n\t// Should be 99 (the value we wrote)\n\tconsole.log(d);\n}}>++</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-discard-derived-writable-uninitialized/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tbtn.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [10]);\n\n\t\tbtn.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [10, 10]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-discard-derived-writable-uninitialized/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet s = $state(1);\n\tlet d = $derived(s * 10);\n</script>\n\n<button\n\tonclick={() => {\n\t\tconst f = fork(() => {\n\t\t\t// d has not been read yet, so this write happens with an uninitialized old value\n\t\t\ts = 2;\n\t\t\td = 99;\n\t\t});\n\n\t\tf.discard();\n\t\tconsole.log(d);\n\t}}\n>\n\ttest\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-if/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n\tconsole.log(x);\n\tawait Promise.resolve();\n\tconsole.log(x);\n</script>\n\n{x}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-if/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tawait new Promise((r) => setTimeout(r, 2));\n\t\tassert.htmlEqual(target.innerHTML, `<button>fork</button> universe`);\n\t\tassert.deepEqual(logs, ['universe', 'universe']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-if/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\tlet x = $state('world');\n</script>\n\n<button onclick={async () => {\n\tconst f = fork(() => {\n\t\tx = 'universe'\n\t});\n\tawait new Promise(r => setTimeout(r));\n\tf.commit();\n}}>fork</button>\n\n{#if x === 'universe'}\n\t<Child {x} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-snippet-dev/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target }) {\n\t\tconst [fork] = target.querySelectorAll('button');\n\n\t\tfork.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>fork</button><button>false</button>');\n\n\t\tconst [, toggle] = target.querySelectorAll('button');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>fork</button><button>true</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-snippet-dev/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet condition = $state(false);\n\tlet checked = $state(false);\n\n\tconst d = $derived({ checked });\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tcondition = true;\n\t}).commit();\n}}>fork</button>\n\n{#if condition}\n\t<!-- in dev, snippet arguments are read eagerly, outside a tracking context -->\n\t<!-- this test checks that doing so doesn't prevent the derived from connecting -->\n\t{#snippet foo({ checked })}\n\t\t{checked}\n\t{/snippet}\n\n\t<button onclick={() => (checked = !checked)}>\n\t\t{@render foo(d)}\n\t</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-update-same-state/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, [0]);\n\n\t\tconst [fork1, fork2, commit] = target.querySelectorAll('button');\n\n\t\tfork1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork 1</button>\n\t\t\t<button>fork 2</button>\n\t\t\t<button>commit</button>\n\t\t\t<p>0</p>\n\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, [0]);\n\n\t\tfork2.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork 1</button>\n\t\t\t<button>fork 2</button>\n\t\t\t<button>commit</button>\n\t\t\t<p>0</p>\n\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, [0]);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>fork 1</button>\n\t\t\t<button>fork 2</button>\n\t\t\t<button>commit</button>\n\t\t\t<p>1</p>\n\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, [0, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-fork-update-same-state/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\t\n\tlet state = $state(0);\n\n\tlet count = $derived(state);\n\n\t$effect.pre(() => {\n\t\tconsole.log(count);\n\t});\n\n\tlet forked;\n</script>\n\n<button onclick={()=>{\n\tforked?.discard?.();\n\tforked = fork(()=>{\n\t\tstate++;\n\t});\n}}>\n\tfork 1\n</button>\n\n<button onclick={()=>{\n\tforked?.discard?.();\n\tforked = fork(()=>{\n\t\tstate++;\n\t})\n}}>\n\tfork 2\n</button>\n\n<button onclick={()=>{\n\tforked?.commit();\n}}>commit</button>\n\n<p>{count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head/A.svelte",
    "content": "<script>\n\tlet { name, content } = $props();\n</script>\n\n<svelte:head>\n\t<meta name={name} content={content} />\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head/B.svelte",
    "content": "<script>\n\tlet { name, content } = $props();\n</script>\n\n<svelte:head>\n\t<meta name=\"{name}-1\" content=\"{content}-1\" />\n\t<meta name=\"{name}-2\" content=\"{content}-2\" />\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, window }) {\n\t\tawait tick();\n\n\t\tconst head = window.document.head;\n\n\t\t// we don't care about the order, but we want to ensure that the\n\t\t// elements didn't clobber each other\n\t\tfor (let n of ['1', '2', '3']) {\n\t\t\tconst a = head.querySelector(`meta[name=\"a-${n}\"]`);\n\t\t\tassert.equal(a?.getAttribute('content'), n);\n\n\t\t\tconst b1 = head.querySelector(`meta[name=\"b-${n}-1\"]`);\n\t\t\tassert.equal(b1?.getAttribute('content'), `${n}-1`);\n\n\t\t\tconst b2 = head.querySelector(`meta[name=\"b-${n}-2\"]`);\n\t\t\tassert.equal(b2?.getAttribute('content'), `${n}-2`);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head/main.svelte",
    "content": "<script lang=\"ts\">\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n</script>\n\n<A name=\"a-1\" content={await 1} />\n<A name=\"a-2\" content={await 2} />\n<B name=\"b-1\" content={1} />\n<A name=\"a-3\" content={await 3} />\n<B name=\"b-2\" content={2} />\n<B name=\"b-3\" content={3} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-1/Inner.svelte",
    "content": "<script>\n\tlet { deferred } = $props();\n\n\tfunction push() {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve());\n\t\treturn d.promise;\n\t}\n</script>\n\n<svelte:head>\n\t<title>title</title>\n</svelte:head>\n\n<p>{await push()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-1/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [toggle, resolve] = target.querySelectorAll('button');\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, 'title');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-1/main.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n\n\tlet deferred = [];\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = !show}>toggle</button>\n<button onclick={() => deferred.pop()()}>resolve</button>\n{#if show}\n\t<Inner {deferred} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-2/Inner.svelte",
    "content": "<script>\n\tlet { deferred } = $props();\n\n\tfunction push() {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve('title'));\n\t\treturn d.promise;\n\t}\n</script>\n\n<svelte:head>\n\t<title>{await push()}</title>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [toggle, resolve] = target.querySelectorAll('button');\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, 'title');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-2/main.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n\n\tlet deferred = [];\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = !show}>toggle</button>\n<button onclick={() => deferred.pop()()}>resolve</button>\n{#if show}\n\t<Inner {deferred} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-3/Inner.svelte",
    "content": "<script>\n\tlet { deferred, title } = $props();\n\n\tfunction push() {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve());\n\t\treturn d.promise;\n\t}\n</script>\n\n<svelte:head>\n\t<title>{title}</title>\n</svelte:head>\n\n<p>{await push()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [toggle, resolve] = target.querySelectorAll('button');\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\ttoggle.click();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, '');\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tawait tick();\n\t\tassert.equal(window.document.title, 'title');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-head-title-3/main.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n\n\tlet deferred = [];\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = !show}>toggle</button>\n<button onclick={() => deferred.pop()()}>resolve</button>\n{#if show}\n\t<Inner {deferred} title=\"title\" />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-html-tag/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>hello</button>\n\t\t<button>goodbye</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, hello, goodbye] = target.querySelectorAll('button');\n\n\t\thello.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>goodbye</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>goodbye</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\tgoodbye.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>goodbye</button>\n\t\t\t\t<h1>goodbye</h1>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-html-tag/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve('hello')}>hello</button>\n<button onclick={() => deferred.resolve('goodbye')}>goodbye</button>\n\n<svelte:boundary>\n\t<h1>{@html await deferred.promise}</h1>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydrate-html-tag/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<div><div><p>first test</p></div> other test</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydrate-html-tag/main.svelte",
    "content": "<script>\n\tfunction firstTest() {\n\t\treturn Promise.resolve('<p>first test</p>');\n\t}\n\n\tfunction otherTest() {\n\t\treturn Promise.resolve('other test');\n\t}\n</script>\n\n<div>\n\t<div>{@html await firstTest()}</div>\n\t{await otherTest()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Async.svelte",
    "content": "<script>\n\tlet data = $derived(await Promise.resolve('test'));\n</script>\n\n<div data-resolved={data ? 'true' : 'false'}>\n\t{data}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Binding.svelte",
    "content": "<script>\n\timport Bound from './Bound.svelte';\n\n\tlet open;\n</script>\n\n<Bound bind:open />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydration-binding/Bound.svelte",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydration-binding/_config.js",
    "content": "import { test } from '../../test';\n\n// Tests that renderer.subsume (which is used when bindings are present) works correctly\nexport default test({\n\tmode: ['hydrate'],\n\thtml: '<div data-resolved=\"true\">test</div>',\n\tasync test({ assert, warnings }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-hydration-binding/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Async from './Async.svelte';\n\timport Binding from './Binding.svelte';\n</script>\n\n<Async />\n<Binding />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>shift</button><button>true</button><button>false</button><p>pending</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [shift, t, f] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>shift</button><button>true</button><button>false</button><h1>yes</h1>'\n\t\t);\n\n\t\tf.click();\n\t\tawait tick();\n\n\t\tt.click();\n\t\tawait tick();\n\n\t\tf.click();\n\t\tawait tick();\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>shift</button><button>true</button><button>false</button><h1>no</h1>'\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>shift</button><button>true</button><button>false</button><h1>yes</h1>'\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>shift</button><button>true</button><button>false</button><h1>no</h1>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if/main.svelte",
    "content": "<script>\n\tlet condition = $state(true);\n\n\tlet deferreds = [];\n\n\tfunction push(value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push({ deferred, value });\n\t\treturn deferred.promise;\n\t}\n</script>\n\n<button onclick={() => {\n\tconst d = deferreds.shift();\n\td?.deferred.resolve(d.value);\n}}>shift</button>\n<button onclick={() => condition = true}>true</button>\n<button onclick={() => condition = false}>false</button>\n\n<svelte:boundary>\n\t{#if await push(condition)}\n\t\t<h1>yes</h1>\n\t{:else}\n\t\t<h1>no</h1>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-after-await-in-script/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tssrHtml: '<p>yep</p>',\n\n\tasync test({ assert, target, variant }) {\n\t\tif (variant === 'dom') {\n\t\t\tawait tick();\n\t\t}\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>yep</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-after-await-in-script/main.svelte",
    "content": "<script>\n\tawait 0;\n\tconst condition = await true;\n</script>\n\n{#if condition}\n\t<p>yep</p>\n{:else}\n\t<p>nope</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-else/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tconst e = target.querySelector('#else-branch');\n\n\t\tassert.equal(e?.isConnected, true);\n\n\t\tawait tick();\n\n\t\tassert.equal(e?.isConnected, true);\n\t\tassert.htmlEqual(target.innerHTML, '<p id=\"else-branch\">else branch</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-else/main.svelte",
    "content": "{#if await false}\n\t<p id=\"if-branch\">if branch</p>\n{:else}\n\t<p id=\"else-branch\">{await 'else branch'}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-hydration/Child.svelte",
    "content": "<script>\n    let { b } = $props();\n</script>\n\n{b}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-hydration/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<div><p>hello</p></div> <div>true</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-hydration/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Child from \"./Child.svelte\";\n\n\tawait 1;\n\tlet b = true;\n\tlet a = true;\n</script>\n\n{#if a}\n\t<div>\n\t\t{#if b}\n\t\t\t<p>hello</p>\n\t\t{/if}\n\t</div>\n\t<div>\n\t\t<Child {b} />\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-nested/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'hydrate', 'client'],\n\tssrHtml: `bar blocking`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'bar blocking');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-if-nested/main.svelte",
    "content": "<script>\n  let foo = $state(false);\n  let blocking = $derived(await foo);\n  let bar = Promise.resolve(true);\n</script>\n\n{#if foo}\n  foo\n{:else if await bar}\n  bar\n{:else}\n  else\n{/if}\n\n{#if foo}\n  foo\n{:else if !blocking}\n  blocking\n{:else}\n  else\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ignore-skipped-block/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [a, b] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>a 0</button><button>b 0</button><p>hello</p>`);\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>a 0</button><button>b 0</button><p>hello</p>`);\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>a 2</button><button>b 0</button><p>hello</p>`);\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>a 2</button><button>b 0</button><p>hello</p>`);\n\n\t\t// if we don't skip over the never-resolving promise in the `else` block, we will never update\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>a 3</button><button>b 1</button><p>hello</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ignore-skipped-block/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet show = $state(true);\n</script>\n\n<button onclick={() => (a++, show = !show)}>a {a}</button>\n<button onclick={() => (b++, show = !show)}>b {b}</button>\n\n{#if show}\n\t<p>hello</p>\n{:else}\n\t{await new Promise(() => {})}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-indirect-blockers/Component1.svelte",
    "content": "<script>\n\tawait 1;\n\n    // Test arrow function style\n\tlet value = $state('');\n\tconst getValue = () => { \n\t\treturn value;\n\t};\n\tconst setValue = (v) => { value = v }\n</script>\n\n<input bind:value={getValue, setValue} />\n<p>{getValue()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-indirect-blockers/Component2.svelte",
    "content": "<script>\n\tawait 1;\n\n    // Test function declaration style\n\tlet value = $state('');\n\tfunction getValue() { return value }\n\tfunction setValue(v) { value = v }\n</script>\n\n<input bind:value={getValue, setValue} />\n<p>{getValue()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-indirect-blockers/Component3.svelte",
    "content": "<script>\n\tawait 1;\n\n    // Test indirect blocker dependencies\n\tlet value = $state('');\n\tfunction x() {\n\t\treturn value;\n\t}\n\tfunction getValue() { \n\t\treturn x()\n\t}\n\tfunction setValue(v) { value = v }\n</script>\n\n<input bind:value={getValue, setValue} />\n<p>{getValue()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-indirect-blockers/Component4.svelte",
    "content": "<script>\n\tawait 1;\n\n\tlet value = $state('');\n\n\t// getValue is declared BEFORE x\n\tfunction getValue() { \n\t\treturn x()\n\t}\n\n\tfunction x() {\n\t\treturn value;\n\t}\n\n\tfunction setValue(v) { value = v }\n</script>\n\n<input bind:value={getValue, setValue} />\n<p>{getValue()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-indirect-blockers/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml:\n\t\t'<input value=\"\"> <p></p> <input value=\"\"> <p></p> <input value=\"\"> <p></p> <input value=\"\"> <p></p>',\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst inputs = Array.from(target.querySelectorAll('input'));\n\t\tconst paragraphs = Array.from(target.querySelectorAll('p'));\n\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tassert.equal(inputs[i].value, '');\n\t\t\tassert.htmlEqual(paragraphs[i].innerHTML, '');\n\n\t\t\tinputs[i].value = 'hello';\n\t\t\tinputs[i].dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\t\tawait tick();\n\n\t\t\tassert.equal(inputs[i].value, 'hello');\n\t\t\tassert.htmlEqual(paragraphs[i].innerHTML, 'hello');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-indirect-blockers/main.svelte",
    "content": "<script>\n\timport Component1 from './Component1.svelte';\n\timport Component2 from './Component2.svelte';\n\timport Component3 from './Component3.svelte';\n\timport Component4 from './Component4.svelte';\n</script>\n\n<Component1 />\n<Component2 />\n<Component3 />\n<Component4 />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-inner-after-outer/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst shift = document.querySelector('button');\n\t\tshift?.click();\n\t\tawait tick();\n\t\tshift?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>true</p>\n\t\t\t<button>toggle</button>\n\t\t\t<button>shift</button>\n\t\t`\n\t\t);\n\n\t\tconst toggle = target.querySelector('button');\n\t\ttoggle?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>true</p>\n\t\t\t<button>toggle</button>\n\t\t\t<button>shift</button>\n\t\t`\n\t\t);\n\n\t\tshift?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>true</p>\n\t\t\t<button>toggle</button>\n\t\t\t<button>shift</button>\n\t\t`\n\t\t);\n\n\t\tshift?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>toggle</button>\n\t\t\t<button>shift</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-inner-after-outer/main.svelte",
    "content": "<script>\n\tlet show = $state(true);\n\tlet count = $state(0);\n\tlet queue = [];\n\n\tfunction foo() {\n\t\tconst {promise, resolve} = Promise.withResolvers();\n\t\tconst s = show;\n\t\tqueue.push(() => resolve(s));\n\t\treturn promise;\n\t}\n\n\tfunction bar() {\n\t\tconst {promise, resolve} = Promise.withResolvers();\n\t\tconst s = show;\n\t\tqueue.push(() => {\n\t\t\t// This will create a new batch while the other batch is still in flight\n\t\t\tcount++\n\t\t\tresolve(s);\n\t\t});\n\t\treturn promise;\n\t}\n\n\t$effect(() => { count; });\n</script>\n\n<svelte:boundary>\n\t{#if await foo()}\n\t\t<p>{await bar()}</p>\n\t{/if}\n\n\t<button onclick={() => {\n\t\tshow = !show\n\t}}>toggle</button>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n\n<button onclick={() => queue.shift()()}>shift</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-inspect-build/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tssrHtml: 'works',\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'works');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-inspect-build/main.svelte",
    "content": "<script lang=\"ts\">\n  const test = async () => \"test\";\n  await test();\n  $inspect(\"inspect after await shouldnt break builds\");\n</script>\n\nworks\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-key/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>1</button>\n\t\t<button>2</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, one, two] = target.querySelectorAll('button');\n\n\t\tconst html = `\n\t\t\t<button>reset</button>\n\t\t\t<button>1</button>\n\t\t\t<button>2</button>\n\t\t\t<h1>hello</h1>\n\t\t`;\n\n\t\tone.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\tconst h1 = target.querySelector('h1');\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\tone.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, html);\n\t\tassert.equal(target.querySelector('h1'), h1);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, html);\n\n\t\ttwo.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, html);\n\t\tassert.notEqual(target.querySelector('h1'), h1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-key/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve(1)}>1</button>\n<button onclick={() => deferred.resolve(2)}>2</button>\n\n<svelte:boundary>\n\t{#key await deferred.promise}\n\t\t<h1>hello</h1>\n\t{/key}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-late-value-init/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'aaa 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-late-value-init/main.svelte",
    "content": "<script>\n\tlet name = $derived(await new Promise((a) => a('aaa')));\n\tfunction use() {\n\t\treturn () => 1;\n\t}\n\tconst aa = use();\n</script>\n\n{name}\n{aa()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-later-sync-overlaps/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b, b, resolve] = target.querySelectorAll('button');\n\n\t\ta_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>a_b 0_0</button> <button>b 0</button> <button>resolve</button> 0'\n\t\t);\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>a_b 0_0</button> <button>b 0</button> <button>resolve</button> 0'\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>a_b 1_2</button> <button>b 2</button> <button>resolve</button> 1'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-later-sync-overlaps/main.svelte",
    "content": "<script>\r\n\tlet a = $state(0);\r\n\tlet b = $state(0);\r\n\tlet deferreds = [];\r\n\r\n\tfunction push(value) {\r\n\t\tif (!value) return value;\r\n\t\treturn new Promise(resolve => {\r\n\t\t\tdeferreds.push(() => resolve(value));\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<button onclick={() => {a++;b++}}>a_b {a}_{b}</button>\r\n<button onclick={() => (b++)}>b {b}</button>\r\n<button onclick={() => (deferreds.shift()?.())}>resolve</button>\r\n{await push(a)}\r\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-linear-order-different-deriveds/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>both</button><button>a</button><button>b</button><p>loading...</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [both, a, b] = target.querySelectorAll('button');\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>both</button><button>a</button><button>b</button>\n\t\t\t\t<p>1 * 2 = 2</p>\n\t\t\t\t<p>2 * 2 = 4</p>\n\t\t\t`\n\t\t);\n\n\t\tboth.click();\n\t\tb.click();\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>both</button><button>a</button><button>b</button>\n\t\t\t\t<p>2 * 2 = 4</p>\n\t\t\t\t<p>4 * 2 = 8</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-linear-order-different-deriveds/main.svelte",
    "content": "<script>\n\tlet a = $state(1);\n\tlet b = $state(2);\n</script>\n\n<button onclick={() => {a += 1; b += 1;}}>both</button>\n<button onclick={() => {a += 1;}}>a</button>\n<button onclick={() => {b += 1;}}>b</button>\n\n<svelte:boundary>\n\t<p>{a} * 2 = {await (a * 2)}</p>\n\t<p>{b} * 2 = {b * 2}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-linear-order-same-derived/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [a, b, shift, pop] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tconst p = /** @type {HTMLElement} */ (target.querySelector('#test'));\n\n\t\tassert.htmlEqual(p.innerHTML, '1 + 2 = 3');\n\n\t\tflushSync(() => a.click());\n\t\tflushSync(() => b.click());\n\n\t\tpop.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(p.innerHTML, '1 + 3 = 4');\n\n\t\tpop.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(p.innerHTML, '2 + 3 = 5');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-linear-order-same-derived/main.svelte",
    "content": "<script>\n\tlet deferreds = [];\n\n\tlet a = $state(1);\n\tlet b = $state(2);\n\n\tasync function push(a, b) {\n\t\tvar d = Promise.withResolvers();\n\t\tdeferreds.push(d);\n\t\tawait d.promise;\n\n\t\treturn a + b;\n\t}\n</script>\n\n<button onclick={() => a++}>a++</button>\n<button onclick={() => b++}>b++</button>\n\n<button onclick={() => deferreds.shift()?.resolve()}>shift</button>\n<button onclick={() => deferreds.pop()?.resolve()}>pop</button>\n\n<svelte:boundary>\n\t<p id=\"test\">{a} + {b} = {await push(a, b)}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-derived/Child.svelte",
    "content": "<script>\n\tlet { count } = $props();\n\n\tasync function x() {\n\t\tlet d = $derived(await new Promise((f) => {}));\n\t}\n\n\tlet indirect = $derived(x() && count);\n</script>\n\n<p>{indirect}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-derived/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>0</button><p>0</p>');\n\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button><p>1</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-derived/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count += 1}>{count}</button>\n\n<svelte:boundary>\n\t<Child {count} />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-top-level/Bar.svelte",
    "content": "<script lang=\"ts\">\n\timport { resolve } from './main.svelte';\n\n\tconst bar = await new Promise((r) => resolve.push(() => r('bar')));\n</script>\n\n<p>bar: {bar}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-top-level/Foo.svelte",
    "content": "<script lang=\"ts\">\n\timport { resolve } from './main.svelte';\n\timport Bar from './Bar.svelte';\n\n\tconst foo = await new Promise((r) => resolve.push(() => r('foo')));\n</script>\n\n<p>foo: {foo}</p>\n\n<Bar/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-top-level/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [show, resolve] = target.querySelectorAll('button');\n\n\t\tshow.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>pending...</p>\n\t\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>pending...</p>\n\t\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>foo: foo</p>\n\t\t\t\t<p>bar: bar</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-nested-top-level/main.svelte",
    "content": "<script module>\n\texport let resolve = [];\n</script>\n\n<script>\n\timport Foo from './Foo.svelte';\n\t\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = true}>\n\tshow\n</button>\n\n<button onclick={() => resolve.shift()()}>\n\tresolve\n</button>\n\n<svelte:boundary>\n\t{#if show}\n\t\t<Foo/>\n\t{/if}\n\n\t{#if $effect.pending()}\n\t\t<p>pending...</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>initializing...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tssrHtml: '<p>hello</p>',\n\n\thtml: '',\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tassert.htmlEqual(p.outerHTML, '<p>hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending/main.svelte",
    "content": "<p>{await Promise.resolve('hello')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-attributes/Child.svelte",
    "content": "<script>\n\tlet { thing } = $props();\n</script>\n\n<p>{thing}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-attributes/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['async-server'],\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p class=\"cool\">cool</p>\n\t\t\t\t<p>beans</p>\n\n\t\t\t\t<p class=\"awesome\">awesome</p>\n\t\t\t\t<p>sauce</p>\n\n\t\t\t\t<p class=\"neato\">neato</p>\n\t\t\t\t<p>burrito</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-attributes/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<p {...await { class: 'cool'}}>cool</p>\n<Child {...await { thing: 'beans' }} />\n\n<p class={await 'awesome'}>awesome</p>\n<Child thing={await 'sauce'} />\n\n<p {...{}} class={await 'neato'}>neato</p>\n<Child {...{}} thing={await 'burrito'} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-block/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tssrHtml: `\n\t\t<h1>hello from the server</h1>\n\t\t<h2>hello from the server</h2>\n\t\t<h3>hello from the server</h3>\n\t`,\n\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>hello from the browser</h1>\n\t\t\t\t<h2>hello from the browser</h2>\n\t\t\t\t<h3>hello from the browser</h3>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-block/main.svelte",
    "content": "<script>\n\tlet { browser = typeof window !== 'undefined' } = $props();\n</script>\n\n{#if await true}\n\t<h1>hello from the {browser ? 'browser' : 'server'}</h1>\n{/if}\n\n<h2>hello from the {browser ? 'browser' : 'server'}</h2>\n<h3>hello from the {browser ? 'browser' : 'server'}</h3>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-script/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tssrHtml: '<p>hello</p>',\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-script/main.svelte",
    "content": "<script lang=\"ts\">\n\tawait 1;\n</script>\n\n{#if true}\n\t<p>hello</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-script-2/Child.svelte",
    "content": "<script lang=\"ts\">\n\tawait 1;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-script-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\n\tssrHtml: '<p>hello</p>',\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-await-in-script-2/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child />\n\n{#if true}\n\t<p>hello</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-throws-sync/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['server'],\n\n\terror: 'await_invalid'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-no-pending-throws-sync/main.svelte",
    "content": "<p>{await Promise.resolve('hello')}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ondestroy-ordering/A.svelte",
    "content": "<script lang=\"ts\">\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\timport C from './C.svelte';\n\tonDestroy(() => destroyed.push('A'));\n</script>\n\n<div>A</div>\n<C/>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ondestroy-ordering/B.svelte",
    "content": "<script lang=\"ts\">\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\n\tonDestroy(() => destroyed.push('B'));\n  onDestroy(() => destroyed.push('B*'))\n</script>\n\n<div>B</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ondestroy-ordering/C.svelte",
    "content": "<script lang=\"ts\">\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\tonDestroy(() => destroyed.push('C'));\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ondestroy-ordering/_config.js",
    "content": "import { test } from '../../test';\nimport { destroyed, reset } from './destroyed.js';\n\nexport default test({\n\tmode: ['async-server'],\n\n\tbefore_test() {\n\t\treset();\n\t},\n\n\ttest_ssr({ assert }) {\n\t\tassert.deepEqual(destroyed, ['C', 'A', 'B', 'B*', 'root']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ondestroy-ordering/destroyed.js",
    "content": "/** @type {string[]} */\nexport const destroyed = [];\n\nexport const reset = () => (destroyed.length = 0);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ondestroy-ordering/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { onDestroy } from 'svelte';\n\timport { destroyed } from './destroyed.js';\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\tonDestroy(() => destroyed.push('root'));\n</script>\n\n{#if await Promise.resolve(true)}\n\t<A/>\n{/if}\n<B/>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-1/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b, a_c, b_d, shift, pop] = target.querySelectorAll('button');\n\n\t\ta_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tb_d.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 1 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 2 | b 1 | c 1 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 2 | b 2 | c 1 | d 1\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-1/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet d = $state(0);\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {await delay(a)} | b {await delay(b)} | c {c} | d {d}\n<button onclick={() => {a++;b++;}}>\n\ta and b\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => {b++;d++;}}>\n\tb and d\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b, a_c, b_d, shift, pop] = target.querySelectorAll('button');\n\n\t\ta_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tb_d.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tpop.click(); // second b resolved, blocked on first batch because a still pending\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tpop.click(); // second a resolved, first a/b now obsolete; empty queue\n\t\t\tawait tick();\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\ta 2 | b 2 | c 1 | d 1\n\t\t\t\t<button>a and b</button>\n\t\t\t\t<button>a and c</button>\n\t\t\t\t<button>b and d</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t`\n\t\t\t);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-2/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet d = $state(0);\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {await delay(a)} | b {await delay(b)} | c {c} | d {d}\n<button onclick={() => {a++;b++;}}>\n\ta and b\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => {b++;d++;}}>\n\tb and d\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b, a_c, b_d, shift, pop] = target.querySelectorAll('button');\n\n\t\ta_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tb_d.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // first a resolved, still pending: [b, a, b]\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tpop.click(); // second b resolved, still pending: [b, a]\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // first b resolved, first + last batch settled, still pending: [a]\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 2 | c 0 | d 1\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // all resolved\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 2 | b 2 | c 1 | d 1\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-3/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet d = $state(0);\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {await delay(a)} | b {await delay(b)} | c {c} | d {d}\n<button onclick={() => {a++;b++;}}>\n\ta and b\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => {b++;d++;}}>\n\tb and d\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-4/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b, a_c, b_d, shift, pop] = target.querySelectorAll('button');\n\n\t\ta_b.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tb_d.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // first a resolved, still pending: [b, a, b]\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tpop.click(); // second b resolved, still pending: [b, a]\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tpop.click(); // second a resolved, first a/b now obsolete\n\t\t// TODO would be nice to show final result here already, right now it doesn't because\n\t\t// we have no handle on the already resolved first a anymore\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // queue empty\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 2 | b 2 | c 1 | d 1\n\t\t\t<button>a and b</button>\n\t\t\t<button>a and c</button>\n\t\t\t<button>b and d</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-4/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet d = $state(0);\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {await delay(a)} | b {await delay(b)} | c {c} | d {d}\n<button onclick={() => {a++;b++;}}>\n\ta and b\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => {b++;d++;}}>\n\tb and d\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-5/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a, c, shift, pop] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tc.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\t// how it's on main\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 1 | d 1\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 2 | c 1 | d 3\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\t// how it's on https://github.com/sveltejs/svelte/pull/17971\n\t\t// shift.click();\n\t\t// await tick();\n\t\t// assert.htmlEqual(\n\t\t// \ttarget.innerHTML,\n\t\t// \t`\n\t\t// \ta 0 | b 0 | c 0 | d 0\n\t\t// \t<button>a++</button>\n\t\t// \t<button>c++</button>\n\t\t// \t<button>shift</button>\n\t\t// \t<button>pop</button>\n\t\t// `\n\t\t// );\n\n\t\t// shift.click();\n\t\t// await tick();\n\t\t// assert.htmlEqual(\n\t\t// \ttarget.innerHTML,\n\t\t// \t`\n\t\t// \ta 1 | b 2 | c 0 | d 2\n\t\t// \t<button>a++</button>\n\t\t// \t<button>c++</button>\n\t\t// \t<button>shift</button>\n\t\t// \t<button>pop</button>\n\t\t// `\n\t\t// );\n\n\t\t// shift.click();\n\t\t// await tick();\n\t\t// assert.htmlEqual(\n\t\t// \ttarget.innerHTML,\n\t\t// \t`\n\t\t// \ta 1 | b 2 | c 1 | d 3\n\t\t// \t<button>a++</button>\n\t\t// \t<button>c++</button>\n\t\t// \t<button>shift</button>\n\t\t// \t<button>pop</button>\n\t\t// `\n\t\t// );\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-5/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $derived(await delay(a * 2));\n\tlet c = $state(0);\n\tlet d = $derived(await delay(b + c));\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value; \n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {a} | b {b} | c {c} | d {d}\n<button onclick={() => {a++;}}>\n\ta++\n</button>\n<button onclick={() => {c++;}}>\n\tc++\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-6/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a, c, shift, pop] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tc.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\t// Although the second batch is eventually connected to the first one, we can't see that\n\t\t// at this point yet and so the second one flushes right away.\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 1 | d 1\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 1 | d 1\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 2 | c 1 | d 3\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-6/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $derived(await delay(a * 2));\n\tlet c = $state(0);\n\tlet d = $derived(await delay(b + c));\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value; \n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {a} | b {b} | c {c} | d {d}\n<button onclick={() => {a++;}}>\n\ta++\n</button>\n<button onclick={() => {c++;}}>\n\tc++\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-7/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a, c, shift, pop] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tc.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // schedules second step of first batch and schedules rerun of second batch\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 0 | b 0 | c 0 | d 0\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\t// how it's on main\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 2 | c 0 | d 2\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // obsolete second batch promise (already rejected)\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 2 | c 0 | d 2\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\tshift.click(); // first batch resolves\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\ta 1 | b 2 | c 1 | d 3\n\t\t\t<button>a++</button>\n\t\t\t<button>c++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t`\n\t\t);\n\n\t\t// how it's on https://github.com/sveltejs/svelte/pull/17971\n\t\t// pop.click(); // second batch resolves but knows it needs to wait on first batch\n\t\t// await tick();\n\t\t// assert.htmlEqual(\n\t\t// \ttarget.innerHTML,\n\t\t// \t`\n\t\t// \ta 0 | b 0 | c 0 | d 0\n\t\t// \t<button>a++</button>\n\t\t// \t<button>c++</button>\n\t\t// \t<button>shift</button>\n\t\t// \t<button>pop</button>\n\t\t// `\n\t\t// );\n\n\t\t// shift.click(); // obsolete second batch promise (already rejected)\n\t\t// await tick();\n\t\t// assert.htmlEqual(\n\t\t// \ttarget.innerHTML,\n\t\t// \t`\n\t\t// \ta 0 | b 0 | c 0 | d 0\n\t\t// \t<button>a++</button>\n\t\t// \t<button>c++</button>\n\t\t// \t<button>shift</button>\n\t\t// \t<button>pop</button>\n\t\t// `\n\t\t// );\n\n\t\t// shift.click(); // first batch resolves, with it second can now resolve as well\n\t\t// await tick();\n\t\t// assert.htmlEqual(\n\t\t// \ttarget.innerHTML,\n\t\t// \t`\n\t\t// \ta 1 | b 2 | c 1 | d 3\n\t\t// \t<button>a++</button>\n\t\t// \t<button>c++</button>\n\t\t// \t<button>shift</button>\n\t\t// \t<button>pop</button>\n\t\t// `\n\t\t// );\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-7/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $derived(await delay(a * 2));\n\tlet c = $state(0);\n\tlet d = $derived(await delay(b + c));\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value; \n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\na {a} | b {b} | c {c} | d {d}\n<button onclick={() => {a++;}}>\n\ta++\n</button>\n<button onclick={() => {c++;}}>\n\tc++\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-fork-1/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b_fork, a_c, shift, pop, commit] = target.querySelectorAll('button');\n\t\tconst [p] = target.querySelectorAll('p');\n\n\t\ta_b_fork.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0');\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0');\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 0 | c 1');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 0 | c 1');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 0 | c 1');\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-fork-1/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<p>a {await delay(a)} | b {await delay(b)} | c {c}</p>\n\n<button onclick={() => {f = fork(() => {a++;b++;});}}>\n\ta and b (fork)\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => f.commit()}>commit fork</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-fork-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b_fork, a_c, b_d, shift, pop, commit] = target.querySelectorAll('button');\n\t\tconst [p] = target.querySelectorAll('p');\n\n\t\ta_b_fork.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\tb_d.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 1 | c 0 | d 1');\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1 | d 1');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1 | d 1');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1 | d 1');\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1 | d 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-fork-2/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet d = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<p>a {await delay(a)} | b {await delay(b)} | c {c} | d {d}</p>\n\n<button onclick={() => {f = fork(() => {a++;b++;});}}>\n\ta and b (fork)\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => {b++;d++;}}>\n\tb and d\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => f.commit()}>commit fork</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-fork-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true,\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tconst [a_b_fork, a_c, b_d, shift, pop, commit] = target.querySelectorAll('button');\n\t\tconst [p] = target.querySelectorAll('p');\n\n\t\ta_b_fork.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\ta_c.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\tb_d.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 0 | b 0 | c 0 | d 0');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 0 | c 1 | d 0');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1 | d 1');\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a 1 | b 1 | c 1 | d 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlap-multiple-fork-3/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tlet d = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (!value) return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<p>a {await delay(a)} | b {await delay(b)} | c {c} | d {d}</p>\n\n<button onclick={() => {f = fork(() => {a++;b++;});}}>\n\ta and b (fork)\n</button>\n<button onclick={() => {a++;c++;}}>\n\ta and c\n</button>\n<button onclick={() => {b++;d++;}}>\n\tb and d\n</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => f.commit()}>commit fork</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlapping-array/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [add, shift, pop] = target.querySelectorAll('button');\n\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=6 values.length=1 values=[1]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=4 values.length=2 values=[1,2]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=2 values.length=3 values=[1,2,3]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=0 values.length=4 values=[1,2,3,4]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\t\tadd.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=8 values.length=4 values=[1,2,3,4]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\t// pop should have no effect until earlier promises have also resolved\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=6 values.length=4 values=[1,2,3,4]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<button>pop</button>\n\t\t\t\t<p>pending=0 values.length=8 values=[1,2,3,4,5,6,7,8]</p>\n\t\t\t\t<div>not keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t\t<div>5</div>\n\t\t\t\t\t<div>6</div>\n\t\t\t\t\t<div>7</div>\n\t\t\t\t\t<div>8</div>\n\t\t\t\t</div>\n\t\t\t\t<div>keyed:\n\t\t\t\t\t<div>1</div>\n\t\t\t\t\t<div>2</div>\n\t\t\t\t\t<div>3</div>\n\t\t\t\t\t<div>4</div>\n\t\t\t\t\t<div>5</div>\n\t\t\t\t\t<div>6</div>\n\t\t\t\t\t<div>7</div>\n\t\t\t\t\t<div>8</div>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-overlapping-array/main.svelte",
    "content": "<script>\n\tlet values = $state([1]);\n\n\tconst queue = [];\n\n\tfunction push(v) {\n\t\tif (v === 1) return v;\n\n\t\tconst p = Promise.withResolvers();\n\t\tqueue.push(() => p.resolve(v));\n\t\treturn p.promise;\n\t}\n\n\tfunction addValue() {\n\t\tvalues.push(values.length+1);\n\t}\n</script>\n\n<button onclick={addValue}>add</button>\n<button onclick={() => queue.shift()?.()}>shift</button>\n<button onclick={() => queue.pop()?.()}>pop</button>\n\n<p>\n\tpending={$effect.pending()}\n\tvalues.length={values.length}\n\tvalues=[{values}]\n</p>\n\n<div>\n\tnot keyed:\n\t{#each values as v}\n\t\t<div>\n\t\t\t{await push(v)}\n\t\t</div>\n\t{/each}\n</div>\n<div>\n\tkeyed:\n\t{#each values as v(v)}\n\t\t<div>\n\t\t\t{await push(v)}\n\t\t</div>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ownership-validation/Child.svelte",
    "content": "<script>\n\tlet { object } = $props();\n\n\tawait 1;\n</script>\n\n<button onclick={() => object.count++}>clicks: {object.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ownership-validation/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, warnings }) {\n\t\tawait tick();\n\n\t\tconst [button] = target.querySelectorAll('button');\n\n\t\tbutton.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>clicks: 1</button>');\n\t\tassert.deepEqual(warnings, [\n\t\t\t'Mutating unbound props (`object`, at Child.svelte:7:23) is strongly discouraged. Consider using `bind:object={...}` in main.svelte (or using a callback) instead'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-ownership-validation/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet object = $state({ count: 0 });\n</script>\n\n<svelte:boundary>\n\t<Child {object} />\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-pending-effect/Component.svelte",
    "content": "<script lang=\"ts\">\n\tlet x = $state(false);\n\n\t$effect(() => {\n\t\tx = true;\n\n\t\treturn () => {\n\t\t\tx = false;\n\t\t}\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-pending-effect/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t// This test causes two batches to be scheduled such that the same root is traversed multiple times,\n\t\t// some of the time while it was already marked clean by a previous batch processing. It tests\n\t\t// that the app stays reactive after, i.e. that the root is not improperly marked as unclean.\n\t\tawait tick();\n\t\tconst [button] = target.querySelectorAll('button');\n\n\t\tbutton.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button><p>hello</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-pending-effect/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Component from './Component.svelte';\n\n\tlet condition = $state(false);\n</script>\n\n<button onclick={() => (condition = !condition)}>toggle</button>\n\n<svelte:boundary>\n\t<Component whatever={await 1} />\n\n\t{#snippet pending()}\n\t\t<Component />\n\t{/snippet}\n</svelte:boundary>\n\n{#if condition}\n\t<p>hello</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-prop/Child.svelte",
    "content": "<script>\n\tlet { value } = $props();\n</script>\n\n<h1>{value}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-prop/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>hello</button>\n\t\t<button>again</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, hello, again] = target.querySelectorAll('button');\n\n\t\thello.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>again</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>again</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\tagain.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>again</button>\n\t\t\t\t<h1>hello again</h1>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-prop/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve('hello')}>hello</button>\n<button onclick={() => deferred.resolve('hello again')}>again</button>\n\n<svelte:boundary>\n\t<Child value={await deferred.promise} />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-props-id/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<p>s1</p>`,\n\n\tasync test({ assert, target, variant }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, variant === 'hydrate' ? '<p>s1</p>' : '<p>c1</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-props-id/main.svelte",
    "content": "<script>\n\tawait 1\n\tconst id = $props.id();\n</script>\n\n<p>{id}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-push-element-dev/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server'],\n\n\tcompileOptions: {\n\t\t// include `push_element` calls, so that we can check they\n\t\t// run with the correct ssr_context\n\t\tdev: true\n\t},\n\n\thtml: `\n\t\t<h1>hello!</h1>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-push-element-dev/main.svelte",
    "content": "{#if await true}\n\t<h1>hello!</h1>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reactivity-loss/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<button>a</button><button>b</button><button>c</button><p>pending</p>`,\n\n\tasync test({ assert, target, warnings }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>a</button><button>b</button><button>c</button><h1>6</h1><p>6</p>'\n\t\t);\n\n\t\tassert.equal(\n\t\t\twarnings[0],\n\t\t\t'Detected reactivity loss when reading `b`. This happens when state is read in an async function after an earlier `await`'\n\t\t);\n\n\t\tassert.equal(warnings[1].name, 'traced at');\n\n\t\tassert.equal(warnings.length, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reactivity-loss/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\tlet a = $state(1);\n\tlet b = $state(2);\n\tlet c = $state(3);\n\n\tasync function a_plus_b_plus_c() {\n\t\treturn await a + await b + await untrack(() => c);\n\t}\n</script>\n\n<button onclick={() => a++}>a</button>\n<button onclick={() => b++}>b</button>\n<button onclick={() => c++}>c</button>\n\n<svelte:boundary>\n\t<h1>{await a_plus_b_plus_c()}</h1>\n\t<p>{await a + await b + await c}</p>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reactivity-loss-for-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<button>a</button><button>b</button><p>pending</p>`,\n\n\tasync test({ assert, target, warnings }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>a</button><button>b</button><h1>3</h1>');\n\n\t\tassert.deepEqual(normalise_trace_logs(warnings), [\n\t\t\t{\n\t\t\t\tlog: 'Detected reactivity loss when reading `values.length`. This happens when state is read in an async function after an earlier `await`'\n\t\t\t}\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reactivity-loss-for-await/main.svelte",
    "content": "<script>\n\tlet values = $state([1, 2]);\n\n\tasync function get_total() {\n\t\tlet total = 0;\n\n\t\tfor await (const n of values) {\n\t\t\ttotal += n;\n\t\t}\n\n\t\treturn total;\n\t}\n</script>\n\n<button onclick={() => values[0]++}>a</button>\n<button onclick={() => values[1]++}>b</button>\n\n<svelte:boundary>\n\t<h1>{await get_total()}</h1>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reactivity-loss-for-await-break-return/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\thtml: '<p>pending</p>',\n\tasync test({ assert, target, warnings }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<h1>number -> number -> number -> return -> ended</h1>');\n\n\t\tassert.deepEqual(normalise_trace_logs(warnings), [\n\t\t\t{\n\t\t\t\tlog: 'Detected reactivity loss when reading `values.length`. This happens when state is read in an async function after an earlier `await`'\n\t\t\t}\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reactivity-loss-for-await-break-return/main.svelte",
    "content": "<script>\n\tlet values = $state([0, 1, 2]);\n\n\tasync function get_result() {\n\t\tconst logs = [];\n\n\t\tconst iterator = {\n\t\t\tindex: 0,\n\t\t\tasync next() {\n\t\t\t\tif (this.index >= values.length) return { done: true };\n\t\t\t\treturn { done: false, value: values[this.index++] };\n\t\t\t},\n\t\t\tasync return() {\n\t\t\t\tlogs.push('return');\n\t\t\t\treturn { done: true };\n\t\t\t},\n\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t};\n\n\t\tfor await (const value of iterator) {\n\t\t\tlogs.push('number');\n\t\t\t// read reactive state after async iterator await\n\t\t\tif (values.length === 3 && value === 2) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlogs.push('ended');\n\t\treturn logs.join(' -> ');\n\t}\n</script>\n\n<svelte:boundary>\n\t<h1>{await get_result()}</h1>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-redirect/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>a</h1>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>c</button>\n\t\t\t\t<button>ok</button>\n\t\t\t\t<p>a</p>\n\t\t\t`\n\t\t);\n\n\t\tconst [a, b, c, ok] = target.querySelectorAll('button');\n\n\t\tb.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>c</h1>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>c</button>\n\t\t\t\t<button>ok</button>\n\t\t\t\t<p>c</p>\n\t\t\t\t<p>b or c</p>\n\t\t\t`\n\t\t);\n\n\t\tok.click();\n\n\t\tb.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>b</h1>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>c</button>\n\t\t\t\t<button>ok</button>\n\t\t\t\t<p>b</p>\n\t\t\t\t<p>b or c</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-redirect/main.svelte",
    "content": "<script lang=ts>\n\tlet route = $state('a');\n\tlet ok = $state(false);\n\n\tfunction goto(r) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\troute = r;\n\t\t\tthrow new Error('nope');\n\t\t});\n\t}\n</script>\n\n<h1>{route}</h1>\n<button onclick={() => route = 'a'}>a</button>\n<button onclick={() => route = 'b'}>b</button>\n<button onclick={() => route = 'c'}>c</button>\n<button onclick={() => ok = true}>ok</button>\n\n<svelte:boundary>\n\t{#if route === 'a'}\n\t\t<p>a</p>\n\t{/if}\n\n\t{#if route === 'b'}\n\t\t{#if ok}\n\t\t\t<p>b</p>\n\t\t{:else}\n\t\t\t{await goto('c')}\n\t\t{/if}\n\t{/if}\n\n\t{#if route === 'c'}\n\t\t<p>c</p>\n\t{/if}\n\n\t{#if route === 'b' || route === 'c'}\n\t\t<p>b or c</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending...</p>\n\t{/snippet}\n\n\t{#snippet failed(error, reset)}\n\t\t<button onclick={reset}>retry</button>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-redirect-initial/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [a, b, c, ok] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>b</h1>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>c</button>\n\t\t\t\t<button>ok</button>\n\t\t\t\t<p>pending...</p>\n\t\t\t`\n\t\t);\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>c</h1>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>c</button>\n\t\t\t\t<button>ok</button>\n\t\t\t\t<p>c</p>\n\t\t\t`\n\t\t);\n\n\t\tok.click();\n\n\t\tb.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<h1>b</h1>\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>c</button>\n\t\t\t\t<button>ok</button>\n\t\t\t\t<p>b</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-redirect-initial/main.svelte",
    "content": "<script lang=ts>\n\tlet route = $state('b');\n\tlet ok = $state(false);\n\n\tfunction goto(r) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\troute = r;\n\t\t\tthrow new Error('nope');\n\t\t});\n\t}\n</script>\n\n<h1>{route}</h1>\n<button onclick={() => route = 'a'}>a</button>\n<button onclick={() => route = 'b'}>b</button>\n<button onclick={() => route = 'c'}>c</button>\n<button onclick={() => ok = true}>ok</button>\n\n<svelte:boundary>\n\t{#if route === 'a'}\n\t\t<p>a</p>\n\t{/if}\n\n\t{#if route === 'b'}\n\t\t{#if ok}\n\t\t\t<p>b</p>\n\t\t{:else}\n\t\t\t{await goto('c')}\n\t\t{/if}\n\t{/if}\n\n\t{#if route === 'c'}\n\t\t<p>c</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending...</p>\n\t{/snippet}\n\n\t{#snippet failed(error, reset)}\n\t\t<button onclick={reset}>retry</button>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'value');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/app.svelte",
    "content": "<script>\n\tconst value = await 'value';\n</script>\n\n{#snippet valueSnippet()}\n\t{value}\n{/snippet}\n\n{@render valueSnippet()}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reference-in-snippet/main.svelte",
    "content": "<script>\n    import App from './app.svelte';\n</script>\n<svelte:boundary>\n    {#snippet pending()}\n    {/snippet}\n    <App />\n</svelte:boundary>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-component-hydration/Image.svelte",
    "content": "<script>\n\tlet { src } = $props();\n</script>\n\n<img {src} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-component-hydration/Link.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n<a href=\"/\">\n\t{@render children()}\n</a>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-component-hydration/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<a href=\"/\"><div>card</div> <img src=\"https://svelte.dev\" /></a>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-component-hydration/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Image from \"./Image.svelte\";\n\timport Link from \"./Link.svelte\";\n\n\tlet url = $derived(await 'https://svelte.dev');\n</script>\n\n<Link>\n\t<div>card</div>\n\t<Image src={url} />\n</Link>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-hydration/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `Count: 1 Double: 2`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-hydration/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(1);\n\tasync function getDouble(count: number) {\n\t\treturn count * 2;\n\t}\n\tconst double = $derived(await getDouble(count));\n</script>\n\nCount: {count}\n\n{#snippet ssr(num: number)}\n\t{num}\n{/snippet}\n\nDouble: {@render ssr(double)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-tag/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>hello</button>\n\t\t<button>wheee</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, hello, wheee] = target.querySelectorAll('button');\n\n\t\thello.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>wheee</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>wheee</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\twheee.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>hello</button>\n\t\t\t\t<button>wheee</button>\n\t\t\t\t<h1>wheee</h1>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-render-tag/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve('hello')}>hello</button>\n<button onclick={() => deferred.resolve('wheee')}>wheee</button>\n\n{#snippet hello(message)}\n\t<h1>{message}</h1>\n{/snippet}\n\n<svelte:boundary>\n\t{@render hello(await deferred.promise)}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reschedule-during-flush/Child.svelte",
    "content": "<script>\n\t$effect(() => {})\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reschedule-during-flush/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [a, b, resolve] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\n\t\tb.click();\n\t\tawait tick();\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a (true)</button>\n\t\t\t\t<button>b (true)</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t42\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-reschedule-during-flush/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet a = $state(false);\n\tlet b = $state(false);\n\n\tlet deferred = [];\n\n\tfunction push(value) {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve(value))\n\t\treturn d.promise;\n\t}\n</script>\n\n<button onclick={() => a = !a}>a ({a})</button>\n<button onclick={() => b = !b}>b ({b})</button>\n<button onclick={() => deferred.shift()()}>resolve</button>\n\n{#if a}\n\t{await push(42)}\n\t<Child />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-resolve-stale/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t// We gotta wait a bit more in this test because of the macrotasks in App.svelte\n\t\tfunction sleep(t = 50) {\n\t\t\treturn new Promise((r) => setTimeout(r, t));\n\t\t}\n\n\t\tawait sleep();\n\t\tassert.htmlEqual(target.innerHTML, '<input> 1 | ');\n\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tinput.value = '1';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tawait sleep();\n\t\tassert.htmlEqual(target.innerHTML, '<input> 1 | ');\n\n\t\tinput.value = '12';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tawait sleep();\n\t\tassert.htmlEqual(target.innerHTML, '<input> 3 | 12');\n\n\t\tinput.value = '';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tawait sleep();\n\t\tassert.htmlEqual(target.innerHTML, '<input> 4 | ');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-resolve-stale/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet value = $state('');\n\n\tlet resolver;\n\n\tfunction asd(v) {\n\t\tlet r = Promise.withResolvers();\n\n\t\tfunction update_and_resolve() {\n\t\t\tcount++;\n\t\t\tr.resolve(v);\n\t\t}\n\n\t\t// make sure the second promise resolve before the first one\n\t\tif (resolver){\n\t\t\tnew Promise(r => {\n\t\t\t\tsetTimeout(r);\n\t\t\t}).then(update_and_resolve).then(() => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tresolver();\n\t\t\t\t\tresolver = null;\n\t\t\t\t});\n\t\t\t});\n\t\t} else if (v) {\n\t\t\tresolver = update_and_resolve;\n\t\t} else {\n\t\t\tPromise.resolve().then(update_and_resolve);\n\t\t}\n\n\t\treturn r.promise;\n\t}\n\n\tconst x = $derived(await asd(value))\n</script>\n\n<input bind:value />\n\n{count} | {x}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-select-dynamic-options-while-focused/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [add, shift, reset] = target.querySelectorAll('button');\n\n\t\t// resolve initial pending state\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tconst [p] = target.querySelectorAll('p');\n\n\t\tconst select = /** @type {HTMLSelectElement} */ (target.querySelector('select'));\n\t\tassert.equal(select.value, 'a');\n\n\t\t// add option 'c', making items ['a', 'b', 'c']\n\t\tadd.click();\n\t\tawait tick();\n\n\t\t// select 'b' while focused\n\t\tselect.focus();\n\t\tselect.value = 'b';\n\t\tselect.dispatchEvent(new InputEvent('change', { bubbles: true }));\n\t\tawait tick();\n\n\t\tassert.equal(select.value, 'b');\n\t\tassert.equal(p.textContent, 'a');\n\n\t\t// add option 'd', making items ['a', 'b', 'c', 'd']\n\t\t// this triggers MutationObserver which uses select.__value\n\t\tadd.click();\n\t\tawait tick();\n\n\t\t// select should still show 'b', not snap to a stale value\n\t\tassert.equal(select.value, 'b');\n\t\tassert.equal(p.textContent, 'a');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.equal(select.value, 'b');\n\t\tassert.equal(p.textContent, 'b');\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.equal(select.value, 'b');\n\t\tassert.equal(p.textContent, 'b');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.equal(select.value, 'a');\n\t\tassert.equal(p.textContent, 'a');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-select-dynamic-options-while-focused/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet selected = $state('a');\n\tlet items = $state(['a', 'b']);\n\n\tlet resolvers = [];\n\tlet select;\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => items.push(String.fromCharCode(97 + items.length))}>add</button>\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n<button onclick={() => selected = 'a'}>reset</button>\n\n<svelte:boundary>\n\t<select bind:this={select} bind:value={selected}>\n\t\t{#each items as item}\n\t\t\t<option value={item}>{item}</option>\n\t\t{/each}\n\t</select>\n\n\t<p>{await push(selected)}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-set-context/A.svelte",
    "content": "<script lang=\"ts\">\n\timport { setContext } from \"svelte\";\n\timport B from \"./B.svelte\";\n\n\tlet greeting = 'hello';\n\tsetContext(\"greeting\", greeting);\n\n\tawait Promise.resolve();\n\n\tlet recipient = 'world';\n</script>\n\n<B {recipient} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-set-context/B.svelte",
    "content": "<script lang=\"ts\">\n\timport { setContext } from \"svelte\";\n\timport C from \"./C.svelte\";\n\n\tlet { recipient } = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tsetContext(\"recipient\", recipient);\n\tawait Promise.resolve();\n</script>\n\n<C />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-set-context/C.svelte",
    "content": "<script lang=\"ts\">\n\timport { getContext } from \"svelte\";\n\n  let greeting = getContext(\"greeting\");\n  let recipient = getContext(\"recipient\");\n</script>\n\n<p>{greeting} {recipient}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-set-context/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'async-server'],\n\tssrHtml: `<p>hello world</p>`,\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>hello world</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-set-context/main.svelte",
    "content": "<script lang=\"ts\">\n\timport A from \"./A.svelte\";\n\n\tawait Promise.resolve();\n</script>\n\n<A />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-settled-after-dom/_config.js",
    "content": "import { settled, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tasync test({ assert, target }) {\n\t\tconst [shift, update] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>shift</button><button>update</button><p>hello</p>');\n\n\t\tupdate.click();\n\t\tconst promise = settled();\n\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait promise;\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>shift</button><button>update</button><p>goodbye</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-settled-after-dom/main.svelte",
    "content": "<script>\n\tlet text = $state('hello');\n\n\tconst resolvers = [];\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n<button onclick={() => text = 'goodbye'}>update</button>\n\n<svelte:boundary>\n\t<p>{await push(text)}</p>\n\n\t{#snippet pending()}{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-settled-blockers-hydration/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['server'],\n\tskip_no_async: true,\n\n\tssrHtml: `<div>1</div><p>after</p>`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<div>1</div><p>after</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-settled-blockers-hydration/main.svelte",
    "content": "<script>\n\tconst n = $derived(await Promise.resolve(1));\n</script>\n\n{#snippet child(n)}\n\t<div>{n}</div>\n{/snippet}\n\n{#if n}\n\t{@render child(n)}\n{/if}\n\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-skipped-branch/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork_btn, counter_btn] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tfork_btn.click();\n\t\t});\n\n\t\tassert.equal(counter_btn.textContent, '0');\n\n\t\tflushSync(() => {\n\t\t\tcounter_btn.click();\n\t\t});\n\n\t\tassert.equal(counter_btn.textContent, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-skipped-branch/main.svelte",
    "content": "<script>\n\tlet show = $state(false);\n\tlet show_async = $state(false);\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => {\n\tshow = true;\n\tshow_async = true;\n}}>show</button>\n\n{#if show}\n\thi\n{:else}\n\t{#if show || !show}\n\t\t<button onclick={() => count++}>{count}</button>\n\t{/if}\n{/if}\n\n{#if show_async}\n\t{await new Promise(() => {})}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-slot/Child.svelte",
    "content": "<slot message={await 'hello'}></slot>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-slot/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>loading...</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-slot/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary>\n\t<Child let:message>\n\t\t<p>{message}</p>\n\t</Child>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-snippet-coordinated-mount/Child.svelte",
    "content": "<script>\n\tlet { children, push } = $props();\n\tlet message = await push('hello from child');\n</script>\n\n<p>message: {message}</p>\n{@render children()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-snippet-coordinated-mount/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [shift] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>shift</button><p>loading...</p>`);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>message: hello from child</p>\n\t\t\t\t<p>hello from parent</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-snippet-coordinated-mount/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\tconst resolvers = [];\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n\n<svelte:boundary>\n\t<Child {push}>\n\t\t<p>{await push('hello from parent')}</p>\n\t</Child>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-stale-derived/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [increment, shift] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift</button>\n\t\t\t\t<p>delayed: 3</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-stale-derived/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n\n\tlet deferreds = [];\n\n\tfunction push() {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push(deferred);\n\t\treturn deferred.promise;\n\t}\n</script>\n\n<button onclick={() => count += 1}>increment</button>\n<button onclick={() => deferreds.shift()?.resolve(count)}>shift</button>\n\n<svelte:boundary>\n\t{#if count % 2}\n\t\t<p>delayed: {await push()}</p>\n\t{:else}\n\t\t<p>{await count}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-stale-derived-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO this one is tricky\n\n\tasync test({ assert, target }) {\n\t\tconst [increment, a, b] = target.querySelectorAll('button');\n\n\t\ta.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift a</button>\n\t\t\t\t<button>shift b</button>\n\t\t\t\t<p>a: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\ta.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift a</button>\n\t\t\t\t<button>shift b</button>\n\t\t\t\t<p>a: 0</p>\n\t\t\t`\n\t\t);\n\n\t\tb.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<button>shift a</button>\n\t\t\t\t<button>shift b</button>\n\t\t\t\t<p>b: 0</p\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-stale-derived-2/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n\n\tlet a = [];\n\tlet b = [];\n\n\tfunction push(deferreds, value) {\n\t\tconst deferred = Promise.withResolvers();\n\t\tdeferreds.push({ deferred, value });\n\t\treturn deferred.promise;\n\t}\n</script>\n\n<button onclick={() => count += 1}>increment</button>\n<button onclick={() => {\n\tconst d = a.shift();\n\td?.deferred.resolve(d.value);\n}}>shift a</button>\n<button onclick={() => {\n\tconst d = b.shift();\n\td?.deferred.resolve(d.value);\n}}>shift b</button>\n\n<svelte:boundary>\n\t{#if count % 2 === 0}\n\t\t<p>a: {await push(a, count)}</p>\n\t{:else}\n\t\t<p>b: {await push(b, count)}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-eager/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [count, shift] = target.querySelectorAll('button');\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button><button>shift</button><p>0</p>`);\n\n\t\tcount.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>shift</button><p>0</p>`);\n\n\t\tcount.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button><button>shift</button><p>0</p>`);\n\n\t\tcount.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>3</button><button>shift</button><p>0</p>`);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>3</button><button>shift</button><p>1</p>`);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>3</button><button>shift</button><p>2</p>`);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>3</button><button>shift</button><p>3</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-eager/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tlet resolvers = [];\n\n\tfunction push(value) {\n\t\tconst { promise, resolve } = Promise.withResolvers();\n\t\tresolvers.push(() => resolve(value));\n\t\treturn promise;\n\t}\n</script>\n\n<button onclick={() => count += 1}>{$state.eager(count)}</button>\n<button onclick={() => resolvers.shift()?.()}>shift</button>\n\n<svelte:boundary>\n\t<p>{await push(count)}</p>\n\n\t{#snippet pending()}{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n\tconsole.log(x);\n\t$effect(() => console.log('$effect: '+ x))\n</script>\n\n{x}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [x, y, resolve] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, ['universe']);\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, ['universe', 'world', '$effect: world']);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\tworld\n\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [\n\t\t\t'universe',\n\t\t\t'world',\n\t\t\t'$effect: world',\n\t\t\t'$effect: universe',\n\t\t\t'$effect: universe'\n\t\t]);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet deferred = [];\n\n\tfunction delay(s) {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve(s))\n\t\treturn d.promise;\n\t}\n</script>\n\n<button onclick={() => x = 'universe'}>x</button>\n\n<button onclick={() => y++}>y++</button>\n\n<button onclick={() => deferred.shift()()}>resolve</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n{#if y > 0}\n\t<Child {x} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n\tconsole.log(x);\n\t$effect(() => console.log('$effect: '+ x))\n</script>\n\n{x}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [x, y, resolve] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\tworld\n\t\t` // if this does not show world - that would also be ok\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.deepEqual(logs, [\n\t\t\t'universe',\n\t\t\t'world',\n\t\t\t'$effect: world',\n\t\t\t'$effect: universe',\n\t\t\t'$effect: universe'\n\t\t]);\n\t\t// assert.deepEqual(logs, ['universe', 'universe', '$effect: universe', '$effect: universe']); // this would also be ok\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-1/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet deferred = [];\n\n\tfunction delay(s) {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve(s))\n\t\treturn d.promise;\n\t}\n</script>\n\n<button onclick={() => x = 'universe'}>x</button>\n\n<button onclick={() => y++}>y++</button>\n\n<button onclick={() => deferred.shift()()}>resolve</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n{#if y > 0}\n\t<Child {x} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [x, y, resolve] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<hr>\n\t\t\tworld\n\t\t\t\"world\"\n\t\t\tworld\n\t\t\tworld\n\t\t\tworld\n\t\t\t\"world\"\n\t\t` // if this does not show world \"world\" world world world \"world\" - then this would also be ok\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-2/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet deferred = [];\n\n\tfunction delay(s) {\n\t\tconst d = Promise.withResolvers();\n\t\tdeferred.push(() => d.resolve(s))\n\t\treturn d.promise;\n\t}\n</script>\n\n<button onclick={() => x = 'universe'}>x</button>\n\n<button onclick={() => y++}>y++</button>\n\n<button onclick={() => deferred.shift()()}>resolve</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child {x} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [x, y, resolve] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<hr>\n\t\t\tworld\n\t\t\t\"world\"\n\t\t\tworld\n\t\t\tworld\n\t\t\tworld\n\t\t\t\"world\"\n\t\t` // if this does not show world \"world\" world world world \"world\" - then this would also be ok\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-3/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n\n\tfunction delay2(value) {\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (x = 'universe')}>x</button>\n\n<button onclick={() => y++}>y++</button>\n<button onclick={() => deferred.pop()?.()}>resolve</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child x={await delay2(x)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-all-combinations/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-all-combinations/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO more combinations pass on https://github.com/sveltejs/svelte/pull/17971\n\ttimeout: 20_000,\n\tasync test({ assert, target }) {\n\t\tconst [x, fork_x, y, fork_y, shift, pop, commit_x, commit_y, reset] =\n\t\t\ttarget.querySelectorAll('button');\n\n\t\tconst initial = `\n\t\t\t<button>x</button>\n\t\t\t<button>x (fork)</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>y++ (fork)</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit x</button>\n\t\t\t<button>commit y</button>\n\t\t\t<button>reset</button>\n\t\t\t<hr>\n\t\t`;\n\n\t\tconst final = `\n\t\t\t<button>x</button>\n\t\t\t<button>x (fork)</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>y++ (fork)</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit x</button>\n\t\t\t<button>commit y</button>\n\t\t\t<button>reset</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`;\n\n\t\t/** @param {HTMLElement} button */\n\t\tasync function click(button) {\n\t\t\tbutton.click();\n\t\t\tawait tick();\n\t\t}\n\n\t\t/**\n\t\t * Generate all permutations of an array.\n\t\t * @param {HTMLElement[]} actions\n\t\t * @returns {HTMLElement[][]}\n\t\t */\n\t\tfunction permutations(actions) {\n\t\t\tif (actions.length <= 1) return [actions];\n\n\t\t\t/** @type {HTMLElement[][]} */\n\t\t\tconst result = [];\n\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tconst head = actions[i];\n\t\t\t\tconst rest = actions.slice(0, i).concat(actions.slice(i + 1));\n\t\t\t\tfor (const tail of permutations(rest)) {\n\t\t\t\t\tresult.push([head, ...tail]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t/**\n\t\t * Keep only valid orders where fork commits happen after their fork action.\n\t\t * @param {HTMLElement[]} order\n\t\t */\n\t\tfunction is_valid_order(order) {\n\t\t\tconst x_fork_index = order.indexOf(fork_x);\n\t\t\tconst commit_x_index = order.indexOf(commit_x);\n\t\t\tif (commit_x_index !== -1 && (x_fork_index === -1 || commit_x_index < x_fork_index)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst y_fork_index = order.indexOf(fork_y);\n\t\t\tconst commit_y_index = order.indexOf(commit_y);\n\t\t\tif (commit_y_index !== -1 && (y_fork_index === -1 || commit_y_index < y_fork_index)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Four control scenarios:\n\t\t * - x direct, y direct\n\t\t * - x direct, y via fork+commit\n\t\t * - x via fork+commit, y direct\n\t\t * - x via fork+commit, y via fork+commit\n\t\t */\n\t\tconst control_scenarios = [\n\t\t\t[x, y],\n\t\t\t[x, fork_y, commit_y],\n\t\t\t[fork_x, commit_x, y],\n\t\t\t[fork_x, commit_x, fork_y, commit_y]\n\t\t];\n\n\t\tconst control_orders = control_scenarios.flatMap((scenario) =>\n\t\t\tpermutations(scenario).filter(is_valid_order)\n\t\t);\n\n\t\t/**\n\t\t * All shift/pop combinations for draining async work.\n\t\t * We click three times because this scenario can queue up to 3 deferred resolutions.\n\t\t */\n\t\tconst resolve_orders = [\n\t\t\t[shift, shift, shift],\n\t\t\t[shift, pop, pop],\n\t\t\t[pop, shift, shift],\n\t\t\t[pop, pop, pop]\n\t\t];\n\n\t\tfor (const controls of control_orders) {\n\t\t\tfor (const resolves of resolve_orders) {\n\t\t\t\tfor (const action of controls) {\n\t\t\t\t\tawait click(action);\n\t\t\t\t}\n\n\t\t\t\tfor (const action of resolves) {\n\t\t\t\t\tawait click(action);\n\t\t\t\t}\n\n\t\t\t\tconst failure_msg = `Failed for: ${controls\n\t\t\t\t\t.map((btn) => btn.textContent)\n\t\t\t\t\t.concat(...resolves.map((btn) => btn.textContent))\n\t\t\t\t\t.join(', ')}`;\n\t\t\t\tassert.htmlEqual(target.innerHTML, final, failure_msg);\n\n\t\t\t\tawait click(reset);\n\t\t\t\tassert.htmlEqual(target.innerHTML, initial, failure_msg);\n\t\t\t}\n\t\t}\n\n\t\tconst other_scenarios = [\n\t\t\t[x, shift, y, shift, shift],\n\t\t\t[x, shift, y, pop, pop],\n\t\t\t[fork_x, shift, y, shift, commit_x, shift],\n\t\t\t[fork_x, shift, y, pop, commit_x, pop],\n\t\t\t[y, shift, x, shift, shift],\n\t\t\t[y, shift, x, pop, pop],\n\t\t\t[fork_y, shift, x, shift, commit_y, shift],\n\t\t\t[fork_y, shift, x, pop, commit_y, pop]\n\t\t];\n\n\t\tfor (const scenario of other_scenarios) {\n\t\t\tfor (const action of scenario) {\n\t\t\t\tawait click(action);\n\t\t\t}\n\n\t\t\tconst failure_msg = `Failed for: ${scenario.map((btn) => btn.textContent).join(', ')}`;\n\t\t\tassert.htmlEqual(target.innerHTML, final, failure_msg);\n\n\t\t\tawait click(reset);\n\t\t\tassert.htmlEqual(target.innerHTML, initial, failure_msg);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-all-combinations/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet fx;\n\tlet fy;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n\n\tfunction delay2(value) {\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (x = 'universe')}>x</button>\n<button onclick={() => (fx = fork(() => {x = 'universe';}))}>x (fork)</button>\n<button onclick={() => y++}>y++</button>\n<button onclick={() => (fy = fork(() => {y++;}))}>y++ (fork)</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => fx.commit()}>commit x</button>\n<button onclick={() => fy.commit()}>commit y</button>\n<button onclick={() => {x = 'world'; y = 0;}}>reset</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child x={await delay2(x)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-1/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-1/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971\n\tasync test({ assert, target }) {\n\t\tconst [x, y, shift, pop, commit] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-1/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n\n\tfunction delay2(value) {\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (f = fork(() => {x = 'universe';}))}>x</button>\n<button onclick={() => y++}>y++</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => f.commit()}>commit</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child x={await delay2(x)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [x, y, shift, pop, commit] = target.querySelectorAll('button');\n\n\t\ty.click();\n\t\tawait tick();\n\n\t\tx.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click();\n\t\tawait tick();\n\t\tshift.click(); // would be ok to not need this one\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-2/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n\n\tfunction delay2(value) {\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (f = fork(() => {x = 'universe';}))}>x</button>\n<button onclick={() => y++}>y++</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => f.commit()}>commit</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child x={await delay2(x)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-3/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [x, y, shift, pop, commit] = target.querySelectorAll('button');\n\n\t\ty.click();\n\t\tawait tick();\n\n\t\tx.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tpop.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>shift</button>\n\t\t\t<button>pop</button>\n\t\t\t<button>commit</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-3/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n\n\tfunction delay2(value) {\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (f = fork(() => {x = 'universe';}))}>x</button>\n<button onclick={() => y++}>y++</button>\n<button onclick={() => deferred.shift()?.()}>shift</button>\n<button onclick={() => deferred.pop()?.()}>pop</button>\n<button onclick={() => f.commit()}>commit</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child x={await delay2(x)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-4/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-4/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO works on https://github.com/sveltejs/svelte/pull/17971\n\tasync test({ assert, target }) {\n\t\tconst [x, y, resolve, commit] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t\tworld\n\t\t\t\"world\"\n\t\t\tworld\n\t\t\tworld\n\t\t\tworld\n\t\t\t\"world\"\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t\tworld\n\t\t\t\"world\"\n\t\t\tworld\n\t\t\tworld\n\t\t\tworld\n\t\t\t\"world\"\n\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-4/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (f = fork(() => {x = 'universe';}))}>x</button>\n\n<button onclick={() => y++}>y++</button>\n<button onclick={() => deferred.pop()?.()}>resolve</button>\n<button onclick={() => f.commit()}>commit</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child {x} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/Child.svelte",
    "content": "<script>\n\tlet { x } = $props();\n</script>\n\n<!-- checks direct source, indirect derived, block effect, async effect -->\n{x}\n{JSON.stringify(x)}\n{#if x === 'universe'}universe{:else}world{/if}\n{#if JSON.stringify(x) === '\"universe\"'}universe{:else}world{/if}\n{await Promise.resolve(x)}\n{await Promise.resolve(JSON.stringify(x))}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [x, y, resolve, commit] = target.querySelectorAll('button');\n\n\t\tx.click();\n\t\tawait tick();\n\n\t\ty.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tcommit.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\t<hr>\n\t\t\tworld\n\t\t\t\"world\"\n\t\t\tworld\n\t\t\tworld\n\t\t\tworld\n\t\t\t\"world\"\n\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>x</button>\n\t\t\t<button>y++</button>\n\t\t\t<button>resolve</button>\n\t\t\t<button>commit</button>\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\t<hr>\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\tuniverse\n\t\t\t\"universe\"\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-state-new-branch-fork-5/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tlet x = $state('world');\n\tlet y = $state(0);\n\tlet f;\n\n\tconst deferred = [];\n\n\tfunction delay(value) {\n\t\tif (value !== 'universe') return value;\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n\n\tfunction delay2(value) {\n\t\treturn new Promise((resolve) => deferred.push(() => resolve(value)));\n\t}\n</script>\n\n<button onclick={() => (f = fork(() => {x = 'universe';}))}>x</button>\n\n<button onclick={() => y++}>y++</button>\n<button onclick={() => deferred.pop()?.()}>resolve</button>\n<button onclick={() => f.commit()}>commit</button>\n\n{#if x === 'universe'}\n\t{await delay(x)}\n\t<Child {x} />\n{/if}\n\n<hr>\n\n{#if y > 0}\n\t<Child x={await delay2(x)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-static-derived-after-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<p>hello</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-static-derived-after-await/main.svelte",
    "content": "<script>\n\tawait 0;\n\tlet message = $derived('hello');\n</script>\n\n<p>{message}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-static-prop-after-await/Child.svelte",
    "content": "<script>\n\tlet { value } = $props();\n</script>\n\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-static-prop-after-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: 'value <div class=\"value\"></div>',\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, 'value <div class=\"value\"></div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-static-prop-after-await/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\t\n\tawait Promise.resolve();\n\n\tlet value = 'value';\n</script>\n \n<Child {value} />\n<div class={value}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-style-after-await/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'client', 'hydrate'],\n\tssrHtml: `\n\t\t<div style=\"color: red;\"></div>\n\t\t<div style=\"width: 100px;\"></div>\n\t\t<button>width</button>\n\t\t<div style=\"color: red;\"></div>\n\t\t<div style=\"width: 100px;\"></div>\n\t\t<button>width</button>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div style=\"color: red;\"></div>\n\t\t\t\t<div style=\"width: 100px;\"></div>\n\t\t\t\t<button>width</button>\n\t\t\t\t<div style=\"color: red;\"></div>\n\t\t\t\t<div style=\"width: 100px;\"></div>\n\t\t\t\t<button>width</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-style-after-await/main.svelte",
    "content": "<script>\n\tawait Promise.resolve();\n\n\t// static\n\tlet color = $state('red');\n\n\t// dynamic\n\tlet width = $state('100px');\n</script>\n\n<!-- force them into their own template effects -->\n\n<!-- normal -->\n{#if color}\n\t<div style:color={color}></div>\n\t<div style:width={width}></div>\n\t<button onclick={() => width = '1px'}>width</button>\n{/if}\n\n<!-- shorthand -->\n{#if color}\n\t<div style:color></div>\n\t<div style:width></div>\n\t<button onclick={() => width = '1px'}>width</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-svelte-element/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>reset</button>\n\t\t<button>h1</button>\n\t\t<button>h2</button>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reset, h1, h2] = target.querySelectorAll('button');\n\n\t\th1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>h1</button>\n\t\t\t\t<button>h2</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\treset.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>h1</button>\n\t\t\t\t<button>h2</button>\n\t\t\t\t<h1>hello</h1>\n\t\t\t`\n\t\t);\n\n\t\th2.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>reset</button>\n\t\t\t\t<button>h1</button>\n\t\t\t\t<button>h2</button>\n\t\t\t\t<h2>hello</h2>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-svelte-element/main.svelte",
    "content": "<script>\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred = Promise.withResolvers()}>reset</button>\n<button onclick={() => deferred.resolve('h1')}>h1</button>\n<button onclick={() => deferred.resolve('h2')}>h2</button>\n\n<svelte:boundary>\n\t<svelte:element this={await deferred.promise}>hello</svelte:element>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>foo bar</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-template-async-sync-mixed/main.svelte",
    "content": "<script>\n\tfunction foo() {\n\t\treturn 'foo';\n\t}\n\n\tasync function bar() {\n\t\treturn Promise.resolve('bar');\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{foo()} {await bar()}</p>\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-time-travelling-derived/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [a, b, update] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>0</button>\n\t\t\t\t<h1>a</h1>\n\t\t\t`\n\t\t);\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>0</button>\n\t\t\t\t<h1>b</h1>\n\t\t\t`\n\t\t);\n\n\t\tupdate.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>1</button>\n\t\t\t\t<h1>b</h1>\n\t\t\t`\n\t\t);\n\n\t\ta.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<button>1</button>\n\t\t\t\t<h1>a</h1>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-time-travelling-derived/main.svelte",
    "content": "<script>\n\tlet object = $state(null);\n\tlet count = $state(0);\n\n\tconst condition = $derived(object === null);\n</script>\n\n<svelte:boundary>\n\t<button onclick={() => (object = null)}>a</button>\n\t<button onclick={() => (object = {})}>b</button>\n\n\t<button onclick={async () => {\n\t\tcount++;\n\t\tawait Promise.resolve();\n\t\tobject = {};\n\t}}>{await count}</button>\n\n\t{#if condition}\n\t\t<h1>a</h1>\n\t{:else}\n\t\t<h1>b</h1>\n\t{/if}\n\n\t{#snippet pending()}{/snippet}\n</svelte:boundary>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level/Child.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n\n\tlet value = await promise;\n</script>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>hello</button><p>pending</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [hello] = target.querySelectorAll('button');\n\n\t\thello.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>hello</button><p>hello</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => deferred.resolve('hello')}>hello</button>\n\n<svelte:boundary>\n\t<Child promise={deferred.promise} />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-deriveds/Foo.svelte",
    "content": "<script lang=\"ts\">\n\timport { resolve } from './main.svelte';\n\n\tconst foo = $derived(await new Promise((r) => resolve.push(() => r('foo'))));\n\tconst bar = $derived(await new Promise((r) => resolve.push(() => r('bar'))));\n</script>\n\n<p>{foo} {bar}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-deriveds/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [show, resolve] = target.querySelectorAll('button');\n\n\t\tshow.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>pending...</p>\n\t\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>pending...</p>\n\t\t\t`\n\t\t);\n\n\t\tresolve.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>show</button>\n\t\t\t\t<button>resolve</button>\n\t\t\t\t<p>foo bar</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-deriveds/main.svelte",
    "content": "<script module>\n\texport let resolve = [];\n</script>\n\n<script>\n\timport Foo from './Foo.svelte';\n\t\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = true}>\n\tshow\n</button>\n\n<button onclick={() => resolve.shift()()}>\n\tresolve\n</button>\n\n<svelte:boundary>\n\t{#if show}\n\t\t<Foo/>\n\t{/if}\n\n\t{#if $effect.pending()}\n\t\t<p>pending...</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>initializing...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-error-nested/Child.svelte",
    "content": "<script>\n\timport { route } from \"./main.svelte\";\n\n\tawait new Promise(async (_, reject) => {\n\t\troute.reject = reject;\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-error-nested/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>reject</button> <p>pending</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reject] = target.querySelectorAll('button');\n\n\t\treject.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>reject</button> <p>failed</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-error-nested/main.svelte",
    "content": "<script module>\n\timport Child from './Child.svelte';\n\texport let route = $state({});\n</script>\n\n<button onclick={() => route.reject()}>reject</button>\n\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n\n\t{#snippet failed()}\n\t\t<p>failed</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-error-nested-obsolete/Child.svelte",
    "content": "<script>\n\timport { route } from \"./main.svelte\";\n\n\tawait new Promise(async (_, reject) => {\n\t\tawait Promise.resolve();\n\t\troute.current = 'other'\n\t\troute.reject = reject;\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-error-nested-obsolete/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>reject</button> <p>pending</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [reject] = target.querySelectorAll('button');\n\n\t\tawait tick();\n\t\treject.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<button>reject</button> <p>route: other</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-error-nested-obsolete/main.svelte",
    "content": "<script module>\n\timport Child from './Child.svelte';\n\texport let route = $state({ current: 'home' });\n</script>\n\n<script>\n\t// reset from earlier tests\n\troute.current = 'home'\n</script>\n\n<button onclick={() => route.reject()}>reject</button>\n\n<svelte:boundary>\n\t{#if route.current === 'home'}\n\t\t<Child />\n\t{:else}\n\t\t<p>route: {route.current}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-in-if/Child.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n\n\tlet value = await promise;\n</script>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-in-if/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [toggle, hello] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>toggle</button>\n\t\t\t<button>hello</button>\n\t\t`\n\t\t);\n\n\t\ttoggle.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>toggle</button>\n\t\t\t<button>hello</button>\n\t\t`\n\t\t);\n\n\t\thello.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>toggle</button>\n\t\t\t<button>hello</button>\n\t\t\t<p>condition is true</p>\n\t\t\t<p>hello</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-top-level-in-if/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet condition = $state(false);\n\tlet deferred = $state(Promise.withResolvers());\n</script>\n\n<button onclick={() => condition = !condition}>toggle</button>\n<button onclick={() => deferred.resolve('hello')}>hello</button>\n\n<svelte:boundary>\n\t{#if condition}\n\t\t<p>condition is {condition}</p>\n\t\t<Child promise={deferred.promise} />\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-transform-empty-statements/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-transform-empty-statements/main.svelte",
    "content": "<script>\n\tawait Promise.resolve(42);\n\tconst { name } = $props();\n</script>\n\n{name}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-transition-blockers/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\tasync test({ assert, logs }) {\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['ready']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-transition-blockers/main.svelte",
    "content": "<script>\n\t// Wait a macrotask to make sure the effect doesn't run before the microtask-Promise.resolve() resolves, masking a bug\n\tawait new Promise(r => setTimeout(r));\n\n\tfunction custom(_, value) {\n\t\tconsole.log(value);\n\t\treturn { duration: 0 };\n\t}\n\n\tlet params = $state('ready');\n</script>\n\n<div transition:custom={params}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-unresolved-promise/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>4</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-unresolved-promise/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count += 1}>\n\tincrement\n</button>\n\n<svelte:boundary>\n\t{#if count % 2}\n\t\t<p>{await new Promise(() => {})}</p>\n\t{:else}\n\t\t<p>{await count}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-waterfall-on-init/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>resolve 1</button>\n\t\t<button>resolve 2</button>\n\t\t<hr>\n\t\t<p>pending</p>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>resolve 1</button>\n\t\t\t\t<button>resolve 2</button>\n\t\t\t\t<hr>\n\t\t\t\t<p>pending</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton2.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>resolve 1</button>\n\t\t\t\t<button>resolve 2</button>\n\t\t\t\t<hr>\n\t\t\t\t<button>0</button>\n\t\t\t\t<p>true</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-waterfall-on-init/main.svelte",
    "content": "<script>\n\tlet d1 = Promise.withResolvers();\n\tlet d2 = Promise.withResolvers();\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => d1.resolve(true)}>resolve 1</button>\n<button onclick={() => d2.resolve(true)}>resolve 2</button>\n\n<hr>\n\n<svelte:boundary>\n\t{#if await d1.promise}\n\t\t<button onclick={() => count += 1}>{count}</button>\n\t\t<p>{await d2.promise}</p>\n\t{/if}\n\n\t{#snippet pending()}\n\t\t<p>pending</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-with-sync-derived/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<p>loading...</p>`,\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>log</button>\n\t\t\t\t<button>x 1</button>\n\t\t\t\t<button>other 1</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tconst [log, x, other] = target.querySelectorAll('button');\n\n\t\tflushSync(() => x.click());\n\t\tflushSync(() => other.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>log</button>\n\t\t\t\t<button>x 1</button>\n\t\t\t\t<button>other 2</button>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t\t<p>1</p>\n\t\t\t`\n\t\t);\n\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>log</button>\n\t\t\t\t<button>x 2</button>\n\t\t\t\t<button>other 2</button>\n\t\t\t\t<p>2</p>\n\t\t\t\t<p>2</p>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/async-with-sync-derived/main.svelte",
    "content": "<script>\n\tlet x = $state(1);\n\tlet y = $derived(x);\n\tlet other = $state(1);\n</script>\n\n<svelte:boundary>\n\t<button onclick={() => console.log({ x, y })}>log</button>\n\t<button onclick={() => x += 1}>x {x}</button>\n\t<button onclick={() => other += 1}>other {other}</button>\n\n\t<p>{x}</p>\n\t<p>{await x}</p>\n\t<p>{y}</p>\n\n\t{#snippet pending()}\n\t\t<p>loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-basic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<div></div>`,\n\thtml: `<div>DIV</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-basic/main.svelte",
    "content": "<div {@attach (node) => node.textContent = node.nodeName}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component/Child.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n\n<div {...props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<button>update</button><div></div>`,\n\thtml: `<button>update</button><div>one</div>`,\n\n\ttest({ target, assert }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>update</button><div>two</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet message = $state('one');\n\n\tfunction attachment(message) {\n\t\treturn (node) => {\n\t\t\tnode.textContent = message;\n\t\t};\n\t}\n</script>\n\n<button onclick={() => message = 'two'}>update</button>\n\n<Child {@attach attachment(message)} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component-falsy/Child.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n\n<div {...props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component-falsy/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component-falsy/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tfunction attachment(){\n\t\tconsole.log(\"up\");\n\t}\n\n\tlet enabled = $state(false);\n</script>\n\n<button onclick={() => enabled = !enabled}></button>\n\n<Child {@attach enabled && attachment} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component-spread/Child.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n\n<div {...props}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>update</button><div></div>`,\n\n\ttest({ target, assert, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.deepEqual(logs, ['one DIV']);\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['one DIV', 'cleanup one', 'two DIV']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-component-spread/main.svelte",
    "content": "<script>\n\timport { createAttachmentKey } from 'svelte/attachments';\n\timport Child from './Child.svelte';\n\n\tlet stuff = $state({\n\t\t[createAttachmentKey()]: (node) => {\n\t\t\tconsole.log(`one ${node.nodeName}`);\n\n\t\t\treturn () => {\n\t\t\t\tconsole.log('cleanup one');\n\t\t\t};\n\t\t}\n\t});\n\n\tfunction update() {\n\t\tstuff = {\n\t\t\t[createAttachmentKey()]: (node) => {\n\t\t\t\tconsole.log(`two ${node.nodeName}`);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tconsole.log('cleanup two');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n<button onclick={update}>update</button>\n\n<Child {...stuff} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-from-action/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn, btn2, btn3] = target.querySelectorAll('button');\n\n\t\t// both logs on creation it will not log on change\n\t\tassert.deepEqual(logs, ['create', 0, 'action', 'create', 0, 'attachment']);\n\n\t\t// clicking the first button logs the right value\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['create', 0, 'action', 'create', 0, 'attachment', 0]);\n\n\t\t// clicking the second button logs the right value\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['create', 0, 'action', 'create', 0, 'attachment', 0, 0]);\n\n\t\t// updating the arguments logs the update function for both\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'action',\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'attachment',\n\t\t\t0,\n\t\t\t0,\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'action',\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'attachment'\n\t\t]);\n\n\t\t// clicking the first button again shows the right value\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'action',\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'attachment',\n\t\t\t0,\n\t\t\t0,\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'action',\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'attachment',\n\t\t\t1\n\t\t]);\n\n\t\t// clicking the second button again shows the right value\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'action',\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'attachment',\n\t\t\t0,\n\t\t\t0,\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'action',\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'attachment',\n\t\t\t1,\n\t\t\t1\n\t\t]);\n\n\t\t// unmounting logs the destroy function for both\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'action',\n\t\t\t'create',\n\t\t\t0,\n\t\t\t'attachment',\n\t\t\t0,\n\t\t\t0,\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'action',\n\t\t\t'update',\n\t\t\t1,\n\t\t\t'attachment',\n\t\t\t1,\n\t\t\t1,\n\t\t\t'destroy',\n\t\t\t'action',\n\t\t\t'destroy',\n\t\t\t'attachment'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-from-action/main.svelte",
    "content": "<script>\n\timport { fromAction } from 'svelte/attachments';\n\tlet { count = 0 } = $props();\n\n\tfunction test(node, thing) {\n\t\tconst kind = node.dataset.kind;\n\t\tconsole.log('create', thing, kind);\n\t\tlet t = thing;\n\t\tconst controller = new AbortController();\n\t\tnode.addEventListener(\n\t\t\t'click',\n\t\t\t() => {\n\t\t\t\tconsole.log(t);\n\t\t\t},\n\t\t\t{\n\t\t\t\tsignal: controller.signal\n\t\t\t}\n\t\t);\n\t\treturn {\n\t\t\tupdate(new_thing) {\n\t\t\t\tconsole.log('update', new_thing, kind);\n\t\t\t\tt = new_thing;\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tconsole.log('destroy', kind);\n\t\t\t\tcontroller.abort();\n\t\t\t}\n\t\t};\n\t}\n</script>\n\n{#if count < 2}\n\t<button data-kind=\"action\" use:test={count}></button>\n\t<button data-kind=\"attachment\" {@attach fromAction(test, ()=>count)}></button>\n{/if}\n\n<button onclick={()=> count++}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<div></div><button>increment</button>`,\n\thtml: `<div>1</div><button>increment</button>`,\n\n\ttest: ({ assert, target }) => {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div>2</div><button>increment</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-reactive/main.svelte",
    "content": "<script>\n\tlet value = $state(1);\n</script>\n\n<div {@attach (node) => node.textContent = value}></div>\n<button onclick={() => value += 1}>increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\tassert.deepEqual(logs, ['hello']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-spread/main.svelte",
    "content": "<script>\n\timport { createAttachmentKey } from 'svelte/attachments';\n\n\tlet stuff = $state({\n\t\t[createAttachmentKey()]: () => console.log('hello')\n\t});\n</script>\n\n<div {...stuff}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-spread-stable/Component.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n\n<p {...props}>hello</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-spread-stable/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['up']);\n\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['up']);\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['up', 'down']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-spread-stable/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count++}>{count}</button>\n\n{#if count < 2}\n\t<Component\n\t\tdata-count={count}\n\t\t{@attach () => {\n\t\t\tconsole.log('up');\n\t\t\treturn () => console.log('down');\n\t\t}}\n\t/>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-svelte-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<div></div>`,\n\thtml: `<div>DIV</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attachment-svelte-element/main.svelte",
    "content": "<svelte:element this={'div'} {@attach (node) => node.textContent = node.nodeName}></svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-boolean-case-insensitivity/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// JSDOM lacks support for some of these attributes, so we'll skip it for now.\n\t//\n\t// See:\n\t//  - `async`: https://github.com/jsdom/jsdom/issues/1564\n\t//  - `nomodule`: https://github.com/jsdom/jsdom/issues/2475\n\t//  - `autofocus`: https://github.com/jsdom/jsdom/issues/3041\n\t//  - `inert`: https://github.com/jsdom/jsdom/issues/3605\n\t//  - etc...: https://github.com/jestjs/jest/issues/139#issuecomment-592673550\n\tskip_mode: ['client'],\n\n\thtml: `\n\t<script nomodule async defer></script>\n\t<form novalidate></form>\n\t<input readonly required checked webkitdirectory>\n\t<select multiple disabled></select>\n\t<button formnovalidate></button>\n\t<img ismap>\n\t<video autoplay controls loop muted playsinline disablepictureinpicture disableremoteplayback></video>\n\t<audio disableremoteplayback></audio>\n\t<track default>\n\t<iframe allowfullscreen></iframe>\n\t<details open></details>\n\t<ol reversed></ol>\n\t<div autofocus></div>\n\t<span inert></span>\n\n\t<script nomodule async defer></script>\n\t<form novalidate></form>\n\t<input readonly required checked webkitdirectory>\n\t<select multiple disabled></select>\n\t<button formnovalidate></button>\n\t<img ismap>\n\t<video autoplay controls loop muted playsinline disablepictureinpicture disableremoteplayback></video>\n\t<audio disableremoteplayback></audio>\n\t<track default>\n\t<iframe allowfullscreen></iframe>\n\t<details open></details>\n\t<ol reversed></ol>\n\t<div autofocus></div>\n\t<span inert></span>\n\n\t<script></script>\n\t<form></form>\n\t<input>\n\t<select></select>\n\t<button></button>\n\t<img>\n\t<video></video>\n\t<audio></audio>\n\t<track>\n\t<iframe></iframe>\n\t<details></details>\n\t<ol></ol>\n\t<div></div>\n\t<span></span>\n`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-boolean-case-insensitivity/main.svelte",
    "content": "<script>\n\tlet runesMode = $state('using a rune so that we trigger runes mode');\n\n\tconst attributeValues = [true, 'test', false];\n</script>\n\n{#each attributeValues as val}\n\t<script NOMODULE={val} ASYNC={val} DEFER={val}></script>\n\t<form NOVALIDATE={val}></form>\n\t<input READONLY={val} REQUIRED={val} CHECKED={val} WEBKITDIRECTORY={val} />\n\t<select MULTIPLE={val} DISABLED={val}></select>\n\t<button FORMNOVALIDATE={val}></button>\n\t<img ISMAP={val} />\n\t<video AUTOPLAY={val} CONTROLS={val} LOOP={val} MUTED={val} PLAYSINLINE={val} DISABLEPICTUREINPICTURE={val} DISABLEREMOTEPLAYBACK={val}></video>\n\t<audio DISABLEREMOTEPLAYBACK={val}></audio>\n\t<track DEFAULT={val} />\n\t<iframe ALLOWFULLSCREEN={val}></iframe>\n\t<details OPEN={val}></details>\n\t<ol REVERSED={val}></ol>\n\t<div AUTOFOCUS={val}></div>\n\t<span INERT={val}></span>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-if-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, variant, hydrate }) {\n\t\tfunction check(/** @type {boolean} */ condition) {\n\t\t\tconst divs = /** @type {NodeListOf<HTMLDivElement>} */ (\n\t\t\t\ttarget.querySelectorAll(`.translate-${condition} div`)\n\t\t\t);\n\n\t\t\tdivs.forEach((div, i) => {\n\t\t\t\tassert.equal(div.translate, condition, `${i + 1} of ${divs.length}: ${div.outerHTML}`);\n\t\t\t});\n\t\t}\n\n\t\tcheck(false);\n\t\tcheck(true);\n\n\t\tif (variant === 'hydrate') {\n\t\t\thydrate();\n\t\t\tcheck(false);\n\t\t\tcheck(true);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-if-string/main.svelte",
    "content": "<div class=\"translate-false\">\n\t<div translate={false}></div>\n\t<div translate=\"no\"></div>\n\t<div {...{ translate: false }}></div>\n\t<div {...{ translate: 'no' }}></div>\n</div>\n\n<div class=\"translate-true\">\n\t<div></div>\n\t<div translate={true}></div>\n\t<div translate=\"yes\"></div>\n\t<div {...{ translate: true }}></div>\n\t<div {...{ translate: 'yes' }}></div>\n\n\t<div translate=\"false\"></div>\n\t<div translate=\"banana\"></div>\n\t<div {...{ translate: 'false' }}></div>\n\t<div {...{ translate: 'banana' }}></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-parts/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<div class=\"123\"></div><img src=\"12 hello, world 13\">`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-parts/main.svelte",
    "content": "<script>\n\tlet a = 1;\n\tlet b = 2;\n\tlet c = 3;\n</script>\n\n<div class=\"{a}{b}{c}\"></div>\n\n<img src=\"{a}{b} hello, world {a}{c}\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-call-expression/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button class=\"red\">red</button>\n\t\t<button class=\"red\">red</button>\n\t\t<button class=\"red\">red</button>\n\t\t<button class=\"red\">red</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1, b2, b3, b4] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"red\">red</button>\n\t\t\t\t<button class=\"red\">red</button>\n\t\t\t\t<button class=\"red\">red</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"red\">red</button>\n\t\t\t\t<button class=\"red\">red</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"red\">red</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb4?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t\t<button class=\"blue\">blue</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-call-expression/main.svelte",
    "content": "<script>\n\tlet tag = $state('button');\n\tlet values = $state({ a: 'red', b: 'red', c: 'red', d: 'red' });\n\n\tlet count = 0;\n\tconst factory = (name) => {\n\t\tcount++;\n\t\t// check that spread effects are isolated from each other\n\t\tif (count > 8) throw new Error('too many calls');\n\n\t\treturn {\n\t\t\tclass: values[name],\n\t\t\tonclick: () => {\n\t\t\t\tvalues[name] = 'blue';\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<button {...factory('a')}>{values.a}</button>\n<button {...factory('b')}>{values.b}</button>\n\n<svelte:element this={tag} {...factory('c')}>{values.c}</svelte:element>\n<svelte:element this={tag} {...factory('d')}>{values.d}</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-casing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// There's a slight difference in the output between modes, because the server doesn't know\n\t// whether or not the custom element has the readonly boolean, so it plays it save and\n\t// assumes it does.\n\thtml: `\n\t\t<button>click me</button>\n\t\t<input>\n\t\t<input>\n\n\t\t<custom-element readonly=\"false\"></custom-element>\n\t\t<custom-element readonly=\"false\"></custom-element>\n\n\t\t<svg readonly=\"false\"></svg>\n\t\t<svg readonly=\"false\"></svg>\n\t`,\n\tssrHtml: `\n\t\t<button>click me</button>\n\t\t<input>\n\t\t<input>\n\n\t\t<custom-element></custom-element>\n\t\t<custom-element readonly=\"false\"></custom-element>\n\n\t\t<svg readonly=\"false\"></svg>\n\t\t<svg readonly=\"false\"></svg>\n`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-casing/main.svelte",
    "content": "<script>\n\tconst disabled = { dIsAbLeD: false };\n\tconst readonly = { readonly: false  }\n\tconst readOnly = { readOnly: false }\n</script>\n\n<!-- lowercase, then compare -->\n<button {...disabled}>click me</button>\n<input {...readonly}>\n<input {...readOnly}>\n\n<!-- keep casing -->\n<custom-element {...readonly}></custom-element>\n<custom-element {...readOnly}></custom-element>\n\n<!-- keep casing -->\n<svg {...readonly}></svg>\n<svg {...readOnly}></svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-hidden/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ target, assert }) {\n\t\tconst div = target.querySelector('div');\n\t\tconst btn = target.querySelector('button');\n\n\t\tassert.equal(div?.hidden, true);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.equal(div?.hidden, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-hidden/main.svelte",
    "content": "<script>\n\tlet hidden = $state(true);\n\n\tconst restProps = {\n\t\tid: '123'\n\t}\n</script>\n\n<button onclick={() => hidden = !hidden}>\n\ttoggle hidden\n</button>\n\n<div {...restProps} hidden={hidden}>\n\thello world (with spread attrs)\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-input/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ target, assert }) {\n\t\t// Test for https://github.com/sveltejs/svelte/issues/15237\n\t\tconst [setValues, clearValue] = target.querySelectorAll('button');\n\t\tconst [text1, text2, check1, check2] = target.querySelectorAll('input');\n\n\t\tassert.equal(text1.value, '');\n\t\tassert.equal(text2.value, '');\n\t\tassert.equal(check1.checked, false);\n\t\tassert.equal(check2.checked, false);\n\n\t\tflushSync(() => {\n\t\t\tsetValues.click();\n\t\t});\n\n\t\tassert.equal(text1.value, 'message');\n\t\tassert.equal(text2.value, 'message');\n\t\tassert.equal(check1.checked, true);\n\t\tassert.equal(check2.checked, true);\n\n\t\tflushSync(() => {\n\t\t\tclearValue.click();\n\t\t});\n\n\t\tassert.equal(text1.value, '');\n\t\tassert.equal(text2.value, '');\n\t\tassert.equal(check1.checked, false);\n\t\tassert.equal(check2.checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-input/main.svelte",
    "content": "<script>\n\tlet value = $state();\n\tlet checked = $state(false);\n\n\tfunction setValues() {\n\t\tvalue = 'message';\n\t\tchecked = true;\n\t}\n\tfunction clearValues() {\n\t\tvalue = null;\n\t\tchecked = null;\n\t}\n</script>\n\n<button onclick={setValues}>setValues</button>\n<button onclick={clearValues}>clearValues</button>\n\n<input type=\"text\" {value} />\n<input type=\"text\" {value} {...{}} />\n\n<input type=\"checkbox\" {checked} />\n<input type=\"checkbox\" {checked} {...{}} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-reactivitiy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div style=\"color: red;\"></div><div class=\"red\"></div><div class=\"red\"></div>\n\t\t<div style=\"color: red;\"></div><div class=\"red\"></div><div class=\"red\"></div>\n\t\t<button>toggle</button\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div class=\"blue\" style=\"color: blue;\"></div><div class=\"blue\"></div><div class=\"blue\"></div>\n\t\t\t\t<div class=\"blue\" style=\"color: blue;\"></div><div class=\"blue\"></div><div class=\"blue\"></div>\n\t\t\t\t<button>toggle</button\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/attribute-spread-reactivitiy/main.svelte",
    "content": "<script>\n\tlet value = $state('red');\n\tlet tag = $state('div');\n\n\tconst getValue = () => {\n\t\treturn value;\n\t}\n\tconst getClass = () => {\n\t\treturn value === 'blue';\n\t}\n\tconst getSpread = () => {\n\t\treturn { class: value };\n\t}\n\tconst props = {\n\t\tget class() {\n\t\t\treturn value;\n\t\t}\n\t}\n</script>\n\n<div class:blue={getClass()} style:color={getValue()}></div>\n<div {...getSpread()}></div>\n<div {...props}></div>\n\n<svelte:element this={tag} class:blue={getClass()} style:color={getValue()}></svelte:element>\n<svelte:element this={tag} {...getSpread()}></svelte:element>\n<svelte:element this={tag} {...props}></svelte:element>\n\n<button on:click={() => value = 'blue'}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/autofocus-with-call/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, errors }) {\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/autofocus-with-call/main.svelte",
    "content": "<svelte:options runes />\n<script>\n\tfunction test(){}\n</script>\n\n<input autofocus={test()} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-html-hydration/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tmode: ['hydrate'],\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-html-hydration/main.svelte",
    "content": "<div>{@html await Promise.resolve(`<span>Foo</span>`)}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-hydrate-maybe-promise/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tssrHtml: '<button>fulfil</button><p>42</p><hr><p>loading...</p>',\n\thtml: '<button>fulfil</button><p>loading...</p><hr><p>42</p>',\n\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(target.innerHTML, '<button>fulfil</button><p>42</p><hr><p>42</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-hydrate-maybe-promise/main.svelte",
    "content": "<script>\n\tlet { browser } = $props();\n\n\tlet fulfil;\n\tlet promise = new Promise((f) => (fulfil = f));\n\n\tlet a = browser ? promise : 42;\n\tlet b = browser ? 42 : promise;\n</script>\n\n<button onclick={() => fulfil(42)}>fulfil</button>\n\n{#await a}\n\t{#if true}<p>loading...</p>{/if}\n{:then a}\n\t<p>{a}</p>\n{/await}\n\n<hr>\n\n{#await b}\n\t{#if true}<p>loading...</p>{/if}\n{:then b}\n\t<p>{b}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/_config.js",
    "content": "import { test } from '../../test';\nimport { tick } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [resolveImmediate, resolveTimeout, rejectImmediate, rejectTimeout] =\n\t\t\ttarget.querySelectorAll('button');\n\n\t\trejectTimeout.click();\n\t\tawait new Promise((resolve) => setTimeout(resolve, 1));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Resolve (immediate)</button>\n\t\t\t\t<button>Resolve (timeout)</button>\n\t\t\t\t<button>Reject (immediate)</button>\n\t\t\t\t<button>Reject (timeout)</button>\n\t\t\t\t<p> err [Yeah] </p>\n\t\t\t`\n\t\t);\n\n\t\tresolveImmediate.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Resolve (immediate)</button>\n\t\t\t\t<button>Resolve (timeout)</button>\n\t\t\t\t<button>Reject (immediate)</button>\n\t\t\t\t<button>Reject (timeout)</button>\n\t\t\t\t<p> resolved [?] </p>\n\t\t\t`\n\t\t);\n\n\t\tresolveTimeout.click();\n\t\tawait new Promise((resolve) => setTimeout(resolve, 1));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Resolve (immediate)</button>\n\t\t\t\t<button>Resolve (timeout)</button>\n\t\t\t\t<button>Reject (immediate)</button>\n\t\t\t\t<button>Reject (timeout)</button>\n\t\t\t\t<p> resolved [OK] </p>\n\t\t\t`\n\t\t);\n\n\t\trejectImmediate.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Resolve (immediate)</button>\n\t\t\t\t<button>Resolve (timeout)</button>\n\t\t\t\t<button>Reject (immediate)</button>\n\t\t\t\t<button>Reject (timeout)</button>\n\t\t\t\t<p> err [??] </p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-immediate-fulfilled/main.svelte",
    "content": "<script>\n\tlet p = $state(null);\n</script>\n\n<button onclick={()=>{\n\tp = new Promise((resolve, reject) => {\n\t\tresolve(\"?\");\n\t});\n}}>Resolve (immediate)</button>\n<button onclick={()=>{\n\tp = new Promise((resolve, reject) => {\n\t\tsetTimeout(() => resolve(\"OK\"), 1);\n\t});\n}}>Resolve (timeout)</button>\n<button onclick={()=>{\n\tp = new Promise((resolve, reject) => {\n\t\treject(\"??\");\n\t});\n}}>Reject (immediate)</button>\n<button onclick={()=>{\n\tp = new Promise((resolve, reject) => {\n\t\tsetTimeout(() => reject(\"Yeah\"), 1);\n\t});\n}}>Reject (timeout)</button>\n\n<p>\n\t{#await p}\n\t\t...\n\t{:then v}\n\t\tresolved [{v}]\n\t{:catch err}\n\t\terr [{err}]\n\t{/await}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-no-catch-error/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst b1 = target.querySelector('button');\n\n\t\tlet err = '';\n\t\twindow.addEventListener('error', (e) => {\n\t\t\te.preventDefault();\n\t\t\terr = e.message;\n\t\t});\n\n\t\tb1?.click();\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\n\t\tassert.throws(() => {\n\t\t\tthrow err;\n\t\t}, /Test/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-no-catch-error/main.svelte",
    "content": "<script>\n\tconst promise = Promise.reject('Test');\n\tlet toggle = $state(false);\n</script>\n\n<button onclick={() => toggle = !toggle}>toggle</button>\n\n{#if toggle}\n\t{#await promise}{/await}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-non-promise/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tassert.htmlEqual(p.outerHTML, `<p></p>`);\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(p.outerHTML, `<p>1</p>`);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(p.outerHTML, `<p></p>`);\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(p.outerHTML, `<p>1</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-non-promise/main.svelte",
    "content": "<script>\n\tlet count = $state();\n</script>\n\n<button onclick={() => count = 1}>number</button>\n<button onclick={() => count = null}>nullify</button>\n\n<p>\n\t{#await count}\n\t\tloading\n\t{:then count}\n\t\t{count}\n\t{/await}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-destroy/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n/**\n * Polyfill for Promise.withResolver()\n * @returns { {promise: Promise<string>, resolve: (value: any)=>void, reject: (reason?: any) => void} }\n */\nfunction promiseWithResolver() {\n\tlet resolve, reject;\n\tconst promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\t// @ts-ignore\n\treturn { promise, resolve, reject };\n}\n\nexport default test({\n\tasync test({ component, assert, logs }) {\n\t\t{\n\t\t\t// Set a promise on the component\n\t\t\tconst { promise, resolve } = promiseWithResolver();\n\t\t\tcomponent.promise = promise;\n\t\t\t// wait for rendering\n\t\t\tawait Promise.resolve();\n\t\t\t// resolve promise\n\t\t\tresolve('ok');\n\t\t\t// And wait the end of the promise\n\t\t\tawait promise;\n\t\t\t// {#await} and {:then} block must be rendered\n\t\t\tassert.deepEqual(logs, ['await', 'then:ok']);\n\t\t}\n\n\t\t// clear logs\n\t\tlogs.length = 0;\n\n\t\t{\n\t\t\t// Set a promise on the component\n\t\t\tconst { promise, reject } = promiseWithResolver();\n\t\t\tcomponent.promise = promise;\n\t\t\t// wait for rendering\n\t\t\tawait Promise.resolve();\n\t\t\t// reject promise\n\t\t\treject('error');\n\t\t\t// And wait the end of the promise\n\t\t\tawait promise.catch((ignore) => {});\n\t\t\t// {#await} and {:catch} block must be rendered\n\t\t\tassert.deepEqual(logs, ['await', 'catch:error']);\n\t\t}\n\n\t\t// clear logs\n\t\tlogs.length = 0;\n\n\t\t{\n\t\t\t// Set a promise on the component\n\t\t\tconst { promise, resolve } = promiseWithResolver();\n\t\t\tcomponent.promise = promise;\n\t\t\t// wait for rendering\n\t\t\tawait Promise.resolve();\n\n\t\t\t// remove the promise\n\t\t\tcomponent.promise = null;\n\t\t\tawait Promise.resolve();\n\n\t\t\t// resolve promise\n\t\t\tresolve('ok');\n\t\t\t// And wait the end of the promise\n\t\t\tawait promise;\n\t\t\t// Only {#await} block must be rendered\n\t\t\tassert.deepEqual(logs, ['await']);\n\t\t}\n\n\t\t// clear logs\n\t\tlogs.length = 0;\n\n\t\t{\n\t\t\t// Set a promise on the component\n\t\t\tconst { promise, reject } = promiseWithResolver();\n\t\t\tcomponent.promise = promise;\n\t\t\t// wait for rendering\n\t\t\tawait tick();\n\n\t\t\t// remove the promise\n\t\t\tcomponent.promise = null;\n\t\t\tawait Promise.resolve();\n\n\t\t\t// reject promise\n\t\t\treject('error');\n\t\t\t// And wait the end of the promise\n\t\t\tawait promise.catch((ignore) => {});\n\t\t\t// Only {#await} block must be rendered\n\t\t\tassert.deepEqual(logs, ['await']);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-destroy/main.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n</script>\n\n\n\t{#if promise}\n\t\t{#await promise}\n\t\t\t{console.log(\"await\")}\n\t\t{:then r}\n\t\t\t{console.log(\"then:\"+r)}\n\t\t{:catch err}\n\t\t\t{console.log(\"catch:\"+err)}\n\t\t{/await}\n\t{/if}\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-persistent/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>pending</p><button>Show Promise A</button><button>Show Promise B</button>`\n\t\t);\n\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>pending</p><button>Show Promise A</button><button>Show Promise B</button>`\n\t\t);\n\n\t\tassert.deepEqual(logs, ['rendering pending block']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-persistent/main.svelte",
    "content": "<script>\n\tconst a = new Promise(() => {});\n\tconst b = new Promise(() => {});\n\n\tlet promise = $state(a);\n</script>\n\n{#await promise}\n\t{console.log('rendering pending block')}\n\t<p>pending</p>\n{:then value}\n\t{console.log('rendering then block')}\n\t<p>then {value}</p>\n{/await}\n\n<button onclick={() => (promise = a)}>Show Promise A</button>\n<button onclick={() => (promise = b)}>Show Promise B</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-wait/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\t// not flushing means we wait a tick before showing the pending state ...\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button>`\n\t\t);\n\n\t\t// ... and show the then state directly if the promise resolved by then\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button> then`\n\t\t);\n\n\t\t// reset\n\t\tb1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button>`\n\t\t);\n\n\t\t// flushing means we show the pending state immediately\n\t\tb2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button> pending`\n\t\t);\n\n\t\tawait Promise.resolve();\n\t\tb1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button>`\n\t\t);\n\n\t\t// when not flushing ...\n\t\tb3.click();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button>`\n\t\t);\n\n\t\t// ... we show the pending state after a tick when the promise hasn't resolved by then\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button> pending`\n\t\t);\n\n\t\tawait new Promise((r) => setTimeout(r, 110));\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Clear</button> <button>Immediate</button> <button>Takes time</button> then`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-wait/await.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n</script>\n\n{#await promise}\n\tpending\n{:then value}\n\tthen {value}\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-pending-wait/main.svelte",
    "content": "<script>\n\timport Await from './await.svelte';\n\n\tlet promise = $state();\n</script>\n\n<button onclick={() => (promise = null)}>Clear</button>\n<button onclick={() => (promise = Promise.resolve())}>Immediate</button>\n<button onclick={() => (promise = new Promise((r) => setTimeout(r, 100)))}>Takes time</button>\n\n{#if promise}\n\t<Await {promise} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-render-error-restore-reaction/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ target, errors, assert, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\t\tflushSync(() => {\n\t\t\tbtn.click();\n\t\t});\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-render-error-restore-reaction/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction listen(node){\n\t\tfunction handler(){\n\t\t\tcount++;\n\t\t}\n\t\tnode.addEventListener(\"click\", handler);\n\t\treturn {\n\t\t\tdestroy(){\n\t\t\t\tnode.removeEventListener(\"click\", handler);\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<button use:listen></button>\n\n{#await Promise.resolve() then}\n\t{err.or}\n{/await}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-resolve/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>then a</p><button>Show Promise A</button><button>Show Promise B</button>`\n\t\t);\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>then a</p><button>Show Promise A</button><button>Show Promise B</button>`\n\t\t);\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>then b</p><button>Show Promise A</button><button>Show Promise B</button>`\n\t\t);\n\n\t\tassert.deepEqual(logs, ['rendering pending block', 'rendering then block']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-resolve/main.svelte",
    "content": "<script>\n\tconst a = Promise.resolve('a');\n\tconst b = Promise.resolve('b');\n\n\tlet promise = $state(a);\n</script>\n\n{#await promise}\n\t{console.log('rendering pending block')}\n\t<p>pending</p>\n{:then value}\n\t{console.log('rendering then block')}\n\t<p>then {value}</p>\n{/await}\n\n<button onclick={() => (promise = a)}>Show Promise A</button>\n<button onclick={() => (promise = b)}>Show Promise B</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-resolve-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2, b3, b4] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tawait Promise.resolve();\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tb3.click();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tb4.click();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['pending', 'a', 'b', 'c', 'pending']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/await-resolve-2/main.svelte",
    "content": "<script>\n\tconst promise_a = Promise.resolve('a');\n\tconst promise_b = Promise.resolve('b');\n\tconst promise_c = Promise.resolve('c');\n\tconst promise_d = new Promise(() => {});\n\n\tlet current_promise = $state(promise_a);\n</script>\n\n{#await current_promise}\n\t{console.log('pending')}\n{:then value}\n\t{console.log(value)}\n{:catch}\n\t{console.log('error')}\n{/await}\n\n<button onclick={()=>{current_promise = promise_a}}>Show Promise A</button>\n<button onclick={()=>{current_promise = promise_b}}>Show Promise B</button>\n<button onclick={()=>{current_promise = promise_c}}>Show Promise C</button>\n<button onclick={()=>{current_promise = promise_d}}>Show Promise D</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/before-update-in-legacy-child/Child.svelte",
    "content": "<svelte:options runes={false} />\n\n<script>\n\timport { beforeUpdate } from 'svelte';\n\n\texport let object;\n\n\tbeforeUpdate(() => {\n\t\tconsole.log('changed');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/before-update-in-legacy-child/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\t\tassert.deepEqual(logs, ['changed', 'changed']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/before-update-in-legacy-child/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\tlet object = $state({ count: 0 })\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n\n<Child {object} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bigint-increment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [0n, 1n, 2n, 3n, 4n, 5n]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bigint-increment/main.svelte",
    "content": "<script>\n\tfor (let i = 0n; i <= 5n; i++) {\n\t\tconsole.log(i);\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bigint-increment-mutation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>mutate</button><button>reassign</button><p>0</p>',\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>mutate</button><button>reassign</button><p>1</p>');\n\n\t\tflushSync(() => btn2.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>mutate</button><button>reassign</button><p>0</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bigint-increment-mutation/main.svelte",
    "content": "<script>\n\tlet object = $state({ n: 0n });\n\n\tfunction reassign() {\n\t\tobject = { n: 0n };\n\t}\n\n\tfunction mutate() {\n\t\treturn object.n++;\n\t}\n</script>\n\n<button onclick={mutate}>mutate</button>\n<button onclick={reassign}>reassign</button>\n\n<p>{object.n}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bigint-invalid/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// check that this is a runtime error, not a compile time error\n\t// caused by over-eager partial-evaluation\n\terror: 'Cannot convert invalid to a BigInt'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bigint-invalid/main.svelte",
    "content": "<script>\n\tvar invalid = BigInt('invalid');\n</script>\n\n<h1>{invalid}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-and-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button class=\"foo\">0</button><button class=\"foo\">0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button class=\"foo\">1</button><button class=\"foo\">1</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button class=\"foo\">2</button><button class=\"foo\">2</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-and-spread/button.svelte",
    "content": "<script>\n\tlet { value = $bindable(), ...properties } = $props();\n</script>\n\n<button {...properties} onclick={() => value++}>{value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-and-spread/main.svelte",
    "content": "<script>\n\timport Button from './button.svelte';\n\t\n\tlet value = $state(0);\n\n\tconst props = {\n\t\tclass: 'foo'\n\t};\n</script>\n\n<Button {...props} bind:value />\n<button {...props} onclick={() => value++}>{value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-and-spread-precedence/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<input value=\"foo\">`,\n\n\ttest({ assert, target }) {\n\t\tassert.equal(target.querySelector('input')?.value, 'foo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-and-spread-precedence/input.svelte",
    "content": "<script>\n\tlet { value = $bindable(), ...properties } = $props();\n</script>\n\n<input bind:value {...properties} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-and-spread-precedence/main.svelte",
    "content": "<script>\n\timport Button from './input.svelte';\n\t\n\tlet value = $state('foo');\n\n\tconst props = $state({\n\t\tvalue: 'bar'\n\t});\n</script>\n\n<Button bind:value {...props} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-current-time-remove-listener/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst audio = target.querySelector('audio');\n\t\tconst btn = target.querySelector('button');\n\n\t\tok(audio);\n\n\t\tflushSync(() => {\n\t\t\taudio.currentTime = 10;\n\t\t\taudio.dispatchEvent(new Event('timeupdate'));\n\t\t});\n\t\tassert.deepEqual(logs, ['event']);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\taudio.currentTime = 20;\n\t\t\taudio.dispatchEvent(new Event('timeupdate'));\n\t\t});\n\t\tassert.deepEqual(logs, ['event']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-current-time-remove-listener/main.svelte",
    "content": "<script>\n\tlet show = $state(true);\n\tlet time = $state(0);\n</script>\n\n<button onclick={()=> show = false}></button>\n{#if show}\n\t<audio bind:currentTime={()=>time,(new_time)=>{\n\t\tconsole.log(\"event\");\n\t\ttime = new_time;\n\t}}></audio>\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter/Child.svelte",
    "content": "<script>\n\tlet { a = $bindable() } = $props();\n</script>\n\n<input\n\ttype=\"value\"\n\tbind:value={() => a,\n\t(v) => {\n\t\tconsole.log('b', v);\n\t\ta = v;\n\t}}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { assert_ok } from '../../../suite';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [input, checkbox] = target.querySelectorAll('input');\n\n\t\tinput.value = '2';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a: 2</button><input type=\"value\"><div><input type=\"checkbox\" ></div>`\n\t\t);\n\n\t\tassert.deepEqual(logs, ['b', '2', 'a', '2']);\n\n\t\tflushSync(() => {\n\t\t\tcheckbox.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['b', '2', 'a', '2', 'check', false]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet a = $state(0);\n\tlet check = $state(true);\n</script>\n\n<button onclick={() => a++}>a: {a}</button>\n\n<Child\n\tbind:a={() => a,\n\t(v) => {\n\t\tconsole.log('a', v);\n\t\ta = v;\n\t}}\n/>\n\n<div>\n\t<input type=\"checkbox\" \n\tbind:checked={()=>check,\n\t(v)=>{\n\t\tconsole.log('check', v);\n\t\tcheck = v;\n\t}} />\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter-2/Child.svelte",
    "content": "<script>\n\tlet div = $state();\n\n\t$effect(() => {\n\t\tconsole.log(div?.textContent);\n\t})\n\n\texport const someData = '123';\n</script>\n\n<div bind:this={() => div, v => div = v}>123</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tassert.htmlEqual(target.innerHTML, `<div>123</div>`);\n\n\t\tassert.deepEqual(logs, ['123', '123']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter-2/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet child = $state();\n\n\t$effect(() => {\n\t\tconsole.log(child.someData);\n\t});\n</script>\n\n<Child bind:this={() => child, v => child = v} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter-loop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Shuffle</button> <br> <b>5</b><b>1</b><b>4</b><b>2</b><b>3</b> <br> 51423'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-getter-setter-loop/main.svelte",
    "content": "<script>\n\tlet arr = $state([1, 2, 3, 4, 5]);\n\tlet elements = $state([]);\n</script>\n\n<button onclick={() => arr = [5, 1, 4, 2, 3]}>Shuffle</button><br>\n{#each arr as item, i (item)}\n\t<b bind:this={() => elements[i], (v) => elements[i] = v }>{item}</b>\n{/each}\n<br>\n{#each elements as elem}\n\t{elem.textContent}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-state-property/CheckBox.svelte",
    "content": "<script>\n\tlet { checked = $bindable(), ...rest } = $props();\n</script>\n\n<input type=\"checkbox\" bind:checked {...rest} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-state-property/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<input type=\"checkbox\"><br>\\nChecked:\\nfalse`,\n\n\ttest({ assert, target }) {\n\t\tconst input = target.querySelector('input');\n\n\t\tinput?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<input type=\"checkbox\"><br>\\nChecked:\\ntrue`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-state-property/main.svelte",
    "content": "<script>\n\timport CheckBox from './CheckBox.svelte';\n\n\tlet checked = $state(false);\n\tfunction wrap() {\n\t\treturn {\n\t\t\tget checked() { return checked },\n\t\t\tset checked(v) { checked = v },\n\t\t}\n\t}\n</script>\n\n{#if true}\n\t{@const obj = wrap()}\n\t<CheckBox type=\"checkbox\" bind:checked={obj.checked} />\n{/if}\n<br/>\nChecked: {checked}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-destroy-timing/Inner.svelte",
    "content": "<script>\n\tlet { data } = $props();\n\n\tconst processed = $derived(data.toUpperCase());\n\n\texport function getProcessed() {\n\t\treturn processed;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-destroy-timing/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tbtn.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clear</button>\n\t\t\t\t<p></p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-destroy-timing/main.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n\n\tlet value = $state('hello');\n\n\tlet innerComp = $state();\n\n\t// Reads Inner's derived value from outside the {#if} block, keeping it\n\t// connected in the reactive graph even after the branch is destroyed.\n\tconst externalView = $derived(innerComp?.getProcessed() ?? '');\n</script>\n\n{#if value}\n\t{@const result = value}\n\t<Inner data={result} bind:this={innerComp} />\n{/if}\n\n<button onclick={() => (value = undefined)}>clear</button>\n<p>{externalView}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-destroy-timing2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tbtn.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>clear</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-destroy-timing2/main.svelte",
    "content": "<script>\n\tlet value = $state('hello');\n\tlet elements = {};\n</script>\n\n{#if value}\n\t<span bind:this={elements[value.toUpperCase()]}>{value}</span>\n{/if}\n\n<button onclick={() => (value = undefined)}>clear</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-no-state/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n/** @param {number | null} selected */\nfunction get_html(selected) {\n\treturn `\n\t\t<button>1</button>\n\t\t<button>2</button>\n\t\t<button>3</button>\n\n\t\t<hr></hr>\n\n\t\t${selected !== null ? `<div>${selected}</div>` : ''}\n\n\t\t<hr></hr>\n\n\t\t<p>${selected ?? '...'}</p>\n\t`;\n}\n\nexport default test({\n\thtml: get_html(null),\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tawait btn1?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, get_html(1));\n\n\t\tawait btn2?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, get_html(2));\n\n\t\tawait btn1?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, get_html(1));\n\n\t\tawait btn3?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, get_html(3));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-no-state/main.svelte",
    "content": "<script>\n\timport { tick } from 'svelte';\n\t\n\tlet selected = $state(-1);\n\tlet current = $state();\n\n\tlet div; // explicitly no $state\n</script>\n\n{#each [1, 2, 3] as n, i}\n\t<button\n\t\tonclick={async () => {\n\t\t\tselected = i;\n\t\t\tawait tick();\n\t\t\tcurrent = div?.textContent;\n\t\t}}\n\t>{n}</button>\n{/each}\n\n<hr />\n\n{#each [1, 2, 3] as n, i}\n\t{#if selected === i}\n\t\t<div bind:this={div}>{n}</div>\n\t{/if}\n{/each}\n\n<hr />\n\n<p>{current ?? '...'}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-order/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button> <nav>hello</nav>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-order/main.svelte",
    "content": "<script>\n\tfunction fly(node, params) {\n\t\treturn {};\n\t}\n\n\tlet show = $state(false);\n\tlet sidebar = $state();\n</script>\n\n<button onclick={() => (show = !show)}>toggle</button>\n\n{#if show}\n\t<!-- bind:this should be applied before any of the directives -->\n\t<nav transition:fly={{ x: sidebar.offsetWidth }} bind:this={sidebar}>hello</nav>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-proxy/Component.svelte",
    "content": "<script>\n\texport const a = {};\n</script>\n<div>Hello world</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-proxy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\t// override process.env.HMR — this test only passes in prod mode, because in dev we add `$destroy` methods etc\n\t\tdev: false\n\t},\n\n\thtml: `<button>Toggle</button><div>Hello\\nworld</div>`,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Toggle</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Toggle</button><div>Hello\\nworld</div>`);\n\n\t\tassert.deepEqual(logs, [{ a: {} }, null, { a: {} }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-proxy/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet type = $state(Component)\n\tlet elem = $state()\n\n\t$effect(() => {\n\t\tconsole.log(elem);\n\t});\n</script>\n\n<button onclick={() => {\n\tif (!type) {\n\t\ttype = Component\n\t} else {\n\t\ttype = false\n\t}\n}}>Toggle</button>\n\n<svelte:component bind:this={elem} this={type}>\n\tContent\n</svelte:component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-raw/ComponentA.svelte",
    "content": "<script>\n\texport const a = {};\n</script>\n\n<div>a</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-raw/ComponentB.svelte",
    "content": "<div>b</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-raw/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>a</button><button>b</button><div>a</div>`,\n\tcompileOptions: {\n\t\tdev: false\n\t},\n\n\tasync test({ assert, target, logs, ok }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>a</button><button>b</button><div>b</div>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>a</button><button>b</button><div>a</div>`);\n\t\tassert.deepEqual(logs, [{ a: {} }, {}, { a: {} }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-this-raw/main.svelte",
    "content": "<script>\n\timport ComponentA from './ComponentA.svelte';\n\timport ComponentB from './ComponentB.svelte';\n\n\tlet type = $state(ComponentA);\n\tlet elem = $state.raw();\n\n\t$effect(() => {\n\t\tconsole.log(elem);\n\t});\n</script>\n\n<button\n\tonclick={() => {\n\t\ttype = ComponentA;\n\t}}>a</button\n>\n<button\n\tonclick={() => {\n\t\ttype = ComponentB;\n\t}}>b</button\n>\n\n<svelte:component this={type} bind:this={elem}>Content</svelte:component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-value-input-type-dynamic/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input type=text>\n\t\t<input type=text>\n\t\t<p>x / y</p>\n\n\t\t<button>change to text</button>\n\t\t<button>change to number</button>\n\t\t<button>change to range</button>\n\t`,\n\tssrHtml: `\n\t\t<input type=text value=x>\n\t\t<input type=text value=y>\n\t\t<p>x / y</p>\n\n\t\t<button>change to text</button>\n\t\t<button>change to number</button>\n\t\t<button>change to range</button>\n\t`,\n\tasync test({ assert, target }) {\n\t\tconst [in1, in2] = target.querySelectorAll('input');\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tin1.value = '0';\n\t\tin2.value = '1';\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tbtn2?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '0 / 1');\n\n\t\tin1.stepUp();\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.stepUp();\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '1 / 2');\n\n\t\tbtn1?.click();\n\t\tawait tick();\n\t\ttry {\n\t\t\tin1.stepUp();\n\t\t\tassert.fail();\n\t\t} catch (e) {\n\t\t\t// expected\n\t\t}\n\n\t\tbtn3?.click();\n\t\tawait tick();\n\t\tin1.stepUp();\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.stepUp();\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '2 / 3');\n\n\t\tbtn1?.click();\n\t\tawait tick();\n\t\tin1.value = 'a';\n\t\tin2.value = 'b';\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a / b');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-value-input-type-dynamic/main.svelte",
    "content": "<script>\n\tlet dynamic = $state('x');\n\tlet spread = $state('y');\n\tlet inputType = $state('text');\n\tlet props = $derived({type: inputType});\n</script>\n\n<input bind:value={dynamic} type={inputType}>\n<input bind:value={spread} {...props}>\n<p>{dynamic} / {spread}</p>\n\n<button onclick={() => inputType = 'text'}>change to text</button>\n<button onclick={() => inputType = 'number'}>change to number</button>\n<button onclick={() => inputType = 'range'}>change to range</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-value-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<input type=\"number\"><div>0</div>`,\n\tmode: ['client', 'hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tconst [input1] = target.querySelectorAll('input');\n\t\tassert.equal(input1.value, '0');\n\n\t\tinput1.value = '1';\n\t\tinput1.dispatchEvent(new window.InputEvent('input'));\n\n\t\tflushSync();\n\n\t\tassert.equal(input1.value, '1');\n\t\tassert.htmlEqual(target.innerHTML, `<input type=\"number\"><div>1</div>`);\n\n\t\tinput1.value = '101';\n\t\tinput1.dispatchEvent(new window.InputEvent('input'));\n\t\tflushSync();\n\n\t\tassert.equal(input1.value, '100');\n\t\tassert.htmlEqual(target.innerHTML, `<input type=\"number\"><div>100</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bind-value-state/main.svelte",
    "content": "<script>\n\tlet v = $state(0)\n\tlet count = {\n\t\tget v() { return v },\n\t\tset v(x) { {\n\t\t\tv = Math.min(100, +x)\n\t\t}},\n\t};\n</script>\n<input bind:value={count.v} type=\"number\">\n<div>{count.v}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/Component.svelte",
    "content": "<script>\n\tlet { open: is_open = $bindable() } = $props();\n\n\texport function open(){\n\t\tis_open = !is_open;\n\t}\n</script>\n\n<button onclick={open}>{is_open}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\thtml: `<button>true</button><button>true</button><input type=\"checkbox\" />`,\n\tssrHtml: `<button>true</button><button>true</button><input type=\"checkbox\" checked=\"\"/>`,\n\n\tasync test({ assert, target, instance }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst input = target.querySelector('input');\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\t\tassert.equal(btn1.innerHTML, 'false');\n\t\tassert.equal(btn2.innerHTML, 'false');\n\t\tassert.equal(input?.checked, false);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\t\tassert.equal(btn1.innerHTML, 'true');\n\t\tassert.equal(btn2.innerHTML, 'true');\n\t\tassert.equal(input?.checked, true);\n\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\t\tassert.equal(btn1.innerHTML, 'false');\n\t\tassert.equal(btn2.innerHTML, 'false');\n\t\tassert.equal(input?.checked, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\tlet open = $state(true);\n\tlet comp;\n</script>\n\n<Component bind:this={comp} bind:open />\n\n<button onclick={()=>{\n\tcomp.open();\n}}>{open}</button>\n\n<input type=\"checkbox\" bind:checked={open} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop/Component1.svelte",
    "content": "<script>\n\tlet { object = $bindable(), primitive = $bindable() } = $props();\n</script>\n\n{#if primitive}\n\t<button onclick={() => (primitive = 'bar')}>{primitive}</button>\n{:else}\n\t<button onclick={() => (object.value = 'bar')}>{object.value}</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop/Component2.svelte",
    "content": "<script>\n\tlet { object = $bindable({}), primitive = $bindable('') } = $props();\n</script>\n\n{#if primitive}\n\t<button onclick={() => (primitive = 'bar')}>{primitive}</button>\n{:else}\n\t<button onclick={() => (object.value = 'bar')}>{object.value}</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop/Legacy.svelte",
    "content": "<svelte:options runes={false} />\n\n<script>\n\timport Component1 from './Component1.svelte';\n\timport Component2 from './Component2.svelte';\n\n\tlet object1 = { value: 'foo' };\n\tlet object2 = { value: 'foo' };\n\n\tlet primitive1 = 'foo';\n\tlet primitive2 = 'foo';\n</script>\n\n{object1.value}\n<Component1 bind:object={object1} />\n\n{object2.value}\n<Component2 bind:object={object2} />\n\n{primitive1}\n<Component1 bind:primitive={primitive1} />\n\n{primitive2}\n<Component2 bind:primitive={primitive2} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop/Runes.svelte",
    "content": "<script>\n\timport Component1 from './Component1.svelte';\n\timport Component2 from './Component2.svelte';\n\n\tlet object1 = $state({ value: 'foo' });\n\tlet object2 = $state({ value: 'foo' });\n\n\tclass Frozen {\n\t\tconstructor(value) {\n\t\t\tthis.value = value;\n\t\t}\n\t}\n\tlet object3 = $state(new Frozen('foo'));\n\tlet object4 = $state(new Frozen('foo'));\n\n\tlet primitive1 = $state('foo');\n\tlet primitive2 = $state('foo');\n</script>\n\n{object1.value}\n<Component1 bind:object={object1} />\n\n{object2.value}\n<Component2 bind:object={object2} />\n\n<!-- force them into a different render effect so they don't coincidently update with the others -->\n{#if true}\n\t{object3.value}\n\t<Component1 bind:object={object3} />\n\n\t{object4.value}\n\t<Component2 bind:object={object4} />\n{/if}\n\n{primitive1}\n<Component1 bind:primitive={primitive1} />\n\n{primitive2}\n<Component2 bind:primitive={primitive2} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst buttons = target.querySelectorAll('button');\n\n\t\tfor (const button of buttons) {\n\t\t\tawait button.click();\n\t\t\tflushSync();\n\t\t}\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\tbar <button>bar</button> bar <button>bar</button> bar <button>bar</button> bar <button>bar</button>\n\t\t\t<hr>\n\t\t\tbar <button>bar</button> bar <button>bar</button> foo <button>foo</button> foo <button>foo</button> bar <button>bar</button> bar <button>bar</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop/main.svelte",
    "content": "<script>\n\timport Legacy from './Legacy.svelte';\n\timport Runes from './Runes.svelte';\n</script>\n\n<Legacy />\n\n<hr />\n\n<Runes />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop-derived/Comp.svelte",
    "content": "<script>\n\n\tlet { children } = $props()\n\n\tconst snippetProps = $derived.by(() => ({\n\t\tid: '123',\n\t\tname: 'my-select'\n\t}))\n\n</script>\n\n{@render children({ props: snippetProps })}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop-derived/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<select id=\"123\" name=\"my-select\"><option>A</option><option>B</option><option>C</option></select>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-interop-derived/main.svelte",
    "content": "<svelte:options runes={false} />\n\n<script>\n\timport { writable } from 'svelte/store'\n\timport Comp from './Comp.svelte'\n\n\tconst myStore = writable('')\n\n</script>\n\n<Comp>\n\t{#snippet children({ props })}\n\t\t\t<select {...props} bind:value={$myStore} >\n\t\t\t\t<option>A</option>\n\t\t\t\t<option>B</option>\n\t\t\t\t<option>C</option>\n\t\t\t</select>\n\t{/snippet}\n</Comp>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-non-reactive-ignored/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-non-reactive-ignored/main.svelte",
    "content": "<script>\n\tlet arr = [];\n</script>\n\n<!-- svelte-ignore binding_property_non_reactive -->\n<svelte:component this={undefined} bind:this={arr[0]} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-non-reactive-ignored-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-non-reactive-ignored-2/main.svelte",
    "content": "<script>\n\tlet arr = [];\n</script>\n\n<!-- svelte-ignore binding_property_non_reactive -->\n<input bind:value={arr[0]} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-static/Child.svelte",
    "content": "<script lang=\"ts\">\n\tlet { value = $bindable() }: { value: number } = $props();\n</script>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, warnings }) {\n\t\tassert.deepEqual(warnings, [\n\t\t\t'`bind:value={pojo.value}` (main.svelte:50:7) is binding to a non-reactive property',\n\t\t\t'`bind:value={raw.value}` (main.svelte:51:7) is binding to a non-reactive property',\n\t\t\t'`bind:value={pojo.value}` (main.svelte:52:7) is binding to a non-reactive property',\n\t\t\t'`bind:value={raw.value}` (main.svelte:53:7) is binding to a non-reactive property',\n\t\t\t'`bind:this={pojo.value}` (main.svelte:55:6) is binding to a non-reactive property'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-static/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet pojo = {\n\t\tvalue: 1\n\t};\n\n\tlet raw = $state.raw({\n\t\tvalue: 2\n\t});\n\n\tlet reactive = $state({\n\t\tvalue: 3\n\t});\n\n\tlet value = $state(4);\n\tlet accessors = {\n\t\tget value() {\n\t\t\treturn value;\n\t\t},\n\t\tset value(v) {\n\t\t\tvalue = v;\n\t\t}\n\t};\n\n\tlet proxied = $state(5);\n\tlet proxy = new Proxy(\n\t\t{},\n\t\t{\n\t\t\tget(target, prop, receiver) {\n\t\t\t\tif (prop === 'value') {\n\t\t\t\t\treturn proxied;\n\t\t\t\t}\n\n\t\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t\t},\n\t\t\tset(target, prop, value, receiver) {\n\t\t\t\tif (prop === 'value') {\n\t\t\t\t\tproxied = value;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn Reflect.set(target, prop, value, receiver);\n\t\t\t}\n\t\t}\n\t);\n</script>\n\n<!-- should warn -->\n<input bind:value={pojo.value} />\n<input bind:value={raw.value} />\n<Child bind:value={pojo.value} />\n<Child bind:value={raw.value} />\n{#if value}\n\t<div bind:this={pojo.value}></div>\n{/if}\n\n<!-- should not warn -->\n<input bind:value={reactive.value} />\n<input bind:value={accessors.value} />\n<input bind:value={proxy.value} />\n<Child bind:value={reactive.value} />\n<Child bind:value={accessors.value} />\n<Child bind:value={proxy.value} />\n<div bind:this={pojo.value}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-store/Child.svelte",
    "content": "<script>\n\tlet { value = $bindable() } = $props();\n</script>\n\n<input type=\"number\" bind:value />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-store/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-property-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\timport Child from './Child.svelte';\n\n\tlet a = writable({ value: 0 });\n\tlet b = writable({ nested: { value: 0 } });\n</script>\n\n<Child bind:value={$a.value} />\n<Child bind:value={$b.nested.value} />\n<p>{$a.value}</p>\n<p>{$b.nested.value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-in-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\thtml: `<input><p>a</a>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tinput.focus();\n\t\tinput.value = 'ab';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<input><p>ab</a>`);\n\t\tassert.equal(input.value, 'ab');\n\n\t\tinput.focus();\n\t\tinput.value = 'abc';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<input><p>abc</a>`);\n\t\tassert.equal(input.value, 'abc');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-in-each/main.svelte",
    "content": "<script>\n\tlet array = $state([{ value: 'a' }]);\n</script>\n\n{#each array as obj}\n\t<input bind:value={() => obj.value, (value) => array = [{ value }]} />\n\t<p>{obj.value}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-while-focused/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tflushSync(() => {\n\t\t\tinput.focus();\n\t\t\tinput.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }));\n\t\t});\n\t\tassert.equal(input.value, '2');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<label>\n\t\t\t\t\t<input /> arrow up/down\n\t\t\t\t</label>\n\t\t\t\t<p>value = 2</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tinput.focus();\n\t\t\tinput.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));\n\t\t});\n\t\tassert.equal(input.value, '1');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<label>\n\t\t\t\t\t<input /> arrow up/down\n\t\t\t\t</label>\n\t\t\t\t<p>value = 1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-while-focused/main.svelte",
    "content": "<script>\n\tlet value = $state('1');\n\n\tfunction onkeydown (e) {\n\t\tlet _v = parseFloat(value);\n\t\tif (e.key === 'ArrowUp') _v += 1;\n\t\telse if (e.key === 'ArrowDown') _v -= 1;\n\t\tvalue = _v.toString();\n\t}\n</script>\n\n<label>\n\t<input bind:value {onkeydown} /> arrow up/down\n</label>\n\n<p>value = {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-while-focused-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tinput.focus();\n\t\tinput.value = '3';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.equal(input.value, '3');\n\t\tassert.htmlEqual(target.innerHTML, `<p>3</p> <input type=\"number\" />`);\n\n\t\tinput.focus();\n\t\tinput.value = '1';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.equal(input.value, '2');\n\t\tassert.htmlEqual(target.innerHTML, `<p>2</p> <input type=\"number\" />`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-while-focused-2/main.svelte",
    "content": "<script>\n\tlet value = $state(0)\n\tconst min = 2\n\tconst max = 5\n\n\t$effect(() => {\n\t\tsetValue()\n\t})\n\n\tfunction setValue() {\n\t\tif (value < min) {\n\t\t\tvalue = min\n\t\t}\n\t\tif (value > max) {\n\t\t\tvalue = max\n\t\t}\n\t}\n</script>\n\n<p>{value}</p>\n<input type=\"number\" bind:value />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-while-focused-3/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\tasync test({ assert, target }) {\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tinput.focus();\n\t\tinput.value = 'Ab';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.equal(input.value, 'AB');\n\t\tassert.htmlEqual(target.innerHTML, `<input /><p>AB</p>`);\n\n\t\tinput.focus();\n\t\tinput.value = 'ABc';\n\t\tinput.dispatchEvent(new InputEvent('input', { bubbles: true }));\n\n\t\tawait tick();\n\t\tawait tick();\n\n\t\tassert.equal(input.value, 'ABC');\n\t\tassert.htmlEqual(target.innerHTML, `<input /><p>ABC</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/binding-update-while-focused-3/main.svelte",
    "content": "<script>\n\tlet text = $state('A');\n</script>\n\n<input bind:value={() => text, (v) => text = v.toUpperCase()} />\n<p>{text}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bindings-form-reset/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.htmlEqual(\n\t\t\tp?.innerHTML || '',\n\t\t\t`{\"text\":\"text\",\"checkbox\":true,\"radio_group\":\"a\",\"checkbox_group\":[\"a\"],\"select\":\"b\",\"textarea\":\"textarea\"}`\n\t\t);\n\n\t\tawait target.querySelector('button')?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\tp?.innerHTML || '',\n\t\t\t`{\"text\":\"\",\"checkbox\":false,\"radio_group\":null,\"checkbox_group\":[],\"select\":\"a\",\"textarea\":\"\"}`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bindings-form-reset/main.svelte",
    "content": "<script>\n\tlet text = $state('text');\n\tlet checkbox = $state(true);\n\tlet radio_group = $state('a');\n\tlet checkbox_group = $state(['a']);\n\t// this will be ssrd\n\tlet select = $state('a');\n\tlet textarea = $state('textarea');\n\n\t$effect(()=>{\n\t\t// changing the value of `select` on mount\n\t\tselect = 'b';\n\t})\n</script>\n\n<p>{JSON.stringify({ text, checkbox, radio_group, checkbox_group, select, textarea })}</p>\n\n<form>\n\t<input bind:value={text} />\n\t\n\t<input type=\"checkbox\" bind:checked={checkbox} />\n\t\n\t<input type=\"radio\" name=\"radio\" value=\"a\" bind:group={radio_group} />\n\t<input type=\"radio\" name=\"radio\" value=\"b\" bind:group={radio_group} />\n\t\n\t<input type=\"checkbox\" name=\"checkbox\" value=\"a\" bind:group={checkbox_group} />\n\t<input type=\"checkbox\" name=\"checkbox\" value=\"b\" bind:group={checkbox_group} />\n\n\t<select bind:value={select}>\n\t\t<option value=\"a\">a</option>\n\t\t<option value=\"b\">b</option>\n\t</select>\n\n\t<textarea bind:value={textarea}></textarea>\n\n\t<button type=\"button\" onclick={(e) => e.target.form.reset()}>Reset</button>\n</form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/block-dependency-sequence/Component.svelte",
    "content": "<script>\n\tconst { item } = $props();\n</script>\n\n<div>\n\t{#if item}\n\t\t{item.length}\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/block-dependency-sequence/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, component }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div>5</div><div>5</div><div>3</div><button>set null</button><button>set object</button'\n\t\t);\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div>5</div><div>5</div><div>3</div><button>set null</button><button>set object</button'\n\t\t);\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div>5</div><div></div><div>3</div><button>set null</button><button>set object</button'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/block-dependency-sequence/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet items = $state(['hello', 'world', 'bye']);\n</script>\n\n{#each items as item}\n\t<Component {item} />\n{/each}\n\n<button onclick={() => (items[1] = null)}> set null </button>\n<button onclick={() => (items[1] = 'hello')}> set object </button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bound-store-sub/Child.svelte",
    "content": "<script>\n\tlet { form = $bindable() } = $props();\n</script>\n\n<p>\n\t<input type=\"number\" bind:value={form.count} />\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bound-store-sub/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { ok } from 'assert';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<p><input type=\"number\"></p>\\n{\"count\":0}`,\n\tssrHtml: `<p><input type=\"number\" value=\"0\"></p>\\n{\"count\":0}`,\n\n\ttest({ assert, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tconst inputEvent = new window.InputEvent('input');\n\n\t\tinput.value = '10';\n\t\tinput.dispatchEvent(inputEvent);\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<p><input type=\"number\"></p>\\n{\"count\":10}`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/bound-store-sub/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\timport Child from './Child.svelte';\n\n\tlet form = writable({\n\t\tcount: 0\n\t});\n</script>\n\n<Child bind:form={$form} />\n{JSON.stringify($form)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/boundary-effect-error/Test.svelte",
    "content": "<script>\n  $effect(() => {\n    throw new Error('boom');\n  });\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/boundary-effect-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t// allow effects to run / microtasks to flush\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught: boom</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/boundary-effect-error/main.svelte",
    "content": "<script>\n  import Test from './Test.svelte';\n</script>\n\n<svelte:boundary>\n  <Test />\n\n  {#snippet failed(e)}\n    <p>caught: {e.message}</p>\n  {/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/checkbox-binding-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Add</button><label><input type=\"checkbox\"></label><label><input type=\"checkbox\"></label>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/checkbox-binding-derived/checkbox.svelte",
    "content": "<script>\n  let { value = $bindable() } = $props();\n</script>\n\n<label>\n  <input type=\"checkbox\" bind:checked={value} />\n</label>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/checkbox-binding-derived/main.svelte",
    "content": "<script>\n\timport Checkbox from './checkbox.svelte';\n\n\tlet foo = $state({})\n\n\tconst schema = $state({\n    foo: true,\n  })\n\n\tfunction retrieveSchema() {\n\t\tconst cloned = { ...schema }\n\t\tfor (const key of Object.keys(foo)) {\n\t\t\tcloned[key] = key\n\t\t}\n\t\treturn cloned\n\t}\n\n\tconst keys = $derived(Object.keys(retrieveSchema()));\n\tlet nextKey = 1;\n</script>\n\n<button onclick={() => {\n\tfoo[nextKey++] = true\n}}>Add</button>\n\n{#each keys as key (key)}\n\t<Checkbox bind:value={foo[key]} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-directive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div class=\"svelte-tza1s0\"></div>\n\t<span></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t<div class=\"foo svelte-tza1s0\"></div>\n\t<span class=\"foo\"></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0\"></span></div>\n\n\n\t<div class=\"foo svelte-tza1s0 bar\"></div>\n\t<span class=\"foo bar\"></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0 bar\"></span></div>\n\n\t<div class=\"svelte-tza1s0\"></div>\n\t<span></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t<div class=\"svelte-tza1s0 bar\"></div>\n\t<span class=\"bar\"></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 bar\"></span></div>\n\n\t<div class=\"football svelte-tza1s0 bar\"></div>\n\t<span class=\"football bar\"></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"football svelte-tza1s0 bar\"></span></div>\n\n\t<div class=\"svelte-tza1s0 bar not-foo\"></div>\n\t<span class=\"bar not-foo\"></span>\n\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 bar not-foo\"></span></div>\n\n\t`,\n\ttest({ assert, target, component }) {\n\t\tcomponent.foo = true;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"svelte-tza1s0\"></div>\n\t\t\t<span></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"foo svelte-tza1s0\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"foo svelte-tza1s0 bar\"></div>\n\t\t\t<span class=\"foo bar\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0 bar\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 foo\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 foo\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 bar foo\"></div>\n\t\t\t<span class=\"bar foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 bar foo\"></span></div>\n\n\t\t\t<div class=\"football svelte-tza1s0 bar foo\"></div>\n\t\t\t<span class=\"football bar foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"football svelte-tza1s0 bar foo\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 bar foo\"></div>\n\t\t\t<span class=\"bar foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 bar foo\"></span></div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.bar = false;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"svelte-tza1s0\"></div>\n\t\t\t<span></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"foo svelte-tza1s0\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"foo svelte-tza1s0\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 foo\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 foo\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 foo\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 foo\"></span></div>\n\n\t\t\t<div class=\"football svelte-tza1s0 foo\"></div>\n\t\t\t<span class=\"football foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"football svelte-tza1s0 foo\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 foo\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 foo\"></span></div>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.foo = false;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div class=\"svelte-tza1s0\"></div>\n\t\t\t<span></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"foo svelte-tza1s0\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"foo svelte-tza1s0\"></div>\n\t\t\t<span class=\"foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"foo svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0\"></div>\n\t\t\t<span class=\"\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0\"></div>\n\t\t\t<span class=\"\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"football svelte-tza1s0\"></div>\n\t\t\t<span class=\"football\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"football svelte-tza1s0\"></span></div>\n\n\t\t\t<div class=\"svelte-tza1s0 not-foo\"></div>\n\t\t\t<span class=\"not-foo\"></span>\n\t\t\t<div class=\"svelte-tza1s0\"><span class=\"svelte-tza1s0 not-foo\"></span></div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-directive/main.svelte",
    "content": "<script>\n\tlet { foo = false, bar = true } = $props();\n</script>\n\n<div></div>\n<span></span>\n<div><span></span></div>\n\n<div class=\"foo\"></div>\n<span class=\"foo\"></span>\n<div><span class=\"foo\"></span></div>\n\n<div class=\"foo\" class:bar></div>\n<span class=\"foo\" class:bar></span>\n<div><span class=\"foo\" class:bar></span></div>\n\n<div class=\"foo\" class:foo></div>\n<span class=\"foo\" class:foo></span>\n<div><span class=\"foo\" class:foo></span></div>\n\n<div class=\"foo\" class:bar class:foo></div>\n<span class=\"foo\" class:bar class:foo></span>\n<div><span class=\"foo\" class:bar class:foo></span></div>\n\n<div class=\"football\" class:bar class:foo></div>\n<span class=\"football\" class:bar class:foo></span>\n<div><span class=\"football\" class:bar class:foo></span></div>\n\n<div class=\"foo\" class:bar class:foo class:not-foo={!foo}></div>\n<span class=\"foo\" class:bar class:foo class:not-foo={!foo}></span>\n<div><span class=\"foo\" class:bar class:foo class:not-foo={!foo}></span></div>\n\n<style>\n\tdiv {\n\t\tcolor: red;\n\t}\n\tdiv > span {\n\t\tfont-weight: bold;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-directive-mutations/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\n// This test counts mutations on hydration\n// set_class() should not mutate class on hydration, except if mismatch\nexport default test({\n\tmode: ['server', 'hydrate'],\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\thtml: `\n\t\t<main id=\"main\" class=\"browser\">\n\t\t\t<div class=\"custom svelte-1cjqok6 foo bar\" title=\"a title\"></div>\n\t\t\t<span class=\"svelte-1cjqok6 foo bar\"></span>\n\t\t\t<b class=\"custom foo bar\"></b>\n\t\t\t<i class=\"foo bar\"></i>\n\n\t\t\t<div class=\"custom svelte-1cjqok6 foo bar\" title=\"a title\"></div>\n\t\t\t<span class=\"svelte-1cjqok6 foo bar\"></span>\n\t\t\t<b class=\"custom foo bar\"></b>\n\t\t\t<i class=\"foo bar\"></i>\n\t\t</main>\n\t`,\n\n\tssrHtml: `\n\t\t<main id=\"main\">\n\t\t\t<div class=\"custom svelte-1cjqok6 foo bar\" title=\"a title\"></div>\n\t\t\t<span class=\"svelte-1cjqok6 foo bar\"></span>\n\t\t\t<b class=\"custom foo bar\"></b>\n\t\t\t<i class=\"foo bar\"></i>\n\n\t\t\t<div class=\"custom svelte-1cjqok6 foo bar\" title=\"a title\"></div>\n\t\t\t<span class=\"svelte-1cjqok6 foo bar\"></span>\n\t\t\t<b class=\"custom foo bar\"></b>\n\t\t\t<i class=\"foo bar\"></i>\n\t\t</main>\n\t`,\n\n\tasync test({ target, assert, component, instance }) {\n\t\tflushSync();\n\t\ttick();\n\t\tassert.deepEqual(instance.get_and_clear_mutations(), ['MAIN']);\n\n\t\tcomponent.foo = false;\n\t\tflushSync();\n\t\ttick();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'SPAN', 'B', 'I', 'DIV', 'SPAN', 'B', 'I'],\n\t\t\t'first mutation'\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<main id=\"main\" class=\"browser\">\n\t\t\t\t<div class=\"custom svelte-1cjqok6 bar\" title=\"a title\"></div>\n\t\t\t\t<span class=\"svelte-1cjqok6 bar\"></span>\n\t\t\t\t<b class=\"custom bar\"></b>\n\t\t\t\t<i class=\"bar\"></i>\n\n\t\t\t\t<div class=\"custom svelte-1cjqok6 bar\" title=\"a title\"></div>\n\t\t\t\t<span class=\"svelte-1cjqok6 bar\"></span>\n\t\t\t\t<b class=\"custom bar\"></b>\n\t\t\t\t<i class=\"bar\"></i>\n\t\t\t</main>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.foo = true;\n\t\tflushSync();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'SPAN', 'B', 'I', 'DIV', 'SPAN', 'B', 'I'],\n\t\t\t'second mutation'\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<main id=\"main\" class=\"browser\">\n\t\t\t\t<div class=\"custom svelte-1cjqok6 bar foo\" title=\"a title\"></div>\n\t\t\t\t<span class=\"svelte-1cjqok6 bar foo\"></span>\n\t\t\t\t<b class=\"custom bar foo\"></b>\n\t\t\t\t<i class=\"bar foo\"></i>\n\n\t\t\t\t<div class=\"custom svelte-1cjqok6 bar foo\" title=\"a title\"></div>\n\t\t\t\t<span class=\"svelte-1cjqok6 bar foo\"></span>\n\t\t\t\t<b class=\"custom bar foo\"></b>\n\t\t\t\t<i class=\"bar foo\"></i>\n\t\t\t</main>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.classname = 'another';\n\t\tflushSync();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'B', 'DIV', 'B'],\n\t\t\t'class mutation'\n\t\t);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<main id=\"main\" class=\"browser\">\n\t\t\t\t<div class=\"another svelte-1cjqok6 foo bar\" title=\"a title\"></div>\n\t\t\t\t<span class=\"svelte-1cjqok6 bar foo\"></span>\n\t\t\t\t<b class=\"another foo bar\"></b>\n\t\t\t\t<i class=\"bar foo\"></i>\n\n\t\t\t\t<div class=\"another svelte-1cjqok6 foo bar\" title=\"a title\"></div>\n\t\t\t\t<span class=\"svelte-1cjqok6 bar foo\"></span>\n\t\t\t\t<b class=\"another foo bar\"></b>\n\t\t\t\t<i class=\"bar foo\"></i>\n\t\t\t</main>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-directive-mutations/main.svelte",
    "content": "<script>\n\tlet {\n\t\tclassname = 'custom',\n\t\tfoo = true,\n\t\tbar = true,\n\t\tbrowser\n\t} = $props();\n\n\tlet mutations = [];\n\tlet observer;\n\n\tif (browser) {\n\t\tobserver = new MutationObserver(update_mutation_records);\n\t\tobserver.observe(document.querySelector('#main'), { attributes: true, subtree: true });\n\n\t\t$effect(() => {\n\t\t\treturn () => observer.disconnect();\n\t\t});\n\t}\n\n\tfunction update_mutation_records(results) {\n\t\tfor (const r of results) {\n\t\t\tmutations.push(r.target.nodeName);\n\t\t}\n\t}\n\n\texport function get_and_clear_mutations() {\n\t\tupdate_mutation_records(observer.takeRecords());\n\t\tconst result = mutations;\n\t\tmutations = [];\n\t\treturn result;\n\t}\n</script>\n\n<main id=\"main\" class:browser>\n\t<div class={classname} title=\"a title\" class:foo class:bar></div>\n\t<span class:foo class:bar></span>\n\t<b class={classname} class:foo class:bar></b>\n\t<i class:foo class:bar></i>\n\n\t<div {...{class:classname, title:\"a title\"}} class:foo class:bar></div>\n\t<span {...{}} class:foo class:bar></span>\n\t<b {...{class:classname}} class:foo class:bar></b>\n\t<i {...{}} class:foo class:bar></i>\t\n</main>\n\n<style>\n\tdiv,\n\tspan {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-disabinguate-private-method-definition/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-disabinguate-private-method-definition/main.svelte",
    "content": "<script>\n\tclass Repo {\n\t  tree = $state();\n\t  async #tree() {\n\t  }\n\t}\n\tconst repo = new Repo();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-fields-assignment-shorthand/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>inc</button>\n\t\t\t<p>a:1</p>\n\t\t\t<p>b:2</p>\n\t\t\t<p>c:3</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-fields-assignment-shorthand/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#a = $state();\n\t\t#b = $state({ val: -1 });\n\t\t#c = $state();\n\t\tconstructor() {\n\t\t\tthis.#a ||= {val: 0}\n\t\t\tthis.#b &&= {val: 0}\n\t\t\tthis.#c ??= {val: 0}\n\t\t}\n\t\tinc() {\n\t\t\tthis.#a.val += 1;\n\t\t\tthis.#b.val += 2;\n\t\t\tthis.#c.val += 3;\n\t\t}\n\t\tget a() { return this.#a?.val; }\n\t\tget b() { return this.#b?.val; }\n\t\tget c() { return this.#c?.val; }\n\t}\n\n\tlet counter = new Counter();\n</script>\n\n<button onclick={() => counter.inc()}>inc</button>\n<!-- prevent updating outputs in a common effect -->\n{#key 1}<p>a:{counter.a}</p>{/key}\n{#key 2}<p>b:{counter.b}</p>{/key}\n{#key 3}<p>c:{counter.c}</p>{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-fields-reassigned-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, [1, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-fields-reassigned-this/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state();\n\n\t\tconstructor(){\n\t\t\tconst instance = this;\n\t\t\tinstance.#count = 1;\n\t\t}\n\n\t\tget count(){\n\t\t\treturn this.#count;\n\t\t}\n\n\t\tget count2() {\n\t\t\tconst instance = this;\n\t\t\treturn instance.#count;\n\t\t}\n\t}\n\tconst counter = new Counter();\n\n\t$inspect(counter.count)\n\t$inspect(counter.count2)\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-raw-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-raw-state/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state.raw(0);\n\n\t\tconstructor(initial_count) {\n\t\t\tthis.#count = initial_count;\n\t\t}\n\n\t\tget count() {\n\t\t\treturn this.#count;\n\t\t}\n\t\tset count(val) {\n\t\t\tthis.#count = val;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-raw-state-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-raw-state-object/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state.raw();\n\n\t\tconstructor(initial_count) {\n\t\t\tthis.#count = { a: initial_count };\n\t\t}\n\n\t\tget count() {\n\t\t\treturn this.#count;\n\t\t}\n\t\tset count(val) {\n\t\t\tthis.#count = val;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button\n\ton:click={() => {\n\t\tcounter.count.a++;\n\t}}>{counter.count.a}</button\n>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state(0);\n\n\t\tconstructor(initial_count) {\n\t\t\tthis.#count = initial_count;\n\t\t}\n\n\t\tget count() {\n\t\t\treturn this.#count;\n\t\t}\n\t\tset count(val) {\n\t\t\tthis.#count = val;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state-increment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>1</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>4</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state-increment/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state(1);\n\n\t\tdouble() {\n\t\t\tthis.#count *= 2;\n\t\t}\n\n\t\tgetCount() {\n\t\t\treturn this.#count;\n\t\t}\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.double()}>{counter.getCount()}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state-init/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state-init/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state(0);\n\n\t\tget count() {\n\t\t\treturn this.#count;\n\t\t}\n\t\tset count(val) {\n\t\t\tthis.#count = val;\n\t\t}\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state-proxy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-private-state-proxy/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state();\n\n\t\tconstructor(v) {\n\t\t\tthis.#count = v;\n\t\t}\n\n\t\tget count() {\n\t\t\treturn this.#count;\n\t\t}\n\t}\n\tconst counter = new Counter({ count: 0 });\n</script>\n\n<button on:click={() => counter.count.count++}>{counter.count.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-raw-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-raw-state/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state.raw(0);\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-raw-state-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-raw-state-object/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state.raw({ a: 0 });\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button\n\ton:click={() => {\n\t\tcounter.count.a++;\n\t}}>{counter.count.a}</button\n>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-conflicting-get-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-conflicting-get-name/main.svelte",
    "content": "<script>\n\tclass Test {\n\t\t0 = $state();\n\t\t1 = $state();\n\t}\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>20</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<button>22</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<button>24</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t/** @type {number} */\n\t\t#count;\n\n\t\tconstructor(initial) {\n\t\t\tthis.#count = $state(initial);\n\t\t\tthis.doubled = $derived(this.#count * 2);\n\t\t}\n\n\t\tincrement = () => {\n\t\t\tthis.#count++;\n\t\t}\n\t}\n\tconst counter = new Counter(10);\n</script>\n\n<button onclick={counter.increment}>{counter.doubled}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\tssrHtml: `<button>0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>10</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count = $state(0);\n\n\t\tconstructor() {\n\t\t\t$effect(() => {\n\t\t\t\tthis.#count = 10;\n\t\t\t});\n\t\t}\n\n\t\tgetCount() {\n\t\t\treturn this.#count;\n\t\t}\n\n\t\tincrement() {\n\t\t\tthis.#count++;\n\t\t}\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.increment()}>{counter.getCount()}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure-private-1/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\tssrHtml: `<button>0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>10</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure-private-1/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\n\t\tconstructor() {\n\t\t\t$effect(() => {\n\t\t\t\tthis.count = 10;\n\t\t\t});\n\t\t}\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure-private-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\tssrHtml: `<button>0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>10</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure-private-2/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tconstructor() {\n\t\t\tthis.count = $state(0);\n\t\t\t$effect(() => {\n\t\t\t\tthis.count = 10;\n\t\t\t});\n\t\t}\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure-private-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\tssrHtml: `<button>0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>10</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-closure-private-3/main.svelte",
    "content": "<script>\n\tconst counter = new class Counter {\n\t\tconstructor() {\n\t\t\tthis.count = $state(0);\n\t\t\t$effect(() => {\n\t\t\t\tthis.count = 10;\n\t\t\t});\n\t\t}\n\t}\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-conflicting-get-name/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-conflicting-get-name/main.svelte",
    "content": "<script>\n\tclass Test {\n\t\t0 = $state();\n\n\t\tconstructor() {\n\t\t\tthis[1] = $state();\n\t\t}\n\t}\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-derived-unowned/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// The component context class instance gets shared between tests, strangely, causing hydration to fail?\n\tmode: ['client', 'server'],\n\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'class trigger false', 'local trigger false', 1]);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'class trigger false', 'local trigger false', 1, 2]);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'class trigger false', 'local trigger false', 1, 2, 3]);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [\n\t\t\t0,\n\t\t\t'class trigger false',\n\t\t\t'local trigger false',\n\t\t\t1,\n\t\t\t2,\n\t\t\t3,\n\t\t\t4,\n\t\t\t'class trigger true',\n\t\t\t'local trigger true'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-derived-unowned/main.svelte",
    "content": "<script module>\n\tclass SomeLogic {\n\t\ttrigger() {\n\t\t\tthis.someValue++;\n\t\t}\n\n\t\tconstructor() {\n\t\t\tthis.someValue = $state(0);\n\t\t\tthis.isAboveThree = $derived(this.someValue > 3);\n\t\t}\n\t}\n\n\tconst someLogic = new SomeLogic();\n</script>\n\n<script>\n\tfunction increment() {\n\t\tsomeLogic.trigger();\n\t}\n\n\tlet localDerived = $derived(someLogic.someValue > 3);\n\n\t$effect(() => {\n\t\tconsole.log(someLogic.someValue);\n\t});\n\t$effect(() => {\n\t\tconsole.log('class trigger ' + someLogic.isAboveThree)\n\t});\n\t$effect(() => {\n\t\tconsole.log('local trigger ' + localDerived)\n\t});\n\n</script>\n\n<button on:click={increment}>\n\tclicks: {someLogic.someValue}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-predeclared-field/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-predeclared-field/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount;\n\n\t\tconstructor(count) {\n\t\t\tthis.count = $state(count);\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button onclick={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-subclass/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10: 20</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<button>11: 22</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<button>12: 24</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-constructor-subclass/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tconstructor(initial) {\n\t\t\tthis.count = $state(initial);\n\t\t}\n\n\t\tincrement = () => {\n\t\t\tthis.count++;\n\t\t}\n\t}\n\n\tclass PluggableCounter extends Counter {\n\t\tconstructor(initial, plugin) {\n\t\t\tsuper(initial)\n\t\t\tthis.custom = $derived(plugin(this.count));\n\t\t}\n\t}\n\n\tconst counter = new PluggableCounter(10, (count) => count * 2);\n</script>\n\n<button onclick={counter.increment}>{counter.count}: {counter.custom}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-deep-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0 / 0</button><button>0 / 0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1 / 0</button><button>1 / 0</button>`);\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2 / 1</button><button>2 / 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-deep-update/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcontainer = $state({ count: -1 });\n\t\t#private = $state({ count: -1 });\n\n\t\tconstructor(initial_count) {\n\t\t\tthis.container.count = initial_count;\n\t\t\tthis.#private.count = initial_count;\n\t\t}\n\n\t\tincrement() {\n\t\t\tthis.container.count += 1;\n\t\t\tthis.#private.count += 1;\n\t\t}\n\n\t\tget private_count() {\n\t\t\treturn this.#private.count;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.container.count++}>{counter.container.count} / {counter.private_count}</button>\n<button on:click={() => counter.increment()}>{counter.container.count} / {counter.private_count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<p>doubled: 0</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<p>doubled: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>2</button>\n\t\t\t\t<p>doubled: 4</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t\tdoubled = $derived(this.count * 2);\n\t}\n\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n<p>doubled: {counter.doubled}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `2`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-2/main.svelte",
    "content": "<script>\n\texport class Counter {\n\t\tcount = $state(0);\n\t\tdoubled = $derived(this.count * 2);\n\n\t\tconstructor(initialCount = 0) {\n\t\t\tthis.count = initialCount;\n\t\t}\n\t}\n\n\tconst counter = new Counter(1);\n</script>\n\n{counter.doubled}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>a\\n1</p><p>b\\n2</p><p>c\\n4</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-3/main.svelte",
    "content": "<script>\n\tclass Foo {\n\t\ta = $state(0);\n\t\tc = $derived(this.b * 2);\n\t\tb = $derived(this.a * 2);\n\n\t\tconstructor(a) {\n\t\t\tthis.a = a;\n\t\t}\n\t}\n\n\tconst foo = new Foo(1);\n</script>\n\n<p>a {foo.a}</p>\n<p>b {foo.b}</p>\n<p>c {foo.c}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-fn/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<p>doubled: 0</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<p>doubled: 2</p>\n\t\t\t`\n\t\t);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>2</button>\n\t\t\t\t<p>doubled: 4</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-fn/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t\tdoubled = $derived.by(() => this.count * 2);\n\t}\n\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n<p>doubled: {counter.doubled}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-private/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<p>doubled: 0</p>\n\t\t<p>tripled: 0</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<p>doubled: 2</p>\n\t\t\t\t<p>tripled: 3</p>\n\t\t\t`\n\t\t);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>2</button>\n\t\t\t\t<p>doubled: 4</p>\n\t\t\t\t<p>tripled: 6</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-private/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t\t#doubled = $derived(this.count * 2);\n\t\t#tripled = $derived.by(() => this.count * this.by);\n\n\t\tconstructor(by) {\n\t\t\tthis.by = by;\n\t\t}\n\n\t\tget embiggened1() {\n\t\t\tconst self = this;\n\t\t\treturn self.#doubled;\n\t\t}\n\n\t\tget embiggened2() {\n\t\t\treturn this.#tripled;\n\t\t}\n\t}\n\n\tconst counter = new Counter(3);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n<p>doubled: {counter.embiggened1}</p>\n<p>tripled: {counter.embiggened2}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-unowned/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// The component context class instance gets shared between tests, strangely, causing hydration to fail?\n\tmode: ['client', 'server'],\n\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'class trigger false', 'local trigger false', 1]);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'class trigger false', 'local trigger false', 1, 2]);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'class trigger false', 'local trigger false', 1, 2, 3]);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [\n\t\t\t0,\n\t\t\t'class trigger false',\n\t\t\t'local trigger false',\n\t\t\t1,\n\t\t\t2,\n\t\t\t3,\n\t\t\t4,\n\t\t\t'class trigger true',\n\t\t\t'local trigger true'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-derived-unowned/main.svelte",
    "content": "<script module>\n\tclass SomeLogic {\n\t\tsomeValue = $state(0);\n\t\tisAboveThree = $derived(this.someValue > 3);\n\t\ttrigger() {\n\t\t\tthis.someValue++;\n\t\t}\n\t}\n\n\tconst someLogic = new SomeLogic();\n</script>\n\n<script>\n\tfunction increment() {\n\t\tsomeLogic.trigger();\n\t}\n\n\tlet localDerived = $derived(someLogic.someValue > 3);\n\n\t$effect(() => {\n\t\tconsole.log(someLogic.someValue);\n\t});\n\t$effect(() => {\n\t\tconsole.log('class trigger ' + someLogic.isAboveThree)\n\t});\n\t$effect(() => {\n\t\tconsole.log('local trigger ' + localDerived)\n\t});\n\n</script>\n\n<button on:click={increment}>\n\tclicks: {someLogic.someValue}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-effect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>11</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>12</button>`);\n\n\t\tassert.deepEqual(logs, [0, 10, 11, 12]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-effect/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t\tconstructor(initial) {\n\t\t\t$effect.pre(() => {\n\t\t\t\tconsole.log(this.count);\n\t\t\t});\n\t\t\tthis.count = initial;\n\t\t}\n\t}\n\tconst counter = new Counter(10);\n</script>\n\n<button onclick={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-effect-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>11</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>12</button>`);\n\n\t\tassert.deepEqual(logs, [0, 10, 11, 12]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-effect-derived/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t\tconstructor(initial) {\n\t\t\t$effect.pre(() => {\n\t\t\t\tconsole.log(this.count);\n\t\t\t});\n\t\t\tthis.count = initial;\n\t\t}\n\t}\n\tconst counter = $derived(new Counter(10));\n\n\tcounter;\n</script>\n\n<button onclick={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-extended-effect-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>10</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>11</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>12</button>`);\n\n\t\tassert.deepEqual(logs, [0, 10, 11, 12]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-extended-effect-derived/main.svelte",
    "content": "<script>\n\tclass Base {\n\t\tcount = $state(0);\n\t}\n\n\tclass Counter extends Base {\n\t\tconstructor(initial) {\n\t\t\tsuper();\n\t\t\t$effect.pre(() => {\n\t\t\t\tconsole.log(this.count);\n\t\t\t});\n\t\t\tthis.count = initial;\n\t\t}\n\t}\n\tconst counter = $derived(new Counter(10));\n\n\tcounter;\n</script>\n\n<button onclick={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-increment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>1</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>4</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-increment/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(1);\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count *= 2}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\n\t\tconstructor(initial_count) {\n\t\t\tthis.count = initial_count;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-conflict/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-conflict/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\t\t#count;\n\t\t#_count;\n\n\t\tconstructor(initial_count) {\n\t\t\tthis.count = initial_count;\n\t\t\tthis.#count = 100;\n\t\t\tthis.#_count = 100;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-eager/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\n\t\tassert.deepEqual(logs, [100]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-eager/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(100);\n\t\t#count;\n\n\t\tconstructor(initial_count) {\n\t\t\tconsole.log(this.count)\n\t\t\tthis.count = initial_count;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-eager-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\n\t\tassert.deepEqual(logs, [undefined]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-eager-2/main.svelte",
    "content": "<script>\n\tconst logger = (obj) => {\n\t\tconsole.log(obj.count)\n\t}\n\n\tclass Counter {\n\t\tcount = $state();\n\t\t#count;\n\n\t\tconstructor(initial_count) {\n\t\t\tlogger(this);\n\t\t\tthis.count = initial_count;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-eager-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\n\t\tassert.deepEqual(logs, [undefined]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-init-eager-3/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state();\n\t\t#count;\n\n\t\tconstructor(initial_count) {\n\t\t\tconsole.log(this.count)\n\t\t\tthis.count = initial_count;\n\t\t}\n\t}\n\tconst counter = new Counter(0);\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-proxy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-proxy/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state();\n\n\t\tconstructor(v) {\n\t\t\tthis.count = v;\n\t\t}\n\t}\n\tconst counter = new Counter({ count: 0 });\n</script>\n\n<button on:click={() => counter.count.count++}>{counter.count.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-public-private/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>0</button>\n\t\t\t`\n\t\t);\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>1</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-public-private/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\tcount = $state(0);\n\n\t\t#count = $state(0);\n\n\t\tincrement = () => this.#count += 1;\n\n\t\tget secretCount() {\n\t\t\treturn this.#count;\n\t\t}\n\t}\n\tconst counter = new Counter();\n</script>\n\n<button on:click={() => counter.count++}>{counter.count}</button>\n<button on:click={counter.increment}>{counter.secretCount}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-raw/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `<input type=\"text\"><span>hello</span>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-raw/main.svelte",
    "content": "<script>\n\tconst libFreezesObjects = true\n\n\tfunction someLibFunctionCreatingFroozenObject(value) {\n\t\tif(libFreezesObjects) {\n\t\t\treturn Object.freeze({inner: value})\n\t\t} else {\n\t\t\treturn {inner: value}\n\t\t}\n\t}\n\n\tfunction someLibFunctionReturningInner(wrapped) {\n\t\treturn wrapped.inner\n\t}\n\n\tfunction atom(init = null) {\n\t\tlet el = $state({value: someLibFunctionCreatingFroozenObject(init)})\n\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn someLibFunctionReturningInner(el.value)\n\t\t\t},\n\t\t\tset value(v) {\n\t\t\t\tel.value = someLibFunctionCreatingFroozenObject(v)\n\t\t\t},\n\t\t}\n\t}\n\n\tlet val = atom('hello')\n</script>\n\n<input type=\"text\" bind:value={val.value} />\n\n<span>{val.value}</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-with-literal/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>false</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>true</button>`);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>false</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/class-state-with-literal/main.svelte",
    "content": "<script>\n\tclass Toggle {\n\t\t\"aria-pressed\" = $state(false);\n\n\t\ttoggle(){\n\t\t\tthis[\"aria-pressed\"] = !this[\"aria-pressed\"]\n\t\t}\n\t}\n\tconst toggle = new Toggle();\n</script>\n\n<button on:click={() => toggle.toggle()}>{toggle[\"aria-pressed\"]}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/clean-block-inner-effects/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, instance, logs }) {\n\t\tconst button = target.querySelector('button');\n\t\tassert.deepEqual(logs, ['effect', 1]);\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['effect', 1, 'clean', 1, 'effect', 2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/clean-block-inner-effects/main.svelte",
    "content": "<script>\n\tlet count = $state(1);\n\tfunction track(value){\n\t\tlet val = value;\n\t\t$effect(() => {\n\t\t\tconsole.log(\"effect\", val);\n\t\t\treturn ()=>{\n\t\t\t\tconsole.log(\"clean\", val);\n\t\t\t}\n\t\t});\n\t\treturn value;\n\t}\n</script>\n\n{#if track(count)}\n{/if}\n\n<button onclick={()=> count++}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/clsx/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div class=\"foo svelte-owbekl\"></div>\n\t\t<div class=\"foo svelte-owbekl\"></div>\n\t\t<div class=\"foo svelte-owbekl\"></div>\n\t\t<div class=\"foo svelte-owbekl\"></div>\n\t\t<div class=\"foo svelte-owbekl\"></div>\n\n\t\t<div class=\"foo\">child</div>\n\t\t<div class=\"foo\">child</div>\n\t\t<div class=\"foo\">child</div>\n\t\t<div class=\"foo\">child</div>\n\t\t<div class=\"foo\">child</div>\n\n\t\t<applied-to-custom-element class=\"foo svelte-owbekl\"></applied-to-custom-element>\n\n\t\t<button>update</button>\n\t`,\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div class=\"foo svelte-owbekl\"></div>\n\t\t\t\t<div class=\"foo svelte-owbekl\"></div>\n\t\t\t\t<div class=\"bar svelte-owbekl\"></div>\n\t\t\t\t<div class=\"bar svelte-owbekl\"></div>\n\t\t\t\t<div class=\"foo svelte-owbekl\"></div>\n\n\t\t\t\t<div class=\"foo\">child</div>\n\t\t\t\t<div class=\"foo\">child</div>\n\t\t\t\t<div class=\"bar\">child</div>\n\t\t\t\t<div class=\"bar\">child</div>\n\t\t\t\t<div class=\"foo\">child</div>\n\n\t\t\t\t<applied-to-custom-element class=\"bar svelte-owbekl\"></applied-to-custom-element>\n\n\t\t\t\t<button>update</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/clsx/child.svelte",
    "content": "<script>\n    let { class: cls } = $props();\n</script>\n\n<div class={cls}>child</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/clsx/main.svelte",
    "content": "<script>\n\timport Child from \"./child.svelte\";\n\n    let foo = $state('foo');\n    let bar = $state(null);\n    let spread = { class: { foo: true, bar: false } };\n</script>\n\n<div class={{ foo: true, bar: false }}></div>\n<div class={['foo', false && 'bar']}></div>\n<div class={{ foo, bar }}></div>\n<div class={[ foo, bar ]}></div>\n<div {...spread}></div>\n\n<Child class={{ foo: true, bar: false }} />\n<Child class={['foo', false && 'bar']} />\n<Child class={{ foo, bar }} />\n<Child class={[ foo, bar ]} />\n<Child {...spread} />\n\n<applied-to-custom-element class={{ foo, bar }}></applied-to-custom-element>\n\n<button onclick={() => {\n    foo = null;\n    bar = 'bar';\n}}>update</button>\n\n<style>\n    .foo {\n        color: red;\n    }\n    .bar {\n        color: blue;\n    }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/comment-separated-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div>foobar</div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/comment-separated-text/main.svelte",
    "content": "<div>foo<!-- -->bar</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-dont-fuse-whitespace/Child.svelte",
    "content": "<script>\n\tconst { children } = $props();\n</script>\n\n<p>text before the render tag {@render children()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-dont-fuse-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>text before the render tag dont fuse this text with the one from the child</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-dont-fuse-whitespace/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\tlet text = $state('dont fuse this text with the one from the child');\n</script>\n\n<Child>{text}</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-let-directive/Counter.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n<button on:click={increment}>\n\t<slot {count} />\n</button>\n\n<slot name=\"named\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-let-directive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<p slot=\"named\">named slot count is not state</p>\n\t`,\n\n\ttest: ({ assert, target }) => {\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>1</button>\n\t\t\t<p slot=\"named\">named slot count is not state</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-let-directive/main.svelte",
    "content": "<script>\n\timport Counter from \"./Counter.svelte\";\n\n\tlet count = 'not state';\n</script>\n\n<Counter let:count>\n\t{count}\n\n\t<p slot=\"named\">named slot count is {count}</p>\n</Counter>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-prop-unescaped/Child.svelte",
    "content": "<script>\n\tconst { prop } = $props();\n</script>\n\n{prop}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-prop-unescaped/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `&quot;`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-prop-unescaped/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child prop='\"'/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-transition-hmr/Blue.svelte",
    "content": "<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-transition-hmr/Red.svelte",
    "content": "<script>\n\tfunction show(node) {\n\t\t\treturn {\n\t\t\t\t\tduration: 500,\n\t\t\t\t\tcss: (t) => `opacity: ${t}`,\n\t\t\t}\n\t}\n</script>\n\n<div class=\"red\" in:show></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-transition-hmr/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\thmr: true\n\t},\n\n\tasync test({ assert, target, raf }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\n\t\tflushSync();\n\n\t\tb1.click();\n\n\t\tflushSync();\n\n\t\traf.tick(0);\n\n\t\traf.tick(250);\n\t\tconst div = /** @type {HTMLDivElement} */ (target.querySelector('.red'));\n\t\tassert.equal(div.style.opacity, '0.5');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/component-transition-hmr/main.svelte",
    "content": "<script>\n  import Red from \"./Red.svelte\"\n  import Blue from \"./Blue.svelte\"\n  const comps = {\n    Red,\n    Blue\n  };\n  let activeComp = $state(\"Red\")\n</script>\n\n<main>\n  <button onclick={() => activeComp = activeComp === \"Red\" ? \"Blue\" : \"Red\"}>toggle</button>\n  <svelte:component this={comps[activeComp]} />\n</main>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-snippet-reactive/Component.svelte",
    "content": "<script>\n\tlet { test } = $props();\n</script>\n\n{@render test?.()}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-snippet-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button></button><p>snip</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-snippet-reactive/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\tlet count = $state(0);\n</script>\n\n{#snippet snip()}\n<p>snip</p>\n{/snippet}\n\n<button onclick={() => count++}></button>\n{#if true}\n\t{@const test =  count % 2 === 0 ? undefined: snip}\n\t<Component {test} />\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-tag-boundary/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>increment</button><p>2</p>',\n\tmode: ['client'],\n\ttest({ target, assert }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst p = target.querySelector('p');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.equal(p?.innerHTML, '4');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-tag-boundary/main.svelte",
    "content": "<script>\n\tlet count = $state(1);\n</script>\n\n<button onclick={()=>count++}>increment</button>\n\n<svelte:boundary>\n\t{@const double = count * 2}\n\t<p>{double}</p>\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-tag-boundary-deprecated-usage/FlakyComponent.svelte",
    "content": "<script>\n\tthrow new Error();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-tag-boundary-deprecated-usage/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_async: true,\n\thtml: '<button></button><p>2</p>',\n\tmode: ['client'],\n\ttest({ target, assert }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst p = target.querySelector('p');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.equal(p?.innerHTML, '4');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/const-tag-boundary-deprecated-usage/main.svelte",
    "content": "<script>\n\timport FlakyComponent from \"./FlakyComponent.svelte\";\n\tlet test=$state(1);\n</script>\n\n<button onclick={()=>test++}></button>\n\n<svelte:boundary>\n\t{@const double = test * 2}\n\t{#snippet failed()}\n\t\t<p>{double}</p>\n\t{/snippet}\n\t<FlakyComponent />\n</svelte:boundary>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/contenteditable-state/Test.svelte",
    "content": "<script>\n\tlet {children} = $props()\n\tlet innerText = $state()\n\t$inspect(innerText);\n</script>\n\n<div contenteditable=\"true\" bind:innerHTML={innerText}>\n\t{@render children()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/contenteditable-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div contenteditable=\"true\">Test</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/contenteditable-state/main.svelte",
    "content": "<script>\n\timport Test from './Test.svelte'\n</script>\n\n<Test>\n\tTest\n</Test>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-context/Child.svelte",
    "content": "<script>\n\timport { get } from './main.svelte';\n\n\tconst message = get();\n</script>\n\n<h1>{message}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<h1>hello</h1>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-context/main.svelte",
    "content": "<script module>\n\timport { createContext } from 'svelte';\n\n\t/** @type {ReturnType<typeof createContext<string>>} */\n\tconst [get, set] = createContext();\n\n\texport { get };\n</script>\n\n<script>\n\timport Child from './Child.svelte';\n\n\tset('hello');\n</script>\n\n<Child />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-context-programmatic/Child.svelte",
    "content": "<script>\n\timport { get } from './main.svelte';\n\n\tconst message = get();\n</script>\n\n<h1>{message}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-context-programmatic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `<div></div>`,\n\thtml: `<div><h1>hello</h1></div>`,\n\n\ttest() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-context-programmatic/main.svelte",
    "content": "<script module>\n\timport { createContext, mount } from 'svelte';\n\timport Child from './Child.svelte';\n\n\t/** @type {ReturnType<typeof createContext<string>>} */\n\tconst [get, set] = createContext();\n\n\texport { get };\n\n\tfunction Wrapper(Component) {\n\t\treturn (...args) => {\n\t\t\tset('hello');\n\t\t\treturn Component(...args);\n\t\t};\n\t}\n</script>\n\n<div {@attach (target) => {\n\tmount(Wrapper(Child), { target });\n}}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-raw-snippet-invalid-render/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tskip_mode: ['hydrate'],\n\n\twarnings: [\n\t\t'The `render` function passed to `createRawSnippet` should return HTML for a single element'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/create-raw-snippet-invalid-render/main.svelte",
    "content": "<script>\n\timport { createRawSnippet } from 'svelte';\n\n\tconst snippet = createRawSnippet(() => ({\n\t\trender: () => `\n\t\t\t<!-- --><div>123</div>\n\t\t`\n\t}));\n</script>\n\n{@render snippet()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst my_element = /** @type HTMLElement & { object: { test: true }; } */ (\n\t\t\ttarget.querySelector('my-element')\n\t\t);\n\t\tassert.equal(my_element.getAttribute('string'), 'test');\n\t\tassert.equal(my_element.hasAttribute('object'), false);\n\t\tassert.deepEqual(my_element.object, { test: true });\n\n\t\tconst my_link = /** @type HTMLAnchorElement & { object: { test: true }; } */ (\n\t\t\ttarget.querySelector('a')\n\t\t);\n\t\tassert.equal(my_link.getAttribute('string'), 'test');\n\t\tassert.equal(my_link.hasAttribute('object'), false);\n\t\tassert.deepEqual(my_link.object, { test: true });\n\n\t\tconst [value1, value2] = target.querySelectorAll('value-element');\n\t\tassert.equal(value1.shadowRoot?.innerHTML, '<span>test</span>');\n\t\tassert.equal(value2.shadowRoot?.innerHTML, '<span>test</span>');\n\n\t\tconst value_builtin = target.querySelector('div');\n\t\tassert.equal(value_builtin?.shadowRoot?.innerHTML, '<span>test</span>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-attributes/main.svelte",
    "content": "<script module>\n\tif(!customElements.get('value-element')) {\n\t\tcustomElements.define('value-element', class extends HTMLElement {\n\n\t\t\tconstructor() {\n\t\t\t\tsuper();\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\n\t\t\tset value(v) {\n\t\t\t\tif (this.__value !== v) {\n\t\t\t\t\tthis.__value = v;\n\t\t\t\t\tthis.shadowRoot.innerHTML = `<span>${v}</span>`;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tif(!customElements.get('value-builtin')) {\n\t\tcustomElements.define('value-builtin', class extends HTMLDivElement {\n\n\t\t\tconstructor() {\n\t\t\t\tsuper();\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\n\t\t\tset value(v) {\n\t\t\t\tif (this.__value !== v) {\n\t\t\t\t\tthis.__value = v;\n\t\t\t\t\tthis.shadowRoot.innerHTML = `<span>${v}</span>`;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\textends: 'div'\n\t\t});\n\t}\n</script>\n\n<my-element string=\"test\" object={{ test: true }}></my-element>\n<a is=\"my-link\" string=\"test\" object={{ test: true }}></a>\n\n<value-element value=\"test\"></value-element>\n<value-element {...{value: \"test\"}}></value-element>\n<div is=\"value-builtin\" value=\"test\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-injected-styles/Thing.svelte",
    "content": "<svelte:options customElement={{ tag: 'my-thing' }} />\n\n<h1>hello</h1>\n\n<style>\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-injected-styles/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tconst thing = /** @type HTMLElement & { object: { test: true }; } */ (\n\t\t\ttarget.querySelector('my-thing')\n\t\t);\n\n\t\tawait tick();\n\n\t\tassert.include(thing.shadowRoot?.innerHTML, 'red');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-injected-styles/main.svelte",
    "content": "<script>\n\timport './Thing.svelte';\n</script>\n\n<my-thing></my-thing>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-slot-in-snippet/Component.svelte",
    "content": "<script module>\n\tif (!customElements.get('my-custom-element')) {\n\t\tcustomElements.define('my-custom-element', class extends HTMLElement {\n\t\t\tconnectedCallback() {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t\tthis.shadowRoot.innerHTML = '|<slot></slot>|<slot name=\"slot\"></slot>|';\n\t\t\t}\n\t\t});\n\t}\n</script>\n\n<script>\n\tconst { children } = $props();\n</script>\n\n<my-custom-element>\n\t{@render children()}\n</my-custom-element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-slot-in-snippet/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'server'],\n\thtml: `<my-custom-element>Default <span slot=\"slot\">Slotted</span></my-custom-element>`,\n\ttest({ target, assert }) {\n\t\tconst shadowRoot = /** @type {ShadowRoot} */ (\n\t\t\ttarget.querySelector('my-custom-element')?.shadowRoot\n\t\t);\n\t\tconst [defaultSlot, namedSlot] = shadowRoot.querySelectorAll('slot');\n\t\tconst assignedDefaultNodes = defaultSlot.assignedNodes();\n\t\tconst assignedNamedNodes = namedSlot.assignedNodes();\n\n\t\tassert.equal(assignedDefaultNodes.length, 1);\n\t\tassert.equal(assignedNamedNodes.length, 1);\n\t\tassert.htmlEqual(assignedDefaultNodes[0].textContent || '', `Default`);\n\t\tassert.htmlEqual(\n\t\t\t/** @type {HTMLElement} */ (assignedNamedNodes[0]).outerHTML,\n\t\t\t`<span slot=\"slot\">Slotted</span>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-slot-in-snippet/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<Component>\n\t{#snippet children()}\n\t\tDefault\n\t\t<span slot=\"slot\">Slotted</span>\n\t{/snippet}\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-svelte-class/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [my_element, my_element_1] = target.querySelectorAll('my-element');\n\t\tassert.equal(my_element.classList.contains('svelte-70s021'), true);\n\t\tassert.equal(my_element_1.classList.contains('svelte-70s021'), true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/custom-element-svelte-class/main.svelte",
    "content": "<div>\n\t<my-element></my-element>\n</div>\n<my-element></my-element>\n\n\n<style>\n\tmy-element{\n\t\tbackground: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/debug-tag-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\tconst b1 = target.querySelector('button');\n\t\tb1?.click();\n\t\tflushSync();\n\t\tb1?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, [\n\t\t\t{ count: { current: 0 } },\n\t\t\t{ count: { current: 1 } },\n\t\t\t{ count: { current: 2 } }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/debug-tag-object/main.svelte",
    "content": "<script>\n\tlet count = $state({ current: 0 });\n</script>\n\n{@debug count}\n\n<button onclick={()=> count.current++}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));\n\t\tawait Promise.resolve();\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency/main.svelte",
    "content": "<script>\n\tlet disabled = $state(false);\n</script>\n\n<button disabled={disabled} onmouseup={() => {\n\tdisabled = true;\n}} onclick={() => {\n\tconsole.log('I should not be invoked');\n}}>Click me!</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// currently not testable in our test suide: click() will synchronously call submit which is not the case in a real browser\n\t// (moving this test to runtime-browser doesn't help either for some reason)\n\tskip: true,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['http://localhost:3000/new%20url']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency-2/main.svelte",
    "content": "<script>\n\tlet action = $state('old url');\n</script>\n\n<form action={action} onsubmit={function(event) {\n\tconsole.log(this.action);\n\tevent.preventDefault();\n}}>\n\t<button type=\"submit\" onclick={() => {\n\t\taction = 'new url';\n\t}}>Submit</button>\n</form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tflushSync();\n\n\t\t// TODO: this should likely be ['works'], as if we don't use spread this works as intended\n\t\tassert.deepEqual(logs, ['fails']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency-3/main.svelte",
    "content": "<script>\n\tlet toggle = $state(false);\n\tconst onclick = $derived(toggle ? () => { console.log('works') } : () => { console.log('fails')})\n\tconst props = $derived({ onclick });\n</script>\n\n<div {...props}>\n\t<button onclick={() => { toggle = true }}>\n\t\tclick me\n\t</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));\n\t\t// The browser will yield a microtask between events\n\t\tawait Promise.resolve();\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deferred-events-consistency-4/main.svelte",
    "content": "<script>\n\tlet toggle = $state(false);\n\tfunction action(element) {\n\t\tconst handle = () => {\n\t\t\tconsole.log('failed')\n\t\t}\n\t\telement.addEventListener('click', handle);\n\t\treturn {\n\t\t\tupdate(toggle) {\n\t\t\t\tif (toggle) {\n\t\t\t\t\telement.removeEventListener('click', handle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<button use:action={toggle} onmouseup={() => { toggle = true }}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/delete-proxy-key/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<button>delete</button><p>test</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>delete</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/delete-proxy-key/main.svelte",
    "content": "<script>\n\tlet obj = $state({test: 0})\n\n\tlet keys = $derived(Object.keys(obj));\n</script>\n\n<button onclick={() => delete obj.test}>\n\tdelete\n</button>\n\n{#each keys as key}\n\t<p>{key}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dependencyless-abort-signal/Component.svelte",
    "content": "<script>\n\timport { getAbortSignal } from 'svelte';\n\n\t$effect(() => {\n\t\tconst signal = getAbortSignal()\n\t\tsignal.addEventListener('abort', () => console.log('abort'))\n\t})\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dependencyless-abort-signal/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['abort']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dependencyless-abort-signal/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte'\n\n\tlet show = $state(true)\n</script>\n\n<button onclick={() => (show = !show)}>click</button>\n{#if show}\n\t<Component />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-cascade/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>00</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>01</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-cascade/main.svelte",
    "content": "<script>\n\tlet shouldShow01 = $state(false);\n\n\tlet der1 = $derived(shouldShow01)\n\t// der2 must depend on der1 and its output shouldn't change\n\tlet der2 = $derived(typeof der1 === \"string\");\n\tlet der3 = $derived(der2 ? \"1\" : \"0\");\n\t// der3 must be read before der1\n\tlet der4 = $derived(der3 + (der1 ? \"1\" : \"0\"));\n</script>\n\n<button onclick={() => (shouldShow01 = true)}>{der4}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-cleanup-old-value/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs, target }) {\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tflushSync(() => increment.click());\n\t\tflushSync(() => increment.click());\n\t\tflushSync(() => increment.click());\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'count: 1',\n\t\t\t'squared: 1',\n\t\t\t'count: 2',\n\t\t\t'squared: 4',\n\t\t\t'count: 3',\n\t\t\t'squared: 9',\n\t\t\t'count: 4'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-cleanup-old-value/main.svelte",
    "content": "<script>\n\tlet count = $state(1);\n\tlet squared = $derived(count * count);\n\n\t$effect(() => {\n\t\tconsole.log(`count: ${count}`);\n\n\t\treturn () => {\n\t\t\tconsole.log(`squared: ${squared}`);\n\t\t};\n\t});\n</script>\n\n<button onclick={() => count++}>increment</button>\n\n<p>count: {count}</p>\n\n{#if count % 2 === 0}\n\t<p id=\"squared\">squared: {squared}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-dependencies/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>hide</button><button>show</button`);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<h1>John Doe</h1><p>Body</p><button>hide</button><button>show</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-dependencies/main.svelte",
    "content": "<script>\n\tlet data = $state({\n\t\tevent: {\n\t\t\tauthor: 'John Doe',\n\t\t\tbody: 'Body'\n\t\t}\n\t});\n\tconst { event } = $derived(data);\n</script>\n\n{#if event}\n\t<h1>{event.author}</h1>\n\t<p>{event.body}</p>\n{/if}\n\n<button onclick={() => {\n\tdata = {}\n}}>hide</button>\n\n<button onclick={() => {\n\tdata = {\n\t\t\tevent: {\n\t\t\t\tauthor: 'John Doe',\n\t\t\t\tbody: 'Body'\n\t\t\t}\n\t\t}\n}}>show</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-dependencies-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn1?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle a</button>\n\t\t\t\t<button>toggle b</button>\n\t\t\t\tfalse/true/true\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => btn2?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle a</button>\n\t\t\t\t<button>toggle b</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => btn2?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle a</button>\n\t\t\t\t<button>toggle b</button>\n\t\t\t\tfalse/true/true\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-dependencies-2/main.svelte",
    "content": "<script>\n\tlet a = $state(true);\n\tlet b = $state({ c: true });\n\n\tconst x = $derived(b);\n</script>\n\n<button onclick={() => (a = !a)}>toggle a</button>\n<button onclick={() => (b = b ? null : { c: true })}>toggle b</button>\n\n{#if x}\n\t{a}/{x.c}/{x.c}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-destructure/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\t\tlogs.length = 0;\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['a', 1]);\n\t\tlogs.length = 0;\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['b', 1]);\n\t\tlogs.length = 0;\n\t\tflushSync(() => {\n\t\t\tb3.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['c', 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-destructure/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n\tlet c = $state(0);\n\tconst {a: a1, b: b1, c: c1} = $derived({a, b, c});\n\n\t$effect(() => {\n\t\tconsole.log('a', a1)\n\t});\n\n\t$effect(() => {\n\t\tconsole.log('b', b1)\n\t});\n\n\t$effect(() => {\n\t\tconsole.log('c', c1)\n\t});\n</script>\n\n<button onclick={() => a++}>{a1}</button>\n<button onclick={() => b++}>{b1}</button>\n<button onclick={() => c++}>{c1}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-destructured/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `true 1 2 baz 1 2 3`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-destructured/main.svelte",
    "content": "<script>\n  let stuff = $state({ foo: true, bar: [1, 2, {baz: 'baz'}] });\n  let { foo, bar: [a, b, { baz }]} = $derived(stuff);\n\n\tlet stuff2 = $state([1, 2, 3]);\n\tlet [d, e, f] = $derived(stuff2);\n</script>\n\n{foo} {a} {b} {baz} {d} {e} {f}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-destructured-iterator/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>increment</button><p>a: 1</p><p>b: 2</p><p>c: 3</p>`,\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>increment</button><p>a: 2</p><p>b: 3</p><p>c: 4</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-destructured-iterator/main.svelte",
    "content": "<script>\n\tlet offset = $state(1);\n\n\tfunction* count(offset) {\n\t\tlet i = offset;\n\t\twhile (true) yield i++;\n\t}\n\n\tlet [a, b, c] = $derived(count(offset));\n</script>\n\n<button onclick={() => offset += 1}>increment</button>\n\n<p>a: {a}</p>\n<p>b: {b}</p>\n<p>c: {c}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-direct/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-direct/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  let double = $derived(count * 2);\n</script>\n\n<button on:click={() => count++}>{double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-disconnect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tlet [b1, b2, b3, b4, b5] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 1</div>\n\t\t\t<div>Name: a</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 2</div>\n\t\t\t<div>Name: b</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb3?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 3</div>\n\t\t\t<div>Name: c</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb4?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 4</div>\n\t\t\t<div>Name: d</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb5?.click();\n\t\tflushSync();\n\n\t\tb5?.click();\n\t\tflushSync();\n\n\t\t[b1, b2, b3, b4, b5] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 1</div>\n\t\t\t<div>Name: a</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 2</div>\n\t\t\t<div>Name: b</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb3?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 3</div>\n\t\t\t<div>Name: c</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\n\t\tb4?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<main><div>Current ID: 4</div>\n\t\t\t<div>Name: d</div><div><button>a</button></div><div><button>b</button></div><div><button>c</button></div><div><button>d</button></div><hr><div>\n\t\t\t<button>Show / Hide</button></div></main>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-disconnect/main.svelte",
    "content": "<script>\n\tconst items = [\n\t\t{ id: 1, name: \"a\" },\n\t\t{ id: 2, name: \"b\" },\n\t\t{ id: 3, name: \"c\" },\n\t\t{ id: 4, name: \"d\" },\n\t];\n\tlet currentId = $state(1);\n\tlet currentItem = $derived(items.find(item => item.id === currentId));\n\tlet visible = $state(true);\n</script>\n\n<main>\n\t{#if visible}\n\t\t<div>Current ID: {currentId}</div>\n\t\t<div>Name: {currentItem.name}</div>\n\t\t{#each items as item}\n\t\t\t<div><button onclick={() => { currentId = item.id; }}>{item.name}</button></div>\n\t\t{/each}\n\t{/if}\n\t<hr>\n\t<div><button onclick={() => { visible = !visible; }}>Show / Hide</button></div>\n</main>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-fn/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-fn/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  let double = $derived.by(() => count * 2);\n</script>\n\n<button on:click={() => count++}>{double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-fn-destructure/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['server'],\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, window, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t\tassert.deepEqual(logs, ['create_derived']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-fn-destructure/main.svelte",
    "content": "<script>\n  let count = $state(0);\n\tfunction create_derived() {\n\t\tconsole.log('create_derived');\n\t\treturn () => {\n\t\t\treturn {\n\t\t\t\tget double() {\n\t\t\t\t\treturn count * 2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n  let {double} = $derived.by(create_derived());\n</script>\n\n<button on:click={() => count++}>{double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-fn-recursive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>increment</button>\\n0`,\n\n\tmode: ['client'],\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\n\t\tassert.throws(\n\t\t\tflushSync,\n\t\t\t'derived_references_self\\nA derived value cannot reference itself recursively'\n\t\t);\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>increment</button>\\n0`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-fn-recursive/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet even = $derived.by(() => {\n\t\treturn count > 0 ? even : 0;\n\t})\n\n</script>\n\n<button onclick={() => count++}>increment</button>\n\n{even}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-get-context/Child.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte'\n\n\tlet count = $state(0);\n\tlet total = $derived(multiply(count));\n\n\tfunction multiply(num) {\n\t\tconst context = getContext(\"key\");\n\t\treturn num * context;\n\t}\n</script>\n\n<button onclick={() => count++}>{total}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-get-context/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>10</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-get-context/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte'\n\timport Child from './Child.svelte'\n\tsetContext(\"key\", 10)\n</script>\n\n<Child />\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-in-expression/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// In non-async mode we're not reacting to deriveds read in the same context they're defined in\n\tskip_no_async: true,\n\ttest({ assert, target, logs }) {\n\t\tconst [a, b] = target.querySelectorAll('button');\n\n\t\tflushSync(() => a?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<p>1/0</p\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => a?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<p>2/0</p\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => b?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<p>2/1</p\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => b?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>a</button>\n\t\t\t\t<button>b</button>\n\t\t\t\t<p>2/2</p\n\t\t\t`\n\t\t);\n\n\t\tassert.deepEqual(logs, [\n\t\t\t// init\n\t\t\t'a',\n\t\t\t'b',\n\t\t\t'effect a',\n\t\t\t'effect b',\n\t\t\t// click a\n\t\t\t'a',\n\t\t\t'effect a',\n\t\t\t// click a\n\t\t\t'a',\n\t\t\t'effect a',\n\t\t\t// click b\n\t\t\t'a',\n\t\t\t'b',\n\t\t\t'effect a',\n\t\t\t'effect b',\n\t\t\t// click b\n\t\t\t'a',\n\t\t\t'b',\n\t\t\t'effect a',\n\t\t\t'effect b'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-in-expression/main.svelte",
    "content": "<script>\n\tlet object = $state.raw({ a: 0, b: 0 });\n\n\tfunction a() {\n\t\tconsole.log('a');\n\t\treturn object.a;\n\t}\n\n\tfunction b() {\n\t\tconsole.log('b');\n\t\tlet double = $derived(object.b)\n\t\treturn double;\n\t}\n\n\t$effect(() => {\n\t\tobject.a;\n\t\tconsole.log('effect a');\n\t})\n\n\t$effect(() => {\n\t\tconst b = $derived(object.b);\n\t\tb;\n\t\tconsole.log('effect b');\n\t})\n</script>\n\n<button onclick={() => object = { ...object, a: object.a + 1 }}>a</button>\n<button onclick={() => object = { ...object, b: object.b + 1 }}>b</button>\n\n<p>{a()}/{b()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-indirect-arrow-fn/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\tasync test({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-indirect-arrow-fn/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  const doubled = () => count * 2;\n  let double = $derived(doubled());\n</script>\n\n<button on:click={() => count++}>{double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-indirect-fn/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-indirect-fn/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  function doubled() {\n    return count * 2;\n  }\n  let double = $derived(doubled());\n</script>\n\n<button on:click={() => count++}>{double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-indirect-fn-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-indirect-fn-2/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  const doubled = () => count * 2;\n  const inc = () => count++;\n  let double = $derived(doubled());\n</script>\n\n<button on:click={inc}>{double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-map/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `Loading`,\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `1`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-map/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\timport { SvelteMap } from 'svelte/reactivity';\n\n\tconst cache = new SvelteMap();\n\n\tfunction get_async(id) {\n\t\tconst model = cache.get(id);\n\n\t\tif (!model) {\n\t\t\tconst promise = new Promise(async () => {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tcache.set(id, id.toString());\n\t\t\t}).then(() => cache.get(id));\n\n\t\t\tuntrack(() => {\n\t\t\t\tcache.set(id, promise);\n\t\t\t});\n\n\t\t\treturn promise;\n\t\t}\n\n\t\treturn model;\n\t}\n\n\tconst value = $derived(get_async(1));\n\tconst value2 = $derived(get_async(1));\n\t// both values are read before the set \n\tvalue;\n\tvalue2;\n</script>\n\n{#if value instanceof Promise}\n\tLoading\n{:else}\n\t{value}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-name-shadowed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `42`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-name-shadowed/main.svelte",
    "content": "<script module>\n\tfunction foo() {\n\t\tconst foo = $derived(42);\n\t\treturn () => foo;\n\t}\n</script>\n\n{foo()()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-proxy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0 / 0</button><button>0 / 0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1 / 2</button><button>1 / 2</button>`);\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>2 / 4</button><button>2 / 4</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-proxy/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  let double = $derived({ get value() { return count * 2}, set value(c) { count = c / 2 } });\n</script>\n\n<button on:click={() => count++}>{count} / {double.value}</button>\n<button on:click={() => double.value += 2}>{count} / {double.value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-read-outside-reaction/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>+1</button>\n\t\t<button>add number</button>\n\t\t<p>1, 2, 3</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tbutton1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>+1</button>\n\t\t\t\t<button>add number</button>\n\t\t\t\t<p>2, 4, 6</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>+1</button>\n\t\t\t\t<button>add number</button>\n\t\t\t\t<p>2, 4, 6, 8</p>\n\t\t\t`\n\t\t);\n\n\t\tbutton1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>+1</button>\n\t\t\t\t<button>add number</button>\n\t\t\t\t<p>3, 6, 9, 12</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-read-outside-reaction/main.svelte",
    "content": "<script lang=\"ts\">\n\tclass Item {\n\t\tproduct: number;\n\n\t\tconstructor(n: number) {\n\t\t\tthis.product = $derived(multiplier * n);\n\t\t}\n\t}\n\n\tlet numbers = $state([1, 2, 3]);\n\tlet multiplier = $state(1);\n\n\tlet items = $derived(numbers.map((n) => new Item(n)))\n\tlet products = $derived(items.map(item => item.product));\n</script>\n\n<button onclick={() => {\n\tmultiplier += 1;\n}}>+1</button>\n\n<button onclick={() => {\n\tnumbers.push(numbers.length + 1);\n\n\t// this is load-bearing — by reading it outside a reaction, we recompute\n\t// `products`, removing it as a reaction from `Item.product` dependencies,\n\t// but we don't add it as a reaction to the new `Item.product` dependencies\n\tproducts;\n}}>add number</button>\n\n<p>{products.join(', ')}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>true false</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/main.svelte",
    "content": "<script>\n\tconst symbol1 = Symbol();\n\tconst symbol2 = Symbol();\n\n\tlet a = { [symbol1]: 42 };\n\tObject.defineProperty(a, symbol2, { enumerable: false, value: \"nope\" })\n\n\tlet { ...b } = $derived(a);\n</script>\n\n<p>{symbol1 in b} {symbol2 in b}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-server-memoization/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest_ssr({ assert, logs }) {\n\t\tassert.deepEqual(logs, [0, 2, { count: 2 }, 0, 0, { local_count: 1 }]);\n\t},\n\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [0, 2, { count: 2 }, 0, 0, { local_count: 1 }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-server-memoization/main.svelte",
    "content": "<script>\n\timport { reset, increment, get, count } from './state.svelte.js';\n\n\treset();\n\tconsole.log(get());\n\tincrement();\n\tconsole.log(get());\n\tconsole.log({ count });\n\n\tlet local_count = 0;\n\n\tlet s = $state(0);\n\tlet d = $derived.by(() => {\n\t\tlocal_count += 1;\n\t\treturn s * 2;\n\t});\n\n\tconsole.log(d);\n\tconsole.log(d);\n\tconsole.log({ local_count });\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-server-memoization/state.svelte.js",
    "content": "let s = $state(0);\nlet d = $derived.by(() => {\n\tcount += 1;\n\treturn s * 2;\n});\n\nexport let count = 0;\n\nexport function reset() {\n\tcount = 0;\n\ts = 0;\n}\n\nexport function increment() {\n\ts += 1;\n}\n\nexport function get() {\n\treturn d;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-shadowed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>0</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-shadowed/main.svelte",
    "content": "<script>\n\tlet value = $derived.by(() => {\n\t\tconst value = $state(0);\n\t\treturn value;\n\t});\n</script>\n\n<div>{value}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-stale-value/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.deepEqual(logs, [0, 2, 4]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-stale-value/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tconst derived = $derived(Math.floor(count / 2));\n\tconst derived2 = $derived(derived * 2);\n\n\t$effect(() => {\n\t\tconsole.log(derived2);\n\t});\n</script>\n\n<button on:click={() => count += 1}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned/Component.svelte",
    "content": "<script module>\n\tclass Foo {\n\t\tx = $state(5);\n\t\ty = $derived(this.x * 2);\n\t}\n\tconst foo = new Foo();\n\n\tlet x = $state(2);\n\tlet y = $derived(x * 2);\n\tconst bar = {\n\t\tget x() {\n\t\t\treturn x;\n\t\t},\n\t\tset x(val) {\n\t\t\tx = val;\n\t\t},\n\n\t\tget y() {\n\t\t\treturn y;\n\t\t}\n\t};\n</script>\n\n<button onclick={() => foo.x++}>\n\tx: {foo.x}, y: {foo.y}\n</button>\n\n<button onclick={() => bar.x++}>\n\tx: {bar.x}, y: {bar.y}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'server'],\n\n\tasync test({ assert, target }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst input = target.querySelector('input');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"checkbox\"><button>x:\n\t\t 6,\n\t\t y:\n\t\t 12</button><button>x:\n\t\t 2,\n\t\t y:\n\t\t 4</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"checkbox\"><button>x:\n\t\t 6,\n\t\t y:\n\t\t 12</button><button>x:\n\t\t 3,\n\t\t y:\n\t\t 6</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<input type=\"checkbox\">`);\n\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\n\t\t[btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"checkbox\"><button>x:\n\t\t 7,\n\t\t y:\n\t\t 14</button><button>x:\n\t\t 4,\n\t\t y:\n\t\t 8</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\tlet show = $state(true);\n</script>\n\n<input type=\"checkbox\" bind:checked={show} />\n{#if show}\n\t<Component/>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-10/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tlet btn1 = target.querySelector('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['light', 'dark', 'light']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-10/main.svelte",
    "content": "<script>\n\timport { store, themeState } from './theme.svelte.js';\n\n\tlet i = 0;\n\n\tconst increment = () => {\n\t\tstore.update(() => ({ theme: ++i % 2 == 0 ? 'dark' : 'light' }));\n\t}\n</script>\n\n<button onclick={increment}>+</button>\n\n{themeState.value.theme}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-10/theme.svelte.js",
    "content": "import { fromStore, writable } from 'svelte/store';\n\nexport const store = writable({ theme: 'dark' });\n\nclass ThemeState {\n\t#storeState = fromStore(store);\n\tvalue = $derived(this.#storeState.current);\n\n\tconstructor() {\n\t\t$effect.root(() => {\n\t\t\t$effect(() => {\n\t\t\t\tconsole.log(this.value.theme);\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport const themeState = new ThemeState();\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-11/Child.svelte",
    "content": "<script>\n\tlet { value = $bindable() } = $props()\n</script>\n\n<button onclick={() => value = 'a'}>change</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-11/Child2.svelte",
    "content": "<script>\n\tlet {disabled = false} = $props()\n</script>\n\n{disabled}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-11/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>change</button><button>change</button>\\nfalse`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-11/main.svelte",
    "content": "<script>\n\timport Child2 from './Child2.svelte'\n\timport Child from './Child.svelte'\n\tlet loginname = $state('')\n\tlet password = $state('')\n</script>\n\n<Child bind:value={loginname} />\n<Child bind:value={password} />\n<Child2 disabled={!loginname || !password} />\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-12/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>linked.current</button>\\n3\\n<button>count</button>\\n1`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-12/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\n\tlet count = $state(0);\n\tlet state = $state({current: count});\n\n\tlet linked = $derived.by(() => {\n\t\tcount;\n\n\t\tuntrack(() => state.current = count);\n\t\treturn untrack(() => state);\n\t});\n\n\tlinked.current++;\n</script>\n\n<button onclick={() => linked.current++}>linked.current</button> {linked.current}\n<button onclick={() => count++}>count</button> {count}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-2/Component.svelte",
    "content": "<script module>\n\tclass Store {\n\t\tall = $state([1, 2, 3]);\n\t\td1 = $derived(this.all.filter((a) => a > 2));\n\n\t\tupdate_value() {\n\t\t\tthis.all = [1, 2, 3, 4, 5];\n\t\t}\n\t}\n\texport const s = new Store();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'server'],\n\n\thtml: '<div>d2: 3</div><div>d3: 3</div><div>d4: 3</div>',\n\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div>d2: 3,4,5</div><div>d3: 3,4,5</div><div>d4: 3,4,5</div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-2/main.svelte",
    "content": "<script>\n\timport {s} from \"./Component.svelte\";\n\timport {onMount}from \"svelte\";\n\n\tlet d2 = $derived(s.d1.filter(x => x > 2));\n\tlet d3 = $derived(s.all.filter(x => x > 2));\n\n\tonMount(()=>{\n\t\tqueueMicrotask(() => {\n\t\t\ts.update_value();\n\t\t});\n\t});\n</script>\n\n<div>d2: {d2.join(',')}</div>\n<div>d3: {d3.join(',')}</div>\n<div>d4: {d3.join(',')}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Activate</button><button>Toggle</button>\\nneighba\\nneighba`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Activate</button><button>Toggle</button>\\nzeeba\\nzeeba`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-3/main.svelte",
    "content": "<script>\n  class Model {\n    data = $state();\n\n    constructor(data) {\n      this.data = data;\n    }\n\n    name = $derived(this.data?.name);\n    source = $derived(this.data?.source);\n\n    toggle() {\n      this.data.name = this.data.name === 'zeeba' ? 'neighba' : 'zeeba';\n    }\n  }\n\n\tlet model = $state(new Model({ name: 'zeeba', source: 'initial' }));\n\n  let setModel = (source) => {\n\t\tlet next = new Model({ name: 'zeeba', source });\n\t\tmodel = next;\n  }\n\n  let needsSet = $state(false);\n\n  $effect(() => {\n    if(needsSet) {\n      setModel('effect');\n      needsSet = false;\n    }\n  });\n\n  let setWithEffect = () => {\n    needsSet = true;\n  };\n\n  let toggle = () => {\n    model.toggle();\n  }\n</script>\n\n<button onclick={setWithEffect}>Activate</button>\n<button onclick={toggle}>Toggle</button>\n{model.name}\n{model.data.name}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>update</button><div>2</div><div>2</div><div>2</div><div>2</div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-4/main.svelte",
    "content": "<script>\n  let thing = $state();\n\n\tfunction update() {\n\t\tlet data = $state({ name: 1, position: 1 });\n\t  let position = $derived(data.position);\n\t\tlet name = $derived(data.name);\n\n\t\tthing = {\n\t\t\tget data() { return data },\n\t\t\tget position() { return position },\n\t\t\tget name() { return name },\n\t\t}\n\n\t\tthing.position;\n\t\tdata = { name: 2, position: 2 };\n\t}\n</script>\n\n<button onclick={update}>update</button>\n\n<div>\n\t{thing?.data?.name}\n</div>\n<div>\n\t{thing?.name}\n</div>\n<div>\n\t{thing?.data?.position}\n</div>\n<div>\n\t{thing?.position}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t// The test has a bunch of queueMicrotasks\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<div>Zeeba Neighba</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-5/main.svelte",
    "content": "<script module>\n  export class Thing {\n    data = $state();\n\n    subscribe() {\n      queueMicrotask(() => {\n        this.data = {\n          name: `Zeeba Neighba`,\n        };\n      });\n    }\n\n    name = $derived(this.data?.name);\n  }\n\n  export class Things {\n    thing = $state();\n\n    subscribe() {\n      queueMicrotask(() => {\n        this.thing = new Thing();\n        this.thing.subscribe();\n        this.thing.name;\n      });\n    }\n  }\n</script>\n\n<script>\n  let model = new Things();\n  $effect(() => model.subscribe());\n</script>\n\n<div>{model.thing?.name}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tlet [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['computing', 'a', 'a', 'computing', 'bb', 'bb']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-6/main.svelte",
    "content": "<script>\n\tfunction run(){\n\t\tlet cond = $state(true);\n\t\tlet a = $state(\"a\");\n\t\tlet b = $state(\"b\");\n\t\tlet c = $derived.by(() => {\n\t\t\tconsole.log('computing')\n\t\t\treturn cond ? a : b\n\t\t});\n\n\t\tconsole.log(c);\n\t\tb = \"bb\";\n\t\tconsole.log(c)\n\t\tcond = false;\n\t\tconsole.log(c)\n\t\ta = \"aaa\";\n\t\tconsole.log(c)\n\t}\n</script>\n\n<button onclick={run}>RUN THE THING</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-7/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tlet [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['computing C', 'computing B', 'a', 'foo', 'computing B', 'aaa', 'foo']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-7/main.svelte",
    "content": "<script>\n\tfunction run(){\n\t\tlet a = $state('a');\n\t\tlet b = $derived.by(() => {\n\t\t\tconsole.log('computing B', a);\n\t\t\treturn 'foo';\n\t\t});\n\t\tlet c = $derived.by(() => {\n\t\t\tconsole.log('computing C');\n\t\t\treturn b;\n\t\t});\n\n\t\tconsole.log(c);\n\t\ta = \"aaa\";\n\t\tconsole.log(c);\n\t}\n</script>\n\n<button onclick={run}>RUN THE THING</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-8/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target, logs }) {\n\t\tlet [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['recalculating']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-8/main.svelte",
    "content": "<script module>\n\tlet visible = $state(true);\n\n\tfunction toggleVisibility() {\n\t\tvisible = !visible;\n\t}\n\n\tlet unchangedState = $state('unchanged state');\n\tlet derived = $derived.by(() => {\n\t\tconsole.log('recalculating');\n\t\treturn unchangedState;\n\t});\n</script>\n\n<button onclick={toggleVisibility}>Toggle Visibility</button>\n{#if visible}\n\t<p>{derived}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-9/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target, logs }) {\n\t\tlet [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tbtn2.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a</button><button>b</button><div>1</div>\\ndouble:\\n2`\n\t\t);\n\n\t\tbtn1.click();\n\t\tbtn2.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a</button><button>b</button><div>2</div>\\ndouble:\\n4`\n\t\t);\n\n\t\tbtn1.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a</button><button>b</button><div>3</div>\\ndouble:\\n6`\n\t\t);\n\n\t\tbtn1.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a</button><button>b</button><div>4</div>\\ndouble:\\n8`\n\t\t);\n\n\t\tbtn1.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>a</button><button>b</button><div>5</div>`);\n\n\t\tbtn1.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a</button><button>b</button><div>6</div>\\ndouble:\\n12`\n\t\t);\n\n\t\tbtn1.click();\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>a</button><button>b</button><div>7</div>\\ndouble:\\n14`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-unowned-9/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n\n\tlet double = $state();\n\tfunction setDerived() {\n\t\tconst d = $derived(count * 2);\n\t\tdouble = {\n\t\t\tget v() { return d }\n\t\t};\n\t}\n</script>\n\n<button onclick={increment}>a</button>\n<button onclick={setDerived}>b</button>\n\n<div>{count}</div>\n\n{#if double && count % 5}\n\tdouble: {double.v}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-update-server/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async-server', 'server'],\n\thtml: '<p>postfix: 0, postfix_minus: 1, prefix: 1, prefix_minus: 0, count: 0</p><p>postfix_n: 0, postfix_minus_n: 1, prefix_n: 1, prefix_minus_n: 0, count_n: 0</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-update-server/main.svelte",
    "content": "<script>\n\tlet count = $derived(0);\n\tlet postfix = count++;\n\tlet postfix_minus = count--;\n\tlet prefix = ++count;\n\tlet prefix_minus = --count;\n\n\tlet count_n = $derived(0n);\n\tlet postfix_n = count_n++;\n\tlet postfix_minus_n = count_n--;\n\tlet prefix_n = ++count_n;\n\tlet prefix_minus_n = --count_n;\n</script>\n\n<p>postfix: {postfix}, postfix_minus: {postfix_minus}, prefix: {prefix}, prefix_minus: {prefix_minus}, count: {count}</p>\n<p>postfix_n: {postfix_n}, postfix_minus_n: {postfix_minus_n}, prefix_n: {prefix_n}, prefix_minus_n: {prefix_minus_n}, count_n: {count_n}</p>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-write-read-write-read/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tflushSync(() => {\n\t\t\ttarget.querySelector('button')?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/derived-write-read-write-read/main.svelte",
    "content": "<script>\n\tlet x = $state(1);\n\tlet y = $state(1);\n\tlet z = $derived(x*y);\n</script>\n\n<button onclick={() => {\n\tx = 0;\n\t// reading a derived value and then setting another source contributing to the derived\n\t// resulting in the same value should not prevent pending render effects from updating\n\tz;\n\ty = 0;\n}}>{z}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deriveds-in-constructor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>state,derived state,derived.by derived state</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/deriveds-in-constructor/main.svelte",
    "content": "<script>\n\tclass Foo {\n\t\t#state = $state('state')\n\t\t#derived = $derived('derived ' + this.#state);\n\t\t#derivedBy = $derived.by(() => {\n\t\t\treturn 'derived.by ' + this.#derived \n\t\t});\n\t\t\n\t\tinitial\n\t\t\n\t\tconstructor() {\n\t\t\tthis.initial = [this.#state, this.#derived, this.#derivedBy]\n\t\t}\n\t}\n\tconst foo = new Foo()\n</script>\n\n<p>{foo.initial}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-async-assignments/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n    <button>Update me!</button>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n    <p>0</p>\n      `,\n\n\tasync test({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tawait btn?.dispatchEvent(clickEvent);\n\t\tawait new Promise((r) => setTimeout(() => r(0), 100));\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n                <button>Update me!</button>\n                <p>1</p>\n                <p>2</p>\n                <p>3</p>\n                <p>4</p>\n                <p>5</p>\n                <p>6</p>\n                <p>7</p>\n                <p>8</p>\n                <p>9</p>\n                <p>10</p>\n                <p>11</p>\n                <p>12</p>\n                <p>13</p>\n                <p>14</p>\n                <p>15</p>\n                <p>16</p>\n                <p>17</p>\n                <p>18</p>\n                <p>19</p>\n                <p>20</p>\n                <p>21</p>\n                <p>22</p>\n                <p>23</p>\n                <p>24</p>\n                <p>25</p>\n                <p>26</p>\n              `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-async-assignments/main.svelte",
    "content": "<script>\n    let a = $state(0);\n    let b = $state(0);\n    let c = $state(0);\n    let d = $state(0);\n    let e = $state(0);\n    let f = $state(0);\n    let g = $state(0);\n    let h = $state(0);\n    let i = $state(0);\n    let j = $state(0);\n    let k = $state(0);\n    let l = $state(0);\n    let m = $state(0);\n    let n = $state(0);\n    let o = $state(0);\n    let p = $state(0);\n    let q = $state(0);\n    let r = $state(0);\n    let s = $state(0);\n    let t = $state(0);\n    let u = $state(0);\n    let v = $state(0);\n    let w = $state(0);\n    let x = $state(0);\n    let y = $state(0);\n    let z = $state(0);\n\n    const get_vwx = () => {\n        return Promise.resolve({ v: 22, rest: [23, 24] });\n    }\n\n    const get_y = () => {\n        return Promise.resolve([24, 25]);\n    }\n\n    const some = {\n        fn: () => {}\n    }\n\n    const update = async () => {\n        [a, b] = [1, await Promise.resolve(2)];\n        ({ c = await Promise.resolve(3), d } = { d: 4 });\n        [e] = [await Promise.resolve(2) + await Promise.resolve(3)];\n        ({ f = false || await Promise.resolve(6) } = {});\n        let func = Promise.resolve(() => 7);\n        [g = (await func)()] = [];\n        let mult = (a, b) => (a * b);\n        ({ h } = { h: mult(2, await Promise.resolve(4))});\n        [i] = [new Date(await Promise.resolve(9)).getTime()];\n        [j = \"19\" ? 10 : await Promise.resolve(11)] = [];\n        let obj = ({ [await Promise.resolve(\"prop\")]: k } = { prop: 11 });\n        [l = obj[await Promise.resolve(\"prop\")] + 1] = [];\n        [m] = [`${1}${await Promise.resolve(\"3\")}`];\n        [n] = [-(await Promise.resolve(-14))];\n        [o] = [(some.fn(), await Promise.resolve(15))];\n        ({ anotherprop: p = await Promise.resolve(16) } = obj);\n        let val1, val2;\n        ({ val1 = (async function (x) { return await x; })(Promise.resolve(18)), r = await val1 }\n            = ({ val2 = (async (x) => await x)(Promise.resolve(17)), q = await val2 } = []));\n        ({ u = 21 } = ({ t = await Promise.resolve(20) } = ([s] = [await Promise.resolve(19)])));\n        ({ v, rest: [w] } = await get_vwx());\n        [x, y, ...{ z = 26 }] = await get_y();\n    }\n</script>\n\n<button on:click={update}>Update me!</button>\n<p>{a}</p>\n<p>{b}</p>\n<p>{c}</p>\n<p>{d}</p>\n<p>{e}</p>\n<p>{f}</p>\n<p>{g}</p>\n<p>{h}</p>\n<p>{i}</p>\n<p>{j}</p>\n<p>{k}</p>\n<p>{l}</p>\n<p>{m}</p>\n<p>{n}</p>\n<p>{o}</p>\n<p>{p}</p>\n<p>{q}</p>\n<p>{r}</p>\n<p>{s}</p>\n<p>{t}</p>\n<p>{u}</p>\n<p>{v}</p>\n<p>{w}</p>\n<p>{x}</p>\n<p>{y}</p>\n<p>{z}</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-derived-by/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>clicks: 0</button>',\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-derived-by/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet fn = () => ({ n: count });\n\n\tlet { n } = $derived.by(fn);\n</script>\n\n<button onclick={() => (count += 1)}>clicks: {n}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-derived-event/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['works!']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-derived-event/main.svelte",
    "content": "<script>\n\tlet structured = $state({\n\t\thandler() {\n\t\t\tconsole.log('works!')\n\t\t}\n\t});\n</script>\n\n{#if structured}\n  {@const { handler } = structured}\n\n  <button onclick={() => handler()}>click me</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-derived-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1 1 1</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2 2 2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-derived-object/main.svelte",
    "content": "\n<script>\n  function get_values() {\n    let a = $state(0);\n    let b = $state(0);\n    let c = $state(0);\n\n    return {\n       get a() { return a },\n       get b() { return b },\n       get c() { return c },\n\t\t\t increment() {\n\t\t\t\ta++;\n\t\t\t\tb++;\n\t\t\t\tc++;\n\t\t\t }\n    };\n  }\n\n  const { a, b, c, increment } = $derived(get_values());\n</script>\n\n<button onclick={increment}>{a} {b} {c}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/Child.svelte",
    "content": "<script>\n\tlet { data } = $props();\n\tlet { foo } = $state(data);\n</script>\n\n{foo}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `bar`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child data={{ foo: 'bar' }} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/details-binding-initial/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst details_el = target.querySelector('details');\n\n\t\tok(details_el);\n\n\t\tassert.strictEqual(details_el.open, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/details-binding-initial/main.svelte",
    "content": "<script>\n\tlet open = $state(true);\n</script>\n\n<details bind:open>\n\t <summary>Details</summary>\n\t ...\n</details>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/directives/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div><p class=\"foo\" style=\"color: red;\">This text should be red with a class of foo</p></div>`,\n\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.equal(p?.className, `foo`);\n\t\tassert.equal(p?.style.color, `red`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/directives/main.svelte",
    "content": "<div>\n\t<p style:color=\"red\" class:foo={true}>This text should be red with a class of foo</p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/directives-with-member-access/_config.js",
    "content": "import { test } from '../../test';\n\n// no need to compare the rendered HTML — we only care\n// that the generated code is valid\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/directives-with-member-access/main.svelte",
    "content": "<script>\n\t/**\n\t * @param {Element} [node]\n\t * @param {any} [options]\n\t */\n\tconst fn = (node, options) => ({});\n\n\tlet a = { b: { 'c-d': fn } };\n\n\tlet directive = $derived(a);\n</script>\n\n<!-- these will yield TypeScript errors, because it looks like e.g. `nested.with - string`,\n     in other words a number. Relatedly, people should not do this. It is stupid. -->\n<div use:directive.b.c-d></div>\n<div transition:directive.b.c-d></div>\n{#each [] as i (i)}\n\t<div animate:directive.b.c-d></div>\n{/each}\n<div in:directive.b.c-d></div>\n<div out:directive.b.c-d></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dot-notation-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>hello</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dot-notation-component/child.svelte",
    "content": "<h1>hello</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dot-notation-component/main.svelte",
    "content": "<script>\n\timport child from './child.svelte';\n\n\tconst components = { child };\n</script>\n\n<components.child />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-attribute-and-attribute-directive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ target, logs, assert }) {\n\t\tconst [div, div2] = target.querySelectorAll('div');\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.deepEqual(logs, ['called', 'called']);\n\n\t\t// this is to assert that the order of the attributes is still not relevant\n\t\t// and directives take precedence over generic attribute\n\t\tassert.equal(div.classList.contains('dark'), false);\n\t\tassert.equal(div2.style.color, 'red');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['called', 'called']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-attribute-and-attribute-directive/main.svelte",
    "content": "<script>\n\tlet value = $state(0);\n\n\tfunction dark(){\n\t\tconsole.log('called')\n\t\treturn false;\n\t}\n\n\tfunction get_class(){\n\t\treturn 'dark';\n\t}\n\n\tfunction color(){\n\t\tconsole.log('called')\n\t\treturn 'red';\n\t}\n\n\tfunction get_style(){\n\t\treturn 'color: green';\n\t}\n</script>\n\n<div class:dark={dark()} class={get_class()}></div>\n<div style:color={color()} style={get_style()}></div>\n<button onclick={()=> value++}>{value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-attribute-and-attribute-directive-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ target, logs, assert }) {\n\t\tconst [div, div2] = target.querySelectorAll('div');\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'updated class attribute',\n\t\t\t'updated class directive',\n\t\t\t'updated style attribute',\n\t\t\t'updated style directive'\n\t\t]);\n\n\t\tassert.ok(div.classList.contains('dark'));\n\t\tassert.ok(div.classList.contains('small'));\n\n\t\tassert.equal(div2.getAttribute('style'), 'background: green; color: green;');\n\n\t\tflushSync(() => button?.click());\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'updated class attribute',\n\t\t\t'updated class directive',\n\t\t\t'updated style attribute',\n\t\t\t'updated style directive',\n\t\t\t'updated class attribute',\n\t\t\t'updated style attribute'\n\t\t]);\n\n\t\tassert.ok(div.classList.contains('dark'));\n\t\tassert.ok(div.classList.contains('big'));\n\n\t\tassert.equal(div2.getAttribute('style'), 'background: red; color: green;');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-attribute-and-attribute-directive-2/main.svelte",
    "content": "<script>\n\tlet value = $state(0);\n\tfunction dark(){\n\t\tconsole.log('updated class directive');\n\t\treturn true;\n\t}\n\tfunction get_class(){\n\t\tconsole.log('updated class attribute');\n\t\treturn value % 2 ? 'big' : 'small';\n\t}\n\tfunction color(){\n\t\tconsole.log('updated style directive');\n\t\treturn \"green\";\n\t}\n\tfunction get_style(){\n\t\tconsole.log('updated style attribute');\n\t\treturn value % 2 ? 'background: red' : 'background: green';\n\t}\n</script>\n\n<div class:dark={dark()} class={get_class()}></div>\n<div style:color={color()} style={get_style()}></div>\n<button onclick={()=> value++}>switch</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component/Component1.svelte",
    "content": "Component1\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component/Component2.svelte",
    "content": "Component2\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: '<button>switch</button> Component1 Component1',\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>switch</button> Component2 Component2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component/main.svelte",
    "content": "<script>\n\timport Component1 from './Component1.svelte';\n\timport Component2 from './Component2.svelte';\n\n\tlet Component = $state(Component1);\n\tlet Object = {\n\t\tget component() {\n\t\t\treturn Component;\n\t\t}\n\t};\n</script>\n\n<button onclick={() => (Component = Component2)}>switch</button>\n\n<Component />\n<Object.component />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-css-props/Component.svelte",
    "content": "<div>Hello</div>\n\n<style>\n\tdiv {\n\t\tcolor: var(--color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-css-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<svelte-css-wrapper style=\"display: contents; --color: red;\"><div class=\"svelte-lsmn3l\">Hello</div></svelte-css-wrapper>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-css-props/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tlet Comp = Component;\n</script>\n\n<svelte:component this={Comp} --color=\"red\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-falsy-hydrate/HelloWorld.svelte",
    "content": "<div>Hello world</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-falsy-hydrate/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<h1>Test</h1> <div>Hello world</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-falsy-hydrate/main.svelte",
    "content": "<script>\n\timport HelloWorld from './HelloWorld.svelte';\n\n\tlet Component = $state();\n\n\t$effect.pre(() => {\n\t\tComponent = HelloWorld;\n\t});\n</script>\n\n<h1>Test</h1>\n\n<Component />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-nested/A.svelte",
    "content": "<script>\n\tconst { children } = $props()\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-nested/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, 'test');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-nested/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\n\tconst B = $derived(A);\n</script>\n\n<B>\n\t<B>test</B>\n</B>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-transition/Component.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\tlet show = $state(true);\n</script>\n\n<h1>Outside</h1>\n\n{#if show}\n\t<button onclick={()=> show = false} transition:fade|global={{ duration: 100 }}>Hide</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-transition/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\t// one tick to not be at 0. Else the flushSync would revert the in-transition which hasn't started, and directly remove the button\n\t\traf.tick(1);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<h1>Outside</h1><button style=\"opacity: 0;\">Hide</button>`);\n\n\t\traf.tick(101);\n\n\t\tassert.htmlEqual(target.innerHTML, `<h1>Outside</h1>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-component-transition/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\"\n</script>\n\n<svelte:component this={Component} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-element-dynamic-namespace/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.equal(target.querySelector('path')?.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tflushSync(() => {\n\t\t\ttarget.querySelector('button')?.click();\n\t\t});\n\n\t\tassert.equal(target.querySelector('div')?.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-element-dynamic-namespace/main.svelte",
    "content": "<script>\n\tlet tag = $state('path');\n\tlet xmlns = $state('http://www.w3.org/2000/svg');\n</script>\n\n<button onclick={() => {\n\ttag = 'div';\n\txmlns = null;\n}}>change</button>\n\n<!-- wrapper necessary or else jsdom says this is always an xhtml namespace -->\n<svg>\n\t<svelte:element this={tag} xmlns={xmlns} />\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-element-svg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\ttest({ assert, target, hydrate }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst circle = target.querySelector('circle');\n\n\t\tassert.equal(svg?.getAttribute('viewBox'), '0 0 1000 1000');\n\t\tassert.equal(svg?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circle?.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\thydrate();\n\n\t\tassert.equal(svg?.getAttribute('viewBox'), '0 0 1000 1000');\n\t\tassert.equal(svg?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(circle?.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-element-svg/main.svelte",
    "content": "<script>\n\tlet props = {\n\t\theight: '100px',\n\t\twidth: '100px',\n\t\tviewBox: '0 0 1000 1000'\n\t};\n</script>\n\n<svelte:element this={'svg'} {...props}>\n\t<circle cx=\"500\" cy=\"500\" r=\"500\"></circle>\n</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-element-transition/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\traf.tick(0);\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Toggle</button> <div style=\"opacity: 0;\">DIV</div>`\n\t\t);\n\n\t\traf.tick(100);\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Toggle</button> <div style=\"\">DIV</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-element-transition/main.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\n\tlet element = $state('div');\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => (show = !show)}>Toggle</button>\n\n{#if show}\n\t<svelte:element this={element} transition:fade={{ duration: 100 }}>DIV</svelte:element>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<button>Tama</button><button>Pochi</button><br><button>Change Function</button>',\n\n\ttest({ assert, logs, target }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tb2?.click();\n\t\tb3?.click();\n\t\tb1?.click();\n\t\tb2?.click();\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'creating \"Hello\" handler for Tama',\n\t\t\t'Hello Tama',\n\t\t\t'creating \"Hello\" handler for Pochi',\n\t\t\t'Hello Pochi',\n\t\t\t'creating \"Bye\" handler for Tama',\n\t\t\t'Bye Tama',\n\t\t\t'creating \"Bye\" handler for Pochi',\n\t\t\t'Bye Pochi'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler/main.svelte",
    "content": "<script>\n\tlet saySomething = $state(name => {\n\t\tconsole.log('creating \"Hello\" handler for ' + name);\n\t\treturn { handler: () => console.log('Hello ' + name) };\n\t});\n\n\tfunction change() {\n\t\tsaySomething = name => {\n\t\t\tconsole.log('creating \"Bye\" handler for ' + name);\n\t\t\treturn { handler: () => console.log('Bye ' + name) };\n\t\t}\n\t}\n</script>\n\n<button onclick={saySomething('Tama').handler}>Tama</button>\n<button onclick={saySomething('Pochi').handler}>Pochi</button>\n\n<br>\n<button onclick={change}>Change Function</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<button>Tama</button><button>Pochi</button><br><button>Change Function</button>',\n\n\ttest({ assert, logs, target }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tb2?.click();\n\t\tb3?.click();\n\t\tb1?.click();\n\t\tb2?.click();\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'creating \"Hello\" handler for Tama',\n\t\t\t'Hello Tama',\n\t\t\t'creating \"Hello\" handler for Pochi',\n\t\t\t'Hello Pochi',\n\t\t\t'creating \"Bye\" handler for Tama',\n\t\t\t'Bye Tama',\n\t\t\t'creating \"Bye\" handler for Pochi',\n\t\t\t'Bye Pochi'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler-2/main.svelte",
    "content": "<script>\n\tlet saySomething = $state(name => {\n\t\tconsole.log('creating \"Hello\" handler for ' + name);\n\t\treturn { handler: () => console.log('Hello ' + name) };\n\t});\n\n\tfunction change() {\n\t\tsaySomething = name => {\n\t\t\tconsole.log('creating \"Bye\" handler for ' + name);\n\t\t\treturn { handler: () => console.log('Bye ' + name) };\n\t\t}\n\t}\n</script>\n\n<button on:click={saySomething('Tama').handler}>Tama</button>\n<button on:click={saySomething('Pochi').handler}>Pochi</button>\n\n<br>\n<button on:click={change}>Change Function</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler-3/Button.svelte",
    "content": "<button on:click>\n\t<slot />\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tb2?.click();\n\t\tb2?.click();\n\t\tb3?.click();\n\t\tb3?.click();\n\n\t\tb1?.click();\n\n\t\tb2?.click();\n\t\tb2?.click();\n\t\tb3?.click();\n\t\tb3?.click();\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'creating handler (1)',\n\t\t\t1,\n\t\t\t2,\n\t\t\t'creating handler (1)',\n\t\t\t3,\n\t\t\t4,\n\t\t\t'creating handler (2)',\n\t\t\t6,\n\t\t\t8,\n\t\t\t'creating handler (2)',\n\t\t\t10,\n\t\t\t12\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-event-handler-3/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\n\tlet count = $state(0);\n\tlet d = $state(1);\n\n\tfunction create_handler() {\n\t\tconst change = d;\n\n\t\tconsole.log(`creating handler (${change})`);\n\n\t\treturn function increment() {\n\t\t\tcount += change;\n\t\t\tconsole.log(count);\n\t\t};\n\t}\n</script>\n\n<button on:click={() => (d += 1)}>increase d ({d})</button>\n\n<button on:click={create_handler()}>\n\tclicks: {count}\n</button>\n\n<Button on:click={create_handler()}>\n\tclicks: {count}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['AA', 'AB']);\n\n\t\tflushSync(() => {\n\t\t\tbtn3.click();\n\t\t\tbtn1.click();\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['AA', 'AB', 'BA', 'BB']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/main.svelte",
    "content": "<script>\n\tlet hof = $state((name) => () => console.log('A' + name));\n\tconst member = $derived({\n\t\thof\n\t});\n\tfunction change() {\n\t\thof = (name) => () => console.log('B' + name);\n\t}\n</script>\n\n<button onclick={hof('A')}>A</button>\n<button onclick={member.hof('B')}>B</button>\n\n<br />\n<button onclick={change}>change</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-if-component-transition/Component.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\tlet show = $state(true);\n</script>\n\n<h1>Outside</h1>\n\n{#if show}\n\t<button onclick={()=> show = false} transition:fade|global={{ duration: 100 }}>Hide</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-if-component-transition/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\t// one tick to not be at 0. Else the flushSync would revert the in-transition which hasn't started, and directly remove the button\n\t\traf.tick(1);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<h1>Outside</h1><button style=\"opacity: 0;\">Hide</button>`);\n\n\t\traf.tick(101);\n\n\t\tassert.htmlEqual(target.innerHTML, `<h1>Outside</h1>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-if-component-transition/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\"\n\tlet shown = $state(false);\n</script>\n\n{#if shown}\n\tNothing\n{:else}\n\t<svelte:component this={Component} />\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-spread-and-attribute-directive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\ttest({ target, logs, assert }) {\n\t\tconst input = target.querySelector('input');\n\n\t\tok(input);\n\n\t\tassert.deepEqual(logs, ['get_rest']);\n\n\t\tassert.ok(input.classList.contains('dark'));\n\t\tassert.equal(input.dataset.rest, 'true');\n\n\t\tflushSync(() => {\n\t\t\tinput.focus();\n\t\t});\n\n\t\tassert.ok(input.classList.contains('dark'));\n\t\tassert.ok(input.classList.contains('focused'));\n\t\tassert.equal(input.dataset.rest, 'true');\n\n\t\tassert.deepEqual(logs, ['get_rest']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-spread-and-attribute-directive/main.svelte",
    "content": "<script>\n\tlet focused = $state(false)\n\t\n\tfunction get_rest() {\n\t\tconsole.log(\"get_rest\");\n\t\treturn {\n\t\t\t\"data-rest\": \"true\"\n\t\t}\n\t}\n\n</script>\n\n<input \n\tonfocus={() => focused = true} \n\tonblur={() => focused = false} \n\tclass:dark={true} \n\tclass={`${focused ? 'focused' : ''}`} \n\t{...get_rest()} \n>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-style-attr/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<div style=\"background-color: red;\">Hello world</div><button>Make blue</button`,\n\n\tasync test({ assert, target, component }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div style=\"background-color: blue;\">Hello world</div><button>Make blue</button`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-style-attr/main.svelte",
    "content": "<script>\n\tlet color = $state('red');\n\n\tconst getColor = () => color;\n</script>\n\n<div style=\"background-color: {getColor()};\">Hello world</div>\n\n<button onclick={() => color = 'blue'}>Make blue</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-transition/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['transition 2']);\n\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['transition 2']);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['transition 2', 'transition 1']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/dynamic-transition/main.svelte",
    "content": "<script>\n\tfunction transition1() {\n\t\tconsole.log('transition 1')\n\t\treturn {\n\t\t\ttick() {\n\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction transition2() {\n\t\tconsole.log('transition 2')\n\t\treturn {\n\t\t\ttick() {\n\n\t\t\t}\n\t\t}\n\t}\n\n\tlet toggle = $state(false);\n\tlet toggleTransition = $state(false);\n\n\tconst derived = $derived(toggleTransition ? transition1 : transition2)\n</script>\n\n\n<button on:click={() => toggle = !toggle}>{toggle}</button>\n<button on:click={() => toggleTransition = !toggleTransition}>{toggleTransition}</button>\n\n{#if toggle}<div transition:derived></div>{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-store-no-warning/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ assert, warnings }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-store-no-warning/main.svelte",
    "content": "<svelte:options runes />\n<script>\n\timport { writable } from 'svelte/store';\n\n\tconst array = writable([{ name: \"\" }]);\n</script>\n\n{#each $array as item}\n\t<div><input bind:value={item.name} /></div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-this-member/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\titems: [{ src: 'https://ds' }]\n\t\t};\n\t},\n\n\tasync test({ assert, target, component }) {\n\t\tassert.equal(target.querySelector('img'), component.items[0].img);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-this-member/main.svelte",
    "content": "<script>\n\tlet { items } = $props();\n</script>\n\n{#each items as item, i}\n\t<img\n\t\tsrc={item.src}\n\t\tbind:this={items[i].img}\n\t\talt=\"slider{i}\"\n\t/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-this-member-2/Child.svelte",
    "content": "<script>\n\tlet { item = $bindable() } = $props();\n</script>\n\n<div bind:this={item.dom}>\n\t{item.text}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-this-member-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, component }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t\tb1.click();\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add item</button><button>clear</button><div>Item 1</div><div>Item 2</div><div>Item 3</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>add item</button><button>clear</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-bind-this-member-2/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\tlet items = $state([]);\n\n\tfunction add_item() {\n\t\titems.push({\n\t\t\tid: items.length,\n\t\t\ttext: 'Item ' + (items.length + 1),\n\t\t\tdom: null,\n\t\t})\n\t}\n\n\tfunction clear() {\n\t\titems = [];\n\t}\n</script>\n\n<button on:click={add_item}>add item</button>\n<button on:click={clear}>clear</button>\n\n{#each items as item, index (item.id)}\n\t<Child bind:item={items[index]} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-block-default-arg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: false // or else the arg will be called eagerly anyway to check for dead zones\n\t},\n\thtml: `\n\t<div>1 1 1</div>\n\t<div>2 2 2</div>\n\t<div>1 1 1</div>\n\t<p>2</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-block-default-arg/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\n\tlet count = $state(0);\n\tfunction default_arg() {\n\t\tuntrack(() => count++);\n\t\treturn 1;\n\t}\n</script>\n\n{#each [{}, { a: 2 }, {}] as { a = default_arg() }}\n\t<div>{a} {a} {a}</div>\n{/each}\n<p>{count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-dynamic-html/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>add item</button><button>make span</button><button>reverse</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t\tbtn1?.click();\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add item</button><button>make span</button><button>reverse</button><div>Item 1</div><div>Item 2</div><div>Item 3</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add item</button><button>make span</button><button>reverse</button><span>Item 1</span><span>Item 2</span><span>Item 3</span>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add item</button><button>make span</button><button>reverse</button><span>Item 3</span><span>Item 2</span><span>Item 1</span>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-dynamic-html/main.svelte",
    "content": "<script>\n\tlet items = $state([]);\n\n\tfunction add_item() {\n\t\titems.push({\n\t\t\tid: items.length,\n\t\t\ttext: 'Item ' + (items.length + 1),\n\t\t\thtml: '<div>Item ' + (items.length + 1) + '</div>',\n\t\t\tdom: null,\n\t\t})\n\t}\n\n\tfunction make_span() {\n\t\titems.forEach(item => {\n\t\t\titem.html = item.html.replace(/div/g, 'span')\n\t\t})\n\t}\n\n\tfunction reverse() {\n\t\titems.reverse();\n\t}\n</script>\n\n<button on:click={add_item}>add item</button>\n<button on:click={make_span}>make span</button>\n<button on:click={reverse}>reverse</button>\n\n{#each items as item (item.id)}\n\t{@html item.html}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-effect-linking/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [step_back, step_forward, jump_back, jump_forward] = target.querySelectorAll('button');\n\t\tconst [div] = target.querySelectorAll('div');\n\n\t\tstep_back.click();\n\t\tawait tick();\n\n\t\tstep_forward.click();\n\t\tawait tick();\n\n\t\tstep_forward.click();\n\t\tawait tick();\n\n\t\t// if the effects get linked in a circle, we will never get here\n\t\tassert.htmlEqual(div.innerHTML, '<p>5</p><p>6</p><p>7</p>');\n\n\t\tjump_forward.click();\n\t\tawait tick();\n\n\t\tstep_forward.click();\n\t\tawait tick();\n\n\t\tstep_forward.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(div.innerHTML, '<p>12</p><p>13</p><p>14</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-effect-linking/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet items = $state([4, 5, 6]);\n</script>\n\n<button onclick={() => {\n\titems = items.map((n) => n - 1);\n}}>\n\tstep back\n</button>\n\n<button onclick={() => {\n\titems = items.map((n) => n + 1);\n}}>\n\tstep forward\n</button>\n\n<button onclick={() => {\n\titems = items.map((n) => n - 5);\n}}>\n\tjump back\n</button>\n\n<button onclick={() => {\n\titems = items.map((n) => n + 5);\n}}>\n\tjump forward\n</button>\n\n<div>\n\t{#each items as item (item)}\n\t\t<p>{item}</p>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-fallback/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, component }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tassert.htmlEqual(target.innerHTML, '<div>abc</div><button>Toggle</button>');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, '<div>Fallback</div><button>Toggle</button>');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, '<div>abc</div><button>Toggle</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-fallback/main.svelte",
    "content": "<script>\n\tlet data = $state({a:1, b:2, c:3});\n\tlet filter = $state(false);\n\n\tfunction toggle_filter(){\n\t\tif(filter) {\n\t\t\tfilter = false;\n\t\t\tdata = {a:1, b:2, c:3};\n\t\t} else {\n\t\t\tfilter = true;\n\t\t\tdata = {};\n\t\t}\n\t}\n</script>\n<div>\n\t{#each Object.keys(data) as key}\n\t\t{key}\n\t{:else}\n\t\tFallback\n\t{/each}\n</div>\n<button onclick={toggle_filter}>Toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-key-volatile/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tmode: ['client'],\n\n\terror: 'each_key_volatile'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-key-volatile/main.svelte",
    "content": "<script>\n\tlet things = $state([\n\t\t{ group: 'a', id: 1 },\n\t\t{ group: 'b', id: 2 }\n\t]);\n</script>\n\n{#each things as thing ([thing.group, thing.id])}\n\t<p>{thing.group}-{thing.id}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-keyed-child-effect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nlet ascending = `\n<button>reverse</button>\n<p>1</p>\n<p>(1)</p>\n<p>2</p>\n<p>(2)</p>\n<p>3</p>\n<p>(3)</p>\n`;\n\nlet descending = `\n<button>reverse</button>\n<p>3</p>\n<p>(3)</p>\n<p>2</p>\n<p>(2)</p>\n<p>1</p>\n<p>(1)</p>\n`;\n\nexport default test({\n\thtml: ascending,\n\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, descending);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, ascending);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, descending);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, ascending);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-keyed-child-effect/main.svelte",
    "content": "<script>\n\tlet array = $state([1, 2, 3]);\n</script>\n\n<button onclick={() => array.reverse()}>reverse</button>\n\n{#each array as item (item)}\n\t<p>{item}</p>\n\t{#if true}\n\t\t<p>({item})</p>\n\t{/if}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-mutation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>foo</button>\n\t<button>foo</button>\n\t<button>FOO</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\t// ensure each click runs in its own rerender task\n\t\tbtn1.click();\n\t\tflushSync();\n\n\t\tbtn2.click();\n\t\tflushSync();\n\n\t\tbtn3.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t<button>bar</button>\n\t<button>bar</button>\n\t<button>BAR</button>\n\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-mutation/main.svelte",
    "content": "<script>\n\tlet a = $state([{ text: 'foo' }]);\n\n\tlet b = $state([{ text: 'foo' }]);\n\n\tlet text = $state('foo');\n\tlet c = $state([{ get text() { return text.toUpperCase() }, set text(v) { text = v }}]);\n</script>\n\n{#each a as item, i}\n\t<button on:click={() => a[i].text = 'bar'}>{item.text}</button>\n{/each}\n\n{#each b as item}\n\t<button on:click={() => item.text = 'bar'}>{item.text}</button>\n{/each}\n\n{#each c as item}\n\t<button on:click={() => item.text = 'bar'}>{item.text}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-mutation-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>push</button><button>pop</button><p>1</p><p>2</p><p>3</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>push</button><button>pop</button><p>1</p><p>2</p><p>3</p><p>4</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>push</button><button>pop</button><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>push</button><button>pop</button><p>1</p><p>2</p><p>3</p><p>4</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>push</button><button>pop</button><p>1</p><p>2</p><p>3</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>push</button><button>pop</button><p>1</p><p>2</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-mutation-2/main.svelte",
    "content": "<script>\n\tlet numbers = $state([{id: 1}, {id: 2}, {id: 3}]);\n</script>\n\n<button onclick={() => numbers.push({id: numbers.length + 1})}>\n\tpush\n</button>\n\n<button onclick={() => numbers.pop()}>\n\tpop\n</button>\n\n{#each numbers as number}\n\t<p>{number.id}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-non-branch-effects/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst addBtn = /** @type {HTMLElement} */ (target.querySelector('button.add'));\n\t\tconst removeBtn = /** @type {HTMLElement} */ (target.querySelector('button.remove'));\n\n\t\tconst btnHtml = '<button class=\"add\">add</button><button class=\"remove\">remove</button>';\n\n\t\tassert.htmlEqual(target.innerHTML, btnHtml);\n\n\t\taddBtn.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span>${btnHtml}`);\n\n\t\taddBtn.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span><span>2</span>${btnHtml}`);\n\n\t\taddBtn.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span><span>2</span><span>3</span>${btnHtml}`);\n\n\t\tremoveBtn.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span><span>2</span>${btnHtml}`);\n\n\t\tremoveBtn.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span>${btnHtml}`);\n\n\t\taddBtn.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span><span>2</span>${btnHtml}`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-non-branch-effects/main.svelte",
    "content": "<script>\n\tlet items = $state([]);\n\n\tconst proxy = new Proxy(items, {\n\t\tget: (target, prop) => {\n\t\t\ttry {\n\t\t\t\t$effect.pre(() => {\n\t\t\t\t\treturn () => {};\n\t\t\t\t});\n\t\t\t} catch {}\n\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n\n\tfunction add() {\n\t\titems.push(items.length + 1);\n\t}\n\n\tfunction remove() {\n\t\titems.pop();\n\t}\n</script>\n\n{#each proxy as item}\n\t<span>{item}</span>\n{/each}\n\n<button class=\"add\" onclick={add}>add</button>\n<button class=\"remove\" onclick={remove}>remove</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-text-template/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>A<br>B<br>C<br></p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-text-template/main.svelte",
    "content": "<script>\n\tlet array = $state(['A', 'B', 'C']);\n</script>\n\n<p>\n{#each array as a}\n\t{a}<br/>\n{/each}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\thtml: `<p>test costs $1</p><p>test 2 costs $2</p><p>test costs $1</p><p>test 2 costs $2</p><button>add</button><button>change</button><button>reload</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>test costs $1</p><p>test 2 costs $2000</p><p>test costs $1</p><p>test 2 costs $2000</p><button>add</button><button>change</button><button>reload</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>test costs $1</p><p>test 2 costs $2000</p><p>test 3 costs $3</p><p>test costs $1</p><p>test 2 costs $2000</p><p>test 3 costs $3</p><button>add</button><button>change</button><button>reload</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>test costs $1</p><p>test 2 costs $2</p><p>test costs $1</p><p>test 2 costs $2</p><button>add</button><button>change</button><button>reload</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates/main.svelte",
    "content": "<script>\n\tlet data = $state({ items: [] });\n\n\tfunction fetchData() {\n\t\tdata = {\n\t\t\titems: [{\n\t\t\t\tid: 1,\n\t\t\t\tprice: 1,\n\t\t\t\tname: 'test'\n\t\t\t}, {\n\t\t\t\tid: 2,\n\t\t\t\tprice: 2,\n\t\t\t\tname: 'test 2'\n\t\t\t}]\n\t\t};\n\t}\n\n\tfetchData();\n\n\tfunction copyItems(original) {\n    return [...original.map((item) => ({ ...item }))];\n  }\n\n  let items = $state();\n\n\t$effect(() => {\n    items = copyItems(data.items);\n  });\n</script>\n\n{#each items as item}\n  <p>{item.name} costs ${item.price}</p>\n{/each}\n\n{#each items as item (item.id)}\n  <p>{item.name} costs ${item.price}</p>\n{/each}\n\n\n<button onclick={() => {\n\titems.push({\n\t\tid: 3,\n\t\tprice: 3,\n\t\tname: 'test 3'\n\t})\n}}>add</button>\n\n<button onclick={() => {\n\tdata.items[1].price = 2000\n}}>change</button>\n\n<button onclick={() => {\n\tfetchData();\n}}>reload</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-10/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [add, adjust] = target.querySelectorAll('button');\n\n\t\tadd.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add</button> <button>adjust</button>\n\t\t\t<h2>Keyed</h2>\n\t\t\t<div>Item: 1. Index: 0</div>\n\t\t\t<div>Item: 0. Index: 1</div>\n\t\t\t<h2>Unkeyed</h2>\n\t\t\t<div>Item: 1. Index: 0</div>\n\t\t\t<div>Item: 0. Index: 1</div>`\n\t\t);\n\n\t\tadd.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add</button> <button>adjust</button>\n\t\t\t<h2>Keyed</h2>\n\t\t\t<div>Item: 2. Index: 0</div>\n\t\t\t<div>Item: 1. Index: 1</div>\n\t\t\t<div>Item: 0. Index: 2</div>\n\t\t\t<h2>Unkeyed</h2>\n\t\t\t<div>Item: 2. Index: 0</div>\n\t\t\t<div>Item: 1. Index: 1</div>\n\t\t\t<div>Item: 0. Index: 2</div>`\n\t\t);\n\n\t\tadjust.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add</button> <button>adjust</button>\n\t\t\t<h2>Keyed</h2>\n\t\t\t<div>Item: 2. Index: 0</div>\n\t\t\t<div>Item: 1. Index: 1</div>\n\t\t\t<div>Item: 10. Index: 2</div>\n\t\t\t<h2>Unkeyed</h2>\n\t\t\t<div>Item: 2. Index: 0</div>\n\t\t\t<div>Item: 1. Index: 1</div>\n\t\t\t<div>Item: 10. Index: 2</div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-10/main.svelte",
    "content": "<script>\n\tconst items = $state([{ t: 0 }]);\n</script>\n\n<button onclick={() => items.unshift({t:items.length})}>add</button>\n<button onclick={() => items.at(-1).t = 10}>adjust</button>\n \n<h2>Keyed</h2>\n{#each items as item, index (item)}\n\t<div>Item: {item.t}. Index: {index}</div>\n{/each}\n\n<h2>Unkeyed</h2>\n{#each items as item, index}\n\t<div>Item: {item.t}. Index: {index}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-11/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [add4, add5, modify3] = target.querySelectorAll('button');\n\n\t\tadd4.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add 4</button> <button>add 5</button> <button>modify 3</button>\n\t\t\t1423`\n\t\t);\n\n\t\tadd5.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add 4</button> <button>add 5</button> <button>modify 3</button>\n\t\t\t14523`\n\t\t);\n\n\t\tmodify3.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add 4</button> <button>add 5</button> <button>modify 3</button>\n\t\t\t1452updated`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-11/main.svelte",
    "content": "<script>\n\tlet list = $state([{ id: 1, text: '1' }, { id: 2, text: '2' }, { id: 3, text: '3' }]);\n</script>\n\n<button onclick={() => list = [list[0], { id: 4, text: '4' }, ...list.slice(1)]}>add 4</button>\n<button onclick={() => list = [list[0], list[1], { id: 5, text: '5' }, ...list.slice(2)]}>add 5</button>\n<button onclick={() => list.at(-1).text = 'updated'}>modify 3</button>\n\n{#each list as item (item.id)}\n\t{item.text}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-12/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst [clear, push] = target.querySelectorAll('button');\n\n\t\tflushSync(() => clear.click());\n\t\tflushSync(() => push.click());\n\t\traf.tick(500);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clear</button>\n\t\t\t\t<button>push</button>\n\t\t\t\t<span style=\"opacity: 1;\">1</span>\n\t\t\t\t<span style=\"opacity: 0.5;\">2</span>\n\t\t\t`\n\t\t);\n\n\t\traf.tick(1000);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clear</button>\n\t\t\t\t<button>push</button>\n\t\t\t\t<span style=\"opacity: 1;\">1</span>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-12/main.svelte",
    "content": "<script>\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 1000,\n\t\t\ttick(t) {\n\t\t\t\tnode.style.opacity = t;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet items = $state([1, 2]);\n</script>\n\n<button onclick={() => items = []}>clear</button>\n<button onclick={() => items.push(items.length + 1)}>push</button>\n\n{#each items as item}\n\t<span transition:fade={{duration: 1000}}>{item}</span>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-13/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst [clear, reverse] = target.querySelectorAll('button');\n\n\t\tflushSync(() => clear.click());\n\t\tflushSync(() => reverse.click());\n\t\traf.tick(1);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clear</button>\n\t\t\t\t<button>reverse</button>\n\t\t\t\t<span style=\"opacity: 1;\">c</span>\n\t\t\t\t<span style=\"opacity: 1;\">b</span>\n\t\t\t\t<span style=\"opacity: 1;\">a</span>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-13/main.svelte",
    "content": "<script>\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tduration: 1000,\n\t\t\ttick(t) {\n\t\t\t\tnode.style.opacity = t;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet items = $state(['a', 'b', 'c']);\n</script>\n\n<button onclick={() => items = []}>clear</button>\n<button onclick={() => items = ['c', 'b', 'a']}>reverse</button>\n\n{#each items as item (item)}\n\t<span transition:fade={{duration: 1000}}>{item}</span>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>Add Item</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Add Item</button><button>Index 0\\n|\\nItem 0</button><button>Index 1\\n|\\nItem 1</button>`\n\t\t);\n\n\t\tlet [btn2, btn3, btn4] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn4.click();\n\t\t\tbtn3.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Add Item</button>`);\n\n\t\tlet [btn5] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn5.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Add Item</button><button>Index 0\\n|\\nItem 2</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-2/main.svelte",
    "content": "<script>\n\tlet arr = $state([]);\n\tlet counter = 0\n\n\tfunction addItem() {\n\t\tarr.push(`${counter++}`)\n\t}\n\n\tfunction removeItem(i) {\n\t\tarr.splice(i, 1)\n\t}\n</script>\n\n<button onclick={addItem}>Add Item</button>\n\n{#each arr as item, i}\n\t<button onclick={() => removeItem(i)}>Index {i} | Item {item}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<ul><li><button>Delete</button>\\na\\na</li><li><button>Delete</button>\\nb\\nb</li><li><button>Delete</button>\\nc\\nc</li><li><button>Delete</button>\\nd\\nd</li></ul>`,\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {{ click: () => void; }}\n\t\t */\n\t\tlet btn1;\n\n\t\t[btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li><button>Delete</button>\\nb\\nb</li><li><button>Delete</button>\\nc\\nc</li><li><button>Delete</button>\\nd\\nd</li></ul>`\n\t\t);\n\n\t\t[btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li><button>Delete</button>\\nc\\nc</li><li><button>Delete</button>\\nd\\nd</li></ul>`\n\t\t);\n\n\t\t[btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<ul><li><button>Delete</button>\\nd\\nd</li></ul>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-3/main.svelte",
    "content": "<script>\n\tlet entries = $state([\n\t\t\t{\n\t\t\t\t\tid: 'a',\n\t\t\t\t\tsubitems: ['a'],\n\t\t\t},\n\t\t\t{\n\t\t\t\t\tid: 'b',\n\t\t\t\t\tsubitems: ['b'],\n\t\t\t},\n\t\t\t{\n\t\t\t\t\tid: 'c',\n\t\t\t\t\tsubitems: ['c'],\n\t\t\t},\n\t\t\t{\n\t\t\t\t\tid: 'd',\n\t\t\t\t\tsubitems: ['d'],\n\t\t\t},\n\t]);\n\n\tfunction onDeleteEntry(entry) {\n\t\t\tentries = entries.filter((innerEntry) => innerEntry.id !== entry.id);\n\t}\n\t</script>\n\n\t<ul>\n\t\t\t{#each entries as entry}\n\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<button on:click={() => onDeleteEntry(entry)}>Delete</button>\n\t\t\t\t\t\t\t{entry.id}\n\t\t\t\t\t\t\t{#each entry.subitems as subitem}\n\t\t\t\t\t\t\t\t\t{subitem}\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t</li>\n\t\t\t{/each}\n\t</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `100\\n<button>Update</button>`,\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {{ click: () => void; }}\n\t\t */\n\t\tlet btn1;\n\n\t\t[btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `1000\\n<button>Update</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-4/main.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\n\tconst roomState = writable({\n\t\tusers: {\"gary\": { name: \"gary\", value: 100 }},\n\t});\n</script>\n\n{#each Object.values($roomState.users) as user (user.name)}\n\t{user.value}\n{/each}\n\n<button onclick={() => $roomState.users[\"gary\"].value = 1000}>Update</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `1\\n1\\n1\\n1\\n<button>+</button>`,\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {{ click: () => void; }}\n\t\t */\n\t\tlet btn1;\n\n\t\t[btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `2\\n2\\n2\\n2\\n<button>+</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-5/main.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\n\tlet store = writable([{ value: 1 }]);\n\tlet storeDeeper = writable({ items: [{ value: 1 }] });\n\n\tfunction increment() {\n\t\t$store[0].value++;\n\t\t$storeDeeper.items[0].value++;\n\t}\n</script>\n\n{#each $store as item (item)}\n\t{item.value}\n{/each}\n{#each $storeDeeper.items as item (item)}\n\t{item.value}\n{/each}\n{#each $store as item}\n\t{item.value}\n{/each}\n{#each $storeDeeper.items as item}\n\t{item.value}\n{/each}\n\n<button onclick={increment}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<ul><li>test (1) <span style=\"background-color: red; width: 20px; height: 20px; display: inline-block;\"></span></li><li>test 2 (2)</li><li>test 3 (3)</li></ul><button>Swap items 1 &amp; 3</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li>test (1) <span style=\"background-color: red; width: 20px; height: 20px; display: inline-block;\"></span></li><li>test 2 (2)</li><li>test 3 (3)</li></ul><button>Swap items 1 &amp; 3</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-6/main.svelte",
    "content": "<script>\n\tconst items = $state([\n\t\t{ name: 'test', id: 1, color: 'red' },\n\t\t{ name: 'test 2', id: 2 },\n\t\t{ name: 'test 3', id: 3 },\n\t]);\n\tconst onclick = () => {\n\t\tconst from = 0;\n\t\tconst to = 2;\n\t\titems.splice(to, 0, items.splice(from, 1)[0]);\n\t};\n</script>\n\n{#snippet renderItem(item)}\n\t<li>\n\t\t{item.name} ({item.id})\n\t\t{#if item.color}<span style=\"background-color: {item.color}; width: 20px; height: 20px; display: inline-block;\"></span>{/if}\n\t</li>\n{/snippet}\n\n<ul>\n\t{#each items as item (item.id)}\n\t\t{@render renderItem(item)}\n\t{/each}\n</ul>\n<button {onclick}>Swap items 1 & 3</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-7/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<ul><li>test (1)</li> <span style=\"background-color: red; width: 20px; height: 20px; display: inline-block;\"></span><li>test 2 (2)</li><li>test 3 (3)</li></ul><button>Swap items 1 &amp; 3</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<ul><li>test (1)</li><span style=\"background-color: red; width: 20px; height: 20px; display: inline-block;\"></span><li>test 2 (2)</li><li>test 3 (3)</li></ul><button>Swap items 1 &amp; 3</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-7/main.svelte",
    "content": "<script>\n\tconst items = $state([\n\t\t{ name: 'test', id: 1, color: 'red' },\n\t\t{ name: 'test 2', id: 2 },\n\t\t{ name: 'test 3', id: 3 },\n\t]);\n\tconst onclick = () => {\n\t\tconst from = 0;\n\t\tconst to = 2;\n\t\titems.splice(to, 0, items.splice(from, 1)[0]);\n\t};\n</script>\n\n{#snippet renderItem(item)}\n\t<li>\n\t\t{item.name} ({item.id})\n\t</li>\n\t{#if item.color}<span style=\"background-color: {item.color}; width: 20px; height: 20px; display: inline-block;\"></span>{/if}\n{/snippet}\n\n<ul>\n\t{#each items as item (item.id)}\n\t\t{@render renderItem(item)}\n\t{/each}\n</ul>\n<button {onclick}>Swap items 1 & 3</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-8/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>Add new message</button><p>first</p><p>message 1</p>`,\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {{ click: () => void; }}\n\t\t */\n\t\tlet btn1;\n\n\t\t[btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Add new message</button><p>first</p><p>message 1</p><p>message 2</p>`\n\t\t);\n\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Add new message</button><p>first</p><p>message 1</p><p>message 2</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Add new message</button><p>first</p><p>message 1</p><p>message 2</p><p>message 3</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-8/main.svelte",
    "content": "<script>\n\tlet messages = $state([{id: 1, content: \"message 1\"}]);\n\n\tfunction add() {\n\t\tconst newId = messages.length + 1\n\t\tmessages.push({id: 0, tmpId: newId, content: `message ${newId}`})\n\n\t\tqueueMicrotask(() => {\n\t\t\tconst msg = messages.find((m) => m.tmpId === newId && m.id === 0)\n\t\t\tmsg.tmpId = \"\"\n\t\t\tmsg.id = newId\n\t\t})\n\t}\n</script>\n\n<button onclick={add}>Add new message</button>\n\n{#each messages as msg, i (`${msg.id}_${msg.tmpId ?? \"\"}`)}\n\t{#if i === 0}\n\t\t<p>first</p>\n\t{/if}\n\t<p>{msg.content}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-9/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(logs, ['cleanup']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-9/main.svelte",
    "content": "<script>\n\timport { createSubscriber } from 'svelte/reactivity';\n\n\tclass MyStore {\n\t\t#subscribe;\n\t\t#data = $state([\n\t\t\t['a', [1, 2]],\n\t\t\t['b', [3, 4]]\n\t\t]);\n\t\t#id;\n\n\t\tconstructor(options) {\n\t\t\toptions?.someBoolean;\n\t\t\tthis.#id = options?.id;\n\t\t\tthis.#subscribe = createSubscriber(() => {\n\t\t\t\tdebugger\n\t\t\t\treturn () => {\n\t\t\t\t\tconsole.log('cleanup');\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\tget data() {\n\t\t\tthis.#subscribe();\n\t\t\treturn this.#data;\n\t\t}\n\t\tset data(v) {\n\t\t\tthis.#data = v;\n\t\t}\n\t}\n\n\tlet storeOptions = $state({\n\t\tsomeBoolean: false,\n\t\tid: 0\n\t});\n\n\tlet myStore = $derived(new MyStore(storeOptions));\n</script>\n\n<button\n\tonclick={() => {\n\t\tstoreOptions.someBoolean = !storeOptions.someBoolean;\n\t}}>+</button\n>\n\n{#each myStore.data as _}{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-raw/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// TODO: need to force DEV to be false for runtime somehow\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tassert.equal(logs.length, 3);\n\n\t\tlogs.length = 0;\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.equal(logs.length, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-updates-raw/main.svelte",
    "content": "<script>\n\tlet raw_items = $state.raw([\n\t\t{ id: 0, text: 'a' },\n\t\t{ id: 1, text: 'b' },\n\t\t{ id: 2, text: 'c' }\n\t]);\n</script>\n\n{#each raw_items as item (item.id)}\n\t{console.log(item.text)}\n\t{item.text}\n{/each}\n\n<button\n\tonclick={() => {\n\t\traw_items = [...raw_items, { id: 3, text: 'd' }];\n\t}}\n></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-was-empty/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/13550\n// https://github.com/sveltejs/svelte/pull/13553\nexport default test({\n\thtml: `<button>clicks: 0</button><button>undefined</button><button>null</button><button>empty</button><button>[1,2,3]</button><ul><li>count = <span>0</span></li></ul>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [increment, set_undefined, set_null, set_empty, set_list] =\n\t\t\ttarget.querySelectorAll('button');\n\n\t\tlet [span] = target.querySelectorAll('span');\n\n\t\t// initial value\n\t\tassert.exists(span);\n\t\tassert.equal(span.innerHTML, '0');\n\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '1');\n\n\t\t// change collection to undefined\n\t\tflushSync(() => set_undefined.click());\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '2');\n\n\t\t// change collection to null\n\t\tflushSync(() => set_null.click());\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '3');\n\n\t\t// change collection to empty\n\t\tflushSync(() => set_empty.click());\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '4');\n\n\t\t// change collection to undefined\n\t\tflushSync(() => set_undefined.click());\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '5');\n\n\t\t// change collection to [1,2,3]\n\t\tflushSync(() => set_list.click());\n\t\t[span] = target.querySelectorAll('span');\n\t\tassert.notExists(span);\n\t\tassert.equal(target.querySelectorAll('li').length, 3);\n\n\t\t// change collection to undefined\n\t\tflushSync(() => set_undefined.click());\n\t\t[span] = target.querySelectorAll('span');\n\t\tassert.exists(span);\n\t\tassert.equal(span.innerHTML, '5');\n\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '6');\n\n\t\t// change collection to null\n\t\tflushSync(() => set_null.click());\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '7');\n\n\t\t// change collection to empty\n\t\tflushSync(() => set_empty.click());\n\t\t// increment value\n\t\tflushSync(() => increment.click());\n\t\tassert.equal(span.innerHTML, '8');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>clicks: 8</button><button>undefined</button><button>null</button><button>empty</button><button>[1,2,3]</button><ul><li>count = <span>8</span></li></ul>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-was-empty/main.svelte",
    "content": "<script>\n\tlet list = $state()\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n<button onclick={increment}>clicks: {count}</button>\n<button onclick={()=>list=undefined}>undefined</button>\n<button onclick={()=>list=null}>null</button>\n<button onclick={()=>list=[]}>empty</button>\n<button onclick={()=>list=[1,2,3]}>[1,2,3]</button>\n\n<ul>\n{#each list as a}\n\t<li>item : {a}</li>\n{:else}\n\t<li>count = <span>{count}</span></li>\n{/each}\n</ul>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-whitespace/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<p>space between</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-whitespace/main.svelte",
    "content": "<svelte:options runes />\n\n<p>\n\t{#each ['space', ' ', 'between'] as word}\n\t\t{word}\n\t{/each}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-without-as/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>hi</div> <div>hi</div> <div>0</div> <div>1</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/each-without-as/main.svelte",
    "content": "{#each [10, 20]}\n\t<div>hi</div>\n{/each}\n\n{#each [10, 20], i}\n\t <div>{i}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, [0, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\t$effect(() => {\n\t\tconsole.log(x);\n\t});\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-active-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>toggle outer</button>\n\t\t<button>toggle inner</button>\n\t\t<button>reset</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [outer, inner, reset] = target.querySelectorAll('button');\n\n\t\tflushSync(() => outer?.click());\n\t\tflushSync(() => inner?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle outer</button>\n\t\t\t\t<button>toggle inner</button>\n\t\t\t\t<button>reset</button>\n\t\t\t\t<p>v is true</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => reset?.click());\n\t\tflushSync(() => inner?.click());\n\t\tflushSync(() => outer?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle outer</button>\n\t\t\t\t<button>toggle inner</button>\n\t\t\t\t<button>reset</button>\n\t\t\t\t<p>v is true</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-active-derived/main.svelte",
    "content": "<script>\n\tlet value = $state(false);\n\tconst fn = () => {\n\t\tif ($effect.tracking()) {\n\t\t\t$effect(() => {\n\t\t\t\tvalue = true;\n\t\t\t});\n\t\t}\n\t\treturn value;\n\t};\n\n\tlet outer = $state(false);\n\tlet inner = $state(false);\n\tlet v = $derived(inner ? fn() : false);\n</script>\n\n<button onclick={() => outer = !outer}>\n\ttoggle outer\n</button>\n\n<button onclick={() => inner = !inner}>\n\ttoggle inner\n</button>\n\n<button onclick={() => outer = inner = value = false}>\n\treset\n</button>\n\n{#if outer && v}\n\t<p>v is true</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-cleanup/_config.js",
    "content": "import { async_mode } from '../../../helpers';\nimport { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\t// With async mode (which is on by default for runtime-runes) this works as expected, without it\n\t\t// it works differently: https://github.com/sveltejs/svelte/pull/15564\n\t\tassert.deepEqual(\n\t\t\tlogs,\n\t\t\tasync_mode ? ['init 0', 'cleanup 0', null, 'init 2', 'cleanup 2', null, 'init 4'] : ['init 0']\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-cleanup/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t$effect(() => {\n\t\tlet double = $derived(count * 2)\n\n\t\tconsole.log('init ' + double);\n\n\t\treturn function() {\n\t\t\tconsole.log('cleanup ' + double);\n\t\t\t// @ts-expect-error\n\t\t\tconsole.log(this);\n\t\t};\n\t})\n</script>\n\n<button onclick={() => count++ }>Click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-dependencies/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><button>A</button><button>B</button></div><div>A</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><button>A</button><button>B</button></div><div>B\\n12</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><button>A</button><button>B</button></div><div>A</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><button>A</button><button>B</button></div><div>B\\n12</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><button>A</button><button>B</button></div><div>A</div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-dependencies/main.svelte",
    "content": "<script module>\n\tclass Things {\n\t\ttab = $state('A');\n\n\t\tdata = $state([{ no: 1 }, { no: 2 }]);\n\t\tlist = $derived(this.filter());\n\n\t\tfilter() {\n\t\t\tthis.tab;\n\t\t\treturn this.data;\n\t\t}\n\t}\n\n\tconst things = new Things();\n</script>\n\n<div>\n\t<button onclick={() => (things.tab = 'A')}>A</button>\n\t<button onclick={() => (things.tab = 'B')}>B</button>\n</div>\n\n<div>\n\t{#if things.tab === 'A'}\n\t\tA\n\t{:else}\n\t\tB\n\t\t{#each things.list as item}\n\t\t\t{item.no}\n\t\t{/each}\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-in-pending-boundary/Child.svelte",
    "content": "<script lang=\"ts\">\n\t$effect(() => {\n\t\tconsole.log('hello from child');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-in-pending-boundary/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['hello from child']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-in-pending-boundary/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet pending()}\n\t\t<p>Loading...</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-inside-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>clicks: 0</button>',\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>clicks: 1</button>');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>clicks: 2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-inside-derived/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tconst { value } = $derived.by(() => {\n\t\tlet value = $state(0);\n\n\t\t$effect(() => {\n\t\t\tvalue = count;\n\t\t});\n\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\t});\n</script>\n\n<button onclick={() => (count += 1)}>clicks: {value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-inside-derived-frozen/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [toggle, run] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><button>run</button><p>hello: 0</p>'\n\t\t);\n\n\t\tflushSync(() => run.click());\n\t\tassert.deepEqual(logs, []);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><button>run</button><p>hello: 1</p>'\n\t\t);\n\n\t\tflushSync(() => toggle.click());\n\t\tassert.deepEqual(logs, ['aborted']);\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button><button>run</button>');\n\n\t\tflushSync(() => run.click());\n\t\tflushSync(() => run.click());\n\t\tflushSync(() => run.click());\n\n\t\tflushSync(() => toggle.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><button>run</button><p>hello: 1</p>'\n\t\t);\n\n\t\tflushSync(() => run.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><button>run</button><p>hello: 2</p>'\n\t\t);\n\n\t\tassert.deepEqual(logs, ['aborted']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-inside-derived-frozen/main.svelte",
    "content": "<script>\n\timport { getAbortSignal } from 'svelte';\n\n\tconst callbacks = new Map();\n\n\t// similar semantics to setInterval, but simpler to test\n\tfunction add(fn) {\n\t\tconst id = crypto.randomUUID();\n\t\tcallbacks.set(id, fn);\n\t\treturn id;\n\t}\n\n\tfunction remove(id) {\n\t\tcallbacks.delete(id);\n\t}\n\n\tfunction run() {\n\t\tfor (const fn of callbacks.values()) {\n\t\t\tfn();\n\t\t}\n\t}\n\n\tclass Timer {\n\t\tconstructor(text) {\n\t\t\tthis.elapsed = $state(0);\n\t\t\tthis.text = $derived(text + ': ' + this.elapsed);\n\n\t\t\t$effect(() => {\n\t\t\t\tconst id = add(() => {\n\t\t\t\t\tthis.elapsed += 1;\n\t\t\t\t});\n\n\t\t\t\tgetAbortSignal().onabort = () => {\n\t\t\t\t\tconsole.log('aborted');\n\t\t\t\t};\n\n\t\t\t\treturn () => remove(id);\n\t\t\t});\n\t\t}\n\n\t}\n\n\tlet timer = $derived(new Timer('hello'));\n\n\tlet visible = $state(true);\n</script>\n\n<button onclick={() => visible = !visible}>toggle</button>\n<button onclick={run}>run</button>\n\n{#if visible}\n\t<p>{timer.text}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '5',\n\tssrHtml: '0'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t$effect(() => {\n\t\tif (count < 5) {\n\t\t\tcount++;\n\t\t}\n\t});\n</script>\n\n{count}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: 'Over\\n10\\n<br><button>increment</button><br><button>reset</button>',\n\tssrHtml: '0\\n<br><button>increment</button><br><button>reset</button>',\n\n\tasync test({ assert, target, component }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'Over\\n10\\n<br><button>increment</button><br><button>reset</button>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-2/main.svelte",
    "content": "<script>\n\timport {untrack} from \"svelte\"\n\nlet count = $state(0);\n\tlet reset = $state(false);\n\n\t$effect(() => {\n\t\tif (reset) {\n\t\t\tcount = 0;\n\t\t\treset = false;\n\t\t\treturn;\n\t\t}\n\t\tif (count <= 10) {\n\t\t\tuntrack(() => count++);\n\t\t} else {\n\t\t\tcount = \"Over 10\";\n\t\t}\n\t});\n</script>\n\n{count}\n<br>\n<button on:click={() => count++}>increment</button>\n<br>\n<button on:click={() => reset = true}>reset</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-3/Child.svelte",
    "content": "<script>\n\tlet { children } = $props();\n\n\tlet inited = $state(false);\n\n\t$effect(() => {\n\t\tinited = true;\n\t});\n</script>\n\n{#if inited}\n\t<span>{@render children()}</span>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [button] = target.querySelectorAll('button');\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tflushSync(() => button.click());\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-3/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = !show}>\n\ttoggle\n</button>\n\n{#if show}\n\t{#each { length: 1234 } as i}\n\t\t<Child>{i}</Child>\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-infinite/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, errors }) {\n\t\tconst [button] = document.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tflushSync(() => button.click());\n\t\t}, /effect_update_depth_exceeded/);\n\n\t\tassert.equal(errors.length, 1);\n\n\t\tassert.doesNotThrow(flushSync);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-loop-infinite/main.svelte",
    "content": "<script>\n\tlet condition = $state(false);\n\tlet count = $state(0);\n\n\t$effect(() => {\n\t\tif (condition) {\n\t\t\tcount++;\n\t\t}\n\t});\n</script>\n\n<button onclick={() => condition = !condition}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['A', 'B', 'A', 'B', 'A', 'B']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order/main.svelte",
    "content": "<script>\n\tlet s = $state(0);\n\tlet d = $derived(s)\n\n\t$effect(() => {\n\t\ts;\n\t\tconsole.log('A')\n\t})\n\n\t$effect(() => {\n\t\td;\n\t\tconsole.log('B')\n\t})\n</script>\n\n<h1>{s}</h1>\n\n<button on:click={() =>s++ }>Click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-2/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t{ a: 1 },\n\t\t\t{ b: 1 },\n\t\t\t{ c: 1 },\n\t\t\t{ a: 2 },\n\t\t\t{ b: 2 },\n\t\t\t{ c: 2 },\n\t\t\t{ a: 3 },\n\t\t\t{ b: 3 },\n\t\t\t{ c: 3 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-2/main.svelte",
    "content": "<script>\n\tlet a = $state(1);\n\tlet b = $state(1);\n\tlet c = $state(1);\n\n\t$effect(() => {\n\t\tconsole.log({ a });\n\t});\n\n\t$effect(() => {\n\t\tconsole.log({ b });\n\t});\n\n\t$effect(() => {\n\t\tconsole.log({ c });\n\t});\n\n\tfunction increment() {\n\t\tb += 1;\n\t\tc += 1;\n\t\ta += 1;\n\t}\n</script>\n\n<button onclick={increment}>\n\tincrement\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-3/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t'effect',\n\t\t\t0,\n\t\t\t'in-increment',\n\t\t\t1,\n\t\t\t'effect',\n\t\t\t1,\n\t\t\t'in-increment',\n\t\t\t2,\n\t\t\t'effect',\n\t\t\t2\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-3/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t\tconsole.log(\"in-increment\", count);\n\t}\n\n\t$effect(() => {\n\t\tconsole.log(\"effect\", count);\n\t});\n\n\t$inspect(count);\n</script>\n\n<button onclick={increment}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-4/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tassert.deepEqual(logs, [\n\t\t\t{ count: 0, doubled: 0 },\n\t\t\t{ count: 1, doubled: 2 },\n\t\t\t{ count: 2, doubled: 4 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-4/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n\n\t$effect.pre(() => {\n\t\tconst doubled = count * 2;\n\t\t$effect(() => {\n\t\t\tconsole.log({ count, doubled });\n\t\t});\n\t});\n</script>\n\n<button onclick={increment}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-5/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['effect 1', 'effect 2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-5/main.svelte",
    "content": "<script>\n\t$effect.pre(() => {\n\t\t$effect(() => {\n\t\t\tconsole.log('effect 1')\n\t\t})\n\t})\n\n\tfunction template() {\n\t\t$effect(() => {\n\t\t\tconsole.log('effect 2')\n\t\t});\n\t}\n</script>\n\n{template()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-6/A.svelte",
    "content": "<script>\n\timport B from './B.svelte';\n\n\tlet { boolean, closed, close } = $props();\n\n\t// this runs after the effect in B, because child effects run first\n\t$effect(() => {\n\t\tconsole.log({ boolean, closed });\n\t});\n</script>\n\n<B {closed} {close} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-6/B.svelte",
    "content": "<script>\n\tlet { closed, close } = $props();\n\n\t$effect(() => {\n\t\tif (closed) close();\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [open, close] = target.querySelectorAll('button');\n\n\t\tflushSync(() => open.click());\n\t\tflushSync(() => close.click());\n\n\t\tassert.deepEqual(logs, [{ boolean: true, closed: false }]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-6/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\n\tlet object = $state();\n\n\tfunction open() {\n\t\tobject = { boolean: true };\n\t}\n\n\tfunction close() {\n\t\tobject = undefined;\n\t}\n\n\tlet closed = $state(false);\n</script>\n\n<button onclick={open}>\n\topen\n</button>\n\n<button onclick={() => closed = true}>\n\tclose\n</button>\n\n<hr>\n\n{#if object}\n\t<A {closed} {close} boolean={object.boolean} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-7/A.svelte",
    "content": "<script>\n\timport B from './B.svelte';\n\n\tlet { boolean, closed, close } = $props();\n</script>\n\n<span>{boolean} {closed}</span>\n\n<B {closed} {close} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-7/B.svelte",
    "content": "<script>\n\tlet { closed, close } = $props();\n\n\t$effect.pre(() => {\n\t\tif (closed) close();\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-7/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// For this to work in non-async mode, we would need to abort\n\t// inside `#traverse_effect_tree`, which would be very\n\t// complicated and annoying. Since this hasn't been\n\t// a real issue (AFAICT), we ignore it\n\tskip_no_async: true,\n\n\tasync test({ target }) {\n\t\tconst [open, close] = target.querySelectorAll('button');\n\n\t\tflushSync(() => open.click());\n\n\t\t// if the effect queue isn't aborted after the state change, this will throw\n\t\tflushSync(() => close.click());\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-order-7/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\n\tlet object = $state();\n\n\tfunction open() {\n\t\tobject = { boolean: true };\n\t}\n\n\tfunction close() {\n\t\tobject = undefined;\n\t}\n\n\tlet closed = $state(false);\n</script>\n\n<button onclick={open}>\n\topen\n</button>\n\n<button onclick={() => closed = true}>\n\tclose\n</button>\n\n<hr>\n\n{#if object}\n\t<A {close} {closed} boolean={object.boolean} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 1]);\n\n\t\tflushSync(() => {\n\t\t\tb3.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 1, 'cleanup 1', 'cleanup 2']);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 1, 'cleanup 1', 'cleanup 2']);\n\t},\n\ttest_ssr({ assert, logs }) {\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\tconst cleanup = $effect.root(() => {\n\t\t$effect(() => {\n\t\t\tconsole.log(x);\n\t\t});\n\n\t\tconst nested_cleanup = $effect.root(() => {\n\t\t\treturn () => {\n\t\t\t\tconsole.log('cleanup 2');\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tconsole.log('cleanup 1');\n\t\t\tnested_cleanup();\n\t\t}\n\t});\n</script>\n\n<button onclick={() => x++}>{x}</button>\n<button onclick={() => y++}>{y}</button>\n<button onclick={cleanup}>cleanup</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0]);\n\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'cleanup']);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 'cleanup']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-2/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\n\tconst cleanup = $effect.root(() => {\n\t\tconsole.log(x);\n\t\treturn () => console.log('cleanup');\n\t});\n</script>\n\n<button onclick={() => x++}>{x}</button>\n<button onclick={cleanup}>cleanup</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>0</button><button>0</button><button>cleanup</button>',\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 1]);\n\n\t\tflushSync(() => {\n\t\t\tb3.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 1, 'cleanup 1', 'cleanup 2']);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [0, 1, 'cleanup 1', 'cleanup 2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-3/main.svelte",
    "content": "<script>\n\timport { with_root } from './root.svelte.js';\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\tconst cleanup = with_root(() => x)\n</script>\n\n<button onclick={() => x++}>{x}</button>\n<button onclick={() => y++}>{y}</button>\n<button onclick={cleanup}>cleanup</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-3/root.svelte.js",
    "content": "export function with_root(get_x) {\n\tconst cleanup = $effect.root(() => {\n\t\t$effect(() => {\n\t\t\tconsole.log(get_x());\n\t\t});\n\n\t\tconst nested_cleanup = $effect.root(() => {\n\t\t\treturn () => {\n\t\t\t\tconsole.log('cleanup 2');\n\t\t\t};\n\t\t});\n\n\t\treturn () => {\n\t\t\tconsole.log('cleanup 1');\n\t\t\tnested_cleanup();\n\t\t};\n\t});\n\n\treturn cleanup;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>cleanup</button>',\n\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['effect1', 'effect2']);\n\t},\n\ttest_ssr({ assert, logs }) {\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-4/main.svelte",
    "content": "<script>\n\t$effect.root(() => {\n\t\tconsole.log('effect1');\n\t});\n\tconst cleanup = $effect.root(() => {\n\t\tconsole.log('effect2');\n\t});\n</script>\n\n<button onclick={cleanup}>cleanup</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => b1.click());\n\t\tassert.deepEqual(logs, [0, 1]);\n\n\t\tflushSync(() => b1.click());\n\t\tassert.deepEqual(logs, [0, 1, 2]);\n\n\t\tflushSync(() => b2.click());\n\t\tassert.deepEqual(logs, [0, 1, 2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-root-5/main.svelte",
    "content": "<script>\n\tlet obj = $state({ count: 0 });\n\n\t$effect.root(() => {\n\t\tlet teardown;\n\n\t\t$effect.pre(() => {\n\t\t\tif (obj) {\n\t\t\t\tteardown ??= $effect.root(() => {\n\t\t\t\t\t$effect.pre(() => {\n\t\t\t\t\t\tconsole.log(obj.count);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tteardown?.();\n\t\t\t\tteardown = null;\n\t\t\t}\n\t\t});\n\t});\n</script>\n\n<button onclick={() => ((obj ??= { count: 0 }).count += 1)}>+1</button>\n<button onclick={() => (obj = null)}>null</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-self-scheduling/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, component }) {\n\t\tconst [b1, b2, b3, b4, b5, b6, b7, b8, b9, b10] = target.querySelectorAll('button');\n\n\t\tconst p = /** @type {HTMLParagraphElement} */ (target.querySelector('p'));\n\n\t\tassert.htmlEqual(p.innerHTML, `power: 10`);\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.htmlEqual(p.innerHTML, `power: 10`);\n\n\t\tflushSync(() => {\n\t\t\tb8.click();\n\t\t});\n\n\t\tassert.htmlEqual(p.innerHTML, `power: 10`);\n\n\t\tflushSync(() => {\n\t\t\tb9.click();\n\t\t});\n\n\t\tassert.htmlEqual(p.innerHTML, `power: 10`);\n\n\t\tflushSync(() => {\n\t\t\tb10.click();\n\t\t});\n\n\t\tassert.htmlEqual(p.innerHTML, `power: 10`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-self-scheduling/main.svelte",
    "content": "<script>\n\tlet power = $state(0);\n\n\t$effect(() => {\n\t\tif (power !== 10) {\n\t\t\tpower += 1;\n\t\t}\n\t});\n</script>\n\n<p>power: {power}</p>\n\n{#each [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as n}\n\t<button on:click={() => power = n}>{n}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-teardown-derived/Component.svelte",
    "content": "<script>\n\tlet { message, count } = $props();\n\n\t$effect(() => () => {\n\t\tconsole.log(count, message);\n\t});\n</script>\n\n<p>{count}</p>\n\n<!-- we need these so that the props are made into deriveds -->\n<button disabled onclick={() => {\n\tcount += 1;\n\tmessage += '!';\n}}>update</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-teardown-derived/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [increment, toggle] = target.querySelectorAll('button');\n\n\t\tflushSync(() => toggle.click());\n\t\tassert.deepEqual(logs, [0, 'hello']);\n\n\t\tflushSync(() => toggle.click());\n\t\tflushSync(() => increment.click());\n\t\tflushSync(() => increment.click());\n\n\t\tassert.deepEqual(logs, [0, 'hello', 1, 'hello']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-teardown-derived/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\tlet message = $state('hello');\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count++}>{count}</button>\n<button onclick={() => message = message === 'hello' ? 'goodbye' : 'hello'}>{message}</button>\n\n{#if count < 2 && message === 'hello'}\n\t<Component {count} {message} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-teardown-stale-value/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<button>toggle (false)</button>`,\n\n\tasync test({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['up', { foo: false, bar: false }]);\n\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, [\n\t\t\t'up',\n\t\t\t{ foo: false, bar: false },\n\t\t\t'down',\n\t\t\t{ foo: false, bar: false },\n\t\t\t'up',\n\t\t\t{ foo: true, bar: true }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-teardown-stale-value/main.svelte",
    "content": "<script>\n\tlet foo = $state(false)\n\tlet bar = $derived(foo)\n\n\t$effect(() => {\n\t\tconsole.log('up', { foo, bar });\n\n\t\treturn () =>{\n\t\t\tconsole.log('down', { foo, bar });\n\t\t};\n\t});\n</script>\n\n<button onclick={() => foo = !foo}>toggle ({foo})</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tssrHtml: `\n\t\t<p>false</p>\n\t\t<p>false</p>\n\t\t<p>false</p>\n\t\t<p>false</p>\n\t`,\n\n\thtml: `\n\t\t<p>false</p>\n\t\t<p>true</p>\n\t\t<p>true</p>\n\t\t<p>false</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\n\tconst foo = $effect.tracking();\n\tlet bar = $state(false);\n\t$effect.pre(() => {\n\t\tbar = $effect.tracking();\n\t});\n</script>\n\n<p>{foo}</p>\n<p>{bar}</p>\n<p>{(bar, $effect.tracking())}</p>\n<p>{untrack(() => (bar, $effect.tracking()))}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking-binding-set/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [false]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking-binding-set/main.svelte",
    "content": "<script>\n\tlet bar = $state('');\n\n\tconst foo = {\n\t\tset bar(v) {\n\n\t\t\tconsole.log($effect.tracking());\n\n\t\t\tbar = v;\n\t\t},\n\t\tget bar() {\n\t\t\treturn bar;\n\t\t}\n\t}\n\n\tlet input;\n\n\t$effect(() => {\n\t\tinput.value = 'everybody';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t})\n</script>\n\n<input type=\"text\" bind:value={foo.bar} bind:this={input}>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking-transition/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst b1 = target.querySelector('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, [false]);\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, [false, false]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking-transition/main.svelte",
    "content": "<script>\n\tlet visible = $state(0);\n\n\tfunction customTransition() {\n\t\tconsole.log($effect.tracking());\n\t}\n</script>\n\n<button onclick={() => visible = !visible}>Toggle</button>\n\n{#if visible}\n\t<div transition:customTransition>clicks</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking-unowned/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst b1 = target.querySelector('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<o>Store: new</o><p>Text: new message</p><button>Change Store</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-tracking-unowned/main.svelte",
    "content": "<script>\n\timport { writable, fromStore, toStore } from \"svelte/store\";\n\n\tconst store = writable(\"previous\");\n\tlet text = $derived(fromStore(store).current + \" message\");\n\n\ttext; // read derived in a non-tracking context\n</script>\n\n<o>Store: {$store}</o>\n<p>Text: {text}</p>\n<button onclick={() => { store.set(\"new\"); }}>Change Store</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-untrack-teardown/_config.js",
    "content": "import { test } from '../../test';\n\n// nothing to test here — if the teardown function is not untracked, effect will loop\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effect-untrack-teardown/main.svelte",
    "content": "<script>\n\tlet prop = $state();\n\tlet key = $state({});\n\n\tfunction action() {\n\t\tprop = {};\n\t\t$effect.pre(() => {\n\t\t\treturn () => {\n\t\t\t\tprop;\n\t\t\t}\n\t\t});\n\t}\n\n\t$effect(() => key = {});\n</script>\n\n{#key key}\n\t<div use:action>test</div>\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effects-order/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['first0', 'second0', 'first1', 'second1']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/effects-order/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\t$effect.pre(() => {\n\t\tconsole.log('first'+x);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log('second'+x);\n\t});\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/element-is-attribute/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['works']);\n\n\t\tb2.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['works', 'works']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/element-is-attribute/main.svelte",
    "content": "<script lang=\"ts\" module>\n\tif (!customElements.get('x-button')) {\n\t\tclass XButton extends HTMLButtonElement {\n\t\t\tconnectedCallback() {\n\t\t\t\tthis.addEventListener('click', () => console.log('works'));\n\t\t\t}\n\t\t}\n\n\t\tcustomElements.define('x-button', XButton, { extends: 'button' });\n\t}\n</script>\n\n<script lang=\"ts\">\n\tlet { ...props } = $props();\n</script>\n\n<button is=\"x-button\">click me</button>\n<button {...props} is=\"x-button\">click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/empty-class-attribute-template/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<div></div><div></div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/empty-class-attribute-template/main.svelte",
    "content": "<div class=\"\"></div>\n<div class=\"\"></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['error caught']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t{throw_error()}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-10/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn2?.click();\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught!!!']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-10/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n\n\tlet count = $state(0);\n\tlet onerror = $state((e) => console.log('error caught'));\n</script>\n\n<svelte:boundary {onerror}>\n\t{count > 0 ? throw_error() : null}\n</svelte:boundary>\n\n<button onclick={() => count++}>+</button>\n<button onclick={() => onerror = () => console.log('error caught!!!')}>change error message</button>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-11/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn2?.click();\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught!!!']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-11/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n\n\tlet count = $state(0);\n\tlet props = $state({ onerror: (e) => console.log('error caught') });\n</script>\n\n<svelte:boundary onerror={props.onerror}>\n\t{count > 0 ? throw_error() : null}\n</svelte:boundary>\n\n<button onclick={() => count++}>+</button>\n<button onclick={() => props = { onerror: () => console.log('error caught!!!') }}>change error message</button>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-12/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tassert.throws(() => {\n\t\t\tflushSync(() => btn?.click());\n\t\t}, /kaboom/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-12/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tconst d = $derived.by(() => {\n\t\tif (count === 1) {\n\t\t\tthrow new Error('kaboom')\n\t\t}\n\t\treturn count\n\t})\n</script>\n\n<button onclick={() => count++}>change</button>\n\n<svelte:boundary>\n\t{d}\n\n\t{#snippet failed()}\n\t\t<p>Error occurred</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-13/Child.svelte",
    "content": "<script>\n\tconst { count } = $props();\n\n\tconst d = $derived.by(() => {\n\t\tif (count === 1) {\n\t\t\tthrow new Error('kaboom')\n\t\t}\n\t\treturn count\n\t});\n\n\t$effect(() => {\n\t\td;\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-13/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>change</button><p>Error occurred</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-13/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => count++}>change</button>\n\n<svelte:boundary>\n\t<Child {count} />\n\n\t{#snippet failed()}\n\t\t<p>Error occurred</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-14/Child.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('throw_error');\n\t}\n</script>\n\n{throw_error()}\n\n<div>Foo</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-14/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['error caught']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-14/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t<Child />\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-15/Child.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('throw_error');\n\t}\n</script>\n\n{throw_error()}\n\n<div>Foo</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-15/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['error caught 1', 'error caught 2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-15/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught 2')}>\n\t<svelte:boundary onerror={(e) => console.log('error caught 1')}>\n\t\t<Child />\n\n\t\t{#snippet failed()}\n\t\t\t{throw_error()}\n\t\t{/snippet}\n\t</svelte:boundary>\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-16/Child.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t$effect.pre(() => {\n\t\tif (count > 1) {\n\t\t\tthrow new Error('too high');\n\t\t}\n\t});\n</script>\n\n{count}\n\n<button onclick={() => count++}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-16/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>An error occurred!</div>\\n0\\n<button>+</button>`);\n\n\t\tbtn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught', 'error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>An error occurred!</div>\\n0\\n<button>+</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-16/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t<Child />\n\n\t{#snippet failed(err, reset)}\n\t\t<div>An error occurred!</div>\n\t\t<Child />\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-17/Child.svelte",
    "content": "<script>\n\tconst { initial = 0 } = $props();\n\n\tlet count = $state(initial);\n\n\t$effect.pre(() => {\n\t\tif (count > 1) {\n\t\t\tthrow 'too high';\n\t\t}\n\t});\n</script>\n\n{count}\n\n<button onclick={() => count++}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-17/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught 1', 'error caught 2']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>content before</div><div>content after</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-17/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<div>content before</div>\n\n<svelte:boundary onerror={(e) => console.log('error caught 2')}>\n\t<svelte:boundary onerror={(e) => console.log('error caught 1')}>\n\t\t<Child />\n\n\t\t{#snippet failed(err, reset)}\n\t\t\t<div>An error occurred! {err}</div>\n\t\t\t<Child initial={2} />\n\t\t{/snippet}\n\t</svelte:boundary>\n</svelte:boundary>\n\n<div>content after</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-18/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO unskip once tagged values are in and we can fix this properly\n\n\ttest({ assert, target }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tassert.throws(() => {\n\t\t\tflushSync(() => {\n\t\t\t\tbtn?.click();\n\t\t\t\tbtn?.click();\n\t\t\t});\n\t\t}, /test\\n\\n\\tin {expression}\\n/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-18/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction maybe_throw() {\n\t\tif (count > 1) {\n\t\t\tthrow new Error('test');\n\t\t}\n\n\t\treturn count;\n\t}\n</script>\n\n<svelte:boundary onerror={(e) => { throw(e) }}>\n\t<div>Count: {count}</div>\n\t<button onclick={() => count++}>Increment</button>\n\t{count} / {maybe_throw()}\n</svelte:boundary>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-19/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught 1', 'error caught 2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-19/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tlet test = $derived.by(() => {\n\t\tif (count > 1) {\n\t\t\tthrow new Error('test');\n\t\t}\n\t});\n</script>\n\n<svelte:boundary onerror={(e) => {console.log('error caught 1')}}>\n\t\t<div>Count: {count}</div>\n\t\t<button onclick={() => count++}>Increment</button>\n\t\t{count} / {test}\n</svelte:boundary>\n\n\n<svelte:boundary onerror={(e) => {console.log('error caught 2')}}>\n\t\t<div>Count: {count}</div>\n\t\t<button onclick={() => count++}>Increment</button>\n\t\t{count} / {test}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-2/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n\n\tlet count = $state(0);\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t{count > 0 ? throw_error() : null}\n</svelte:boundary>\n\n<button onclick={() => count++}>+</button>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-20/Child.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet clicked = $state(false);\n\n\tfunction increment() {\n\t\tclicked = true;\n\t\tcount++;\n\t}\n\n\t$effect(() => {\n\t\tif (clicked) {\n\t\t\tcount++;\n\t\t}\n\t});\n</script>\n\n<button onclick={increment}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-20/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, errors }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.equal(errors.length, 1);\n\n\t\tassert.htmlEqual(target.innerHTML, `<div class=\"error\">An error occurred!</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-20/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\"\n</script>\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet failed()}\n\t\t<div class=\"error\">An error occurred!</div>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-21/Child.svelte",
    "content": "<script>\n\tthrow new Error();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-21/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button></button><div>0</div>',\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tlet btn = target.querySelector('button');\n\t\tlet div = target.querySelector('div');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.equal(div?.innerHTML, `1`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-21/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\"\n\n\tlet count = $state(0);\n</script>\n\n<button onclick={()=>count++}></button>\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet failed()}\n\t\t<div>{count}</div>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-22/Child.svelte",
    "content": "<script>\n\tthrow new Error();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-22/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<p>error occurred</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-22/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\"\n</script>\n\n<svelte:boundary>\n\t<p>This should be removed</p>\n\n\t{#if true}\n\t\t<Child />\n\t{/if}\n\n\t{#snippet failed()}\n\t\t<p>error occurred</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-23/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tawait tick();\n\n\t\tassert.deepEqual(logs, ['attachment']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-23/main.svelte",
    "content": "<script>\n\tlet fail = $state(false);\n\n\tfunction error() {\n\t\tthrow new Error('oops');\n\t}\n\n\tfunction attachment() {\n\t\tconsole.log('attachment');\n\t}\n</script>\n\n<svelte:boundary>\n\t{fail ? error() : 'all good'}\n\t<button onclick={() => fail = true}>fail</button>\n\t\n\t{#snippet failed()}\n\t\t<div {@attach attachment}>oops!</div>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-24/Child.svelte",
    "content": "<script>\n\tthrow new Error('child error');\n</script>\n\n<p>Child content</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-24/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tflushSync();\n\n\t\t// When exception is set by onerror, the {#if !exception} block should hide\n\t\t// and only the {#if exception} block should be visible\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught error: child error</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-24/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet exception = $state();\n\tconst onerror = (e) => {\n\t\texception = e;\n\t};\n</script>\n\n{#if !exception}\n\t<p>condition is {String(!exception)}</p>\n\t<svelte:boundary {onerror}>\n\t\t<Child />\n\t</svelte:boundary>\n{/if}\n\n{#if exception}\n\t<p>caught error: {exception.message}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-25/Child.svelte",
    "content": "<script>\n\t// it's important for the test that this isn't an `Error`\n\tthrow 'child error'\n</script>\n\n<p>\n\tboom\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-25/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tflushSync();\n\n\t\t// When exception is set by onerror, the {#if !exception} block should hide\n\t\t// and only the {#if exception} block should be visible\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught error: child error</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-25/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet exception = $state();\n\tconst onerror = (e) => {\n\t\texception = e;\n\t};\n</script>\n\n{#if !exception}\n\t<p>condition is {String(!exception)}</p>\n\t<svelte:boundary {onerror}>\n\t\t<Child />\n\t</svelte:boundary>\n{/if}\n\n{#if exception}\n\t<p>caught error: {exception}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-26/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<p>caught: error</p>',\n\ttransformError: (error) => {\n\t\tif (error !== 'catch me') throw 'wrong error object';\n\t\treturn 'error';\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught: error</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-26/main.svelte",
    "content": "<svelte:boundary>\n\t{#snippet failed(error)}\n\t\t<p>caught: {error}</p>\n\t{/snippet}\n\n\t{(() => {throw 'catch me'})()}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-27/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<p>caught: error (hello)</p>',\n\ttransformError: () => {\n\t\treturn 'error';\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, '<p>caught: error (hello)</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-27/child.svelte",
    "content": "<script>\n\timport { get } from \"./main.svelte\";\n\n    let { error } = $props();\n    const context = get()\n</script>\n\n{#if error}\n    <p>caught: {error} ({context})</p>\n{:else}\n\t{(() => {throw 'catch me'})()}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-27/main.svelte",
    "content": "<script module>\n\timport { createContext } from \"svelte\";\n\timport Child from \"./child.svelte\";\n\n\tconst [ get, set ] = createContext();\n\texport {get};\n</script>\n\n<script>\n\tset('hello');\n</script>\n\n<svelte:boundary>\n\t{#snippet failed(error)}\n\t\t<Child {error} />\n\t{/snippet}\n\n\t<Child />\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>oh no!</div><button>+</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-3/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('oh no!')\n\t}\n\n\tlet count = $state(0);\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t{count > 0 ? throw_error() : null}\n\n\t{#snippet failed(e)}\n\t\t<div>{e.message}</div>\n\t{/snippet}\n</svelte:boundary>\n\n<button onclick={() => count++}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>Fallback!</div><button>+</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-4/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n\n\tlet count = $state(0);\n</script>\n\n{#snippet failed()}\n\t<div>Fallback!</div>\n{/snippet}\n\n<svelte:boundary {failed} onerror={(e) => console.log('error caught')}>\n\t{count > 0 ? throw_error() : null}\n</svelte:boundary>\n\n<button onclick={() => count++}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-5/Child.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t$effect.pre(() => {\n\t\tif (count > 1) {\n\t\t\tthrow new Error('too high');\n\t\t}\n\t});\n</script>\n\n{count}\n\n<button onclick={() => count++}>+</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>too high</div><button>Retry</button>`);\n\n\t\tconst [btn2] = target.querySelectorAll('button');\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `0\\n<button>+</button>`);\n\n\t\tbtn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['error caught', 'error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>too high</div><button>Retry</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-5/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t<svelte:boundary onerror={(e) => { throw e }}>\n\t\t<svelte:boundary>\n\t\t\t<Child />\n\t\t</svelte:boundary>\n\t</svelte:boundary>\n\n\t{#snippet failed(e, retry)}\n\t\t<div>too high</div>\n\t\t<button onclick={retry}>Retry</button>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>+</button><div>There is an error!</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-6/main.svelte",
    "content": "<script>\n\tfunction throw_error() {\n\t\tthrow new Error('test')\n\t}\n\n\tlet count = $state(0);\n\tlet error = $state();\n</script>\n\n<svelte:boundary onerror={(e) => error = e}>\n\t{count > 0 ? throw_error() : null}\n</svelte:boundary>\n\n<button onclick={() => count++}>+</button>\n\n{#if error}\n\t<div>There is an error!</div>\n{/if}\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-7/Child.svelte",
    "content": "<script>\n\t$effect.pre(() => {\n\t\tthrow new Error('oh noes');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-7/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>Error!</div><button>Retry</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-7/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t<Child />\n\n\t{#snippet failed(e, retry)}\n\t\t<div>Error!</div>\n\t\t<button onclick={retry}>Retry</button>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-8/Child.svelte",
    "content": "<script>\n\t$effect.pre(() => {\n\t\tthrow new Error('oh noes');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-8/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>Error!</div><button>Retry</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-8/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t<!-- boundary should rethrow error as there's no control flow -->\n\t<svelte:boundary>\n\t\t<Child />\n\t</svelte:boundary>\n\n\t{#snippet failed(e, retry)}\n\t\t<div>Error!</div>\n\t\t<button onclick={retry}>Retry</button>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-9/Child.svelte",
    "content": "<script>\n\t$effect.pre(() => {\n\t\tthrow new Error('oh noes');\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-9/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['error caught']);\n\t\tassert.htmlEqual(target.innerHTML, `<div>Error!</div><button>Retry</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-9/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary onerror={(e) => console.log('error caught')}>\n\t<!-- boundary should rethrow error as there's no control flow -->\n\t<svelte:boundary>\n\t\t<!-- rethrow the error in the handler -->\n\t\t<svelte:boundary onerror={e => { throw e }}>\n\t\t\t<Child />\n\t\t</svelte:boundary>\n\t</svelte:boundary>\n\n\t{#snippet failed(e, retry)}\n\t\t<div>Error!</div>\n\t\t<button onclick={retry}>Retry</button>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-reset-onerror/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\n\t\tassert.throws(flushSync, 'svelte_boundary_reset_onerror');\n\n\t\t// boundary content empty; only button remains\n\t\tassert.htmlEqual(target.innerHTML, `<button>trigger throw</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-reset-onerror/main.svelte",
    "content": "<script>\n\tlet must_throw = $state(false);\n\n\tfunction throw_error() {\n\t\tthrow new Error(\"error on template render\");\n\t}\n</script>\n\n<svelte:boundary onerror={(_, reset) => reset()}>\n\t{must_throw ? throw_error() : 'normal content'}\n\n\t{#snippet failed()}\n\t\t<div>err</div>\n\t{/snippet}\n</svelte:boundary>\n\n<button onclick={() => must_throw = true}>trigger throw</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-reset-premature/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\tnormal content\n\t\t<button>toggle</button>\n\t`,\n\n\tasync test({ assert, target, warnings }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div>err</div><button>toggle</button>`);\n\t\tassert.deepEqual(warnings, []);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, `normal content <button>toggle</button>`);\n\t\tassert.deepEqual(warnings, []);\n\n\t\tflushSync(() => btn.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div>err</div><button>toggle</button>`);\n\n\t\tassert.deepEqual(warnings, [\n\t\t\t'A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-reset-premature/main.svelte",
    "content": "<script>\n\tlet must_throw = $state(false);\n\tlet reset = $state(null);\n\n\tfunction throw_error() {\n\t\tthrow new Error(\"error on template render\");\n\t}\n</script>\n\n<svelte:boundary onerror={console.error}>\n\t<svelte:boundary onerror={(_, fn) => (reset = fn)}>\n\t\t{must_throw ? throw_error() : 'normal content'}\n\n\t\t{#snippet failed()}\n\t\t\t<div>err</div>\n\t\t{/snippet}\n\t</svelte:boundary>\n</svelte:boundary>\n\n<button\n\tonclick={() => {\n\t\tmust_throw = !must_throw;\n\t\tif (reset) reset();\n\t}}>\n\ttoggle\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-reset-with-error/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, warnings }) {\n\t\tconst [toggle] = target.querySelectorAll('button');\n\n\t\tflushSync(() => toggle.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>toggle</button><p>yikes!</p><button>reset</button>`\n\t\t);\n\n\t\tconst [, reset] = target.querySelectorAll('button');\n\t\tflushSync(() => reset.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>toggle</button><p>yikes!</p><button>reset</button>`\n\t\t);\n\n\t\tflushSync(() => toggle.click());\n\n\t\tconst [, reset2] = target.querySelectorAll('button');\n\t\tflushSync(() => reset2.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button><p>hello!</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-boundary-reset-with-error/main.svelte",
    "content": "<script>\n\tlet must_throw = $state(false);\n\n\tfunction throw_error() {\n\t\tthrow new Error('yikes!');\n\t}\n</script>\n\n<button onclick={() => must_throw = !must_throw}>toggle</button>\n\n<svelte:boundary>\n\t<p>{must_throw ? throw_error() : 'hello!'}</p>\n\n\t{#snippet failed(error, reset)}\n\t\t<p>{error.message}</p>\n\t\t<button onclick={reset}>reset</button>\n\t{/snippet}\n</svelte:boundary>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-recovery/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, compileOptions }) {\n\t\tconst [toggle, increment] = target.querySelectorAll('button');\n\n\t\tflushSync(() => increment.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>count: 1</button>\n\t\t\t\t<p>show: false</p>\n\t\t\t`\n\t\t);\n\n\t\tassert.throws(() => {\n\t\t\tflushSync(() => toggle.click());\n\t\t}, /NonExistent is not defined/);\n\n\t\tflushSync(() => increment.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>count: 2</button>\n\t\t\t\t<p>show: ${compileOptions.experimental?.async ? 'false' : 'true'}</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/error-recovery/main.svelte",
    "content": "<script>\n\tlet show = $state(false);\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => show = !show}>toggle</button>\n<button onclick={() => count += 1}>count: {count}</button>\n\n<p>show: {show}</p>\n\n{#if show}\n\t<NonExistent />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-arguments/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-arguments/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tfunction increment() {\n\t\t\tcount += arguments.length;\n\t}\n</script>\n\n<button on:click={increment}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-arguments-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-arguments-2/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tfunction increment(...args) {\n\t\t\tcount += args.length;\n\t}\n</script>\n\n<button on:click={increment}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button><button>1</button>');\n\n\t\tflushSync(() => {\n\t\t\tb2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button><button>2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tconst onclick = () => count++;\n</script>\n\n<button onclick={() => count++}>{count}</button>\n<button {onclick}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-after-binding/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [i1, i2] = target.querySelectorAll('input');\n\n\t\ti1?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'true true <input type=\"checkbox\"> false false <input type=\"checkbox\">'\n\t\t);\n\n\t\ti2?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'true true <input type=\"checkbox\"> true true <input type=\"checkbox\">'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-after-binding/main.svelte",
    "content": "<script>\n\tlet checked_simple = $state(false);\n\tlet checked_simple_copy = $state(false);\n\t\n\tlet checked_rest = $state(false);\n\tlet checked_rest_copy = $state(false);\n\tlet rest = $state(() => ({}));\n</script>\n\n{checked_simple} {checked_simple_copy}\n<input type=\"checkbox\" onchange={() => {checked_simple_copy = checked_simple}} bind:checked={checked_simple} />\n\n{checked_rest} {checked_rest_copy}\n<!-- {...rest()} in order to force an isolated render effect -->\n<input type=\"checkbox\" onchange={() => {checked_rest_copy = checked_rest}} {...rest()} bind:checked={checked_rest} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst input = target.querySelector('input');\n\n\t\tinput?.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, 'true <input class=\"hello\">');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/main.svelte",
    "content": "<script lang=\"ts\">\n\tconst props = {};\n\tlet changed = $state(false);\n</script>\n\n{changed}\n<input {...props} oninput={() => (changed = true)} class=\"hello\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst div = target.querySelector('div');\n\n\t\tdiv?.dispatchEvent(new Event('b'));\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<div>b</div>');\n\n\t\tdiv?.dispatchEvent(new Event('a'));\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<div>a</div>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread-2/main.svelte",
    "content": "<script lang=\"ts\">\n\tconst props = {};\n\tlet changed = $state('');\n</script>\n\n<div {...props} ona={() => (changed = 'a')} onb={() => (changed = 'b')}>\n\t{changed}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>0</button><button>change handler</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>1</button><button>1</button><button>change handler</button>'\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>2</button><button>2</button><button>change handler</button>'\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>2</button><button>2</button><button>change handler</button>'\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>1</button><button>1</button><button>change handler</button>'\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>0</button><button>0</button><button>change handler</button>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte'\n\n\tlet count = $state(0);\n\tlet onclick = $state(() => count++);\n</script>\n\n<Sub {onclick} increment={onclick} {count} />\n\n<button onclick={() => {\n\tonclick = () => count--;\n}}>change handler</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/sub.svelte",
    "content": "<script>\n\tconst { onclick, increment, count } = $props();\n</script>\n\n<button {onclick}>{count}</button>\n<button onclick={increment}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-capture/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t\t<p>captured: false</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\t<button>click me</button>\n\t\t\t\t\t<p>captured: true</p>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-capture/main.svelte",
    "content": "<script>\n\tlet captured = $state(false);\n\n\t/** @param {MouseEvent} event */\n\tconst onclickcapture = (event) => {\n\t\tcaptured = event.eventPhase === event.CAPTURING_PHASE;\n\t};\n</script>\n\n<div {onclickcapture}>\n\t<button>click me</button>\n\t<p>captured: {captured}</p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, [\n\t\t\t'clicked button',\n\t\t\t'clicked div 2',\n\t\t\t'clicked div 1',\n\t\t\t'clicked container'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation/main.svelte",
    "content": "<script>\n\tconst action = () => {}\n</script>\n<div use:action onclick={() => console.log('clicked container')} onkeydown={() => {}}>\n\t<div use:action onclick={(e) => { console.log('clicked div 1') }}>\n\t\t<div onclick={(e) => { console.log('clicked div 2') }}>\n\t\t\t<button onclick={(e) => { console.log('clicked button') }}>\n\t\t\t\tButton\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['clicked button']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-2/main.svelte",
    "content": "<div onclick={(e) => { console.log('clicked div') }}>\n\t<button onclick={(e) => { console.log('clicked button'); e.stopPropagation() }}>\n\t\tButton\n\t</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['clicked button']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-3/main.svelte",
    "content": "<script>\n\tconst action = () => {}\n</script>\n<div use:action onclick={() => console.log('clicked container')} onkeydown={() => {}}>\n\t<div use:action onclick={(e) => { console.log('clicked div 1') }}>\n\t\t<div onclick={(e) => { console.log('clicked div 2') }}>\n\t\t\t<button onclick={(e) => { console.log('clicked button'); e.stopPropagation() }}>\n\t\t\t\tButton\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-4/Component.svelte",
    "content": "<script>\n\tconst { children, ...props } = $props();\n</script>\n\n<div {...props} on:click>\n\t{@render children()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, [\n\t\t\t'button main',\n\t\t\t'div main 1',\n\t\t\t'div main 2',\n\t\t\t'document main',\n\t\t\t'document sub',\n\t\t\t'window main',\n\t\t\t'window sub'\n\t\t]);\n\n\t\tlogs.length = 0;\n\t\tbtn2?.click();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, [\n\t\t\t'button sub',\n\t\t\t'document main',\n\t\t\t'document sub',\n\t\t\t'window main',\n\t\t\t'window sub'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-4/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\timport Sub from \"./sub.svelte\";\n</script>\n\n<svelte:window onclick=\"{() => console.log('window main')}\" />\n<svelte:document onclick=\"{() => console.log('document main')}\" />\n\n<Component on:click={() => console.log('div main 1')} on:click={() => console.log('div main 2')}>\n\t<button onclick={() => console.log('button main')}>main</button>\n</Component>\n\n<Sub />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-4/sub.svelte",
    "content": "<svelte:window onclick={() => console.log('window sub')} />\n<svelte:document onclick={() => console.log('document sub')} />\n\n<button onclick={() => console.log('button sub')}>sub</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-5/Button.svelte",
    "content": "<script>\n\tconst { children, ...props } = $props();\n</script>\n\n<button {...props} on:click>\n\t{@render children()}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-5/Component.svelte",
    "content": "<script>\n\tconst { children, ...props } = $props();\n</script>\n\n<div {...props} on:click>\n\t{@render children()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-5/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, [\n\t\t\t'button on:click',\n\t\t\t'button onclick',\n\t\t\t'inner div on:click',\n\t\t\t'outer div onclick'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-5/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\timport Button from \"./Button.svelte\";\n</script>\n\n<Component onclick={() => console.log('outer div onclick')}>\n\t<Component on:click={() => console.log('inner div on:click')}>\n\t\t<Button onclick={() => console.log('button onclick')} on:click={() => console.log('button on:click')}>main</Button>\n\t</Component>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-6/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['method']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-6/main.svelte",
    "content": "<script>\n\tlet method = $state('method');\n\tfunction submitPay() {\n\t\tconsole.log(method);\n\t}\n\tlet methods = [{method:1}];\n</script>\n{#each methods as {method}}\n\t<button onclick={submitPay}>{method}</button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-7/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['div onclickcapture', 'button onclick']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-7/main.svelte",
    "content": "<div onclickcapture={() => console.log('div onclickcapture')}>\n\t<button onclick={() => console.log('button onclick')}>main</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-8/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['#app', true, 'document', true]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-delegation-8/main.svelte",
    "content": "<script>\n\t$effect(() => {\n\t\tconst doc_listener = (e) => {\n\t\t\tconsole.log('document', e.currentTarget === document);\n\t\t}\n\n\t\tdocument.addEventListener('click', doc_listener);\n\t\tdocument.getElementById('app')?.addEventListener('click', (e) => {\n\t\t\tconsole.log('#app', e.currentTarget === document.getElementById('app'));\n\t\t});\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('click', doc_listener);\n\t\t};\n\t});\n\n\tfunction onclick() {}\n</script>\n\n<div id=\"app\">\n\t<button {onclick}>click me</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-import/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs, target, component }) {\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tassert.deepEqual(logs, ['a']);\n\n\t\tb2?.click();\n\t\tb1?.click();\n\n\t\tb3?.click();\n\t\tb1?.click();\n\n\t\tassert.deepEqual(logs, ['a', 'b', 'a']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-import/event.svelte.js",
    "content": "export const log_a = () => {\n\tconsole.log('a');\n};\n\nexport const log_b = () => {\n\tconsole.log('b');\n};\n\nlet handle = $state(log_a);\n\nexport const handler = {\n\tget value() {\n\t\treturn handle;\n\t},\n\tset value(v) {\n\t\thandle = v;\n\t}\n};\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-import/main.svelte",
    "content": "<script>\n\timport { handler, log_a, log_b } from './event.svelte.js';\n</script>\n\n<button onclick={handler.value}>click</button>\n<button onclick={() => (handler.value = log_b)}>change</button>\n<button onclick={() => (handler.value = log_a)}>change back</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-not-hoistable/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>x0</button><button>y0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button><button>x0</button><button>y0</button>');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.dispatchEvent(new MouseEvent('mouseenter'));\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button><button>x0</button><button>y0</button>');\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button><button>x1</button><button>y0</button>');\n\n\t\tflushSync(() => {\n\t\t\tbtn3.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button><button>x1</button><button>y1</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-not-hoistable/main.svelte",
    "content": "<script module>\n\tfunction declared_in_module_scope() {\n\t\treturn 'x';\n\t}\n\tlet a = declared_in_module_scope();\n\n\tlet b = 'x';\n\ttry {\n\t\tb = doesnt_exist();\n\t} catch (e) {\n\t\tb = 'y';\n\t}\n</script>\n\n<script>\n\tlet count1 = $state(0);\n\tlet count2 = $state(0);\n\tlet count3 = $state(0);\n\n\tfunction increment() {\n\t\tcount1 += 1;\n\t}\n\tfunction declared_in_module_scope() {\n\t\tcount2 += 1;\n\t}\n\tfunction doesnt_exist() {\n\t\tcount3 += 1;\n\t}\n</script>\n\n<!-- Checks that event handlers are not hoisted when one of them is not delegateable -->\n<button onclick={increment} onmouseenter={increment}>{count1}</button>\n\n<!-- Checks that event handler is not hoisted if the same name is used in the module context -->\n<button onclick={declared_in_module_scope}>{a}{count2}</button>\n<button onclick={doesnt_exist}>{b}{count3}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-not-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn3.click());\n\t\tassert.htmlEqual(/** @type {string} */ (btn3.textContent), 'clicks: 1');\n\n\t\tflushSync(() => btn2.click());\n\t\tflushSync(() => btn3.click());\n\t\tassert.htmlEqual(/** @type {string} */ (btn3.textContent), 'clicks: 0');\n\n\t\tflushSync(() => btn1.click());\n\t\tflushSync(() => btn3.click());\n\t\tassert.htmlEqual(/** @type {string} */ (btn3.textContent), 'clicks: 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-not-reactive/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tconst handlers = {\n\t\tcurrent: increment\n\t};\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n\n\tfunction decrement() {\n\t\tcount -= 1;\n\t}\n</script>\n\n<button onclick={() => (handlers.current = increment)}>increment</button>\n<button onclick={() => (handlers.current = decrement)}>decrement</button>\n<button onclick={handlers.current}>clicks: {count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-rest-prop/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['worked']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-rest-prop/child.svelte",
    "content": "<script>\n\tlet { label, ...rest } = $props();\n</script>\n\n<button onclick={() => rest?.onclick()}>{label}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-rest-prop/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n</script>\n\n<Child label=\"click me\" onclick={() => console.log('worked')} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>change handler</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>1</button><button>change handler</button>');\n\n\t\tflushSync(() => {\n\t\t\tb2?.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>0</button><button>change handler</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet obj = $state({ onclick: () => count++});\n</script>\n\n<button {...obj}>{count}</button>\n<button onclick={() => obj = { onclick: () => count-- }}>change handler</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-capture/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<button>click me</button>\n\t\t\t<p>captured: false</p>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>\n\t\t\t\t\t<button>click me</button>\n\t\t\t\t\t<p>captured: true</p>\n\t\t\t\t</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-capture/main.svelte",
    "content": "<script>\n\tlet captured = $state(false);\n\n\tconst properties = {\n\t\t/** @param {MouseEvent} event */\n\t\tonclickcapture: (event) => {\n\t\t\tcaptured = event.eventPhase === event.CAPTURING_PHASE;\n\t\t}\n\t};\n</script>\n\n<div {...properties}>\n\t<button>click me</button>\n\t<p>captured: {captured}</p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-collision/Button.svelte",
    "content": "<script>\n\tconst { children, ...props } = $props();\n</script>\n\n<button {...props} on:click>\n\t{@render children()}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-collision/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>click me</button>\n\t<button>click me</button>\n\t<button>click me</button>\n\t<button>click me</button>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [b1, b2, b3, b4] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click spread</button>\n\t\t\t<button>click spread</button>\n\t\t\t<button>click spread</button>\n\t\t\t<button>click spread</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb2?.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click onclick</button>\n\t\t\t<button>click onclick</button>\n\t\t\t<button>click onclick</button>\n\t\t\t<button>click onclick</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb3?.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click spread</button>\n\t\t\t<button>click spread</button>\n\t\t\t<button>click spread!</button>\n\t\t\t<button>click spread!</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tb4?.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>click onclick</button>\n\t\t\t<button>click onclick</button>\n\t\t\t<button>click onclick?</button>\n\t\t\t<button>click onclick?</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-collision/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\tlet text = $state('click me');\n\tlet text2 = $state('');\n\tlet spread = { onclick: () => text = 'click spread' };\n</script>\n\n<Button onclick={() => text = 'click onclick'} {...spread}>\n\t{text}\n</Button>\n\n<Button {...spread} onclick={() => text = 'click onclick'}>\n\t{text}\n</Button>\n\n<Button onclick={() => text = 'click onclick'} {...spread} on:click={() => text2 = '!'}>\n\t{text}{text2}\n</Button>\n\n<Button on:click={() => text2 = '?'} {...spread} onclick={() => text = 'click onclick'}>\n\t{text}{text2}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [change, increment] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>change handlers</button><button>1 / 1</button>');\n\n\t\tchange.click();\n\t\tflushSync();\n\t\tincrement.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>change handlers</button><button>3 / 3</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-spread-update/main.svelte",
    "content": "<script>\n\tlet delegated = $state(0);\n\tlet non_delegated = $state(0);\n\tlet attrs = $state({\n\t\tonclick: () => {\n\t\t\tdelegated += 1;\n\t\t},\n\t\tonclickcapture: () => {\n\t\t\tnon_delegated += 1;\n\t\t}\n\t});\n</script>\n\n<button\n\tonclick={() =>\n\t\t(attrs = {\n\t\t\tonclick: () => {\n\t\t\t\tdelegated += 2;\n\t\t\t},\n\t\t\tonclickcapture: () => {\n\t\t\t\tnon_delegated += 2;\n\t\t\t}\n\t\t})}\n>\n\tchange handlers\n</button>\n<button {...attrs}>{delegated} / {non_delegated}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-template/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => b1?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>0</button>`);\n\n\t\tflushSync(() => b2?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-template/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(0);\n</script>\n\n{undefined}<button onclick={() => a += 1}>{a}</button>{undefined}<button onclick={() => b += 1}>{b}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-window/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<p>0</p>`,\n\n\ttest({ assert, target }) {\n\t\ttarget.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<p>1</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-attribute-window/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n</script>\n\n<svelte:window onclick={() => count++} />\n<p>{count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-context/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tb1?.click();\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>4</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-context/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet button = $state();\n\n\tfunction do_thing() {\n\t\tbutton?.click();\n\t\treturn false;\n\t}\n</script>\n\n<button bind:this={button} onclick={() => count++ }>{count}</button>\n\n{#if do_thing()}{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-exported/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>Count: 1</button><button>Increment</button>');\n\n\t\tb2?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>Count: 2</button><button>Increment</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-exported/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte'\n\n\tlet button;\n</script>\n\n<Sub bind:this={button} />\n<button on:click={() => button.increment()}>Increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-exported/sub.svelte",
    "content": "<script>\n\tlet count = $state(0)\n\n\texport function increment() {\n\t\tcount += 1\n\t}\n</script>\n\n<button on:click={increment}>Count: {count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<p><p>invalid</p></p>',\n\n\tmode: ['hydrate'],\n\n\trecover: true,\n\n\ttest({ assert, target, logs }) {\n\t\ttarget.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['body', 'document', 'window']);\n\t},\n\n\twarnings: [\n\t\t'Hydration failed because the initial UI does not match what was rendered on the server'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-global-hydration-error-cleanup/main.svelte",
    "content": "<svelte:window onclick={() => console.log('window')} />\n<svelte:document onclick={() => console.log('document')} />\n<svelte:body onclick={() => console.log('body')} />\n\n<p>{@html '<p>invalid</p>'}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Inner.svelte",
    "content": "<script>\n\tthrow new Error('boom');\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/Outer.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n</script>\n\n<svelte:window onclick={() => console.log('window')} />\n<svelte:document onclick={() => console.log('document')} />\n<svelte:body onclick={() => console.log('body')} />\n\n<Inner />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target, logs }) {\n\t\ttarget.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-global-mount-error-cleanup/main.svelte",
    "content": "<script>\n\timport { mount, onMount } from 'svelte';\n\timport Outer from './Outer.svelte';\n\n\tlet el;\n\n\tonMount(() => {\n\t\ttry {\n\t\t\tmount(Outer, { target: el });\n\t\t} catch {}\n\t});\n</script>\n\n<div bind:this={el}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/main.svelte",
    "content": "<button\n\ttype=\"button\"\n\tonclick={async () => {\n\t\tawait Promise.resolve();\n\t}}\n>\n\tButton\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-component-invalid-warning/Button.svelte",
    "content": "<script>\n\tlet { children, onclick } = $props();\n</script>\n\n<button {onclick}>\n\t{@render children()}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-component-invalid-warning/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings, errors }) {\n\t\tconst handler = (/** @type {any}} */ e) => {\n\t\t\te.stopImmediatePropagation();\n\t\t};\n\n\t\twindow.addEventListener('error', handler, true);\n\n\t\ttarget.querySelector('button')?.click();\n\n\t\tassert.include(errors[0], 'state_unsafe_mutation');\n\n\t\twindow.removeEventListener('error', handler, true);\n\n\t\tassert.deepEqual(warnings, [\n\t\t\t'`click` handler at Button.svelte:5:9 should be a function. Did you mean to add a leading `() =>`?'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-component-invalid-warning/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\n\tlet count = $state(0);\n</script>\n\n<Button onclick={count++}>\n\tclicks: {count}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-invalid-values/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings, logs, errors }) {\n\t\tconst handler = (/** @type {any} */ e) => {\n\t\t\te.stopImmediatePropagation();\n\t\t};\n\n\t\twindow.addEventListener('error', handler, true);\n\n\t\tconst [b1, b2, b3] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tassert.deepEqual(logs, []);\n\t\tassert.deepEqual(errors, []);\n\n\t\tb2.click();\n\t\tassert.deepEqual(logs, ['clicked']);\n\t\tassert.deepEqual(errors, []);\n\n\t\tlogs.length = 0;\n\n\t\tb3.click();\n\t\tassert.deepEqual(logs, []);\n\t\tassert.deepEqual(warnings, [\n\t\t\t'`click` handler at main.svelte:10:17 should be a function. Did you mean to add a leading `() =>`?'\n\t\t]);\n\t\tassert.include(errors[0], 'is not a function');\n\n\t\twindow.removeEventListener('error', handler, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-invalid-values/main.svelte",
    "content": "<script>\n\tlet ignore = null;\n\tlet handler = () => console.log(\"clicked\");\n\tlet bad = \"invalid\";\n\t\n</script>\n\n<button onclick={ignore}>click</button>\n<button onclick={handler}>click</button>\n<button onclick={bad}>click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-invalid-warning/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings, errors }) {\n\t\tconst handler = (/** @type {any} */ e) => {\n\t\t\te.stopImmediatePropagation();\n\t\t};\n\n\t\twindow.addEventListener('error', handler, true);\n\n\t\ttarget.querySelector('button')?.click();\n\n\t\tassert.include(errors[0], 'state_unsafe_mutation');\n\n\t\twindow.removeEventListener('error', handler, true);\n\n\t\tassert.deepEqual(warnings, [\n\t\t\t'`click` handler at main.svelte:9:17 should be a function. Did you mean to remove the trailing `()`?'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-handler-invalid-warning/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n<button onclick={increment()}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-import-no-param-hoisting/Component.svelte",
    "content": "<script>\n\timport { num } from './state.svelte.js';\n\tlet { foo } = $props();\n\n\tfunction onclick() {\n\t\tfoo();\n\t\tconsole.log(num);\n\t}\n</script>\n\n<button {onclick}>click</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-import-no-param-hoisting/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, logs, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, [1, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-import-no-param-hoisting/main.svelte",
    "content": "<script>\n\timport { num, increment } from './state.svelte.js';\n\timport Component from './Component.svelte';\n\n\tfunction foo() {\n\t\tincrement();\n\t\tconsole.log(num);\n\t}\n</script>\n\n<Component {foo} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-import-no-param-hoisting/state.svelte.js",
    "content": "export let num = 0;\n\nexport function increment() {\n\tnum += 1;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-listener-moved-outside-container/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Tests that event delegation still works when the element with the event listener is moved outside the container\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn1 = target.parentElement?.querySelector('button');\n\t\tconst btn2 = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.parentElement?.innerHTML ?? '',\n\t\t\t'<main><div><button>clicks: 1</button></div></main><button>clicks: 1</button>'\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.parentElement?.innerHTML ?? '',\n\t\t\t'<main><div><button>clicks: 2</button></div></main><button>clicks: 2</button>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-listener-moved-outside-container/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet el;\n\t$effect(() => {\n\t\tdocument.getElementsByTagName('body')[0].appendChild(el);\n\t})\n</script>\n\n<div>\n\t<button bind:this={el} onclick={() => count++}>clicks: {count}</button>\n\t<button onclick={() => count++}>clicks: {count}</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-listener-spread/Button.svelte",
    "content": "<script>\n\tlet { ...stuff } = $props();\n</script>\n\n<button {...stuff} on:click>\n\t<slot></slot>\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-listener-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>clicks: 1</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-listener-spread/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n<Button on:click={increment}>\n\tclicks: {count}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-media-element-cleanup/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { expect, vi } from 'vitest';\n\nconst handler = vi.fn();\n\nexport default test({\n\tprops: {\n\t\thandler\n\t},\n\tasync test({ target }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst video = target.querySelector('video');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tvideo?.dispatchEvent(new Event('someevent'));\n\t\texpect(handler).not.toHaveBeenCalled();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-media-element-cleanup/main.svelte",
    "content": "<script>\n\tconst { handler } = $props();\n\tlet show = $state(true);\n</script>\n\n<button onclick={() => show = false}>show/hide</button>\n{#if show}\n\t<video onsomeevent={handler}></video>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tb1?.click();\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<section><button>clicks: 3</button></section>');\n\t\tassert.deepEqual(logs, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on/main.svelte",
    "content": "<script>\n\timport { on } from 'svelte/events';\n\n\tlet count = $state(0);\n\n\tfunction increment(e) {\n\t\te.stopPropagation();\n\t\tcount += 1;\n\t}\n\n\tlet sectionEl\n\t$effect(() => {\n\t\treturn on(sectionEl, 'click', () => {\n\t\t\tconsole.log('logged from addEventListener');\n\t\t});\n\t});\n</script>\n\n<section bind:this={sectionEl} onclick={() => console.log('logged from onclick')}>\n\t<button onclick={increment}>\n\t\tclicks: {count}\n\t</button>\n</section>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tconst keydown = new window.KeyboardEvent('keydown', { bubbles: true });\n\n\t\tb1?.dispatchEvent(keydown);\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['one', 'two', 'three', 'parent keydown', 'wrapper']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on-2/main.svelte",
    "content": "<script>\n\timport { on } from 'svelte/events';\n\timport Wrapper from './wrapper.svelte';\n\n\tfunction handleParentKeyDown() {\n\t\tconsole.log('parent keydown');\n\t}\n\tfunction keydownOne(node) {\n\t\ton(node, 'keydown', (e) => console.log('one'));\n\t}\n\tfunction keydownTwo(node) {\n\t\ton(node, 'keydown', (e) => console.log('two'));\n\t}\n\tfunction keydownThree(node) {\n\t\ton(node, 'keydown', (e) => console.log('three'));\n\t}\n</script>\n\n<Wrapper>\n\t<div onkeydown={handleParentKeyDown}>\n\t\t<button use:keydownOne use:keydownTwo use:keydownThree>button</button>\n\t</div>\n</Wrapper>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on-2/wrapper.svelte",
    "content": "<div on:keydown={() => console.log('wrapper')}>\n\t<slot />\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest() {\n\t\t// Compiler shouldn't error\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-on-3/main.svelte",
    "content": "<script>\n\tfunction f() {}\n</script>\n\n<input onchange={f}>{f}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-prop-current-target/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [s1] = target.querySelectorAll('span');\n\n\t\ts1?.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(logs, [false]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-prop-current-target/main.svelte",
    "content": "<script>\n\tfunction onclick(e) {\n\t\t// should log false when we click the span\n\t\tconsole.log(e.currentTarget === e.target)\n\t}\n</script>\n\n\n<button {onclick}>\n\t<span>\n\t\tClick me\n\t</span>\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-prop-reference/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { item: { name: 'Dominic' } };\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(logs, ['Dominic']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-prop-reference/main.svelte",
    "content": "<script>\n\tlet { item } = $props();\n\n\tfunction onclick() {\n\t\tconsole.log(item?.name);\n\t}\n</script>\n\n<button {onclick}>\n\t{item?.name}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-propagation-with-error/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<div><button>0 0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst button1 = target.querySelector('button');\n\n\t\tflushSync(() => button1?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div><button>1 1</button></div>`);\n\t},\n\n\truntime_error: 'nope'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-propagation-with-error/main.svelte",
    "content": "<script>\n\tlet y = $state(0);\n\tlet n = $state(0);\n\n\tfunction yep() {\n\t\ty += 1;\n\t}\n\n\tfunction nope() {\n\t\tn += 1;\n\t\tthrow new Error('nope');\n\t}\n</script>\n\n<div onclick={yep}>\n\t<button onclick={nope}>\n\t\t{y} {n}\n\t</button>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-spread-rerun/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, logs, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.value = 'foo';\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['hi']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-spread-rerun/main.svelte",
    "content": "<script>\n\tlet rest = $state(undefined);\n</script>\n\n<input {...rest} oninput={() => console.log('hi')}>\n<!-- after input and inside template so that attribute spread reruns immediately -->\n{!rest ? (rest = {}) : false}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-spread-timing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['onfocus']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-spread-timing/main.svelte",
    "content": "<script>\n\tconst focus = (input) => {\n\t\tinput.focus();\n\t};\n</script>\n\n<input {...({})} onfocus={() => console.log(\"onfocus\")} use:focus />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-store-no-hoisting/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>set new store</button><button>incr</button><pre>0</pre>'\n\t\t);\n\n\t\tb2.click();\n\t\tb2.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>set new store</button><button>incr</button><pre>3</pre>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-store-no-hoisting/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet store = $state();\n\n\tfunction setStore() {\n\t\tstore = writable(0, () => {\n\t\t\treturn () => {};\n\t\t});\n\t}\n</script>\n\n<button onclick={setStore}>set new store</button>\n<button onclick={() => $store++}>incr</button>\n\n<pre>{$store}</pre>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-used-in-component-and-element/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, target }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tb1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>Count: 1</button><button>Increment</button>');\n\n\t\tb2?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>Count: 2</button><button>Increment</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-used-in-component-and-element/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte';\n\n\tlet count = $state(0)\n\n\tfunction increment() {\n\t\tcount += 1\n\t}\n</script>\n\n<button on:click={increment}>Count: {count}</button>\n<Sub onClick={increment}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-used-in-component-and-element/sub.svelte",
    "content": "<script>\n\tlet { onClick } = $props();\n</script>\n\n<button on:click={onClick}>Increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-without-params-clash/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['test']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/event-without-params-clash/main.svelte",
    "content": "<svelte:options runes />\n<script>\n\tlet _ = \"test\"\n</script>\n\n<button onclick={() => { console.log(_)} }></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-1/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, component }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 0</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\t\tconst [incrementButton, decrementButton, doubleButton] = target.querySelectorAll('button');\n\n\t\tincrementButton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 1</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\n\t\tdoubleButton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 2</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\n\t\tdecrementButton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 1</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-1/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte'\n\tlet sub\n</script>\n\n<Sub bind:this={sub} />\n<button on:click={() => sub.increment()}>Increment</button>\n<button on:click={() => sub.decrement()}>Decrement</button>\n<button on:click={() => sub.double()}>Double</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-1/sub.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction _increment() {\n\t\tcount += 1;\n\t}\n\n\tconst decrement = () => {\n\t\tcount -= 1;\n\t}\n\n\tconst double = function() {\n\t\tcount = count * 2;\n\t}\n\n\texport { _increment as increment, decrement, double }\n</script>\n\n<p>\n\tclicks: {count}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, component }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 0</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\t\tconst [incrementButton, decrementButton, doubleButton] = target.querySelectorAll('button');\n\n\t\tincrementButton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 1</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\n\t\tdoubleButton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 2</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\n\t\tdecrementButton?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<p>clicks: 1</p><button>Increment</button><button>Decrement</button><button>Double</button>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-2/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte'\n\tlet sub\n</script>\n\n<Sub bind:this={sub} />\n<button on:click={() => sub.increment()}>Increment</button>\n<button on:click={() => sub.decrement()}>Decrement</button>\n<button on:click={() => sub.double()}>Double</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-2/sub.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\texport function increment() {\n\t\tcount += 1;\n\t}\n\n\texport const decrement = () => {\n\t\tcount -= 1;\n\t}\n\n\texport const double = function() {\n\t\tcount = count * 2;\n\t}\n</script>\n\n<p>\n\tclicks: {count}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `0 0 <button>0 / 0</button>`);\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, '1 2 <button>1 / 2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-3/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte';\n\tlet sub = $state();\n</script>\n\n<Sub bind:this={sub} />\n<button on:click={() => sub.increment()}>{sub?.count} / {sub?.doubled}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-3/sub.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n\n\texport { count, doubled };\n\n\texport function increment() {\n\t\tcount += 1;\n\t}\n</script>\n\n{count}\n{doubled}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `0 0 <button>0 / 0</button>`);\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, '1 2 <button>1 / 2</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-4/main.svelte",
    "content": "<script>\n\timport Sub from './sub.svelte';\n\tlet sub = $state();\n</script>\n\n<Sub bind:this={sub} />\n<button on:click={() => sub.count++}>{sub?.count} / {sub?.doubled}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/exports-4/sub.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n\n\texport { count, doubled };\n</script>\n\n{count}\n{doubled}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fine-grained-prop-reactive-statement/_config.js",
    "content": "import { test } from '../../test';\nimport { tick } from 'svelte';\n\nexport default test({\n\thtml: `<button>reassign</button><button>mutate</button><p>0 / 0</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>reassign</button><button>mutate</button><p>1 / 1</p>`\n\t\t);\n\n\t\tbtn2.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>reassign</button><button>mutate</button><p>2 / 2</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fine-grained-prop-reactive-statement/main.svelte",
    "content": "<script>\n\timport Old from './old.svelte';\n\n\tlet prop = $state({ count: 0 });\n</script>\n\n<button onclick={() => prop = {...prop, count: prop.count + 1 }}>reassign</button>\n<button onclick={() => prop.count++}>mutate</button>\n<Old {prop}></Old>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fine-grained-prop-reactive-statement/old.svelte",
    "content": "<svelte:options runes={false} />\n<script>\n\texport let prop;\n    let count_1 = prop.count;\n\t$: {\n        count_1 = prop.count;\n    }\n    $: count_2 = prop.count;\n</script>\n\n<p>{count_1} / {count_2}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/flush-sync-inside-attachment/Child.svelte",
    "content": "<script>\n    let { text } = $props();\n\n    $effect(() => console.log(text));\n</script>\n\n{text}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/flush-sync-inside-attachment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tassert.htmlEqual(target.innerHTML, `<button>show</button> <div>hello</div>`);\n\t\tassert.deepEqual(logs, ['hello']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/flush-sync-inside-attachment/main.svelte",
    "content": "<script>\n\timport { flushSync, mount } from 'svelte'\n\timport Child from './Child.svelte';\n\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = true}>show</button>\n\n<div {@attach (target) => {\n\tmount(Child, { target, props: { text: 'hello' }  });\n\tflushSync();\n}}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/flush-sync-no-scheduled/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst main = target.querySelector('main');\n\t\tok(main);\n\t\tassert.htmlEqual(main.innerHTML, `<div>true</div>`);\n\t\t// we don't want to use flush sync (or tick that use it inside) since we are testing that calling `flushSync` once\n\t\t// when there are no scheduled effects does not cause reactivity to break\n\t\tbtn?.click();\n\t\tawait Promise.resolve();\n\t\tassert.htmlEqual(main.innerHTML, `<div>false</div> <div>false</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/flush-sync-no-scheduled/main.svelte",
    "content": "<script>\n\timport { flushSync } from 'svelte'\n\t\n\tlet flag = $state(true)\n\tlet test = $state(true);\t\n</script>\n\n<button onclick={()=>{\n\tflushSync(() => {\n\t\ttest = !test\n\t})\n\t\t\n\tflag = !flag;\n}}>switch</button>\n\n<main>\n\t<div>{flag}</div>\n\t\n\t{#if !flag}\n\t\t<div>{test} </div>\n\t{/if}\n</main>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-class-instance/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork] = target.querySelectorAll('button');\n\n\t\tfork.click();\n\t\tawait tick();\n\n\t\tconst [, increment] = target.querySelectorAll('button');\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.equal(p?.textContent, '0');\n\n\t\tincrement.click();\n\t\tawait tick();\n\n\t\tassert.equal(p?.textContent, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-class-instance/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tclass Counter {\n\t\tcount = $state(0);\n\t}\n\n\tlet condition = $state(false);\n\tlet counter = $derived(new Counter());\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tcondition = true;\n\t}).commit();\n}}>fork</button>\n\n{#if condition}\n\t<button onclick={() => {\n\t\tcounter.count++;\n\t}}>click</button>\n\t<p>{counter.count}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-dependency-rollback/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork_btn, _toggle_btn, inc_count_1_btn] = target.querySelectorAll('button');\n\t\tconst p = /** @type {HTMLElement} */ (target.querySelector('p'));\n\n\t\tassert.equal(p.textContent, '0');\n\n\t\t// Trigger derived to re-evaluate during fork and switch to tracking count_2\n\t\tflushSync(() => {\n\t\t\tfork_btn.click();\n\t\t});\n\n\t\tassert.equal(p.textContent, '0');\n\n\t\tflushSync(() => {\n\t\t\tinc_count_1_btn.click();\n\t\t});\n\n\t\tassert.equal(p.textContent, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-dependency-rollback/main.svelte",
    "content": "<script>\n\timport { fork } from 'svelte';\n\n\tlet show_count_1 = $state(true);\n\tlet count_1 = $state(0);\n\tlet count_2 = $state(0);\n\n\tconst count = $derived(show_count_1 ? count_1 : count_2);\n</script>\n\n<!-- This if block causes the derived to execute during the fork, switching its dependency\n     away from count_1 and over to count_2. After discard, count_1 should still be tracked. -->\n{#if count}\n{/if}\n\n<button onclick={() => {\n\tconst f = fork(() => {\n\t\tshow_count_1 = !show_count_1;\n\t});\n\tf.discard();\n}}>fork toggle</button>\n\n<button onclick={() => show_count_1 = !show_count_1}>toggle</button>\n<button onclick={() => count_1++}>increment count 1</button>\n<button onclick={() => count_2++}>increment count 2</button>\n\n<p>{count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-uncached-1/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork, toggle, increment] = target.querySelectorAll('button');\n\n\t\t// derived is first evaluated in block effect, then discarded\n\t\tflushSync(() => fork.click());\n\n\t\t// should not throw \"Cannot convert a Symbol value to a string\" due to cached UNINITIALIZED from first fork\n\t\tflushSync(() => fork.click());\n\n\t\t// should not reflect the temporary change to `clicks` inside the fork\n\t\tflushSync(() => toggle.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>fork</button>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>clicks: 0</button>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => increment.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>fork</button>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>clicks: 1</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-uncached-1/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\n\tlet clicks = $state(0);\n\tlet show = $state(false);\n\tconst derived = $derived(clicks * 2);\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tclicks += 1;\n\t\tshow = true;\n\t}).discard();\n}}>fork</button>\n\n<button onclick={() => show = !show}>toggle</button>\n\n<button onclick={() => clicks++}>clicks: {clicks}</button>\n\n{#if show}\n\t<p>{derived}</p>\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-uncached-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork, toggle, increment] = target.querySelectorAll('button');\n\n\t\t// derived is first evaluated in block effect, then discarded\n\t\tflushSync(() => fork.click());\n\n\t\t// should not reflect the temporary change to `clicks` inside the fork\n\t\t// or throw \"Cannot convert a Symbol value to a string\" due to cached UNINITIALIZED\n\t\tflushSync(() => toggle.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>fork</button>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>clicks: 0</button>\n\t\t\t\t<p>0</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => increment.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>fork</button>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>clicks: 1</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-uncached-2/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\n\tlet clicks = $state(0);\n\tlet show = $state(false);\n\tconst derived = $derived(clicks * 2);\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tclicks += 1;\n\t\tshow = true;\n\t}).discard();\n}}>fork</button>\n\n<button onclick={() => show = !show}>toggle</button>\n\n<button onclick={() => clicks++}>clicks: {clicks}</button>\n\n{#if show}\n\t<p>{derived}</p>\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-uncached-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork, toggle, increment] = target.querySelectorAll('button');\n\n\t\t// initialize derived by showing it\n\t\tflushSync(() => toggle.click());\n\t\tflushSync(() => toggle.click());\n\n\t\t// increment clicks\n\t\tflushSync(() => increment.click());\n\n\t\t// update derived, but without writing to `derived.v`\n\t\tflushSync(() => fork.click());\n\n\t\t// show derived\n\t\tflushSync(() => toggle.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>fork</button>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>clicks: 1</button>\n\t\t\t\t<p>2</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-uncached-3/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\n\tlet clicks = $state(0);\n\tlet show = $state(false);\n\tconst derived = $derived(clicks * 2);\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tclicks += 1;\n\t\tshow = true;\n\t}).discard();\n}}>fork</button>\n\n<button onclick={() => show = !show}>toggle</button>\n\n<button onclick={() => clicks++}>clicks: {clicks}</button>\n\n{#if show}\n\t<p>{derived}</p>\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-value/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target }) {\n\t\tconst [fork, update] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tfork.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tupdate.click();\n\t\t});\n\n\t\tconst p = target.querySelector('p');\n\n\t\tassert.equal(p?.textContent, 'one');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-value/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\n\tlet state = $state(0);\n\tlet count = $derived(state);\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tstate++;\n\t});\n}}>fork</button>\n\n<button onclick={() => {\n\tstate++;\n}}>update</button>\n\n{#if count === 1}\n\t<p>one</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-value-immediate/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, target, logs }) {\n\t\tconst fork = target.querySelector('button');\n\n\t\tfork?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, [1, 2]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/fork-derived-value-immediate/main.svelte",
    "content": "<script>\n\timport { fork } from \"svelte\";\n\n\tlet state = $state(0);\n\tlet count = $derived(state);\n</script>\n\n<button onclick={() => {\n\tfork(() => {\n\t\tstate++;\n\t\tconsole.log(count);\n\t\tstate++;\n\t\tconsole.log(count);\n\t});\n}}>fork</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-default-value/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @param {NodeListOf<any>} inputs\n\t\t * @param {string} field\n\t\t * @param {any | any[]} value\n\t\t */\n\t\tfunction check_inputs(inputs, field, value) {\n\t\t\tfor (let i = 0; i < inputs.length; i++) {\n\t\t\t\tassert.equal(inputs[i][field], Array.isArray(value) ? value[i] : value, `field ${i}`);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {any} input\n\t\t * @param {string} field\n\t\t * @param {any} value\n\t\t */\n\t\tfunction set_input(input, field, value) {\n\t\t\tinput[field] = value;\n\t\t\tinput.dispatchEvent(\n\t\t\t\tnew Event(typeof value === 'boolean' ? 'change' : 'input', { bubbles: true })\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * @param {HTMLOptionElement} option\n\t\t */\n\t\tfunction select_option(option) {\n\t\t\toption.selected = true;\n\t\t\toption.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t}\n\n\t\tconst after_reset = [];\n\n\t\tconst reset = /** @type {HTMLInputElement} */ (target.querySelector('input[type=reset]'));\n\t\tconst [test1, test2, test3, test4, test5, test6, test7, test14] =\n\t\t\ttarget.querySelectorAll('div');\n\t\tconst [test8, test9, test10, test11] = target.querySelectorAll('select');\n\t\tconst [\n\t\t\ttest1_span,\n\t\t\ttest2_span,\n\t\t\ttest3_span,\n\t\t\ttest4_span,\n\t\t\ttest5_span,\n\t\t\ttest6_span,\n\t\t\ttest7_span,\n\t\t\ttest8_span,\n\t\t\ttest9_span,\n\t\t\ttest10_span,\n\t\t\ttest11_span\n\t\t] = target.querySelectorAll('span');\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test1.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\tassert.htmlEqual(test1_span.innerHTML, 'x x x x');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test1_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test1_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test2.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\tassert.htmlEqual(test2_span.innerHTML, 'x x x x');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test2_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test2_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test3.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'y');\n\t\t\tassert.htmlEqual(test3_span.innerHTML, 'y y y y');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test3_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test3_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test4.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test4_span.innerHTML, 'true true');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'checked', false);\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test4_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test4_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test5.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test5_span.innerHTML, 'true true');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'checked', false);\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test5_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test5_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test6.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test6_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test6_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test7.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test7_span.innerHTML, 'true');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\t\tassert.htmlEqual(test7_span.innerHTML, 'false');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test8.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\tassert.htmlEqual(test8_span.innerHTML, 'b');\n\n\t\t\tselect_option(options[2]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test8_span.innerHTML, 'c');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test8_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test9.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\tassert.htmlEqual(test9_span.innerHTML, 'b');\n\n\t\t\tselect_option(options[2]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test9_span.innerHTML, 'c');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test9_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test10.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test10_span.innerHTML, 'c');\n\n\t\t\tselect_option(options[0]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [true, false, false]);\n\t\t\tassert.htmlEqual(test10_span.innerHTML, 'a');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test10_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test11.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test11_span.innerHTML, 'c');\n\n\t\t\tselect_option(options[0]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [true, false, false]);\n\t\t\tassert.htmlEqual(test11_span.innerHTML, 'a');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test11_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test14.querySelectorAll('input, textarea');\n\t\t\tassert.equal(inputs[0].value, 'x');\n\t\t\tassert.equal(/** @type {HTMLInputElement} */ (inputs[1]).checked, true);\n\t\t\tassert.equal(inputs[2].value, 'x');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tassert.equal(inputs[0].value, 'y');\n\t\t\t\tassert.equal(/** @type {HTMLInputElement} */ (inputs[1]).checked, false);\n\t\t\t\tassert.equal(inputs[2].value, 'y');\n\t\t\t});\n\t\t}\n\n\t\treset.click();\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\t\tafter_reset.forEach((fn) => fn());\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-default-value/main.svelte",
    "content": "<script>\n\tlet value1 = $state();\n\tlet value2 = $state();\n\tlet value3 = $state();\n\tlet value4 = $state();\n\tlet value5 = $state();\n\tlet value6 = $state();\n\tlet value7 = $state();\n\tlet value8 = $state();\n\tlet value9 = $state(null);\n\tlet value10 = $state(null);\n\tlet value11 = $state(null);\n\tlet value12 = $state(null);\n\tlet value13 = $state(null);\n\tlet value14 = $state(null);\n\tlet value15 = $state(null);\n\tlet value16 = $state(null);\n\tlet value17 = $state('y');\n\tlet value18 = $state('y');\n\tlet value19 = $state('y');\n\tlet value20 = $state('y');\n\tlet value21 = $state('y');\n\tlet value22 = $state('y');\n\tlet value23 = $state('y');\n\tlet value24 = $state('y');\n\n\tlet checked1 = $state();\n\tlet checked2 = $state();\n\tlet checked3 = $state();\n\tlet checked4 = $state();\n\tlet checked5 = $state(null);\n\tlet checked6 = $state(null);\n\tlet checked7 = $state(null);\n\tlet checked8 = $state(null);\n\tlet checked9 = $state(false);\n\tlet checked10 = $state(false);\n\tlet checked11 = $state(false);\n\tlet checked12 = $state(false);\n\tlet checked13 = $state(true);\n\tlet checked14 = $state(true);\n \n\n\tlet selected1 = $state();\n\tlet selected2 = $state();\n\tlet selected3 = $state('c');\n\tlet selected4 = $state('c');\n\tlet selected5 = $state(['c']);\n\tlet selected6 = $state(['c']);\n\n\tlet defaultValue = $state('x');\n\tlet defaultChecked = $state(true);\n</script>\n\n<form>\n\t<p>Input/Textarea value</p>\n\t<!-- defaultValue=x, value=undefined -->\n\t<div class=\"test-1\">\n\t\t<input {defaultValue} bind:value={value1} />\n\t\t<input {defaultValue} value={value2} />\n\t\t<input defaultValue=\"x\" bind:value={value3} />\n\t\t<input defaultValue=\"x\" value={value4} />\n\t\t<textarea {defaultValue} value={value5}></textarea>\n\t\t<textarea {defaultValue} bind:value={value6}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value7}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value8}></textarea>\n\t</div>\n\n\t<!-- defaultValue=x, value=null -->\n\t<div class=\"test-2\">\n\t\t<input {defaultValue} bind:value={value9} />\n\t\t<input {defaultValue} value={value10} />\n\t\t<input defaultValue=\"x\" value={value11} />\n\t\t<input defaultValue=\"x\" bind:value={value12} />\n\t\t<textarea {defaultValue} value={value13}></textarea>\n\t\t<textarea {defaultValue} bind:value={value14}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value15}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value16}></textarea>\n\t</div>\n\n\t<!-- defaultValue=x, value=y -->\n\t<div class=\"test-3\">\n\t\t<input {defaultValue} bind:value={value17} />\n\t\t<input {defaultValue} value={value18} />\n\t\t<input defaultValue=\"x\" value={value19} />\n\t\t<input defaultValue=\"x\" bind:value={value20} />\n\t\t<textarea {defaultValue} value={value21}></textarea>\n\t\t<textarea {defaultValue} bind:value={value22}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value23}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value24}></textarea>\n\t</div>\n\n\t<p>Input checked</p>\n\t<!-- defaultChecked=true, checked=undefined -->\n\t<div class=\"test-4\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked1} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked2} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked3} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked4} />\n\t</div>\n\n\t<!-- defaultChecked=true, checked=null -->\n\t<div class=\"test-5\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked5} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked6} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked7} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked8} />\n\t</div>\n\n\t<!-- defaultChecked=true, checked=false -->\n\t<div class=\"test-6\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked9} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked10} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked11} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked12} />\n\t</div>\n\n\t<!-- defaultChecked=false, checked=true -->\n\t<div class=\"test-7\">\n\t\t<input type=\"checkbox\" defaultChecked={false} checked={checked13} />\n\t\t<input type=\"checkbox\" defaultChecked={false} bind:checked={checked14} />\n\t</div>\n\n\t<!-- no support for bind:group; too complex + we may deprecate it in favor of bind:checked={get,set} -->\n\n\t<p>Select (single)</p>\n\t<!-- select with static checked, value=undefined-->\n\t<select bind:value={selected1}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=undefined-->\n\t<select bind:value={selected2}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with static checked, value=something else than default-->\n\t<select bind:value={selected3}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=something else than default-->\n\t<select bind:value={selected4}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<p>Select (multiple)</p>\n    <!-- There's no possibility to have the selected attribute influence a multi select initially,\n\t     because we require the value to be an array -->\n\n\t<!-- select with static checked, value=something else than default-->\n\t<select multiple bind:value={selected5}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=something else than default-->\n\t<select multiple bind:value={selected6}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<p>Static values</p>\n\t<div class=\"test-14\">\n\t\t<input value=\"x\" defaultValue=\"y\" />\n\t\t<input type=\"checkbox\" checked defaultChecked={false} />\n\t\t<textarea defaultValue=\"y\">x</textarea>\n\t</div>\n\n\t<input type=\"reset\" value=\"Reset\" />\n</form>\n\n<p>\n\tBound values:\n\t<span class=\"test-1\">{value1} {value3} {value6} {value8}</span>\n\t<span class=\"test-2\">{value9} {value12} {value14} {value16}</span>\n\t<span class=\"test-3\">{value17} {value20} {value22} {value24}</span>\n\t<span class=\"test-4\">{checked2} {checked4}</span>\n\t<span class=\"test-5\">{checked6} {checked8}</span>\n\t<span class=\"test-6\">{checked10} {checked12}</span>\n\t<span class=\"test-7\">{checked14}</span>\n\t<span class=\"test-8\">{selected1}</span>\n\t<span class=\"test-9\">{selected2}</span>\n\t<span class=\"test-10\">{selected3}</span>\n\t<span class=\"test-11\">{selected4}</span>\n\t<span class=\"test-12\">{selected5}</span>\n\t<span class=\"test-13\">{selected6}</span>\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-default-value-from-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['server'],\n\thtml: `\n\t\t<input value=\"a\">\n\t\t<input type=\"checkbox\" checked>\n\t\t<input value=\"b\">\n`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-default-value-from-spread/main.svelte",
    "content": "<script>\n\tlet text = { defaultValue: \"a\" };\n\tlet checkbox = { defaultChecked: true }\n</script>\n\n<input {...text} />\n<input type=\"checkbox\" {...checkbox} />\n<input value=\"b\" {...text} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-default-value-spread/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @param {NodeListOf<any>} inputs\n\t\t * @param {string} field\n\t\t * @param {any | any[]} value\n\t\t */\n\t\tfunction check_inputs(inputs, field, value) {\n\t\t\tfor (let i = 0; i < inputs.length; i++) {\n\t\t\t\tassert.equal(inputs[i][field], Array.isArray(value) ? value[i] : value, `field ${i}`);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {any} input\n\t\t * @param {string} field\n\t\t * @param {any} value\n\t\t */\n\t\tfunction set_input(input, field, value) {\n\t\t\tinput[field] = value;\n\t\t\tinput.dispatchEvent(\n\t\t\t\tnew Event(typeof value === 'boolean' ? 'change' : 'input', { bubbles: true })\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * @param {HTMLOptionElement} option\n\t\t */\n\t\tfunction select_option(option) {\n\t\t\toption.selected = true;\n\t\t\toption.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t}\n\n\t\tconst after_reset = [];\n\n\t\tconst reset = /** @type {HTMLInputElement} */ (target.querySelector('input[type=reset]'));\n\t\tconst [test1, test2, test3, test4, test5, test6, test7, test14] =\n\t\t\ttarget.querySelectorAll('div');\n\t\tconst [test8, test9, test10, test11] = target.querySelectorAll('select');\n\t\tconst [\n\t\t\ttest1_span,\n\t\t\ttest2_span,\n\t\t\ttest3_span,\n\t\t\ttest4_span,\n\t\t\ttest5_span,\n\t\t\ttest6_span,\n\t\t\ttest7_span,\n\t\t\ttest8_span,\n\t\t\ttest9_span,\n\t\t\ttest10_span,\n\t\t\ttest11_span\n\t\t] = target.querySelectorAll('span');\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test1.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\tassert.htmlEqual(test1_span.innerHTML, 'x x x x');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test1_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test1_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test2.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\tassert.htmlEqual(test2_span.innerHTML, 'x x x x');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test2_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test2_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test3.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'y');\n\t\t\tassert.htmlEqual(test3_span.innerHTML, 'y y y y');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test3_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test3_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test4.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test4_span.innerHTML, 'true true');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'checked', false);\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test4_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test4_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test5.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test5_span.innerHTML, 'true true');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'checked', false);\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test5_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test5_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test6.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test6_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test6_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test7.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test7_span.innerHTML, 'true');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\t\tassert.htmlEqual(test7_span.innerHTML, 'false');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test8.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\tassert.htmlEqual(test8_span.innerHTML, 'b');\n\n\t\t\tselect_option(options[2]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test8_span.innerHTML, 'c');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test8_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test9.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\tassert.htmlEqual(test9_span.innerHTML, 'b');\n\n\t\t\tselect_option(options[2]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test9_span.innerHTML, 'c');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test9_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test10.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test10_span.innerHTML, 'c');\n\n\t\t\tselect_option(options[0]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [true, false, false]);\n\t\t\tassert.htmlEqual(test10_span.innerHTML, 'a');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test10_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test11.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test11_span.innerHTML, 'c');\n\n\t\t\tselect_option(options[0]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [true, false, false]);\n\t\t\tassert.htmlEqual(test11_span.innerHTML, 'a');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test11_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test14.querySelectorAll('input, textarea');\n\t\t\tassert.equal(inputs[0].value, 'x');\n\t\t\tassert.equal(/** @type {HTMLInputElement} */ (inputs[1]).checked, true);\n\t\t\t// this is still missing...i have no idea how to fix this lol\n\t\t\t// assert.equal(inputs[2].value, 'x');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tassert.equal(inputs[0].value, 'y');\n\t\t\t\tassert.equal(/** @type {HTMLInputElement} */ (inputs[1]).checked, false);\n\t\t\t\tassert.equal(inputs[2].value, 'y');\n\t\t\t});\n\t\t}\n\n\t\treset.click();\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\t\tafter_reset.forEach((fn) => fn());\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-default-value-spread/main.svelte",
    "content": "<script>\n\tlet spread = {};\n\n\tlet value1 = $state();\n\tlet value2 = $state();\n\tlet value3 = $state();\n\tlet value4 = $state();\n\tlet value5 = $state();\n\tlet value6 = $state();\n\tlet value7 = $state();\n\tlet value8 = $state();\n\tlet value9 = $state(null);\n\tlet value10 = $state(null);\n\tlet value11 = $state(null);\n\tlet value12 = $state(null);\n\tlet value13 = $state(null);\n\tlet value14 = $state(null);\n\tlet value15 = $state(null);\n\tlet value16 = $state(null);\n\tlet value17 = $state('y');\n\tlet value18 = $state('y');\n\tlet value19 = $state('y');\n\tlet value20 = $state('y');\n\tlet value21 = $state('y');\n\tlet value22 = $state('y');\n\tlet value23 = $state('y');\n\tlet value24 = $state('y');\n\n\tlet checked1 = $state();\n\tlet checked2 = $state();\n\tlet checked3 = $state();\n\tlet checked4 = $state();\n\tlet checked5 = $state(null);\n\tlet checked6 = $state(null);\n\tlet checked7 = $state(null);\n\tlet checked8 = $state(null);\n\tlet checked9 = $state(false);\n\tlet checked10 = $state(false);\n\tlet checked11 = $state(false);\n\tlet checked12 = $state(false);\n\tlet checked13 = $state(true);\n\tlet checked14 = $state(true);\n \n\n\tlet selected1 = $state();\n\tlet selected2 = $state();\n\tlet selected3 = $state('c');\n\tlet selected4 = $state('c');\n\tlet selected5 = $state(['c']);\n\tlet selected6 = $state(['c']);\n\n\tlet defaultValue = $state('x');\n\tlet defaultChecked = $state(true);\n</script>\n\n<form>\n\t<p>Input/Textarea value</p>\n\t<!-- defaultValue=x, value=undefined -->\n\t<div class=\"test-1\">\n\t\t<input {defaultValue} bind:value={value1} {...spread} />\n\t\t<input {defaultValue} value={value2} {...spread} />\n\t\t<input defaultValue=\"x\" bind:value={value3} {...spread} />\n\t\t<input defaultValue=\"x\" value={value4} {...spread} />\n\t\t<textarea {defaultValue} value={value5} {...spread}></textarea>\n\t\t<textarea {defaultValue} bind:value={value6} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value7} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value8} {...spread}></textarea>\n\t</div>\n\n\t<!-- defaultValue=x, value=null -->\n\t<div class=\"test-2\">\n\t\t<input {defaultValue} bind:value={value9} {...spread} />\n\t\t<input {defaultValue} value={value10} {...spread} />\n\t\t<input defaultValue=\"x\" value={value11} {...spread} />\n\t\t<input defaultValue=\"x\" bind:value={value12} {...spread} />\n\t\t<textarea {defaultValue} value={value13} {...spread}></textarea>\n\t\t<textarea {defaultValue} bind:value={value14} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value15} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value16} {...spread}></textarea>\n\t</div>\n\n\t<!-- defaultValue=x, value=y -->\n\t<div class=\"test-3\">\n\t\t<input {defaultValue} bind:value={value17} {...spread} />\n\t\t<input {defaultValue} value={value18} {...spread} />\n\t\t<input defaultValue=\"x\" value={value19} {...spread} />\n\t\t<input defaultValue=\"x\" bind:value={value20} {...spread} />\n\t\t<textarea {defaultValue} value={value21} {...spread}></textarea>\n\t\t<textarea {defaultValue} bind:value={value22} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value23} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value24} {...spread}></textarea>\n\t</div>\n\n\t<p>Input checked</p>\n\t<!-- defaultChecked=true, checked=undefined -->\n\t<div class=\"test-4\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked1} {...spread} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked2} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked3} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked4} {...spread} />\n\t</div>\n\n\t<!-- defaultChecked=true, checked=null -->\n\t<div class=\"test-5\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked5} {...spread} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked6} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked7} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked8} {...spread} />\n\t</div>\n\n\t<!-- defaultChecked=true, checked=false -->\n\t<div class=\"test-6\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked9} {...spread} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked10} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked11} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked12} {...spread} />\n\t</div>\n\n\t<!-- defaultChecked=false, checked=true -->\n\t<div class=\"test-7\">\n\t\t<input type=\"checkbox\" defaultChecked={false} checked={checked13} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked={false} bind:checked={checked14} {...spread} />\n\t</div>\n\n\t<!-- no support for bind:group; too complex + we may deprecate it in favor of bind:checked={get,set} -->\n\n\t<p>Select (single)</p>\n\t<!-- select with static checked, value=undefined-->\n\t<select bind:value={selected1}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected {...spread}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=undefined-->\n\t<select bind:value={selected2}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with static checked, value=something else than default-->\n\t<select bind:value={selected3}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected {...spread}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=something else than default-->\n\t<select bind:value={selected4}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<p>Select (multiple)</p>\n    <!-- There's no possibility to have the selected attribute influence a multi select initially,\n\t     because we require the value to be an array -->\n\n\t<!-- select with static checked, value=something else than default-->\n\t<select multiple bind:value={selected5}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected {...spread}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=something else than default-->\n\t<select multiple bind:value={selected6}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<p>Static values</p>\n\t<div class=\"test-14\">\n\t\t<input value=\"x\" defaultValue=\"y\" {...spread} />\n\t\t<input type=\"checkbox\" checked defaultChecked={false} {...spread} />\n\t\t<textarea defaultValue=\"y\" {...spread}>x</textarea>\n\t</div>\n\n\t<input type=\"reset\" value=\"Reset\" />\n</form>\n\n<p>\n\tBound values:\n\t<span class=\"test-1\">{value1} {value3} {value6} {value8}</span>\n\t<span class=\"test-2\">{value9} {value12} {value14} {value16}</span>\n\t<span class=\"test-3\">{value17} {value20} {value22} {value24}</span>\n\t<span class=\"test-4\">{checked2} {checked4}</span>\n\t<span class=\"test-5\">{checked6} {checked8}</span>\n\t<span class=\"test-6\">{checked10} {checked12}</span>\n\t<span class=\"test-7\">{checked14}</span>\n\t<span class=\"test-8\">{selected1}</span>\n\t<span class=\"test-9\">{selected2}</span>\n\t<span class=\"test-10\">{selected3}</span>\n\t<span class=\"test-11\">{selected4}</span>\n\t<span class=\"test-12\">{selected5}</span>\n\t<span class=\"test-13\">{selected6}</span>\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-novalidate-casing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<form novalidate></form>\n\t\t<form novalidate></form>\n`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/form-novalidate-casing/main.svelte",
    "content": "<script>\n\tlet noValidate = $state(true);\n</script>\n\n<form novalidate={true}></form>\n<form {noValidate}></form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/function-parameter-shadowing/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [42, 43]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/function-parameter-shadowing/main.svelte",
    "content": "<script>\n\tlet value = $state(42);\n\n\tfunction shadow(output = value) {\n\t\tconst value = 1337;\n\t\treturn output;\n\t}\n\n\tconsole.log(shadow());\n\tvalue += 1;\n\tconsole.log(shadow());\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/functional-templating/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tfragments: 'tree'\n\t},\n\n\thtml: `<p>hello</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/functional-templating/main.svelte",
    "content": "<p>hello</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/get-abort-signal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<button>increment</button><p>loading...</p>`,\n\n\tasync test({ assert, target, variant, logs }) {\n\t\tawait new Promise((f) => setTimeout(f, 50));\n\n\t\tif (variant === 'hydrate') {\n\t\t\tassert.deepEqual(logs, [\n\t\t\t\t'aborted',\n\t\t\t\t'StaleReactionError',\n\t\t\t\t'The reaction that called `getAbortSignal()` was re-run or destroyed'\n\t\t\t]);\n\t\t}\n\n\t\tlogs.length = 0;\n\n\t\tconst [button] = target.querySelectorAll('button');\n\n\t\tawait new Promise((f) => setTimeout(f, 50));\n\t\tassert.htmlEqual(target.innerHTML, '<button>increment</button><p>0</p>');\n\n\t\tbutton.click();\n\t\tawait new Promise((f) => setTimeout(f, 50));\n\t\tassert.htmlEqual(target.innerHTML, '<button>increment</button><p>2</p>');\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'aborted',\n\t\t\t'StaleReactionError',\n\t\t\t'The reaction that called `getAbortSignal()` was re-run or destroyed'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/get-abort-signal/main.svelte",
    "content": "<script>\n\timport { getAbortSignal } from 'svelte';\n\n\tlet count = $state(0);\n\n\tlet delayed_count = $derived.by(async () => {\n\t\tlet c = count;\n\n\t\tconst signal = getAbortSignal();\n\n\t\tawait new Promise((f) => setTimeout(f));\n\n\t\tif (signal.aborted) {\n\t\t\tconsole.log('aborted', signal.reason.name, signal.reason.message);\n\t\t}\n\n\t\treturn c;\n\t});\n</script>\n\n<button onclick={async () => {\n\tcount += 1;\n\tawait Promise.resolve();\n\tcount += 1;\n}}>increment</button>\n\n{#await delayed_count}\n\t<p>loading...</p>\n{:then count}\n\t<p>{count}</p>\n{:catch error}\n\t{console.log('this should never be rendered')}\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/global-variable-assignment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'x is not defined',\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/global-variable-assignment/foo.svelte.js",
    "content": "x = 1;\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/global-variable-assignment/main.svelte",
    "content": "<script>\n\timport \"./foo.svelte.js\";\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/globals-deconflicted/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>hello</p>`,\n\n\tbefore_test: () => {\n\t\t// @ts-expect-error\n\t\tglobalThis.frag = 'hello';\n\t},\n\n\tafter_test: () => {\n\t\t// @ts-expect-error\n\t\tdelete globalThis.frag;\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/globals-deconflicted/main.svelte",
    "content": "<p>{frag}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-else-effect/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ target, assert, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['two', 'one', 'two', 'one', 'two']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-else-effect/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet b = $state(false);\n\tlet v = $state(\"two\");\n\n\t$effect(() => {\n\t\tv = b ? \"one\" : \"two\";\n\t})\n</script>\n\n<button onclick={() => b = !b}>Trigger</button>\n\n{#if v === \"one\"}\n\t<div>if1 matched! {console.log('one')}</div>\n{:else if v === \"two\"}\n\t<div>if2 matched! {console.log('two')}</div>\n{:else}\n\t<div>nothing matched {console.log('else')}</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-if-nested/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ target, assert }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\n\t\tassert.equal(target.textContent?.trim(), 'Trigger');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-if-nested/main.svelte",
    "content": "<script>\n\tlet centerRow = $state({ nested: { optional: 2, required: 3 } });\n\n\tlet someChange = $state(false);\n\t$effect(() => {\n\t\tif (someChange) centerRow = undefined;\n\t});\n</script>\n\n{#if centerRow?.nested}\n\t{#if centerRow?.nested?.optional != undefined && centerRow.nested.optional > 0}\n\t\top: {centerRow.nested.optional}<br />\n\t{:else}\n\t\treq: {centerRow.nested.required}<br />\n\t{/if}\n{/if}\n\n<button onclick={() => (someChange = true)}>Trigger</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-nested-if-pre/Component.svelte",
    "content": "<script>\n\tlet { p } = $props();\n\t$effect.pre(() => {\n\t\tconsole.log('running ' + p)\n\t})\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-nested-if-pre/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['pre', 'running b', 'pre', 'pre']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/guard-nested-if-pre/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet p = $state('b');\n\n\t$effect.pre(() => {\n\t\tconsole.log('pre')\n\t\tif (p === 'a') p = null;\n\t})\n</script>\n\n{#if p || !p}\n\t{#if p}\n\t\t<Component {p} />\n\t{/if}\n{/if}\n\n<button onclick={() => p = 'a'}>a</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/head-payload-validation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tmode: ['server'],\n\tasync test({ errors, assert }) {\n\t\tassert.equal(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/head-payload-validation/main.svelte",
    "content": "{#snippet head()}\n\t<title>Cool</title>\n{/snippet}\n\n<svelte:head>\n\t{@render head()}\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hmr-each-keyed-unshift/Child.svelte",
    "content": "<p>child</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hmr-each-keyed-unshift/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>unshift</button>`,\n\n\tcompileOptions: {\n\t\tdev: true,\n\t\thmr: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>unshift</button>\n\t\t\t\t<p>child</p>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>unshift</button>\n\t\t\t\t<p>child</p>\n\t\t\t\t<p>child</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hmr-each-keyed-unshift/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet uid = 0;\n\n\t/** @type {Array<{ id: number }>} */\n\tlet items = $state([]);\n</script>\n\n<button onclick={() => items.unshift({ id: uid++ })}>unshift</button>\n\n{#each items as item (item.id)}\n\t<Child />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hmr-removal/Child.svelte",
    "content": "<p>hello</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hmr-removal/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\thmr: true\n\t},\n\n\thtml: `<button>toggle</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button><p>hello</p>`);\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hmr-removal/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet open = $state(false);\n</script>\n\n<button onclick={() => (open = !open)}>toggle</button>\n\n{#if open}\n\t<Child />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-namespace-infer-a-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<div><a><span>Hello</span></a></div>\n\t<div><a><span>Hello</span></a></div>\n\t<div><a><span>Hello</span></a></div>\n`,\n\ttest({ assert, target }) {\n\t\tconst div = target.querySelectorAll('div');\n\t\tconst a = target.querySelectorAll('a');\n\t\tconst span = target.querySelectorAll('span');\n\n\t\tfor (const element of div) {\n\t\t\tassert.equal(element.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t\t}\n\n\t\tfor (const element of a) {\n\t\t\tassert.equal(element.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t\t}\n\n\t\tfor (const element of span) {\n\t\t\tassert.equal(element.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-namespace-infer-a-tag/div.svelte",
    "content": "<script>\n    let { children } = $props();\n</script>\n\n<div>\n    {@render children()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-namespace-infer-a-tag/main.svelte",
    "content": "<script>\n  import Div from './div.svelte';\n</script>\n\n<div>\n\t<a>\n\t\t<span>Hello</span>\n\t</a>\n</div>\n\n<div>\n\t{#snippet test()}\n\t\t<a>\n\t\t\t<span>Hello</span>\n\t\t</a>\n\t{/snippet}\n\t{@render test()}\n</div>\n\n<Div>\n  <a>\n    <span>Hello</span>\n  </a>\n</Div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-tag-contenteditable/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<div id=\"editable\" contenteditable=\"true\"></div><p id=\"output\"></p>`,\n\n\ttest({ assert, target }) {\n\t\tconst div = /** @type {HTMLDivElement} */ (target.querySelector('#editable'));\n\t\tconst output = /** @type {HTMLParagraphElement} */ (target.querySelector('#output'));\n\n\t\t// Simulate user typing by directly modifying the DOM\n\t\tdiv.textContent = 'hello';\n\n\t\t// Simulate blur which triggers `content = e.currentTarget.innerText`\n\t\tconst event = new Event('blur');\n\t\tdiv.dispatchEvent(event);\n\t\tflushSync();\n\n\t\t// The output should show \"hello\" (innerText was set correctly)\n\t\tassert.equal(output.textContent, 'hello');\n\n\t\t// The contenteditable div should contain \"hello\" once, not duplicated\n\t\tassert.htmlEqual(div.innerHTML, 'hello');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-tag-contenteditable/main.svelte",
    "content": "<script>\n\tlet content = $state(\"\");\n</script>\n\n<div id=\"editable\" onblur={(e) => { content = e.currentTarget.textContent; }} contenteditable=\"true\">\n\t{@html content}\n</div>\n\n<p id=\"output\">{content}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-tag-empty/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: ''\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-tag-empty/main.svelte",
    "content": "{@html undefined}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-tag-escaping/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `s s s \\\\u73`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/html-tag-escaping/main.svelte",
    "content": "{@html `\\u{73}`}\n{@html '\\u{73}'}\n{@html \"\\u{73}\"}\n\n\\u{73}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tskip_mode: ['server'],\n\n\tserver_props: { environment: 'server' },\n\tssrHtml: '<p>The current environment is: server</p>',\n\n\tprops: { environment: 'browser' },\n\n\tasync test({ assert, target, variant }) {\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tif (variant === 'hydrate') {\n\t\t\tassert.htmlEqual(p.outerHTML, '<p>The current environment is: server</p>');\n\t\t} else {\n\t\t\tassert.htmlEqual(p.outerHTML, '<p>The current environment is: browser</p>');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { hydratable } from \"svelte\";\n\n\tlet { environment } = $props();\n\n\tconst value = hydratable(\"environment\", () => environment)\n</script>\n\n<p>The current environment is: {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-complex-nesting/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tskip_mode: ['server'],\n\n\tserver_props: { environment: 'server' },\n\tssrHtml: '<p>The current environment is: server</p>',\n\n\tprops: { environment: 'browser' },\n\n\tasync test({ assert, target, variant }) {\n\t\t// make sure hydration has a chance to finish\n\t\tawait tick();\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tif (variant === 'hydrate') {\n\t\t\tassert.htmlEqual(p.outerHTML, '<p>The current environment is: server</p>');\n\t\t} else {\n\t\t\tassert.htmlEqual(p.outerHTML, '<p>The current environment is: browser</p>');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-complex-nesting/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { hydratable } from \"svelte\";\n\n\tlet { environment } = $props();\n\n\tconst value = hydratable(\"environment\", () => Promise.resolve({\n\t\tnested: Promise.resolve({\n\t\t\tenvironment\n\t\t})\n\t}))\n</script>\n\n<p>The current environment is: {await value.then(res => res.nested).then(res => res.environment)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tmode: ['async-server', 'hydrate'],\n\n\tserver_props: { environment: 'server' },\n\tssrHtml: '<p>The current environment is: server</p>',\n\n\tprops: { environment: 'browser' },\n\n\truntime_error: 'hydratable_missing_but_required'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-error-on-missing/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { hydratable } from \"svelte\";\n\n\tlet { environment }: { environment: 'server' | 'browser' } = $props();\n\n\tlet value;\n\tif (environment === 'server') {\n\t\tvalue = 'server';\n\t} else {\n\t\tvalue = hydratable('environment', () => environment);\n\t}\n</script>\n\n<p>The current environment is: {value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-script-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tmode: ['hydrate'],\n\n\tprops: {\n\t\tkey: '</script><script>throw new Error(\"pwned\")</script>'\n\t},\n\n\tasync test() {\n\t\t// this test will fail when evaluating the `head` script if the vulnerability is present\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-script-escape/main.svelte",
    "content": "<script>\n\timport { hydratable } from \"svelte\";\n\n\tconst { key } = $props();\n\n\tconst value = await hydratable(key, () => Promise.resolve('safe'));\n</script>\n\n<p>{value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-unused-keys/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tmode: ['async-server', 'hydrate'],\n\n\tserver_props: { environment: 'server' },\n\tssrHtml: '<div>Loading...</div>',\n\n\ttest_ssr({ assert, warnings }) {\n\t\tassert.strictEqual(warnings.length, 1);\n\t\t// for some strange reason we trim the error code off the beginning of warnings so I can't actually assert it\n\t\tassert.include(warnings[0], 'A `hydratable` value with key `unused_key`');\n\t},\n\n\tasync test({ assert, target }) {\n\t\t// make sure the hydratable promise on the client has a chance to run and reject (it shouldn't, because the server data should be used)\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div>did you ever hear the tragedy of darth plagueis the wise?</div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-unused-keys/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { hydratable } from \"svelte\";\n\n\tconst { environment } = $props();\n\n\tconst unresolved_hydratable = hydratable(\n\t\t\"unused_key\",\n\t\t() => new Promise(\n\t\t\t(res, rej) => environment === 'server' ? setTimeout(() => res('did you ever hear the tragedy of darth plagueis the wise?'), 0) : rej('should not run')\n\t\t)\n\t);\n</script>\n\n<svelte:boundary>\n\t<div>{await unresolved_hydratable}</div>\n\t{#snippet pending()}\n\t\t<div>Loading...</div>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-unused-keys-nesting-partial/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tmode: ['async-server', 'hydrate'],\n\n\tserver_props: { environment: 'server' },\n\tssrHtml:\n\t\t'<div>did you ever hear the tragedy of darth plagueis the wise?</div><div>Loading...</div>',\n\n\ttest_ssr({ assert, warnings }) {\n\t\tassert.strictEqual(warnings.length, 1);\n\t\t// for some strange reason we trim the error code off the beginning of warnings so I can't actually assert it\n\t\tassert.include(warnings[0], 'A `hydratable` value with key `partially_used`');\n\t},\n\n\tasync test({ assert, target }) {\n\t\t// make sure the hydratable promise on the client has a chance to run and reject (it shouldn't, because the server data should be used)\n\t\tawait tick();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<div>did you ever hear the tragedy of darth plagueis the wise?</div><div>no, sith daddy, please tell me</div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydratable-unused-keys-nesting-partial/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { hydratable } from \"svelte\";\n\n\tconst { environment } = $props();\n\n\tconst partially_used_hydratable = hydratable(\n\t\t\"partially_used\",\n\t\t() => {\n\t\t\treturn {\n\t\t\t\tused: new Promise(\n\t\t\t\t\t(res, rej) => environment === 'server' ? setTimeout(() => res('did you ever hear the tragedy of darth plagueis the wise?'), 0) : rej('should not run')\n\t\t\t\t),\n\t\t\t\tunused: new Promise(\n\t\t\t\t\t(res, rej) => environment === 'server' ? setTimeout(() => res('no, sith daddy, please tell me'), 0) : rej('should not run')\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\t);\n</script>\n\n<div>{await partially_used_hydratable.used}</div>\n<svelte:boundary>\n\t<div>{await partially_used_hydratable.unused}</div>\n\t{#snippet pending()}\n\t\t<div>Loading...</div>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydrate-modified-input/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['client'],\n\n\ttest({ assert, target, hydrate }) {\n\t\tconst input = /** @type {HTMLInputElement} */ (target.querySelector('input'));\n\t\tinput.value = 'foo';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\t// Hydration shouldn't reset the value to empty\n\t\thydrate();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<input type=\"text\">\\nfoo');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydrate-modified-input/main.svelte",
    "content": "<script>\n\tlet value = $state('');\n</script>\n\n<input type=\"text\" bind:value={value}>\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydrate-modified-input-group/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['client'],\n\n\ttest({ assert, target, hydrate }) {\n\t\tconst inputs = /** @type {NodeListOf<HTMLInputElement>} */ (target.querySelectorAll('input'));\n\t\tinputs[1].checked = true;\n\t\tinputs[1].dispatchEvent(new window.Event('change'));\n\t\t// Hydration shouldn't reset the value to 1\n\t\thydrate();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<input name=\"foo\" type=\"radio\" value=\"1\"><input name=\"foo\" type=\"radio\" value=\"2\"><input name=\"foo\" type=\"radio\" value=\"3\">\\n2'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydrate-modified-input-group/main.svelte",
    "content": "<script>\n\tlet value = $state(1);\n</script>\n\n{#each [1, 2, 3] as number}\n\t<input type=\"radio\" name=\"foo\" value={number} bind:group={value}>\n{/each}\n\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydrate-modified-input-numeric/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['client'],\n\n\ttest({ assert, target, hydrate }) {\n\t\tconst input = /** @type {HTMLInputElement} */ (target.querySelector('input'));\n\t\tinput.value = '1';\n\t\tinput.dispatchEvent(new window.Event('input'));\n\t\t// Hydration shouldn't reset the value to empty\n\t\thydrate();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, '<input type=\"number\">\\n1 (number)');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydrate-modified-input-numeric/main.svelte",
    "content": "<script>\n\tlet value = $state(0);\n</script>\n\n<input type=\"number\" bind:value={value}>\n{value} ({typeof value})\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydration-attribute-changed-ignored/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\tprops: {\n\t\tbrowser: true\n\t},\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydration-attribute-changed-ignored/main.svelte",
    "content": "<script>\n\tlet { browser } = $props();\n</script>\n\n<!-- svelte-ignore hydration_attribute_changed -->\n<img src={browser ? 'a' : 'b'} alt=\"\" />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydration-html-changed-ignored/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\tprops: {\n\t\tbrowser: true\n\t},\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/hydration-html-changed-ignored/main.svelte",
    "content": "<script>\n\tlet { browser } = $props();\n</script>\n\n<!-- svelte-ignore hydration_html_changed -->\n{@html browser ? 'a' : 'b'}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-block-dependencies/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\n\t\tlet [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`false\\ntrue\\n<button>Toggle</button>\\nfirst:\\nfalse\\n<br>\\nsecond:\\ntrue`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-block-dependencies/main.svelte",
    "content": "<script>\n\tlet first = $state(true)\n\tlet second = $state(false)\n\tlet derivedSecond = $derived(second)\n\n\tqueueMicrotask(() => {\n\t\tfirst = false\n\t});\n</script>\n\n{first} {second}\n\n<button onclick={() => {\n\tsecond = true\n}}>Toggle</button>\n\n{#if first || derivedSecond}\n\t\tfirst: {first}\n\t\t<br />\n\t\tsecond: {derivedSecond}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-dependency-order/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>Click</button><p>expires in 1 click</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, ``);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-dependency-order/main.svelte",
    "content": "<script>\n\tlet data = $state({ num: 1 });\n\n\tfunction expire() {\n\t\tdata.num = data.num - 1;\n\t\tif (data.num <= 0) data = undefined;\n\t}\n</script>\n\n{#if data}\n\t<button onclick={expire}>Click</button>\n\t<p>expires in {data.num} click</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-dependency-order-2/Seo.svelte",
    "content": "<script>\n\tlet { post } = $props();\n</script>\n\n<svelte:head>\n\t<title>{post.title}</title>\n</svelte:head>\n\n<p>{post.title}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-dependency-order-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, window }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(window.document.head.innerHTML, ``);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(window.document.head.innerHTML, `<title>hello world</title>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(window.document.head.innerHTML, `<title>hello world</title>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-dependency-order-2/main.svelte",
    "content": "<script>\n\timport Seo from './Seo.svelte';\n\n\tlet post = $state(null);\n\n\tfunction toggle() {\n\t\tpost = post ? null : { title: 'hello world' };\n\t}\n</script>\n\n<button onclick={toggle}>\n\ttoggle\n</button>\n\n{#if post}\n\t<Seo {post} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-nested-template/Component.svelte",
    "content": "<script>\n\tlet { value } = $props()\n\n\tconst text = $derived(value.toString())\n\n\t$effect(() => console.log(text))\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-nested-template/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst [div] = target.querySelectorAll('div');\n\n\t\tflushSync(() => btn1?.click());\n\t\tassert.htmlEqual(div.innerHTML, '123 123');\n\t\tassert.equal(div.inert, true);\n\n\t\tflushSync(() => btn2?.click());\n\t\tassert.htmlEqual(div.innerHTML, '');\n\t\tassert.deepEqual(logs, ['123']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-nested-template/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet outer = $state(true);\n\tlet inner = $state(123);\n\n\tfunction outro() {\n\t\treturn { duration: 100 };\n\t}\n</script>\n\n{#if outer}\n\t<div out:outro>\n\t\t{#if inner}\n\t\t\t{@const text = inner.toString()}\n\t\t\t{text} {inner.toString()}\n\t\t\t<Component value={inner} />\n\t\t{/if}\n\t</div>\n{/if}\n\n<button onclick={() => { outer = false; inner = undefined; }}>Set both to falsy</button>\n<button onclick={() => { outer = true }}>Set outer to truthy</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-transition-inert/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>hide</button><div>hello</div>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>hide</button><div style=\"opacity: 0;\">hello</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-transition-inert/main.svelte",
    "content": "<script>\n  import { fade } from \"svelte/transition\";\n\n  let state = $state(\"hello\");\n</script>\n\n<button onclick={() => state = ''}>hide</button>\n\n{#if state}\n  <div in:fade={{ duration: 2000 }} out:fade={{ duration: 2000 }}>\n    {#if true}\n      {state}\n    {/if}\n  </div>\n{/if}\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-transition-undefined/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>show</button><button>animate</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>show</button><button>animate</button><h1>Hello\\n!</h1>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>show</button><button>animate</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>show</button><button>animate</button>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>show</button><button>animate</button><h1 style=\"opacity: 0;\">Hello\\n!</h1>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/if-transition-undefined/main.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\n\tlet show = $state(false);\n\tlet animate = $state(false);\n\n\tfunction maybe(node, animate) {\n\t\tif (animate) return fade(node);\n\t}\n</script>\n\n<button onclick={() => show = !show}>show</button><button onclick={() => animate = !animate}>animate</button>\n\n{#if show}\n\t<h1 transition:maybe={animate}>Hello {name}!</h1>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/image-loading-attribute/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `<img alt=\"Svelte\" loading=\"eager\" src=\"foo.png\">`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/image-loading-attribute/main.svelte",
    "content": "<script>\n\tlet loading = $state('lazy')\n\n\t$effect(() => {\n\t\tloading = 'eager'\n\t})\n</script>\n\n<img alt=\"Svelte\" src=\"foo.png\" {loading} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/img-loading-lazy-no-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<h1></h1><img src=\"...\" loading=\"lazy\" />`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/img-loading-lazy-no-static/main.svelte",
    "content": "<h1></h1>\n<img src=\"...\" loading=\"lazy\">"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>update</button>\n\t\t<p>0, 0, 0, 0</p>\n\t`,\n\n\ttest({ target, assert, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => btn?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>update</button>\n\t\t\t\t<p>1, -1, 1, -1</p>\n\t\t\t`\n\t\t);\n\n\t\tassert.deepEqual(logs, [0, 0, 1, -1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/main.svelte",
    "content": "<script>\n\tlet a = $state(\"0\");\n\tlet b = $state(\"0\");\n\tlet c = $state(\"0\");\n\tlet d = $state(\"0\");\n\n\tfunction update() {\n\t\t// @ts-expect-error\n\t\tconsole.log(a++);\n\t\t// @ts-expect-error\n\t\tconsole.log(b--);\n\t\t// @ts-expect-error\n\t\tconsole.log(++c);\n\t\t// @ts-expect-error\n\t\tconsole.log(--d);\n\t}\n</script>\n\n<button onclick={update}>update</button>\n<p>{a}, {b}, {c}, {d}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inline-expressions/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>Without text expression: 7.36</p>\n\t\t<p>With text expression: 7.36</p>\n\t\t<p>With text expression and function call: 7.36</p>\n\t\t<p>With text expression and property access: 4</p>\n\t\t<h1>Hello name!</h1>\n\t\t<p>4</p>\n\t\t<h1>Tracking: true</h1>`,\n\n\tssrHtml: `\n\t\t<p>Without text expression: 7.36</p>\n\t\t<p>With text expression: 7.36</p>\n\t\t<p>With text expression and function call: 7.36</p>\n\t\t<p>With text expression and property access: 4</p>\n\t\t<h1>Hello name!</h1>\n\t\t<p>4</p>\n\t\t<h1>Tracking: false</h1>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inline-expressions/main.svelte",
    "content": "<p>Without text expression: 7.36</p>\n<p>With text expression: {7.36}</p>\n<p>With text expression and function call: {(7.36).toString()}</p>\n<p>With text expression and property access: {\"test\".length}</p>\n<h1>Hello {('name').toUpperCase().toLowerCase()}!</h1>\n<p>{\"test\".length}</p>\n<h1>Tracking: {$effect.tracking()}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [0, 1, 'at HTMLButtonElement.click']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\t$inspect(x);\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-console-trace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, []);\n\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.ok(logs[0].stack.startsWith('Error:') && logs[0].stack.includes('HTMLButtonElement.'));\n\t\tassert.deepEqual(logs[1], 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-console-trace/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\t$inspect(x).with((type, x) => {\n\t\tif (type === 'update') console.log(new Error(), x);\n\t});\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-deep/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [undefined, [{}], 'at $effect']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-deep/main.svelte",
    "content": "<script>\n\tlet items = [{}];\n\tlet data = $state();\n\n\t$effect(() => {\n\t\tdata = items.slice(0, 1);\n\t});\n\n\t$inspect(data);\n</script>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-deep-array/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_inspect_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ target, assert, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [[1, 2, 3, 7], [2, 3, 7], 'at Object.doSplice']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-deep-array/main.svelte",
    "content": "<script>\n\tfunction createState(init) {\n\t\tlet values = $state(init);\n\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn $state.snapshot(values);\n\t\t\t},\n\n\t\t\tget workedValues() {\n\t\t\t\tlet newValue = [];\n\t\t\t\tfor (const value of values) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tthrow new Error('undefined found');\n\t\t\t\t\t}\n\n\t\t\t\t\tnewValue.push(value);\n\t\t\t\t}\n\t\t\t\treturn newValue;\n\t\t\t},\n\n\t\t\tdoSplice() {\n\t\t\t\tvalues.splice(0, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tconst myState = createState([1, 2, 3, 7]);\n\n\t$inspect(myState.workedValues);\n</script>\n\n<button onclick={() => myState.doSplice()}>Delete</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/**\n * @type {any[]}\n */\nlet log;\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tget props() {\n\t\tlog = [];\n\t\treturn {\n\t\t\tpush: (/** @type {any} */ ...v) => log.push(...v)\n\t\t};\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(log, ['init', 'X', 'update', 'XX', 'update', 'XXX']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived/main.svelte",
    "content": "<script>\n\t/** @type {{ push: (v: any) => void }} */\n\tlet { push } = $props();\n\n\tlet x = $state('x');\n\tlet y = $derived(x.toUpperCase());\n\n\t$inspect(y).with(push);\n</script>\n\n<button on:click={() => x += 'x'}>{x}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_inspect_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>update</button>\\n1`);\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t{\n\t\t\t\tdata: {\n\t\t\t\t\tderived: 0,\n\t\t\t\t\tlist: []\n\t\t\t\t},\n\t\t\t\tderived: []\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: {\n\t\t\t\t\tderived: 0,\n\t\t\t\t\tlist: [1]\n\t\t\t\t},\n\t\t\t\tderived: [1]\n\t\t\t},\n\t\t\t'at HTMLButtonElement.click'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-2/main.svelte",
    "content": "<script module>\n\tconst data = $state({\n\t\tlist: [],\n\t\tderived: 0\n\t});\n\n\tconst derived = $derived(data.list.filter(() => true));\n\n\tconst state = {\n\t\tdata,\n\t\tget derived() { return derived }\n\t};\n</script>\n\n<script>\n\tdata.list.length = 0;\n\t$inspect(state);\n</script>\n\n<button onclick={() => (state.data.list.push(1))}>update</button>\n{state.data.list}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-3/Item.svelte",
    "content": "<script>\n\timport {getContext} from 'svelte';\n\n\tlet { children, value} = $props();\n\n\tlet listContext = getContext('list');\n\n\tlet selected = $derived(listContext?.selectedValue === value);\n\n\t$inspect(value, selected);\n</script>\n\n<div class:selected>{@render children()}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-3/List.svelte",
    "content": "<script>\n\timport {setContext} from 'svelte';\n\n\tlet {children, selectedValue} = $props();\n\n\tlet listContext = $state({ selectedValue});\n\n\t$effect(() => {\n\t\tlistContext.selectedValue = selectedValue;\n\t});\n\n\tsetContext('list',listContext);\n</script>\n\n<div class=\"list\">\n\t{@render children()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_inspect_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t'0',\n\t\t\ttrue,\n\t\t\t'1',\n\t\t\tfalse,\n\t\t\t'2',\n\t\t\tfalse,\n\t\t\t'0',\n\t\t\tfalse,\n\t\t\t'at $effect',\n\t\t\t'1',\n\t\t\ttrue,\n\t\t\t'at $effect'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-3/main.svelte",
    "content": "<script>\n\timport List from './List.svelte';\n\timport Item from './Item.svelte';\n\n\tlet selectedIndex = $state(0);\n\tlet selectedValue = $derived(`${selectedIndex}`);\n\n\tconst changeSelection = () => {\n\t\t\tselectedIndex = (selectedIndex + 1)%3;\n\t};\n</script>\n\n<List {selectedValue}>\n\t<Item value=\"0\">First</Item>\n\t<Item value=\"1\">Second</Item>\n\t<Item value=\"2\">Third</Item>\n</List>\n<button onclick={changeSelection}>Change Selection</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-4/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_inspect_logs } from '../../../helpers';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b] = target.querySelectorAll('button');\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>first unseen: 1</button>`);\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>first unseen: 2</button>`);\n\n\t\tb.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>first unseen:</button>`);\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t[0, 1, 2],\n\t\t\t[1, 2],\n\t\t\t'at SvelteSet.add',\n\t\t\t[2],\n\t\t\t'at SvelteSet.add',\n\t\t\t[],\n\t\t\t'at SvelteSet.add'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-derived-4/main.svelte",
    "content": "<script>\n\timport {SvelteSet} from \"svelte/reactivity\";\n\tconst ids = [0,1,2];\n\tconst seenIds = new SvelteSet();\n\n\tconst unseenIds = $derived(ids.filter((id) => !seenIds.has(id)));\n\t\n\tconst currentId = $derived(unseenIds.at(0));\n\t$inspect(unseenIds)\n</script>\n\n<button onclick={() => seenIds.add(currentId)}>\n\tfirst unseen: {currentId}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-exception/Component.svelte",
    "content": "<script lang=\"ts\">\n\tlet { a = $bindable() } = $props();\n\n\t$inspect(a).with((t, c) => console.log(t, c));\n\n</script>\n<p>{a}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-exception/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs, errors }) {\n\t\tconst b1 = target.querySelector('button');\n\t\tb1?.click();\n\t\tflushSync();\n\n\t\tassert.equal(errors.length, 0);\n\t\tassert.deepEqual(logs, ['init', 'a', 'init', 'b']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-exception/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Component from './Component.svelte';\n\n\tlet s = $state({ a: {\"1\": \"a\", \"2\": \"b\"} });\n</script>\n\n<button onclick={() => (s = {})}>Set State</button>\n\n{#if s.a}\n\t{#each Object.entries(s.a) as [k, v]}\n\t\t<Component bind:a={s.a[k]} />\n\t{/each}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-map-set/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_inspect_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn, btn2] = target.querySelectorAll('button');\n\t\tbtn.click();\n\t\tbtn2.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\tnew Map(),\n\t\t\tnew Set(),\n\t\t\tnew Map([['a', 'a']]),\n\t\t\t'at SvelteMap.set',\n\t\t\tnew Set(['a']),\n\t\t\t'at SvelteSet.add'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-map-set/main.svelte",
    "content": "<script>\n\timport { SvelteMap, SvelteSet } from 'svelte/reactivity';\n\n\tlet map = new SvelteMap();\n\tlet set = new SvelteSet();\n\n\t$inspect(map);\n\t$inspect(set);\n</script>\n\n<button onclick={() => map.set('a', 'a')}>Map</button>\n<button onclick={() => set.add('a')}>Set</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-multiple/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t'at HTMLButtonElement.click',\n\t\t\t1,\n\t\t\t1,\n\t\t\t'at HTMLButtonElement.click_1'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-multiple/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\t$inspect(x, y);\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-nested-effect/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [0, 1, 'at $effect']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-nested-effect/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $derived.by(() => {\n\t\t$effect(() => {\n\t\t\ta = 1;\n\t\t})\n\t\treturn a;\n\t})\n\n\t$inspect(b);\n</script>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-nested-state/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t{ x: { count: 0 } },\n\t\t\t[{ count: 0 }],\n\t\t\t{ x: { count: 1 } },\n\t\t\t[{ count: 1 }],\n\t\t\t'at HTMLButtonElement.click'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-nested-state/main.svelte",
    "content": "<script>\n\tlet x = $state({count: 0});\n\n\t$inspect({x}, [x]);\n</script>\n\n<button on:click={() => x.count++}>{x.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-new-property/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\t\tbtn.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t{},\n\t\t\t[],\n\t\t\t{ x: 'hello' },\n\t\t\t'at HTMLButtonElement.click',\n\t\t\t['hello'],\n\t\t\t'at HTMLButtonElement.click'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-new-property/main.svelte",
    "content": "<script>\n\tlet obj = $state({});\n\tlet array = $state([]);\n\n\t$inspect(obj);\n\t$inspect(array);\n</script>\n\n<button\n\tonclick={() => {\n\t\tobj.x = \"hello\";\n\t\tarray[0] = \"hello\";\n\t}}>\n\tadd prop\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-recursive/_config.js",
    "content": "import { normalise_inspect_logs } from '../../../helpers.js';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, logs, target }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\t\tbtn.click();\n\t\tbtn.click();\n\t\tawait Promise.resolve();\n\n\t\tassert.deepEqual(normalise_inspect_logs(logs), [\n\t\t\t[],\n\t\t\t[{}],\n\t\t\t'at HTMLButtonElement.click',\n\t\t\t[{}, {}],\n\t\t\t'at HTMLButtonElement.click'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-recursive/main.svelte",
    "content": "<script>\n\tclass Rect{\n\t\tx = $state();\n\t\ty = $state();\n\n\t\tconstructor(x, y){\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t}\n\t}\n\n\tclass Node{\n\t\tpos = $state({ x: 0, y: 0 });\n\t\trect = $derived(new Rect(this.pos.x, this.pos.y));\n\n\t\tconstructor(pos){\n\t\t\tthis.pos = pos;\n\t\t}\n\t}\n\n\tconst nodes = $state([]);\n\n\tconst rects = $derived(nodes.map(n => n.rect));\n\n\t$inspect(rects);\n</script>\n\n<button onclick={()=>{\n\tnodes.push(new Node({x: Math.floor(Math.random()*100), y: Math.floor(Math.random()*100)}));\n}}>add</button>\n<ul>\n\t{#each rects as rect}\n\t\t<li>{rect.x} - {rect.y}</li>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-recursive-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, logs }) {\n\t\tvar a = {\n\t\t\ta: {}\n\t\t};\n\t\ta.a = a;\n\n\t\tvar b = {\n\t\t\ta: {\n\t\t\t\tb: {}\n\t\t\t}\n\t\t};\n\t\tb.a.b = b;\n\n\t\tassert.deepEqual(logs, [a, b]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-recursive-2/main.svelte",
    "content": "<script>\n\tclass A {\n\t\tconstructor() {\n\t\t\tthis.a = this;\n\t\t}\n\t}\n\tconst state = $state(new A());\n\t$inspect(state);\n\n\tclass B {\n\t\tconstructor() {\n\t\t\tthis.a = { b: this };\n\t\t}\n\t}\n\tconst state2 = $state(new B());\n\t$inspect(state2);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-state-unsafe-mutation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\terror: 'state_unsafe_mutation',\n\n\t// silence the logs\n\ttest({ logs }) {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-state-unsafe-mutation/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\n\tlet b = $state(0);\n\n\t$inspect(a).with((...args)=>{\n\t\tconsole.log(...args);\n\t\tb++;\n\t});\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\t// initial log, everything is highlighted\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$derived', highlighted: true },\n\t\t\t{ log: 'double', highlighted: false },\n\t\t\t{ log: 0 },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 0 },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: false }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\t// count changed, derived and state are highlighted, last state is not\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$derived', highlighted: true },\n\t\t\t{ log: 'double', highlighted: false },\n\t\t\t{ log: 2 },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 1 },\n\t\t\t{ log: '$state', highlighted: false },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: false }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst input = target.querySelector('input');\n\t\tinput?.click();\n\t\tflushSync();\n\n\t\t// checked changed, last state is highlighted, first two are not\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$derived', highlighted: false },\n\t\t\t{ log: 'double', highlighted: false },\n\t\t\t{ log: 2 },\n\t\t\t{ log: '$state', highlighted: false },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 1 },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: true }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\t// count change and derived it's >=4, checked is not in the dependencies anymore\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$derived', highlighted: true },\n\t\t\t{ log: 'double', highlighted: false },\n\t\t\t{ log: 4 },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 2 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet double = $derived(count * 2);\n\n\tlet checked = $state(false);\n\n\t$effect(() => {\n\t\t$inspect.trace('effect');\n\n\t\tdouble;\n\t\tdouble >= 4 || checked;\n\t});\n</script>\n\n<button onclick={() => count++}>{double}</button>\n<input type=\"checkbox\" bind:checked />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-circular-reference/_config.js",
    "content": "import { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, logs }) {\n\t\tconst files = { id: 1, items: [{ id: 2, items: [{ id: 3 }, { id: 4 }] }] };\n\t\t// @ts-expect-error\n\t\tfiles.items[0].parent = files;\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'test (main.svelte:5:4)' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'filesState.files', highlighted: false },\n\t\t\t{ log: files },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'filesState.files.items[0].parent.items', highlighted: false },\n\t\t\t{ log: files.items },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'filesState.files.items[0].parent.items[0]', highlighted: false },\n\t\t\t{ log: files.items[0] }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-circular-reference/main.svelte",
    "content": "<script>\n    const filesState = $state({ files: {} });\n    let nodes = { id: 1, items: [{ id: 2, items: [{ id: 3 }, { id: 4 }] }] };\n    filesState.files = nodes;\n    function test() {\n        $inspect.trace();\n        filesState.files.items[0].parent = filesState.files;\n    }\n    $effect(test);\n</script>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-class/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'Counter.#count', highlighted: false },\n\t\t\t{ log: 0 }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'Counter.#count', highlighted: false },\n\t\t\t{ log: 1 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-class/main.svelte",
    "content": "<script>\n\tclass Counter {\n\t\t#count;\n\n\t\tconstructor() {\n\t\t\tthis.#count = $state(0);\n\t\t}\n\n\t\tget count() {\n\t\t\treturn this.#count;\n\t\t}\n\n\t\tincrement = () => {\n\t\t\tthis.#count += 1;\n\t\t}\n\t}\n\n\tconst counter = new Counter();\n\n\t$effect(() => {\n\t\t$inspect.trace('effect');\n\t\tcounter.count;\n\t});\n</script>\n\n<button onclick={counter.increment}>\n\tclicks: {counter.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-each/Entry.svelte",
    "content": "<script>\n\tlet { entry } = $props();\n\n\t$effect(() => {\n\t\t$inspect.trace('effect');\n\t\tentry;\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'array', highlighted: false },\n\t\t\t{ log: [{ id: 1, hi: true }] },\n\t\t\t// this _doesn't_ appear in the browser, but it does appear during tests\n\t\t\t// and i cannot for the life of me figure out why. this does at least\n\t\t\t// test that we don't log `array[0].id` etc\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'array[0]', highlighted: false },\n\t\t\t{ log: { id: 1, hi: true } }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'array', highlighted: false },\n\t\t\t{ log: [{ id: 1, hi: false }] },\n\t\t\t{ log: '$state', highlighted: false },\n\t\t\t{ log: 'array[0]', highlighted: false },\n\t\t\t{ log: { id: 1, hi: false } }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-each/main.svelte",
    "content": "<script>\n\timport Entry from './Entry.svelte';\n\n\tlet array = $state([{ id: 1, hi: true }]);\n</script>\n\n<button onclick={() => array = [{ id: 1, hi: false}]}>update</button>\n\n{#each array as entry (entry.id)}\n\t<Entry {entry} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\t// initial log, everything is highlighted\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'iife' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 0 },\n\t\t\t{ log: 'effect' }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'iife' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 1 },\n\t\t\t{ log: 'effect' }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t$effect(() => {\n\t\t$inspect.trace('effect');\n\t\t(()=>{\n\t\t\t$inspect.trace(\"iife\");\n\t\t\tcount;\n\t\t})();\n\t});\n</script>\n\n<button onclick={() => count++}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-null/_config.js",
    "content": "import { assert } from 'vitest';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ logs }) {\n\t\tassert.ok(logs.length > 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-null/main.svelte",
    "content": "<script>\n\tlet count = $state(null);\n\t$effect(() => {\n\t\t$inspect.trace();\n\t\tcount;\n\t});\n</script>\n\n<button onclick={()=>count++}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\t// initial log, everything is highlighted\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: false }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tconst input = target.querySelector('input');\n\t\tinput?.click();\n\t\tflushSync();\n\n\t\t// checked changed, effect reassign state, values should be correct and be correctly highlighted\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: true },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 2 },\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: false },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: true },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 3 },\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: '$state', highlighted: false },\n\t\t\t{ log: 'checked', highlighted: false },\n\t\t\t{ log: true },\n\t\t\t{ log: '$state', highlighted: true },\n\t\t\t{ log: 'count', highlighted: false },\n\t\t\t{ log: 3 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet checked = $state(false);\n\n\t$effect(() => {\n\t\t$inspect.trace(\"effect\");\n\t\tif(checked && count > 0 && count < 3){\n\t\t\tlet old = count;\n\t\t\t// this should not show up in the logs\n\t\t\tcount = 1000;\n\t\t\tcount = old + 1;\n\t\t}\n\t});\n</script>\n<input type=\"checkbox\" bind:checked />\n<button onclick={()=>{\n\tcount++;\n}}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-store/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { normalise_trace_logs } from '../../../helpers.js';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: 'store', highlighted: true },\n\t\t\t{ log: '$count', highlighted: false },\n\t\t\t{ log: 0 }\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tconst [button] = target.querySelectorAll('button');\n\t\tflushSync(() => button.click());\n\n\t\tassert.deepEqual(normalise_trace_logs(logs), [\n\t\t\t{ log: 'effect' },\n\t\t\t{ log: 'store', highlighted: true },\n\t\t\t{ log: '$count', highlighted: false },\n\t\t\t{ log: 1 }\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-trace-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst count = writable(0);\n\n\t$effect(() => {\n\t\t$inspect.trace('effect');\n\t\t$count;\n\t});\n</script>\n\n<button onclick={() => $count += 1}>\n\tclicks: {$count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-with-untracked/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ assert, target, logs }) {\n\t\tconst [a, b] = target.querySelectorAll('button');\n\t\tassert.deepEqual(logs, ['init', 0]);\n\t\tflushSync(() => {\n\t\t\tb?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['init', 0]);\n\t\tflushSync(() => {\n\t\t\ta?.click();\n\t\t});\n\t\tassert.deepEqual(logs, ['init', 0, 'update', 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/inspect-with-untracked/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\n\tlet b = $state(0);\n\n\t$inspect(a).with((...args)=>{\n\t\tconsole.log(...args);\n\t\tb;\n\t});\n</script>\n\n<button onclick={()=>a++}></button>\n<button onclick={()=>b++}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<p></p><h1>foo</h1><p></p><form></form>`,\n\n\trecover: true,\n\n\tmode: ['hydrate'],\n\n\terrors: [\n\t\t'node_invalid_placement_ssr: `<h1>` (h1.svelte:1:0) cannot be a child of `<p>` (main.svelte:6:0)\\n\\nThis can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.',\n\t\t'node_invalid_placement_ssr: `<form>` (form.svelte:1:0) cannot be a child of `<form>` (main.svelte:9:0)\\n\\nThis can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.'\n\t],\n\n\twarnings: [\n\t\t'Hydration failed because the initial UI does not match what was rendered on the server'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr/form.svelte",
    "content": "<form></form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr/h1.svelte",
    "content": "<h1>foo</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr/main.svelte",
    "content": "<script>\n\timport Form from './form.svelte';\n\timport H1 from './h1.svelte';\n</script>\n\n<p>\n\t<H1 />\n</p>\n<form>\n\t<Form />\n</form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr-ancestor/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<form><div></div></form>`,\n\n\trecover: true,\n\n\tmode: ['hydrate'],\n\n\terrors: [\n\t\t'node_invalid_placement_ssr: `<form>` (form.svelte:1:0) cannot be a descendant of `<form>` (main.svelte:5:0)\\n\\nThis can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.'\n\t],\n\n\twarnings: [\n\t\t'Hydration failed because the initial UI does not match what was rendered on the server'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr-ancestor/form.svelte",
    "content": "<form></form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalid-html-ssr-ancestor/main.svelte",
    "content": "<script>\n\timport Form from './form.svelte';\n</script>\n\n<form>\n\t<div>\n\t\t<Form />\n\t</div>\n</form>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalidate-effect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, 'a\\n<select></select><button>change</button');\n\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'a\\n<select></select>b\\n<select></select><button>change</button'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/invalidate-effect/main.svelte",
    "content": "<script>\n\tlet entries = $state([{selected: 'a'}])\n</script>\n\n{#each entries as entry}\n\t{entry.selected} <select bind:value={entry.selected}></select>\n{/each}\n\n<button\n\ton:click={\n\t\t() => entries = [{selected: 'a'}, {selected: 'b'}]\n\t}\n\t>change</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/key-nan/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>update</button><p>it rendered</p>',\n\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['rendering']);\n\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => btn?.click());\n\n\t\t// should not re-render\n\t\tassert.deepEqual(logs, ['rendering']);\n\t\tassert.htmlEqual(target.innerHTML, '<button>update</button><p>it rendered</p>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/key-nan/main.svelte",
    "content": "<script>\n\tlet x = $state(NaN);\n</script>\n\n<button onclick={() => x = NaN}>update</button>\n\n{#key x}\n\t{console.log('rendering')}\n\t<p>it rendered</p>\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/key-unchanged-value/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['rendering']);\n\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => btn?.click());\n\n\t\tassert.deepEqual(logs, ['rendering']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/key-unchanged-value/main.svelte",
    "content": "<script>\n\tlet inner = Symbol();\n\tlet outer = $state({ inner });\n</script>\n\n<button onclick={() => outer = { inner }}>update</button>\n\n{#key outer.inner}\n\t{console.log('rendering')}\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-class-transformation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcompatibility: {\n\t\t\tcomponentApi: 4\n\t\t}\n\t},\n\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\n\t\tassert.htmlEqual(target.innerHTML, `<div><p>1</p></div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-class-transformation/inner.svelte",
    "content": "<script>\n  let { num } = $props();\n</script>\n\n<p>{num}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-class-transformation/main.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n  import Inner from './inner.svelte';\n\n  let target;\n  onMount(() => {\n    new Inner({ target, props: {num: 1}})\n  })\n</script>\n\n<div bind:this={target}></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-recursive-reactive-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, [\n\t\t\t'Detected a migrated `$:` reactive block in `main.svelte` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-recursive-reactive-block/main.svelte",
    "content": "<script>\n\timport { run } from 'svelte/legacy';\n\n\tlet count = $state(0);\n\n\trun(() => {\n\t\tcount = count+1;\n\t});\n</script>\n\n{count}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n</script>\n\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-explicit-false/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '0');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-explicit-false/main.svelte",
    "content": "<svelte:options runes={false} />\n<script>\n\timport { get, set } from \"./test.svelte.js\";\n</script>\n\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-explicit-false/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-$$props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '0');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-$$props/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n\n\t$$props;\n</script>\n\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-$$props/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-$$restProps/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '0');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-$$restProps/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n\n\t$$restProps;\n</script>\n\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-$$restProps/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-const/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-const/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n\n\texport const x = 42;\n</script>\n\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-const/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-labeled/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target, logs }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '0');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-labeled/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n\n\t$: console.log(\"\");\n</script>\n\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-labeled/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-let/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '0');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-let/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n\n\tlet x = 42;\n\n\texport { x };\n</script>\n\n{x}\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-let/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-let-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\trunes: undefined\n\t},\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '0');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-let-2/main.svelte",
    "content": "<script>\n\timport { get, set } from \"./test.svelte.js\";\n\n\texport let x = 42;\n</script>\n\n{x}\n<p>{get()}</p>\n\n<button onclick={()=>set()}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/legacy-runes-ambiguous-export-let-2/test.svelte.js",
    "content": "let count = $state(0);\n\nexport function get() {\n\treturn count;\n}\n\nexport function set() {\n\tcount++;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children/Item.svelte",
    "content": "<script>\n\tlet { index, n } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`${index}: render ${n}`);\n\t\treturn index;\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`${index}: $effect.pre ${n}`);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`${index}: $effect ${n}`);\n\t});\n</script>\n\n<li>\n\t{logRender()}\n</li>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { n: 0 };\n\t},\n\n\tasync test({ assert, component, logs }) {\n\t\tassert.deepEqual(logs, [\n\t\t\t'parent: $effect.pre 0',\n\t\t\t'1: $effect.pre 0',\n\t\t\t'1: render 0',\n\t\t\t'2: $effect.pre 0',\n\t\t\t'2: render 0',\n\t\t\t'3: $effect.pre 0',\n\t\t\t'3: render 0',\n\t\t\t'parent: render 0',\n\t\t\t'1: $effect 0',\n\t\t\t'2: $effect 0',\n\t\t\t'3: $effect 0',\n\t\t\t'parent: $effect 0'\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tflushSync(() => (component.n += 1));\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'parent: $effect.pre 1',\n\t\t\t'1: $effect.pre 1',\n\t\t\t'1: render 1',\n\t\t\t'2: $effect.pre 1',\n\t\t\t'2: render 1',\n\t\t\t'3: $effect.pre 1',\n\t\t\t'3: render 1',\n\t\t\t'parent: render 1',\n\t\t\t'1: $effect 1',\n\t\t\t'2: $effect 1',\n\t\t\t'3: $effect 1',\n\t\t\t'parent: $effect 1'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children/main.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\n\tlet { n = 0 } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`parent: render ${n}`);\n\t\treturn 'parent';\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`parent: $effect.pre ${n}`);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`parent: $effect ${n}`);\n\t});\n</script>\n\n{logRender()}\n<ul>\n\t{#each [1,2,3] as index}\n\t\t<Item {index} {n} />\n\t{/each}\n</ul>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-2/Item.svelte",
    "content": "<script>\n\tlet { index, n } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`${index}: render ${n}`);\n\t\treturn index;\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`${index}: $effect.pre ${n}`);\n\t});\n\n\t$effect.pre(() => {\n\t\tconsole.log(`${index}: $effect.pre (2) ${n}`);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`${index}: $effect ${n}`);\n\t});\n</script>\n\n<li>\n\t{logRender()}\n</li>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { n: 0 };\n\t},\n\n\tasync test({ assert, component, logs }) {\n\t\tassert.deepEqual(logs, [\n\t\t\t'parent: $effect.pre 0',\n\t\t\t'parent: $effect.pre (2) 0',\n\t\t\t'1: $effect.pre 0',\n\t\t\t'1: $effect.pre (2) 0',\n\t\t\t'1: render 0',\n\t\t\t'2: $effect.pre 0',\n\t\t\t'2: $effect.pre (2) 0',\n\t\t\t'2: render 0',\n\t\t\t'3: $effect.pre 0',\n\t\t\t'3: $effect.pre (2) 0',\n\t\t\t'3: render 0',\n\t\t\t'parent: render 0',\n\t\t\t'1: $effect 0',\n\t\t\t'2: $effect 0',\n\t\t\t'3: $effect 0',\n\t\t\t'parent: $effect 0'\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tflushSync(() => (component.n += 1));\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'parent: $effect.pre 1',\n\t\t\t'parent: $effect.pre (2) 1',\n\t\t\t'1: $effect.pre 1',\n\t\t\t'1: $effect.pre (2) 1',\n\t\t\t'1: render 1',\n\t\t\t'2: $effect.pre 1',\n\t\t\t'2: $effect.pre (2) 1',\n\t\t\t'2: render 1',\n\t\t\t'3: $effect.pre 1',\n\t\t\t'3: $effect.pre (2) 1',\n\t\t\t'3: render 1',\n\t\t\t'parent: render 1',\n\t\t\t'1: $effect 1',\n\t\t\t'2: $effect 1',\n\t\t\t'3: $effect 1',\n\t\t\t'parent: $effect 1'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-2/main.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\n\tlet { n = 0 } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`parent: render ${n}`);\n\t\treturn 'parent';\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`parent: $effect.pre ${n}`);\n\t});\n\n\t$effect.pre(() => {\n\t\tconsole.log(`parent: $effect.pre (2) ${n}`);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`parent: $effect ${n}`);\n\t});\n</script>\n\n{logRender()}\n<ul>\n\t{#each [1,2,3] as index}\n\t\t<Item {index} {n} />\n\t{/each}\n</ul>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-3/Item.svelte",
    "content": "<script>\n\tlet { index, n } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`${index}: render ${n}`);\n\t\treturn index;\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`${index}: $effect.pre ${n}`);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`${index}: $effect ${n}`);\n\t});\n</script>\n\n<li>\n\t{logRender()}\n</li>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { n: 0 };\n\t},\n\n\tasync test({ assert, component, logs }) {\n\t\tassert.deepEqual(logs, [\n\t\t\t'1: $effect.pre 0',\n\t\t\t'1: render 0',\n\t\t\t'2: $effect.pre 0',\n\t\t\t'2: render 0',\n\t\t\t'3: $effect.pre 0',\n\t\t\t'3: render 0',\n\t\t\t'parent: render 0',\n\t\t\t'1: $effect 0',\n\t\t\t'2: $effect 0',\n\t\t\t'3: $effect 0',\n\t\t\t'parent: $effect 0'\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tflushSync(() => (component.n += 1));\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'1: $effect.pre 1',\n\t\t\t'1: render 1',\n\t\t\t'2: $effect.pre 1',\n\t\t\t'2: render 1',\n\t\t\t'3: $effect.pre 1',\n\t\t\t'3: render 1',\n\t\t\t'parent: render 1',\n\t\t\t'1: $effect 1',\n\t\t\t'2: $effect 1',\n\t\t\t'3: $effect 1',\n\t\t\t'parent: $effect 1'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-3/main.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\n\tlet { n = 0 } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`parent: render ${n}`);\n\t\treturn 'parent';\n\t}\n\n\t$effect(() => {\n\t\tconsole.log(`parent: $effect ${n}`);\n\t});\n</script>\n\n{logRender()}\n<ul>\n\t{#each [1,2,3] as index}\n\t\t<Item {index} {n} />\n\t{/each}\n</ul>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-4/Item.svelte",
    "content": "<script>\n\tlet { index, n } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`${index}: render ${n}`);\n\t\treturn index;\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`${index}: $effect.pre ${n}`);\n\n\t\t$effect.pre(() => {\n\t\t\tconsole.log(`${index}: nested $effect.pre ${n}`);\n\t\t});\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`${index}: $effect ${n}`);\n\t});\n</script>\n\n<li>\n\t{logRender()}\n</li>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { n: 0 };\n\t},\n\n\tasync test({ assert, component, logs }) {\n\t\tassert.deepEqual(logs, [\n\t\t\t'parent: $effect.pre 0',\n\t\t\t'parent: nested $effect.pre 0',\n\t\t\t'1: $effect.pre 0',\n\t\t\t'1: nested $effect.pre 0',\n\t\t\t'1: render 0',\n\t\t\t'2: $effect.pre 0',\n\t\t\t'2: nested $effect.pre 0',\n\t\t\t'2: render 0',\n\t\t\t'3: $effect.pre 0',\n\t\t\t'3: nested $effect.pre 0',\n\t\t\t'3: render 0',\n\t\t\t'parent: render 0',\n\t\t\t'1: $effect 0',\n\t\t\t'2: $effect 0',\n\t\t\t'3: $effect 0',\n\t\t\t'parent: $effect 0'\n\t\t]);\n\n\t\tlogs.length = 0;\n\n\t\tflushSync(() => (component.n += 1));\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'parent: $effect.pre 1',\n\t\t\t'parent: nested $effect.pre 1',\n\t\t\t'1: $effect.pre 1',\n\t\t\t'1: nested $effect.pre 1',\n\t\t\t'1: render 1',\n\t\t\t'2: $effect.pre 1',\n\t\t\t'2: nested $effect.pre 1',\n\t\t\t'2: render 1',\n\t\t\t'3: $effect.pre 1',\n\t\t\t'3: nested $effect.pre 1',\n\t\t\t'3: render 1',\n\t\t\t'parent: render 1',\n\t\t\t'1: $effect 1',\n\t\t\t'2: $effect 1',\n\t\t\t'3: $effect 1',\n\t\t\t'parent: $effect 1'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-4/main.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\n\tlet { n = 0 } = $props();\n\n\tfunction logRender () {\n\t\tconsole.log(`parent: render ${n}`);\n\t\treturn 'parent';\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`parent: $effect.pre ${n}`);\n\n\t\t$effect.pre(() => {\n\t\t\tconsole.log(`parent: nested $effect.pre ${n}`);\n\t\t});\n\t});\n\n\t$effect(() => {\n\t\tconsole.log(`parent: $effect ${n}`);\n\t});\n</script>\n\n{logRender()}\n<ul>\n\t{#each [1,2,3] as index}\n\t\t<Item {index} {n} />\n\t{/each}\n</ul>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-5/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn { n: 0 };\n\t},\n\n\tasync test({ assert, component, logs }) {\n\t\tassert.deepEqual(logs, ['$effect.pre 0', 'another $effect.pre 1', 'render n0', 'render i1']);\n\n\t\tlogs.length = 0;\n\t\tflushSync(() => (component.n += 1));\n\n\t\tassert.deepEqual(logs, ['$effect.pre 1', 'another $effect.pre 2', 'render n1', 'render i2']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-5/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\n\tlet { n = 0 } = $props();\n\tlet i = $state(0);\n\n\tfunction logRender(i) {\n\t\tconsole.log(`render ${i}`);\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`$effect.pre ${n}`);\n\t\tuntrack(() => i++)\n\t});\n\n\t$effect.pre(() => {\n\t\tconsole.log('another $effect.pre '+ i);\n\t})\n</script>\n\n<p>{logRender(`n${n}`)}</p>\n<p>{logRender(`i${i}`)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-6/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, [0, 1, 2, 3, 4, 5, 6]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-6/main.svelte",
    "content": "<script>\n\tfunction create_action() {\n\t\tlet index = 0;\n\t\treturn () => {\n\t\t\tconsole.log(index++);\n\t\t};\n\t}\n\n\tconst content = create_action();\n</script>\n\n{#if true}\n\t<div use:content></div>\n{/if}\n\n<div use:content></div>\n\n{#each { length: 5 } as _}\n\t<div>\n\t\t<div use:content></div>\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/manual-mount/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>toggle</button><div></div>`,\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tawait button?.click();\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button><div><button>0</button></div>`);\n\n\t\tconst inner_button = target.querySelector('div')?.querySelector('button');\n\n\t\tinner_button?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button><div><button>2</button></div>`);\n\n\t\tawait button?.click();\n\t\tassert.htmlEqual(target.innerHTML, `<button>toggle</button><div></div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/manual-mount/inner.svelte",
    "content": "<script>\n\timport { createEventDispatcher, getContext } from \"svelte\";\n\n    let { count } = $props();\n    const multiply = getContext('multiply');\n\n    // Use legacy createEventDispatcher here to test that `events` property in `mount` works\n    const dispatch = createEventDispatcher();\n</script>\n\n<button onclick={() => dispatch('update', count + 1 * multiply)}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/manual-mount/main.svelte",
    "content": "<script>\n\timport { mount, unmount } from 'svelte';\n\timport Inner from './inner.svelte';\n\n\tlet el;\n\tlet component;\n\tlet props = $state({count: 0});\n\n\tfunction toggle() {\n\t\tif (component) {\n\t\t\tunmount(component);\n\t\t\tcomponent = null;\n\t\t} else {\n\t\t\tcomponent = mount(Inner, { target: el, props, context: new Map([['multiply', 2]]), events: { update: (e) => props.count = e.detail } });\n\t\t}\n\t}\n</script>\n\n<button onclick={toggle}>toggle</button>\n<div bind:this={el}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mathml-namespace-infer/Wrapper.svelte",
    "content": "<mrow></mrow>\n\n{#if true}\n  <mrow></mrow>\n{/if}\n\n{#each Array(2).fill(0) as item, idx}\n  <mrow></mrow>\n{/each}\n\n{@html '<mrow></mrow>'}\n\n{@render test()}\n\n{#snippet test(text)}\n<mrow></mrow>\n{/snippet}\n\n<!-- comment should not infer html namespace -->\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mathml-namespace-infer/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\thtml: `\n\t<math>\n\t\t<mrow></mrow>\n\t\t<mrow></mrow>\n\t\t<mrow></mrow>\n\t\t<mrow></mrow>\n\t\t<mrow></mrow>\n\t\t<mrow></mrow>\n\t</math>\n`,\n\ttest({ assert, target }) {\n\t\tconst math = target.querySelector('math');\n\t\tok(math);\n\n\t\tassert.equal(math.namespaceURI, 'http://www.w3.org/1998/Math/MathML');\n\n\t\tconst mrow_elements = target.querySelectorAll('mrow');\n\n\t\tassert.equal(mrow_elements.length, 6);\n\n\t\tfor (const { namespaceURI } of mrow_elements)\n\t\t\tassert.equal(namespaceURI, 'http://www.w3.org/1998/Math/MathML');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mathml-namespace-infer/main.svelte",
    "content": "<script>\n  import Wrapper from \"./Wrapper.svelte\";\n</script>\n\n<math>\n  <Wrapper />\n</math>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/media-query/_config.js",
    "content": "import { expect } from 'vitest';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ window }) {\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('(max-width: 599px), (min-width: 900px)');\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('(min-width: 900px)');\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('screen');\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('not print');\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('screen,print');\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('screen,      print');\n\t\texpect(window.matchMedia).toHaveBeenCalledWith('screen,      random');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/media-query/main.svelte",
    "content": "<script>\n\timport { MediaQuery } from \"svelte/reactivity\"\n\n\tconst mq = new MediaQuery(\"(max-width: 599px), (min-width: 900px)\");\n\tconst mq2 = new MediaQuery(\"min-width: 900px\");\n\tconst mq3 = new MediaQuery(\"screen\");\n\tconst mq4 = new MediaQuery(\"not print\");\n\tconst mq5 = new MediaQuery(\"screen,print\");\n\tconst mq6 = new MediaQuery(\"screen,      print\");\n\tconst mq7 = new MediaQuery(\"screen,      random\");\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/member-expression-component/Row.svelte",
    "content": "<script>\n\tlet { id } = $props();\n</script>\n\n<span>{id}</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/member-expression-component/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>flip</button> <span>0</span><span>1</span><span>2</span>`,\n\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>flip</button> <span>2</span><span>1</span><span>0</span>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/member-expression-component/main.svelte",
    "content": "<script>\n\timport Row from './Row.svelte';\n\n\tconst items = $state([{ id: 0 }, { id: 1 }, { id: 2 }]);\n\n\tconst Table = { Row };\n</script>\n\n<button onclick={() => items.reverse()}> flip </button>\n\n{#each items as item (item.id)}\n\t<Table.Row id={item.id} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/member-mutation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>person.name.first = \"dave\"</button><h3>JSON output</h3><div>[{\"name\":{\"first\":\"rob\"}}]</div>`,\n\n\tasync test({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>person.name.first = \"dave\"</button><h3>JSON output</h3><div>[{\"name\":{\"first\":\"dave\"}}]</div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/member-mutation/main.svelte",
    "content": "<script>\n\tlet people = $state([{name:{first:'rob'}}]);\n</script>\n\n{#each people as person}\n\t<button on:click={()=>{\n\t\tperson.name.first = \"dave\";\n\t\tpeople = people;\n\t}}>person.name.first = \"dave\"</button>\n{/each}\n\n<h3>JSON output</h3>\n{#each people as person}\n\t<div>{JSON.stringify(people)}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/module-context-export/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>42</p>`,\n\n\tasync test({ assert, target, window, component }) {\n\t\tassert.equal(component.answer, undefined);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/module-context-export/main.svelte",
    "content": "<svelte:options runes />\n\n<script module>\n\texport const answer = 42;\n</script>\n\n<p>{answer}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-intro-transition/Component.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n</script>\n\n<div in:fade|global={{ duration: 100 }}>DIV</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-intro-transition/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, raf }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(div.innerHTML, `<div style=\"opacity: 0;\">DIV</div>`);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(div.innerHTML, `<div style=\"\">DIV</div>`);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(div.innerHTML, `<div>DIV</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-intro-transition/main.svelte",
    "content": "<script>\n\timport { mount, unmount } from 'svelte';\n\timport Component from './Component.svelte';\n\n\tlet el;\n\tlet instance;\n\n\tfunction intro(animate) {\n\t\tif (instance) unmount(instance);\n\n\t\tinstance = mount(Component, {\n\t\t\ttarget: el,\n\t\t\tintro: animate\n\t\t});\n\t}\n</script>\n\n<div bind:this={el}></div>\n\n<button onclick={() => intro()}>mount with intro transition</button>\n<button onclick={() => intro(false)}>mount without intro transition</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-props-updates/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t// The buz fallback does not propagate back up\n\t\t\t`\n\t\t\t<button>reset</button> foo baz\n\t\t\t<div><button>update</button> foo bar baz buz</div>\n\t\t\t<div><button>update</button> foo bar baz buz</div>\n\t\t\t`\n\t\t);\n\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tbtn2.click();\n\t\tbtn3.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t// bar is not set in the parent because it's a readonly property\n\t\t\t// baz is not set in the parent because while it's a bindable property,\n\t\t\t// it wasn't set initially so it's treated as a readonly property\n\t\t\t`\n\t\t\t<button>reset</button> foo 3\n\t\t\t<div><button>update</button> 1 2 3 4</div>\n\t\t\t<div><button>update</button> 1 2 3 4</div>\n\t\t\t`\n\t\t);\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t// Because foo is a readonly property, component.svelte diverges locally from it,\n\t\t\t// and the passed in property keeps the initial value of foo. This is why it stays\n\t\t\t// at 1, because foo is not updated to a different value.\n\t\t\t`\n\t\t\t\t<button>reset</button> foo bar baz buz\n\t\t\t<div><button>update</button> 1 bar baz buz</div>\n\t\t\t<div><button>update</button> 1 bar baz buz</div>\n\t\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-props-updates/component.svelte",
    "content": "<script>\n\tlet { foo, bar = 'bar', baz = $bindable(), buz = $bindable('buz') } = $props();\n</script>\n\n<button\n\tonclick={() => {\n\t\tfoo = '1';\n\t\tbar = '2';\n\t\tbaz = '3';\n\t\tbuz = '4';\n\t}}>update</button\n>\n\n{foo}\n{bar}\n{baz}\n{buz}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-props-updates/main.svelte",
    "content": "<script>\n\timport { createClassComponent } from 'svelte/legacy';\n\timport Component from './component.svelte';\n\timport { mount, onMount } from 'svelte';\n\n\tlet div1, div2;\n\tlet legacy;\n\tconst props = $state({ foo: 'foo', baz: 'baz' });\n\n\tonMount(() => {\n\t\tlegacy = createClassComponent({\n\t\t\tcomponent: Component,\n\t\t\ttarget: div1,\n\t\t\tprops: { foo: 'foo', baz: 'baz' }\n\t\t});\n\t\tmount(Component, { target: div2, props });\n\t});\n</script>\n\n<button\n\tonclick={() => {\n\t\tlegacy.$set({ foo: 'foo', bar: 'bar', baz: 'baz', buz: 'buz' });\n\t\tprops.foo = 'foo';\n\t\tprops.bar = 'bar';\n\t\tprops.baz = 'baz';\n\t\tprops.buz = 'buz';\n\t}}>reset</button\n> {props.foo} {props.bar} {props.baz} {props.buz}\n<div bind:this={div1}></div>\n<div bind:this={div2}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-unmount-anchor/Component.svelte",
    "content": "<script>\n\tlet { text = 'hello' } = $props();\n</script>\n\n<p>{text}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-unmount-anchor/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tconst div = target.querySelector('div');\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>generate</button><div></div>');\n\t\tassert.equal(div?.childNodes.length, 0);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mount-unmount-anchor/main.svelte",
    "content": "<script>\n\timport { mount, unmount } from \"svelte\";\n\timport Component from \"./Component.svelte\";\n\n\tlet target;\n\n\tfunction generate() {\n\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\tlet myInnocentState = $state({text: \"hello\"})\n\t\t\tconst toUnmount = mount(Component, {\n\t\t\t\t\ttarget: target,\n\t\t\t\t\tprops: myInnocentState,\n\t\t\t});\n\t\t\tunmount(toUnmount);\n\t\t}\n\t}\n</script>\n\n<button onclick={generate}>generate</button>\n<div bind:this={target}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/multiple-head/MetaTag.svelte",
    "content": "<script>\n\tlet title = $state('Hello world');\n\tlet desc = $state('Some description');\n</script>\n<svelte:head>\n\t<title>{title}</title>\n\t<meta name=\"description\" content={desc}>\n\t<meta name=\"author\" content=\"@svelteawesome\">\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/multiple-head/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>Hello</div>`,\n\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.ownerDocument.head.innerHTML,\n\t\t\t`<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=12345\"></script><meta content=\"Some description\" name=\"description\"><meta content=\"@svelteawesome\" name=\"author\"><title>Hello world</title>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/multiple-head/main.svelte",
    "content": "<script>\n\timport MetaTag from './MetaTag.svelte'\n</script>\n<svelte:head>\n\t<script async src=\"https://www.googletagmanager.com/gtag/js?id=12345\"></script>\n</svelte:head>\n<MetaTag />\n\n<div>Hello</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutate-state-in-context-dev/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutate-state-in-context-dev/main.svelte",
    "content": "<script module>\n\tlet obj = $state({});\n\tobj.test = \"hi!\";\n</script>\n  \n<h1>Values: {JSON.stringify(obj)}</h1>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutation/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>1 / false</button>`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1 / true</button>`);\n\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>1 / false</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutation/main.svelte",
    "content": "<script>\n  let pending = $state([]);\n\n  function createTogglePending() {\n    const id = 1;\n    const togglePending = () => {\n      if (pending.includes(id)) {\n        pending = pending.filter((p) => p !== id);\n      } else {\n        pending = [...pending, id];\n      }\n    };\n    return {togglePending, id};\n  }\n\n  const toggle1 = createTogglePending();\n</script>\n\n<button on:click={toggle1.togglePending}>\n  {toggle1.id} / {pending.includes(toggle1.id)}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutation-both/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n  <span>0 * 2 = 0</span>\n  <button>Increase multiplier</button>\n  <button>Increase count</button>\n  `,\n\n\ttest({ assert, target, window }) {\n\t\tconst [multiplier, count] = target.querySelectorAll('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tconst span = /** @type {HTMLSpanElement} */ (target.querySelector('span'));\n\n\t\t/**\n\t\t * @param {number} count\n\t\t * @param {number} multiplier\n\t\t */\n\t\tconst expect_span_to_be = (count, multiplier) =>\n\t\t\tassert.htmlEqual(span.innerHTML, `${count} * ${multiplier} = ${count * multiplier}`);\n\n\t\tcount.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\texpect_span_to_be(1, 2);\n\n\t\tmultiplier.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\texpect_span_to_be(1, 3);\n\n\t\tcount.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\texpect_span_to_be(2, 3);\n\n\t\tmultiplier.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\texpect_span_to_be(2, 4);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutation-both/main.svelte",
    "content": "<script>\n  let count = $state(0);\n  const multiplier = () => {\n    let multiplier = $state(2);\n    let multiple = $derived(count * multiplier);\n\n    return {\n      get count() {\n        return multiple;\n      },\n      get multiplier() {\n        return multiplier;\n      },\n      inc: () => multiplier++,\n    };\n  };\n  const multiplied = multiplier();\n</script>\n\n<span>{count} * {multiplied.multiplier} = {multiplied.count}</span>\n<button on:click={multiplied.inc}>Increase multiplier</button>\n<button on:click={() => count++}>Increase count</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutation-local/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `2`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/mutation-local/main.svelte",
    "content": "<script>\n  function localMutation(input) {\n    // Tests that this does not become a signal which would cause an \"cannot mutate during render\" error\n    let x = input;\n    if (x > 0) {\n      x = 2;\n    }\n    return x;\n  }\n\n  const x = localMutation(1);\n</script>\n\n{x}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/muted-without-bind-works/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\t\tflushSync(() => {\n\t\t\tbtn.click();\n\t\t});\n\t\tassert.deepEqual(logs, [true]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/muted-without-bind-works/main.svelte",
    "content": "<script>\n\tlet muted = $state(false);\n\t\t\n\tfunction volume_change(node){\t\t\n\t\tnode.addEventListener(\"volumechange\", () => {\n\t\t\tconsole.log(node.muted);\n\t\t});\n\t}\n</script>\n\n<audio use:volume_change {muted}></audio>\n<button onclick={() => (muted = !muted)}></button>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/name-clash-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\trecover: true,\n\tmode: ['client']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/name-clash-hoisting/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tconst store = writable(0);\n\t\n\tasync function logStore() {\n\t\tconsole.log($store)\n\t\tstore.set(100);\n\t}\n</script>\n\n<button onclick={logStore}>Click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nested-destructure-assignment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>Update</button>\n\n\t\t<p>0</p>\n\t\t<p>b</p>\n\t\t<p>true</p>\n\t\t<p>0</p>\n\t\t<p>10</p>\n\t\t<p>12</p>\n\t\t<p>15</p>\n\t\t<p>16</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst button = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbutton?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Update</button>\n\n\t\t\t<p>5</p>\n\t\t\t<p>d</p>\n\t\t\t<p>false</p>\n\t\t\t<p>3</p>\n\t\t\t<p>100</p>\n\t\t\t<p>120</p>\n\t\t\t<p>25</p>\n\t\t\t<p>26</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nested-destructure-assignment/main.svelte",
    "content": "<script>\n\tlet a = $state(0);\n\tlet b = $state(\"b\");\n\tlet c = $state(true);\n\tlet d = $state([]);\n\tlet e = $state({ x: 10, y: 12 });\n\tlet f = $state({ w: 15, v: 16 });\n\n\tfunction change() {\n\t\t({ d, e, g: [f.w, f.v] } = { d: ([a, b, c] = [5, \"d\", false]), e: { x: 100, y: 120 }, g: [25, 26] });\n\t}\n</script>\n\n<button on:click={change}>Update</button>\n\n<p>{a}</p>\n<p>{b}</p>\n<p>{c}</p>\n<p>{d.length}</p>\n<p>{e.x}</p>\n<p>{e.y}</p>\n<p>{f.w}</p>\n<p>{f.v}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nested-effect-conflict/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['top level', 'inner', 0, 'destroy inner', 0, 'destroy outer', 0]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nested-effect-conflict/main.svelte",
    "content": "<script>\n\tlet c = $state({ a: 0 });\n\n\t$effect(() => {\n\t\tconsole.log('top level')\n\t\t$effect(() => {\n\t\t\tif (c) {\n\t\t\t\t$effect(() => {\n\t\t\t\t\tconsole.log('inner',c.a);\n\t\t\t\t\treturn () => console.log('destroy inner', c?.a);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn () => console.log('destroy outer', c?.a);\n\t\t});\n\t});\n</script>\n\n<button onclick={() => {\n\tc.a = 1; c = null\n}}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nested-script-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['init']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nested-script-tag/main.svelte",
    "content": "<div>\n\t<script>\n\t\tconsole.log('init');\n\t</script>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/new-branch-reschedule/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [open, close, increment] = target.querySelectorAll('button');\n\n\t\topen.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Open</button>\n\t\t\t\t<button>Close</button>\n\t\t\t\t<button>0</button>\n\t\t\t\t<div>open (width: 42)</div>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Open</button>\n\t\t\t\t<button>Close</button>\n\t\t\t\t<button>1</button>\n\t\t\t\t<div>open (width: 42)</div>\n\t\t\t`\n\t\t);\n\n\t\tclose.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Open</button>\n\t\t\t\t<button>Close</button>\n\t\t\t\t<button>1</button>\n\t\t\t\t<div>closed</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/new-branch-reschedule/main.svelte",
    "content": "<script module>\n\tlet active = $state(false);\n\tlet panelWidth = $state(null);\n\n\tconst store = {\n\t\tget active() { return active; },\n\t\topen() { active = true; },\n\t\tclose() { active = false; },\n\t\t// This getter lazily writes $state on first read\n\t\tget panelWidth() {\n\t\t\tif (panelWidth === null) panelWidth = 42;\n\t\t\treturn panelWidth;\n\t\t}\n\t};\n</script>\n\n<script>\n\tlet counter = $state(0);\n</script>\n\n<button onclick={() => store.open()}>Open</button>\n<button onclick={() => store.close()}>Close</button>\n<button onclick={() => counter++}>{counter}</button>\n\n<div>\n\t{#if store.active}\n\t\topen (width: {store.panelWidth})\n\t{:else}\n\t\tclosed\n\t{/if}\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/new-branch-reschedule-2/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [open, close, increment] = target.querySelectorAll('button');\n\n\t\topen.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Open</button>\n\t\t\t\t<button>Close</button>\n\t\t\t\t<button>0</button>\n\t\t\t\t<div>open (width: 42)</div>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Open</button>\n\t\t\t\t<button>Close</button>\n\t\t\t\t<button>1</button>\n\t\t\t\t<div>open (width: 42)</div>\n\t\t\t`\n\t\t);\n\n\t\tclose.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>Open</button>\n\t\t\t\t<button>Close</button>\n\t\t\t\t<button>1</button>\n\t\t\t\t<div>closed</div>\n\t\t\t`\n\t\t);\n\n\t\tassert.deepEqual(logs, ['effect ran']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/new-branch-reschedule-2/main.svelte",
    "content": "<script module>\n\tlet active = $state(false);\n\tlet panelWidth = $state(null);\n\n\tconst store = {\n\t\tget active() { return active; },\n\t\topen() { active = true; },\n\t\tclose() { active = false; },\n\t\t// This getter lazily writes $state on first read\n\t\tget panelWidth() {\n\t\t\tif (panelWidth === null) panelWidth = 42;\n\n\t\t\t$effect(() => {\n\t\t\t\tconsole.log('effect ran');\n\t\t\t});\n\n\t\t\treturn panelWidth;\n\t\t}\n\t};\n</script>\n\n<script>\n\tlet counter = $state(0);\n</script>\n\n<button onclick={() => store.open()}>Open</button>\n<button onclick={() => store.close()}>Close</button>\n<button onclick={() => counter++}>{counter}</button>\n\n<div>\n\t{#if store.active}\n\t\topen (width: {store.panelWidth})\n\t{:else}\n\t\tclosed\n\t{/if}\n</div>\n "
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-configurable-errors/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\terror: 'test'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-configurable-errors/main.svelte",
    "content": "<script>\n\tclass CustomError extends Error {\n\t  constructor() {\n\t    super();\n\t    Object.defineProperty(this, \"message\", {\n\t\t\tvalue: \"test\"\n\t\t});\n\t  }\n\t}\n\tthrow new CustomError()\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-error-boundary-preserve-on-error/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [button] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tflushSync(() => button.click());\n\t\t}, /oops/);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>throw</button>\n\t\t\t\t<p>some content</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-error-boundary-preserve-on-error/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet should_throw = $state(false);\n\n\tfunction throw_error() {\n\t\tthrow new Error('oops');\n\t}\n</script>\n\n<button onclick={() => should_throw = true}>\n\tthrow\n</button>\n\n<svelte:boundary>\n\t<p>some content</p>\n\n\t{#if should_throw}\n\t\t{throw_error()}\n\t{/if}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-discouraged/Counter.svelte",
    "content": "<script>\n\tlet { object = $bindable(), reset } = $props();\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n<button onclick={reset}>reset</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-discouraged/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button> <button>reset</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings }) {\n\t\tconst warning =\n\t\t\t'Mutating unbound props (`object`, at Counter.svelte:5:23) is strongly discouraged. Consider using `bind:object={...}` in main.svelte (or using a callback) instead';\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button> <button>reset</button>`);\n\t\tassert.deepEqual(warnings, [warning]);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 0</button> <button>reset</button>`);\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button> <button>reset</button>`);\n\t\tassert.deepEqual(warnings, [warning, warning]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-discouraged/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\tlet object = $state({ count: 0 });\n</script>\n\n<Counter {object} reset={() => object = {count: 0}} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-global/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {typeof console.warn} */\nlet warn;\n\n/** @type {any[]} */\nlet warnings = [];\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tbefore_test: () => {\n\t\twarn = console.warn;\n\n\t\tconsole.warn = (...args) => {\n\t\t\twarnings.push(...args);\n\t\t};\n\t},\n\n\tafter_test: () => {\n\t\tconsole.warn = warn;\n\t\twarnings = [];\n\t},\n\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tawait tick();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-global/child.svelte",
    "content": "<script>\n\tlet { a = $bindable() } = $props();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-global/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n\timport { global } from './state.svelte.js';\n\tglobal.value.count = 0;\n</script>\n\n<!-- binding shouldn't accidentally narrow ownership when it's already global -->\n<Child bind:a={global.value} />\n\n<button onclick={() => global.value.count++}>\n\tclicks: {global.value.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-global/state.svelte.js",
    "content": "export const global = $state({ value: { count: 0 } });\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-1/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {typeof console.warn} */\nlet warn;\n\n/** @type {any[]} */\nlet warnings = [];\n\nexport default test({\n\thtml: `<button>[]</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tbefore_test: () => {\n\t\twarn = console.warn;\n\n\t\tconsole.warn = (...args) => {\n\t\t\twarnings.push(...args);\n\t\t};\n\t},\n\n\tafter_test: () => {\n\t\tconsole.warn = warn;\n\t\twarnings = [];\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>[foo]</button>`);\n\n\t\tassert.deepEqual(warnings, [], 'expected getContext to have widened ownership');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-1/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\timport Sub from './sub.svelte';\n\n\tlet list = $state([]);\n\tsetContext('list', list);\n</script>\n\n<Sub />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-1/sub.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte';\n\n\tconst list = getContext('list');\n</script>\n\n<button onclick={() => list.push('foo')}>[{list.join(',')}]</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.deepEqual(warnings.length, 0);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.deepEqual(warnings.length, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-2/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Sub from './sub.svelte';\n\timport { create_my_state } from './state.svelte';\n\n\tconst myState = create_my_state();\n</script>\n\n<Sub count={myState.my_state} inc={myState.inc} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-2/state.svelte.js",
    "content": "export function create_my_state() {\n\tconst my_state = $state({\n\t\ta: 0\n\t});\n\n\tfunction inc() {\n\t\tmy_state.a++;\n\t}\n\n\treturn {\n\t\tmy_state,\n\t\tinc\n\t};\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-2/sub.svelte",
    "content": "<script>\n\tlet { inc, count = $bindable() } = $props();\n</script>\n\n<button onclick={inc}>{count.a} (ok)</button>\n<button onclick={() => count.a++}>{count.a} (bad)</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-3/Child.svelte",
    "content": "<script>\n\tlet { item } = $props();\n\n\tfunction onclick() {\n\t\titem.name = `${item.name} edited`\n\t}\n</script>\n\n<div>{item?.name}</div>\n<button {onclick}>Then click here</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, warnings }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.deepEqual(warnings.length, 0);\n\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\n\t\tassert.deepEqual(warnings.length, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-inherited-owner-3/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet items = $state([{ id: \"test\", name: \"this is a test\"}, { id:\"test2\", name: \"this is a second test\"}]);\n\tlet found = $state();\n\n\tfunction onclick() {\n\t\tfound = items.find(c => c.id === 'test2');\n\t}\n</script>\n\n<button {onclick}>First click here</button>\n<Child item={found} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(warnings, []);\n\t},\n\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/child.svelte",
    "content": "<script>\n\tlet { klass, getter_setter } = $props();\n</script>\n\n<button onclick={() => {\n\tklass.y = 2;\n\tgetter_setter.y = 2;\n}}>mutate</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-ok/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n\n\tclass X {\n\t\ty = $state(1);\n\t}\n\n\tconst klass = new X();\n\n\tlet y = $state(1);\n\tconst getter_setter = {\n\t\tget y() {\n\t\t\treturn y;\n\t\t},\n\t\tset y(value) {\n\t\t\ty = value;\n\t\t}\n\t}\n</script>\n\n<Child {klass}  {getter_setter} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding/Counter.svelte",
    "content": "<script>\n\t/** @type {{ object: { count: number }}} */\n\tlet { object = $bindable() } = $props();\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {typeof console.warn} */\nlet warn;\n\n/** @type {any[]} */\nlet warnings = [];\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tbefore_test: () => {\n\t\twarn = console.warn;\n\n\t\tconsole.warn = (...args) => {\n\t\t\twarnings.push(...args);\n\t\t};\n\t},\n\n\tafter_test: () => {\n\t\tconsole.warn = warn;\n\t\twarnings = [];\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\tlet object = $state({ count: 0 });\n</script>\n\n<Counter bind:object={object} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-2/Counter.svelte",
    "content": "<script>\n\t/** @type {{ object: { count: number }}} */\n\tlet { object = $bindable() } = $props();\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-2/Intermediate.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\t/** @type {{ object: { count: number }}} */\n\tlet { object } = $props();\n</script>\n\n<Counter bind:object={object} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\twarnings: [\n\t\t'Intermediate.svelte passed property `object` to Counter.svelte with `bind:`, but its parent component main.svelte did not declare `object` as a binding. Consider creating a binding between main.svelte and Intermediate.svelte (e.g. `bind:object={...}` instead of `object={...}`)'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-2/main.svelte",
    "content": "<script>\n\timport Intermediate from './Intermediate.svelte';\n\n\tlet object = $state({ count: 0 });\n</script>\n\n<Intermediate object={object} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-3/Counter.svelte",
    "content": "<script>\n\t/** @type {{ shared: { count: number }, notshared: { count: number } }} */\n\tlet { shared = $bindable(), notshared } = $props();\n</script>\n\n<button onclick={() => shared.count += 1}>\n\tclicks: {shared.count}\n</button>\n\n<button onclick={() => notshared.count += 1}>\n\tclicks: {notshared.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-3/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n/** @type {typeof console.trace} */\nlet trace;\n\nexport default test({\n\thtml: `<button>clicks: 0</button><button>clicks: 0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tbefore_test: () => {\n\t\ttrace = console.trace;\n\n\t\tconsole.trace = () => {};\n\t},\n\n\tafter_test: () => {\n\t\tconsole.trace = trace;\n\t},\n\n\tasync test({ assert, target, warnings }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button><button>clicks: 0</button>`);\n\n\t\tassert.deepEqual(warnings, []);\n\n\t\tflushSync(() => btn2.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button><button>clicks: 1</button>`);\n\n\t\tassert.deepEqual(warnings, [\n\t\t\t'Mutating unbound props (`notshared`, at Counter.svelte:10:23) is strongly discouraged. Consider using `bind:notshared={...}` in main.svelte (or using a callback) instead'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-3/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\tlet object = $state({\n\t\tshared: { count: 0 },\n\t\tnotshared: { count: 0 }\n\t});\n</script>\n\n<Counter\n\tbind:shared={object.shared}\n\tnotshared={object.notshared}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-4/Inner.svelte",
    "content": "<script>\n\tlet { object = $bindable() } = $props();\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-4/Outer.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n{@render children?.()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-4/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte';\n\timport Inner from './Inner.svelte';\n\n\tlet object = $state({ count: 0 });\n</script>\n\n<Outer>\n\t<Inner bind:object />\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-5/Inner.svelte",
    "content": "<script>\n\tlet { object = $bindable() } = $props();\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-5/Outer.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n{@render children?.()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-5/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-5/main.svelte",
    "content": "<script>\n\timport Outer from './Outer.svelte';\n\timport Inner from './Inner.svelte';\n\n\tlet object = $state({ count: 0 });\n\tlet test = $state(true);\n</script>\n\n<Outer>\n\t<!-- check that render effects inside slotted content doesn't mess with ownership validation -->\n\t{#if test}\n\t\t<Inner bind:object />\n\t{/if}\n</Outer>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-6/Component1.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-6/Component2.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-6/Component3.svelte",
    "content": "<script lang=\"ts\">\n\tlet { count = $bindable() } = $props();\n</script>\n\n<button onclick={() => count.value++}>{count.value}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-6/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Tests that nested snippets preserve correct component function context so we don't get false positive warnings\nexport default test({\n\thtml: `<button>0</button>`,\n\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tbutton?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\t\tassert.deepEqual(warnings, []);\n\t},\n\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-6/main.svelte",
    "content": "<script>\n\timport Component1 from './Component1.svelte';\n\timport Component2 from './Component2.svelte';\n\timport Component3 from './Component3.svelte';\n\n\tlet count = $state({ value: 0 });\n</script>\n\n<Component1>\n\t<Component2>\n\t\t<Component3 bind:count></Component3>\n\t</Component2>\n</Component1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-7/Component1.svelte",
    "content": "<script>\n\timport Component2 from './Component2.svelte';\n\n\tlet { rows = $bindable([]) } = $props();\n\n\tlet rows2 = $state([]);\n\n\t$effect(() => {\n\t\trows2 = rows.slice();\n\t});\n</script>\n\n<Component2 bind:rows={rows2} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-7/Component2.svelte",
    "content": "<script>\n\tlet { rows = $bindable([]) } = $props();\n</script>\n\n{#if rows.length}\n\t<input type=\"checkbox\" bind:checked={rows[0].check} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-7/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.checked = true;\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tflushSync();\n\n\t\tassert.deepEqual(warnings, []);\n\t},\n\n\twarnings: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/non-local-mutation-with-binding-7/main.svelte",
    "content": "<script>\n\timport Component1 from './Component1.svelte';\n\n\tlet rows = $state([{}]);\n</script>\n\n<Component1 bind:rows />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/not-actual-runes/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n  <p>1 4 0</p>\n  <button>Shouldnt be reactive</button>\n  `,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n  \t\t\t<p>1 4 0</p>\n  \t\t\t<button>Shouldnt be reactive</button>\n  \t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/not-actual-runes/main.svelte",
    "content": "<script>\n    import { state, effect } from './store.js';\n\n    let foo = $state(0); // foo = 1\n    $effect(() => { throw new Error('Shouldnt be called')});\n\n    function bar($derived, $effect) {\n        const x = $derived(foo + 1); // x = 3\n        $effect(() => { throw new Error('Shouldnt be called')});\n        return {\n            get x() { return x + $derived(0) /* == 4 */ },\n            get y() { return $effect(() => { throw new Error('Shouldnt be called')}); /* == 0 */ }\n        }\n    }\n\n    const baz = bar($state, $effect);\n</script>\n\n<p>{foo} {baz.x} {baz.y}</p>\n<button on:click={() => foo = 5}>Shouldnt be reactive</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/not-actual-runes/store.js",
    "content": "import { writable } from 'svelte/store';\n\nexport const state = writable((nr) => nr + 1);\nexport const effect = writable(() => 0);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nullish-actions/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div></div> <div></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nullish-actions/main.svelte",
    "content": "<script>\n\tlet { action_prop } = $props();\n\tlet action = $state();\n</script>\n\n<div use:action></div>\n<div use:action_prop></div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nullish-empty-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '[]'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nullish-empty-string/main.svelte",
    "content": "[{undefined ?? null}]\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nullish-operator/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(logs, ['a1: ', true, 'b1: ', true]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/nullish-operator/main.svelte",
    "content": "<script>\n\tlet a1 = $state();\n\tlet b1 = $state();\n\n\t$effect(() => {\n\t\tconsole.log('a1: ', a1);\n\t});\n\n\t$effect(() => {\n\t\tconsole.log('b1: ', b1);\n\t});\n\n\ta();\n\tqueueMicrotask(a);\n\n\tb();\n\tqueueMicrotask(b);\n\n\tfunction a() {\n\t\ta1 ??= true;\n\t}\n\n\tfunction b() {\n\t\tb1 ?? (b1 = true);\n\t}\n</script>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/onmount-prop-access/Component.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte'\n\n\tlet thing = $state(0)\n\n\tonMount(() => {\n\t\tthing = 1;\n\t\treturn () => {\n\t\t\tconsole.log(thing);\n\t\t}\n\t})\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/onmount-prop-access/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs }) {\n\t\tassert.deepEqual(logs, [1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/onmount-prop-access/main.svelte",
    "content": "<script>\n\timport { onMount } from \"svelte\"\n\timport Component from './Component.svelte';\n\n\tlet key = $state(0);\n\n\tonMount(() => {\n\t\tkey = 1;\n\t})\n</script>\n\n{#key key}\n\t<Component />\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/optgroup-rich-content/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Test that optgroup with rich HTML content (non-option elements) and dynamic expressions works correctly\nexport default test({\n\tmode: ['client', 'hydrate'],\n\ttest({ assert, target }) {\n\t\tconst select = /** @type {HTMLSelectElement} */ (target.querySelector('select'));\n\t\tconst optgroups = target.querySelectorAll('optgroup');\n\t\tconst options = target.querySelectorAll('option');\n\t\tconst button = /** @type {HTMLButtonElement} */ (target.querySelector('button'));\n\n\t\tassert.ok(select);\n\t\tassert.equal(optgroups.length, 2);\n\t\tassert.equal(options.length, 4);\n\n\t\t// Check initial option content (rich content inside optgroup)\n\t\tassert.equal(options[0]?.textContent, 'apple apple');\n\t\tassert.equal(options[1]?.textContent, 'banana');\n\t\tassert.equal(options[2]?.textContent, 'carrot carrot');\n\t\tassert.equal(options[3]?.textContent, 'Plain celery');\n\n\t\t// Click button to change dynamic content\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// Check updated option content\n\t\tassert.equal(options[0]?.textContent, 'orange orange');\n\t\tassert.equal(options[2]?.textContent, 'broccoli broccoli');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/optgroup-rich-content/main.svelte",
    "content": "<script>\n\tlet fruit = $state('apple');\n\tlet vegetable = $state('carrot');\n</script>\n\n<select>\n\t<optgroup label=\"Fruits\">\n\t\t<span class=\"fruits-header\">{fruit}</span>\n\t\t<option value=\"a\"><span>{fruit}</span> {fruit}</option>\n\t\t<option value=\"b\">banana</option>\n\t</optgroup>\n\t<optgroup label=\"Vegetables\">\n\t\t<em class=\"veggies-header\">{vegetable}</em>\n\t\t<option value=\"c\"><em>{vegetable}</em> {vegetable}</option>\n\t\t<option value=\"d\">Plain celery</option>\n\t</optgroup>\n</select>\n\n<button onclick={() => { fruit = 'orange'; vegetable = 'broccoli'; }}>Change</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/option-rich-content/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Test that rich HTML content in <option> elements compiles without errors\n// and that the component functions correctly (on browsers that support it)\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tconst select = /** @type {HTMLSelectElement} */ (target.querySelector('select'));\n\t\tconst p = /** @type {HTMLParagraphElement} */ (target.querySelector('p'));\n\t\tconst button = /** @type {HTMLButtonElement} */ (target.querySelector('button'));\n\n\t\tassert.ok(select);\n\t\tassert.ok(p);\n\t\tassert.ok(button);\n\t\tassert.equal(select.value, 'a');\n\t\tassert.equal(p.textContent, 'Selected: a');\n\n\t\t// Verify options exist\n\t\tassert.equal(select.options.length, 3);\n\n\t\t// Change selection\n\t\tselect.value = 'b';\n\t\tselect.dispatchEvent(new Event('change'));\n\t\tflushSync();\n\n\t\tassert.equal(p.textContent, 'Selected: b');\n\n\t\t// Test reactivity of content within option (only works on browsers that support rich options)\n\t\t// On modern browsers, clicking the button should update the text inside the span\n\t\tbutton.click();\n\t\tflushSync();\n\n\t\t// The option text content should be updated on browsers that support rich options\n\t\t// For this test, we just verify the component doesn't crash\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/option-rich-content/main.svelte",
    "content": "<script>\n\tlet selected = $state('a');\n\tlet label_a = $state('Option');\n\tlet label_b = $state('Strong');\n</script>\n\n<select bind:value={selected}>\n\t<option value=\"a\"><span>{label_a}</span> A</option>\n\t<option value=\"b\"><strong>{label_b}</strong> B</option>\n\t<option value=\"c\">Plain C</option>\n</select>\n\n<p>Selected: {selected}</p>\n\n<button onclick={() => label_a = 'Changed'}>Change A</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/Child.svelte",
    "content": "<script>\n\tlet { arr = $bindable() } = $props();\n</script>\n\n<button onclick={() => arr.push(arr.length)}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\ttest({ target, warnings, assert }) {\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(warnings, []);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\t\n\tlet arr = $state([]);\n\tlet arr2 = $state([]);\n\n\tlet len = $derived(arr.length + arr2.length);\n</script>\n\n<Child bind:arr={() => len % 2 === 0 ? arr : arr2, (v) => {}} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-bindable-fallback/Child.svelte",
    "content": "<script>\n\tconst { test = $bindable() } = $props();\n</script>\n\n{test}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-bindable-fallback/Parent.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet { test = $bindable({}) } = $props();\n</script>\n\n<Child bind:test />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-bindable-fallback/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-bindable-fallback/main.svelte",
    "content": "<script>\n\timport Parent from './Parent.svelte';\n</script>\n\n<Parent />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-ignored/Child.svelte",
    "content": "<script>\n\tconst { test = $bindable() } = $props();\n</script>\n\n{test}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-ignored/Parent.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet { test } = $props();\n</script>\n\n<!-- svelte-ignore ownership_invalid_binding -->\n<Child bind:test />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-ignored/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-binding-ignored/main.svelte",
    "content": "<script>\n\timport Parent from './Parent.svelte';\n\tlet test = $state({ test: '' });\n</script>\n\n<Parent {test} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-bindable-fallback/Parent.svelte",
    "content": "<script>\n\tlet { test = $bindable({}) } = $props();\n</script>\n\n<button onclick={()=>test = {}}></button>\n<button onclick={()=>test.test = {}}></button>\n\n{test}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-bindable-fallback/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert, target }) {\n\t\tconst [btn, btn2] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\t\tassert.deepEqual(warnings, []);\n\t\tflushSync(() => {\n\t\t\tbtn.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tbtn2.click();\n\t\t});\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-bindable-fallback/main.svelte",
    "content": "<script>\n\timport Parent from './Parent.svelte';\n</script>\n\n<Parent />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-ignored/Child.svelte",
    "content": "<script>\n\tlet { test, store } = $props();\n\tlet der = $derived(test);\n\tlet state = $state(test);\n</script>\n\n<button\n\tonclick={() => {\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\ttest.test = Math.random();\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\ttest.test++;\n\t}}\n>\n</button>\n\n<button\n\tonclick={() => {\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\tder.test = Math.random();\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\tder.test++;\n\t}}\n>\n</button>\n\n<button\n\tonclick={() => {\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\tstate.test = Math.random();\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\tstate.test++;\n\t}}\n>\n</button>\n\n<button\n\tonclick={() => {\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\t$store.test = Math.random();\n\t\t//svelte-ignore ownership_invalid_mutation\n\t\t$store.test++;\n\t}}\n>\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-ignored/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert, target }) {\n\t\tconst [btn1, btn2, btn3, btn4] = target.querySelectorAll('button');\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t\tbtn2.click();\n\t\t\tbtn3.click();\n\t\t\tbtn4.click();\n\t\t});\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-ignored/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\timport Child from './Child.svelte';\n\tlet test = $state({ test: 'a' });\n\n\tconst store = writable(test);\n</script>\n\n<Child {test} {store} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ assert, errors }) {\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet { rows = $bindable([]), row } = $props();\n\trows[row] = '';\n</script>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-with-proxy/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/ownership-with-proxy/main.svelte",
    "content": "<script>\n\timport { setContext, getContext } from \"svelte\";\n\n\tsetContext(\"\", new Proxy({}, {\n\t\tget(){\n\t\t\treturn {}\n\t\t}\n\t}));\n\n\tgetContext(\"\");\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/pre-effect/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, [0, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/pre-effect/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\t$effect.pre(() => {\n\t\tconsole.log(x);\n\t});\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/pre-effect-ordering/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, [\n\t\t\t'Outer Effect Start (0)',\n\t\t\t'Inner Effect (0)',\n\t\t\t'Outer Effect End (0)',\n\t\t\t'Outer Effect Start (1)',\n\t\t\t'Inner Effect (1)',\n\t\t\t'Outer Effect End (1)',\n\t\t\t'Outer Effect Start (2)',\n\t\t\t'Inner Effect (2)',\n\t\t\t'Outer Effect End (2)'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/pre-effect-ordering/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction increment() {\n\t\tcount += 1;\n\t}\n\n\t$effect.pre(() => {\n\t\tconsole.log(`Outer Effect Start (${count})`)\n\n\t\t$effect.pre(() => {\n\t\t\tconsole.log(`Inner Effect (${count})`)\n\t\t});\n\n\t\tconsole.log(`Outer Effect End (${count})`)\n\t});\n</script>\n\n<button on:click={increment}>\n\tCount: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/pre-no-content/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<pre></pre>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/pre-no-content/main.svelte",
    "content": "<pre></pre>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/private-identifiers-not-this/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<p>42</p><p>1337</p><button></button>`,\n\tasync test({ assert, target, instance }) {\n\t\tconst [a, b] = target.querySelectorAll('p');\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.equal(a.textContent, '1337');\n\t\tassert.equal(b.textContent, '42');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/private-identifiers-not-this/main.svelte",
    "content": "<script>\n\tclass Box {\n\t\t#value = $state(0);\n\n\t\tget value(){\n\t\t\treturn this.#value;\n\t\t}\n\t\t\n\t\tconstructor(num){\n\t\t\tthis.#value = num;\n\t\t}\n\t\t\n\t\tswap(other) {\n\t\t\tconst value = this.#value;\n\t\t\tthis.#value = other.value;\n\t\t\tother.#value = value;\n\t\t}\n\t}\n\n\tconst a = new Box(42);\n\tconst b = new Box(1337);\n</script>\n\n<p>{a.value}</p>\n<p>{b.value}</p>\n<button onclick={()=>{a.swap(b)}}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tget props() {\n\t\treturn {\n\t\t\tfoo: 'x',\n\t\t\tbar: 'z',\n\t\t\tdefault1: 1,\n\t\t\tdefault2: undefined\n\t\t};\n\t},\n\n\thtml: `x 1 2 3 z`,\n\n\tasync test({ assert, target, component }) {\n\t\tflushSync(() => (component.foo = 'y'));\n\t\tassert.htmlEqual(target.innerHTML, `y 1 2 3 z`);\n\n\t\tflushSync(() => (component.bar = 'w'));\n\t\tassert.htmlEqual(target.innerHTML, `y 1 2 3 w`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props/main.svelte",
    "content": "<script>\n\tconst { foo, default1 = 1, default2 = 2, default3 = 3, ...others } = $props();\n</script>\n\n{foo} {default1} {default2} {default3} {others.bar}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-alias/Counter.svelte",
    "content": "<script>\n\tlet { count: definedCount = $bindable() } = $props();\n</script>\n\n<button on:click={() => definedCount++}>{definedCount}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-alias/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<p>0 0 0 0</p>\n\t<button>0</button>\n\t<button>0</button>\n\t<button>0</button>\n\t<button>0</button>\n\t`,\n\n\ttest({ assert, target, component }) {\n\t\tconst [b1, b2, b3, b4] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tb2.click();\n\t\tb3.click();\n\t\tb4.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<p>1 1 0 0</p>\n\t\t<button>1</button>\n\t\t<button>1</button>\n\t\t<button>1</button>\n\t\t<button>1</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-alias/main.svelte",
    "content": "<script>\n    import Counter from './Counter.svelte';\n\n    let bound = $state(0);\n    let bound_nested = $state({count: 0});\n    let unbound = $state(0);\n    let unbound_nested = $state({count: 0});\n</script>\n\n<p>{bound} {bound_nested.count} {unbound} {unbound_nested.count}</p>\n\n<Counter bind:count={bound} />\n<Counter bind:count={bound_nested.count} />\n<Counter count={unbound} />\n<Counter count={unbound_nested.count} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-alias-weird/Child.svelte",
    "content": "<script>\n\tlet { 0: zero, 'ysc%%gibberish': one } = $props();\n</script>\n\n{zero} {one}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-alias-weird/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `0 1`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-alias-weird/main.svelte",
    "content": "<script>\n    import Child from './Child.svelte';\n</script>\n\n<Child 0={0} ysc%%gibberish={1} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-and-slots/Child.svelte",
    "content": "<script>\n\tconst props = $props();\n</script>\n\n<p>{Object.keys(props)}</p>\n\n{#if $$slots.foo}\n\t<p>foo exists</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-and-slots/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>a</p>\n\t\t<p>foo exists</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-and-slots/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child a=\"b\">\n\t<div slot=\"foo\">foo</div>\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-array-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>add</button> <p>1</p><p>1</p><p>1</p>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>add</button> <p>1</p><p>2</p><p>1</p><p>2</p><p>1</p><p>2</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-array-each/child.svelte",
    "content": "<script>\n\tlet { array } = $props();\n</script>\n\n{#each array as number}\n\t<p>{number.v}</p>\n{/each}\n\n{#each array as number (number)}\n\t<p>{number.v}</p>\n{/each}\n\n{#each array as number (number.v)}\n\t<p>{number.v}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-array-each/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n\n\tlet array = $state([{v: 1}]);\n\n\tconst addNew = () => {\n\t\tarray.push({v: 2})\n\t}\n</script>\n\n<button onclick={addNew}>add</button>\n<Child {array} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-assignment-tracking/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t\tbtn?.click();\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['effect']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-assignment-tracking/main.svelte",
    "content": "<script>\n\tlet {display = true} = $props();\n\n\t$effect(()=>{\n\t\tdisplay = true;\n\t\tconsole.log(\"effect\")\n\t});\n</script>\n\n<button onclick={() => display = !display} >display</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound/Counter.svelte",
    "content": "<script>\n\tlet { count = $bindable() } = $props();\n</script>\n\n<button on:click={() => count++}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<p>0 0 0 0</p>\n\t<button>0</button>\n\t<button>0</button>\n\t<button>0</button>\n\t<button>0</button>\n\t`,\n\n\ttest({ assert, target, component }) {\n\t\tconst [b1, b2, b3, b4] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tb2.click();\n\t\tb3.click();\n\t\tb4.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<p>1 1 0 0</p>\n\t\t<button>1</button>\n\t\t<button>1</button>\n\t\t<button>1</button>\n\t\t<button>1</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound/main.svelte",
    "content": "<script>\n    import Counter from './Counter.svelte';\n\n    let bound = $state(0);\n    let bound_nested = $state({count: 0});\n    let unbound = $state(0);\n    let unbound_nested = $state({count: 0});\n</script>\n\n<p>{bound} {bound_nested.count} {unbound} {unbound_nested.count}</p>\n\n<Counter bind:count={bound} />\n<Counter bind:count={bound_nested.count} />\n<Counter count={unbound} />\n<Counter count={unbound_nested.count} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound-fallback/Counter.svelte",
    "content": "<script>\n\tlet { count = $bindable(0) } = $props();\n</script>\n\n<span>{count}</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound-fallback/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Tests that fallback value is propagated up correctly when the inner component\n// uses a prop it does not write to but has a fallback value\nexport default test({\n\taccessors: false, // so that prop actually becomes $.prop and not $.prop_source\n\thtml: `<button>0</button><span>0</span>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><span>1</span>`);\n\t},\n\n\terror: 'props_invalid_value\\nCannot do `bind:count={undefined}` when `count` has a fallback value'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound-fallback/main.svelte",
    "content": "<script>\n    import Counter from './Counter.svelte';\n\n    let bound = $state();\n</script>\n\n<button on:click={() => bound = 1}>{bound}</button>\n\n<Counter bind:count={bound} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound-to-normal/Inner.svelte",
    "content": "<script>\n    let { bar = $bindable() } = $props();\n</script>\n\n<button on:click={() => bar--}>{bar}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound-to-normal/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button><button>0</button><button>0</button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>1</button><button>1</button>`);\n\n\t\tbtn3.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button><button>1</button><button>0</button>`);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>0</button><button>0</button><button>0</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-bound-to-normal/main.svelte",
    "content": "<script>\n\timport Inner from \"./Inner.svelte\";\n\n\tlet bar = $state(0)\n\tlet foo = {\n\t\tget bar () {\n\t\t\treturn bar;\n\t\t},\n\t\tset bar(v) {\n\t\t\tbar = v;\n\t\t}\n\t}\n</script>\n\n<button on:click={() => bar++}>{foo.bar}</button>\n<Inner bind:bar={foo.bar}/>\n<Inner bar={foo.bar}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-reactivity/Counter.svelte",
    "content": "<script>\n\t/** @type {{ object?: { count: number }, non_bindable?: { count: number }}} */\n\tlet { object = $bindable({ count: 0 }), non_bindable = { count: 0 } } = $props();\n</script>\n\n<button onclick={() => (object.count += 1)}>\n\tmutate: {object.count}\n</button>\n\n<button onclick={() => (object = { count: object.count + 1 })}>\n\treassign: {object.count}\n</button>\n\n<button onclick={() => (non_bindable.count += 1)}>\n\tmutate: {non_bindable.count}\n</button>\n\n<button onclick={() => (non_bindable = { count: non_bindable.count + 1 })}>\n\treassign: {non_bindable.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-reactivity/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>mutate: 0</button>\n\t\t<button>reassign: 0</button>\n\t\t<button>mutate: 0</button>\n\t\t<button>reassign: 0</button>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2, btn3, btn4] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate: 1</button>\n\t\t\t\t<button>reassign: 1</button>\n\t\t\t\t<button>mutate: 0</button>\n\t\t\t\t<button>reassign: 0</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate: 2</button>\n\t\t\t\t<button>reassign: 2</button>\n\t\t\t\t<button>mutate: 0</button>\n\t\t\t\t<button>reassign: 0</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate: 3</button>\n\t\t\t\t<button>reassign: 3</button>\n\t\t\t\t<button>mutate: 0</button>\n\t\t\t\t<button>reassign: 0</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate: 3</button>\n\t\t\t\t<button>reassign: 3</button>\n\t\t\t\t<button>mutate: 0</button>\n\t\t\t\t<button>reassign: 0</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn4?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate: 3</button>\n\t\t\t\t<button>reassign: 3</button>\n\t\t\t\t<button>mutate: 2</button>\n\t\t\t\t<button>reassign: 2</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>mutate: 3</button>\n\t\t\t\t<button>reassign: 3</button>\n\t\t\t\t<button>mutate: 2</button>\n\t\t\t\t<button>reassign: 2</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-reactivity/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n</script>\n\n<Counter />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Tests that default values apply every time and that they propagate back correctly for bindings\nexport default test({\n\t// set accessors to false so that $.prop() is also created\n\taccessors: false,\n\thtml: `\n\t<p>props undefined:</p>\n\t<p>\n\t\treadonly:\n\t\treadonlyWithDefault: 1\n\t\tbinding:\n\t</p>\n\t<button>set bindings to 5</button>\n\t<button>set bindings to undefined</button>\n\n\t<p>props defined:</p>\n\t<p>\n\t\treadonly: 0\n\t\treadonlyWithDefault: 0\n\t\tbinding: 0\n\t</p>\n\t<button>set bindings to 5</button>\n\t<button>set bindings to undefined</button>\n\n\t<p>bindings undefined:</p>\n\t<p>\n\t\treadonly:\n\t\treadonlyWithDefault: 1\n\t\tbinding:\n\t</p>\n\t<button>set bindings to 5</button>\n\t<button>set bindings to undefined</button>\n\n\t<p>bindings defined:</p>\n\t<p>\n\t\treadonly: 0\n\t\treadonlyWithDefault: 0\n\t\tbinding: 0\n\t</p>\n\t<button>set bindings to 5</button>\n\t<button>set bindings to undefined</button>\n\n\t<p>\n\t\tMain:\n\t\treadonly_undefined:\n\t\treadonlyWithDefault_undefined:\n\t\tbinding_undefined:\n\t\treadonly_defined: 0\n\t\treadonlyWithDefault_defined: 0\n\t\tbinding_defined: 0\n\t\tbind_readonly_undefined:\n\t\tbind_binding_undefined:\n\t\tbind_readonly_defined: 0\n\t\tbind_binding_defined: 0\n\t</p>\n\n\t<button>set everything to 10</button>\n\t<button>set everything to undefined</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [\n\t\t\tbtn_5_1,\n\t\t\tbtn_undefined_1,\n\t\t\tbtn_5_2,\n\t\t\tbtn_undefined_2,\n\t\t\tbtn_5_3,\n\t\t\tbtn_undefined_3,\n\t\t\tbtn_5_4,\n\t\t\tbtn_undefined_4,\n\t\t\tbtn_all_10,\n\t\t\tbtn_all_undefined\n\t\t] = target.querySelectorAll('button');\n\n\t\tbtn_undefined_1.click();\n\t\tbtn_undefined_2.click();\n\t\tbtn_undefined_3.click();\n\t\tbtn_undefined_4.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>props undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>props defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 0\n\t\t\t\treadonlyWithDefault: 0\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 0\n\t\t\t\treadonlyWithDefault: 0\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>\n\t\t\t\tMain:\n\t\t\t\treadonly_undefined:\n\t\t\t\treadonlyWithDefault_undefined:\n\t\t\t\tbinding_undefined:\n\t\t\t\treadonly_defined: 0\n\t\t\t\treadonlyWithDefault_defined: 0\n\t\t\t\tbinding_defined: 0\n\t\t\t\tbind_readonly_undefined:\n\t\t\t\tbind_binding_undefined:\n\t\t\t\tbind_readonly_defined: 0\n\t\t\t\tbind_binding_defined:\n\t\t\t</p>\n\n\t\t\t<button>set everything to 10</button>\n\t\t\t<button>set everything to undefined</button>\n\t\t`\n\t\t);\n\n\t\tbtn_5_1.click();\n\t\tbtn_5_2.click();\n\t\tbtn_5_3.click();\n\t\tbtn_5_4.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>props undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding: 5\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>props defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 0\n\t\t\t\treadonlyWithDefault: 0\n\t\t\t\tbinding: 5\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding: 5\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 0\n\t\t\t\treadonlyWithDefault: 0\n\t\t\t\tbinding: 5\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>\n\t\t\t\tMain:\n\t\t\t\treadonly_undefined:\n\t\t\t\treadonlyWithDefault_undefined:\n\t\t\t\tbinding_undefined:\n\t\t\t\treadonly_defined: 0\n\t\t\t\treadonlyWithDefault_defined: 0\n\t\t\t\tbinding_defined: 0\n\t\t\t\tbind_readonly_undefined:\n\t\t\t\tbind_binding_undefined: 5\n\t\t\t\tbind_readonly_defined: 0\n\t\t\t\tbind_binding_defined: 5\n\t\t\t</p>\n\n\t\t\t<button>set everything to 10</button>\n\t\t\t<button>set everything to undefined</button>\n\t\t`\n\t\t);\n\n\t\tbtn_all_10.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>props undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 10\n\t\t\t\treadonlyWithDefault: 10\n\t\t\t\tbinding: 10\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>props defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 10\n\t\t\t\treadonlyWithDefault: 10\n\t\t\t\tbinding: 10\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 10\n\t\t\t\treadonlyWithDefault: 10\n\t\t\t\tbinding: 10\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly: 10\n\t\t\t\treadonlyWithDefault: 10\n\t\t\t\tbinding: 10\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>\n\t\t\t\tMain:\n\t\t\t\treadonly_undefined: 10\n\t\t\t\treadonlyWithDefault_undefined: 10\n\t\t\t\tbinding_undefined: 10\n\t\t\t\treadonly_defined: 10\n\t\t\t\treadonlyWithDefault_defined: 10\n\t\t\t\tbinding_defined: 10\n\t\t\t\tbind_readonly_undefined: 10\n\t\t\t\tbind_binding_undefined: 10\n\t\t\t\tbind_readonly_defined: 10\n\t\t\t\tbind_binding_defined: 10\n\t\t\t</p>\n\n\t\t\t<button>set everything to 10</button>\n\t\t\t<button>set everything to undefined</button>\n\t\t`\n\t\t);\n\n\t\tbtn_all_undefined.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>props undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>props defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings undefined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>bindings defined:</p>\n\t\t\t<p>\n\t\t\t\treadonly:\n\t\t\t\treadonlyWithDefault: 1\n\t\t\t\tbinding:\n\t\t\t</p>\n\t\t\t<button>set bindings to 5</button>\n\t\t\t<button>set bindings to undefined</button>\n\n\t\t\t<p>\n\t\t\t\tMain:\n\t\t\t\treadonly_undefined:\n\t\t\t\treadonlyWithDefault_undefined:\n\t\t\t\tbinding_undefined:\n\t\t\t\treadonly_defined:\n\t\t\t\treadonlyWithDefault_defined:\n\t\t\t\tbinding_defined:\n\t\t\t\tbind_readonly_undefined:\n\t\t\t\tbind_binding_undefined:\n\t\t\t\tbind_readonly_defined:\n\t\t\t\tbind_binding_defined:\n\t\t\t</p>\n\n\t\t\t<button>set everything to 10</button>\n\t\t\t<button>set everything to undefined</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/inner.svelte",
    "content": "<script>\n\tlet { readonly, readonlyWithDefault = 1, binding = $bindable() } = $props();\n</script>\n\n<p>\n\treadonly: {readonly}\n\treadonlyWithDefault: {readonlyWithDefault}\n\tbinding: {binding}\n</p>\n\n<button on:click={() => {\n\tbinding = 5;\n}}>set bindings to 5</button>\n\n<button on:click={() => {\n\tbinding = undefined;\n}}>set bindings to undefined</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/main.svelte",
    "content": "<script>\n\timport Inner from \"./inner.svelte\";\n\n\tlet readonly_undefined = $state();\n\tlet readonlyWithDefault_undefined = $state();\n\tlet binding_undefined = $state();\n\tlet readonly_defined = $state(0);\n\tlet readonlyWithDefault_defined = $state(0);\n\tlet binding_defined = $state(0);\n\tlet bind_readonly_undefined = $state();\n\tlet bind_binding_undefined = $state();\n\tlet bind_readonly_defined = $state(0);\n\tlet bind_binding_defined = $state(0);\n</script>\n\n<p>props undefined:</p>\n<Inner\n\treadonly={readonly_undefined}\n\treadonlyWithDefault={readonlyWithDefault_undefined}\n\tbinding={binding_undefined}\n/>\n\n<p>props defined:</p>\n<Inner\n\treadonly={readonly_defined}\n\treadonlyWithDefault={readonlyWithDefault_defined}\n\tbinding={binding_defined}\n/>\n\n<p>bindings undefined:</p>\n<Inner\n\tbind:readonly={bind_readonly_undefined}\n\treadonlyWithDefault={readonlyWithDefault_undefined}\n\tbind:binding={bind_binding_undefined}\n/>\n\n<p>bindings defined:</p>\n<Inner\n\tbind:readonly={bind_readonly_defined}\n\treadonlyWithDefault={readonlyWithDefault_defined}\n\tbind:binding={bind_binding_defined}\n/>\n\n<p>\n\tMain:\n\treadonly_undefined: {readonly_undefined}\n\treadonlyWithDefault_undefined: {readonlyWithDefault_undefined}\n\tbinding_undefined: {binding_undefined}\n\treadonly_defined: {readonly_defined}\n\treadonlyWithDefault_defined: {readonlyWithDefault_defined}\n\tbinding_defined: {binding_defined}\n\tbind_readonly_undefined: {bind_readonly_undefined}\n\tbind_binding_undefined: {bind_binding_undefined}\n\tbind_readonly_defined: {bind_readonly_defined}\n\tbind_binding_defined: {bind_binding_defined}\n</p>\n\n<button on:click={() => {\n\treadonly_undefined = 10;\n\treadonlyWithDefault_undefined = 10;\n\tbinding_undefined = 10;\n\treadonly_defined = 10;\n\treadonlyWithDefault_defined = 10;\n\tbinding_defined = 10;\n\tbind_readonly_undefined = 10;\n\tbind_binding_undefined = 10;\n\tbind_readonly_defined = 10;\n\tbind_binding_defined = 10;\n}}>set everything to 10</button>\n\n<button on:click={() => {\n\treadonly_undefined = undefined;\n\treadonlyWithDefault_undefined = undefined;\n\tbinding_undefined = undefined;\n\treadonly_defined = undefined;\n\treadonlyWithDefault_defined = undefined;\n\tbinding_defined = undefined;\n\tbind_readonly_undefined = undefined;\n\tbind_binding_undefined = undefined;\n\tbind_readonly_defined = undefined;\n\tbind_binding_defined = undefined;\n}}>set everything to undefined</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-function/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>inc</button> Inner: 0 Inner: 0`);\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>inc</button> Inner: 1 Inner: 1`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-function/inner.svelte",
    "content": "<script>\n\tlet { getter } = $props()\n</script>\nInner: {getter()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-function/main.svelte",
    "content": "<script>\n\timport Wrapper1 from \"./wrapper.svelte\"\n\timport Wrapper2 from \"./wrapper2.svelte\"\n\tlet count = $state(0);\n\n\tlet getter = $derived.by(() => {\n\t\tconst copy = count;\n\t\treturn () => copy;\n\t});\n</script>\n\n<button onclick={() => count++}>inc</button>\n<Wrapper1 {getter}/>\n<Wrapper2 {getter}/>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-function/wrapper.svelte",
    "content": "<script >\n  import Inner from \"./inner.svelte\";\n\n  const { getter = () => -1} = $props();\n</script>\n\n<Inner {getter} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-function/wrapper2.svelte",
    "content": "<script >\n  import Inner from \"./inner.svelte\";\n\n  const { getter = $bindable(() => -1)} = $props();\n</script>\n\n<Inner {getter} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-lazy/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\n// Tests that default values only fire lazily when the prop is undefined, and every time\nexport default test({\n\thtml: `\n\t<p>props: 0 0 0 0 1 1 1 1</p>\n\t<p>log: nested.fallback_value,fallback_fn</p>\n\t<button>Set all to undefined</button>\n\t`,\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<p>props: 1 1 1 1 1 1 1 1</p>\n\t\t\t<p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn</p>\n\t\t\t<button>Set all to undefined</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-lazy/main.svelte",
    "content": "<script>\n\timport Sub from \"./sub.svelte\";\n\n\tlet p0 = $state(0);\n\tlet p1 = $state(0);\n\tlet p2 = $state(0);\n\tlet p3 = $state(0);\n\tlet p4 = $state();\n\tlet p5 = $state();\n\tlet p6 = $state();\n\tlet p7 = $state();\n</script>\n\n<Sub {p0} {p1} {p2} {p3} {p4} {p5} {p6} {p7} />\n\n<button onclick={() => {\n  p0 = undefined;\n  p1 = undefined;\n  p2 = undefined;\n  p3 = undefined;\n  p4 = undefined;\n  p5 = undefined;\n  p6 = undefined;\n  p7 = undefined;\n}}>Set all to undefined</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-lazy/sub.svelte",
    "content": "<script>\n\tlet log = $state([]);\n\n\tconst fallback_value = 1;\n\tconst nested = {\n\t\tget fallback_value() {\n\t\t\tlog.push('nested.fallback_value');\n\t\t\treturn fallback_value;\n\t\t}\n\t}\n\tconst fallback_fn = () => {\n\t\tlog.push('fallback_fn');\n\t\treturn fallback_value;\n\t}\n\n\tconst {\n\t\tp0 = 1,\n\t\tp1 = fallback_value,\n\t\tp2 = nested.fallback_value,\n\t\tp3 = fallback_fn(),\n\t\tp4 = 1,\n\t\tp5 = fallback_value,\n\t\tp6 = nested.fallback_value,\n\t\tp7 = fallback_fn()\n\t} = $props();\n</script>\n\n<p>props: {p0} {p1} {p2} {p3} {p4} {p5} {p6} {p7}</p>\n<p>log: {log}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-lazy-accessors/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\n// Tests that default values only fire lazily when the prop is undefined, and every time\nexport default test({\n\tprops: {\n\t\tp0: 0,\n\t\tp1: 0,\n\t\tp2: 0,\n\t\tp3: 0\n\t},\n\n\thtml: `<p>props: 0 0 0 0 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn`,\n\n\tasync test({ assert, target, component }) {\n\t\tflushSync(() => {\n\t\t\tcomponent.p0 = undefined;\n\t\t\tcomponent.p1 = undefined;\n\t\t\tcomponent.p2 = undefined;\n\t\t\tcomponent.p3 = undefined;\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>props: 1 1 1 1 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tcomponent.p4 = undefined;\n\t\t\tcomponent.p5 = undefined;\n\t\t\tcomponent.p6 = undefined;\n\t\t\tcomponent.p7 = undefined;\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>props: 1 1 1 1 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-lazy-accessors/main.svelte",
    "content": "<script>\n\tlet log = $state([]);\n\n\tconst fallback_value = 1;\n\tconst nested = {\n\t\tget fallback_value() {\n\t\t\tlog.push('nested.fallback_value');\n\t\t\treturn fallback_value;\n\t\t}\n\t}\n\tconst fallback_fn = () => {\n\t\tlog.push('fallback_fn');\n\t\treturn fallback_value;\n\t}\n\n\tconst {\n\t\tp0 = 1,\n\t\tp1 = fallback_value,\n\t\tp2 = nested.fallback_value,\n\t\tp3 = fallback_fn(),\n\t\tp4 = 1,\n\t\tp5 = fallback_value,\n\t\tp6 = nested.fallback_value,\n\t\tp7 = fallback_fn()\n\t} = $props();\n</script>\n\n<p>props: {p0} {p1} {p2} {p3} {p4} {p5} {p6} {p7}</p>\n<p>log: {log}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-rest/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\taccessors: false,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set color</button> <button>set options</button> bar bar`\n\t\t);\n\n\t\tbtn2.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set color</button> <button>set options</button> baz bar`\n\t\t);\n\n\t\tbtn1.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set color</button> <button>set options</button> foo bar`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-rest/inner.svelte",
    "content": "<script>\n  let { options = $bindable('foo') } = $props();\n\n  options = 'bar'\n</script>\n\n{options}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-default-value-rest/main.svelte",
    "content": "<script >\n  import Inner from \"./inner.svelte\";\n\n  let testProps = $state({\n    color: \"red\"\n  });\n</script>\n\n<button onclick={() => {\n\ttestProps = {\n\t\tcolor: \"blue\"\n\t};\n}}>set color</button>\n\n<button onclick={() => {\n\ttestProps = {\n\t\tcolor: \"pink\",\n\t\toptions: 'baz'\n\t};\n}}>set options</button>\n\n<Inner {...testProps} />\n\n<Inner color={testProps.color} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived/Child.svelte",
    "content": "<script>\n\tlet { random } = $props();\n</script>\n\n<p>{random}</p>\n<p>{random}</p>\n<p>{random}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived/_config.js",
    "content": "import { test } from '../../test';\n\nlet math_random = Math.random;\nlet calls = 0;\n\nexport default test({\n\tmode: ['client', 'server'],\n\n\tbefore_test() {\n\t\tMath.random = function () {\n\t\t\tcalls++;\n\t\t\treturn math_random.call(this);\n\t\t};\n\t},\n\n\tafter_test() {\n\t\tMath.random = math_random;\n\t\tcalls = 0;\n\t},\n\n\ttest({ assert }) {\n\t\tassert.equal(calls, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child random={Math.random().toFixed(2)} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived-2/Item.svelte",
    "content": "<script>\n\tconst {active} = $props();\n\t$effect.pre(() => {\n\t\tconsole.log('active changed', active)\n\t});\n</script>\n\n<p>Item is {active ? 'active' : 'inactive'}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived-2/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tlogs.length = 0;\n\n\t\tconst input = /** @type {HTMLInputElement} */ (target.querySelector('input'));\n\t\tinput.value = '1';\n\t\tflushSync(() => input.dispatchEvent(new window.Event('input')));\n\n\t\tassert.deepEqual(logs, ['active changed', false, 'active changed', true]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived-2/main.svelte",
    "content": "<script>\n\timport Item from './Item.svelte';\n\tlet activeIndex = $state(0);\n</script>\n\n<input bind:value={activeIndex} type=\"number\" min=\"0\" max={4} />\n<Item active={activeIndex == 0} />\n<Item active={activeIndex == 1} />\n<Item active={activeIndex == 2} />\n<Item active={activeIndex == 3} />\n<Item active={activeIndex == 4} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived-teardown/Teardown.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte'\n\t\n\tconst { callback } = $props()\n\t\n\tonDestroy(() => {\n\t\tcallback()\n\t})\n</script>\n\n<div>teardown</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived-teardown/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>click</button>\n\t\t\t\t<div>teardown</div>\n\t\t\t\t<div>1</div>\n\t\t\t\t<div>2</div>\n\t\t\t\t<div>3</div>\n\t\t\t`\n\t\t);\n\t\tconst [increment] = target.querySelectorAll('button');\n\n\t\tincrement.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>click</button>\n\t\t\t\t<div>1</div>\n\t\t\t\t<div>3</div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-derived-teardown/main.svelte",
    "content": "<script>\n\timport { SvelteSet } from 'svelte/reactivity'\n\timport Teardown from './Teardown.svelte'\n\n\tclass Test {\n\t\toriginalIds = $state.raw([1, 2, 3])\n\t\tids = $derived(new SvelteSet(this.originalIds))\n\t}\n\n\tlet show = $state(true)\n\tconst test = new Test()\n\n\tfunction callback() {\n\t\ttest.ids.delete(2)\n\t}\n</script>\n\n\n<button onclick={() => (show = !show)}>click</button>\n{#if show}\n\t<Teardown {callback} />\n{/if}\n{#each test.ids as id}\n\t<div>{id}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-equality/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>a true</button><button>b true</button>\n\t\t<button>a true</button><button>b true</button>\n\t\t<button>a true</button><button>b true</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tlet [btn1, _btn2, btn3, _btn4, btn5] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>a+ true</button><button>b true</button>\n\t\t\t<button>a+ true</button><button>b true</button>\n\t\t\t<button>a+ true</button><button>b true</button>\n\t\t`\n\t\t);\n\n\t\t[btn1, _btn2, btn3, _btn4, btn5] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn3.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>a++ true</button><button>b true</button>\n\t\t\t<button>a++ true</button><button>b true</button>\n\t\t\t<button>a++ true</button><button>b true</button>\n\t\t`\n\t\t);\n\n\t\t[btn1, _btn2, btn3, _btn4, btn5] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn5.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>a+++ true</button><button>b true</button>\n\t\t\t<button>a+++ true</button><button>b true</button>\n\t\t\t<button>a+++ true</button><button>b true</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-equality/item.svelte",
    "content": "<script>\n\tlet {item, items, onclick} = $props()\n</script>\n\n<button {onclick}>\n\t{item.name} {items.includes(item)}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-equality/main.svelte",
    "content": "<script>\n\timport Item from './item.svelte'\n\n\tlet items = $state([{name: 'a'}, {name: 'b'}]);\n</script>\n\n<!-- test that each block doesn't mess with item identity -->\n\n{#each items as item (item)}\n\t<Item {item} {items} onclick={() => item.name = item.name + '+'} />\n{/each}\n\n{#each items as item (item.name)}\n\t<Item {item} {items} onclick={() => item.name = item.name + '+'} />\n{/each}\n\n{#each items as item}\n\t<Item {item} {items} onclick={() => item.name = item.name + '+'} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-id/Child.svelte",
    "content": "<script>\n\tlet id = $props.id();\n</script>\n\n<p>{id}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-id/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, variant }) {\n\t\tif (variant === 'dom') {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>c1</h1>\n\t\t\t\t\t<p>c2</p>\n\t\t\t\t\t<p>c3</p>\n\t\t\t\t\t<p>c4</p>\n\t\t\t\t`\n\t\t\t);\n\t\t} else {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>s1</h1>\n\t\t\t\t\t<p>s2</p>\n\t\t\t\t\t<p>s3</p>\n\t\t\t\t\t<p>s4</p>\n\t\t\t\t`\n\t\t\t);\n\t\t}\n\n\t\tlet button = target.querySelector('button');\n\t\tflushSync(() => button?.click());\n\n\t\tif (variant === 'dom') {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>c1</h1>\n\t\t\t\t\t<p>c2</p>\n\t\t\t\t\t<p>c3</p>\n\t\t\t\t\t<p>c4</p>\n\t\t\t\t\t<p>c5</p>\n\t\t\t\t`\n\t\t\t);\n\t\t} else {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>s1</h1>\n\t\t\t\t\t<p>s2</p>\n\t\t\t\t\t<p>s3</p>\n\t\t\t\t\t<p>s4</p>\n\t\t\t\t\t<p>c1</p>\n\t\t\t\t`\n\t\t\t);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-id/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet id = $props.id();\n\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = !show}>toggle</button>\n\n<h1>{id}</h1>\n\n<Child />\n<Child />\n<Child />\n\n{#if show}\n\t<Child />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-id-prefix/Child.svelte",
    "content": "<script>\n\tlet id = $props.id();\n</script>\n\n<p>{id}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-id-prefix/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tid_prefix: 'myPrefix',\n\ttest({ assert, target, variant }) {\n\t\tif (variant === 'dom') {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>c1</h1>\n\t\t\t\t\t<p>c2</p>\n\t\t\t\t\t<p>c3</p>\n\t\t\t\t\t<p>c4</p>\n\t\t\t\t`\n\t\t\t);\n\t\t} else {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>myPrefix-s1</h1>\n\t\t\t\t\t<p>myPrefix-s2</p>\n\t\t\t\t\t<p>myPrefix-s3</p>\n\t\t\t\t\t<p>myPrefix-s4</p>\n\t\t\t\t`\n\t\t\t);\n\t\t}\n\n\t\tlet button = target.querySelector('button');\n\t\tflushSync(() => button?.click());\n\n\t\tif (variant === 'dom') {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>c1</h1>\n\t\t\t\t\t<p>c2</p>\n\t\t\t\t\t<p>c3</p>\n\t\t\t\t\t<p>c4</p>\n\t\t\t\t\t<p>c5</p>\n\t\t\t\t`\n\t\t\t);\n\t\t} else {\n\t\t\tassert.htmlEqual(\n\t\t\t\ttarget.innerHTML,\n\t\t\t\t`\n\t\t\t\t\t<button>toggle</button>\n\t\t\t\t\t<h1>myPrefix-s1</h1>\n\t\t\t\t\t<p>myPrefix-s2</p>\n\t\t\t\t\t<p>myPrefix-s3</p>\n\t\t\t\t\t<p>myPrefix-s4</p>\n\t\t\t\t\t<p>c1</p>\n\t\t\t\t`\n\t\t\t);\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-id-prefix/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet id = $props.id();\n\n\tlet show = $state(false);\n</script>\n\n<button onclick={() => show = !show}>toggle</button>\n\n<h1>{id}</h1>\n\n<Child />\n<Child />\n<Child />\n\n{#if show}\n\t<Child />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-local-teardown/Component.svelte",
    "content": "<script>\n\tlet { x } = $props();\n\n\t$effect(() => {\n\t\tconsole.log('init')\n\n\t\tx = () => {\n\t\t\tconsole.log('teardown')\n\t\t}\n\n\t\treturn () => {\n\t\t\tx();\n\t\t}\n\t})\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-local-teardown/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, logs, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, ['init', 'teardown', 'init', 'teardown']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-local-teardown/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n\n\tlet toggle = $state(true);\n</script>\n\n<button onclick={() => toggle = !toggle}>toggle</button>\n\n{#if toggle}\n\t<Component />\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-quoted/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\t'kebab-case': 'hello'\n\t},\n\n\thtml: `hello`,\n\n\tasync test({ assert, target, component }) {\n\t\tflushSync(() => (component['kebab-case'] = 'goodbye'));\n\t\tassert.htmlEqual(target.innerHTML, `goodbye`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-quoted/main.svelte",
    "content": "<script>\n\tconst { 'kebab-case': rotisserie } = $props();\n</script>\n\n{rotisserie}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-reactive-destroy/Child.svelte",
    "content": "<script>\n\timport { onDestroy } from 'svelte';\n\n\tconst { data = 123 } = $props();\n\n\tonDestroy(() => {\n\t\tdata;\n\t});\n</script>\n\n{data ? '' : null}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-reactive-destroy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, ['should fire once']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-reactive-destroy/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet active = $state(true);\n\tlet data = $state({ example: 'This is some example data' });\n\n\tfunction log(data) {\n\t\tconsole.log('should fire once');\n\t\treturn data;\n\t}\n</script>\n\n<button onclick={() => (active = false)}>Hide</button>\n\n{#if active}\n\t<Child data={log(data)} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-rest/Component.svelte",
    "content": "<script>\n\tlet {\n\t\t\tchildren,\n\t\t\t...rest\n\t} = $props();\n</script>\n{@render children?.()}\n<ul>\n\t{#each Object.getOwnPropertyNames(rest) as n}\n\t\t\t<li>{n}</li>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-rest/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'Foo\\n<ul><li>name</li><li>title</li></ul>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-rest/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n</script>\n\n<Component name=\"n\" title=\"t\">Foo</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-rest-2/Component.svelte",
    "content": "<script>\n\tlet rest = $props();\n</script>\n<ul>\n\t{#each Object.getOwnPropertyNames(rest) as n}\n\t\t\t<li>{n}</li>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-rest-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<ul><li>name</li><li>title</li><li>children</li></ul>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-rest-2/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n</script>\n\n<Component name=\"n\" title=\"t\">Foo</Component>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-spread-fallback/Component.svelte",
    "content": "<script>\n\tconst { propA, propB = \"fallback\" } = $props();\n</script>\n\n<p>{propA} {propB}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-spread-fallback/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Tests that fallback values are kept as long as the prop is not defined in the case of a spread\nexport default test({\n\taccessors: false, // so that propA actually becomes $.prop and not $.prop_source\n\thtml: `\n\t\t<button>change propA</button>\n\t\t<button>change propB</button>\n\t\t<p>true fallback</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [propA, propB] = target.querySelectorAll('button');\n\n\t\tpropA.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>change propA</button>\n\t\t\t\t<button>change propB</button>\n\t\t\t\t<p>false fallback</p>\n\t\t\t`\n\t\t);\n\n\t\tpropB.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>change propA</button>\n\t\t\t\t<button>change propB</button>\n\t\t\t\t<p>false defined</p>\n\t\t\t`\n\t\t);\n\n\t\tpropA.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>change propA</button>\n\t\t\t\t<button>change propB</button>\n\t\t\t\t<p>true defined</p>\n\t\t\t`\n\t\t);\n\n\t\tpropB.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>change propA</button>\n\t\t\t\t<button>change propB</button>\n\t\t\t\t<p>true fallback</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-spread-fallback/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet props = $state({\n\t\tpropA: true,\n\t\tpropB: undefined\n\t});\n</script>\n\n<button on:click={() => {props.propA = !props.propA}}>change propA</button>\n<button on:click={() => {props.propB = props.propB ? undefined : 'defined'}}>change propB</button>\n<Component {...props}/>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-spread-operator/Child.svelte",
    "content": "<script>\n\tlet { numbers } = $props();\n</script>\n\n{numbers.join(', ')}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-spread-operator/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>+1</button> 0, 1, 2',\n\n\ttest({ target, assert }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, '<button>+1</button> 0, 1, 2, 3');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/props-spread-operator/main.svelte",
    "content": "<script>\n\timport { SvelteSet } from 'svelte/reactivity';\n\timport Child from './Child.svelte';\n\n\tconst numbers = new SvelteSet([0, 1, 2]);\n</script>\n\n<button onclick={() => numbers.add(numbers.size)}>+1</button>\n\n<Child numbers={[...numbers]} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxied-state-property-access/Child.svelte",
    "content": "<script>\n\timport { settings } from './main.svelte';\n</script>\n\nChild: {settings.showInRgb}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxied-state-property-access/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>click true</button> Child: true`,\n\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>click false</button> Child: false`);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>click true</button> Child: true`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxied-state-property-access/main.svelte",
    "content": "<script module>\n\tconst context = $state({\n\t\tsettings: {\n\t\t\tshowInRgb: true\n\t\t}\n\t});\n\n\texport const settings = context.settings;\n</script>\n\n<script>\n\timport Child from './Child.svelte';\n</script>\n\n<button onclick={() => settings.showInRgb = !settings.showInRgb}>\n\tclick {settings.showInRgb}\n</button>\n\n<Child />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy/main.svelte",
    "content": "<script>\n\tconst object = $state({ count: 0 });\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-array/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>1 + 2 + 3 = 6</button>\n\t\t<button>clear</button>\n\t\t<button>reverse</button>\n\t\t<span>1</span>\n\t\t<span>2</span>\n\t\t<span>3</span>\n\t\t<strong>array[1]: 2</strong>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [add, clear, reverse] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tadd?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1 + 2 + 3 + 4 = 10</button>\n\t\t\t\t<button>clear</button>\n\t\t\t\t<button>reverse</button>\n\t\t\t\t<span>1</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>4</span>\n\t\t\t\t<strong>array[1]: 2</strong>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\treverse?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>4 + 3 + 2 + 1 = 10</button>\n\t\t\t\t<button>clear</button>\n\t\t\t\t<button>reverse</button>\n\t\t\t\t<span>4</span>\n\t\t\t\t<span>3</span>\n\t\t\t\t<span>2</span>\n\t\t\t\t<span>1</span>\n\t\t\t\t<strong>array[1]: 3</strong>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tclear?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>4 = 4</button>\n\t\t\t\t<button>clear</button>\n\t\t\t\t<button>reverse</button>\n\t\t\t\t<span>4</span>\n\t\t\t\t<strong>array[1]:</strong>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-array/main.svelte",
    "content": "<script>\n\tconst array = $state([1, 2, 3]);\n\tconst sum = $derived(array.reduce((a, b) => a + b, 0));\n</script>\n\n<button onclick={() => array.push(array.length + 1)}>\n\t{array.join(' + ')} = {sum}\n</button>\n\n<button onclick={() => array.length = 1}>\n\tclear\n</button>\n\n<button onclick={() => array.reverse()}>\n\treverse\n</button>\n\n{#each array as n}\n\t<span>{n}</span>\n{/each}\n\n<strong>array[1]: {array[1]}</strong>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-array-length/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\thtml: `\n\t\t<input><input><input><div>3</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-array-length/main.svelte",
    "content": "<script>\n\tlet values = $state(['foo', 'bar', 'baz']);\n\tlet elements = $state([]);\n\tlet nums = $state([1,2,3]);\n</script>\n\n{#each values as value, i}\n\t<input bind:this={elements[i]} bind:value={values[i]} />\n{/each}\n<div>{elements.length}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>items: null</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>items: [0]</button>`);\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>items: [0,1]</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment/main.svelte",
    "content": "<script>\n\tlet items = $state(null);\n</script>\n\n<button onclick={() => (items ??= []).push(items.length)}>\n\titems: {JSON.stringify(items)}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/Test.svelte",
    "content": "<script>\n\tlet { x = $bindable() } = $props();\n\n\t$effect(() => {\n\t\tx = {};\n\t});\n\n\texport function soThatTestReturnsAnObject() {\n\t\treturn x;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target, warnings }) {\n\t\tconst [button1, button2, button3] = target.querySelectorAll('button');\n\t\tok(button1);\n\n\t\tflushSync(() => button1.click());\n\t\tassert.htmlEqual(button1.innerHTML, `items: []`);\n\n\t\tflushSync(() => button1.click());\n\t\tassert.htmlEqual(button1.innerHTML, `items: [0]`);\n\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\t\tinput.checked = true;\n\t\tflushSync(() => input.dispatchEvent(new Event('change', { bubbles: true })));\n\n\t\tflushSync(() => button2.click());\n\t\tflushSync(() => button3.click());\n\n\t\tassert.deepEqual(warnings, [\n\t\t\t'Assignment to `items` property (main.svelte:17:24) will evaluate to the right-hand side, not the value of `items` following the assignment. This may result in unexpected behaviour.'\n\t\t]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/main.svelte",
    "content": " <script>\n\timport Test from './Test.svelte';\n\n\tlet { opacity = 0.5 } = $props();\n\n\tlet entries = $state([]);\n\tlet object = $state({ items: null, group: [] });\n\tlet elementFunBind = $state();\n\n\t// should omit $.assign via static analysis\n\tconst fixed = (node) => node.style.opacity = 0.5;\n\n\t// should use $.assign, but it should not warn\n\tconst unknown = (node) => node.style.opacity = opacity;\n</script>\n\n<button onclick={() => (object.items ??= []).push(object.items.length)}>\n\titems: {JSON.stringify(object.items)}\n</button>\n\n<!-- these should not emit warnings -->\n<div bind:this={entries[0]}>x</div>\n<input type=\"checkbox\" value=1 bind:group={object.group}>\n<input type=\"checkbox\" value=2 bind:group={object.group}>\n\n<Test bind:this={entries[1]}></Test>\n<Test bind:this={() => entries[2], (v) => (entries[2] = v)}></Test>\n<Test bind:x={entries[3]}></Test>\n\n{#snippet funBind(context)}\n\t<input bind:this={() => {}, (e) => (context.element = e)} />\n{/snippet}\n{@render funBind({ set element(e) { elementFunBind = e } })}\n\n<button onclick={(e) => (fixed(e.currentTarget))}>change opacity (fixed)</button>\n<button onclick={(e) => (unknown(e.currentTarget))}>change opacity (unknown)</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-cyclical/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>hello!</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>goodbye!</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-cyclical/main.svelte",
    "content": "<script>\n\tconst ping = $state({});\n\tping.pong = { ping, pang: 'hello!' };\n</script>\n\n<button onclick={() => ping.pong.pang = 'goodbye!'}>\n\t{ping.pong.ping.pong.ping.pong.pang}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-deep/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>1</button>\n\t\t<button>double</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>2</button>\n\t\t\t\t<button>double</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>4</button>\n\t\t\t\t<button>double</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>5</button>\n\t\t\t\t<button>double</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-deep/main.svelte",
    "content": "<script>\n\tconst object = $state({\n\t\tfoo: {\n\t\t\tbar: {\n\t\t\t\tbaz: 1\n\t\t\t}\n\t\t}\n\t});\n</script>\n\n<button onclick={() => object.foo.bar.baz += 1}>\n\t{object.foo.bar.baz}\n</button>\n\n<button onclick={() => object.foo.bar = { baz: object.foo.bar.baz * 2 }}>\n\tdouble\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-nested/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>clicks: 0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-nested/main.svelte",
    "content": "<script>\n\tconst inner = $state({\n\t\tcount: 0\n\t})\n\n\tconst object = $state({\n\t\touter: {\n\t\t\tinner\n\t\t}\n\t});\n</script>\n\n<button onclick={() => inner.count += 1}>\n\tclicks: {object.outer.inner.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-not-shared/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>0</button>\n\t\t<button>0</button>\n\t`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>0</button>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1</button>\n\t\t\t\t<button>1</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-not-shared/main.svelte",
    "content": "<script>\n\tlet obj = { count: 0 };\n\n\tlet a = $state(obj);\n\tlet b = $state(obj);\n</script>\n\n<button onclick={() => a.count += 1}>\n\t{a.count}\n</button>\n\n<button onclick={() => b.count += 1}>\n\t{b.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-prop-bound/Counter.svelte",
    "content": "<script>\n\t/** @type {{ object: { count: number }}} */\n\tlet { object = $bindable() } = $props();\n</script>\n\n<button onclick={() => object.count += 1}>\n\tclicks: {object.count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-prop-bound/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<button>clicks: 0</button>\n\t\t<p>object.count: 0</p>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>clicks: 1</button>\n\t\t\t\t<p>object.count: 1</p>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-prop-bound/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n\n\tlet object = $state({ count: 0 });\n</script>\n\n<Counter bind:object />\n\n<p>object.count: {object.count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-set-accessor/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\thtml: `<input><p>svelte</p>`,\n\tssrHtml: `<input value=\"SVELTE\"><p>svelte</p>`,\n\n\ttest({ assert, target }) {\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tconst event = new window.Event('input');\n\n\t\tinput.value = 'SVELTEy';\n\t\tinput.dispatchEvent(event);\n\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<input><p>sveltey</p>`);\n\t\tassert.equal(input.value, 'SVELTEY');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-set-accessor/main.svelte",
    "content": "<script>\n  let text = $state({\n    value: 'svelte',\n    get uppercase() {\n      return this.value.toUpperCase()\n    },\n    set uppercase(v) {\n      this.value = v.toLowerCase()\n    }\n  })\n</script>\n\n<input bind:value={text.uppercase} />\n<p>{text.value}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/main.svelte",
    "content": "<script>\n\tfunction with_writes(initialState) {\n\t  const derive = $state(initialState)\n\t  return derive\n\t}\n\n\tlet data = $state({ example: 'Example' })\n\tlet my_derived = $derived(with_writes({ example: data.example }))\n\n\t$effect(() => {\n\t\tmy_derived.example = 'Bar'\n\t});\n</script>\n\n<input bind:value={data.example} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/random/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [p1, p2] = target.querySelectorAll('p');\n\t\tassert.notEqual(p1.textContent, p2.textContent);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/random/main.svelte",
    "content": "<script>\n\tlet { m = 1 } = $props();\n</script>\n\n<p>{(Math.random() * m).toFixed(10)}</p>\n<p>{(Math.random() * m).toFixed(10)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-date/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<div>getSeconds: 0</div><div>getMinutes: 0</div><div>getHours: 15</div><div>getTime: 1708700400000</div><div>toUTCString: Fri, 23 Feb 2024 15:00:00 GMT</div><button>1 second</button><button>1 minute</button><button>1 hour</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>getSeconds: 1</div><div>getMinutes: 0</div><div>getHours: 15</div><div>getTime: 1708700401000</div><div>toUTCString: Fri, 23 Feb 2024 15:00:01 GMT</div><button>1 second</button><button>1 minute</button><button>1 hour</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>getSeconds: 1</div><div>getMinutes: 1</div><div>getHours: 15</div><div>getTime: 1708700461000</div><div>toUTCString: Fri, 23 Feb 2024 15:01:01 GMT</div><button>1 second</button><button>1 minute</button><button>1 hour</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>getSeconds: 1</div><div>getMinutes: 1</div><div>getHours: 16</div><div>getTime: 1708704061000</div><div>toUTCString: Fri, 23 Feb 2024 16:01:01 GMT</div><button>1 second</button><button>1 minute</button><button>1 hour</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-date/main.svelte",
    "content": "<script>\n\timport { SvelteDate } from 'svelte/reactivity';\n\n\tlet date = new SvelteDate('2024-02-23T15:00:00Z');\n</script>\n\n<div>getSeconds: {date.getUTCSeconds()}</div>\n<div>getMinutes: {date.getUTCMinutes()}</div>\n<div>getHours: {date.getUTCHours()}</div>\n<div>getTime: {date.getTime()}</div>\n<div>toUTCString: {date.toUTCString()}</div>\n\n<button onclick={() => {\n\tdate.setSeconds(date.getSeconds() + 1);\n}}>1 second</button>\n<button onclick={() => {\n\tdate.setMinutes(date.getMinutes() + 1);\n}}>1 minute</button>\n<button onclick={() => {\n\tdate.setHours(date.getHours() + 1);\n}}>1 hour</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-identifier/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-identifier/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tlet object = {\n\t\ttoString() {\n\t\t\treturn count;\n\t\t}\n\t};\n</script>\n\n<button onclick={() => count += 1}>\n\t{object}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-map/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button><div>0:0</div>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn, btn2, btn3, btn4, btn5] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button><div>0:1</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button><div>0:0</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button><div>0:0</div><div>2:2</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button><div>0:0</div><div>2:2</div><div>3:3</div><div>4:4</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn4?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button><div>0:0</div><div>2:2</div><div>3:3</div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn5?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set if</button><button>set if 1</button><button>add</button><button>delete</button><button>clear</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-map/main.svelte",
    "content": "<script>\n\timport { SvelteMap } from 'svelte/reactivity';\n\n\tlet state = new SvelteMap([[0, 0]]);\n</script>\n\n<button\n\tonclick={() => {\n\t\tif (state.has(0)) {\n\t\t\tstate.set(0, 1);\n\t\t}\n\t}}\n>\n\tset if\n</button>\n\n<button\n\tonclick={() => {\n\t\tif (state.get(0) === 1) {\n\t\t\tstate.set(0, 0);\n\t\t}\n\t}}\n>\n\tset if 1\n</button>\n\n<button\n\tonclick={() => {\n\t\tstate.set(state.size + 1, state.size + 1);\n\t}}>add</button\n>\n\n<button\n\tonclick={() => {\n\t\tstate.delete(state.size);\n\t}}>delete</button\n>\n\n<button\n\tonclick={() => {\n\t\tstate.clear();\n\t}}>clear</button\n>\n\n{#each state as [key, value]}\n\t<div>{key}:{value}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-set/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `<button>delete initial</button><button>add</button><button>delete</button><button>clear</button><div id=\"output\"><p>1</p><div>0</div></div>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn, btn2, btn3, btn4] = target.querySelectorAll('button');\n\t\tconst output = target.querySelector('#output');\n\t\tok(output);\n\n\t\tflushSync(() => btn?.click());\n\t\tassert.htmlEqual(output.innerHTML, `<p>0</p>`);\n\n\t\tflushSync(() => btn2?.click());\n\t\tassert.htmlEqual(output.innerHTML, `<p>1</p><div>1</div>`);\n\n\t\tflushSync(() => btn2?.click());\n\t\tflushSync(() => btn2?.click());\n\t\tassert.htmlEqual(output.innerHTML, `<p>3</p><div>1</div><div>2</div><div>3</div>`);\n\n\t\tflushSync(() => btn3?.click());\n\t\tassert.htmlEqual(output.innerHTML, `<p>2</p><div>1</div><div>2</div>`);\n\n\t\tflushSync(() => btn4?.click());\n\t\tassert.htmlEqual(output.innerHTML, `<p>0</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-set/main.svelte",
    "content": "<script>\n\timport { SvelteSet } from 'svelte/reactivity';\n\n\tlet state = new SvelteSet([0]);\n</script>\n\n<button onclick={() => state.delete(0)}>delete initial</button>\n<button onclick={() => state.add(state.size + 1)}>add</button>\n<button onclick={() => state.delete(state.size)}>delete</button>\n<button onclick={() => state.clear()}>clear</button>\n\n<div id=\"output\">\n\t<p>{state.size}</p>\n\n\t{#each state as item}\n\t\t<div>{item}</div>\n\t{/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-to-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>[object Set Iterator] [object Set Iterator] [object Set Iterator]</div>\n\t\t<div>[object Set Iterator] [object Set Iterator] [object Set Iterator]</div>\n\t\t<div>[object Map Iterator] [object Map Iterator] [object Map Iterator]</div>\n\t\t<div>[object Map Iterator] [object Map Iterator] [object Map Iterator]</div>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-to-string/main.svelte",
    "content": "<script>\n\timport { SvelteSet, SvelteMap } from 'svelte/reactivity';\n\n\tlet map = new Map();\n\tlet set = new Set();\n\tlet rmap = new SvelteMap();\n\tlet rset = new SvelteSet();\n</script>\n\n<div>{rset.entries()} {rset.keys()} {rset.values()}</div>\n<div>{set.entries()} {set.keys()} {set.values()}</div>\n<div>{rmap.entries()} {rmap.keys()} {rmap.values()}</div>\n<div>{map.entries()} {map.keys()} {map.values()}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-url/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<div>href: https://svelte.dev/repl/hello-world?version=5.0</div><div>host: svelte.dev</div><div>pathname: /repl/hello-world</div><div>search: ?version=5.0</div><div>version: 5.0</div><div>t:</div><button>update hostname</button><button>update pathname</button><button>update search</button><button>update href</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst [btn, btn2, btn3, btn4] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>href: https://kit.svelte.dev/repl/hello-world?version=5.0</div><div>host: kit.svelte.dev</div><div>pathname: /repl/hello-world</div><div>search: ?version=5.0</div><div>version: 5.0</div><div>t:</div><button>update hostname</button><button>update pathname</button><button>update search</button><button>update href</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>href: https://kit.svelte.dev/docs/introduction?version=5.0</div><div>host: kit.svelte.dev</div><div>pathname: /docs/introduction</div><div>search: ?version=5.0</div><div>version: 5.0</div><div>t:</div><button>update hostname</button><button>update pathname</button><button>update search</button><button>update href</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>href: https://kit.svelte.dev/docs/introduction?t=123</div><div>host: kit.svelte.dev</div><div>pathname: /docs/introduction</div><div>search: ?t=123</div><div>version:</div><div>t: 123</div><button>update hostname</button><button>update pathname</button><button>update search</button><button>update href</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn4?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>href: https://google.com/search?version=3</div><div>host: google.com</div><div>pathname: /search</div><div>search: ?version=3</div><div>version: 3</div><div>t:</div><button>update hostname</button><button>update pathname</button><button>update search</button><button>update href</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reactive-url/main.svelte",
    "content": "<script>\n\timport { SvelteURL } from 'svelte/reactivity';\n\n\tlet url = new SvelteURL('https://svelte.dev/repl/hello-world?version=5.0');\n</script>\n\n<div>href: {url.href}</div>\n<div>host: {url.host}</div>\n<div>pathname: {url.pathname}</div>\n<div>search: {url.search}</div>\n<div>version: {url.searchParams.get('version')}</div>\n<div>t: {url.searchParams.get('t')}</div>\n\n<button onclick={() => {\n\turl.hostname = 'kit.svelte.dev';\n}}>update hostname</button>\n<button onclick={() => {\n\turl.pathname = 'docs/introduction';\n}}>update pathname</button>\n<button onclick={() => {\n\turl.search = '?t=123';\n}}>update search</button>\n<button onclick={() => {\n\turl.href = 'https://google.com/search?version=3';\n}}>update href</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/Component.svelte",
    "content": "<script>\n\tconst { label = 0, size = 0 } = $props();\n\n\tconst title = $derived(size.toString());\n</script>\n\n<p {title}>{label}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<button></button><p title=\"0\">0</p>`,\n\n\tasync test({ assert, target }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '1');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p?.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/main.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\t\n\t\n\tlet props = $state({\n\t\tlabel: 0,\n\t\tsize: 0,\n\t});\n\t\n\tlet filteredProps = $state();\n\t\n\t$effect.pre(() => {\n\t\tfilteredProps = $state.snapshot(props);\n\t});\n</script>\n\n<button onclick={()=>props.label++}></button>\n\n<Component {...filteredProps} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.deepEqual(logs, [0, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state/main.svelte",
    "content": "<script>\n\tlet x = $state.raw(0);\n\tlet y = $state.raw(0);\n\n\t$effect(() => {\n\t\tconsole.log(x);\n\t});\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state-push/Child.svelte",
    "content": "<script>\n\tlet { array } = $props();\n</script>\n\n{#each array as number}\n\t<p>{number}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state-push/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>add</button><p>1</p><p>2</p><p>3</p><p>4</p><p>0</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state-push/main.svelte",
    "content": "<script>\n  import Child from './Child.svelte';\n\n\tlet array = $state([1,2,3,4]);\n\n\tconst addNew = () => {\n\t\tarray.push(0)\n\t}\n</script>\n\n<button onclick={addNew}>add</button>\n<Child {array} />\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state-replace/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>0, 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/readonly-state-replace/main.svelte",
    "content": "<script>\n\tlet items = $state.raw([0]);\n\n\tconst addItem = () => {\n\t\titems = [...items, items.length];\n\t};\n</script>\n\n<button on:click={addItem}>\n\t{items.join(', ')}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reassigned-store-not-state/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ logs, assert }) {\n\t\tassert.deepEqual(logs, ['world']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/reassigned-store-not-state/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet style = writable('world');\n\t\n\t$effect(() => {\n\t  console.log($style);\n\t});\n\n\tfunction init(){\n\t\tstyle = writable('svelte');\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/remove-spreaded-handlers/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target, instance }) {\n\t\tconst p = target.querySelector('p');\n\t\tconst btn = target.querySelector('button');\n\t\tconst input = target.querySelector('input');\n\t\tok(p);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p.innerHTML, '1');\n\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p.innerHTML, '1');\n\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.equal(p.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/remove-spreaded-handlers/main.svelte",
    "content": "<script>\n\tlet checked = $state(true)\n\tlet count = $state(0)\n\n\tconst onclick = $derived(checked ? (() => { count++ }) : undefined)\n</script>\n\n<p>\n\t{count}\n</p>\n<input type=\"checkbox\" bind:checked />\n<button {...{onclick}}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rest-props-excludes-properties/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.equal(target.textContent, ' false');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rest-props-excludes-properties/component.svelte",
    "content": "<script>\n    const { name, ...rest } = $props();\n</script>\n{rest.name} {'name' in rest}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rest-props-excludes-properties/main.svelte",
    "content": "<script>\n    import Component from './component.svelte';\n</script>\n<Component name='world' />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rich-option-component/Content.svelte",
    "content": "<script>\n\tlet { text } = $props();\n</script>\n\n<span>{text}</span>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rich-option-component/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// Test that components can be used inside <option> elements.\n// This tests two scenarios:\n// 1. A component that wraps the entire <option> element\n// 2. A component used as content inside an <option> element\n//\n// In jsdom (which doesn't support rich options), the HTML content is stripped,\n// so we only verify the component doesn't crash and values work correctly.\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst option1 = target.querySelector('option');\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.ok(option1);\n\n\t\tassert.equal(option1?.textContent, 'bb');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.equal(option1?.textContent, 'aa');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rich-option-component/main.svelte",
    "content": "<script>\n\timport Content from './Content.svelte';\n\n\tlet content = $state('b');\n</script>\n\n\n<!-- Test 2: Option with component as content -->\n<select>\n\t<option value=\"x\"><span>{content}</span><Content text={content} /></option>\n</select>\n\n<button onclick={() => content = content === 'a' ? 'b' : 'a'}>\n\tToggle Content\n</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rune-name-used-by-rune/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<h1>Hello state state2</h1>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/rune-name-used-by-rune/main.svelte",
    "content": "<script>\n\timport { derived } from 'svelte/store';\n\n\tlet state = $state('state');\n\tlet derived_state = $derived(state + '2');\n</script>\n\n<h1>Hello {state} {derived_state}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/runes-from-func/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<span>0</span>',\n\n\tasync test({ assert, target }) {\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<span>1</span>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/runes-from-func/main.svelte",
    "content": "<script>\n\tfunction foo() {\n\t\tlet x = $state(0);\n\n\t\tqueueMicrotask(() => {\n\t\t\tx++;\n\t\t})\n\n\t\treturn {\n\t\t\twut() {\n\t\t\t\treturn x\n\t\t\t}\n\t\t}\n\t}\n\tconst wut = foo().wut;\n\tconst x = $derived(wut());\n</script>\n\n<span>{x}</span>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/runes-in-module-context/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\n\ttest({ assert, target, window }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\tbtn?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>2</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/runes-in-module-context/main.svelte",
    "content": "<script module>\n  function createCounter() {\n    let count = $state(0);\n    let double = $derived(count * 2);\n    return {\n      get count() { return count },\n      set count(value) { count = value },\n      get double() { return double },\n    }\n  }\n</script>\n\n<script>\n  const counter = createCounter();\n</script>\n\n\n<button on:click={() => counter.count++}>{counter.double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-falsy-value/_config.js",
    "content": "import { test } from '../../test';\n\n// <option value> is special because falsy values should result in an empty string value attribute\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-falsy-value/main.svelte",
    "content": "<script>\n\tlet nonreactive = undefined;\n\tlet reactive = $state();\n\tlet nonreactive_spread = { value: undefined };\n\tlet reactive_spread = $state({ value: undefined });\n</script>\n\n<select>\n\t<option value={undefined}>Default</option>\n</select>\n\n<select>\n\t<option value={nonreactive}>Default</option>\n</select>\n\n<select>\n\t<option value={reactive}>Default</option>\n</select>\n\n<select>\n\t<option {...nonreactive_spread}>Default</option>\n</select>\n\n<select>\n\t<option {...reactive_spread}>Default</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-multiple-invalid-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twarnings: [\n\t\t'The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-multiple-invalid-value/main.svelte",
    "content": "<select multiple value={null}>\n  <option>option</option>\n</select>\n<select multiple value={undefined}>\n  <option>option</option>\n</select>\n<select multiple value={123}>\n  <option>option</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-option-added/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, variant }) {\n\t\tconst [button] = target.querySelectorAll('button');\n\t\tconst [select] = target.querySelectorAll('select');\n\n\t\tflushSync(() => {\n\t\t\tselect.focus();\n\t\t\tselect.value = '2';\n\t\t\tselect.dispatchEvent(new InputEvent('change', { bubbles: true }));\n\t\t});\n\n\t\tassert.equal(select.selectedOptions[0].textContent, '2');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add option</button>\n\t\t\t\t<p>selected: 2</p>\n\t\t\t\t<select>\n\t\t\t\t\t<option${variant === 'hydrate' ? ' selected=\"\"' : ''}>1</option>\n\t\t\t\t\t<option>2</option>\n\t\t\t\t\t<option>3</option>\n\t\t\t\t</select>\n\t\t\t`\n\t\t);\n\n\t\tflushSync(() => button.click());\n\t\tawait tick();\n\n\t\tassert.equal(select.selectedOptions[0].textContent, '2');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>add option</button>\n\t\t\t\t<p>selected: 2</p>\n\t\t\t\t<select>\n\t\t\t\t\t<option${variant === 'hydrate' ? ' selected=\"\"' : ''}>1</option>\n\t\t\t\t\t<option>2</option>\n\t\t\t\t\t<option>3</option>\n\t\t\t\t\t<option>4</option>\n\t\t\t\t</select>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-option-added/main.svelte",
    "content": "<script>\n\tlet options = $state([1, 2, 3]);\n\tlet selected = $state(1);\n</script>\n\n<button onclick={() => options.push(options.length + 1)}>\n\tadd option\n</button>\n\n<p>selected: {selected}</p>\n\n<select bind:value={selected}>\n\t{#each options as o}\n\t\t<option>{o}</option>\n\t{/each}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-spread-option-selected/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, instance }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tassert.equal(select.selectedIndex, 1);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-spread-option-selected/main.svelte",
    "content": "<script>\n\tlet others = {onclick: ()=> {}}\n</script>\n\n<select {...others}>\n\t<option>o1</option>\n\t<option selected>o2</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-value-with-call/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, errors }) {\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/select-value-with-call/main.svelte",
    "content": "<svelte:options runes />\n<script>\n\tfunction test(){}\n</script>\n\n<select value={test()}></select>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-context-after-await/Child.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\n\tawait Promise.resolve();\n\n\ttry {\n\t\tsetContext('potato', {});\n\t} catch (e) {\n\t\tconsole.log(e.message);\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-context-after-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_no_async: true,\n\tasync test({ assert, logs }) {\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\n\t\tassert.ok(logs[0].startsWith('set_context_after_init'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-context-after-await/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<svelte:boundary>\n\t<Child />\n\n\t{#snippet pending()}\n\t\t...\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-context-after-mount/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\nimport { async_mode } from '../../../helpers';\n\nexport default test({\n\tasync test({ target, assert, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.ok(\n\t\t\tasync_mode\n\t\t\t\t? logs[0].startsWith('set_context_after_init')\n\t\t\t\t: logs[0] === 'works without experimental async but really shouldnt'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-context-after-mount/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\n\tlet condition = $state(false);\n\n\t$effect(() => {\n\t\tif (condition) {\n\t\t\ttry {\n\t\t\t\tsetContext('potato', {});\n\t\t\t\tconsole.log('works without experimental async but really shouldnt')\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e.message);\n\t\t\t}\n\t\t}\n\t});\n</script>\n\n<button onclick={() => condition = !condition}>\n\t{condition}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-text-stable-coercion/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'toString <p>toString</p> <p>[toString]</p> toString',\n\tasync test() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/set-text-stable-coercion/main.svelte",
    "content": "<script>\n\tclass Widget {\n\t\ttoString() { return \"toString\" }\n\t\tvalueOf() { return \"valueOf\" }\n\t}\n\n\tconst value = new Widget();\n</script>\n\n<!-- case 1 -->\n{value}\n\n<!-- case 2 -->\n<p>{value}</p>\n\n<!-- case 3 -->\n<p>[{value}]</p>\n\n<!-- case 4 -->\n{#if 1}\n\t{value}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-array/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-array/main.svelte",
    "content": "<script>\n\tlet visibleExternal = $state(false);\n\tlet external = $state([]);\n\tconst throws = $derived.by(() => {\n\t\texternal.push(1);\n\t\treturn external;\n\t});\n\n\tlet visibleInternal = $state(false)\n\tconst works = $derived.by(() => {\n\t\tlet internal = $state([]);\n\t\tinternal.push(1);\n\t\treturn internal;\n\t});\n</script>\n\n<button onclick={() => (visibleExternal = true)}>external</button>\n{#if visibleExternal}\n\t{throws}\n{/if}\n<button onclick={() => (visibleInternal = true)}>internal</button>\n{#if visibleInternal}\n\t{works}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-date/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-date/main.svelte",
    "content": "<script>\n\timport { SvelteDate } from 'svelte/reactivity';\n\n\tlet visibleExternal = $state(false);\n\tlet external = new SvelteDate();\n\tconst throws = $derived.by(() => {\n\t\texternal.setTime(12345);\n\t\treturn external;\n\t})\n\n\tlet visibleInternal = $state(false);\n\tconst works = $derived.by(() => {\n\t\tlet internal = new SvelteDate();\n\t\tinternal.setTime(12345);\n\t\treturn internal;\n\t})\n</script>\n\n<button onclick={() => (visibleExternal = true)}>external</button>\n{#if visibleExternal}\n\t{throws}\n{/if}\n<button onclick={() => (visibleInternal = true)}>internal</button>\n{#if visibleInternal}\n\t{works}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-map/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2, button3, button4, button5, button6, button7, button8] =\n\t\t\ttarget.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\n\t\tassert.throws(() => {\n\t\t\tbutton3?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton4?.click();\n\t\t\tflushSync();\n\t\t});\n\n\t\tassert.throws(() => {\n\t\t\tbutton5?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton6?.click();\n\t\t\tflushSync();\n\t\t});\n\n\t\tassert.throws(() => {\n\t\t\tbutton7?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton8?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-map/main.svelte",
    "content": "<script>\n\timport { SvelteMap } from 'svelte/reactivity';\n\n\tlet outside_basic = $state(false);\n\tlet outside_basic_map = new SvelteMap();\n\tconst throw_basic = $derived.by(() => {\n\t\toutside_basic_map.set(1, 1);\n\t\treturn outside_basic_map;\n\t});\n\n\tlet inside_basic = $state(false);\n\tconst works_basic = $derived.by(() => {\n\t\tlet inside = new SvelteMap();\n\t\tinside.set(1, 1);\n\t\treturn inside;\n\t});\n\n\tlet outside_has = $state(false);\n\tlet outside_has_map = new SvelteMap([[1, 1]]);\n\tconst throw_has = $derived.by(() => {\n\t\toutside_has_map.has(1);\n\t\toutside_has_map.set(1, 2);\n\t\treturn outside_has_map;\n\t});\n\n\tlet inside_has = $state(false);\n\tconst works_has = $derived.by(() => {\n\t\tlet inside = new SvelteMap([[1, 1]]);\n\t\tinside.has(1);\n\t\tinside.set(1, 1);\n\t\treturn inside;\n\t});\n\n\tlet outside_get = $state(false);\n\tlet outside_get_map = new SvelteMap([[1, 1]]);\n\tconst throw_get = $derived.by(() => {\n\t\toutside_get_map.get(1);\n\t\toutside_get_map.set(1, 2);\n\t\treturn outside_get_map;\n\t});\n\n\tlet inside_get = $state(false);\n\tconst works_get = $derived.by(() => {\n\t\tlet inside = new SvelteMap([[1, 1]]);\n\t\tinside.get(1);\n\t\tinside.set(1, 1);\n\t\treturn inside;\n\t});\n\n\tlet outside_values = $state(false);\n\tlet outside_values_map = new SvelteMap([[1, 1]]);\n\tconst throw_values = $derived.by(() => {\n\t\toutside_values_map.values(1);\n\t\toutside_values_map.set(1, 2);\n\t\treturn outside_values_map;\n\t});\n\n\tlet inside_values = $state(false);\n\tconst works_values = $derived.by(() => {\n\t\tlet inside = new SvelteMap([[1, 1]]);\n\t\tinside.values();\n\t\tinside.set(1, 1);\n\t\treturn inside;\n\t});\n</script>\n\n<button onclick={() => (outside_basic = true)}>external</button>\n{#if outside_basic}\n\t{throw_basic}\n{/if}\n<button onclick={() => (inside_basic = true)}>internal</button>\n{#if inside_basic}\n\t{works_basic}\n{/if}\n\n<button onclick={() => (outside_has = true)}>external</button>\n{#if outside_has}\n\t{throw_has}\n{/if}\n<button onclick={() => (inside_has = true)}>internal</button>\n{#if inside_has}\n\t{works_has}\n{/if}\n\n<button onclick={() => (outside_get = true)}>external</button>\n{#if outside_get}\n\t{throw_get}\n{/if}\n<button onclick={() => (inside_get = true)}>internal</button>\n{#if inside_get}\n\t{works_get}\n{/if}\n\n<button onclick={() => (outside_values = true)}>external</button>\n{#if outside_values}\n\t{throw_values}\n{/if}\n<button onclick={() => (inside_values = true)}>internal</button>\n{#if inside_values}\n\t{works_values}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-object/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-object/main.svelte",
    "content": "<script>\n\tlet visibleExternal = $state(false);\n\tlet external = $state({ v: 1 });\n\tconst throws = $derived.by(() => {\n\t\texternal.v = 2;\n\t\treturn external;\n\t});\n\n\tlet visibleInternal = $state(false)\n\tconst works = $derived.by(() => {\n\t\tlet internal = $state({ v: 1 });\n\t\tinternal.v = 2;\n\t\treturn internal;\n\t});\n</script>\n\n<button onclick={() => (visibleExternal = true)}>external</button>\n{#if visibleExternal}\n\t{throws}\n{/if}\n<button onclick={() => (visibleInternal = true)}>internal</button>\n{#if visibleInternal}\n\t{works}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-primitive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-primitive/main.svelte",
    "content": "<script>\n\tlet visibleExternal = $state(false);\n\tlet external = $state(1);\n\tconst throws = $derived.by(() => {\n\t\texternal = 2;\n\t\treturn external;\n\t});\n\n\tlet visibleInternal = $state(false);\n\tconst works = $derived.by(() => {\n\t\tlet internal = $state(1);\n\t\tinternal = 2;\n\t\treturn internal;\n\t});\n</script>\n\n<button onclick={() => (visibleExternal = true)}>external</button>\n{#if visibleExternal}\n\t{throws}\n{/if}\n<button onclick={() => (visibleInternal = true)}>internal</button>\n{#if visibleInternal}\n\t{works}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-set/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2, button3, button4] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\n\t\tassert.throws(() => {\n\t\t\tbutton3?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton4?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-set/main.svelte",
    "content": "<script>\n\timport { SvelteSet } from 'svelte/reactivity';\n\n\tlet outside_basic = $state(false);\n\tlet outside_basic_set = new SvelteSet();\n\tconst throws_basic = $derived.by(() => {\n\t\toutside_basic_set.add(1);\n\t\treturn outside_basic_set;\n\t})\n\n\tlet inside_basic = $state(false);\n\tconst works_basic = $derived.by(() => {\n\t\tlet internal = new SvelteSet();\n\t\tinternal.add(1);\n\t\treturn internal;\n\t})\n\n\tlet outside_has_delete = $state(false);\n\tlet outside_has_delete_set = new SvelteSet([1]);\n\tconst throws_has_delete = $derived.by(() => {\n\t\toutside_has_delete_set.has(1);\n\t\toutside_has_delete_set.delete(1);\n\t\treturn outside_has_delete_set;\n\t})\n\n\tlet inside_has_delete = $state(false);\n\tconst works_has_delete = $derived.by(() => {\n\t\tlet internal = new SvelteSet([1]);\n\t\tinternal.has(1);\n\t\tinternal.delete(1);\n\t\treturn internal;\n\t})\n</script>\n\n<button onclick={() => (outside_basic = true)}>external</button>\n{#if outside_basic}\n\t{throws_basic}\n{/if}\n<button onclick={() => (inside_basic = true)}>internal</button>\n{#if inside_basic}\n\t{works_basic}\n{/if}\n\n<button onclick={() => (outside_has_delete = true)}>external</button>\n{#if outside_has_delete}\n\t{throws_has_delete}\n{/if}\n<button onclick={() => (inside_has_delete = true)}>internal</button>\n{#if inside_has_delete}\n\t{works_has_delete}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-spring/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-spring/main.svelte",
    "content": "<script>\n\timport { Spring } from 'svelte/motion';\n\n\tlet outside_basic = $state(false);\n\tlet outside_basic_spring = new Spring(0);\n\tconst throws_basic = $derived.by(() => {\n\t\toutside_basic_spring.set(1);\n\t\treturn outside_basic_spring;\n\t})\n\n\tlet inside_basic = $state(false);\n\tconst works_basic = $derived.by(() => {\n\t\tlet internal = new Spring(0);\n\t\tinternal.set(1);\n\t\treturn internal;\n\t})\n</script>\n\n<button onclick={() => (outside_basic = true)}>external</button>\n{#if outside_basic}\n\t{throws_basic}\n{/if}\n<button onclick={() => (inside_basic = true)}>internal</button>\n{#if inside_basic}\n\t{works_basic}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-tween/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-tween/main.svelte",
    "content": "<script>\n\timport { Tween } from 'svelte/motion';\n\n\tlet outside_basic = $state(false);\n\tlet outside_basic_tween = new Tween(0);\n\tconst throws_basic = $derived.by(() => {\n\t\toutside_basic_tween.set(1);\n\t\treturn outside_basic_tween;\n\t})\n\n\tlet inside_basic = $state(false);\n\tconst works_basic = $derived.by(() => {\n\t\tlet internal = new Tween(0);\n\t\tinternal.set(1);\n\t\treturn internal;\n\t})\n</script>\n\n<button onclick={() => (outside_basic = true)}>external</button>\n{#if outside_basic}\n\t{throws_basic}\n{/if}\n<button onclick={() => (inside_basic = true)}>internal</button>\n{#if inside_basic}\n\t{works_basic}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-url/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-url/main.svelte",
    "content": "<script>\n\timport { SvelteURL } from 'svelte/reactivity';\n\n\tlet visibleExternal = $state(false);\n\tlet external = new SvelteURL('https://svelte.dev');\n\tconst throws = $derived.by(() => {\n\t\texternal.host = 'kit.svelte.dev'\n\t\treturn external;\n\t})\n\n\tlet visibleInternal = $state(false);\n\tconst works = $derived.by(() => {\n\t\tlet internal = new SvelteURL('https://svelte.dev');\n\t\tinternal.host = 'kit.svelte.dev'\n\t\treturn internal;\n\t})\n</script>\n\n<button onclick={() => (visibleExternal = true)}>external</button>\n{#if visibleExternal}\n\t{throws}\n{/if}\n<button onclick={() => (visibleInternal = true)}>internal</button>\n{#if visibleInternal}\n\t{works}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-url-search-params/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\trunes: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst [button1, button2] = target.querySelectorAll('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton1?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\n\t\tassert.doesNotThrow(() => {\n\t\t\tbutton2?.click();\n\t\t\tflushSync();\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-derived-url-search-params/main.svelte",
    "content": "<script>\n\timport { SvelteURLSearchParams } from 'svelte/reactivity';\n\n\tlet visibleExternal = $state(false);\n\tlet external = new SvelteURLSearchParams();\n\tconst throws = $derived.by(() => {\n\t\texternal.append('foo', 'bar')\n\t\treturn external;\n\t})\n\n\tlet visibleInternal = $state(false);\n\tconst works = $derived.by(() => {\n\t\tlet internal = new SvelteURLSearchParams();\n\t\tinternal.append('foo', 'bar')\n\t\treturn internal;\n\t})\n</script>\n\n<button onclick={() => (visibleExternal = true)}>external</button>\n{#if visibleExternal}\n\t{throws}\n{/if}\n<button onclick={() => (visibleInternal = true)}>internal</button>\n{#if visibleInternal}\n\t{works}\n{/if}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-each/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-each/main.svelte",
    "content": "<script>\n\tlet items = $state([]);\n</script>\n\n<button onclick={() => items.push(3, 2, 1)}>Add</button>\n{#each items.sort() as item (item)}\n  <p>{item}</p>\n{/each}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-template/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.throws(() => {\n\t\t\tbutton?.click();\n\t\t\tflushSync();\n\t\t}, /state_unsafe_mutation/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/side-effect-template/main.svelte",
    "content": "<script>\n\tlet items = $state([]);\n</script>\n\n<button onclick={() => items.push(3, 2, 1)}>Add</button>\n{JSON.stringify(items.sort())}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot/_config.js",
    "content": "import { test } from '../../test';\n\n// Test that $$slots exists in runes mode\nexport default test({\n\thtml: `<p>bar</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot/main.svelte",
    "content": "<script>\n\timport Slot from './slot.svelte';\n</script>\n\n<Slot>\n\t<p>bar</p>\n</Slot>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot/slot.svelte",
    "content": "{#if $$slots}\n\t<slot></slot>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot-static/Child.svelte",
    "content": "<script>\n\tlet { message } = $props();\n</script>\n\n<slot {message} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot-static/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>message: hello</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot-static/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet message = 'hello';\n</script>\n\n<Child message={message} let:message>\n\t<p>message: {message}</p>\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot-svelte-fragment-render-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>bar</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot-svelte-fragment-render-tag/child.svelte",
    "content": "<script>\n    let { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/slot-svelte-fragment-render-tag/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n</script>\n\n<Child>\n\t<svelte:fragment>\n\t\t<p>bar</p>\n\t</svelte:fragment>\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\thtml: `<p>hello world</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet/main.svelte",
    "content": "{#snippet hello()}\n\t<p>hello world</p>\n{/snippet}\n\n{@render hello()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-access-in-script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-access-in-script/fn.js",
    "content": "export function fn(snippet) {\n\treturn snippet;\n}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-access-in-script/main.svelte",
    "content": "<script>\n\timport { fn } from \"./fn.js\";\n\tlet variable = $state(\"var\");\n\n\tfn(test);\n</script>\n\n{#snippet test()}\n\t{variable}\n{/snippet}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-after-text/Child.svelte",
    "content": "<script>\n\tlet {prop = '', children} = $props()\n</script>\n\n<div>{prop}{@render children()}</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-after-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\thtml: `<div>123</div`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-after-text/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child>123</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>clicks: 0</p>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>clicks: 1</p>\n\t\t\t\t<button>click me</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n</script>\n\n{#snippet foo(n: number)}\n\t<p>clicks: {n}</p>\n{/snippet}\n\n{@render foo(count)}\n\n<button on:click={() => count += 1}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-call-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['invoked']);\n\t},\n\ttest_ssr({ assert, logs }) {\n\t\tassert.deepEqual(logs, ['invoked']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-call-expression/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet el = $state({ foo: 'foo', bar: 'bar' });\n\tfunction fn(el) {\n\t\tconsole.log('invoked')\n\t\treturn el;\n\t}\n</script>\n\n{#snippet foo(a)}\n\t{a.foo} {a.bar}\n{/snippet}\n\n{@render foo(fn(el))}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-destructured/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>clicks: 0</p>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>clicks: 1</p>\n\t\t\t\t<button>click me</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-destructured/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n</script>\n\n{#snippet foo({ count })}\n\t<p>clicks: {count}</p>\n{/snippet}\n\n{@render foo({ count })}\n\n<button on:click={() => count += 1}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-destructured-multiple/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>clicks: 0, doubled: 0</p>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>clicks: 1, doubled: 2</p>\n\t\t\t\t<button>click me</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-destructured-multiple/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n</script>\n\n{#snippet foo({ count }, { doubled })}\n\t<p>clicks: {count}, doubled: {doubled}</p>\n{/snippet}\n\n{@render foo({ count }, { doubled })}\n\n<button on:click={() => count += 1}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-multiple/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>clicks: 0, doubled: 0</p>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>clicks: 1, doubled: 2</p>\n\t\t\t\t<button>click me</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-argument-multiple/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n</script>\n\n{#snippet foo(n: number, doubled: number)}\n\t<p>clicks: {n}, doubled: {doubled}</p>\n{/snippet}\n\n{@render foo(count, doubled)}\n\n<button on:click={() => count += 1}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-block-without-render-tag-dev/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\truntime_error: 'snippet_without_render_tag'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-block-without-render-tag-dev/main.svelte",
    "content": "{testSnippet}\n\n{#snippet testSnippet()}\n  <p>hi again</p>\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-block-without-render-tag-prod/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-block-without-render-tag-prod/main.svelte",
    "content": "{testSnippet}\n\n{#snippet testSnippet()}\n  <p>hi again</p>\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-children-without-render-tag-dev/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\truntime_error: 'snippet_without_render_tag'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-children-without-render-tag-dev/main.svelte",
    "content": "<script>\n  import UnrenderedChildren from './unrendered-children.svelte';\n</script>\n\n<UnrenderedChildren>Hi</UnrenderedChildren>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-children-without-render-tag-dev/unrendered-children.svelte",
    "content": "<script>\n  let { children } = $props();\n</script>\n\n{children}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-children-without-render-tag-dev-prod/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-children-without-render-tag-dev-prod/main.svelte",
    "content": "<script>\n  import UnrenderedChildren from './unrendered-children.svelte';\n</script>\n\n<UnrenderedChildren>Hi</UnrenderedChildren>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-children-without-render-tag-dev-prod/unrendered-children.svelte",
    "content": "<script>\n  let { children } = $props();\n</script>\n\n{children}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-comment-sibling/Child.svelte",
    "content": "<script>\n\tconst { children } = $props();\n</script>\n\n{@render children()}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-comment-sibling/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `The content`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-comment-sibling/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\"\n</script>\n\n<Child>\n\t<!-- I'm just a poor comment -->\n\t{#snippet children()}\n\t\tThe content\n\t{/snippet}\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-complicated-defaults/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t/** @type {HTMLButtonElement | null} */\n\t\tconst increment = target.querySelector('#increment');\n\t\t/** @type {HTMLButtonElement | null} */\n\t\tconst change_ref = target.querySelector('#change-ref');\n\t\t/** @type {HTMLParagraphElement | null} */\n\t\tconst count = target.querySelector('#count');\n\t\t/** @type {HTMLParagraphElement | null} */\n\t\tconst fallback_count = target.querySelector('#fallback-count');\n\n\t\tassert.htmlEqual(count?.innerHTML ?? '', 'Count: 0');\n\t\tassert.htmlEqual(fallback_count?.innerHTML ?? '', 'Fallback count: 0');\n\n\t\tincrement?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(count?.innerHTML ?? '', 'Count: 1');\n\t\tassert.htmlEqual(fallback_count?.innerHTML ?? '', 'Fallback count: 0');\n\n\t\tchange_ref?.click();\n\t\tflushSync();\n\t\tincrement?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(count?.innerHTML ?? '', 'Count: 1');\n\t\tassert.htmlEqual(fallback_count?.innerHTML ?? '', 'Fallback count: 1');\n\n\t\tchange_ref?.click();\n\t\tflushSync();\n\t\tincrement?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(count?.innerHTML ?? '', 'Count: 2');\n\t\tassert.htmlEqual(fallback_count?.innerHTML ?? '', 'Fallback count: 1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-complicated-defaults/main.svelte",
    "content": "<script>\n\tfunction box(value) {\n\t\tlet state = $state(value);\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn state\n\t\t\t},\n\t\t\tset value(v) {\n\t\t\t\tstate = v\n\t\t\t}\n\t\t}\n\t}\n\n  let count = box(0);\n\tlet fallback_count = box(0);\n\tlet toggle_state = $state(false);\n</script>\n\n{#snippet counter(c = count)}\n\t<p id=\"count\">Count: {count.value}</p>\n\t<p id=\"fallback-count\">Fallback count: {fallback_count.value}</p>\n  <button id=\"increment\" on:click={() => (c.value += 1)}>Click to change referenced state value</button>\n\t<button id=\"change-ref\" on:click={() => toggle_state = !toggle_state}>Click to change state reference</button>\n{/snippet}\n\n{@render counter(toggle_state ? fallback_count : undefined)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-const/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>0</button>`,\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>0</button>');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>2</button>');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>4</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-const/main.svelte",
    "content": "<script>\n  let count = $state(0);\n</script>\n\n{#snippet counter()}\n  {@const doubled = count * 2}\n  <button on:click={() => (count += 1)}>{doubled}</button>\n{/snippet}\n\n{@render counter()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-const-same-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest() {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-const-same-block/main.svelte",
    "content": "{#if true}\n\t{@const xx = test}\n\t{#snippet test()}{/snippet}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-deconflict/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>push</button><div style=\"display: grid; grid-template-columns: 1fr 1fr\"><div><p style=\"color: red\">1</p><p style=\"color: red\">2</p><p style=\"color: red\">3</p>\n\t\t\t\t<p style=\"color: red\">4</p><p style=\"color: red\">5</p><p style=\"color: red\">6</p></div><div><p style=\"color: blue\">1</p><p style=\"color: blue\">2</p><p style=\"color: blue\">3</p>\n\t\t\t\t<p style=\"color: blue\">4</p><p style=\"color: blue\">5</p><p style=\"color: blue\">6</p></div></div>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-deconflict/main.svelte",
    "content": "<script>\n\tlet numbers = $state([1, 2, 3]);\n</script>\n\n<button onclick={() => numbers.push(numbers.length + 1)}>\n\tpush\n</button>\n\n<div style=\"display: grid; grid-template-columns: 1fr 1fr\">\n\t<div>\n\t\t{#snippet x(n)}\n\t\t\t<p style=\"color: red\">{n}</p>\n\t\t{/snippet}\n\n\t\t{#each numbers as n}\n\t\t\t{@render x(n)}\n\t\t{/each}\n\t</div>\n\n\t<div>\n\t\t{#snippet x(n)}\n\t\t\t<p style=\"color: blue\">{n}</p>\n\t\t{/snippet}\n\n\t\t{#each numbers as n}\n\t\t\t{@render x(n)}\n\t\t{/each}\n\t</div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-default-arg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: false // or else the arg will be called eagerly anyway to check for dead zones\n\t},\n\thtml: `\n\t<div>1 1 1</div>\n\t<div>2 2 2</div>\n\t<div>1 1 1</div>\n\t<p>2</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-default-arg/main.svelte",
    "content": "<script>\n\timport { untrack } from 'svelte';\n\n\tlet count = $state(0);\n\tfunction default_arg() {\n\t\tuntrack(() => count++);\n\t\treturn 1;\n\t}\n</script>\n\n{#snippet item(id = default_arg())}\n\t<div>{id} {id} {id}</div>\n{/snippet}\n\n{@render item()}\n{@render item(2)}\n{@render item()}\n<p>{count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `a`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/main.svelte",
    "content": "<script>\n\tlet array = $state(['a', 'b', 'c'])\n</script>\n\n{#snippet content([x])}\n\t{x}\n{/snippet}\n\n{@render content(array)}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-duplicate-children/Child.svelte",
    "content": "<script>\n\tconst {children} = $props();\n</script>\n<div>{@render children()}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-duplicate-children/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>Hello</div><div>World</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-duplicate-children/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n</script>\n\n<Child>\n\t{#snippet children()}\n\t\tHello\n\t{/snippet}\n</Child>\n\n<Child>\n\t{#snippet children()}\n\t\tWorld\n\t{/snippet}\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-dynamic-children/Button.svelte",
    "content": "<script>\n\tconst { children, change } = $props();\n</script>\n\n<button onclick={change}>\n\t{@render children()}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-dynamic-children/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button><span>hidden</span></button>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [b1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button><span>showing</span></button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-dynamic-children/main.svelte",
    "content": "<script>\n\timport Button from \"./Button.svelte\";\n\n\tlet show = $state(false);\n</script>\n\n<Button change={() => show = true}>\n\t{#if show}\n\t\t<span>showing</span>\n\t{:else}\n\t\t<span>hidden</span>\n\t{/if}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-expressions/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>foo</p>\n\t\t<hr>\n\t\t<p>foo</p>\n\t\t<hr>\n\t\t<p>foo</p>\n\t\t<hr>\n\t\t<p>foo</p>\n\t\t<hr>\n\t\t<p>foo</p>\n\t\t<hr>\n\t\t<p>foo</p>\n\t\t<hr>\n\t\t<p>bar</p>\n\t\t<hr>\n\t\t<hr>\n\t\t<button>toggle</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>bar</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>bar</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<hr>\n\t\t\t\t<p>foo</p>\n\t\t\t\t<button>toggle</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-expressions/child.svelte",
    "content": "<script>\n\tlet { snippets, snippet, optional } = $props();\n\n\tfunction getOptional() {\n\t\treturn optional;\n\t}\n</script>\n\n{@render snippets[snippet]()}\n<hr>\n{@render snippets?.[snippet]?.()}\n<hr>\n{@render snippets.foo()}\n<hr>\n{@render snippets?.foo()}\n<hr>\n{@render snippets?.foo?.()}\n<hr>\n{@render snippets.foo?.()}\n<hr>\n{@render (optional ?? snippets.bar)()}\n<hr>\n{@render optional?.()}\n<hr>\n{@render getOptional()?.()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-expressions/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n\tlet snippet = $state('foo');\n\tlet show = $state(false);\n</script>\n\n{#snippet foo()}\n\t<p>foo</p>\n{/snippet}\n\n{#snippet bar()}\n\t<p>bar</p>\n{/snippet}\n\n<Child snippets={{foo, bar}} {snippet} optional={show ? foo : undefined} />\n\n<button on:click={() => { snippet = 'bar'; show = true; }}>toggle</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisted-module/Child.svelte",
    "content": "<script module>\n\texport {\n\t\tfoo\n\t}\n</script>\n\n{#snippet foo(a, b)}\n\tHello world {a + b}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisted-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\thtml: `Hello world 3`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisted-module/main.svelte",
    "content": "<script>\n\timport { foo } from './Child.svelte';\n</script>\n\n{@render foo(1, 2)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisted-module-2/Child.svelte",
    "content": "<script module>\n\tconst message = 'hello';\n\n\texport { one };\n</script>\n\n{#snippet one()}\n\t{@render two()}\n{/snippet}\n\n{#snippet two()}\n\t{message}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisted-module-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\thtml: `hello`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisted-module-2/main.svelte",
    "content": "<script>\n\timport { one } from './Child.svelte';\n</script>\n\n{@render one()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\ttest({ target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tbutton.click();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting/main.svelte",
    "content": "<script>\n\tfunction log() {\n\t\t// Test that the log function is not hoisted. If it was, this would make the test\n\t\t// pass still, but Vitest would error because it sees that there are unhandled errors\n\t\tsnippet;\n\t}\n</script>\n\n{#snippet snippet()}Hello{/snippet}\n\n<button on:click={log}>\n\tlog snippet\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: 'a'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-2/main.svelte",
    "content": "<script>\n\tlet abc = 'a'\n</script>\n\n{@render b()}\n\n{#snippet a()}\n\t{abc}\n{/snippet}\n\n{#snippet b()}\n\t{@render a()}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello world!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-3/main.svelte",
    "content": "<script module>\n\texport { foo }\n</script>\n\n<script>\n\tlet name = 'world';\n</script>\n\n<h1>Hello {name}!</h1>\n\n{#snippet foo()}\n\too\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-4/Component.svelte",
    "content": "<h1>Hello world!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-4/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<h1>Hello world!</h1>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-hoisting-4/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tconst object = {\n\t\tproperty: Component\n\t};\n</script>\n\n{#snippet not_hoisted()}\n\t<object.property />\n{/snippet}\n\n{@render not_hoisted()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-invalid-call/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\terror: 'invalid_snippet_arguments'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-invalid-call/main.svelte",
    "content": "<script>\n\ttest();\n</script>\n\n{#snippet test()}\n\t<p>hello</p>\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-namespace-1/Widget.svelte",
    "content": "<script>\n\tlet { children } = $props();\n</script>\n\n<svg>\n\t{@render children()}\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-namespace-1/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div>\n\t\t\t<svg>\n\t\t\t\t<line x1=\"0\" y1=\"0\" x2=\"100\" y2=\"100\" />\n\t\t\t</svg>\n\t\t</div>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst div = target.querySelector('div');\n\t\tok(div);\n\t\tassert.equal(div.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\n\t\tconst line = target.querySelector('line');\n\t\tok(line);\n\t\tassert.equal(line.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-namespace-1/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte'\n</script>\n\n<div>\n\t<Widget>\n\t\t{#snippet children()}\n\t\t\t<line x1=\"0\" y1=\"0\" x2=\"100\" y2=\"100\" />\n\t\t{/snippet}\n\t</Widget>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-namespace-2/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<svg>\n\t\t\t<foreignObject>\n\t\t\t\t<p>hello</p>\n\t\t\t</foreignObject>\n\t\t</svg>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tok(svg);\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\t\tassert.equal(p.namespaceURI, 'http://www.w3.org/1999/xhtml');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-namespace-2/main.svelte",
    "content": "<svg>\n\t{#snippet p()}\n\t\t<p>hello</p>\n\t{/snippet}\n\t<foreignObject>\n\t\t{@render p()}\n\t</foreignObject>\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-optional-arguments/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst count = target.querySelector('button');\n\t\tconst fallback = target.querySelector('p');\n\n\t\tassert.htmlEqual(count?.innerHTML ?? '', '0');\n\t\tassert.htmlEqual(fallback?.innerHTML ?? '', 'fallback');\n\n\t\tcount?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(count?.innerHTML ?? '', '1');\n\t\tassert.htmlEqual(fallback?.innerHTML ?? '', 'fallback');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-optional-arguments/main.svelte",
    "content": "<script>\n\tfunction box(value) {\n\t\tlet state = $state(value);\n\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn state\n\t\t\t},\n\t\t\tset value(v) {\n\t\t\t\tstate = v;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet count = box(0);\n</script>\n\n{#snippet counter(c)}\n\t{#if c}\n  \t\t<button on:click={() => (c.value += 1)}>{c.value}</button>\n\t{:else}\n\t\t<p>fallback</p>\n\t{/if}\n{/snippet}\n\n{@render counter()}\n{@render counter(count)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-optional-arguments-defaults/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '013/023'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-optional-arguments-defaults/main.svelte",
    "content": "{#snippet one(a, b = 1, c = (2, 3))}\n  {a}{b}{c}\n{/snippet}\n\n{#snippet two(a, b = (1, 2), c = 3)}\n  {a}{b}{c}\n{/snippet}\n\n{@render one(0)}/{@render two(0)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-explicit/Counter.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n\n\tlet count = $state(0);\n</script>\n\n{@render foo(count)}\n\n<button on:click={() => count += 1}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-explicit/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>clicks: 0</p>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>clicks: 1</p>\n\t\t\t\t<button>click me</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-explicit/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n</script>\n\n{#snippet foo(n)}\n\t<p>clicks: {n}</p>\n{/snippet}\n\n<Counter {foo} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-explicit-no-args/Counter.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n</script>\n\n{@render foo()}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-explicit-no-args/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>foo</p>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-explicit-no-args/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n</script>\n\n{#snippet foo()}\n\t<p>foo</p>\n{/snippet}\n\n<Counter {foo} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-implicit/Counter.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n\n\tlet count = $state(0);\n</script>\n\n{@render foo(count)}\n\n<button on:click={() => count += 1}>\n\tclick me\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-implicit/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>clicks: 0</p>\n\t\t<button>click me</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>clicks: 1</p>\n\t\t\t\t<button>click me</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-implicit/main.svelte",
    "content": "<script>\n\timport Counter from './Counter.svelte';\n</script>\n\n<Counter>\n\t{#snippet foo(n)}\n\t\t<p>clicks: {n}</p>\n\t{/snippet}\n</Counter>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-reactive/Inner.svelte",
    "content": "<script>\n\tlet { snippet } = $props();\n</script>\n\n{@render snippet()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>foo</p>\n\t\t<button>show bar</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>bar</p>\n\t\t\t\t<button>show bar</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-prop-reactive/main.svelte",
    "content": "<script>\n\timport Inner from './Inner.svelte';\n\n\tlet show_foo = $state(true);\n</script>\n\n{#snippet foo()}\n\t<p>foo</p>\n{/snippet}\n\n{#snippet bar()}\n\t<p>bar</p>\n{/snippet}\n\n<Inner snippet={show_foo ? foo : bar} />\n\n<button on:click={() => show_foo = false}>show bar</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\n\thtml: `<button>click</button><p>clicks: 0</p>`,\n\n\ttest({ target, assert }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<button>click</button><p>clicks: 1</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw/main.svelte",
    "content": "<script>\n\timport { createRawSnippet } from 'svelte';\n\n\tlet count = $state(0);\n\n\tconst hello = createRawSnippet((count) => ({\n\t\trender: () => `\n\t\t\t<p>clicks: ${count()}</p>\n\t\t`,\n\t\tsetup(p) {\n\t\t\t$effect(() => {\n\t\t\t\tp.textContent = `clicks: ${count()}`\n\t\t\t});\n\t\t}\n\t}));\n</script>\n\n<button onclick={() => count += 1}>click</button>\n\n{@render hello(count)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-component/Child.svelte",
    "content": "<script>\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => (count += 1)}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-component/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\thtml: `<div><button>clicks: 0</button></div>`,\n\n\ttest({ target, assert }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div><button>clicks: 1</button></div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-component/main.svelte",
    "content": "<script>\n\timport { createRawSnippet, hydrate } from 'svelte';\n\timport { render } from 'svelte/server';\n\timport Child from './Child.svelte';\n\n\tlet { browser } = $props();\n\n\tlet count = $state(0);\n\n\tconst hello = createRawSnippet((count) => ({\n\t\trender: () => `\n\t\t\t<div>${browser ? '' : render(Child).body}</div>\n\t\t`,\n\t\tsetup(target) {\n\t\t\thydrate(Child, { target })\n\t\t}\n\t}));\n</script>\n\n{@render hello()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-component-ssr-dev/Child.svelte",
    "content": "<script>\n\tlet count = $state(0);\n</script>\n\n<button onclick={() => (count += 1)}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-component-ssr-dev/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\thtml: `<div><div><button>clicks: 0</button></div></div>`,\n\n\ttest({ target, assert }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.htmlEqual(target.innerHTML, `<div><div><button>clicks: 1</button></div></div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-component-ssr-dev/main.svelte",
    "content": "<script>\n\timport { createRawSnippet, hydrate } from 'svelte';\n\timport { render } from 'svelte/server';\n\timport Child from './Child.svelte';\n\n\tlet { browser } = $props();\n\n\tlet count = $state(0);\n\n\tconst hello = createRawSnippet((count) => ({\n\t\trender: () => `\n\t\t\t<div>${browser ? '' : render(Child).body}</div>\n\t\t`,\n\t\tsetup(target) {\n\t\t\thydrate(Child, { target })\n\t\t}\n\t}));\n</script>\n\n<div>\n\t{@render hello()}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-teardown/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ target, assert, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\t\tassert.deepEqual(logs, ['tearing down']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-raw-teardown/main.svelte",
    "content": "<script>\n\timport { createRawSnippet } from 'svelte';\n\n\tlet show = $state(true);\n\n\tconst snippet = createRawSnippet(() => ({\n\t\trender: () => `<hr>`,\n\t\tsetup(p) {\n\t\t\treturn () => console.log('tearing down')\n\t\t}\n\t}));\n</script>\n\n<button onclick={() => show = !show}>click</button>\n\n{#if show}\n\t{@render snippet()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>foo</p>\n\t\t<button>show bar</button>\n\t`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>bar</p>\n\t\t\t\t<button>show bar</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-reactive/main.svelte",
    "content": "<script>\n\tlet show_foo = $state(true);\n\tlet snippet = $derived(show_foo ? foo : bar);\n</script>\n\n{#snippet foo()}\n\t<p>foo</p>\n{/snippet}\n\n{#snippet bar()}\n\t<p>bar</p>\n{/snippet}\n\n{@render snippet()}\n\n<button on:click={() => show_foo = false}>show bar</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-reactive-args/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<p>snippet: 0</p>\n\t\t<button>toggle</button>\n\t\t<button>increase count</button>\n\t`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst [toggle, increment] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tincrement?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>snippet: 1</p>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>increase count</button>\n\t\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, []);\n\n\t\tflushSync(() => {\n\t\t\ttoggle?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>component: 1</p>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>increase count</button>\n\t\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, [1]);\n\n\t\tflushSync(() => {\n\t\t\tincrement?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>component: 2</p>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>increase count</button>\n\t\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, [1]);\n\n\t\tflushSync(() => {\n\t\t\ttoggle?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<p>snippet: 2</p>\n\t\t\t\t<button>toggle</button>\n\t\t\t\t<button>increase count</button>\n\t\t\t`\n\t\t);\n\t\tassert.deepEqual(logs, [1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-reactive-args/inner.svelte",
    "content": "<script>\n    let { count } = $props();\n    console.log(count);\n</script>\n\n<p>component: {count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-reactive-args/main.svelte",
    "content": "<script>\n\timport Inner from \"./inner.svelte\";\n\n\tlet count = $state(0);\n\tlet show_foo = $state(true);\n\tlet snippet = $derived(show_foo ? foo : bar);\n</script>\n\n{#snippet foo({count})}\n\t<p>snippet: {count}</p>\n{/snippet}\n\n{#snippet bar(props)}\n\t<Inner {...props}></Inner>\n{/snippet}\n\n{@render snippet({ count })}\n\n<button onclick={() => show_foo = !show_foo}>toggle</button>\n<button onclick={() => count++}>increase count</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-ref/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\thtml: `<form></form>\\nundefined`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-ref/main.svelte",
    "content": "<script>\n\tlet thisBug;\n</script>\n\n<form bind:this={thisBug}>\n\t{#snippet Bug()}\n\t\tcool\n\t{/snippet}\n</form>\n\n{typeof thisBug}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-scope/Component.svelte",
    "content": "<script>\n\tlet { inner } = $props();\n</script>\n\n{#if inner}\n\t{@render inner()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-scope/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>S</p><a href=\"#\">S</a><p>v</p><a href=\"#\">v</a><p>e</p><a href=\"#\">e</a><p>l</p><a href=\"#\">l</a><p>t</p><a href=\"#\">t</a><p>e</p><a href=\"#\">e</a>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-scope/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\tlet name = \"Svelte\";\n</script>\n\n{#each name.split('') as character}\n\t<p>{character}</p>\n\t<Component>\n\t\t{#snippet inner()}\n\t\t\t<a href={'#'}>{character}</a>\n\t\t{/snippet}\n\t</Component>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-select/Select.svelte",
    "content": "<script>\n\tlet { children, ...rest } = $props();\n</script>\n<select name=\"pets\" id=\"pet-select1\" {...rest}>\n  {@render children()}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-select/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div><label for=\"pet-select\">Choose a pet 1:</label><select id=\"pet-select1\" name=\"pets\">\n\t<option value=\"\">--Please choose an option--</option><option value=\"dog\">Dog</option><option value=\"cat\">Cat</option></select></div><div><label for=\"pet-select\">Choose a pet 2:</label>\n\t<select id=\"pet-select2\" name=\"pets\"><option value=\"\">--Please choose an option--</option><option value=\"dog\">Dog</option><option value=\"cat\">Cat</option></select></div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-select/main.svelte",
    "content": "<script>\n\timport Select from './Select.svelte'\n</script>\n\n<div>\n\t<label for=\"pet-select\">Choose a pet 1:</label>\n\t<Select>\n\t\t<option value=\"\">--Please choose an option--</option>\n\t\t<option value=\"dog\">Dog</option>\n\t\t<option value=\"cat\">Cat</option>\n\t</Select>\n</div>\n\n<div>\n\t<label for=\"pet-select\">Choose a pet 2:</label>\n\t<select name=\"pets\" id=\"pet-select2\">\n\t\t<option value=\"\">--Please choose an option--</option>\n\t\t<option value=\"dog\">Dog</option>\n\t\t<option value=\"cat\">Cat</option>\n\t</select>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-let-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip_mode: ['hydrate', 'server'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\truntime_error: 'invalid_default_snippet'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-let-error/inner.svelte",
    "content": "<script>\n    let { children } = $props();\n</script>\n\n{@render children(true)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-let-error/main.svelte",
    "content": "<script>\n\timport Inner from './inner.svelte';\n</script>\n\n<Inner let:foo>\n\t{foo}\n</Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-let-renamed-children-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\truntime_error: 'invalid_default_snippet'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-let-renamed-children-error/inner.svelte",
    "content": "<script>\n    let { children: x } = $props();\n</script>\n\n{@render x(true)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-let-renamed-children-error/main.svelte",
    "content": "<script>\n\timport Inner from './inner.svelte';\n</script>\n\n<Inner let:foo>\n\t{foo}\n</Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-no-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-no-error/inner.svelte",
    "content": "<script>\n    let { children } = $props();\n</script>\n\n{@render children(true)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-slot-no-error/main.svelte",
    "content": "<script>\n\timport Inner from './inner.svelte';\n</script>\n\n<Inner>I don't need to use the argument if I don't want to</Inner>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-spread/Button.svelte",
    "content": "<script>\n\tlet { ...props } = $props();\n</script>\n\n<button {...props}>\n\t<slot />\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<button>hello</button>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-spread/main.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n</script>\n\n<Button>\n\thello\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-store/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>hello world</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet snippet = writable(hello);\n</script>\n\n{#snippet hello()}\n\t<p>hello world</p>\n{/snippet}\n\n{@render $snippet()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-top-level/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\thtml: `<p>hello world</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-top-level/main.svelte",
    "content": "<script>\n\tconst {children = snippet} = $props();\n</script>\n{@render children()}\n{#snippet snippet()}\n\t<p>hello world</p>\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-typescript/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '1 2 3 4 5 6a'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-typescript/main.svelte",
    "content": "<script lang=\"ts\">\n</script>\n\n{#snippet counter1(c: number)}\n\t{c}\n{/snippet}\n{#snippet counter2({ c }: {c: number})}\n\t{c}\n{/snippet}\n{#snippet counter3(c?: number)}\n\t{c}\n{/snippet}\n{#snippet counter4(c: number = 4)}\n\t{c}\n{/snippet}\n{#snippet counter5(c?: number = 5)}\n\t{c}\n{/snippet}\n{#snippet counter6(c?: number, d?: string)}\n\t{c}{d}\n{/snippet}\n\n{@render counter1(1)}\n{@render counter2({ c: 2 })}\n{@render counter3(3)}\n{@render counter4()}\n{@render counter5()}\n{@render counter6(6, 'a')}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-undefined/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tassert.throws(() => {\n\t\t\tbtn?.click();\n\t\t\tflushSync();\n\t\t}, /invalid_snippet/);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-undefined/main.svelte",
    "content": "<script>\n  let state = $state({\n\t\tvalue: counter\n\t});\n</script>\n\n{#snippet counter()}\n  Test\n{/snippet}\n\n{@render state.value()}\n\n<button onclick={() => state.value = undefined}>change</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-whitespace/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true // Render in dev mode to check that the validation error is not thrown\n\t},\n\twithoutNormalizeHtml: 'only-strip-comments',\n\thtml: `A B C D <pre>Testing\n123          ;\n    456</pre>`,\n\tssrHtml: `A B C D <pre>Testing\n123          ;\n    456</pre>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-whitespace/main.svelte",
    "content": "<script>\n\timport Pre from \"./pre.svelte\";\n\n</script>\nA\n{#snippet snip()}C{/snippet}\nB\n{@render snip()}\nD\n\n<Pre>\n    Testing\n123          ;\n    456\n</Pre>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippet-whitespace/pre.svelte",
    "content": "<script>\n    let { children } = $props();\n</script>\n\n<pre>{@render children()}</pre>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippets-as-slots/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>Default foo</p> <p>Named bar</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippets-as-slots/child.svelte",
    "content": "<p><slot foo=\"foo\" /></p>\n<p><slot name=\"named\" bar=\"bar\" /></p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/snippets-as-slots/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte';\n</script>\n\n<Child>\n\t{#snippet children({ foo })}\n\t\tDefault {foo}\n\t{/snippet}\n\t{#snippet named({ bar })}\n\t\tNamed {bar}\n\t{/snippet}\n</Child>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-element-input-select/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst [option1, option2] = select;\n\n\t\tassert.ok(option1.selected);\n\t\tassert.ok(!option2.selected);\n\n\t\tconst btn = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\t\tassert.ok(option1.selected);\n\t\tassert.ok(!option2.selected);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-element-input-select/main.svelte",
    "content": "<script>\n\tlet { value = \"Hello\", spread = { disabled: false } } = $props();\n</script>\n\n<button onclick={()=> spread = { disabled: false }}></button>\n\n<select bind:value {...spread}>\n  <option>Hello</option>\n  <option>World</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-props/Button.svelte",
    "content": "<script>\n\tlet { ...props } = $props();\n</script>\n\n<button {...props}>\n\tHello world\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button data-attr=\"\">Hello world</button><button data-attr=\"\">Hello world</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-props/main.svelte",
    "content": "<script>\n\timport Button from \"./Button.svelte\";\n\n\tconst attrs = {};\n\n\tObject.defineProperty(attrs, \"data-attr\", {\n\t\tvalue: \"\",\n\t\tenumerable: true\n\t});\n</script>\n\n<button {...attrs}>\n\tHello world\n</button>\n\n<Button {...attrs} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-props-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Toggle</button><h1>Style: not red</h1>`);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>Toggle</button><h1 data-red=\"true\">Style: red</h1>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/spread-props-2/main.svelte",
    "content": "<script>\n\tlet isRed = $state(true)\n\n  const attributes = $derived({\n    'data-red': isRed ? true : undefined\n  });\n</script>\n\n<button onclick={() => isRed = !isRed }>Toggle</button>\n\n<h1 {...attributes}>Style: {isRed ? 'red' : 'not red'}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-bind-group/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>+</button><input type=\"checkbox\" value=\"1\"><input type=\"checkbox\" value=\"2\"><input type=\"checkbox\" value=\"3\">\\n[]`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.equal(target.querySelectorAll('input')[1].checked, true);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>+</button><input type=\"checkbox\" value=\"1\"><input type=\"checkbox\" value=\"2\"><input type=\"checkbox\" value=\"3\">\\n[\"2\"]`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-bind-group/main.svelte",
    "content": "<script>\n\tlet checkboxes = $state([]);\n\tlet values = ['1', '2', '3'];\n</script>\n\n<button onclick={() => checkboxes.push('2')}>+</button>\n\n{#each values as val, i}\n\t<input type=\"checkbox\" value={val} bind:group={checkboxes} />\n{/each}\n\n{JSON.stringify(checkboxes)}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-delete-property/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: '<button>set</button><button>delete</button><p>a,b,c</p><p>{\"a\":1,\"b\":2,\"c\":3}</p>',\n\ttest({ assert, target }) {\n\t\tconst [btn, bt2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set</button><button>delete</button><p>a,b,c</p><p>{\"a\":1,\"b\":2,\"c\":3}</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbt2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button>set</button><button>delete</button><p>a,c</p><p>{\"a\":1,\"c\":3}</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-delete-property/main.svelte",
    "content": "<script>\n\tlet numbers = $state({ a: 1, b: 2, c: 3 });\n</script>\n\n<button onclick={() => { numbers.b = 2; }}>set</button>\n<button onclick={() => { delete numbers.b; }}>delete</button>\n<p>{Object.keys(numbers)}</p>\n<p>{JSON.stringify(numbers)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-each-bind-this/Paragraph.svelte",
    "content": "<script>\n\tconst { text } = $props();\n\n\tlet boundParagraph = $state();\n\n\texport function changeBackgroundToRed() {\n\t\tboundParagraph.style.backgroundColor = 'red';\n\t}\n</script>\n\n<p bind:this={boundParagraph}>\n\t{text}\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-each-bind-this/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [btn, btn2, btn3] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><p style=\"background-color: red;\">b1</p><button>change</button><button>delete</button></div><div><p>b2</p><button>change</button><button>delete</button></div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn2?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><p>b2</p><button>change</button><button>delete</button></div>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn3?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div><p style=\"background-color: red;\">b2</p><button>change</button><button>delete</button></div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-each-bind-this/main.svelte",
    "content": "<script>\n\timport Paragraph from './Paragraph.svelte';\n\tlet boundParagraphs = $state([]);\n\n\tlet store = $state([\n\t\t{ id: 1, text: 'b1' },\n\t\t{ id: 2, text: 'b2' }\n\t]);\n</script>\n\n{#each store as text, i (text.id)}\n\t<div>\n\t\t<Paragraph bind:this={boundParagraphs[i]} text={text.text}></Paragraph>\n\t\t<button onclick={() => boundParagraphs[i].changeBackgroundToRed()}>\n\t\t\tchange\n\t\t</button>\n\t\t<button onclick={() => store.splice(store.indexOf(text), 1)}>\n\t\t\tdelete\n\t\t</button>\n\t</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-in-template/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<form><input name=\"name\"><button>Add</button></form>`,\n\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<form><input name=\"name\"><button>Add</button></form><div></div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-in-template/main.svelte",
    "content": "<script>\n\timport { SvelteSet } from 'svelte/reactivity';\n\tconst set = new SvelteSet();\n</script>\n\n<form onsubmit={e => {\n\te.preventDefault();\n\tconst data = new FormData(e.target);\n\tconst state = $state({ name: data.get('name') });\n\tset.add(state);\n\te.target.reset();\n}}>\n\t<input name=\"name\" />\n\t<button>Add</button>\n</form>\n\n{#each set as item}\n\t<div>{item.name}</div>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-proxy-equality-mismatch/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tasync test({ assert, target, warnings }) {\n\t\tconst [btn1, btn2, btn3, btn4, btn5, btn6, clear] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t\tbtn2.click();\n\t\t\tbtn3.click();\n\t\t\tbtn4.click();\n\t\t\tbtn5.click();\n\t\t\tbtn6.click();\n\t\t});\n\n\t\tassert.deepEqual(warnings, [\n\t\t\t'Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `array.includes(...)` will produce unexpected results',\n\t\t\t'Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `array.indexOf(...)` will produce unexpected results',\n\t\t\t'Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `array.lastIndexOf(...)` will produce unexpected results'\n\t\t]);\n\n\t\tflushSync(() => clear.click());\n\t\twarnings.length = 0;\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t\tbtn2.click();\n\t\t\tbtn3.click();\n\t\t\tbtn4.click();\n\t\t\tbtn5.click();\n\t\t\tbtn6.click();\n\t\t});\n\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-proxy-equality-mismatch/main.svelte",
    "content": "<script>\n\tlet primitive = 'foo';\n\tlet object = {};\n\n\tlet array = $state([primitive, object]);\n</script>\n\n<button onclick={() => array.includes(primitive)}>array.includes(primitive)</button>\n<button onclick={() => array.includes(object)}>array.includes(object)</button>\n\n<hr />\n\n<button onclick={() => array.indexOf(primitive)}>array.indexOf(primitive)</button>\n<button onclick={() => array.indexOf(object)}>array.indexOf(object)</button>\n\n<hr />\n\n<button onclick={() => array.lastIndexOf(primitive)}>array.lastIndexOf(primitive)</button>\n<button onclick={() => array.lastIndexOf(object)}>array.lastIndexOf(object)</button>\n\n<hr />\n\n<button onclick={() => (array.length = 0)}>clear</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-proxy-version/Item.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte';\n\n\tlet context = getContext('container');\n\n\t$effect(() => {\n\t\tcontext.register('test');\n\t\treturn () => context.unregister('test');\n\t});\n</script>\n\n<div>Item</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-proxy-version/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<div>Item</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-proxy-version/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\n\timport Item from './Item.svelte'\n\n\tlet items = $state({});\n\n\tsetContext('container', {\n\t\tregister: (id) => items[id] = true,\n\t\tunregister: (id) => delete items[id]\n\t});\n</script>\n\n<Item />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-raw-bindable/Child.svelte",
    "content": "<script>\n\tlet { object = $bindable() } = $props();\n</script>\n\n<button onclick={() => (object = { count: object.count + 1 })}>reassign</button>\n<button onclick={() => (object.count += 1)}>mutate</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-raw-bindable/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: '<button>reassign</button> <button>mutate</button> <p>0</p>',\n\ttest({ assert, target }) {\n\t\tconst [reassign, mutate] = target.querySelectorAll('button');\n\t\tconst output = target.querySelector('p');\n\t\tok(output);\n\n\t\tflushSync(() => mutate.click());\n\t\tassert.htmlEqual(output.innerHTML, '0');\n\n\t\tflushSync(() => reassign.click());\n\t\tassert.htmlEqual(output.innerHTML, '2');\n\n\t\tflushSync(() => mutate.click());\n\t\tassert.htmlEqual(output.innerHTML, '2');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-raw-bindable/main.svelte",
    "content": "<script>\n\timport Child from './Child.svelte';\n\n\tlet object = $state.raw({ count: 0 });\n</script>\n\n<Child bind:object />\n<p>{object.count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-readonly/Component.svelte",
    "content": "<script>\n\timport Component2 from './Component2.svelte';\n\tconst {state} = $props();\n\n\tfunction render(state) {\n    return state\n  }\n</script>\n\n<Component2 state={render(state)} />\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-readonly/Component2.svelte",
    "content": "<script>\n\tconst {state} = $props();\n</script>\n\n{state}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-readonly/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button></button>\\n[object Object]`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-readonly/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\tlet state = $state();\n</script>\n\n<button onclick={() => {\n\tstate = {}\n}}></button>\n{#if state}\n\t<Component state={state} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-reuse/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<button>state1.value: a state2.value: a</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>state1.value: b state2.value: b</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-reuse/main.svelte",
    "content": "<script>\n\tlet foo = { value: 'a' }\n\tlet state1 = $state(foo);\n\tlet state2 = $state(foo);\n</script>\n\n<button onclick={() => {\n\t\tlet new_state1 = {};\n\t\tlet new_state2 = {};\n\t\t// This contains Symbol.$state and Symbol.$readonly and we can't do anything against it,\n\t\t// because it's called on the original object, not our state proxy\n\t\tReflect.ownKeys(foo).forEach(k => {\n\t\t\tnew_state1[k] = foo[k];\n\t\t\tnew_state2[k] = foo[k];\n\t\t});\n\t\tnew_state1.value = 'b';\n\t\tnew_state2.value = 'b';\n\t\t// $.proxy will see that Symbol.$state exists on this object already, which shouldn't result in a stale value\n\t\tstate1 = new_state1;\n\t\t// $.proxy can't look into Symbol.$state because of the frozen object\n\t\tstate2 = Object.freeze(new_state2);\n\t}}\n>\nstate1.value: {state1.value}\nstate2.value: {state2.value}\n</button>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `[{\"a\":0}] <button>[{\"a\":0}]</button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `[{\"a\":0}] <button>[{\"a\":0},{\"a\":1}]</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot/main.svelte",
    "content": "<script>\n    let items = $state([{a: 0}]);\n    let start = $state.snapshot(items);\n</script>\n\n{JSON.stringify(start)}\n<button on:click={() => items.push({a: items.length})}>{JSON.stringify(structuredClone($state.snapshot(items)))}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot-array-holes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>false</div><div>true</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot-array-holes/main.svelte",
    "content": "<script>\n\tlet arr = []\n\tarr[5] = true\n\n\tlet state = $state([])\n\tstate[5] = true\n</script>\n\n<div>{2 in $state.snapshot(state)}</div>\n<div>{5 in $state.snapshot(state)}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot-date/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `true\\ntrue\\ntrue\\ntrue`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot-date/main.svelte",
    "content": "<script>\n\tlet test = $state({\n\t\ta: new Date()\n\t});\n\tlet test2 = $state.snapshot(test);\n\n\tlet test3 = {\n\t\ta: new Date()\n\t}\n\tlet test4 = structuredClone(test3);\n</script>\n\n{test.a instanceof Date}\n{test2.a instanceof Date}\n{test3.a instanceof Date}\n{test4.a instanceof Date}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot-uncloneable-ignored/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\tasync test({ warnings, assert }) {\n\t\tassert.deepEqual(warnings, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-snapshot-uncloneable-ignored/main.svelte",
    "content": "<script>\n\tlet arr = $state({\n\t\ttest: () => {}\n\t});\n\n\t// svelte-ignore state_snapshot_uncloneable\n\t$state.snapshot(arr);\n</script>\n\n<!-- svelte-ignore state_snapshot_uncloneable -->\n<div {...$state.snapshot(arr)}>a</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-space/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button type=\"button\">Update Text</button><div></div>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<button type=\"button\">Update Text</button><div>updated</div>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-space/main.svelte",
    "content": "<script>\n\tlet text = $state('');\n\n\tfunction update_text() {\n\t\t\ttext = 'updated';\n\t}\n</script>\n\n<button type=\"button\" on:click={update_text}>Update Text</button>\n\n<div>{text}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-store/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>test_store:\\n 4</p><p>counter:\\n 4</p><button>+1</button>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<p>test_store:\\n 5</p><p>counter:\\n 5</p><button>+1</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store'\n\n\tlet test_store = writable({id:0});\n\tlet counter = $state(3);\n\n\t$effect(() => {\n\t\t$test_store.id = counter\n\t});\n</script>\n\n\n<p>test_store: {$test_store.id}</p>\n<p>counter: {counter}</p>\n\n<button onclick={() => counter++}>+1</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-store-props/Component.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet { data } = $props();\n\tlet form = writable(data.form);\n\n\tfunction addTag() {\n\t\t$form.data.tags['third'] = 3;\n\t}\n</script>\n\n<pre>{JSON.stringify($form, null, 2)}</pre>\n\n<button on:click={addTag}>add</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-store-props/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<pre>{\\n\"data\": { \"tags\": { \"first\": 1, \"second\": 2, \"third\": 3 } } }</pre><button>add</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-store-props/main.svelte",
    "content": "<script>\n\timport Page from './Component.svelte';\n\n\tlet data = $state({ form: { data: { tags: { first: 1, second: 2 }}}});\n</script>\n<Page {data} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-undefined/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button></button>`,\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>foo</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-undefined/main.svelte",
    "content": "<script>\n    let foo = $state();\n</script>\n\n<button on:click={() => foo = 'foo'}>{foo}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-update/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [1, 1, 1, 1, 4, 4]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/state-update/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet o = $state({ x: 0 });\n\n\tconsole.log(++x);\n\tconsole.log(x++);\n\tconsole.log(++o.x);\n\tconsole.log(o.x++);\n\tconsole.log((o.x += 2));\n\tconsole.log((x += 2));\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/static-boundary/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<div><div>test</div></div>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/static-boundary/main.svelte",
    "content": "<div>\n\t<svelte:boundary>\n\t\t<div>test</div>\n\t</svelte:boundary>\n</div>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-assignments/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>3</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-assignments/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst count = writable(0);\n\n\t$count += 1;\n\t$count += 1;\n\t$count += 1;\n</script>\n\n<p>{$count}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-async-first-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, ' / ');\n\t\tawait new Promise((r) => setTimeout(r, 110));\n\t\tassert.htmlEqual(target.innerHTML, '42 / 42');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-async-first-value/main.svelte",
    "content": "<script>\n\tfunction store() {\n\t\treturn {\n\t\t\tsubscribe: (cb) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tcb(42);\n\t\t\t\t}, 100);\n\n\t\t\t\treturn () => {};\n\t\t\t}\n\t\t};\n\t}\n\n\tconst value1 = store();\n\tconst value2 = store();\n\tconst derivedValue = $derived($value1);\n</script>\n\n{$value2} / {derivedValue}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-directive/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<div>mounted</div>`,\n\tssrHtml: `<div>hello</div>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-directive/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet store = writable({action: (node, text) => {\n\t\tnode.textContent = text;\n\t\treturn {\n\t\t\tdestroy() {}\n\t\t}\n\t}});\n\n\tlet text = writable('mounted');\n</script>\n\n<div use:$store.action={$text}>hello</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>false</button>`,\n\ttest({ assert, target }) {\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>true</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-derived/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tlet data = { store: writable(false) };\n\tlet { store } = $derived(data);\n</script>\n\n<button onclick={() => ($store = true)}>{$store}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-props-hoisting/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>1</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-props-hoisting/child.svelte",
    "content": "<script>\n\tconst { attrs } = $props();\n\tfunction increment() {\n\t\t$attrs.count++;\n\t}\n</script>\n\n<button onclick={increment}>{$attrs.count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-props-hoisting/main.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\timport Child from \"./child.svelte\";\n\tconst attrs = writable({ count: 0 });\n</script>\n\n<Child {attrs} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-props-runelike/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, ok }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>1</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-props-runelike/child.svelte",
    "content": "<script>\n\tlet { state } = $props();\n</script>\n\n<button onclick={()=> $state++}>{$state}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-props-runelike/main.svelte",
    "content": "<svelte:options runes />\n<script>\n\timport { writable } from \"svelte/store\";\n\timport Child from \"./child.svelte\";\n\tconst state = writable(0);\n</script>\n\n<Child {state} />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t\tbutton?.click();\n\t\t\tbutton?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `\\n3\\n<button>Increment</button><br>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-state/main.svelte",
    "content": "<script>\n  import { writable, fromStore } from 'svelte/store';\n\tconst store = writable(0)\n\tconst state_from_store= fromStore(store)\n\n\tconst derived_value= $derived.by(() => {\n\t\tif (state_from_store.current > 10) {\n\t\t\treturn state_from_store.current\n\t\t}\n\t\telse{\n\t\t\treturn 10\n\t\t}\n\t})\n\n\tfunction increment() {\n\t\t$store += 1;\n\t}\n</script>\n\n{state_from_store.current}\n<button onclick={increment}>Increment</button><br>\n\n{#if derived_value > 10 }Exceeded 10!{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-state-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t\tbutton?.click();\n\t\t\tbutton?.click();\n\t\t});\n\t\tassert.htmlEqual(target.innerHTML, `<div>3</div><div>3,  6</div><button>increment</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-from-state-2/main.svelte",
    "content": "<script>\n\timport { fromStore } from 'svelte/store';\n\timport { writable } from 'svelte/store';\n\n\tconst store = writable(0);\n\n\tconst value = fromStore(store);\n</script>\n\n<div>{$store}</div>\n\n{#if true}\n\t{@const doubled = value.current * 2}\n\t<div>{value.current}, {doubled}</div>\n{/if}\n\n<button onclick={() => $store++}>increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-increment-decrement/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `0 0 2 2 0`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-increment-decrement/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from \"svelte/store\";\n\n\tlet x = writable(0);\n\tconst a = $x++;\n\tconst b = ++$x;\n\tconst c = $x--;\n\tconst d = --$x;\n</script>\n\n{$x} {a} {b} {c} {d}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-inside-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest: ({ assert, target }) => {\n\t\tconst [loading, increment] = target.querySelectorAll('button');\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>$value: 0</div>\n\t\t\t\t<div>valueFromStore.current: 0</div>\n\t\t\t\t<div>valueDerivedCurrent: 0</div>\n\t\t\t\t<button>Loading</button>\n\t\t\t\t<button>Increment</button>\n\t\t\t`\n\t\t);\n\n\t\tloading.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>$value: Loading...</div>\n\t\t\t\t<div>valueFromStore.current: Loading...</div>\n\t\t\t\t<div>valueDerivedCurrent: Loading...</div>\n\t\t\t\t<button>Loading</button>\n\t\t\t\t<button>Increment</button>\n\t\t\t`\n\t\t);\n\n\t\tincrement.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<div>$value: 1</div>\n\t\t\t\t<div>valueFromStore.current: 1</div>\n\t\t\t\t<div>valueDerivedCurrent: 1</div>\n\t\t\t\t<button>Loading</button>\n\t\t\t\t<button>Increment</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-inside-derived/main.svelte",
    "content": "<script>\n  import { fromStore, writable } from 'svelte/store';\n\t\n  let isLoading = $state(false);\n\n  const value = writable(0);\n  const valueFromStore = fromStore(value);\n  const valueDerivedCurrent = $derived(valueFromStore.current);\n</script>\n\n<div>\n\t$value: {isLoading ? 'Loading...' : $value}\n</div>\n\n<div>\n\tvalueFromStore.current: {isLoading ? 'Loading...' : valueFromStore.current}\n</div>\n\n<div>\n\tvalueDerivedCurrent: {isLoading ? 'Loading...' : valueDerivedCurrent}\n</div>\n\n<button\n\tonclick={() => {\n\t\tisLoading = true;\n\t}}>\n\tLoading\n</button>\n\n<button\n\tonclick={() => {\n\t\t$value++;\n\t\tisLoading = false;\n\t}}>\n\tIncrement\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<h1>Hello store</h1>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-no-mutation-validation/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tlet store1 = writable('store');\n\tlet store2 = {\n\t\tsubscribe: (cb) => {\n\t\t\tcb('...');\n\t\t\tcb('Hello');\n\t\t\treturn () => {};\n\t\t}\n\t};\n\tlet store3 = undefined;\n\n\t// store signal is updated during reading this, which normally errors, but shouldn't for stores\n\tlet name = $derived($store1);\n\tlet hello = $derived($store2);\n\tlet undefined_value = $derived($store3);\n</script>\n\n<h1>{hello} {name} {undefined_value}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-reassign-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tasync test({ target, assert }) {\n\t\tassert.htmlEqual(target.innerHTML, `<p>bar</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-reassign-object/main.svelte",
    "content": "<script>\n\timport { writable } from \"svelte/store\";\n\n\tconst obj = writable({ name: 'foo' });\n\n\t$obj = { name: 'bar' };\n\n\tconst clone = structuredClone($obj);\n</script>\n\n<p>{clone.name}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-subscribe-effect-init/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<button>increment</button>`,\n\n\ttest({ assert, target, logs }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tassert.deepEqual(logs, [1]);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, [1, 2]);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.deepEqual(logs, [1, 2, 3]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-subscribe-effect-init/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst count = writable(0);\n\tlet ran = 0;\n\n\t$effect(() => {\n\t\t$count;\n\t\tconsole.log(++ran);\n\t});\n</script>\n\n<button on:click={() => $count++}>increment</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-unsubscribe-not-referenced-after/_config.js",
    "content": "import { tick } from 'svelte';\nimport { ok, test } from '../../test';\n\n// Test that the store is unsubscribed from, even if it's not referenced once the store itself is set to null\nexport default test({\n\tasync test({ target, assert }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"number\"> <p>0</p> <button>add watcher</button>`\n\t\t);\n\n\t\ttarget.querySelector('button')?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"number\"> <p>1</p> 1 <button>remove watcher</button>`\n\t\t);\n\n\t\tconst input = target.querySelector('input');\n\t\tok(input);\n\n\t\tinput.stepUp();\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"number\"> <p>2</p> 2 <button>remove watcher</button>`\n\t\t);\n\n\t\ttarget.querySelector('button')?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"number\"> <p>2</p> <button>add watcher</button>`\n\t\t);\n\n\t\tinput.stepUp();\n\t\tinput.dispatchEvent(new Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"number\"> <p>2</p> <button>add watcher</button>`\n\t\t);\n\n\t\ttarget.querySelector('button')?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"number\"> <p>3</p> 3 <button>remove watcher</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-unsubscribe-not-referenced-after/main.svelte",
    "content": "<script>\n\timport { writable, derived } from \"svelte/store\";\n\n\tconst obj = writable({ a: 1 });\n\tlet count = $state(0);\n\tlet watcherA = $state();\n\n\tfunction watch (prop) {\n\t\treturn derived(obj, (o) => {\n\t\t\tcount++;\n\t\t\treturn o[prop];\n\t\t});\n\t}\n</script>\n\n<input type=\"number\" bind:value={$obj.a}>\n<p>{count}</p>\n\n{#if watcherA}\n\t{$watcherA}\n\t<button on:click={() => watcherA = null}>remove watcher</button>\n{:else}\n\t<button on:click={() => watcherA = watch(\"a\")}>add watcher</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/Test.svelte",
    "content": "<script lang=\"ts\">\n\tconst { store } = $props();\n\n\t$effect(() => {\n\t\t$store;\n\t\treturn () => {\n\t\t\tconsole.log($store);\n\t\t\t$store++;\n\t\t\tconsole.log($store);\n\t\t};\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tconst input = target.querySelector('input');\n\t\tflushSync(() => {\n\t\t\tinput?.click();\n\t\t});\n\t\tassert.deepEqual(logs, [0, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\n\timport Test from './Test.svelte';\n\n\tlet store = writable(0);\n\n\tlet checked = $state(true);\n</script>\n\n<input type=\"checkbox\" bind:checked />\n\n{#if checked}\n\t<Test {store} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/style-directive-mutations/_config.js",
    "content": "import { flushSync, tick } from 'svelte';\nimport { test } from '../../test';\n\n// This test counts mutations on hydration\n// set_style() should not mutate style on hydration, except if mismatch\nexport default test({\n\tmode: ['server', 'hydrate'],\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\tssrHtml: `\n\t\t<main id=\"main\" style=\"color: black;\">\n\t\t\t<div style=\"color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background:blue; background: linear-gradient(0, white 0%, red 100%); color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background: url(https://placehold.co/100x100?text=;&font=roboto); color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background: url(&quot;https://placehold.co/100x100?text=;&font=roboto&quot;); color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background: url('https://placehold.co/100x100?text=;&font=roboto'); color: red; font-size: 18px !important;\"></div>\n\t\t</main>\n\t`,\n\n\thtml: `\n\t\t<main id=\"main\" style=\"color: white;\">\n\t\t\t<div style=\"color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background:blue; background: linear-gradient(0, white 0%, red 100%); color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"border: 1px solid; color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background: url(https://placehold.co/100x100?text=;&font=roboto); color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background: url(&quot;https://placehold.co/100x100?text=;&font=roboto&quot;); color: red; font-size: 18px !important;\"></div>\n\t\t\t<div style=\"background: url('https://placehold.co/100x100?text=;&font=roboto'); color: red; font-size: 18px !important;\"></div>\n\t\t</main>\n\t`,\n\n\tasync test({ target, assert, component, instance }) {\n\t\tflushSync();\n\t\ttick();\n\t\tassert.deepEqual(instance.get_and_clear_mutations(), ['MAIN']);\n\n\t\tlet divs = target.querySelectorAll('div');\n\n\t\t// Note : we cannot compare HTML because set_style() use dom.style.cssText\n\t\t// which can alter the format of the attribute...\n\n\t\tdivs.forEach((d) => assert.equal(d.style.margin, ''));\n\t\tdivs.forEach((d) => assert.equal(d.style.color, 'red'));\n\t\tdivs.forEach((d) => assert.equal(d.style.fontSize, '18px'));\n\n\t\tcomponent.margin = '1px';\n\t\tflushSync();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV'],\n\t\t\t'margin'\n\t\t);\n\t\tdivs.forEach((d) => assert.equal(d.style.margin, '1px'));\n\n\t\tcomponent.color = 'yellow';\n\t\tflushSync();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV'],\n\t\t\t'color'\n\t\t);\n\t\tdivs.forEach((d) => assert.equal(d.style.color, 'yellow'));\n\n\t\tcomponent.fontSize = '10px';\n\t\tflushSync();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV'],\n\t\t\t'fontSize'\n\t\t);\n\t\tdivs.forEach((d) => assert.equal(d.style.fontSize, '10px'));\n\n\t\tcomponent.fontSize = null;\n\t\tflushSync();\n\t\tassert.deepEqual(\n\t\t\tinstance.get_and_clear_mutations(),\n\t\t\t['DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV', 'DIV'],\n\t\t\t'fontSize'\n\t\t);\n\t\tdivs.forEach((d) => assert.equal(d.style.fontSize, ''));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/style-directive-mutations/main.svelte",
    "content": "<script>\n\tlet {\n\t\tmargin = null,\n\t\tcolor = 'red',\n\t\tfontSize = '18px',\n\t\tstyle1 = 'border: 1px solid',\n\t\tstyle2 = 'border: 1px solid; margin: 1em',\n\t\tstyle3 = 'color:blue; border: 1px solid; color: green;',\n\t\tstyle4 = 'background:blue; background: linear-gradient(0, white 0%, red 100%)',\n\t\tstyle5 = 'border: 1px solid; /* width: 100px; height: 100%; color: green */',\n\t\tstyle6 = 'background: url(https://placehold.co/100x100?text=;&font=roboto);',\n\t\tstyle7 = 'background: url(\"https://placehold.co/100x100?text=;&font=roboto\");',\n\t\tstyle8 = \"background: url('https://placehold.co/100x100?text=;&font=roboto');\",\n\t\t\n\t\tbrowser\n\t} = $props();\n\n\tlet mutations = [];\n\tlet observer;\n\n\tif (browser) {\n\t\tobserver = new MutationObserver(update_mutation_records);\n\t\tobserver.observe(document.querySelector('#main'), { attributes: true, subtree: true });\n\n\t\t$effect(() => {\n\t\t\treturn () => observer.disconnect();\n\t\t});\n\t}\n\n\tfunction update_mutation_records(results) {\n\t\tfor (const r of results) {\n\t\t\tmutations.push(r.target.nodeName);\n\t\t}\n\t}\n\n\texport function get_and_clear_mutations() {\n\t\tupdate_mutation_records(observer.takeRecords());\n\t\tconst result = mutations;\n\t\tmutations = [];\n\t\treturn result;\n\t}\n</script>\n\n<main id=\"main\" style:color={browser?'white':'black'}>\n\t<div style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style1} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style2} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style3} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style4} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style5} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style6} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style7} style:margin style:color style:font-size|important={fontSize}></div>\n\t<div style={style8} style:margin style:color style:font-size|important={fontSize}></div>\n</main>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/style-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nconst style_1 = 'invalid-key:0; margin:4px;;color: green ;color:blue ';\nconst style_2 = ' other-key : 0 ; padding:2px; COLOR:green; color: blue';\nconst style_2_normalized = 'padding: 2px; color: blue;';\n\n// https://github.com/sveltejs/svelte/issues/15309\nexport default test({\n\tprops: {\n\t\tstyle: style_1\n\t},\n\n\tssrHtml: `\n\t\t<div style=\"${style_1}\"></div>\n\t\t<div style=\"${style_1}\"></div>\n\n\t\t<custom-element style=\"${style_1}\"></custom-element>\n\t\t<custom-element style=\"${style_1}\"></custom-element>\n\t`,\n\n\tasync test({ assert, target, component }) {\n\t\tcomponent.style = style_2;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div style=\"${style_2_normalized}\"></div>\n\t\t\t<div style=\"${style_2_normalized}\"></div>\n\n\t\t\t<custom-element style=\"${style_2_normalized}\"></custom-element>\n\t\t\t<custom-element style=\"${style_2_normalized}\"></custom-element>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.style = '';\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div style=\"\"></div>\n\t\t\t<div style=\"\"></div>\n\n\t\t\t<custom-element style=\"\"></custom-element>\n\t\t\t<custom-element style=\"\"></custom-element>\n\t\t\t`\n\t\t);\n\n\t\tcomponent.style = null;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div></div>\n\t\t\t<div></div>\n\n\t\t\t<custom-element></custom-element>\n\t\t\t<custom-element></custom-element>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/style-update/main.svelte",
    "content": "<script>\n\tlet { style } = $props();\n</script>\n\n<div {style}></div>\n<div {...{style}}></div>\n\n<custom-element {style}></custom-element>\n<custom-element {...{style}}></custom-element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-boundary-dev-const/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// https://github.com/sveltejs/svelte/issues/15368\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\tmode: ['client'],\n\n\thtml: `\n\t\t<p>BOOM</p>\n\t\t<p>BOOM</p>\n\t\t<div>OK</div>\n\t\t<div>OK</div>\n\t`,\n\n\tasync test({ target, assert, component }) {\n\t\tcomponent.ok = false;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<p>BOOM</p>\n\t\t<p>BOOM</p>\n\t\t<p>BOOM</p>\n\t\t<p>BOOM</p>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-boundary-dev-const/main.svelte",
    "content": "<script>\n\tlet { ok = true } = $props();\n\n\tfunction throwError() {\n\t  throw new Error();\n\t}\n\n\tfunction throwErrorOnUpdate() {\n\t\tif (ok) {\n\t\t\treturn \"OK\";\n\t\t} else {\n\t\t\tthrowError();\n\t\t}\n\t}\n</script>\n  \n<svelte:boundary>\n\t<div>{throwError()}</div>\n  \n\t{#snippet failed()}\n\t\t<p>BOOM</p>\n\t{/snippet}\n</svelte:boundary>\n\n<svelte:boundary>\n\t{@const result = throwError()}\n\t<div>{result}</div>\n  \n\t{#snippet failed()}\n\t\t<p>BOOM</p>\n\t{/snippet}\n</svelte:boundary>\n\n<svelte:boundary>\n\t<div>{throwErrorOnUpdate()}</div>\n  \n\t{#snippet failed()}\n\t\t<p>BOOM</p>\n\t{/snippet}\n</svelte:boundary>\n\n<svelte:boundary>\n\t{@const result = throwErrorOnUpdate()}\n\t<div>{result}</div>\n  \n\t{#snippet failed()}\n\t\t<p>BOOM</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-props-update/Comp-1.svelte",
    "content": "<script>\n\tlet { data } = $props();\n</script>\n\n{#each data.obj.arr as i}\n\t<p>{i}</p>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-props-update/Comp-2.svelte",
    "content": "<p>Comp 2</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-props-update/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\t\tbtn.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>Change</button> <p>Comp 2</p>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-props-update/main.svelte",
    "content": "<script>\n\timport Comp_1 from './Comp-1.svelte';\n\timport Comp_2 from './Comp-2.svelte';\n\n\tlet Comp = $state.raw(Comp_1);\n\tlet data = $state.raw({ obj: { arr: [1, 2, 3] } });\n\n\tfunction change() {\n\t\tComp = Comp_2;\n\t\tdata = {};\n\t}\n</script>\n\n<button onclick={change}>Change</button>\n\n<Comp {data} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-switch-dev/A.svelte",
    "content": "A\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-switch-dev/B.svelte",
    "content": "B\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-switch-dev/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tcompileOptions: {\n\t\thmr: true,\n\t\tdev: true\n\t},\n\ttest({ target, assert }) {\n\t\tassert.htmlEqual(target.innerHTML, `<button>switch</button> A`);\n\n\t\ttarget.querySelector('button')?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>switch</button> B`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-component-switch-dev/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\tlet component = $state(A);\n</script>\n\n<button onclick={() => (component = B)}>switch</button>\n<svelte:component this={component} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-element-css-hash/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<div></div>\n\t\t<div class=\"red svelte-p153w3\"></div>\n\t\t<div></div>\n\t\t<div class=\"red svelte-p153w3\"></div>\n\t\t<div class=\"blue svelte-p153w3\"></div>\n\t\t<div class=\"blue svelte-p153w3\"></div>\n\t`,\n\n\tasync test({ assert, target, component }) {\n\t\tcomponent.active = true;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<div></div>\n\t\t\t<div class=\"red svelte-p153w3\"></div>\n\t\t\t<div class=\"active\"></div>\n\t\t\t<div class=\"red svelte-p153w3 active\"></div>\n\t\t\t<div class=\"blue svelte-p153w3\"></div>\n\t\t\t<div class=\"blue svelte-p153w3 active\"></div>\n\t\t`\n\t\t);\n\n\t\tcomponent.tag = 'span';\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span></span>\n\t\t\t<span class=\"red svelte-p153w3\"></span>\n\t\t\t<span class=\"active\"></span>\n\t\t\t<span class=\"red svelte-p153w3 active\"></span>\n\t\t\t<span class=\"blue svelte-p153w3\"></span>\n\t\t\t<span class=\"blue svelte-p153w3 active\"></span>\n\t\t`\n\t\t);\n\n\t\tcomponent.active = false;\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<span></span>\n\t\t\t<span class=\"red svelte-p153w3\"></span>\n\t\t\t<span class=\"\"></span>\n\t\t\t<span class=\"red svelte-p153w3\"></span>\n\t\t\t<span class=\"blue svelte-p153w3\"></span>\n\t\t\t<span class=\"blue svelte-p153w3\"></span>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-element-css-hash/main.svelte",
    "content": "<script>\n\tlet { tag = \"div\", active = false } = $props();\n\n\tfunction cn(classname) {\n\t\treturn classname;\n\t}\n</script>\n\n<svelte:element this={tag}></svelte:element>\n<svelte:element this={tag} class=\"red\"></svelte:element>\n<svelte:element this={tag} class:active={active}></svelte:element>\n<svelte:element this={tag} class=\"red\" class:active={active}></svelte:element>\n<svelte:element this={tag} class={cn(\"blue\")}></svelte:element>\n<svelte:element this={tag} class={cn(\"blue\")} class:active={active}></svelte:element>\n\n<style>\n\t.red {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-element-custom-element-css-hash/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\thtml: `<custom-element class=\"red svelte-70s021\"></custom-element><custom-element class=\"red svelte-70s021\"></custom-element>`,\n\n\tasync test({ assert, target }) {\n\t\tconst [el, el2] = target.querySelectorAll('custom-element');\n\t\tok(el);\n\t\tok(el2);\n\n\t\tassert.deepEqual(el.className, 'red svelte-70s021');\n\t\tassert.deepEqual(el2.className, 'red svelte-70s021');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-element-custom-element-css-hash/main.svelte",
    "content": "<svelte:element this={'custom-element'} class=\"red\"></svelte:element>\n<custom-element class=\"red\"></custom-element>\n\n<style>\n\t.red {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-element-draggable/_config.js",
    "content": "import { ok, test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\thtml: `<div draggable=\"false\"></div><div draggable=\"false\"></div>`,\n\n\tasync test({ assert, target, logs }) {\n\t\tconst [div, div2] = target.querySelectorAll('div');\n\t\tok(div);\n\t\tok(div2);\n\n\t\tassert.deepEqual(div.getAttribute('draggable'), 'false');\n\t\tassert.deepEqual(div.draggable, false);\n\t\tassert.deepEqual(div2.getAttribute('draggable'), 'false');\n\t\tassert.deepEqual(div2.draggable, false);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-element-draggable/main.svelte",
    "content": "<script>\n\tlet attrs = $state({ draggable: 'false' });\n</script>\n\n<svelte:element this={'div'} draggable=\"false\"></svelte:element>\n\n<div {...attrs}></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<button>toggle</button><p>before</p><p>after</p>`,\n\n\tasync test({ target, assert }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst ps = target.querySelectorAll('p');\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[0].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 7,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[1].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 13,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\tflushSync(() => btn?.click());\n\n\t\tconst strong = target.querySelector('strong');\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(strong.__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 10,\n\t\t\tcolumn: 1\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta/main.svelte",
    "content": "<script>\n\tlet condition = $state(false);\n</script>\n\n<button onclick={() => condition = !condition}>toggle</button>\n\n<p>before</p>\n\n{#if condition}\n\t<strong>during</strong>\n{/if}\n\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-css-wrapper/Component.svelte",
    "content": "<h2>hello from component</h2>\n\n<style>\n\th2 {\n\t\tcolor: var(--color);\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-css-wrapper/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `\n\t\t<h1>hello</h1>\n\t\t<svelte-css-wrapper style=\"display: contents; --color: red;\">\n\t\t\t<h2 class=\"svelte-13kae5a\">hello from component</h2>\n\t\t</svelte-css-wrapper>\n\t\t<p>goodbye</p>\n\t`,\n\n\tasync test({ target, assert }) {\n\t\tconst h1 = target.querySelector('h1');\n\t\tconst h2 = target.querySelector('h2');\n\t\tconst p = target.querySelector('p');\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(h1.__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 5,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(h2.__svelte_meta.loc, {\n\t\t\tfile: 'Component.svelte',\n\t\t\tline: 1,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(p.__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 7,\n\t\t\tcolumn: 0\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-css-wrapper/main.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<h1>hello</h1>\n<Component --color=\"red\" />\n<p>goodbye</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-dynamic/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<button>toggle</button><p>before</p><p>after</p>`,\n\n\tasync test({ target, assert }) {\n\t\tconst btn = target.querySelector('button');\n\t\tconst ps = target.querySelectorAll('p');\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[0].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 7,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[1].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 13,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\tflushSync(() => btn?.click());\n\n\t\tconst strong = target.querySelector('strong');\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(strong.__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 10,\n\t\t\tcolumn: 1\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-dynamic/main.svelte",
    "content": "<script>\n\tlet condition = $state(false);\n</script>\n\n<button onclick={() => condition = !condition}>toggle</button>\n\n<svelte:element this={'p'}>before</svelte:element>\n\n{#if condition}\n\t<svelte:element this={'strong'}>during</svelte:element>\n{/if}\n\n<svelte:element this={'p'}>after</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-if-else/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `<p>before</p><p>during</p><p>after</p>`,\n\n\tasync test({ target, assert }) {\n\t\tconst ps = target.querySelectorAll('p');\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[0].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 1,\n\t\t\tcolumn: 0\n\t\t});\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[1].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 6,\n\t\t\tcolumn: 1\n\t\t});\n\n\t\t// @ts-expect-error\n\t\tassert.deepEqual(ps[2].__svelte_meta.loc, {\n\t\t\tfile: 'main.svelte',\n\t\t\tline: 11,\n\t\t\tcolumn: 0\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-if-else/main.svelte",
    "content": "<p>before</p>\n\n{#if false}\n\t<p>during</p>\n{:else if true}\n\t<p>during</p>\n{:else if false}\n\t<p>during</p>\n{/if}\n\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-parent/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client', 'hydrate'],\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\thtml: `\n\t\t<p>no parent</p>\n\t\t<button>toggle</button>\n\t\t<p>if</p>\n\t\t<p>each</p>\n\t\t<p>loading</p>\n\t\t<p>key</p>\n\t\t<p>hi</p>\n\t\t<p>hi</p>\n\t\t<p>hi</p>\n\t\t<p>hi</p>\n\t\t<p>hi</p>\n\t`,\n\n\tasync test({ target, assert }) {\n\t\tfunction check() {\n\t\t\tconst [main, if_, each, await_, key, child1, child2, child3, child4, dynamic] =\n\t\t\t\ttarget.querySelectorAll('p');\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(main.__svelte_meta.parent, null);\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(if_.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'if',\n\t\t\t\tline: 12,\n\t\t\t\tcolumn: 0,\n\t\t\t\tparent: null\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(each.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'each',\n\t\t\t\tline: 16,\n\t\t\t\tcolumn: 0,\n\t\t\t\tparent: null\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(await_.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'await',\n\t\t\t\tline: 20,\n\t\t\t\tcolumn: 0,\n\t\t\t\tparent: null\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(key.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'key',\n\t\t\t\tline: 26,\n\t\t\t\tcolumn: 0,\n\t\t\t\tparent: null\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(child1.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'component',\n\t\t\t\tcomponentTag: 'Child',\n\t\t\t\tline: 30,\n\t\t\t\tcolumn: 0,\n\t\t\t\tparent: null\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(child2.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'component',\n\t\t\t\tcomponentTag: 'Child',\n\t\t\t\tline: 33,\n\t\t\t\tcolumn: 1,\n\t\t\t\tparent: {\n\t\t\t\t\tfile: 'passthrough.svelte',\n\t\t\t\t\ttype: 'render',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tcolumn: 0,\n\t\t\t\t\tparent: {\n\t\t\t\t\t\tfile: 'main.svelte',\n\t\t\t\t\t\ttype: 'component',\n\t\t\t\t\t\tcomponentTag: 'Passthrough',\n\t\t\t\t\t\tline: 32,\n\t\t\t\t\t\tcolumn: 0,\n\t\t\t\t\t\tparent: null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(child3.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'component',\n\t\t\t\tcomponentTag: 'Child',\n\t\t\t\tline: 38,\n\t\t\t\tcolumn: 2,\n\t\t\t\tparent: {\n\t\t\t\t\tfile: 'passthrough.svelte',\n\t\t\t\t\ttype: 'render',\n\t\t\t\t\tline: 5,\n\t\t\t\t\tcolumn: 0,\n\t\t\t\t\tparent: {\n\t\t\t\t\t\tfile: 'main.svelte',\n\t\t\t\t\t\ttype: 'component',\n\t\t\t\t\t\tcomponentTag: 'Passthrough',\n\t\t\t\t\t\tline: 37,\n\t\t\t\t\t\tcolumn: 1,\n\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\tfile: 'passthrough.svelte',\n\t\t\t\t\t\t\ttype: 'render',\n\t\t\t\t\t\t\tline: 5,\n\t\t\t\t\t\t\tcolumn: 0,\n\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\tfile: 'main.svelte',\n\t\t\t\t\t\t\t\ttype: 'component',\n\t\t\t\t\t\t\t\tcomponentTag: 'Passthrough',\n\t\t\t\t\t\t\t\tline: 36,\n\t\t\t\t\t\t\t\tcolumn: 0,\n\t\t\t\t\t\t\t\tparent: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(child4.__svelte_meta.parent, {\n\t\t\t\tfile: 'passthrough.svelte',\n\t\t\t\ttype: 'render',\n\t\t\t\tline: 8,\n\t\t\t\tcolumn: 1,\n\t\t\t\tparent: {\n\t\t\t\t\tfile: 'passthrough.svelte',\n\t\t\t\t\ttype: 'if',\n\t\t\t\t\tline: 7,\n\t\t\t\t\tcolumn: 0,\n\t\t\t\t\tparent: {\n\t\t\t\t\t\tfile: 'main.svelte',\n\t\t\t\t\t\ttype: 'component',\n\t\t\t\t\t\tcomponentTag: 'Passthrough',\n\t\t\t\t\t\tline: 43,\n\t\t\t\t\t\tcolumn: 1,\n\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\tfile: 'main.svelte',\n\t\t\t\t\t\t\ttype: 'if',\n\t\t\t\t\t\t\tline: 42,\n\t\t\t\t\t\t\tcolumn: 0,\n\t\t\t\t\t\t\tparent: null\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// @ts-expect-error\n\t\t\tassert.deepEqual(dynamic.__svelte_meta.parent, {\n\t\t\t\tfile: 'main.svelte',\n\t\t\t\ttype: 'component',\n\t\t\t\tcomponentTag: 'x.y',\n\t\t\t\tline: 50,\n\t\t\t\tcolumn: 0,\n\t\t\t\tparent: null\n\t\t\t});\n\t\t}\n\n\t\tawait tick();\n\t\tcheck();\n\n\t\t// Test that stack is kept when re-rendering\n\t\tconst button = target.querySelector('button');\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tbutton?.click();\n\t\tawait tick();\n\t\tcheck();\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-parent/child.svelte",
    "content": "<p>hi</p>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-parent/main.svelte",
    "content": "<script>\n\timport Child from \"./child.svelte\";\n\timport Passthrough from \"./passthrough.svelte\";\n\tlet x = { y: Child }\n\tlet key = 'test';\n\tlet show = $state(true);\n</script>\n\n<p>no parent</p>\n<button onclick={() => show = !show}>toggle</button>\n\n{#if true}\n\t<p>if</p>\n{/if}\n\n{#each [1]}\n\t<p>each</p>\n{/each}\n\n{#await Promise.resolve()}\n\t<p>loading</p>\n{:then}\n\t<p>await</p>\n{/await}\n\n{#key key}\n\t<p>key</p>\n{/key} \n\n<Child />\n\n<Passthrough>\n\t<Child />\n</Passthrough>\n\n<Passthrough>\n\t<Passthrough>\n\t\t<Child />\n\t</Passthrough>\n</Passthrough>\n\n{#if show}\n\t<Passthrough>\n\t\t{#snippet named()}\n\t\t\t<p>hi</p>\n\t\t{/snippet}\n\t</Passthrough>\n{/if}\n\n<x.y />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-meta-parent/passthrough.svelte",
    "content": "<script>\n\tlet { children, named } = $props();\n</script>\n\n{@render children?.()}\n\n{#if true}\n\t{@render named?.()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-set-generators/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\thtml: `1`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svelte-set-generators/main.svelte",
    "content": "<script>\n\timport { SvelteSet } from 'svelte/reactivity';\n\n\tfunction *generator() {\n\t\tyield 1;\n\t}\n\n\tlet gen = new SvelteSet(generator());\n</script>\n\n{#each gen as item}\n\t{item}\n{/each}\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-attribute-case/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<svg viewBox=\"0 0 10 10\"></svg><svg viewBox=\"0 0 10 10\" xmlns=\"http://www.w3.org/2000/svg\"></svg><svg viewBox=\"\"></svg>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-attribute-case/main.svelte",
    "content": "<svelte:options namespace=\"svg\" />\n<svelte:element this=\"svg\" viewBox=\"0 0 10 10\" />\n<svelte:element this=\"svg\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 10\" />\n<svg viewBox=\"\" />"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-element-attribute-serialize/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client';\nimport { test, ok } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tconst button = target.querySelector('button');\n\t\tok(svg);\n\t\tok(button);\n\n\t\tassert.equal(svg.getAttribute('class'), '0');\n\t\tflushSync(() => {\n\t\t\tbutton.click();\n\t\t});\n\t\tassert.equal(svg.getAttribute('class'), '1');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-element-attribute-serialize/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n</script>\n\n<svg class={count}>\n</svg>\n\n<button onclick={()=>count++}></button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block/Child.svelte",
    "content": "\n{#if true}\n\t<g>\n\t\t<rect x=\"20\" y=\"10\" width=\"50\" height=\"50\" fill=\"yellow\"/>\n\t</g>\n{:else}\n\t<div>lol</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\thtml: `<svg height=\"200px\" viewBox=\"0 0 100 100\" width=\"200px\"><g><rect fill=\"yellow\" height=\"50\" width=\"50\" x=\"20\" y=\"10\"></rect></g></svg>`,\n\ttest({ assert, target }) {\n\t\tconst g = target.querySelector('g');\n\t\tconst rect = target.querySelector('rect');\n\t\tok(g);\n\t\tok(rect);\n\n\t\tassert.equal(g.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\tassert.equal(rect.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block/main.svelte",
    "content": "<script>\n\timport Child from \"./Child.svelte\";\n</script>\n\n<svg viewBox=\"0 0 100 100\" width=\"200px\" height=\"200px\">\n\t<Child />\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-2/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\thtml: `<svg><a href=\"/docs\"><text class=\"small\" x=\"20\" y=\"40\"></text></a></svg>`,\n\ttest({ assert, target }) {\n\t\tconst a = target.querySelector('a');\n\t\tok(a);\n\n\t\tassert.equal(a.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-2/main.svelte",
    "content": "<svg>\n\t{#if true}\n\t\t<a href=\"/docs\">\n\t\t\t<text x=\"20\" y=\"40\" class=\"small\">{name}</text>\n\t\t</a>\n\t{/if}\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\thtml: `<svg><title>potato</title></svg>`,\n\ttest({ assert, target }) {\n\t\tconst title = target.querySelector('title');\n\t\tok(title);\n\n\t\tassert.equal(title.namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/main.svelte",
    "content": "<svg>\n\t{#if true}\n\t\t<title>potato</title>\n\t{/if}\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-infer/Wrapper.svelte",
    "content": "<text x=\"0\" y=14>outside</text>\n\n{#if true}\n  <text x=\"0\" y=\"26\">true</text>\n{/if}\n\n{#each Array(2).fill(0) as item, idx}\n  <text x={idx * 10} y={42}>{idx}</text>\n{/each}\n\n{@html '<text x=\"0\" y=\"40\">html</text>'}\n\n{@render test(\"snippet\")}\n\n{#snippet test(text)}\n<text x={20} y={42}>{text}</text>\n{/snippet}\n\n<!-- comment should not infer html namespace -->\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-infer/_config.js",
    "content": "import { test, ok } from '../../test';\n\nexport default test({\n\thtml: `\n\t<svg>\n\t\t<text x=\"0\" y=\"14\">outside</text>\n\t\t<text x=\"0\" y=\"26\">true</text>\n\t\t<text x=\"0\" y=\"42\">0</text>\n\t\t<text x=\"10\" y=\"42\">1</text>\n\t\t<text x=\"0\" y=\"40\">html</text>\n\t\t<text x=\"20\" y=\"42\">snippet</text>\n\t</svg>\n`,\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelector('svg');\n\t\tok(svg);\n\n\t\tassert.equal(svg.namespaceURI, 'http://www.w3.org/2000/svg');\n\n\t\tconst text_elements = target.querySelectorAll('text');\n\n\t\tassert.equal(text_elements.length, 6);\n\n\t\tfor (const { namespaceURI } of text_elements)\n\t\t\tassert.equal(namespaceURI, 'http://www.w3.org/2000/svg');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-infer/main.svelte",
    "content": "<script>\n  import Wrapper from \"./Wrapper.svelte\";\n</script>\n\n<svg>\n  <Wrapper />\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-infer-a-tag/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<svg><a><text>Hello</text></a></svg>\n\t<svg><a><text>Hello</text></a></svg>\n\t<svg><a><text>Hello</text></a></svg>\n`,\n\ttest({ assert, target }) {\n\t\tconst svg = target.querySelectorAll('svg');\n\t\tconst a = target.querySelectorAll('a');\n\t\tconst text = target.querySelectorAll('text');\n\n\t\tfor (const element of svg) {\n\t\t\tassert.equal(element.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\t}\n\n\t\tfor (const element of a) {\n\t\t\tassert.equal(element.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\t}\n\n\t\tfor (const element of text) {\n\t\t\tassert.equal(element.namespaceURI, 'http://www.w3.org/2000/svg');\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-infer-a-tag/main.svelte",
    "content": "<script>\n  import Svg from './svg.svelte';\n</script>\n\n<svg>\n\t<a>\n\t\t<text>Hello</text>\n\t</a>\n</svg>\n\n<svg>\n\t{#snippet test()}\n\t\t<a>\n\t\t\t<text>Hello</text>\n\t\t</a>\n\t{/snippet}\n\t{@render test()}\n</svg>\n\n<Svg>\n  <a>\n    <text>Hello</text>\n  </a>\n</Svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/svg-namespace-infer-a-tag/svg.svelte",
    "content": "<script>\n    let { children } = $props();\n</script>\n\n<svg>\n    {@render children()}\n</svg>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/tagged-template-literal-reactive/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\tasync test({ assert, target, ok }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tassert.htmlEqual(target.innerHTML, `0 <button></button>`);\n\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `1 <button></button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/tagged-template-literal-reactive/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tfunction showCount() {\n\t\treturn count;\n\t}\n</script>\n\n{showCount``} <button onclick={() => count++}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/text-effect-multi-deps/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `<p>0 - 0</p><button>+</button`,\n\n\tasync test({ assert, target }) {\n\t\tconst [btn1] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<p>1 - 1</p><button>+</button`);\n\n\t\tflushSync(() => {\n\t\t\tbtn1.click();\n\t\t});\n\n\t\tassert.htmlEqual(target.innerHTML, `<p>2 - 2</p><button>+</button`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/text-effect-multi-deps/main.svelte",
    "content": "<script>\n\tlet x = $state({a: 0, b:0});\n\tlet count = 0;\n</script>\n\n<p>{x.a} - {x.b}</p>\n\n<button onclick={() => {\n\tconst a = ++count;\n\tx = {a, b: a};\n}}>+</button>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/text-multiple-call-expression/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['x', 'y']);\n\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tflushSync(() => {\n\t\t\tb1.click();\n\t\t});\n\n\t\tflushSync(() => {\n\t\t\tb2.click();\n\t\t});\n\n\t\tassert.deepEqual(logs, ['x', 'y', 'x', 'y']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/text-multiple-call-expression/main.svelte",
    "content": "<script>\n\tlet x = $state(0);\n\tlet y = $state(0);\n\n\tfunction getX() {\n\t\tconsole.log('x')\n\t\treturn x;\n\t}\n\n\tfunction getY() {\n\t\tconsole.log('y')\n\t\treturn y;\n\t}\n</script>\n\n<button on:click={() => x++}>{x}</button>\n<button on:click={() => y++}>{y}</button>\n\n{getX()}|{getY()}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/text-multiple-nullish-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<li></li>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/text-multiple-nullish-expression/main.svelte",
    "content": "<script>\n\tfunction fn() {}\n</script>\n<li>{fn()}{null && fn()}</li>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/tick-timing/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test, ok } from '../../test';\n\n// Tests that tick only resolves after all pending effects have been cleared\nexport default test({\n\tskip: true, // weirdly, this works if you run it by itself\n\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tok(btn);\n\t\tbtn.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>5</button>`);\n\t\tbtn.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(target.innerHTML, `<button>6</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/tick-timing/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\t$effect(() => {\n\t\tif (count > 0 && count < 5) {\n\t\t\tcount++\n\t\t}\n\t});\n</script>\n\n<button on:click={() => count++}>{count}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/title-nullish/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tassert.equal(target.ownerDocument.title, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/title-nullish/main.svelte",
    "content": "<script>\n    const thing = {};\n</script>\n<svelte:head>\n    <title>{thing.thing}</title>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-subscribe/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `1`,\n\tmode: ['client', 'hydrate']\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-subscribe/main.svelte",
    "content": "<script>\n\timport { toStore } from 'svelte/store';\n\n\tlet count = $state(0);\n\n\tconst store = toStore(\n\t\t() => count,\n\t\t(v) => (count = v)\n\t);\n\n\tstore.set(1);\n</script>\n\n{$store}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-subscribe2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<div>Count 1!</div><div>Count from store 1!</div><button>Add 1</button>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-subscribe2/main.svelte",
    "content": "<script>\n\timport { toStore } from \"svelte/store\";\n\n\tlet counter = $state(0);\n\tconst count = toStore(() => counter, value => counter = value);\n</script>\n\n<div>Count {counter}!</div>\n<div>Count from store {$count}!</div>\n\n<button onclick={() => counter+=1}>Add 1</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-teardown/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tlet [, btn2] = target.querySelectorAll('button');\n\n\t\tbtn2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(target.innerHTML, `<button>Set data</button><button>Clear data</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-teardown/child.svelte",
    "content": "<script>\n\timport { toStore } from 'svelte/store'\n\n\tlet { data } = $props()\n\tconst currentValue = toStore(() => data.value)\n</script>\n\n<p>\n\tCurrent value:\n\t<span>{$currentValue}</span>\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/toStore-teardown/main.svelte",
    "content": "<script>\n\timport Child from './child.svelte'\n\n\tlet data = $state({ value: 'hello' });\n\n\tconst setData = () => (data = { value: 'hello' })\n\tconst clearData = () => (data = undefined)\n</script>\n\n<button onclick={setData}>Set data</button>\n<button onclick={clearData}>Clear data</button>\n\n{#if data}\n  <Child {data} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-component/Foo.svelte",
    "content": "<script>\n\tfunction fade(_) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\tcss: (t) => `opacity: ${t}`\n\t\t};\n\t}\n\n\n</script>\n\n<p transition:fade>foo</p>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-component/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\n/**\n * $.component() should not break transition\n * @see {@link https://github.com/sveltejs/svelte/issues/13645}\n */\nexport default test({\n\ttest({ assert, raf, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\t// in\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0;\">foo</p><p style=\"opacity: 0;\">foo</p>'\n\t\t);\n\n\t\traf.tick(50);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0.5;\">foo</p><p style=\"opacity: 0.5;\">foo</p>'\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"\">foo</p><p style=\"\">foo</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-component/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\tconst Comp = { Foo };\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => (visible = !visible)}>toggle</button>\n\n{#if visible}\n\t<Foo />\n\t<Comp.Foo />\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-delayed/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, raf, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\t// in\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0;\">delayed fade</p>'\n\t\t);\n\t\traf.tick(1);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0;\">delayed fade</p>'\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0;\">delayed fade</p>'\n\t\t);\n\n\t\traf.tick(150);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0.5;\">delayed fade</p>'\n\t\t);\n\n\t\traf.tick(200);\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button><p style=\"\">delayed fade</p>');\n\n\t\t// out\n\t\tbtn?.click();\n\t\tflushSync();\n\t\traf.tick(275);\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button><p style=\"\">delayed fade</p>');\n\n\t\traf.tick(300);\n\n\t\traf.tick(350);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0.5;\">delayed fade</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-delayed/main.svelte",
    "content": "<script>\n\tfunction fade(_) {\n\t\treturn {\n\t\t\tdelay: 100,\n\t\t\tduration: 100,\n\t\t\tcss: (t) => `opacity: ${t}`\n\t\t};\n\t}\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => (visible = !visible)}>toggle</button>\n\n{#if visible}\n\t<p transition:fade>delayed fade</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-delayed-events-css/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, raf, target, logs }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\t// in\n\t\tflushSync(() => btn.click());\n\t\tassert.deepEqual(logs, []);\n\t\traf.tick(1);\n\t\tassert.deepEqual(logs, []);\n\n\t\traf.tick(100);\n\t\tassert.deepEqual(logs, ['introstart']);\n\n\t\traf.tick(200);\n\t\tassert.deepEqual(logs, ['introstart', 'introend']);\n\n\t\t// out\n\t\tflushSync(() => btn.click());\n\t\tassert.deepEqual(logs, ['introstart', 'introend']);\n\t\traf.tick(201);\n\t\tassert.deepEqual(logs, ['introstart', 'introend']);\n\n\t\traf.tick(300);\n\t\tassert.deepEqual(logs, ['introstart', 'introend', 'outrostart']);\n\n\t\traf.tick(400);\n\t\tassert.deepEqual(logs, ['introstart', 'introend', 'outrostart', 'outroend']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-delayed-events-css/main.svelte",
    "content": "<script>\n\tfunction fade(_) {\n\t\treturn {\n\t\t\tdelay: 100,\n\t\t\tduration: 100,\n\t\t\tcss: (t) => `opacity: ${t}`\n\t\t};\n\t}\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => (visible = !visible)}>toggle</button>\n\n{#if visible}\n\t<p\n\t\ttransition:fade\n\t\tonintrostart={() => console.log('introstart')}\n\t\tonintroend={() => console.log('introend')}\n\t\tonoutrostart={() => console.log('outrostart')}\n\t\tonoutroend={() => console.log('outroend')}\n\t>delayed fade</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-delayed-events-js/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, raf, target, logs }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\t// in\n\t\tflushSync(() => btn.click());\n\t\tassert.deepEqual(logs, []);\n\t\traf.tick(1);\n\t\tassert.deepEqual(logs, []);\n\n\t\traf.tick(100);\n\t\tassert.deepEqual(logs, ['introstart']);\n\n\t\traf.tick(200);\n\t\tassert.deepEqual(logs, ['introstart', 'introend']);\n\n\t\t// out\n\t\tflushSync(() => btn.click());\n\t\tassert.deepEqual(logs, ['introstart', 'introend']);\n\t\traf.tick(201);\n\t\tassert.deepEqual(logs, ['introstart', 'introend']);\n\n\t\traf.tick(300);\n\t\tassert.deepEqual(logs, ['introstart', 'introend', 'outrostart']);\n\n\t\traf.tick(400);\n\t\tassert.deepEqual(logs, ['introstart', 'introend', 'outrostart', 'outroend']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-delayed-events-js/main.svelte",
    "content": "<script>\n\tfunction fade(node) {\n\t\treturn {\n\t\t\tdelay: 100,\n\t\t\tduration: 100,\n\t\t\ttick: (t) => node.style.opacity = t\n\t\t};\n\t}\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => (visible = !visible)}>toggle</button>\n\n{#if visible}\n\t<p\n\t\ttransition:fade\n\t\tonintrostart={() => console.log('introstart')}\n\t\tonintroend={() => console.log('introend')}\n\t\tonoutrostart={() => console.log('outrostart')}\n\t\tonoutroend={() => console.log('outroend')}\n\t>delayed fade</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, raf, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tbtn1?.click();\n\t\tbtn1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Push</button><button>Remove</button><ul><li>0</li><li>1</li><li>2</li></ul>'\n\t\t);\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\t\traf.tick(50);\n\n\t\tconst li = /** @type {HTMLElement & { foo: number }} */ (target.querySelector('ul > li'));\n\n\t\tassert.equal(li.foo, 0.5);\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.equal(li.foo, 0.5);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Push</button><button>Remove</button><ul><li>0</li><li>1</li><li>2</li><li>3</li></ul>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each/main.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tlet list = $state([]);\n\tlet id = 0;\n\n\tfunction push() {\n\t\tlist.push({ id: id++ })\n\t}\n\n\tfunction removeFirst() {\n\t\tlist.splice(0, 1);\n\t}\n</script>\n\n<button onclick={push}>Push</button>\n<button onclick={removeFirst}>Remove</button>\n\n<ul>\n\t{#each list as item (item.id)}\n\t\t<li out:foo>{item.id}</li>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each-2/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, raf, target }) {\n\t\tconst [btn1, btn2] = target.querySelectorAll('button');\n\n\t\tbtn1?.click();\n\t\tbtn1?.click();\n\t\tbtn1?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Push</button><button>Remove</button><ul><li>0</li><li>1</li><li>2</li></ul>'\n\t\t);\n\n\t\tbtn2?.click();\n\t\tflushSync();\n\t\traf.tick(50);\n\n\t\tconst li = /** @type {HTMLElement & { foo: number }} */ (target.querySelector('ul > li'));\n\n\t\tassert.equal(li.foo, 0.5);\n\n\t\tbtn1?.click();\n\t\tflushSync();\n\n\t\tassert.equal(li.foo, 0.5);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Push</button><button>Remove</button><ul><li>3</li><li>0</li><li>1</li><li>2</li></ul>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each-2/main.svelte",
    "content": "<script>\n\tfunction foo(node, params) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.foo = t;\n\t\t\t}\n\t\t};\n\t}\n\n\tlet list = $state([]);\n\tlet id = 0;\n\n\tfunction push() {\n\t\tlist.push({ id: id++ })\n\t}\n\n\tfunction remove() {\n\t\tlist = [];\n\t}\n</script>\n\n<button onclick={push}>Push</button>\n<button onclick={remove}>Remove</button>\n\n<ul>\n\t{#each list as item (item.id)}\n\t\t<li out:foo>{item.id}</li>\n\t{/each}\n</ul>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each-3/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, raf, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div><div>1</div><div>2</div><div>3</div></div>'\n\t\t);\n\n\t\tconst btn1 = target.querySelector('button');\n\t\tbtn1?.click();\n\t\tflushSync();\n\t\traf.tick(250);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div style=\"opacity: 0.5;\"><div>1</div><div>2</div><div>3</div></div>'\n\t\t);\n\n\t\tawait Promise.resolve();\n\n\t\tflushSync();\n\t\traf.tick(500);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div style=\"\"><div>3</div><div>4</div></div>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each-3/main.svelte",
    "content": "<script>\n\tfunction fade(_) {\n\t\treturn {\n\t\t\tduration: 500,\n\t\t\tcss: t => `opacity: ${t}`,\n\t\t}\n\t}\n\n\tlet toggle = $state(true);\n\tlet items = $state([ 1, 2, 3 ]);\n\n\tconst handle_toggle = async () => {\n\t\ttoggle = false;\n\t\tawait Promise.resolve();\n\t\titems = [3, 4];\n\t\ttoggle = true;\n\t};\n</script>\n\n<button onclick={handle_toggle}>Toggle</button>\n\n{#if toggle}\n\t<div transition:fade>\n\t\t{#each items as item (item)}\n\t\t\t<div>{item}</div>\n\t\t{/each}\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each-4/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, raf, target, logs }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div><div>1</div><div>2</div><div>3</div></div>'\n\t\t);\n\n\t\tconst btn1 = target.querySelector('button');\n\t\tbtn1?.click();\n\t\tflushSync();\n\t\traf.tick(250);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div style=\"opacity: 0.5;\"><div>1</div><div>2</div><div>3</div></div>'\n\t\t);\n\n\t\tlogs.length = 0;\n\n\t\tawait Promise.resolve();\n\n\t\tflushSync();\n\t\traf.tick(500);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div style=\"\"><div>3</div><div>4</div></div>'\n\t\t);\n\n\t\tassert.deepEqual(logs, ['$effect.pre', '$effect.pre', '$effect', '$effect']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-each-4/main.svelte",
    "content": "<script>\n\tfunction fade(_) {\n\t\treturn {\n\t\t\tduration: 500,\n\t\t\tcss: t => `opacity: ${t}`,\n\t\t}\n\t}\n\n\tlet toggle = $state(true);\n\tlet items = $state([ 1, 2, 3 ]);\n\n\tconst handle_toggle = async () => {\n\t\ttoggle = false;\n\t\tawait Promise.resolve();\n\t\titems = [3, 4];\n\t\ttoggle = true;\n\t};\n</script>\n\n<button onclick={handle_toggle}>Toggle</button>\n\n{#if toggle}\n\t<div transition:fade>\n\t\t{#each items as item (item)}\n\t\t{(() => {\n\t\t\t$effect(() => {\n\t\t\t\titems;\n\t\t\t\tconsole.log('$effect');\n\t\t\t});\n\n\t\t\t$effect.pre(() => {\n\t\t\t\titems;\n\t\t\t\tconsole.log('$effect.pre');\n\t\t\t});\n\t\t})()}\n\t\t\t<div>{item}</div>\n\t\t{/each}\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-evaluation/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst div = /** @type {HTMLDivElement & { foo?: number }} */ (target.querySelector('div'));\n\n\t\tassert.equal(div.foo, undefined);\n\t\tflushSync(() => {\n\t\t\tcomponent.foo = 2;\n\t\t\tcomponent.visible = false;\n\t\t});\n\t\tassert.equal(div.foo, 2);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-evaluation/main.svelte",
    "content": "<script>\n\tconst { visible = true, foo = 1 } = $props();\n\n\tfunction bar(node, params) {\n\t\tnode.foo = params;\n\t\treturn () => ({});\n\t}\n</script>\n\n{#if visible}\n\t<div transition:bar={foo}></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-if/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, raf, target }) {\n\t\tconst [x, y] = target.querySelectorAll('button');\n\n\t\t// Set second part of condition to false first...\n\t\ty.click();\n\t\tflushSync();\n\t\traf.tick(50);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle x</button> <button>toggle y</button> <p foo=\"0.5\">hello</p>'\n\t\t);\n\n\t\t// ...so that when both are toggled the block condition runs again\n\t\tx.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle x</button> <button>toggle y</button> <p foo=\"0.5\">hello</p>'\n\t\t);\n\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle x</button> <button>toggle y</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-if/main.svelte",
    "content": "<script>\n\tfunction foo(node) {\n\t\treturn {\n\t\t\tduration: 100,\n\t\t\ttick: (t, u) => {\n\t\t\t\tnode.setAttribute('foo', t)\n\t\t\t}\n\t\t};\n\t}\n\n\tlet x = $state(true);\n\tlet y = $state(true);\n</script>\n\n<button onclick={() => {\n\tx = !x;\n}}>toggle x</button>\n<button onclick={() => {\n\ty = !y;\n}}>toggle y</button>\n\n{#if x && y}\n\t<p transition:foo>hello</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-if-nested-access-property/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test } from '../../test';\nimport { raf } from '../../../animation-helpers';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst [btn] = target.querySelectorAll('button');\n\n\t\tbtn.click();\n\t\tawait tick();\n\t\traf.tick(100);\n\t\tassert.htmlEqual(target.innerHTML, `<button>clear</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-if-nested-access-property/main.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\n\tlet data = $state({ id: 1 });\n</script>\n\n<button onclick={() => (data = null)}>clear</button>\n\n{#if data}\n\t{#key data?.id}\n\t\t<p transition:fade|global={{ duration: 100 }}>keyed</p>\n\t{/key}\n\n\t{#if data.id}\n\t\t<p>sibling</p>\n\t{/if}\n{/if}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-if-nested-static/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<button>Toggle</button>\n\t\t\t<div>Should not transition out</div>\n\t\t`\n\t\t);\n\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, '<button>Toggle</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-if-nested-static/main.svelte",
    "content": "\n<script>\n\timport { slide } from 'svelte/transition';\n\tlet showText = $state(false);\n\tlet show = $state(true);\n</script>\n\n<button onclick={() => showText = !showText}>\n\tToggle\n</button>\n\n{#if showText}\n\t{#if show}\n\t\t<div transition:slide>\n\t\t\tShould not transition out\n\t\t</div>\n\t{/if}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-snippet/Container.svelte",
    "content": "<script>\n\t/** @type {{ children: import('svelte').Snippet }} */\n\tlet { children } = $props();\n\n\tlet visible = $state(false);\n</script>\n\n<button onclick={() => visible = !visible}>toggle</button>\n\n{#if visible}\n\t{@render children()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-snippet/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, raf }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\n\t\tflushSync(() => button.click());\n\t\traf.tick(50);\n\t\tassert.htmlEqual(target.innerHTML, '<button>toggle</button><p style=\"opacity: 0.5;\">hello</p>');\n\n\t\tflushSync(() => button.click());\n\t\traf.tick(75);\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>toggle</button><p style=\"opacity: 0.25;\">hello</p>'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-snippet/main.svelte",
    "content": "<script>\n\timport { fade } from 'svelte/transition';\n\timport { linear } from 'svelte/easing';\n\timport Container from './Container.svelte';\n</script>\n\n<Container>\n\t<p style=\"opacity: 1\" transition:fade={{ duration: 100, easing: linear }}>hello</p>\n</Container>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-static-subtree/_config.js",
    "content": "import { flushSync } from '../../../../src/index-client.js';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, raf, target }) {\n\t\tassert.htmlEqual(target.innerHTML, '<button>Toggle</button><div><span>123</span></div>');\n\n\t\tconst btn1 = target.querySelector('button');\n\t\tbtn1?.click();\n\t\tflushSync();\n\t\traf.tick(250);\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t'<button>Toggle</button><div><span style=\"opacity: 0.5;\">123</span></div>'\n\t\t);\n\n\t\tflushSync();\n\t\traf.tick(500);\n\n\t\tassert.htmlEqual(target.innerHTML, '<button>Toggle</button>');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/transition-static-subtree/main.svelte",
    "content": "<script>\n\tfunction fade(_) {\n\t\treturn {\n\t\t\tduration: 500,\n\t\t\tcss: t => `opacity: ${t}`,\n\t\t}\n\t}\n\n\tlet visible = $state(true);\n</script>\n\n<button onclick={() => visible = !visible}>Toggle</button>\n\n{#if visible}\n\t<div>\n\t\t<span transition:fade>123</span>\n\t</div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// This test mainly checks that all types are properly ignored by the compiler\nexport default test({\n\thtml: '<button>clicks: 0</button>',\n\n\ttest({ assert, target }) {\n\t\tconst btn = target.querySelector('button');\n\t\tbtn?.click();\n\t\tflushSync();\n\t\tassert.htmlEqual(target.innerHTML, `<button>clicks: 1</button>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript/main.svelte",
    "content": "<script module lang=\"ts\">\n\tinterface Hello {\n\t\tmessage: 'hello';\n\t}\n\ttype Goodbye = { message: 'goodbye' };\n\n\tfunction this_fn(this: any) {\n\t\tconsole.log(this);\n\t}\n\n\tfunction foo<T>(): string {\n\t\treturn \"\"!;\n\t}\n\n\tclass Foo<T> {\n\t\tpublic name: string;\n\t\tdeclare bar: string;\n\t\tx = 'x' as const;\n\t\tconstructor(name: string) {\n\t\t\tthis.name = name;\n\t\t}\n\t}\n\n\tclass MyClass implements Hello {}\n\n\tabstract class MyAbstractClass {\n\t\tabstract x(): void;\n\t\ty() {}\n\t}\n\tclass Subclass extends Foo<string> {\n\t\tconstructor(value: string) {\n\t\t\tsuper(value);\n\t\t}\n\t}\n\n\tdeclare const declared_const: number;\n\tdeclare function declared_fn(): void;\n\tdeclare class declared_class {\n\t\tfoo: number;\n\t}\n\n\tdeclare module 'foobar' {}\n\tnamespace SomeNamespace {\n\t\texport type Foo = true;\n\t}\n\n\texport function overload(a: boolean): boolean;\n\texport function overload(b: string): number;\n\texport function overload(c: any): any {}\n\n\texport type { Hello };\n\n\tconst TypedFoo = Foo<true>;\n\tconst typeAssertion = <boolean>true;\n\tconst x = foo<true>();\n</script>\n\n<script>\n\timport type { Foo } from './types';\n\timport { type Bar, type Baz } from './types';\n\n\tlet count = $state(0);\n\tconst person = {\n\t\tmessage: 'goodbye'\n\t} satisfies Goodbye;\n</script>\n\n<button on:click={(e: MouseEvent) => {\n\t\tconst next: number = count + 1;\n\t\tcount = next! as number;\n\t}}\n\t>clicks: {count}</button\n>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript/types.ts",
    "content": "export interface Foo {}\nexport interface Bar {}\nexport interface Baz {}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-as-expression/_config.js",
    "content": "import { test } from '../../test';\nimport { expect, vi } from 'vitest';\n\nconst log = vi.fn();\n\nexport default test({\n\thtml: '1 2 <div></div> <div></div> <input type=\"number\"> <input type=\"number\">',\n\tssrHtml:\n\t\t'1 2 <div></div> <div></div> <input type=\"number\" value=\"1\"> <input type=\"number\" value=\"2\">',\n\tprops: {\n\t\tlog\n\t},\n\tbefore_test() {\n\t\tlog.mockClear();\n\t},\n\ttest() {\n\t\texpect(log).toHaveBeenCalledWith('DIV', 'DIV');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-as-expression/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet { log } = $props();\n\n\tlet count = $state(1) as number;\n\tlet double = $derived(count as number * 2) as number;\n\tlet element = null;\n\tlet element_with_state = $state(null);\n\tlet with_state = $state({ foo: 1 });\n\tlet without_state = { foo: 2 };\n\n\t$effect(() => {\n\t\tlog(element.tagName, element_with_state.tagName);\n\t})\n</script>\n\n{count as number} {double as number}\n\n<div bind:this={element as HTMLElement}></div>\n<div bind:this={element_with_state as HTMLElement}></div>\n<input type=\"number\" bind:value={(with_state as { foo: number }).foo} />\n<input type=\"number\" bind:value={(without_state as { foo: number }).foo as number} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-const1/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '<p>10 * 10 = 100</p><p>{}</p><p>20 * 20 = 400</p><p>{}</p>'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-const1/main.svelte",
    "content": "<script lang=\"ts\">\n\tconst boxes = [ { width: 10, height: 10 }, { width: 20, height: 20 } ];\n</script>\n\n{#each boxes as box}\n\t{@const area: number = box.width * box.height}\n\t{@const name: string = \"{}\"}\n\t<p>{box.width} * {box.height} = {area}</p>\n\t<p>{name}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-each-indexed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<span>0: a</span>\n\t\t<span>1: b</span>\n\t\t<span>2: c</span>\n\t`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-each-indexed/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet letters = ['a', 'b', 'c'];\n</script>\n\n{#each letters as letter: string, i}\n\t<span>{i}: {letter}</span>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-non-null-expression/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: '1 2 <input type=\"number\">'\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/typescript-non-null-expression/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = $state(1)!;\n\tlet double = $derived(count! * 2)!;\n\tlet binding = $state(null);\n</script>\n\n{count!} {double!}\n\n<input type=\"number\" bind:value={binding!} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/undefined-event-handler/_config.js",
    "content": "import { ok, test } from '../../test';\n\nexport default test({\n\tasync test({ target }) {\n\t\tconst button = target.querySelector('button');\n\t\tok(button);\n\t\tbutton.dispatchEvent(new window.MouseEvent('mouseenter'));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/undefined-event-handler/main.svelte",
    "content": "<button onmouseenter={undefined}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/unhoist-function-accessing-snippet/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target, errors }) {\n\t\tconst button = target.querySelector('button');\n\t\tflushSync(() => {\n\t\t\tbutton?.click();\n\t\t});\n\t\tassert.deepEqual(errors, []);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/unhoist-function-accessing-snippet/main.svelte",
    "content": "<script>\n\tconst log = () => {\n\t\tif (!snip) throw new Error('oops');\n\t}\n\tlet x = $state(0);\n</script>\n\n<button onclick={log}></button>\n\n{#snippet snip()}\n\tsnippet {x}\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untrack-allows-writes/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\n// While we don't officially document it, `untrack` also allows to opt out of the \"unsafe mutation\" validation, which is what we test here\nexport default test({\n\thtml: '<button>0 0 0</button>',\n\ttest({ assert, target }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>1 1 2</button>\n\t\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untrack-allows-writes/main.svelte",
    "content": "<script>\n\timport { untrack } from \"svelte\";\n\n\tlet count = $state(0);\n\tlet mirrored = $state(0);\n\tlet double = $derived.by(() => {\n\t\tuntrack(() => {\n\t\t\tmirrored = count;\n\t\t});\n\t\treturn count * 2;\n\t})\n</script>\n\n<button onclick={() => count++}>{count} {mirrored} {double}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untrack-own-deriveds/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\t// In async mode we _do_ want to run effects that react to their own state changing\n\tskip_async: true,\n\ttest({ assert, target, logs }) {\n\t\tconst button = target.querySelector('button');\n\n\t\tflushSync(() => button?.click());\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t\t<button>increment</button>\n\t\t\t\t<p>1/2</p>\n\t\t\t\t<p>1/2</p>\n\t\t\t`\n\t\t);\n\n\t\tassert.deepEqual(logs, [0, 0, 0, 0]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untrack-own-deriveds/main.svelte",
    "content": "<script>\n\tclass Foo {\n\t\tvalue = $state(0);\n\t\tdouble = $derived(this.value * 2);\n\n\t\tconstructor() {\n\t\t\tconsole.log(this.value, this.double);\n\t\t}\n\n\t\tincrement() {\n\t\t\tthis.value++;\n\t\t}\n\t}\n\n\tlet foo = $state();\n\n\t$effect(() => {\n\t\tfoo = new Foo();\n\t});\n\n\tlet bar = $derived(new Foo());\n</script>\n\n<button onclick={() => {foo.increment(); bar.increment()}}>increment</button>\n\n{#if foo}\n\t<p>{foo.value}/{foo.double}</p>\n{/if}\n\n<p>{bar.value}/{bar.double}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untracked/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t<button>multiplier: 1</button>\n\t<button>result: 0</button>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [b1, b2] = target.querySelectorAll('button');\n\n\t\tb1.click();\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<button>multiplier: 2</button>\n\t\t<button>result: 2</button>\n\t\t`\n\t\t);\n\n\t\tb1.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<button>multiplier: 3</button>\n\t\t<button>result: 2</button>\n\t\t`\n\t\t);\n\n\t\tb2.click();\n\t\tflushSync();\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t<button>multiplier: 3</button>\n\t\t<button>result: 6</button>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untracked/main.svelte",
    "content": "<script>\n  import { untrack } from 'svelte';\n  let count = $state(0);\n  let multiplier = $state(1);\n  let result = $derived(count * untrack(() => multiplier));\n</script>\n\n<button on:click={() => multiplier++}>multiplier: {multiplier}</button>\n<button on:click={() => count++}>result: {result}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untracked-derived-local/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `3`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untracked-derived-local/main.svelte",
    "content": "<script module>\n\timport { untrack } from 'svelte'\n\timport { SvelteMap } from 'svelte/reactivity'\n\n\tclass Foo {\n\t\tid\n\t\tupdateTime = $state(Date.now())\n\n\t\tconstructor(id) {\n\t\t\tthis.id = id\n\t\t}\n\t}\n\n\tclass Store {\n\t\tcache = new SvelteMap()\n\t\tids = $state([1, 2, 3])\n\n\t\tgetOrDefault(id) {\n\t\t\tlet ret = this.cache.get(id)\n\n\t\t\tif (ret) {\n\t\t\t\treturn ret\n\t\t\t}\n\n\t\t\tret = untrack(() => {\n\t\t\t\tret = new Foo(id)\n\t\t\t\tthis.cache.set(id, ret)\n\t\t\t\treturn ret\n\t\t\t})\n\t\t\tthis.cache.get(id)\n\n\t\t\treturn ret\n\t\t}\n\n\t\tget values() {\n\t\t\treturn this.ids.map(id => this.getOrDefault(id)).sort((a, b) => b.updateTime - a.updateTime)\n\t\t}\n\t}\n\n\tconst store = new Store()\n</script>\n\n<script>\n\tconst test = $derived.by(() => store.values.length)\n</script>\n\n{test}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untracked-write-pre/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target, logs }) {\n\t\tassert.deepEqual(logs, ['Outer', 'Inner', 'Outer', 'Inner']);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/untracked-write-pre/main.svelte",
    "content": "<script>\n\tlet value = $state(0);\n\n\t$effect.pre(() => {\n\t\tconsole.log(\"Outer\");\n\t\tvalue;\n\n\t\t$effect.pre(() => {\n\t\t\tconsole.log(\"Inner\");\n\t\t\tvalue = 10;\n\t\t});\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/validate-undefined-snippet-default-arg/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<p>default</p>`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/validate-undefined-snippet-default-arg/main.svelte",
    "content": "{#snippet test(param = \"default\")}\n    <p>{param}</p>\n{/snippet}\n\n{@render test()}"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/_config.js",
    "content": "import { test, ok } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst input = target.querySelector('input[type=text]');\n\t\tconst button = target.querySelector('button');\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst checkbox = target.querySelector('input[type=checkbox]');\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(input);\n\t\tok(button);\n\t\tok(checkbox);\n\t\tok(textarea);\n\n\t\tflushSync(() => {\n\t\t\tinput.value = 'foo';\n\t\t\tcheckbox.click();\n\t\t\ttextarea.innerHTML = 'bar';\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.equal(input.value, 'foo');\n\t\tassert.equal(checkbox.checked, true);\n\t\tassert.equal(textarea.innerHTML, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet value = $state(\"\");\n\tlet checked = $state(false);\n</script>\n\n<input type=\"text\" {value} />\n\n<textarea {value}></textarea>\n\n<input type=\"checkbox\" {checked} />\n\n<button onclick={()=>count++}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/_config.js",
    "content": "import { test, ok } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst input = target.querySelector('input[type=text]');\n\t\tconst button = target.querySelector('button');\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst checkbox = target.querySelector('input[type=checkbox]');\n\t\tconst textarea = target.querySelector('textarea');\n\t\tok(input);\n\t\tok(button);\n\t\tok(checkbox);\n\t\tok(textarea);\n\n\t\tflushSync(() => {\n\t\t\tinput.value = 'foo';\n\t\t\tcheckbox.click();\n\t\t\ttextarea.innerHTML = 'bar';\n\t\t\tbutton.click();\n\t\t});\n\n\t\tassert.equal(input.value, 'foo');\n\t\tassert.equal(checkbox.checked, true);\n\t\tassert.equal(textarea.innerHTML, 'bar');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet value = $state({\n\t\tvalue: \"\",\n\t});\n\tlet checked = $state({\n\t\tchecked: false,\n\t});\n</script>\n\n<input type=\"text\" {...value} />\n\n<textarea {...value}></textarea>\n\n<input type=\"checkbox\" {...checked} />\n\n<button onclick={()=>count++}>{count}</button>"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/value-attribute-null-undefined/_config.js",
    "content": "import { test, ok } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tmode: ['client'],\n\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @type {HTMLInputElement | null}\n\t\t */\n\t\tconst input = target.querySelector('input[type=text]');\n\t\t/**\n\t\t * @type {HTMLButtonElement | null}\n\t\t */\n\t\tconst setString = target.querySelector('#setString');\n\t\t/**\n\t\t * @type {HTMLButtonElement | null}\n\t\t */\n\t\tconst setNull = target.querySelector('#setNull');\n\t\t/**\n\t\t * @type {HTMLButtonElement | null}\n\t\t */\n\t\tconst setUndefined = target.querySelector('#setUndefined');\n\n\t\tok(input);\n\t\tok(setString);\n\t\tok(setNull);\n\t\tok(setUndefined);\n\n\t\t// value should always be blank string when value attribute is set to null or undefined\n\n\t\tassert.equal(input.value, '');\n\t\tsetString.click();\n\t\tflushSync();\n\t\tassert.equal(input.value, 'foo');\n\n\t\tsetNull.click();\n\t\tflushSync();\n\t\tassert.equal(input.value, '');\n\n\t\tsetString.click();\n\t\tflushSync();\n\t\tassert.equal(input.value, 'foo');\n\n\t\tsetUndefined.click();\n\t\tflushSync();\n\t\tassert.equal(input.value, '');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/value-attribute-null-undefined/main.svelte",
    "content": "<script>\n\tlet value = $state();\n</script>\n\n<input type=\"text\" {value} />\n\n<button id=\"setString\" onclick={() => {value = \"foo\";}}></button>\n<button id=\"setNull\" onclick={() => {value = null;}}></button>\n<button id=\"setUndefined\" onclick={() => {value = undefined;}}></button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/var-declarations/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, logs }) {\n\t\tassert.deepEqual(logs, [undefined, undefined, 10, 20, 0, 1]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/var-declarations/main.svelte",
    "content": "<script>\n\tconsole.log(foo, double);\n\tvar foo = $state(10);\n\tvar double = $derived(foo * 2);\n\tconsole.log(foo, double);\n\n\tfunction wrap(initial) {\n\t\tvar _value = $state(initial);\n\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn _value;\n\t\t\t},\n\t\t\tset(state) {\n\t\t\t\t_value = state;\n\t\t\t}\n\t\t};\n\t}\n\n\tvar wrapped = wrap(0);\n\tconsole.log(wrapped.get());\n\twrapped.set(1);\n\tconsole.log(wrapped.get());\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/video-src-object/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `<video></video>`,\n\n\ttest({ assert, target }) {\n\t\tconst video = target.querySelector('video');\n\n\t\t// @ts-ignore\n\t\tassert.deepEqual(video?.srcObject, {});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/video-src-object/main.svelte",
    "content": "<script>\n\tlet srcObject = $state();\n\n\t$effect(() => {\n\t\tsrcObject = {};\n\t})\n</script>\n\n<video {srcObject}></video>\n\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/wrapped-$state/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n  <button>Add entry</button>\n  <p>x</p>\n`,\n\n\ttest({ assert, target, window }) {\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\n\t\ttarget.querySelector('button')?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n    <button>Add entry</button>\n    <p>x</p>\n    <p>y</p>\n    <button>Remove entry</button>\n    `\n\t\t);\n\n\t\ttarget.querySelectorAll('button')[1].dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n    <button>Add entry</button>\n    <p>x</p>\n    `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/wrapped-$state/main.svelte",
    "content": "<script>\n  function createArray(initial) {\n    let array = $state(initial);\n    return {\n      get value() {\n        return array;\n      },\n      push(entry) {\n        array.push(entry);\n        array = array.slice();\n      },\n      pop() {\n        array.pop();\n        array = array.slice();\n      },\n    };\n  }\n\n  const array = createArray(['x']);\n</script>\n\n<button on:click={() => array.push('y')}>Add entry</button>\n\n{#each array.value as entry}\n  <p>{entry}</p>\n{/each}\n\n{#if array.value.length > 1}\n  <button on:click={() => array.pop()}>Remove entry</button>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/wrapped-$state-2/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n  <button>foo</button>\n`,\n\n\ttest({ assert, target, window }) {\n\t\tconst clickEvent = new window.Event('click', { bubbles: true });\n\t\ttarget.querySelector('button')?.dispatchEvent(clickEvent);\n\t\tflushSync();\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n      <button>bar</button>\n    `\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/wrapped-$state-2/main.svelte",
    "content": "<script>\n  function createReactive(obj) {\n    const reactive = {};\n    for (const key of Object.keys(obj)) {\n      let inner = $state(obj[key]);\n      Object.defineProperty(reactive, key, {\n        get() {\n          return inner;\n        },\n        set(update) {\n          inner = update;\n        },\n        enumerable: true,\n      });\n    }\n    return reactive;\n  }\n\n  const a = createReactive({x: 'foo'});\n</script>\n\n<button on:click={() => (a.x = 'bar')}>{a.x}</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input type=\"range\"><input type=\"range\"><p>0 * 2 = 0</p>\n\t`,\n\n\tssrHtml: `\n\t\t<input type=\"range\" value=\"0\"><input type=\"range\" value=\"0\"><p>0 * 2 = 0</p>\n\t`,\n\n\ttest({ assert, target, window }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\n\t\tflushSync(() => {\n\t\t\tinput1.value = '10';\n\t\t\tinput1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"range\"><input type=\"range\"><p>10 * 2 = 20</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tinput2.value = '99';\n\t\t\tinput2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"range\"><input type=\"range\"><p>10 * 2 = 99</p>`\n\t\t);\n\n\t\tflushSync(() => {\n\t\t\tinput1.value = '20';\n\t\t\tinput1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\t});\n\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`<input type=\"range\"><input type=\"range\"><p>20 * 2 = 40</p>`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived/main.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\tlet double = $derived(count * 2);\n</script>\n\n<input type=\"range\" bind:value={count} />\n<input type=\"range\" bind:value={double} />\n\n<p>{count} * 2 = {double}</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `true true`,\n\n\ttest({ assert, target, window }) {}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-2/main.svelte",
    "content": "<script>\n\timport { expect2, createAppState } from \"./util.svelte.js\"\n\n  const result = createAppState({ source: () => \"wrong\" });\n  result.onChange(\"right\");\n  const expect1 = result.value === \"right\";\n</script>\n\n{expect1} {expect2}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-2/util.svelte.js",
    "content": "export const createAppState = (options) => {\n\tconst source = $derived(options.source());\n\tlet value = $derived(source);\n\n\treturn {\n\t\tget value() {\n\t\t\treturn value;\n\t\t},\n\t\tonChange(nextValue) {\n\t\t\tvalue = nextValue;\n\t\t}\n\t};\n};\n\nconst result = createAppState({ source: () => 'wrong' });\nresult.onChange('right');\nexport const expect2 = result.value === 'right';\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-3/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\thtml: `3 3 3 3`\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-3/main.svelte",
    "content": "<script>\n\tclass X {\n    x = $state(1);\n    on_class = $derived(this.x * 2);\n    #on_class_private = $derived(this.x * 2);\n    #in_constructor_private\n\n    constructor() {\n      this.#in_constructor_private = $derived(this.x * 2);\n      this.in_constructor = $derived(this.x * 2);\n      this.#on_class_private = 3;\n      this.#in_constructor_private = 3;\n    }\n\n    get on_class_private() {\n      return this.#on_class_private;\n    }\n\n    get in_constructor_private() {\n      return this.#in_constructor_private;\n    }\n  }\n\n  const x = new X();\n  x.on_class = 3;\n  x.in_constructor = 3;\n</script>\n\n{x.on_class} {x.in_constructor} {x.on_class_private} {x.in_constructor_private}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-4/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [btn1, btn2, btn3] = target.getElementsByTagName('button');\n\t\tconst [div] = target.getElementsByTagName('div');\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.equal(div.textContent, '1');\n\t\tflushSync(() => btn2.click());\n\t\tassert.equal(div.textContent, '1');\n\t\tflushSync(() => btn3.click());\n\t\tassert.equal(div.textContent, '2');\n\n\t\tflushSync(() => btn1.click());\n\t\tassert.equal(div.textContent, '2');\n\t\tflushSync(() => btn2.click());\n\t\tassert.equal(div.textContent, '2');\n\t\tflushSync(() => btn3.click());\n\t\tassert.equal(div.textContent, '3');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/samples/writable-derived-4/main.svelte",
    "content": "<script>\n\tlet count = $derived({ value: 1 });\n</script>\n\n<button onclick={() => count.value++}>mutate</button>\n<button onclick={() => count = count}>assign self</button>\n<button onclick={() => count = {...count} }>assign copy</button>\n\n<div>{count.value}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-runes/test.ts",
    "content": "// @vitest-environment jsdom\nimport { runtime_suite, ok } from '../runtime-legacy/shared';\n\nconst { test, run } = runtime_suite(true);\n\nexport { test, ok };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/attribute-quotes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/attribute-quotes/main.svelte",
    "content": "<div foo=bar></div>\n<div foo='bar baz'></div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/autoclosed-tags/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/autoclosed-tags/main.svelte",
    "content": "<ul><li><li></ul>\n<dl><dt><dd><dd></dl>\n<p><p><div></div>\n<ruby><rp><rt><rt></ruby>\n<select><option><optgroup><optgroup></select>\n<table><thead><tbody><tfoot><tbody><tr><td><th></tr><tr></table>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/bind-value-input-type-dynamic/_config.js",
    "content": "import { tick } from 'svelte';\nimport { test, ok } from '../../test';\n\nexport default test({\n\thtml: `\n\t\t<input type=\"text\"/>\n\t\t<input type=\"text\"/>\n\t\t<p>x / y</p>\n\n\t\t<button>change to text</button>\n\t\t<button>change to number</button>\n\t\t<button>change to range</button>\n\t`,\n\tssrHtml: `\n\t\t<input type=\"text\" value=\"x\"/>\n\t\t<input type=\"text\" value=\"y\"/>\n\t\t<p>x / y</p>\n\n\t\t<button>change to text</button>\n\t\t<button>change to number</button>\n\t\t<button>change to range</button>\n\t`,\n\tasync test({ assert, target }) {\n\t\tconst [in1, in2] = target.querySelectorAll('input');\n\t\tconst [btn1, btn2, btn3] = target.querySelectorAll('button');\n\t\tconst p = target.querySelector('p');\n\t\tok(p);\n\n\t\tin1.value = '0';\n\t\tin2.value = '1';\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tbtn2?.click();\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '0 / 1');\n\n\t\tin1.stepUp();\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.stepUp();\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '1 / 2');\n\n\t\tbtn1?.click();\n\t\tawait tick();\n\t\ttry {\n\t\t\tin1.stepUp();\n\t\t\tassert.fail();\n\t\t} catch (e) {\n\t\t\t// expected\n\t\t}\n\n\t\tbtn3?.click();\n\t\tawait tick();\n\t\tin1.stepUp();\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.stepUp();\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, '2 / 3');\n\n\t\tbtn1?.click();\n\t\tawait tick();\n\t\tin1.value = 'a';\n\t\tin2.value = 'b';\n\t\tin1.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tin2.dispatchEvent(new window.Event('input', { bubbles: true }));\n\t\tawait tick();\n\t\tassert.htmlEqual(p.innerHTML, 'a / b');\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/bind-value-input-type-dynamic/main.svelte",
    "content": "<script>\n\tlet dynamic = $state('x');\n\tlet spread = $state('y');\n\tlet inputType = $state('text');\n\tlet props = $derived({type: inputType});\n</script>\n\n<input bind:value={dynamic} type={inputType}>\n<input bind:value={spread} {...props}>\n<p>{dynamic} / {spread}</p>\n\n<button onclick={() => inputType = 'text'}>change to text</button>\n<button onclick={() => inputType = 'number'}>change to number</button>\n<button onclick={() => inputType = 'range'}>change to range</button>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/boolean-attributes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/boolean-attributes/main.svelte",
    "content": "<input disabled hidden>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/comment-marker/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/comment-marker/main.svelte",
    "content": "{#each [1,2] as i}{i}{/each}\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/form-default-value-spread/_config.js",
    "content": "import { test } from '../../test';\nimport { flushSync } from 'svelte';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t\t/**\n\t\t * @param {NodeListOf<any>} inputs\n\t\t * @param {string} field\n\t\t * @param {any | any[]} value\n\t\t */\n\t\tfunction check_inputs(inputs, field, value) {\n\t\t\tfor (let i = 0; i < inputs.length; i++) {\n\t\t\t\tassert.equal(inputs[i][field], Array.isArray(value) ? value[i] : value, `field ${i}`);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {any} input\n\t\t * @param {string} field\n\t\t * @param {any} value\n\t\t */\n\t\tfunction set_input(input, field, value) {\n\t\t\tinput[field] = value;\n\t\t\tinput.dispatchEvent(\n\t\t\t\tnew Event(typeof value === 'boolean' ? 'change' : 'input', { bubbles: true })\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * @param {HTMLOptionElement} option\n\t\t */\n\t\tfunction select_option(option) {\n\t\t\toption.selected = true;\n\t\t\toption.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t}\n\n\t\tconst after_reset = [];\n\n\t\tconst reset = /** @type {HTMLInputElement} */ (target.querySelector('input[type=reset]'));\n\t\tconst [test1, test2, test3, test4, test5, test6, test7, test14] =\n\t\t\ttarget.querySelectorAll('div');\n\t\tconst [test8, test9, test10, test11] = target.querySelectorAll('select');\n\t\tconst [\n\t\t\ttest1_span,\n\t\t\ttest2_span,\n\t\t\ttest3_span,\n\t\t\ttest4_span,\n\t\t\ttest5_span,\n\t\t\ttest6_span,\n\t\t\ttest7_span,\n\t\t\ttest8_span,\n\t\t\ttest9_span,\n\t\t\ttest10_span,\n\t\t\ttest11_span\n\t\t] = target.querySelectorAll('span');\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test1.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\tassert.htmlEqual(test1_span.innerHTML, 'x x x x');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test1_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test1_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test2.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\tassert.htmlEqual(test2_span.innerHTML, 'x x x x');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test2_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test2_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test3.querySelectorAll('input, textarea');\n\t\t\tcheck_inputs(inputs, 'value', 'y');\n\t\t\tassert.htmlEqual(test3_span.innerHTML, 'y y y y');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'value', 'foo');\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'value', 'foo');\n\t\t\tassert.htmlEqual(test3_span.innerHTML, 'foo foo foo foo');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'value', 'x');\n\t\t\t\tassert.htmlEqual(test3_span.innerHTML, 'x x x x');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test4.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test4_span.innerHTML, 'true true');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'checked', false);\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test4_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test4_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test5.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test5_span.innerHTML, 'true true');\n\n\t\t\tfor (const input of inputs) {\n\t\t\t\tset_input(input, 'checked', false);\n\t\t\t}\n\t\t\tflushSync();\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test5_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test5_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test6.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\tassert.htmlEqual(test6_span.innerHTML, 'false false');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\t\tassert.htmlEqual(test6_span.innerHTML, 'true true');\n\t\t\t});\n\t\t}\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement>} */\n\t\t\tconst inputs = test7.querySelectorAll('input');\n\t\t\tcheck_inputs(inputs, 'checked', true);\n\t\t\tassert.htmlEqual(test7_span.innerHTML, 'true');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(inputs, 'checked', false);\n\t\t\t\tassert.htmlEqual(test7_span.innerHTML, 'false');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test8.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\tassert.htmlEqual(test8_span.innerHTML, 'b');\n\n\t\t\tselect_option(options[2]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test8_span.innerHTML, 'c');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test8_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test9.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\tassert.htmlEqual(test9_span.innerHTML, 'b');\n\n\t\t\tselect_option(options[2]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test9_span.innerHTML, 'c');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test9_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test10.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test10_span.innerHTML, 'c');\n\n\t\t\tselect_option(options[0]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [true, false, false]);\n\t\t\tassert.htmlEqual(test10_span.innerHTML, 'a');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test10_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLOptionElement>} */\n\t\t\tconst options = test11.querySelectorAll('option');\n\t\t\tcheck_inputs(options, 'selected', [false, false, true]);\n\t\t\tassert.htmlEqual(test11_span.innerHTML, 'c');\n\n\t\t\tselect_option(options[0]);\n\t\t\tflushSync();\n\t\t\tcheck_inputs(options, 'selected', [true, false, false]);\n\t\t\tassert.htmlEqual(test11_span.innerHTML, 'a');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tcheck_inputs(options, 'selected', [false, true, false]);\n\t\t\t\tassert.htmlEqual(test11_span.innerHTML, 'b');\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\t/** @type {NodeListOf<HTMLInputElement | HTMLTextAreaElement>} */\n\t\t\tconst inputs = test14.querySelectorAll('input, textarea');\n\t\t\tassert.equal(inputs[0].value, 'x');\n\t\t\tassert.equal(/** @type {HTMLInputElement} */ (inputs[1]).checked, true);\n\t\t\t// this is still missing...i have no idea how to fix this lol\n\t\t\t// assert.equal(inputs[2].value, 'x');\n\n\t\t\tafter_reset.push(() => {\n\t\t\t\tassert.equal(inputs[0].value, 'y');\n\t\t\t\tassert.equal(/** @type {HTMLInputElement} */ (inputs[1]).checked, false);\n\t\t\t\tassert.equal(inputs[2].value, 'y');\n\t\t\t});\n\t\t}\n\n\t\treset.click();\n\t\tawait Promise.resolve();\n\t\tflushSync();\n\t\tafter_reset.forEach((fn) => fn());\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/form-default-value-spread/main.svelte",
    "content": "<script>\n\tlet spread = {};\n\n\tlet value1 = $state();\n\tlet value2 = $state();\n\tlet value3 = $state();\n\tlet value4 = $state();\n\tlet value5 = $state();\n\tlet value6 = $state();\n\tlet value7 = $state();\n\tlet value8 = $state();\n\tlet value9 = $state(null);\n\tlet value10 = $state(null);\n\tlet value11 = $state(null);\n\tlet value12 = $state(null);\n\tlet value13 = $state(null);\n\tlet value14 = $state(null);\n\tlet value15 = $state(null);\n\tlet value16 = $state(null);\n\tlet value17 = $state('y');\n\tlet value18 = $state('y');\n\tlet value19 = $state('y');\n\tlet value20 = $state('y');\n\tlet value21 = $state('y');\n\tlet value22 = $state('y');\n\tlet value23 = $state('y');\n\tlet value24 = $state('y');\n\n\tlet checked1 = $state();\n\tlet checked2 = $state();\n\tlet checked3 = $state();\n\tlet checked4 = $state();\n\tlet checked5 = $state(null);\n\tlet checked6 = $state(null);\n\tlet checked7 = $state(null);\n\tlet checked8 = $state(null);\n\tlet checked9 = $state(false);\n\tlet checked10 = $state(false);\n\tlet checked11 = $state(false);\n\tlet checked12 = $state(false);\n\tlet checked13 = $state(true);\n\tlet checked14 = $state(true);\n \n\n\tlet selected1 = $state();\n\tlet selected2 = $state();\n\tlet selected3 = $state('c');\n\tlet selected4 = $state('c');\n\tlet selected5 = $state(['c']);\n\tlet selected6 = $state(['c']);\n\n\tlet defaultValue = $state('x');\n\tlet defaultChecked = $state(true);\n</script>\n\n<form>\n\t<p>Input/Textarea value</p>\n\t<!-- defaultValue=x, value=undefined -->\n\t<div class=\"test-1\">\n\t\t<input {defaultValue} bind:value={value1} {...spread} />\n\t\t<input {defaultValue} value={value2} {...spread} />\n\t\t<input defaultValue=\"x\" bind:value={value3} {...spread} />\n\t\t<input defaultValue=\"x\" value={value4} {...spread} />\n\t\t<textarea {defaultValue} value={value5} {...spread}></textarea>\n\t\t<textarea {defaultValue} bind:value={value6} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value7} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value8} {...spread}></textarea>\n\t</div>\n\n\t<!-- defaultValue=x, value=null -->\n\t<div class=\"test-2\">\n\t\t<input {defaultValue} bind:value={value9} {...spread} />\n\t\t<input {defaultValue} value={value10} {...spread} />\n\t\t<input defaultValue=\"x\" value={value11} {...spread} />\n\t\t<input defaultValue=\"x\" bind:value={value12} {...spread} />\n\t\t<textarea {defaultValue} value={value13} {...spread}></textarea>\n\t\t<textarea {defaultValue} bind:value={value14} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value15} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value16} {...spread}></textarea>\n\t</div>\n\n\t<!-- defaultValue=x, value=y -->\n\t<div class=\"test-3\">\n\t\t<input {defaultValue} bind:value={value17} {...spread} />\n\t\t<input {defaultValue} value={value18} {...spread} />\n\t\t<input defaultValue=\"x\" value={value19} {...spread} />\n\t\t<input defaultValue=\"x\" bind:value={value20} {...spread} />\n\t\t<textarea {defaultValue} value={value21} {...spread}></textarea>\n\t\t<textarea {defaultValue} bind:value={value22} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" value={value23} {...spread}></textarea>\n\t\t<textarea defaultValue=\"x\" bind:value={value24} {...spread}></textarea>\n\t</div>\n\n\t<p>Input checked</p>\n\t<!-- defaultChecked=true, checked=undefined -->\n\t<div class=\"test-4\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked1} {...spread} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked2} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked3} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked4} {...spread} />\n\t</div>\n\n\t<!-- defaultChecked=true, checked=null -->\n\t<div class=\"test-5\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked5} {...spread} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked6} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked7} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked8} {...spread} />\n\t</div>\n\n\t<!-- defaultChecked=true, checked=false -->\n\t<div class=\"test-6\">\n\t\t<input type=\"checkbox\" {defaultChecked} checked={checked9} {...spread} />\n\t\t<input type=\"checkbox\" {defaultChecked} bind:checked={checked10} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked checked={checked11} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked bind:checked={checked12} {...spread} />\n\t</div>\n\n\t<!-- defaultChecked=false, checked=true -->\n\t<div class=\"test-7\">\n\t\t<input type=\"checkbox\" defaultChecked={false} checked={checked13} {...spread} />\n\t\t<input type=\"checkbox\" defaultChecked={false} bind:checked={checked14} {...spread} />\n\t</div>\n\n\t<!-- no support for bind:group; too complex + we may deprecate it in favor of bind:checked={get,set} -->\n\n\t<p>Select (single)</p>\n\t<!-- select with static checked, value=undefined-->\n\t<select bind:value={selected1}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected {...spread}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=undefined-->\n\t<select bind:value={selected2}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with static checked, value=something else than default-->\n\t<select bind:value={selected3}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected {...spread}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=something else than default-->\n\t<select bind:value={selected4}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<p>Select (multiple)</p>\n    <!-- There's no possibility to have the selected attribute influence a multi select initially,\n\t     because we require the value to be an array -->\n\n\t<!-- select with static checked, value=something else than default-->\n\t<select multiple bind:value={selected5}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected {...spread}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<!-- select with dynamic checked, value=something else than default-->\n\t<select multiple bind:value={selected6}>\n\t\t<option value=\"a\">A</option>\n\t\t<option value=\"b\" selected={defaultChecked}>B</option>\n\t\t<option value=\"c\">C</option>\n\t</select>\n\n\t<p>Static values</p>\n\t<div class=\"test-14\">\n\t\t<input value=\"x\" defaultValue=\"y\" {...spread} />\n\t\t<input type=\"checkbox\" checked defaultChecked={false} {...spread} />\n\t\t<textarea defaultValue=\"y\" {...spread}>x</textarea>\n\t</div>\n\n\t<input type=\"reset\" value=\"Reset\" />\n</form>\n\n<p>\n\tBound values:\n\t<span class=\"test-1\">{value1} {value3} {value6} {value8}</span>\n\t<span class=\"test-2\">{value9} {value12} {value14} {value16}</span>\n\t<span class=\"test-3\">{value17} {value20} {value22} {value24}</span>\n\t<span class=\"test-4\">{checked2} {checked4}</span>\n\t<span class=\"test-5\">{checked6} {checked8}</span>\n\t<span class=\"test-6\">{checked10} {checked12}</span>\n\t<span class=\"test-7\">{checked14}</span>\n\t<span class=\"test-8\">{selected1}</span>\n\t<span class=\"test-9\">{selected2}</span>\n\t<span class=\"test-10\">{selected3}</span>\n\t<span class=\"test-11\">{selected4}</span>\n\t<span class=\"test-12\">{selected5}</span>\n\t<span class=\"test-13\">{selected6}</span>\n</p>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/ignore-mismatched-href/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['hydrate'],\n\n\tserver_props: {\n\t\tbrowser: false\n\t},\n\n\tprops: {\n\t\tbrowser: true\n\t},\n\n\ttest({ assert, target }) {\n\t\tassert.equal(target.querySelector('link')?.getAttribute('href'), '/bar');\n\t},\n\n\twarnings: [\n\t\t'The `href` attribute on `<link xmlns=\"http://www.w3.org/1999/xhtml\" href=\"/bar\" />` changed its value between server and client renders. The client value, `/foo`, will be ignored in favour of the server value'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/ignore-mismatched-href/main.svelte",
    "content": "<script>\n\tlet { browser } = $props();\n</script>\n\n<link href={browser ? '/foo' : '/bar'} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/is-xhtml/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(target.innerHTML, `<div>div</div>`);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/is-xhtml/main.svelte",
    "content": "<script>\n\tlet elem = $state();\n\tlet nodeName = $derived(elem?.nodeName);\n</script>\n<div bind:this={elem}>{nodeName}</div>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/lowercase-tags/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, target }) {\n\t\tconst [input] = target.querySelectorAll('input');\n\n\t\tassert.equal(input.disabled, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/lowercase-tags/main.svelte",
    "content": "<iNPUT dIsAbLeD />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/select-falsy-value/_config.js",
    "content": "import { test } from '../../test';\n\n// <option value> is special because falsy values should result in an empty string value attribute\nexport default test({\n\tmode: ['client'],\n\ttest({ assert, target }) {\n\t\tassert.htmlEqual(\n\t\t\ttarget.innerHTML,\n\t\t\t`\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\n\t\t\t<select>\n\t\t\t\t<option value=\"\">Default</option>\n\t\t\t</select>\n\t\t`\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/select-falsy-value/main.svelte",
    "content": "<script>\n\tlet nonreactive = undefined;\n\tlet reactive = $state();\n\tlet nonreactive_spread = { value: undefined };\n\tlet reactive_spread = $state({ value: undefined });\n</script>\n\n<select>\n\t<option value={undefined}>Default</option>\n</select>\n\n<select>\n\t<option value={nonreactive}>Default</option>\n</select>\n\n<select>\n\t<option value={reactive}>Default</option>\n</select>\n\n<select>\n\t<option {...nonreactive_spread}>Default</option>\n</select>\n\n<select>\n\t<option {...reactive_spread}>Default</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/select-multiple-spread/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target }) {\n\t\tconst options = target.querySelectorAll('option');\n\n\t\tassert.equal(options[0].selected, true);\n\t\tassert.equal(options[1].selected, false);\n\n\t\t// Shouldn't change the value because the value is not bound.\n\t\tcomponent.attrs = { value: ['2'] };\n\t\tflushSync();\n\n\t\tassert.equal(options[0].selected, false);\n\t\tassert.equal(options[1].selected, true);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/select-multiple-spread/main.svelte",
    "content": "<script>\n\timport Select from './select.svelte';\n\n\tlet { attrs = { value: ['1'] } } = $props();\n</script>\n\n<Select {attrs} />\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/select-multiple-spread/select.svelte",
    "content": "<script>\n\tlet { attrs } = $props();\n</script>\n\n<select multiple  {...attrs}>\n\t<option value=\"1\">option 1</option>\n\t<option value=\"2\">option 2</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/spread-element-input-select-multiple/_config.js",
    "content": "import { flushSync } from 'svelte';\nimport { ok, test } from '../../test';\n\nexport default test({\n\ttest({ assert, component, target, window }) {\n\t\tconst [input1, input2] = target.querySelectorAll('input');\n\t\tconst select = target.querySelector('select');\n\t\tok(select);\n\t\tconst [option1, option2] = /** @type {NodeListOf<HTMLOptionElement>} */ (select.childNodes);\n\n\t\tlet selections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 2);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\n\t\tconst event = new window.Event('change');\n\n\t\tinput1.checked = false;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(!selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\n\t\tinput2.checked = false;\n\t\tinput2.dispatchEvent(event);\n\t\tflushSync();\n\t\tinput1.checked = true;\n\t\tinput1.dispatchEvent(event);\n\t\tflushSync();\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 1);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(!selections.includes(option2));\n\n\t\tcomponent.spread = { value: ['Hello', 'World'] };\n\t\tflushSync();\n\n\t\tselections = Array.from(select.selectedOptions);\n\t\tassert.equal(selections.length, 2);\n\t\tassert.ok(selections.includes(option1));\n\t\tassert.ok(selections.includes(option2));\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/spread-element-input-select-multiple/main.svelte",
    "content": "<script>\n  let { spread } = $props();\n  let value = $state(['Hello', 'World']);\n</script>\n\n<select multiple {value} {...spread}>\n  <option>Hello</option>\n  <option>World</option>\n</select>\n\n<input type=\"checkbox\" value=\"Hello\" bind:group={value}>\n<input type=\"checkbox\" value=\"World\" bind:group={value}>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/void-tags/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/samples/void-tags/main.svelte",
    "content": "<area alt=\"\">\n<base>\n<br>\n<col>\n<embed>\n<hr>\n<img alt=\"\">\n<input>\n<keygen>\n<link>\n<meta>\n<param>\n<source>\n<track>\n<wbr>\n"
  },
  {
    "path": "packages/svelte/tests/runtime-xhtml/test.ts",
    "content": "// @vitest-environment vitest-xhtml-environment.ts\n\nimport { runtime_suite, ok } from '../runtime-legacy/shared';\n\nconst { test, run } = runtime_suite(true);\n\nexport { test, ok };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-children/_expected.html",
    "content": "<!--[--><!--[--><!---->1<!--]--><!----><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-children/component.svelte",
    "content": "<script>\n    const { children } = $props();\n</script>\n{@render children()}"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-children/main.svelte",
    "content": "<script>\n    import Component from \"./component.svelte\";\n</script>\n<Component>\n    {@const one = await 1}\n    {one}\n</Component>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-context-throws-after-await/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO it appears there might be an actual bug here; the promise isn't ever actually awaited in spite of being awaited in the component\n\tmode: ['async'],\n\terror: 'lifecycle_outside_component'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-context-throws-after-await/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\n\tawait Promise.resolve('hi');\n\n\tsetContext('key', 'value');\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-directive-with-spreading/_expected.html",
    "content": "<!--[--><div class=\"test\"></div><div style=\"color: green;\"></div><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-directive-with-spreading/main.svelte",
    "content": "<div class:test={await true} {...{}}></div>\n<div style:color={await \"green\"} {...{}}></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-each-fallback-hoisting/_expected.html",
    "content": "4"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-each-fallback-hoisting/main.svelte",
    "content": "{#each await Promise.resolve([]) as item}\n  {await Promise.reject('This should never be reached')}\n{:else}\n  {await Promise.resolve(4)}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-each-hoisting/_expected.html",
    "content": "123"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-each-hoisting/main.svelte",
    "content": "<script lang=\"ts\">\n  const first = Promise.resolve(1);\n  const second = Promise.resolve(2);\n  const third = Promise.resolve(3);\n</script>\n\n{#each await Promise.resolve([first, second, third]) as item}\n  {await item}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-head-multiple-title-order-preserved/A.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n</script>\n\n<svelte:head>\n\t{#if await promise}\n\t\t<title>A</title>\n\t{/if}\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-head-multiple-title-order-preserved/B.svelte",
    "content": "<script>\n\tlet { promise } = $props();\n</script>\n\n<svelte:head>\n\t\t<title>{(await promise) && 'B'}</title>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-head-multiple-title-order-preserved/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-head-multiple-title-order-preserved/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-head-multiple-title-order-preserved/_expected_head.html",
    "content": "<title>B</title>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-head-multiple-title-order-preserved/main.svelte",
    "content": "<script>\n\timport { tick } from 'svelte';\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n\n\tconst main = Promise.withResolvers();\n\tconst a = Promise.withResolvers();\n\tconst b = Promise.withResolvers();\n\n\t// regardless of resolution order, title should be the result of B, because it's the last-encountered\n\ttick().then(() => {\n\t\tmain.resolve(true);\n\t\ttick().then(() => {\n\t\t\tb.resolve(true);\n\t\t}).then(() => {\n\t\t\ta.resolve(true);\n\t\t});\n\t})\n</script>\n\n<svelte:head>\n\t{#if await main.promise}\n\t\t<title>Main</title>\n\t{/if}\n</svelte:head>\n<A promise={a.promise}/>\n<B promise={b.promise}/>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-html-tag/_expected.html",
    "content": "<div>this should work</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-html-tag/main.svelte",
    "content": "<div>{@html await 'this should work'}</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-if-alternate-hoisting/_expected.html",
    "content": "yes yes yes"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-if-alternate-hoisting/main.svelte",
    "content": "{#if await Promise.resolve(false)}\n  {await Promise.reject('no no no')}\n{:else}\n  {await Promise.resolve('yes yes yes')}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-if-const/_expected.html",
    "content": "3"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-if-const/main.svelte",
    "content": "{#if false}\n  {@const one = await 1}\n  {one}\n{:else if false}\n  {@const two = await 2}\n  {two}\n{:else}\n  {@const three = await 3}\n  {three}\n{/if} \n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-if-hoisting/_expected.html",
    "content": "yes yes yes"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-if-hoisting/main.svelte",
    "content": "{#if await Promise.resolve(true)}\n  {await Promise.resolve('yes yes yes')}\n{:else}\n  {await Promise.reject('no no no')}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-nullish-pending-snippet/_expected.html",
    "content": "<!--[--><!--[--><!---->awaited<!--]--><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-nullish-pending-snippet/main.svelte",
    "content": "<script>\n    let pending = null;\n</script>\n<svelte:boundary {pending}>\n    {await 'awaited'}\n</svelte:boundary>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-option-implicit-complex-value/_expected.html",
    "content": "<select>\n  <option selected>421</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-option-implicit-complex-value/main.svelte",
    "content": "<select value=\"421\">\n  <option>{await Promise.resolve(42)}1</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-option-implicit-simple-value/_expected.html",
    "content": "<select>\n  <option selected>42</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-option-implicit-simple-value/main.svelte",
    "content": "<select value={42}>\n  <option>{await Promise.resolve(42)}</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-component/Option.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n\n<option {...props}>{@render props.children?.()}</option>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-component/_expected.html",
    "content": "<select><option value=\"\">--Please choose an option--</option><option value=\"dog\" selected>Dog</option><option value=\"cat\">Cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-component/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Option from './Option.svelte';\n</script>\n<select value={await Promise.resolve('dog')}>\n\t<Option value=\"\">--Please choose an option--</Option>\n\t<Option value={await Promise.resolve('dog')}>Dog</Option>\n\t<Option value=\"cat\">Cat</Option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-implicit-value/_expected.html",
    "content": "<select><option>--Please choose an option--</option><option selected>dog</option><option>cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-implicit-value/main.svelte",
    "content": "<select value={await Promise.resolve('dog')}>\n\t<option>--Please choose an option--</option>\n\t<option>{await Promise.resolve('dog')}</option>\n\t<option>cat</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-implicit-value-complex/_expected.html",
    "content": "<select><option>--Please choose an option--</option><option selected>dog</option><option>cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-select-value-implicit-value-complex/main.svelte",
    "content": "<select value={await Promise.resolve('dog')}>\n\t<option>\n\t\t{@render option(\"--Please choose an option--\")}\n\t</option>\n\t<option>\n\t\t{@render option(Promise.resolve('dog'))}\n\t</option>\n\t<option>\n\t\t{@render option(Promise.resolve('cat'))}\n\t</option>\n</select>\n\n{#snippet option(val)}{await val}{/snippet}"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-snippet/_expected.html",
    "content": "<div>this should work</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-snippet/main.svelte",
    "content": "{#snippet foo()}\n    {@const x = await 'this should work'}\n    <div>{x}</div>\n{/snippet}\n\n{@render foo()}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/_expected.html",
    "content": "<div>this should work</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/main.svelte",
    "content": "<svelte:boundary>\n    {@const x = await 'this should work'}\n    <div>{x}</div>\n</svelte:boundary>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-boolean/_expected.html",
    "content": "<textarea readonly></textarea>\n<textarea autocomplete=\"no\"></textarea>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-boolean/main.svelte",
    "content": "<textarea readonly></textarea>\n<textarea autocomplete={'no'}></textarea>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfont: 'sans-serif',\n\t\tcolor: 'aquamarine'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-dynamic/_expected.html",
    "content": "<div style='font-family: sans-serif; color: aquamarine;'>aquamarine sans-serif</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-dynamic/main.svelte",
    "content": "<script>\n\texport let font;\n\texport let color;\n</script>\n\n<div style='font-family: {font}; color: {color};'>{color} {font}</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escape-quotes-spread-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escape-quotes-spread-2/_expected.html",
    "content": "<div\n\tbar=\"'></div><script>alert(42)</script>\"\n\tfoo=\"&quot;></div><script>alert(42)</script>\"\n\tqux=\"&amp;&amp;&amp;\"\n></div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escape-quotes-spread-2/main.svelte",
    "content": "<script>\n\texport let foo = '\"></div><script>alert(42)</' + 'script>';\n  export let bar = \"'></div><script>alert(42)</\" + 'script>';\n  export let props = {\n\t\t['\"></div><script>alert(42)</' + 'script>']: 'baz',\n\t\tqux: '&&&',\n\t};\n</script>\n\n<div {foo} bar={bar} {...props}></div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escaped-quotes/_expected.html",
    "content": "<div\n\tfoo=\"&#34;></div>\\<script>alert(42)</script>\"\n\tbar=\"&#34;></div>\\<script>alert(42)</script>\"\n></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escaped-quotes/main.svelte",
    "content": "<script>\n\texport let foo = '\"></div>\\\\<script>alert(42)</' + 'script>';\n\texport let bar = { toString: () => '\"></div>\\\\<script>alert(42)<\\/script>' };\n</script>\n\n<div foo={foo} bar={bar}></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escaped-quotes-spread/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escaped-quotes-spread/_expected.html",
    "content": "<div\n\tbar=\"'></div><script>alert(42)</script>\"\n\tfoo=\"&quot;></div><script>alert(42)</script>\"\n\tqux=\"&amp;&amp;&amp;\"\n\tquux=\"&quot;><script>alert(42)</script>\"\n></div>\n\n<div\n\tfoo=\"foo\"\n\tunsafe=\"&quot;><script>alert(42)</script>\"\n></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-escaped-quotes-spread/main.svelte",
    "content": "<script>\n\tconst safe = { foo: 'foo' };\n\tconst unsafe = { toString: () => '\"><script>alert(42)<\\/script>' };\n\n\texport let props = {\n\t\tfoo: '\"></div><script>alert(42)</' + 'script>',\n\t\tbar: \"'></div><script>alert(42)</\" + 'script>',\n\t\t['\"></div><script>alert(42)</' + 'script>']: 'baz',\n\t\tqux: '&&&',\n\t\tquux: unsafe\n\t};\n</script>\n\n<div {...props}></div>\n<div {...safe} {unsafe}></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-spread-hidden/_expected.html",
    "content": "<!--[--><div>A</div><div hidden>B</div><div hidden=\"until-found\">C</div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-spread-hidden/main.svelte",
    "content": "<div {...{ hidden: false }}>A</div>\n<div {...{ hidden: true }}>B</div>\n<div {...{ hidden: 'until-found' }}>C</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-spread-with-null/_expected.html",
    "content": "<div></div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-spread-with-null/main.svelte",
    "content": "<script>\n  export let id = null;\n</script>\n\n<div {id} {...$$restProps}></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-static/_expected.html",
    "content": "<div class='foo'></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-static/main.svelte",
    "content": "<div class='foo'></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-strip-svg-mathml-ce/_expected.html",
    "content": "<!--[--><svg><circle cx=\"12\" cy=\"12\" r=\"10\"></circle></svg> <math><mi>x</mi></math> <custom-element></custom-element><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-strip-svg-mathml-ce/main.svelte",
    "content": "<script>\n  const userdata = {\n    ONCLICK: 'alert(document.cookie)',\n    ONMOUSEOVER: 'alert(\"XSS\")'\n  };\n</script>\n\n<svg {...userdata}>\n  <circle cx=\"12\" cy=\"12\" r=\"10\" />\n</svg>\n\n<math {...userdata}>\n  <mi>x</mi>\n</math>\n\n<custom-element {...userdata}></custom-element>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-template-literal-sanitization/_expected.html",
    "content": "<div title=\"${inject} world\"></div>\n<div title=\"`backtick world\"></div>\n<div title=\"back\\slash world\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/attribute-template-literal-sanitization/main.svelte",
    "content": "<script>\n\texport let value = 'world';\n</script>\n\n<div title=\"&#36;&#123;inject&#125; {value}\"></div>\n<div title=\"&#96;backtick {value}\"></div>\n<div title=\"back\\slash {value}\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings/_expected.html",
    "content": "<input value='bar'>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings/main.svelte",
    "content": "<script>\n\texport let foo = 'bar';\n</script>\n\n<input bind:value={foo} >"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-empty-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-empty-string/_expected.html",
    "content": "<input value=''>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-empty-string/main.svelte",
    "content": "<script>\n\texport let foo = '';\n</script>\n\n<input bind:value={foo} >"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-group/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-group/_expected.html",
    "content": "<div>Cheese</div>\n<input type=\"radio\" value=\"Plain\" checked>\n<input type=\"radio\" value=\"Whole wheat\">\n<input type=\"checkbox\" value=\"Beans\">\n<input type=\"checkbox\" value=\"Cheese\" checked>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-group/main.svelte",
    "content": "<script>\n\tlet tortilla = 'Plain';\n\tlet fillings = ['Cheese'];\n</script>\n\n<div>{fillings.toString()}</div>\n\n<input type=\"radio\" bind:group={tortilla} value=\"Plain\">\n<input type=\"radio\" bind:group={tortilla} value=\"Whole wheat\">\n\n<input type=\"checkbox\" bind:group={fillings} value=\"Beans\">\n<input type=\"checkbox\" bind:group={fillings} value=\"Cheese\">\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-readonly/_expected.html",
    "content": "<div></div>\n<audio></audio>\n<video></video>\n<input type=\"file\">\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-readonly/main.svelte",
    "content": "<script>\n\texport let clientWidth = 1;\n\texport let clientHeight = 2;\n\texport let offsetHeight = 3;\n\texport let offsetWidth = 4;\n\n\texport let audioDuration = 5;\n\texport let audioBuffered = 6;\n\texport let audioSeekable = 7;\n\texport let audioPlayed = 8;\n\n\texport let videoDuration = 9;\n\texport let videoBuffered = 10;\n\texport let videoSeekable = 11;\n\texport let videoPlayed = 12;\n\n\texport let value = '/some/file';\n</script>\n\n<div\n\tbind:clientWidth\n\tbind:clientHeight\n\tbind:offsetWidth\n\tbind:offsetHeight\n></div>\n\n<audio\n\tbind:duration=\"{audioDuration}\"\n\tbind:buffered=\"{audioBuffered}\"\n\tbind:seekable=\"{audioSeekable}\"\n\tbind:played=\"{audioPlayed}\"\n></audio>\n\n<video\n\tbind:duration=\"{videoDuration}\"\n\tbind:buffered=\"{videoBuffered}\"\n\tbind:seekable=\"{videoSeekable}\"\n\tbind:played=\"{videoPlayed}\"\n></video>\n\n<input\n  type=\"file\"\n\tbind:value\n/>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-zero/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-zero/_expected.html",
    "content": "<input value=\"0\" type=\"number\">\n<input value=\"0\" type=\"range\">"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/bindings-zero/main.svelte",
    "content": "<script>\n\texport let foo = 0;\n</script>\n\n<input type=\"number\" bind:value={foo} >\n<input type=\"range\" bind:value={foo} >"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-failed-prop/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttransformError: (error) => {\n\t\tif (/** @type {Error} */ (error).message !== 'you are not supposed to see this message') {\n\t\t\treturn 'wrong object passed to transformError';\n\t\t}\n\t\treturn 'component error';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-failed-prop/_expected.html",
    "content": "<p>caught: component error</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-failed-prop/main.svelte",
    "content": "<script>\n\tfunction throws() {\n\t\tthrow new Error('you are not supposed to see this message');\n\t}\n</script>\n\n{#snippet failed(error)}\n\t<p>caught: {error}</p>\n{/snippet}\n\n<svelte:boundary {failed}>\n\t<p>{throws()}</p>\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-close-bang-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tquery: '--!><img src=x onerror=alert(1)><!--'\n\t},\n\ttransformError: (error) => ({ message: /** @type {Error} */ (error).message })\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-close-bang-escape/_expected.html",
    "content": "<p class=\"error\">--!>&lt;img src=x onerror=alert(1)>&lt;!--</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-close-bang-escape/main.svelte",
    "content": "<script>\n\tlet { query } = $props();\n\n\tfunction search(q) {\n\t\tthrow new Error(q);\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{search(query)}</p>\n\n\t{#snippet failed(error)}\n\t\t<p class=\"error\">{error.message}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tquery: '--><img src=x onerror=alert(1)><!--'\n\t},\n\ttransformError: (error) => ({ message: /** @type {Error} */ (error).message })\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-escape/_expected.html",
    "content": "<p class=\"error\">-->&lt;img src=x onerror=alert(1)>&lt;!--</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-escape/main.svelte",
    "content": "<script>\n\tlet { query } = $props();\n\n\tfunction search(q) {\n\t\tthrow new Error(q);\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{search(query)}</p>\n\n\t{#snippet failed(error)}\n\t\t<p class=\"error\">{error.message}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-open-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tquery: '<!--<script>alert(1)</script>'\n\t},\n\ttransformError: (error) => ({ message: /** @type {Error} */ (error).message })\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-open-escape/_expected.html",
    "content": "<p class=\"error\">&lt;!--&lt;script&gt;alert(1)&lt;/script&gt;</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-open-escape/main.svelte",
    "content": "<script>\n\tlet { query } = $props();\n\n\tfunction search(q) {\n\t\tthrow new Error(q);\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{search(query)}</p>\n\n\t{#snippet failed(error)}\n\t\t<p class=\"error\">{error.message}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-overlap-escape/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tquery: '<!--><!--->-->'\n\t},\n\ttransformError: (error) => ({ message: /** @type {Error} */ (error).message })\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-overlap-escape/_expected.html",
    "content": "<p class=\"error\">&lt;!--&gt;&lt;!---&gt;--&gt;</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-html-comment-overlap-escape/main.svelte",
    "content": "<script>\n\tlet { query } = $props();\n\n\tfunction search(q) {\n\t\tthrow new Error(q);\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{search(query)}</p>\n\n\t{#snippet failed(error)}\n\t\t<p class=\"error\">{error.message}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-no-failed-snippet/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// transformError transforms the error, but there's no failed snippet.\n\t// The error should still propagate because there's nothing to render instead.\n\ttransformError: () => 'you will not see me',\n\terror: 'component error'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-no-failed-snippet/main.svelte",
    "content": "<script>\n\tfunction throws() {\n\t\tthrow new Error('component error');\n\t}\n</script>\n\n<svelte:boundary onerror={() => {}}>\n\t<p>{throws()}</p>\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-no-onerror/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// No transformError - by default the server throws, so the error should propagate.\n\terror: 'component error'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-no-onerror/main.svelte",
    "content": "<script>\n\tfunction throws() {\n\t\tthrow new Error('component error');\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{throws()}</p>\n\n\t{#snippet failed(error)}\n\t\t<p>caught: {error}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-with-onerror/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// boundary with failed snippet exists, so transformError should transform the error\n\ttransformError: (error) => {\n\t\tif (/** @type {Error} */ (error).message !== 'you are not supposed to see this message') {\n\t\t\treturn 'wrong object passed to transformError';\n\t\t}\n\t\treturn 'component error';\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-with-onerror/_expected.html",
    "content": "<p>caught: component error</p>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-error-with-onerror/main.svelte",
    "content": "<script>\n\tfunction throws() {\n\t\tthrow new Error('you are not supposed to see this message');\n\t}\n</script>\n\n<svelte:boundary>\n\t<p>{throws()}</p>\n\n\t{#snippet failed(error)}\n\t\t<p>caught: {error}</p>\n\t{/snippet}\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_expected.html",
    "content": "<!--[--><!---->Loading...<!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/main.svelte",
    "content": "{#snippet pending()}\n\tLoading...\n{/snippet}\n\n<svelte:boundary pending={pending}>\n\t{@const data = await Promise.resolve('hello')}\n\t<p>{data}</p>\n</svelte:boundary>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/comment/_expected.html",
    "content": "<p>before</p>\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/comment/main.svelte",
    "content": "<p>before</p>\n<!-- a comment -->\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/comment-preserve/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tpreserveComments: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/comment-preserve/_expected.html",
    "content": "<!--[--><p>before</p><!-- a comment --><p>after</p><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/comment-preserve/main.svelte",
    "content": "<p>before</p>\n<!-- a comment -->\n<p>after</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component/Widget.svelte",
    "content": "<p>i am a widget</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component/_expected.html",
    "content": "<div><p>i am a widget</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding/Foo.svelte",
    "content": "<script>\n\texport let x = 1;\n</script>\n\n:foo:\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding/_expected.html",
    "content": "1:foo:1\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let x;\n</script>\n\n{x}<Foo bind:x/>{x}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding-renamed/Foo.svelte",
    "content": "<script>\n\texport let x = 1;\n</script>\n\n:foo:\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding-renamed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding-renamed/_expected.html",
    "content": "1:foo:1\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-binding-renamed/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\n\texport let x;\n\texport let y;\n</script>\n\n{y}<Foo bind:x={y}/>{y}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-dynamic/Widget.svelte",
    "content": "<script>\n\texport let foo;\n\texport let baz;\n\texport let qux;\n\texport let quux;\n</script>\n\n<p>foo: {foo}</p>\n<p>baz: {baz} ({typeof baz})</p>\n<p>qux: {qux}</p>\n<p>quux: {quux}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-dynamic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tbar: 'lol',\n\t\tx: 2,\n\t\tcompound: 'piece of',\n\t\tgo: {\n\t\t\tdeeper: 'core'\n\t\t}\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-dynamic/_expected.html",
    "content": "<div><p>foo: lol</p>\n<p>baz: 42 (number)</p>\n<p>qux: this is a piece of string</p>\n<p>quux: core</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-dynamic/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let bar;\n\texport let x;\n\texport let compound;\n\texport let go;\n</script>\n\n<div>\n\t<Widget foo='{bar}' baz='{40 + x}' qux='this is a {compound} string' quux='{go.deeper}'/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-empty/Widget.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>foo: '{foo}'</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-empty/_expected.html",
    "content": "<div><p>foo: ''</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-data-empty/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget foo=''/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-refs/Widget.svelte",
    "content": "<p>widget</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-refs/_expected.html",
    "content": "<div><p>widget</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-refs/main.svelte",
    "content": "<script>\n\texport let widget;\n\n\timport Widget from './Widget.svelte';\n</script>\n\n<div><Widget bind:this={widget}/></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-refs-and-attributes/Widget.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-refs-and-attributes/_expected.html",
    "content": "<div><p>42</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-refs-and-attributes/main.svelte",
    "content": "<script>\n\texport let widget;\n\n\timport Widget from './Widget.svelte';\n\n\texport let foo = 42;\n</script>\n\n<div><Widget bind:this={widget} foo='{foo}'/></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-with-different-extension/Widget.svelte",
    "content": "<p>i am a widget</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-with-different-extension/_expected.html",
    "content": "<div><p>i am a widget</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-with-different-extension/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<div>\n\t<Widget/>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-yield/Widget.svelte",
    "content": "<script>\n\texport let data = 'this should not appear';\n</script>\n\n<p><slot></slot></p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-yield/_expected.html",
    "content": "<div>\n\t<p>Hello</p>\n</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/component-yield/main.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\texport let data = 'Hello';\n</script>\n\n<div>\n\t<Widget>{data}</Widget>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/computed/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\ta: 1,\n\t\tb: 2\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/computed/_expected.html",
    "content": "<p>1 + 2 = 3</p>\n<p>3 * 3 = 9</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/computed/main.svelte",
    "content": "<script>\n\texport let a;\n\texport let b;\n\n\tfunction c() {\n\t\treturn a + b;\n\t}\n\n\tfunction cSquared() {\n\t\treturn c() * c();\n\t}\n</script>\n\n<p>{a} + {b} = {c()}</p>\n<p>{c()} * {c()} = {cSquared()}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte",
    "content": "<script>\n\timport { getContext } from 'svelte';\n\tconst value = getContext('foo');\n</script>\n\n<div>Value in child component: {value}</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/constructor-prefer-passed-context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html",
    "content": "<div><div>Value in child component: </div></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte",
    "content": "<script>\n\timport { setContext } from 'svelte';\n\timport { render } from 'svelte/server';\n\timport ChildComponent from './ChildComponent.svelte';\n\n\tsetContext('foo', true);\n\n\tconst content = render(ChildComponent, { props: {}, context: new Map() }).html;\n</script>\n\n<div>{@html content}</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/contenteditable-bindings-escaped/_expected.html",
    "content": "<!--[--><div contenteditable=\"\">&lt;script>alert('pwnd')&lt;/script></div> <div contenteditable=\"\">&lt;script>alert('pwnd')&lt;/script></div> <div contenteditable=\"\"><script>alert('pwnd')</script></div><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/contenteditable-bindings-escaped/main.svelte",
    "content": "<script>\n\tlet data = $state(\"<scri\"+\"pt>alert('pwnd')</scr\"+\"ipt>\");\n</script>\n\n<div contenteditable bind:innerText={data}></div>\n<div contenteditable bind:textContent={data}></div>\n<div contenteditable bind:innerHTML={data}></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/context/Child.svelte",
    "content": "<script>\n\timport { setContext, getContext } from 'svelte';\n\n\tsetContext('key', 'child value');\n\tawait Promise.resolve();\n</script>\n\n<div>{getContext('key')}</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/context/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async']\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/context/_expected.html",
    "content": "<div>value</div>\n<div>value</div>\n<div>child value</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/context/main.svelte",
    "content": "<script>\n\timport { getContext, setContext } from 'svelte';\n\timport Child from './Child.svelte';\n\n\tsetContext('key', 'value');\n\tawait Promise.resolve();\n</script>\n\n<div>{getContext('key')}</div>\n<div>{(await Promise.resolve(true)) && getContext('key')}</div>\n<Child />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\terror: 'missing_context'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/main.svelte",
    "content": "<script module>\n\timport { createContext } from 'svelte';\n\n\tconst [get] = createContext();\n</script>\n\n<script>\n\tget();\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-config-error/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async'],\n\tcsp: { hash: true, nonce: 'test-nonce' },\n\terror: 'invalid_csp'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-config-error/_expected_head.html",
    "content": "<script nonce=\"test-nonce\">\n{\n\tconst r = (v) => Promise.resolve(v);\n\tconst h = (window.__svelte ??= {}).h ??= new Map();\n\n\tfor (const [k, v] of [\n\t\t[\"key\",r(\"bar\")]\n\t]) {\n\t\th.set(k, v);\n\t}\n}\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-config-error/main.svelte",
    "content": "<script>\n\timport { hydratable } from \"svelte\";\n    const foo = await hydratable('key', () => Promise.resolve('bar'));\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-hash/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async'],\n\tcsp: { hash: true },\n\tscript_hashes: ['sha256-J0xwNm40i0NVEdHYeMRThG7y90X+P/I1ElZGnpQ0AbU=']\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-hash/_expected_head.html",
    "content": "<script>\n{\n\tconst r = (v) => Promise.resolve(v);\n\t\t\t\tconst h = (window.__svelte ??= {}).h ??= new Map();\n\n\tfor (const [k, v] of [\n\t\t[\"key\",r(\"bar\")]\n\t]) {\n\t\th.set(k, v);\n\t}\n}\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-hash/main.svelte",
    "content": "<script>\n\timport { hydratable } from \"svelte\";\n    const foo = await hydratable('key', () => Promise.resolve('bar'));\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-nonce/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async'],\n\tcsp: { nonce: 'test-nonce' }\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-nonce/_expected_head.html",
    "content": "<script nonce=\"test-nonce\">\n{\n\tconst r = (v) => Promise.resolve(v);\n\tconst h = (window.__svelte ??= {}).h ??= new Map();\n\n\tfor (const [k, v] of [\n\t\t[\"key\",r(\"bar\")]\n\t]) {\n\t\th.set(k, v);\n\t}\n}\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/csp-nonce/main.svelte",
    "content": "<script>\n\timport { hydratable } from \"svelte\";\n    const foo = await hydratable('key', () => Promise.resolve('bar'));\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcss: 'injected'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css/_expected.css",
    "content": "\n\t.foo.svelte-e9omc {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css/_expected.html",
    "content": "<div class=\"foo svelte-e9omc\">foo</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css/_expected_head.html",
    "content": "<style id=\"svelte-e9omc\">.foo.svelte-e9omc {color:red;}</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css/main.svelte",
    "content": "<div class=\"foo\">foo</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-empty/_config.js",
    "content": "import { test } from '../../test';\n\n// Test validates that by default no CSS is rendered on the server\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-empty/_expected.css",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-empty/_expected.html",
    "content": "<div class=\"foo svelte-sg04hs\">foo</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-empty/main.svelte",
    "content": "<div class=\"foo\">foo</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcss: 'external'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options/_expected.css",
    "content": "\n\t.foo.svelte-okauro {\n\t\tcolor: red;\n\t}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options/_expected.html",
    "content": "<div class=\"foo svelte-okauro\">foo</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options/_expected_head.html",
    "content": "<style id=\"svelte-okauro\">.foo.svelte-okauro {color:red;}</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options/main.svelte",
    "content": "<svelte:options css=\"injected\" />\n\n<div class=\"foo\">foo</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-minify/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\t// test checks that minification works correctly\n\tcompileOptions: {\n\t\tcss: 'external'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-minify/_expected.html",
    "content": "<!--[--><div class=\"foo svelte-1h3glmj\">foo</div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-minify/_expected_head.html",
    "content": "<style id=\"svelte-1h3glmj\">.foo.svelte-1h3glmj {color:green;}.foo.svelte-1h3glmj {color:green;} .foo.svelte-1h3glmj {color:green;}.foo.svelte-1h3glmj, .foo.svelte-1h3glmj {color:green;}</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-minify/main.svelte",
    "content": "<svelte:options css=\"injected\" />\n\n<div class=\"foo\">foo</div>\n\n<style>\n\t.foo {\n\t\tcolor: green;\n\t}\n\t.unused {\n\t\tcolor: red;\n\t}\n\t.unused {\n\t\t.nested-unused {\n\t\t\tcolor: red;\n\t\t}\n\t}\n\t.unused:has(.unused) {\n\t\tcolor: red;\n\t}\n\t.foo, .unused {\n\t\tcolor: green;\n\t}\n\t.unused, .foo {\n\t\tcolor: green;\n\t}\n\t.foo, .unused, .foo {\n\t\tcolor: green;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-nested/Nested.svelte",
    "content": "<svelte:options css=\"injected\" />\n\n<div class=\"bar\">bar</div>\n\n<style>\n\t.bar {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-nested/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcss: 'external'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-nested/_expected.css",
    "content": "\n.foo.svelte-1nvcr6w {\n\tcolor: red;\n}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-nested/_expected.html",
    "content": "<!--[--><div class=\"bar svelte-1nvcr6w\">bar</div><!----> <div class=\"foo svelte-sg04hs\">foo</div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-nested/_expected_head.html",
    "content": "<style id=\"svelte-lr8eda\">.bar.svelte-lr8eda {color:red;}</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/css-injected-options-nested/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested />\n\n<div class=\"foo\">foo</div>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/default-data/_expected.html",
    "content": "<p>1</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/default-data/main.svelte",
    "content": "<script>\n\texport let foo = 1;\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/default-data-override/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: 2\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/default-data-override/_expected.html",
    "content": "<p>2</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/default-data-override/main.svelte",
    "content": "<script>\n\texport let foo = 1;\n</script>\n\n<p>{foo}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/destructure-state/_expected.html",
    "content": "10, Admin"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/destructure-state/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet [level, custom] = $state([10, \"Admin\"])\n</script>\n\n{level}, {custom}"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/destructure-state-iterable/_expected.html",
    "content": "0, 1"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/destructure-state-iterable/main.svelte",
    "content": "<script lang=\"ts\">\n\tlet count = 0;\n\tfunction* test(){\n\t\twhile (true) {\n\t\t\tyield count++;\n\t\t}\n\t}\n\tlet [one, two] = $state(test())\n</script>\n\n{one}, {two}"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/directives/_expected.html",
    "content": "<button>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/directives/main.svelte",
    "content": "<button on:click='{() => foo = \"bar\"}'>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-string/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-string/_expected.html",
    "content": "<div>Foo</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-string/main.svelte",
    "content": "<svelte:element this={\"div\"}>Foo</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-variable/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-variable/_expected.html",
    "content": "<h1>Foo</h1>\n<div>Bar</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-variable/main.svelte",
    "content": "<script>\n  let heading = 'h1';\n  let tag = 'div';\n</script>\n\n<svelte:element this={heading}>Foo</svelte:element>\n<svelte:element this={tag}>Bar</svelte:element>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-xss-prevention/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\ttag: 'svg onload=alert(1)'\n\t},\n\terror: 'dynamic_element_invalid_tag'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-element-xss-prevention/main.svelte",
    "content": "<script>\n\tlet { tag } = $props();\n</script>\n\n<svelte:element this={tag}>ok</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-text/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: 'it works'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-text/_expected.html",
    "content": "it works\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-text/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{foo}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-text-escaped/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: \"<p>this should be <em>escaped</em> & so should 'this'</p>\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-text-escaped/_expected.html",
    "content": "&lt;p&gt;this should be &lt;em&gt;escaped&lt;/em&gt; &amp; so should &#39;this&#39;&lt;/p&gt;\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/dynamic-text-escaped/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{foo}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tanimals: ['alligator', 'beetle', 'cuckoo']\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/each-block/_expected.html",
    "content": "<p>1: alligator</p><p>2: beetle</p><p>3: cuckoo</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/each-block/main.svelte",
    "content": "<script>\n\texport let animals;\n</script>\n\n{#each animals as animal, i}\n\t<p>{i + 1}: {animal}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/each-body-async/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async']\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/each-body-async/_expected.html",
    "content": "<!--[--><!--[--><!--[--><!---->each<!--]--><!--]--> <!--[--><!--[!--><!---->else<!--]--><!--]--><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/each-body-async/main.svelte",
    "content": "{#each { length: 1 }}\n\t{@const data = await Promise.resolve(\"each\")}\n\t{data}\n{/each}\n\n{#each { length: 0 }}\n\tshould not see this\n{:else}\n\t{@const data = await Promise.resolve(\"else\")}\n\t{data}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/empty-elements-closed/_expected.html",
    "content": "<a></a>\n<p></p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/empty-elements-closed/main.svelte",
    "content": "<a></a>\n<p></p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/entities/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: \"it's working\"\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/entities/_expected.html",
    "content": "it's working\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/entities/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{foo}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/_expected.html",
    "content": "<h1>Test</h1>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/main.svelte",
    "content": "<script>\n\tlet Component = $state();\n</script>\n\n<h1>Test</h1>\n<Component />"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-component-props-id/HeadNested.svelte",
    "content": "<script>\n\tlet id = $props.id();\n</script>\n\n<meta name=\"id\" content={id} />"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-component-props-id/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-component-props-id/main.svelte",
    "content": "<script>\n\timport HeadNested from './HeadNested.svelte';\n</script>\n\n<svelte:head>\n\t<HeadNested />\n</svelte:head>\n\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-html-and-component/HeadNested.svelte",
    "content": "{@html '<meta name=\"head_nested_html\" content=\"head_nested_html\">'}\n<meta name=\"head_nested\" content=\"head_nested\">\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-html-and-component/Nested.svelte",
    "content": "\n<svelte:head>\n\t{@html '<meta name=\"nested_html\" content=\"nested_html\">'}\n\t<meta name=\"nested\" content=\"nested\">\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-html-and-component/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-html-and-component/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-html-and-component/_expected_head.html",
    "content": "<!--ssr:0-->\n<!--ssr:1-->\n<meta content=\"main_html\" name=\"main_html\">\n<!--ssr:1-->\n<meta content=\"main\" name=\"main\">\n<!--ssr:2-->\n<!--ssr:3-->\n<meta content=\"head_nested_html\" name=\"head_nested_html\">\n<!--ssr:3-->\n<meta content=\"head_nested\" name=\"head_nested\">\n<!--ssr:2-->\n<!--ssr:4-->\n<meta content=\"nested_html\" name=\"nested_html\">\n<!--ssr:4-->\n<meta content=\"nested\" name=\"nested\">\n<!--ssr:0-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-html-and-component/main.svelte",
    "content": "<script>\n\timport HeadNested from './HeadNested.svelte';\n\timport Nested from './Nested.svelte';\n</script>\n\n<svelte:head>\n\t{@html '<meta name=\"main_html\" content=\"main_html\">'}\n\t<meta name=\"main\" content=\"main\">\n\t<HeadNested />\n</svelte:head>\n\n<Nested/>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-meta-hydrate-duplicate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\twithoutNormalizeHtml: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-meta-hydrate-duplicate/_expected.html",
    "content": "<!--[--><div>Just a dummy page.</div><!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-meta-hydrate-duplicate/_expected_head.html",
    "content": "<!ssr:0>\n<link rel=\"canonical\" href=\"/\">\n<meta name=\"description\" content=\"some description\">\n<meta name=\"keywords\" content=\"some keywords\">\n<title>Some Title</title>\n<!ssr:0>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-meta-hydrate-duplicate/main.svelte",
    "content": "<svelte:head>\n  <title>Some Title</title>\n  <link rel=\"canonical\" href=\"/\">\n  <meta name=\"description\" content=\"some description\">\n  <meta name=\"keywords\" content=\"some keywords\">\n</svelte:head>\n\n<div>Just a dummy page.</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-multiple-title/A.svelte",
    "content": "<svelte:head>\n\t<title>A</title>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-multiple-title/B.svelte",
    "content": "<svelte:head>\n\t<title>B</title>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-multiple-title/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-multiple-title/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-multiple-title/_expected_head.html",
    "content": "<title>B</title>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-multiple-title/main.svelte",
    "content": "<script>\n\timport A from './A.svelte';\n\timport B from './B.svelte';\n</script>\n\n<svelte:head>\n\t<title>Main</title>\n</svelte:head>\n<A />\n<B />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-no-duplicates-with-binding/Foo.svelte",
    "content": "<script>\n\texport let bar = null\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-no-duplicates-with-binding/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-no-duplicates-with-binding/_expected_head.html",
    "content": "<!--ssr:0-->\n<link rel=\"canonical\" href=\"/test\">\n<meta name=\"description\" content=\"test\">\n<!--ssr:0-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-no-duplicates-with-binding/main.svelte",
    "content": "<script>\n\timport Foo from './Foo.svelte';\n\tlet bar;\n</script>\n\n<svelte:head>\n\t<link rel=\"canonical\" href=\"/test\" />\n\t<meta name=\"description\" content=\"test\" />\n</svelte:head>\n\n<Foo bind:bar />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-raw-elements-content/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-raw-elements-content/_expected.html",
    "content": "<div class=\"bar baz svelte-m782ot\">bar</div>\n<div class=\"foo bar baz svelte-m782ot\">bar</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-raw-elements-content/main.svelte",
    "content": "<script>\n\tconst dynamic_value = 'bar';\n</script>\n<div class=\"{dynamic_value} baz\">bar</div>\n<div class=\"foo {dynamic_value} baz\">bar</div>\n\n<style>\n\t.baz {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tpreserveComments: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/_expected.html",
    "content": "<!--[-->\n<!---->\n<title>lorem</title>\n<!---->\n<!---->\n<style>\n\t.ipsum {\n\t\tdisplay: block;\n\t}\n\t</style>\n<!---->\n<!---->\n<script>\n\tconsole.log(true);\n</script>\n<!---->\n<!--]-->\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-svelte-components-raw-content/main.svelte",
    "content": "<svelte:element this={\"title\"}>lorem</svelte:element>\n<svelte:element this={\"style\"}>{'.ipsum { display: block; }'}</svelte:element>\n<svelte:element this={\"script\"}>{'console.log(true);'}</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-title/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tadjective: 'custom'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-title/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-title/_expected_head.html",
    "content": "<!--ssr:0--><title>a custom title</title><!--ssr:0-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/head-title/main.svelte",
    "content": "<script>\n\texport let adjective;\n</script>\n\n<svelte:head>\n\t<title>a {adjective} title</title>\n</svelte:head>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/helpers/_expected.html",
    "content": "<p>3</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/helpers/main.svelte",
    "content": "<script>\n\texport let foo = 1;\n\n\tconst thrice = num => 3 * num;\n</script>\n\n<p>{thrice(foo)}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async'],\n\terror: 'hydratable_clobbering'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering/main.svelte",
    "content": "<script lang=\"ts\">\n    import { hydratable } from 'svelte';\n\n    hydratable('key', () => 'first');\n    hydratable('key', () => 'second');\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-but-ok/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async']\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-but-ok/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-but-ok/main.svelte",
    "content": "<script lang=\"ts\">\n    import { hydratable } from 'svelte';\n\n    await hydratable('key', () => 'first');\n    await hydratable('key', () => 'first');\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-complicated/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async'],\n\terror: 'hydratable_clobbering'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-clobbering-complicated/main.svelte",
    "content": "<script lang=\"ts\">\n    import { hydratable } from 'svelte';\n\n    const a = await hydratable('key', () => Promise.resolve({\n        nested: Promise.resolve({\n            one: Promise.resolve(1),\n        }),\n        two: Promise.resolve(2),\n    }));\n    const b = await hydratable('key', () => Promise.resolve({\n        nested: Promise.resolve({\n            one: Promise.resolve(2),\n        }),\n        two: Promise.resolve(2),\n    }));\n</script>\n\n<p>{await (await (a.nested)).one}</p>\n<p>{await a.two}</p>\n<p>{await (await (b.nested)).one}</p>\n<p>{await b.two}</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-unserializable/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tmode: ['async'],\n\terror: 'hydratable_serialization_failed'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/hydratable-unserializable/main.svelte",
    "content": "<script lang=\"ts\">\n    import { hydratable } from 'svelte';\n\n    hydratable('key', () => new Promise(() => { throw new Error('nope') }));\n</script>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/if-block-false/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: false\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/if-block-false/_expected.html",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/if-block-false/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{#if foo}\n\t<p>foo is true</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/if-block-true/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\tfoo: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/if-block-true/_expected.html",
    "content": "<p>foo is true</p>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/if-block-true/main.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{#if foo}\n\t<p>foo is true</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/import-non-component/_expected.html",
    "content": "<div>i got 99 problems</div>\n<div>the answer is 42</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/import-non-component/answer.js",
    "content": "export default 42;\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/import-non-component/main.svelte",
    "content": "<script>\n\timport answer from './answer.js';\n\timport problems from './problems.js';\n</script>\n\n<div>i got {problems} problems</div>\n<div>the answer is {answer}</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/import-non-component/problems.js",
    "content": "export default 99;\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO: This test actually works, but the error message is printed, not thrown, so we need to have a way to test for that\n\tcompileOptions: {\n\t\tdev: true\n\t},\n\n\terror:\n\t\t'node_invalid_placement_ssr: `<p>` (packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/main.svelte:2:1) cannot be a child of `<p>` (packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/main.svelte:1:0)\\n\\nThis can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.'\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/_expected.html",
    "content": "<!--[--><!----><p ><!----><p ><!----></p><!----><!----></p><!----><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/_expected_head.html",
    "content": "<script>console.error(\"node_invalid_placement_ssr: `<p>` (packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/main.svelte:2:1) cannot be a child of `<p>` (packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/main.svelte:1:0)\\n\\nThis can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.\")</script>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/invalid-nested-svelte-element/main.svelte",
    "content": "<svelte:element this={'p'}>\n\t<svelte:element this={'p'}></svelte:element>\n</svelte:element>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/legacy-imports/Button.svelte",
    "content": ""
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/legacy-imports/_expected.html",
    "content": "<!--[--><button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <button>click me</button> <!----> <div><button>click me</button> <button>click me</button> <button>click me</button></div><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/legacy-imports/main.svelte",
    "content": "<script>\n\timport Button from \"./Button.svelte\"\n\timport { createBubbler, handlers, preventDefault, stopPropagation, stopImmediatePropagation, self, trusted, once, passive, nonpassive } from 'svelte/legacy';\n\n\tconst bubble = createBubbler();\n</script>\n\n<button onclick={handlers(() => console.log('hi'), bubble('click'))}>click me</button>\n<button onclick={handlers(function(){ console.log('hi') }, bubble('click'))}>click me</button>\n<button onclick={handlers(() => console.log('before'), bubble('click'), () => console.log('after'))}\n\t>click me</button\n>\n<button onclick={handlers(bubble('click'), foo)}>click me</button>\n<button onclick={bubble('click')}>click me</button>\n\n<button ondblclick={() => console.log('hi')}>click me</button>\n<button ontoggle={bubble('toggle')}>click me</button>\n<button oncustom-event={() => 'hi'}>click me</button>\n<button oncustom-event-bubble={bubble('custom-event-bubble')}>click me</button>\n\n<button onclick={preventDefault(() => (searching = true))}>click me</button>\n<button onclick={preventDefault(() => '')}>click me</button>\n<button onclick={stopPropagation(() => {})}>click me</button>\n<button onclick={stopImmediatePropagation(() => '')}>click me</button>\n<button onclickcapture={() => ''}>click me</button>\n<button onclick={self(() => '')}>click me</button>\n<button onclick={trusted(() => '')}>click me</button>\n<button onclick={once(() => '')}>click me</button>\n\n<button onclick={stopPropagation(preventDefault(() => ''))}>click me</button>\n<button onclick={stopImmediatePropagation(stopPropagation(() => {}))}>click me</button>\n<button onclick={self(stopImmediatePropagation(() => ''))}>click me</button>\n<button onclick={trusted(self(() => ''))}>click me</button>\n<button onclick={trusted(self(() => ''))}>click me</button>\n<button onclick={once(trusted(() => ''))}>click me</button>\n<button onclick={once(preventDefault(() => ''))}>click me</button>\n\n<button use:passive={['click', () => bubble('click')]}>click me</button>\n<button use:nonpassive={['click', () => bubble('click')]}>click me</button>\n<button use:passive={['click', () => ()=>'']}>click me</button>\n<button use:nonpassive={['click', () => ()=>'']}>click me</button>\n<button use:passive={['click', () => foo]}>click me</button>\n<button use:nonpassive={['click', () => foo]}>click me</button>\n<button use:passive={['click', () => stopPropagation(()=>'')]}>click me</button>\n<button use:nonpassive={['click', () => trusted(()=>'')]}>click me</button>\n\n<button\n\tuse:passive={['click', () => ()=>'']}\n\tonclick={handlers(bubble('click'), ()=>'')}\n>click me</button>\n\n<button\n\tuse:nonpassive={['click', () => ()=>'']}\n\tonclick={handlers(bubble('click'), ()=>{\n\t\treturn 'multiline';\n\t})}\n>click me</button>\n\n\n<button\n\tonclick={handlers(bubble('click'), foo, ()=>'', once(trusted(preventDefault(()=>''))))}\n\tonblur={handlers(foo, once(trusted(preventDefault(bubble('blur')))))}\n>\n\tclick me\n</button>\n\n\n<Button on:click={() => 'leave untouched'} on:click>click me</Button>\n\n<div>\n\t<button\n\t\tonclick={() => {\n\t\t\tconsole.log('hi');\n\t\t}}>click me</button\n\t>\n\t<button\n\t\tonclick={preventDefault(() => {\n\t\t\tconsole.log('hi');\n\t\t})}>click me</button\n\t>\n\t<button onclick={preventDefault(() => (count += 1))}>click me</button>\n</div>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/option-body-escaped/_expected.html",
    "content": "<!--[--><select><option>a&lt;/option>&lt;script>alert(\"pwnd\")&lt;/script>&lt;option>puppa</option><option>selected: a&lt;/option>&lt;script>alert(\"pwnd\")&lt;/script>&lt;option>puppa</option></select><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/option-body-escaped/main.svelte",
    "content": "<script>\n\tlet {\n    selectedBook = \"a</option><sc\" + \"ript>alert(\\\"pwnd\\\")</sc\" + \"ript><option>puppa\"\n  } = $props();\n</script>\n<select>\n  <option>{selectedBook}</option>\n  <option>selected: {selectedBook}</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/option-scoped-class/_expected.html",
    "content": "<select><option class=\"opt svelte-1l69ci\" value=\"foo\" selected>foo</option></select>\n\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/option-scoped-class/main.svelte",
    "content": "<select value=\"foo\">\n\t<option class=\"opt\" value=\"foo\">foo</option>\n</select>\n\n<style>\n\toption {\n\t\tcolor: red;\n\t}\n</style>\n\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/raw-mustaches/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tprops: {\n\t\traw: '<span><em>raw html!!!\\\\o/</span></em>'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/raw-mustaches/_expected.html",
    "content": "before<span><em>raw html!!!\\o/</span></em>after\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/raw-mustaches/main.svelte",
    "content": "<script>\n\texport let raw;\n</script>\n\nbefore{@html raw}after\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/reactivity-window/_expected.html",
    "content": "<!--[--><p>devicePixelRatio: </p> <p>innerHeight: </p> <p>innerWidth: </p> <p>online: </p> <p>outerHeight: </p> <p>outerWidth: </p> <p>screenLeft: </p> <p>screenTop: </p> <p>scrollX: </p> <p>scrollY: </p><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/reactivity-window/main.svelte",
    "content": "<script>\n\timport { devicePixelRatio, innerHeight, innerWidth, online, outerHeight, outerWidth, screenLeft, screenTop, scrollX, scrollY } from \"svelte/reactivity/window\";\n</script>\n\n<p>devicePixelRatio: {devicePixelRatio.current}</p>\n<p>innerHeight: {innerHeight.current}</p>\n<p>innerWidth: {innerWidth.current}</p>\n<p>online: {online.current}</p>\n<p>outerHeight: {outerHeight.current}</p>\n<p>outerWidth: {outerWidth.current}</p>\n<p>screenLeft: {screenLeft.current}</p>\n<p>screenTop: {screenTop.current}</p>\n<p>scrollX: {scrollX.current}</p>\n<p>scrollY: {scrollY.current}</p>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/sanitize-name/[foo].svelte",
    "content": "<p>foo!</p>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/sanitize-name/_expected.html",
    "content": "<p>foo!</p>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/sanitize-name/main.svelte",
    "content": "<script>\n\timport Foo from './[foo].svelte';\n</script>\n\n<Foo/>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-option-store-implicit-value/_expected.html",
    "content": "<!--[--><select><option>Dog</option><option>cat</option></select><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-option-store-implicit-value/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\tconst value = writable('dog');\n\tconst label = writable('Dog');\n</script>\n\n<select bind:value={$value}>\n\t<option>{$label}</option>\n\t<option>cat</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-option-store-text-content/_expected.html",
    "content": "<!--[--><select><option disabled=\"\" value=\"\" selected=\"\">placeholder</option><option value=\"a\">A</option><option value=\"b\">B</option></select><!--]-->"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-option-store-text-content/main.svelte",
    "content": "<script>\n\timport { readable } from 'svelte/store';\n\n\tconst t = readable((/** @type {string} */ key) => key);\n\n\tlet value = $state('');\n</script>\n\n<select bind:value>\n\t<option disabled value=\"\">{$t('placeholder')}</option>\n\t<option value=\"a\">A</option>\n\t<option value=\"b\">B</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value/_expected.html",
    "content": "<select><option value=\"\">--Please choose an option--</option><option value=\"dog\" selected>Dog</option><option value=\"cat\">Cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value/main.svelte",
    "content": "<select value=\"dog\">\n\t<option value=\"\">--Please choose an option--</option>\n\t<option value=\"dog\">Dog</option>\n\t<option value=\"cat\">Cat</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-bind-store/_expected.html",
    "content": "<select><option value=\"\">--Please choose an option--</option><option value=\"dog\" selected>Dog</option><option value=\"cat\">Cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-bind-store/main.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\tconst value = writable('dog');\n</script>\n\n<select bind:value={$value}>\n\t<option value=\"\">--Please choose an option--</option>\n\t<option value=\"dog\">Dog</option>\n\t<option value=\"cat\">Cat</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-component/Option.svelte",
    "content": "<script>\n\tlet props = $props();\n</script>\n\n<option {...props}>{@render props.children?.()}</option>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-component/_expected.html",
    "content": "<select><option value=\"\">--Please choose an option--</option><option value=\"dog\" selected>Dog</option><option value=\"cat\">Cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-component/main.svelte",
    "content": "<script lang=\"ts\">\n\timport Option from './Option.svelte';\n</script>\n<select value=\"dog\">\n\t<Option value=\"\">--Please choose an option--</Option>\n\t<Option value=\"dog\">Dog</Option>\n\t<Option value=\"cat\">Cat</Option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-implicit-value/_expected.html",
    "content": "<select><option>--Please choose an option--</option><option selected>dog</option><option>cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-implicit-value/main.svelte",
    "content": "<select value=\"dog\">\n\t<option>--Please choose an option--</option>\n\t<option>dog</option>\n\t<option>cat</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-implicit-value-complex/_expected.html",
    "content": "<select><option>--Please choose an option--</option><option selected>dog</option><option>cat</option></select>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-implicit-value-complex/main.svelte",
    "content": "<select value=\"dog\">\n\t<option>\n\t\t{@render option(\"--Please choose an option--\")}\n\t</option>\n\t<option>\n\t\t{@render option(\"dog\")}\n\t</option>\n\t<option>\n\t\t{@render option(\"cat\")}\n\t</option>\n</select>\n\n{#snippet option(val)}{val}{/snippet}"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-scoped-class/_expected.html",
    "content": "<select class=\"foo svelte-18avu97\"><option value=\"foo\" selected>foo</option></select>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/select-value-scoped-class/main.svelte",
    "content": "<select class=\"foo\" value=\"foo\">\n\t<option value=\"foo\">foo</option>\n</select>\n\n<style>\n\tselect {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes/_expected.html",
    "content": "<input value=\"bar\" form=\"qux\" list=\"quu\" />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes/main.svelte",
    "content": "<script>\n\tlet props = {\n\t\tvalue: 'bar',\n\t\tform: 'qux',\n\t\tlist: 'quu',\n\t};\n</script>\n\n<input {...props} />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-boolean/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-boolean/_expected.html",
    "content": "<input readonly>\n<input>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-boolean/main.svelte",
    "content": "<input {...{ readonly: 1 }}>\n<input {...{ readonly: 0 }}>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-event-handler-xss/_expected.html",
    "content": "<div id=\"profile-123\" class=\"card\">content</div>\n\n<img src=\"x\" alt=\"photo\" />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-event-handler-xss/main.svelte",
    "content": "<script>\n\tconst userdata = {\n\t\tid: 'profile-123',\n\t\tclass: 'card',\n\t\tonclick: 'alert(1)',\n\t\tonerror: 'alert(1)',\n\t\tonfocus: 'alert(1)',\n\t\tonmouseover: 'alert(1)'\n\t};\n</script>\n\n<div {...userdata}>content</div>\n<img src=\"x\" alt=\"photo\" {...{ onerror: 'alert(1)', onload: 'alert(1)' }} />\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-white-space/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-white-space/_expected.html",
    "content": "<input value=\"\n\tbar\n\">\n\n<input class=\"white space\">"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/spread-attributes-white-space/main.svelte",
    "content": "<script>\n\tlet props = {\n\t\tvalue: '\\n\\tbar\\n',\n\t};\n</script>\n\n<input {...props} />\n\n<input class=\"\n\twhite\n\tspace\n\" {...({})}>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/static-div/_expected.html",
    "content": "<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/static-div/main.svelte",
    "content": "<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/static-text/_expected.html",
    "content": "some text\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/static-text/main.svelte",
    "content": "some text\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/store-init-props/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/store-init-props/_expected.html",
    "content": "1"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/store-init-props/main.svelte",
    "content": "<script lang=\"ts\">\n\timport { writable } from 'svelte/store';\n\tconst page = writable(1);\n\tconst { value = $page } = $props();\n</script>\n\n{value}\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/text-area-bind/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/text-area-bind/_expected.html",
    "content": "<textarea>hello</textarea>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/text-area-bind/main.svelte",
    "content": "<script>\n\t  let value = 'hello';\n</script>\n\n<textarea bind:value></textarea>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/textarea-children/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/textarea-children/_expected.html",
    "content": "<textarea>\n\t<p>not actually an element. 42</p>\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/textarea-children/main.svelte",
    "content": "<script>\n\texport let foo = 42;\n</script>\n\n<textarea>\n\t<p>not actually an element. {foo}</p>\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/textarea-value/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/textarea-value/_expected.html",
    "content": "<textarea>42</textarea>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/textarea-value/main.svelte",
    "content": "<script>\n\texport let foo = 42;\n</script>\n\n<textarea value='{foo}'/>"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/triple/_expected.html",
    "content": "<div><p>html</p></div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/samples/triple/main.svelte",
    "content": "<script>\n\texport let triple = '<p>html</p>';\n</script>\n\n<div>{@html triple}</div>\n"
  },
  {
    "path": "packages/svelte/tests/server-side-rendering/test.ts",
    "content": "// @vitest-environment jsdom\n\n// Yes it's an SSR test, but we need the env to compare html\n// TODO: Isolate the html comparison\n// TODO: happy-dom might be faster but currently replaces quotes which fails assertions\n\nimport * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { render } from 'svelte/server';\nimport { compile_directory, should_update_expected, try_read_file } from '../helpers.js';\nimport { assert_html_equal_with_options } from '../html_equal.js';\nimport { suite_with_variants, type BaseTest } from '../suite.js';\nimport type { CompileOptions } from '#compiler';\nimport { seen } from '../../src/internal/server/dev.js';\nimport type { SyncRenderOutput } from '#server';\n\ninterface SSRTest extends BaseTest {\n\tmode?: ('sync' | 'async')[];\n\tcompileOptions?: Partial<CompileOptions>;\n\tload_compiled?: boolean;\n\tprops?: Record<string, any>;\n\tid_prefix?: string;\n\twithoutNormalizeHtml?: boolean;\n\terror?: string;\n\tcsp?: { nonce: string } | { hash: true };\n\tscript_hashes?: string[];\n\ttransformError?: (error: unknown) => unknown;\n}\n\n// TODO remove this shim when we can\n// @ts-expect-error\nPromise.withResolvers = () => {\n\tlet resolve;\n\tlet reject;\n\n\tconst promise = new Promise((f, r) => {\n\t\tresolve = f;\n\t\treject = r;\n\t});\n\n\treturn { promise, resolve, reject };\n};\n\nconst { test, run } = suite_with_variants<SSRTest, 'sync' | 'async', CompileOptions>(\n\t['sync', 'async'],\n\t(variant, config, test_name) => {\n\t\tif (config.mode && !config.mode.includes(variant)) {\n\t\t\treturn 'no-test';\n\t\t}\n\n\t\tif (test_name.startsWith('async') && variant === 'sync') {\n\t\t\treturn 'no-test';\n\t\t}\n\n\t\treturn false;\n\t},\n\tasync (config, test_dir) => {\n\t\tconst compile_options = {\n\t\t\texperimental: {\n\t\t\t\tasync: true,\n\t\t\t\t...config.compileOptions?.experimental\n\t\t\t},\n\t\t\t...config.compileOptions\n\t\t};\n\n\t\tif (!config.load_compiled) {\n\t\t\tawait compile_directory(test_dir, 'server', compile_options);\n\t\t}\n\n\t\treturn compile_options;\n\t},\n\tasync (config, test_dir, variant, compile_options) => {\n\t\tconst Component = (await import(`${test_dir}/_output/server/main.svelte.js`)).default;\n\t\tconst expected_html = try_read_file(`${test_dir}/_expected.html`);\n\t\tconst is_async = variant === 'async';\n\n\t\tseen?.clear();\n\n\t\tlet rendered;\n\t\tlet errored = false;\n\t\tlet body: SyncRenderOutput['body'];\n\t\tlet head: SyncRenderOutput['head'];\n\t\tlet hashes: SyncRenderOutput['hashes'];\n\t\ttry {\n\t\t\tconst render_result = render(Component, {\n\t\t\t\tprops: config.props || {},\n\t\t\t\tidPrefix: config.id_prefix,\n\t\t\t\tcsp: config.csp,\n\t\t\t\ttransformError: config.transformError\n\t\t\t});\n\t\t\trendered = is_async ? await render_result : render_result;\n\t\t\t// we need to access these inside the try-catch otherwise errors in the script tag are not caught\n\t\t\t({ body, head, hashes } = rendered);\n\t\t} catch (error) {\n\t\t\terrored = true;\n\t\t\tif (config.error) {\n\t\t\t\tassert.include((error as Error).message, config.error);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (config.error && !errored) {\n\t\t\tassert.fail('Expected an error to be thrown, but rendering succeeded.');\n\t\t}\n\n\t\tfs.writeFileSync(\n\t\t\t`${test_dir}/_output/${is_async ? 'async_rendered.html' : 'rendered.html'}`,\n\t\t\tbody\n\t\t);\n\n\t\tif (head) {\n\t\t\tfs.writeFileSync(\n\t\t\t\t`${test_dir}/_output/${is_async ? 'async_rendered_head.html' : 'rendered_head.html'}`,\n\t\t\t\thead\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tassert_html_equal_with_options(body, expected_html || '', {\n\t\t\t\tpreserveComments: compile_options.preserveComments,\n\t\t\t\twithoutNormalizeHtml: config.withoutNormalizeHtml\n\t\t\t});\n\t\t} catch (error: any) {\n\t\t\tif (should_update_expected()) {\n\t\t\t\tfs.writeFileSync(`${test_dir}/_expected.html`, body);\n\t\t\t\tconsole.log(`Updated ${test_dir}/_expected.html.`);\n\t\t\t} else {\n\t\t\t\terror.message += '\\n' + `${test_dir}/main.svelte`;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (fs.existsSync(`${test_dir}/_expected_head.html`)) {\n\t\t\ttry {\n\t\t\t\tassert_html_equal_with_options(\n\t\t\t\t\thead,\n\t\t\t\t\tfs.readFileSync(`${test_dir}/_expected_head.html`, 'utf-8'),\n\t\t\t\t\t{}\n\t\t\t\t);\n\t\t\t} catch (error: any) {\n\t\t\t\tif (should_update_expected()) {\n\t\t\t\t\tfs.writeFileSync(`${test_dir}/_expected_head.html`, head);\n\t\t\t\t\tconsole.log(`Updated ${test_dir}/_expected_head.html.`);\n\t\t\t\t\terror.message += '\\n' + `${test_dir}/main.svelte`;\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (config.script_hashes !== undefined) {\n\t\t\tassert.deepEqual(hashes.script, config.script_hashes);\n\t\t}\n\t}\n);\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/signals/test.ts",
    "content": "import { describe, assert, it } from 'vitest';\nimport { flushSync } from '../../src/index-client';\nimport * as $ from '../../src/internal/client/runtime';\nimport { push, pop } from '../../src/internal/client/context';\nimport {\n\teffect,\n\teffect_root,\n\trender_effect,\n\tuser_effect,\n\tuser_pre_effect\n} from '../../src/internal/client/reactivity/effects';\nimport { state, set, update, update_pre } from '../../src/internal/client/reactivity/sources';\nimport type { Derived, Effect, Source, Value } from '../../src/internal/client/types';\nimport { proxy } from '../../src/internal/client/proxy';\nimport { derived } from '../../src/internal/client/reactivity/deriveds';\nimport { snapshot } from '../../src/internal/shared/clone.js';\nimport { SvelteSet } from '../../src/reactivity/set';\nimport { DESTROYED } from '../../src/internal/client/constants';\nimport { noop } from 'svelte/internal/client';\nimport { disable_async_mode_flag, enable_async_mode_flag } from '../../src/internal/flags';\n\n/**\n * @param runes runes mode\n * @param fn A function that returns a function because we first need to set up all the signals\n * \t\t\t and then execute the test in order to simulate a real component\n */\nfunction run_test(runes: boolean, fn: (runes: boolean) => () => void) {\n\treturn () => {\n\t\t// Create a component context to test runes vs legacy mode\n\t\tpush({}, runes);\n\t\t// Create a render context so that effect validations etc don't fail\n\t\tlet execute: any;\n\t\tconst destroy = effect_root(() => {\n\t\t\texecute = fn(runes);\n\t\t});\n\t\tpop();\n\t\texecute();\n\t\tdestroy();\n\t};\n}\n\nfunction test(text: string, fn: (runes: boolean) => any) {\n\tit(`${text} (legacy mode)`, run_test(false, fn));\n\tit(`${text} (runes mode)`, run_test(true, fn));\n}\n\ntest.only = (text: string, fn: (runes: boolean) => any) => {\n\tit.only(`${text} (legacy mode)`, run_test(false, fn));\n\tit.only(`${text} (runes mode)`, run_test(true, fn));\n};\n\ntest.skip = (text: string, fn: (runes: boolean) => any) => {\n\tit.skip(`${text} (legacy mode)`, run_test(false, fn));\n\tit.skip(`${text} (runes mode)`, run_test(true, fn));\n};\n\ndescribe('signals', () => {\n\ttest('effect with state and derived in it', () => {\n\t\tconst log: string[] = [];\n\n\t\tlet count = state(0);\n\t\tlet double = derived(() => $.get(count) * 2);\n\t\teffect(() => {\n\t\t\tlog.push(`${$.get(count)}:${$.get(double)}`);\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\n\t\t\tassert.deepEqual(log, ['0:0', '1:2', '2:4']);\n\t\t};\n\t});\n\n\ttest('multiple effects with state and derived in it #1', () => {\n\t\tconst log: string[] = [];\n\n\t\tlet count = state(0);\n\t\tlet double = derived(() => $.get(count) * 2);\n\n\t\teffect(() => {\n\t\t\tlog.push(`A:${$.get(count)}:${$.get(double)}`);\n\t\t});\n\t\teffect(() => {\n\t\t\tlog.push(`B:${$.get(double)}`);\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\n\t\t\tassert.deepEqual(log, ['A:0:0', 'B:0', 'A:1:2', 'B:2', 'A:2:4', 'B:4']);\n\t\t};\n\t});\n\n\ttest('multiple effects with state and derived in it #2', () => {\n\t\tconst log: string[] = [];\n\n\t\tlet count = state(0);\n\t\tlet double = derived(() => $.get(count) * 2);\n\n\t\teffect(() => {\n\t\t\tlog.push(`A:${$.get(double)}`);\n\t\t});\n\t\teffect(() => {\n\t\t\tlog.push(`B:${$.get(count)}:${$.get(double)}`);\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\n\t\t\tassert.deepEqual(log, ['A:0', 'B:0:0', 'A:2', 'B:1:2', 'A:4', 'B:2:4']);\n\t\t};\n\t});\n\n\ttest('unowned deriveds are not added as reactions but trigger effects', () => {\n\t\tvar obj = state<any>(undefined);\n\n\t\tclass C1 {\n\t\t\t#v = state(0);\n\t\t\tget v() {\n\t\t\t\treturn $.get(this.#v);\n\t\t\t}\n\t\t\tset v(v: number) {\n\t\t\t\tset(this.#v, v);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tlet d = derived(() => $.get(obj)?.v || '-');\n\n\t\t\tconst log: number[] = [];\n\t\t\tassert.equal($.get(d), '-');\n\n\t\t\tlet destroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tlog.push($.get(d));\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tset(obj, new C1());\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(d), '-');\n\t\t\t$.get(obj).v = 1;\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(d), 1);\n\t\t\tassert.deepEqual(log, ['-', 1]);\n\t\t\tdestroy();\n\t\t\t// ensure we're not leaking reactions\n\t\t\tassert.equal(obj.reactions, null);\n\t\t\tassert.equal(d.reactions, null);\n\t\t};\n\t});\n\n\ttest('derived from state', () => {\n\t\tconst log: number[] = [];\n\n\t\tlet count = state(0);\n\t\tlet double = derived(() => $.get(count) * 2);\n\n\t\teffect(() => {\n\t\t\tlog.push($.get(double));\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\n\t\t\tassert.deepEqual(log, [0, 2, 4]);\n\t\t};\n\t});\n\n\ttest('derived from derived', () => {\n\t\tconst log: number[] = [];\n\n\t\tlet count = state(0);\n\t\tlet double = derived(() => $.get(count) * 2);\n\t\tlet quadruple = derived(() => $.get(double) * 2);\n\n\t\teffect(() => {\n\t\t\tlog.push($.get(quadruple));\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\n\t\t\tassert.deepEqual(log, [0, 4, 8]);\n\t\t};\n\t});\n\n\ttest('state reset', () => {\n\t\tconst log: number[] = [];\n\n\t\tlet count = state(0);\n\t\tlet double = derived(() => $.get(count) * 2);\n\n\t\teffect(() => {\n\t\t\tlog.push($.get(double));\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tlog.length = 0;\n\n\t\t\tset(count, 1);\n\t\t\tset(count, 0);\n\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, []);\n\n\t\t\tset(count, 1);\n\t\t\t$.get(double);\n\t\t\tset(count, 0);\n\n\t\t\tflushSync();\n\n\t\t\t// TODO: in an ideal world, the effect wouldn't fire here\n\t\t\tassert.deepEqual(log, [0]);\n\t\t};\n\t});\n\n\ttest('https://perf.js.hyoo.ru/#!bench=9h2as6_u0mfnn', () => {\n\t\tlet res: number[] = [];\n\n\t\tconst numbers = Array.from({ length: 2 }, (_, i) => i);\n\t\tconst fib = (n: number): number => (n < 2 ? 1 : fib(n - 1) + fib(n - 2));\n\t\tconst hard = (n: number, l: string) => n + fib(16);\n\n\t\tconst A = state(0);\n\t\tconst B = state(0);\n\t\tconst C = derived(() => ($.get(A) % 2) + ($.get(B) % 2));\n\t\tconst D = derived(() => numbers.map((i) => i + ($.get(A) % 2) - ($.get(B) % 2)));\n\t\tconst E = derived(() => hard($.get(C) + $.get(A) + $.get(D)[0]!, 'E'));\n\t\tconst F = derived(() => hard($.get(D)[0]! && $.get(B), 'F'));\n\t\tconst G = derived(() => $.get(C) + ($.get(C) || $.get(E) % 2) + $.get(D)[0]! + $.get(F));\n\t\teffect(() => {\n\t\t\tres.push(hard($.get(G), 'H'));\n\t\t});\n\t\teffect(() => {\n\t\t\tres.push($.get(G));\n\t\t});\n\t\teffect(() => {\n\t\t\tres.push(hard($.get(F), 'J'));\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\n\t\t\tlet i = 2;\n\t\t\twhile (--i) {\n\t\t\t\tres.length = 0;\n\t\t\t\tset(B, 1);\n\t\t\t\tset(A, 1 + i * 2);\n\t\t\t\tflushSync();\n\n\t\t\t\tset(A, 2 + i * 2);\n\t\t\t\tset(B, 2);\n\t\t\t\tflushSync();\n\n\t\t\t\tassert.equal(res.length, 4);\n\t\t\t\tassert.deepEqual(res, [3198, 1601, 3195, 1598]);\n\t\t\t}\n\t\t};\n\t});\n\n\ttest('https://perf.js.hyoo.ru/#!bench=9h2as6_u0mfnn #2', () => {\n\t\tlet res: number[] = [];\n\n\t\tconst numbers = Array.from({ length: 2 }, (_, i) => i);\n\t\tconst fib = (n: number): number => (n < 2 ? 1 : fib(n - 1) + fib(n - 2));\n\t\tconst hard = (n: number, l: string) => n + fib(16);\n\n\t\tconst A = state(0);\n\t\tconst B = state(0);\n\n\t\treturn () => {\n\t\t\tconst C = derived(() => ($.get(A) % 2) + ($.get(B) % 2));\n\t\t\tconst D = derived(() => numbers.map((i) => i + ($.get(A) % 2) - ($.get(B) % 2)));\n\t\t\tconst E = derived(() => hard($.get(C) + $.get(A) + $.get(D)[0]!, 'E'));\n\t\t\tconst F = derived(() => hard($.get(D)[0]! && $.get(B), 'F'));\n\t\t\tconst G = derived(() => $.get(C) + ($.get(C) || $.get(E) % 2) + $.get(D)[0]! + $.get(F));\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\teffect(() => {\n\t\t\t\t\tres.push(hard($.get(G), 'H'));\n\t\t\t\t});\n\t\t\t\teffect(() => {\n\t\t\t\t\tres.push($.get(G));\n\t\t\t\t});\n\t\t\t\teffect(() => {\n\t\t\t\t\tres.push(hard($.get(F), 'J'));\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tflushSync();\n\n\t\t\tlet i = 2;\n\t\t\twhile (--i) {\n\t\t\t\tres.length = 0;\n\t\t\t\tset(B, 1);\n\t\t\t\tset(A, 1 + i * 2);\n\t\t\t\tflushSync();\n\n\t\t\t\tset(A, 2 + i * 2);\n\t\t\t\tset(B, 2);\n\t\t\t\tflushSync();\n\n\t\t\t\tassert.equal(res.length, 4);\n\t\t\t\tassert.deepEqual(res, [3198, 1601, 3195, 1598]);\n\t\t\t}\n\n\t\t\tdestroy();\n\t\t\tassert(A.reactions === null);\n\t\t\tassert(B.reactions === null);\n\t\t};\n\t});\n\n\ttest('effects correctly handle unowned derived values that do not change', () => {\n\t\tconst log: number[] = [];\n\n\t\treturn () => {\n\t\t\tlet count = state(0);\n\t\t\tconst read = () => {\n\t\t\t\tconst x = derived(() => ({ count: $.get(count) }));\n\t\t\t\treturn $.get(x);\n\t\t\t};\n\t\t\tconst derivedCount = derived(() => read().count);\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\tuser_effect(() => {\n\t\t\t\t\tlog.push($.get(derivedCount));\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tflushSync(() => set(count, 1));\n\t\t\t// Ensure we're not leaking consumers\n\t\t\tassert.deepEqual(count.reactions?.length, 1);\n\t\t\tflushSync(() => set(count, 2));\n\t\t\t// Ensure we're not leaking consumers\n\t\t\tassert.deepEqual(count.reactions?.length, 1);\n\t\t\tflushSync(() => set(count, 3));\n\t\t\t// Ensure we're not leaking consumers\n\t\t\tassert.deepEqual(count.reactions?.length, 1);\n\t\t\tassert.deepEqual(log, [0, 1, 2, 3]);\n\n\t\t\tdestroy();\n\t\t};\n\t});\n\n\ttest('correctly cleanup unowned nested derived values', () => {\n\t\treturn () => {\n\t\t\tconst nested: Derived<string>[] = [];\n\n\t\t\tconst a = state(0);\n\t\t\tconst b = state(0);\n\t\t\tlet c: any;\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\tc = derived(() => {\n\t\t\t\t\tconst a_2 = derived(() => $.get(a) + '!');\n\t\t\t\t\tconst b_2 = derived(() => $.get(b) + '?');\n\t\t\t\t\tnested.push(a_2, b_2);\n\n\t\t\t\t\treturn { a: $.get(a_2), b: $.get(b_2) };\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t$.get(c);\n\n\t\t\tflushSync(() => set(a, 1));\n\n\t\t\t$.get(c);\n\n\t\t\tflushSync(() => set(b, 1));\n\n\t\t\t$.get(c);\n\n\t\t\tdestroy();\n\n\t\t\tassert.equal(a.reactions, null);\n\t\t\tassert.equal(b.reactions, null);\n\t\t};\n\t});\n\n\t// outside of test function so that they are unowned signals\n\tlet count = state(0);\n\tlet calc = derived(() => {\n\t\tif ($.get(count) >= 2) {\n\t\t\treturn 'limit';\n\t\t}\n\t\treturn $.get(count) * 2;\n\t});\n\n\ttest('effect with derived using unowned derived every time', () => {\n\t\tconst log: Array<number | string> = [];\n\n\t\tconst destroy = effect_root(() => {\n\t\t\tuser_effect(() => {\n\t\t\t\tlog.push($.get(calc));\n\t\t\t\t$.get(calc);\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\t\t\tflushSync(() => set(count, 3));\n\t\t\tflushSync(() => set(count, 4));\n\t\t\tflushSync(() => set(count, 0));\n\t\t\t// Ensure we're not leaking consumers\n\t\t\tassert.deepEqual(count.reactions?.length, 1);\n\t\t\tassert.deepEqual(calc.reactions?.length, 1);\n\t\t\tassert.deepEqual(log, [0, 2, 'limit', 0]);\n\t\t\tdestroy();\n\t\t\t// Ensure we're not leaking consumers\n\t\t\tassert.deepEqual(count.reactions, null);\n\t\t\tassert.deepEqual(calc.reactions, null);\n\t\t};\n\t});\n\n\tlet no_deps = derived(() => {\n\t\treturn [];\n\t});\n\n\ttest('two effects with an unowned derived that has no dependencies', () => {\n\t\tconst log: Array<Array<any>> = [];\n\n\t\trender_effect(() => {\n\t\t\tlog.push($.get(no_deps));\n\t\t});\n\n\t\trender_effect(() => {\n\t\t\tlog.push($.get(no_deps));\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(log, [[], []]);\n\t\t};\n\t});\n\n\ttest('two effects with an unowned derived that has some dependencies', () => {\n\t\tconst log: Array<Array<any>> = [];\n\n\t\treturn () => {\n\t\t\tlet some_state = state({});\n\t\t\tlet some_deps = derived(() => {\n\t\t\t\treturn [$.get(some_state)];\n\t\t\t});\n\t\t\tlet destroy2: any;\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\t$.untrack(() => {\n\t\t\t\t\t\tlog.push($.get(some_deps));\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tdestroy2 = effect_root(() => {\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tlog.push($.get(some_deps));\n\t\t\t\t\t});\n\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tlog.push($.get(some_deps));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tset(some_state, {});\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [[{}], [{}], [{}], [{}], [{}]]);\n\n\t\t\tdestroy2();\n\n\t\t\tset(some_state, {});\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [[{}], [{}], [{}], [{}], [{}]]);\n\n\t\t\tlog.length = 0;\n\n\t\t\tconst destroy3 = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\t$.untrack(() => {\n\t\t\t\t\t\tlog.push($.get(some_deps));\n\t\t\t\t\t});\n\t\t\t\t\tlog.push($.get(some_deps));\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tset(some_state, {});\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [[{}], [{}], [{}], [{}]]);\n\n\t\t\tdestroy3();\n\n\t\t\tassert(some_state.reactions === null);\n\n\t\t\tdestroy();\n\n\t\t\tassert(some_state.reactions === null);\n\t\t};\n\t});\n\n\ttest('schedules rerun when writing to signal before reading it', (runes) => {\n\t\tif (!runes) return () => {};\n\n\t\tconst error = console.error;\n\t\tconsole.error = noop;\n\n\t\tconst value = state({ count: 0 });\n\t\tuser_effect(() => {\n\t\t\tset(value, { count: 0 });\n\t\t\t$.get(value);\n\t\t});\n\n\t\treturn () => {\n\t\t\tlet errored = false;\n\t\t\ttry {\n\t\t\t\tflushSync();\n\t\t\t} catch (e: any) {\n\t\t\t\tassert.include(e.message, 'effect_update_depth_exceeded');\n\t\t\t\terrored = true;\n\t\t\t} finally {\n\t\t\t\tassert.equal(errored, true);\n\t\t\t\tconsole.error = error;\n\t\t\t}\n\t\t};\n\t});\n\n\ttest('schedules rerun when updating deeply nested value', (runes) => {\n\t\tif (!runes) return () => {};\n\n\t\tconst error = console.error;\n\t\tconsole.error = noop;\n\n\t\tconst value = proxy({ a: { b: { c: 0 } } });\n\t\tuser_effect(() => {\n\t\t\tvalue.a.b.c += 1;\n\t\t});\n\n\t\treturn () => {\n\t\t\tlet errored = false;\n\t\t\ttry {\n\t\t\t\tflushSync();\n\t\t\t} catch (e: any) {\n\t\t\t\tassert.include(e.message, 'effect_update_depth_exceeded');\n\t\t\t\terrored = true;\n\t\t\t} finally {\n\t\t\t\tassert.equal(errored, true);\n\t\t\t\tconsole.error = error;\n\t\t\t}\n\t\t};\n\t});\n\n\ttest.skip('schedules rerun when writing to signal before reading it', (runes) => {\n\t\tif (!runes) return () => {};\n\n\t\tconst error = console.error;\n\t\tconsole.error = noop;\n\n\t\tconst value = proxy({ arr: [] });\n\t\tuser_effect(() => {\n\t\t\tvalue.arr = [];\n\t\t\tvalue.arr;\n\t\t});\n\n\t\treturn () => {\n\t\t\tlet errored = false;\n\t\t\ttry {\n\t\t\t\tflushSync();\n\t\t\t} catch (e: any) {\n\t\t\t\tassert.include(e.message, 'effect_update_depth_exceeded');\n\t\t\t\terrored = true;\n\t\t\t} finally {\n\t\t\t\tassert.equal(errored, true);\n\t\t\t\tconsole.error = error;\n\t\t\t}\n\t\t};\n\t});\n\n\ttest('schedules rerun when writing to signal before reading it from derived', (runes) => {\n\t\tif (!runes) return () => {};\n\t\tlet log: any[] = [];\n\n\t\tconst value = state(1);\n\t\tconst double = derived(() => $.get(value) * 2);\n\n\t\tuser_effect(() => {\n\t\t\tset(value, 10);\n\t\t\tlog.push($.get(double));\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(log, [20]);\n\t\t};\n\t});\n\n\ttest('schedules rerun when writing to signal after reading it from derived', (runes) => {\n\t\tif (!runes) return () => {};\n\t\tlet log: any[] = [];\n\n\t\tconst value = state(1);\n\t\tconst double = derived(() => $.get(value) * 2);\n\n\t\tuser_effect(() => {\n\t\t\tlog.push($.get(double));\n\t\t\tset(value, 10);\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(log, [2, 20]);\n\t\t};\n\t});\n\n\ttest('effect teardown is removed on re-run', () => {\n\t\tconst count = state(0);\n\t\tlet first = true;\n\t\tlet teardown = 0;\n\n\t\tuser_effect(() => {\n\t\t\t$.get(count);\n\t\t\tif (first) {\n\t\t\t\tfirst = false;\n\t\t\t\treturn () => {\n\t\t\t\t\tteardown += 1;\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => set(count, 1));\n\t\t\tflushSync(() => set(count, 2));\n\t\t\tassert.equal(teardown, 1);\n\t\t};\n\t});\n\n\ttest('creating effects within a derived correctly handles ownership', () => {\n\t\tconst log: Array<number | string> = [];\n\t\tlet a: Value<unknown>;\n\t\tlet inner: Value<string | number>;\n\t\tlet outer: Value<string | number>;\n\n\t\tconst destroy = effect_root(() => {\n\t\t\tinner = state(0);\n\t\t\touter = state(0);\n\n\t\t\trender_effect(() => {\n\t\t\t\ta = derived(() => {\n\t\t\t\t\tlog.push('outer', $.get(outer));\n\t\t\t\t\teffect(() => {\n\t\t\t\t\t\tlog.push('inner', $.get(inner));\n\t\t\t\t\t});\n\t\t\t\t\treturn $.get(outer);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync(() => {\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t\tassert.deepEqual(log, ['outer', 0, 'inner', 0]);\n\t\t\tlog.length = 0;\n\t\t\tflushSync(() => {\n\t\t\t\tset(inner, 1);\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t\tassert.deepEqual(log, ['inner', 1]);\n\t\t\tlog.length = 0;\n\t\t\tflushSync(() => {\n\t\t\t\tset(outer, 1);\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t\tassert.deepEqual(log, ['outer', 1, 'inner', 1]);\n\t\t\tlog.length = 0;\n\t\t\tflushSync(() => {\n\t\t\t\tset(inner, 2);\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t\tassert.deepEqual(log, ['inner', 2]);\n\t\t\tdestroy();\n\t\t};\n\t});\n\n\ttest('owned deriveds correctly cleanup when no longer connected to graph', () => {\n\t\tlet a: Derived<unknown>;\n\t\tlet s = state(0);\n\n\t\tconst destroy = effect_root(() => {\n\t\t\trender_effect(() => {\n\t\t\t\ta = derived(() => {\n\t\t\t\t\t$.get(s);\n\t\t\t\t});\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.equal(a?.deps?.length, 1);\n\t\t\tassert.equal(s?.reactions?.length, 1);\n\t\t\tdestroy();\n\t\t\tassert.equal(s?.reactions, null);\n\t\t};\n\t});\n\n\ttest('mixed nested deriveds correctly cleanup when no longer connected to graph #1', () => {\n\t\tlet a: Derived<unknown>;\n\t\tlet b: Derived<unknown>;\n\t\tlet s = state(0);\n\n\t\tconst destroy = effect_root(() => {\n\t\t\trender_effect(() => {\n\t\t\t\ta = derived(() => {\n\t\t\t\t\tb = derived(() => {\n\t\t\t\t\t\t$.get(s);\n\t\t\t\t\t});\n\t\t\t\t\t$.untrack(() => {\n\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t});\n\t\t\t\t\t$.get(s);\n\t\t\t\t});\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.equal(a?.deps?.length, 1);\n\t\t\tassert.equal(s?.reactions?.length, 1);\n\t\t\tdestroy();\n\t\t\tassert.equal(s?.reactions, null);\n\t\t};\n\t});\n\n\ttest('mixed nested deriveds correctly cleanup when no longer connected to graph #2', () => {\n\t\tlet a: Derived<unknown>;\n\t\tlet b: Derived<unknown>;\n\t\tlet s = state(0);\n\n\t\tconst destroy = effect_root(() => {\n\t\t\trender_effect(() => {\n\t\t\t\ta = derived(() => {\n\t\t\t\t\tb = derived(() => {\n\t\t\t\t\t\t$.get(s);\n\t\t\t\t\t});\n\t\t\t\t\teffect_root(() => {\n\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t});\n\t\t\t\t\t$.get(s);\n\t\t\t\t});\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.equal(a?.deps?.length, 1);\n\t\t\tassert.equal(s?.reactions?.length, 1);\n\t\t\tdestroy();\n\t\t\tassert.equal(s?.reactions, null);\n\t\t};\n\t});\n\n\ttest('mixed nested deriveds correctly cleanup when no longer connected to graph #3', () => {\n\t\tlet a: Derived<unknown>;\n\t\tlet b: Derived<unknown>;\n\t\tlet s = state(0);\n\t\tlet logs: any[] = [];\n\n\t\tconst destroy = effect_root(() => {\n\t\t\trender_effect(() => {\n\t\t\t\ta = derived(() => {\n\t\t\t\t\tb = derived(() => {\n\t\t\t\t\t\treturn $.get(s);\n\t\t\t\t\t});\n\t\t\t\t\teffect_root(() => {\n\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t});\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tlogs.push($.get(b));\n\t\t\t\t\t});\n\t\t\t\t\t$.get(s);\n\t\t\t\t});\n\t\t\t\t$.get(a);\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.equal(a?.deps?.length, 1);\n\t\t\tassert.equal(s?.reactions?.length, 2);\n\n\t\t\tset(s, 1);\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(logs, [0, 1]);\n\n\t\t\tdestroy();\n\t\t\tassert.equal(s?.reactions, null);\n\t\t};\n\t});\n\n\ttest('deriveds update upon reconnection #1', () => {\n\t\tlet a = state(false);\n\t\tlet b = state(false);\n\n\t\tlet c = derived(() => $.get(a));\n\t\tlet d = derived(() => $.get(c));\n\n\t\tlet last: Record<string, boolean | null> = {};\n\n\t\trender_effect(() => {\n\t\t\tlast = {\n\t\t\t\ta: $.get(a),\n\t\t\t\tb: $.get(b),\n\t\t\t\tc: $.get(c),\n\t\t\t\td: $.get(a) || $.get(b) ? $.get(d) : null\n\t\t\t};\n\t\t});\n\n\t\treturn () => {\n\t\t\tassert.deepEqual(last, { a: false, b: false, c: false, d: null });\n\n\t\t\tflushSync(() => set(a, true));\n\t\t\tflushSync(() => set(b, true));\n\t\t\tassert.deepEqual(last, { a: true, b: true, c: true, d: true });\n\n\t\t\tflushSync(() => set(a, false));\n\t\t\tflushSync(() => set(b, false));\n\t\t\tassert.deepEqual(last, { a: false, b: false, c: false, d: null });\n\n\t\t\tflushSync(() => set(a, true));\n\t\t\tflushSync(() => set(b, true));\n\t\t\tassert.deepEqual(last, { a: true, b: true, c: true, d: true });\n\n\t\t\tflushSync(() => set(a, false));\n\t\t\tflushSync(() => set(b, false));\n\t\t\tassert.deepEqual(last, { a: false, b: false, c: false, d: null });\n\n\t\t\tflushSync(() => set(b, true));\n\t\t\tassert.deepEqual(last, { a: false, b: true, c: false, d: false });\n\t\t};\n\t});\n\n\ttest('deriveds update upon reconnection #2', () => {\n\t\tlet a = state(false);\n\t\tlet b = state(false);\n\t\tlet c = state(false);\n\n\t\tlet d = derived(() => $.get(a) || $.get(b));\n\n\t\tlet branch = '';\n\n\t\trender_effect(() => {\n\t\t\tif ($.get(c) && !$.get(d)) {\n\t\t\t\tbranch = 'if';\n\t\t\t} else {\n\t\t\t\tbranch = 'else';\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tassert.deepEqual(branch, 'else');\n\n\t\t\tflushSync(() => set(c, true));\n\t\t\tassert.deepEqual(branch, 'if');\n\n\t\t\tflushSync(() => set(a, true));\n\t\t\tassert.deepEqual(branch, 'else');\n\n\t\t\tset(a, false);\n\t\t\tset(b, false);\n\t\t\tset(c, false);\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(branch, 'else');\n\n\t\t\tflushSync(() => set(c, true));\n\t\t\tassert.deepEqual(branch, 'if');\n\n\t\t\tflushSync(() => set(b, true));\n\t\t\tassert.deepEqual(branch, 'else');\n\n\t\t\tset(a, false);\n\t\t\tset(b, false);\n\t\t\tset(c, false);\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(branch, 'else');\n\n\t\t\tflushSync(() => set(c, true));\n\t\t\tassert.deepEqual(branch, 'if');\n\t\t};\n\t});\n\n\ttest('deriveds update upon reconnection #3', () => {\n\t\tlet a = state(false);\n\t\tlet b = state(false);\n\n\t\tlet c = derived(() => $.get(a) || $.get(b));\n\t\tlet d = derived(() => $.get(c));\n\t\tlet e = derived(() => $.get(d));\n\n\t\treturn () => {\n\t\t\tconst log: string[] = [];\n\t\t\tlet destroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\t$.get(e);\n\t\t\t\t\tlog.push('init');\n\t\t\t\t});\n\t\t\t});\n\t\t\tdestroy();\n\n\t\t\tdestroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\t$.get(e);\n\t\t\t\t\tlog.push('update');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tassert.deepEqual(log, ['init', 'update']);\n\n\t\t\tset(a, true);\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, ['init', 'update', 'update']);\n\t\t};\n\t});\n\n\ttest('unowned deriveds are not added as reactions', () => {\n\t\tvar count = state(0);\n\n\t\tfunction create_derived() {\n\t\t\treturn derived(() => $.get(count) * 2);\n\t\t}\n\n\t\treturn () => {\n\t\t\tlet d = create_derived();\n\t\t\tassert.equal($.get(d), 0);\n\t\t\tassert.equal(count.reactions, null);\n\t\t\tassert.equal(d.deps?.length, 1);\n\n\t\t\tset(count, 1);\n\t\t\tassert.equal($.get(d), 2);\n\t\t\tassert.equal(count.reactions, null);\n\t\t\tassert.equal(d.deps?.length, 1);\n\n\t\t\td = create_derived();\n\t\t\tassert.equal($.get(d), 2);\n\t\t\tassert.equal(count.reactions, null);\n\t\t\tassert.equal(d.deps?.length, 1);\n\t\t};\n\t});\n\n\ttest('unowned deriveds are correctly connected and disconnected from the graph', () => {\n\t\tvar count = state(0);\n\n\t\tfunction create_derived() {\n\t\t\treturn derived(() => $.get(count) * 2);\n\t\t}\n\n\t\treturn () => {\n\t\t\tlet d = create_derived();\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tassert.equal($.get(d), 0);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tassert.equal($.get(d), 0);\n\t\t\tassert.equal(count.reactions?.length, 1);\n\t\t\tassert.equal(d.deps?.length, 1);\n\n\t\t\tset(count, 1);\n\t\t\tassert.equal($.get(d), 2);\n\t\t\tassert.equal(count.reactions?.length, 1);\n\t\t\tassert.equal(d.deps?.length, 1);\n\n\t\t\tdestroy();\n\n\t\t\tassert.equal(count.reactions, null);\n\n\t\t\tset(count, 2);\n\t\t\tassert.equal($.get(d), 4);\n\t\t\tassert.equal(count.reactions, null);\n\t\t\tassert.equal(d.deps?.length, 1);\n\t\t};\n\t});\n\n\ttest('unowned deriveds dependencies are correctly de-duped', () => {\n\t\treturn () => {\n\t\t\tlet a = state(0);\n\t\t\tlet b = state(true);\n\t\t\tlet c = derived(() => $.get(a));\n\t\t\tlet d = derived(() => ($.get(b) ? 1 : $.get(a) + $.get(c) + $.get(a)));\n\n\t\t\t$.get(d);\n\n\t\t\tassert.equal(d.deps?.length, 1);\n\n\t\t\t$.get(d);\n\n\t\t\tset(a, 1);\n\t\t\tset(b, false);\n\n\t\t\t$.get(d);\n\n\t\t\tassert.equal(d.deps?.length, 3);\n\t\t};\n\t});\n\n\ttest('unowned deriveds correctly update', () => {\n\t\treturn () => {\n\t\t\tconst arr1 = proxy<{ a: number }[]>([]);\n\t\t\tconst arr2 = proxy([]);\n\t\t\tconst combined = derived(() => [...arr1, ...arr2]);\n\t\t\tconst derived_length = derived(() => $.get(combined).length);\n\n\t\t\tassert.deepEqual($.get(combined), []);\n\t\t\tassert.equal($.get(derived_length), 0);\n\n\t\t\tarr1.push({ a: 1 });\n\n\t\t\tassert.deepEqual($.get(combined), [{ a: 1 }]);\n\t\t\tassert.equal($.get(derived_length), 1);\n\t\t};\n\t});\n\n\ttest('deriveds do not depend on state they own', () => {\n\t\treturn () => {\n\t\t\tlet s;\n\n\t\t\tconst d = derived(() => {\n\t\t\t\ts = state(0);\n\t\t\t\treturn $.get(s);\n\t\t\t});\n\n\t\t\tassert.equal($.get(d), 0);\n\n\t\t\tset(s!, 1);\n\t\t\tassert.equal($.get(d), 0);\n\t\t};\n\t});\n\n\ttest('effects do depend on state they own', (runes) => {\n\t\t// This behavior is important for use cases like a Resource class\n\t\t// which shares its instance between multiple effects and triggers\n\t\t// rerenders by self-invalidating its state.\n\t\tconst log: number[] = [];\n\n\t\tlet count: any;\n\n\t\tif (runes) {\n\t\t\t// We will make this the new default behavior once it's stable but until then\n\t\t\t// we need to keep the old behavior to not break existing code.\n\t\t\tenable_async_mode_flag();\n\t\t}\n\n\t\teffect(() => {\n\t\t\tif (!count || $.get<number>(count) < 2) {\n\t\t\t\tcount ||= state(0);\n\t\t\t\tlog.push($.get(count));\n\t\t\t\tset(count, $.get<number>(count) + 1);\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\ttry {\n\t\t\t\tflushSync();\n\t\t\t\tif (runes) {\n\t\t\t\t\tassert.deepEqual(log, [0, 1]);\n\t\t\t\t} else {\n\t\t\t\t\tassert.deepEqual(log, [0]);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tdisable_async_mode_flag();\n\t\t\t}\n\t\t};\n\t});\n\n\ttest('nested effects depend on state of upper effects', () => {\n\t\tconst logs: number[] = [];\n\t\tlet raw: Source<number>;\n\t\tlet proxied: { current: number };\n\n\t\tuser_effect(() => {\n\t\t\traw = state(0);\n\t\t\tproxied = proxy({ current: 0 });\n\n\t\t\t// We need those separate, else one working and rerunning the effect\n\t\t\t// could mask the other one not rerunning\n\t\t\tuser_effect(() => {\n\t\t\t\tlogs.push($.get(raw));\n\t\t\t});\n\n\t\t\tuser_effect(() => {\n\t\t\t\tlogs.push(proxied.current);\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tset(raw, $.get(raw) + 1);\n\t\t\tproxied.current += 1;\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(logs, [0, 0, 1, 1]);\n\t\t};\n\t});\n\n\ttest('nested effects depend on state of upper effects', () => {\n\t\tconst logs: number[] = [];\n\n\t\tuser_pre_effect(() => {\n\t\t\tconst raw = state(0);\n\t\t\tconst proxied = proxy({ current: 0 });\n\n\t\t\t// We need those separate, else one working and rerunning the effect\n\t\t\t// could mask the other one not rerunning\n\t\t\tuser_pre_effect(() => {\n\t\t\t\tlogs.push($.get(raw));\n\t\t\t});\n\n\t\t\tuser_pre_effect(() => {\n\t\t\t\tlogs.push(proxied.current);\n\t\t\t});\n\n\t\t\t// Important so that the updating effect is not running\n\t\t\t// together with the reading effects\n\t\t\tflushSync();\n\n\t\t\tuser_pre_effect(() => {\n\t\t\t\t$.untrack(() => {\n\t\t\t\t\tset(raw, $.get(raw) + 1);\n\t\t\t\t\tproxied.current += 1;\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.deepEqual(logs, [0, 0, 1, 1]);\n\t\t};\n\t});\n\n\ttest('proxy version state does not trigger self-dependency guard', () => {\n\t\treturn () => {\n\t\t\tconst s = proxy({ a: { b: 1 } });\n\t\t\tconst d = derived(() => snapshot(s));\n\n\t\t\tassert.deepEqual($.get(d), s);\n\t\t};\n\t});\n\n\ttest('set version state does not trigger self-dependency guard', () => {\n\t\treturn () => {\n\t\t\tconst set = new SvelteSet();\n\t\t\tconst d = derived(() => set.has('test'));\n\n\t\t\tset.add('test');\n\t\t\tassert.equal($.get(d), true);\n\t\t};\n\t});\n\n\ttest('deriveds read inside the root/branches are cleaned up', () => {\n\t\treturn () => {\n\t\t\tconst a = state(0);\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\tconst b = derived(() => $.get(a));\n\t\t\t\t$.get(b);\n\t\t\t});\n\n\t\t\tdestroy();\n\n\t\t\tassert.deepEqual(a.reactions, null);\n\t\t};\n\t});\n\n\ttest('deriveds containing effects work correctly', () => {\n\t\treturn () => {\n\t\t\tlet a = render_effect(() => {});\n\t\t\tlet b = state(0);\n\t\t\tlet c;\n\t\t\tlet effects: Effect[] = [];\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\ta = render_effect(() => {\n\t\t\t\t\tc = derived(() => {\n\t\t\t\t\t\teffects.push(\n\t\t\t\t\t\t\teffect(() => {\n\t\t\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t});\n\t\t\t\t\t$.get(c);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tassert.equal(c!.effects?.length, 1);\n\t\t\tassert.equal(a.first, a.last);\n\n\t\t\tset(b, 1);\n\n\t\t\tflushSync();\n\n\t\t\tassert.equal(c!.effects?.length, 1);\n\t\t\tassert.equal(a.first, a.last);\n\n\t\t\tdestroy();\n\n\t\t\tassert.equal(a.first, null);\n\n\t\t\tassert.equal(effects.length, 2);\n\t\t\tassert.equal((effects[0].f & DESTROYED) !== 0, true);\n\t\t\tassert.equal((effects[1].f & DESTROYED) !== 0, true);\n\t\t};\n\t});\n\n\ttest(\"deriveds set after they are DIRTY doesn't get updated on get\", () => {\n\t\treturn () => {\n\t\t\tconst a = state(0);\n\t\t\tconst b = derived(() => $.get(a));\n\n\t\t\tset(b, 1);\n\t\t\tassert.equal($.get(b), 1);\n\n\t\t\tset(a, 2);\n\t\t\tassert.equal($.get(b), 2);\n\t\t\tset(b, 3);\n\n\t\t\tassert.equal($.get(b), 3);\n\t\t};\n\t});\n\n\ttest(\"unowned deriveds set after they are DIRTY doesn't get updated on get\", () => {\n\t\treturn () => {\n\t\t\tconst a = state(0);\n\t\t\tconst b = derived(() => $.get(a));\n\t\t\tconst c = derived(() => $.get(b));\n\n\t\t\tset(b, 1);\n\t\t\tassert.equal($.get(c), 1);\n\n\t\t\tset(a, 2);\n\n\t\t\tassert.equal($.get(b), 2);\n\t\t\tassert.equal($.get(c), 2);\n\t\t};\n\t});\n\n\ttest('deriveds containing effects work correctly when used with untrack', () => {\n\t\treturn () => {\n\t\t\tlet a = render_effect(() => {});\n\t\t\tlet b = state(0);\n\t\t\tlet c;\n\t\t\tlet effects: Effect[] = [];\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\ta = render_effect(() => {\n\t\t\t\t\tc = derived(() => {\n\t\t\t\t\t\t$.untrack(() => {\n\t\t\t\t\t\t\teffects.push(\n\t\t\t\t\t\t\t\teffect(() => {\n\t\t\t\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$.get(b);\n\t\t\t\t\t});\n\t\t\t\t\t$.get(c);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tassert.equal(c!.effects?.length, 1);\n\t\t\tassert.equal(a.first, a.last);\n\n\t\t\tset(b, 1);\n\n\t\t\tflushSync();\n\n\t\t\tassert.equal(c!.effects?.length, 1);\n\t\t\tassert.equal(a.first, a.last);\n\n\t\t\tdestroy();\n\n\t\t\tassert.equal(a.first, null);\n\n\t\t\tassert.equal(effects.length, 2);\n\t\t\tassert.equal((effects[0].f & DESTROYED) !== 0, true);\n\t\t\tassert.equal((effects[1].f & DESTROYED) !== 0, true);\n\t\t};\n\t});\n\n\ttest('bigint states update correctly', () => {\n\t\treturn () => {\n\t\t\tconst count = state(0n);\n\n\t\t\tassert.doesNotThrow(() => update(count));\n\t\t\tassert.equal($.get(count), 1n);\n\t\t\tassert.doesNotThrow(() => update(count, -1));\n\t\t\tassert.equal($.get(count), 0n);\n\n\t\t\tassert.doesNotThrow(() => update_pre(count));\n\t\t\tassert.equal($.get(count), 1n);\n\t\t\tassert.doesNotThrow(() => update_pre(count, -1));\n\t\t\tassert.equal($.get(count), 0n);\n\t\t};\n\t});\n\n\ttest('unowned deriveds correctly re-attach to their source', () => {\n\t\tconst log: any[] = [];\n\n\t\treturn () => {\n\t\t\tconst a = state(0);\n\t\t\tconst b = state(0);\n\t\t\tconst c = derived(() => {\n\t\t\t\t$.get(a);\n\t\t\t\treturn $.get(b);\n\t\t\t});\n\n\t\t\t$.get(c);\n\n\t\t\tset(a, 1);\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tlog.push($.get(c));\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tassert.deepEqual(log, [0]);\n\n\t\t\tset(b, 1);\n\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [0, 1]);\n\n\t\t\tdestroy();\n\t\t};\n\t});\n\n\ttest('unowned deriveds correctly update', () => {\n\t\tconst log: any[] = [];\n\n\t\treturn () => {\n\t\t\tconst a = state(0);\n\t\t\tconst b = state(0);\n\t\t\tconst c = derived(() => {\n\t\t\t\treturn $.get(a);\n\t\t\t});\n\t\t\tconst d = derived(() => {\n\t\t\t\treturn $.get(b);\n\t\t\t});\n\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\tconst e = derived(() => {\n\t\t\t\t\treturn $.get(c) === 1 && $.get(d) === 1;\n\t\t\t\t});\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tlog.push($.get(e));\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tassert.deepEqual(log, [false]);\n\n\t\t\tset(a, 1);\n\t\t\tset(b, 1);\n\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [false, true]);\n\n\t\t\tset(b, 9);\n\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [false, true, false]);\n\n\t\t\tdestroy();\n\t\t};\n\t});\n\n\ttest('derived whose original parent effect has been destroyed keeps updating', () => {\n\t\treturn () => {\n\t\t\tlet count: Source<number>;\n\t\t\tlet double: Derived<number>;\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tcount = state(0);\n\t\t\t\t\tdouble = derived(() => $.get(count) * 2);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(double!), 0);\n\n\t\t\tdestroy();\n\t\t\tflushSync();\n\n\t\t\tset(count!, 1);\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(double!), 2);\n\n\t\t\tset(count!, 2);\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(double!), 4);\n\t\t};\n\t});\n\n\ttest('derived when connected should add new dependency to its reaction even when read outside effect', () => {\n\t\tlet count_a = state(0);\n\t\tlet count_b = state(0);\n\t\tlet which = state(true);\n\t\tlet double = derived(() => ($.get(which) ? $.get(count_a) * 2 : $.get(count_b) * 2));\n\n\t\trender_effect(() => {\n\t\t\t$.get(double);\n\t\t});\n\n\t\treturn () => {\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(double!), 0);\n\n\t\t\tset(which, false);\n\t\t\t$.get(double); // read before render effect has a chance to rerun\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(double!), 0);\n\n\t\t\tset(count_b, 1);\n\t\t\tflushSync();\n\t\t\tassert.equal($.get(double!), 2);\n\t\t};\n\t});\n\n\ttest('$effect.root inside deriveds stay alive independently', () => {\n\t\tconst log: any[] = [];\n\t\tconst c = state(0);\n\t\tconst cleanup: any[] = [];\n\t\tconst inner_states: any[] = [];\n\n\t\tconst d = derived(() => {\n\t\t\tconst destroy = effect_root(() => {\n\t\t\t\tconst x = state(0);\n\t\t\t\tinner_states.push(x);\n\n\t\t\t\teffect(() => {\n\t\t\t\t\tlog.push('inner ' + $.get(x));\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlog.push('inner destroyed');\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcleanup.push(destroy);\n\n\t\t\treturn $.get(c);\n\t\t});\n\n\t\treturn () => {\n\t\t\tlog.push($.get(d));\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [0, 'inner 0']);\n\t\t\tlog.length = 0;\n\n\t\t\tset(inner_states[0], 1);\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, ['inner destroyed', 'inner 1']);\n\t\t\tlog.length = 0;\n\n\t\t\tset(c, 1);\n\t\t\tlog.push($.get(d));\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, [1, 'inner 0']);\n\t\t\tlog.length = 0;\n\n\t\t\tcleanup.forEach((fn) => fn());\n\t\t\tflushSync();\n\n\t\t\tassert.deepEqual(log, ['inner destroyed', 'inner destroyed']);\n\t\t};\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-const/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-const/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nvar root_1 = $.from_html(`<p> </p>`);\n\nexport default function Async_const($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tlet a;\n\t\t\tlet b;\n\n\t\t\tvar promises = $.run([\n\t\t\t\tasync () => a = (await $.save($.async_derived(async () => (await $.save(1))())))(),\n\t\t\t\t() => b = $.derived(() => $.get(a) + 1)\n\t\t\t]);\n\n\t\t\tvar p = root_1();\n\t\t\tvar text = $.child(p, true);\n\n\t\t\t$.reset(p);\n\t\t\t$.template_effect(() => $.set_text(text, $.get(b)), void 0, void 0, [promises[1]]);\n\t\t\t$.append($$anchor, p);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (true) $$render(consequent);\n\t\t});\n\t}\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-const/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_const($$renderer) {\n\tif (true) {\n\t\t$$renderer.push('<!--[0-->');\n\n\t\tlet a;\n\t\tlet b;\n\n\t\tvar promises = $$renderer.run([\n\t\t\tasync () => {\n\t\t\t\ta = (await $.save(1))();\n\t\t\t},\n\n\t\t\t() => {\n\t\t\t\tb = a + 1;\n\t\t\t}\n\t\t]);\n\n\t\t$$renderer.push(`<p>`);\n\t\t$$renderer.async([promises[1]], ($$renderer) => $$renderer.push(() => $.escape(b)));\n\t\t$$renderer.push(`</p>`);\n\t} else {\n\t\t$$renderer.push('<!--[-1-->');\n\t}\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-const/index.svelte",
    "content": "{#if true}\n\t{@const a = await 1}\n\t{@const b = a + 1}\n\n\t<p>{b}</p>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Async_each_fallback_hoisting($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.async(node, [], [() => Promise.resolve([])], (node, $$collection) => {\n\t\t$.each(\n\t\t\tnode,\n\t\t\t16,\n\t\t\t() => $.get($$collection),\n\t\t\t$.index,\n\t\t\t($$anchor, item) => {\n\t\t\t\t$.next();\n\n\t\t\t\tvar text = $.text();\n\n\t\t\t\t$.template_effect(($0) => $.set_text(text, $0), void 0, [() => Promise.reject('This should never be reached')]);\n\t\t\t\t$.append($$anchor, text);\n\t\t\t},\n\t\t\t($$anchor) => {\n\t\t\t\t$.next();\n\n\t\t\t\tvar text_1 = $.text();\n\n\t\t\t\t$.template_effect(($0) => $.set_text(text_1, $0), void 0, [() => Promise.resolve(4)]);\n\t\t\t\t$.append($$anchor, text_1);\n\t\t\t}\n\t\t);\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_each_fallback_hoisting($$renderer) {\n\t$$renderer.child_block(async ($$renderer) => {\n\t\tconst each_array = $.ensure_array_like((await $.save(Promise.resolve([])))());\n\n\t\tif (each_array.length !== 0) {\n\t\t\t$$renderer.push('<!--[-->');\n\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet item = each_array[$$index];\n\n\t\t\t\t$$renderer.push(`<!---->`);\n\t\t\t\t$$renderer.push(async () => $.escape(await Promise.reject('This should never be reached')));\n\t\t\t}\n\t\t} else {\n\t\t\t$$renderer.push('<!--[!-->');\n\t\t\t$$renderer.push(`<!---->`);\n\t\t\t$$renderer.push(async () => $.escape(await Promise.resolve(4)));\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/index.svelte",
    "content": "{#each await Promise.resolve([]) as item}\n  {await Promise.reject('This should never be reached')}\n{:else}\n  {await Promise.resolve(4)}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Async_each_hoisting($$anchor) {\n\tconst first = Promise.resolve(1);\n\tconst second = Promise.resolve(2);\n\tconst third = Promise.resolve(3);\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.async(node, [], [() => Promise.resolve([first, second, third])], (node, $$collection) => {\n\t\t$.each(node, 17, () => $.get($$collection), $.index, ($$anchor, item) => {\n\t\t\t$.next();\n\n\t\t\tvar text = $.text();\n\n\t\t\t$.template_effect(($0) => $.set_text(text, $0), void 0, [() => $.get(item)]);\n\t\t\t$.append($$anchor, text);\n\t\t});\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_each_hoisting($$renderer) {\n\tconst first = Promise.resolve(1);\n\tconst second = Promise.resolve(2);\n\tconst third = Promise.resolve(3);\n\n\t$$renderer.push(`<!--[-->`);\n\n\t$$renderer.child_block(async ($$renderer) => {\n\t\tconst each_array = $.ensure_array_like((await $.save(Promise.resolve([first, second, third])))());\n\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet item = each_array[$$index];\n\n\t\t\t$$renderer.push(`<!---->`);\n\t\t\t$$renderer.push(async () => $.escape(await item));\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-each-hoisting/index.svelte",
    "content": "<script lang=\"ts\">\n  const first = Promise.resolve(1);\n  const second = Promise.resolve(2);\n  const third = Promise.resolve(3);\n</script>\n\n{#each await Promise.resolve([first, second, third]) as item}\n  {await item}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Async_if_alternate_hoisting($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.async(node, [], [() => Promise.resolve(false)], (node, $$condition) => {\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar text = $.text();\n\n\t\t\t$.template_effect(($0) => $.set_text(text, $0), void 0, [() => Promise.reject('no no no')]);\n\t\t\t$.append($$anchor, text);\n\t\t};\n\n\t\tvar alternate = ($$anchor) => {\n\t\t\tvar text_1 = $.text();\n\n\t\t\t$.template_effect(($0) => $.set_text(text_1, $0), void 0, [() => Promise.resolve('yes yes yes')]);\n\t\t\t$.append($$anchor, text_1);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif ($.get($$condition)) $$render(consequent); else $$render(alternate, -1);\n\t\t});\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_if_alternate_hoisting($$renderer) {\n\t$$renderer.child_block(async ($$renderer) => {\n\t\tif ((await $.save(Promise.resolve(false)))()) {\n\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t$$renderer.push(async () => $.escape(await Promise.reject('no no no')));\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\t\t\t$$renderer.push(async () => $.escape(await Promise.resolve('yes yes yes')));\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/index.svelte",
    "content": "{#if await Promise.resolve(false)}\n  {await Promise.reject('no no no')}\n{:else}\n  {await Promise.resolve('yes yes yes')}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-chain/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-chain/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<!> <!> <!> <!> <!>`, 1);\n\nexport default function Async_if_chain($$anchor) {\n\tfunction complex1() {\n\t\treturn 1;\n\t}\n\n\tlet foo = true;\n\tvar blocking;\n\tvar $$promises = $.run([async () => blocking = await $.async_derived(() => foo)]);\n\tvar fragment = root();\n\tvar node = $.first_child(fragment);\n\n\t$.async(node, [$$promises[0]], void 0, (node) => {\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar text = $.text('foo');\n\n\t\t\t$.append($$anchor, text);\n\t\t};\n\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar text_1 = $.text('bar');\n\n\t\t\t$.append($$anchor, text_1);\n\t\t};\n\n\t\tvar alternate = ($$anchor) => {\n\t\t\tvar text_2 = $.text('else');\n\n\t\t\t$.append($$anchor, text_2);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (foo) $$render(consequent); else if (bar) $$render(consequent_1, 1); else $$render(alternate, -1);\n\t\t});\n\t});\n\n\tvar node_1 = $.sibling(node, 2);\n\n\t$.async(node_1, [$$promises[0]], [() => foo], (node_1, $$condition) => {\n\t\tvar consequent_2 = ($$anchor) => {\n\t\t\tvar text_3 = $.text('foo');\n\n\t\t\t$.append($$anchor, text_3);\n\t\t};\n\n\t\tvar consequent_3 = ($$anchor) => {\n\t\t\tvar text_4 = $.text('bar');\n\n\t\t\t$.append($$anchor, text_4);\n\t\t};\n\n\t\tvar alternate_2 = ($$anchor) => {\n\t\t\tvar fragment_1 = $.comment();\n\t\t\tvar node_2 = $.first_child(fragment_1);\n\n\t\t\t$.async(node_2, [], [() => baz], (node_2, $$condition) => {\n\t\t\t\tvar consequent_4 = ($$anchor) => {\n\t\t\t\t\tvar text_5 = $.text('baz');\n\n\t\t\t\t\t$.append($$anchor, text_5);\n\t\t\t\t};\n\n\t\t\t\tvar alternate_1 = ($$anchor) => {\n\t\t\t\t\tvar text_6 = $.text('else');\n\n\t\t\t\t\t$.append($$anchor, text_6);\n\t\t\t\t};\n\n\t\t\t\t$.if(\n\t\t\t\t\tnode_2,\n\t\t\t\t\t($$render) => {\n\t\t\t\t\t\tif ($.get($$condition)) $$render(consequent_4); else $$render(alternate_1, -1);\n\t\t\t\t\t},\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t$.append($$anchor, fragment_1);\n\t\t};\n\n\t\t$.if(node_1, ($$render) => {\n\t\t\tif ($.get($$condition)) $$render(consequent_2); else if (bar) $$render(consequent_3, 1); else $$render(alternate_2, -1);\n\t\t});\n\t});\n\n\tvar node_3 = $.sibling(node_1, 2);\n\n\t$.async(node_3, [$$promises[0]], [async () => (await $.save(foo))() > 10], (node_3, $$condition) => {\n\t\tvar consequent_5 = ($$anchor) => {\n\t\t\tvar text_7 = $.text('foo');\n\n\t\t\t$.append($$anchor, text_7);\n\t\t};\n\n\t\tvar consequent_6 = ($$anchor) => {\n\t\t\tvar text_8 = $.text('bar');\n\n\t\t\t$.append($$anchor, text_8);\n\t\t};\n\n\t\tvar alternate_4 = ($$anchor) => {\n\t\t\tvar fragment_2 = $.comment();\n\t\t\tvar node_4 = $.first_child(fragment_2);\n\n\t\t\t$.async(node_4, [$$promises[0]], [async () => (await $.save(foo))() > 5], (node_4, $$condition) => {\n\t\t\t\tvar consequent_7 = ($$anchor) => {\n\t\t\t\t\tvar text_9 = $.text('baz');\n\n\t\t\t\t\t$.append($$anchor, text_9);\n\t\t\t\t};\n\n\t\t\t\tvar alternate_3 = ($$anchor) => {\n\t\t\t\t\tvar text_10 = $.text('else');\n\n\t\t\t\t\t$.append($$anchor, text_10);\n\t\t\t\t};\n\n\t\t\t\t$.if(\n\t\t\t\t\tnode_4,\n\t\t\t\t\t($$render) => {\n\t\t\t\t\t\tif ($.get($$condition)) $$render(consequent_7); else $$render(alternate_3, -1);\n\t\t\t\t\t},\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t$.append($$anchor, fragment_2);\n\t\t};\n\n\t\t$.if(node_3, ($$render) => {\n\t\t\tif ($.get($$condition)) $$render(consequent_5); else if (bar) $$render(consequent_6, 1); else $$render(alternate_4, -1);\n\t\t});\n\t});\n\n\tvar node_5 = $.sibling(node_3, 2);\n\n\t{\n\t\tvar consequent_8 = ($$anchor) => {\n\t\t\tvar text_11 = $.text('foo');\n\n\t\t\t$.append($$anchor, text_11);\n\t\t};\n\n\t\tvar consequent_9 = ($$anchor) => {\n\t\t\tvar text_12 = $.text('bar');\n\n\t\t\t$.append($$anchor, text_12);\n\t\t};\n\n\t\tvar consequent_10 = ($$anchor) => {\n\t\t\tvar text_13 = $.text('baz');\n\n\t\t\t$.append($$anchor, text_13);\n\t\t};\n\n\t\tvar d = $.derived(() => complex1() * complex2 > 100);\n\n\t\tvar alternate_5 = ($$anchor) => {\n\t\t\tvar text_14 = $.text('else');\n\n\t\t\t$.append($$anchor, text_14);\n\t\t};\n\n\t\t$.if(node_5, ($$render) => {\n\t\t\tif (simple1) $$render(consequent_8); else if (simple2 > 10) $$render(consequent_9, 1); else if ($.get(d)) $$render(consequent_10, 2); else $$render(alternate_5, -1);\n\t\t});\n\t}\n\n\tvar node_6 = $.sibling(node_5, 2);\n\n\t$.async(node_6, [$$promises[0]], void 0, (node_6) => {\n\t\tvar consequent_11 = ($$anchor) => {\n\t\t\tvar text_15 = $.text('foo');\n\n\t\t\t$.append($$anchor, text_15);\n\t\t};\n\n\t\tvar consequent_12 = ($$anchor) => {\n\t\t\tvar text_16 = $.text('bar');\n\n\t\t\t$.append($$anchor, text_16);\n\t\t};\n\n\t\tvar alternate_6 = ($$anchor) => {\n\t\t\tvar text_17 = $.text('else');\n\n\t\t\t$.append($$anchor, text_17);\n\t\t};\n\n\t\t$.if(node_6, ($$render) => {\n\t\t\tif ($.get(blocking) > 10) $$render(consequent_11); else if ($.get(blocking) > 5) $$render(consequent_12, 1); else $$render(alternate_6, -1);\n\t\t});\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-chain/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_if_chain($$renderer) {\n\tfunction complex1() {\n\t\treturn 1;\n\t}\n\n\tlet foo = true;\n\tvar blocking;\n\tvar $$promises = $$renderer.run([async () => blocking = await $.async_derived(() => foo)]);\n\n\t$$renderer.async_block([$$promises[0]], ($$renderer) => {\n\t\tif (foo) {\n\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t$$renderer.push(`foo`);\n\t\t} else if (bar) {\n\t\t\t$$renderer.push('<!--[1-->');\n\t\t\t$$renderer.push(`bar`);\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\t\t\t$$renderer.push(`else`);\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]--> `);\n\n\t$$renderer.async_block([$$promises[0]], async ($$renderer) => {\n\t\tif ((await $.save(foo))()) {\n\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t$$renderer.push(`foo`);\n\t\t} else if (bar) {\n\t\t\t$$renderer.push('<!--[1-->');\n\t\t\t$$renderer.push(`bar`);\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\n\t\t\t$$renderer.child_block(async ($$renderer) => {\n\t\t\t\tif ((await $.save(baz))()) {\n\t\t\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t\t\t$$renderer.push(`baz`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push('<!--[-1-->');\n\t\t\t\t\t$$renderer.push(`else`);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]--> `);\n\n\t$$renderer.async_block([$$promises[0]], async ($$renderer) => {\n\t\tif ((await $.save(foo))() > 10) {\n\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t$$renderer.push(`foo`);\n\t\t} else if (bar) {\n\t\t\t$$renderer.push('<!--[1-->');\n\t\t\t$$renderer.push(`bar`);\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\n\t\t\t$$renderer.async_block([$$promises[0]], async ($$renderer) => {\n\t\t\t\tif ((await $.save(foo))() > 5) {\n\t\t\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t\t\t$$renderer.push(`baz`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push('<!--[-1-->');\n\t\t\t\t\t$$renderer.push(`else`);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]--> `);\n\n\tif (simple1) {\n\t\t$$renderer.push('<!--[0-->');\n\t\t$$renderer.push(`foo`);\n\t} else if (simple2 > 10) {\n\t\t$$renderer.push('<!--[1-->');\n\t\t$$renderer.push(`bar`);\n\t} else if (complex1() * complex2 > 100) {\n\t\t$$renderer.push('<!--[2-->');\n\t\t$$renderer.push(`baz`);\n\t} else {\n\t\t$$renderer.push('<!--[-1-->');\n\t\t$$renderer.push(`else`);\n\t}\n\n\t$$renderer.push(`<!--]--> `);\n\n\t$$renderer.async_block([$$promises[0]], ($$renderer) => {\n\t\tif (blocking() > 10) {\n\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t$$renderer.push(`foo`);\n\t\t} else if (blocking() > 5) {\n\t\t\t$$renderer.push('<!--[1-->');\n\t\t\t$$renderer.push(`bar`);\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\t\t\t$$renderer.push(`else`);\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-chain/index.svelte",
    "content": "<script>\n  function complex1() {\n    return 1;\n  }\n\n  let foo = $state(true);\n  let blocking = $derived(await foo);\n</script>\n\n<!-- simple chain - should have no nested $.if() -->\n{#if foo}\n  foo\n{:else if bar}\n  bar\n{:else}\n  else\n{/if}\n\n<!-- simple chain with await expressions - should have $.if() at each await expression -->\n{#if await foo}\n  foo\n{:else if bar}\n  bar\n{:else if await baz}\n  baz\n{:else}\n  else\n{/if}\n\n<!-- simple chain with await expressions #2 - should have $.if() at each await expression (ideally we can detect that await foo is unnecessary to await multiple times and this is one $.if()) -->\n{#if await foo > 10}\n  foo\n{:else if bar}\n  bar\n{:else if await foo > 5}\n  baz\n{:else}\n  else\n{/if}\n\n<!-- simple chain with some expressions that cause a $.derived - should be one $.if() -->\n{#if simple1}\n  foo\n{:else if simple2 > 10}\n  bar\n{:else if complex1() * complex2 > 100}\n  baz\n{:else}\n  else\n{/if}\n\n<!-- simple chain with blocking expressions - should be one $.if() -->\n{#if blocking > 10}\n  foo\n{:else if blocking > 5}\n  bar\n{:else}\n  else\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-hoisting/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Async_if_hoisting($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.async(node, [], [() => Promise.resolve(true)], (node, $$condition) => {\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar text = $.text();\n\n\t\t\t$.template_effect(($0) => $.set_text(text, $0), void 0, [() => Promise.resolve('yes yes yes')]);\n\t\t\t$.append($$anchor, text);\n\t\t};\n\n\t\tvar alternate = ($$anchor) => {\n\t\t\tvar text_1 = $.text();\n\n\t\t\t$.template_effect(($0) => $.set_text(text_1, $0), void 0, [() => Promise.reject('no no no')]);\n\t\t\t$.append($$anchor, text_1);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif ($.get($$condition)) $$render(consequent); else $$render(alternate, -1);\n\t\t});\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_if_hoisting($$renderer) {\n\t$$renderer.child_block(async ($$renderer) => {\n\t\tif ((await $.save(Promise.resolve(true)))()) {\n\t\t\t$$renderer.push('<!--[0-->');\n\t\t\t$$renderer.push(async () => $.escape(await Promise.resolve('yes yes yes')));\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\t\t\t$$renderer.push(async () => $.escape(await Promise.reject('no no no')));\n\t\t}\n\t});\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-if-hoisting/index.svelte",
    "content": "{#if await Promise.resolve(true)}\n  {await Promise.resolve('yes yes yes')}\n{:else}\n  {await Promise.reject('no no no')}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-in-derived/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-in-derived/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Async_in_derived($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tvar yes1, yes2, no1, no2;\n\n\tvar $$promises = $.run([\n\t\tasync () => yes1 = await $.async_derived(() => 1),\n\t\tasync () => yes2 = await $.async_derived(async () => foo(await 1)),\n\t\t() => {\n\t\t\tno1 = $.derived(async () => {\n\t\t\t\treturn await 1;\n\t\t\t});\n\n\t\t\tno2 = $.derived(() => async () => {\n\t\t\t\treturn await 1;\n\t\t\t});\n\t\t}\n\t]);\n\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tlet yes1;\n\t\t\tlet yes2;\n\t\t\tlet no1;\n\t\t\tlet no2;\n\n\t\t\tvar promises = $.run([\n\t\t\t\tasync () => yes1 = (await $.save($.async_derived(async () => (await $.save(1))())))(),\n\t\t\t\tasync () => yes2 = (await $.save($.async_derived(async () => foo((await $.save(1))()))))(),\n\t\t\t\t() => no1 = $.derived(() => (async () => {\n\t\t\t\t\treturn await 1;\n\t\t\t\t})()),\n\n\t\t\t\t() => no2 = $.derived(() => (async () => {\n\t\t\t\t\treturn await 1;\n\t\t\t\t})())\n\t\t\t]);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (true) $$render(consequent);\n\t\t});\n\t}\n\n\t$.append($$anchor, fragment);\n\t$.pop();\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-in-derived/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_in_derived($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tvar yes1, yes2, no1, no2;\n\n\t\tvar $$promises = $$renderer.run([\n\t\t\tasync () => yes1 = await $.async_derived(() => 1),\n\t\t\tasync () => yes2 = await $.async_derived(async () => foo(await 1)),\n\t\t\t() => {\n\t\t\t\tno1 = $.derived(async () => {\n\t\t\t\t\treturn await 1;\n\t\t\t\t});\n\n\t\t\t\tno2 = $.derived(() => async () => {\n\t\t\t\t\treturn await 1;\n\t\t\t\t});\n\t\t\t}\n\t\t]);\n\n\t\tif (true) {\n\t\t\t$$renderer.push('<!--[0-->');\n\n\t\t\tlet yes1;\n\t\t\tlet yes2;\n\t\t\tlet no1;\n\t\t\tlet no2;\n\n\t\t\tvar promises = $$renderer.run([\n\t\t\t\tasync () => {\n\t\t\t\t\tyes1 = (await $.save(1))();\n\t\t\t\t},\n\n\t\t\t\tasync () => {\n\t\t\t\t\tyes2 = foo((await $.save(1))());\n\t\t\t\t},\n\n\t\t\t\t() => {\n\t\t\t\t\tno1 = (async () => {\n\t\t\t\t\t\treturn await 1;\n\t\t\t\t\t})();\n\t\t\t\t},\n\n\t\t\t\t() => {\n\t\t\t\t\tno2 = (async () => {\n\t\t\t\t\t\treturn await 1;\n\t\t\t\t\t})();\n\t\t\t\t}\n\t\t\t]);\n\t\t} else {\n\t\t\t$$renderer.push('<!--[-1-->');\n\t\t}\n\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-in-derived/index.svelte",
    "content": "<script>\n\tlet yes1 = $derived(await 1);\n\tlet yes2 = $derived(foo(await 1));\n\tlet no1 = $derived.by(async () => {\n\t\treturn await 1;\n\t});\n\tlet no2 = $derived(async () => {\n\t\treturn await 1;\n\t});\n</script>\n\n{#if true}\n\t{@const yes1 = await 1}\n\t{@const yes2 = foo(await 1)}\n\t{@const no1 = (async () => {\n\t\treturn await 1;\n\t})()}\n\t{@const no2 = (async () => {\n\t\treturn await 1;\n\t})()}\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-group-sync-run/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ compileOptions: { experimental: { async: true } } });\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-group-sync-run/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Async_top_level_group_sync_run($$anchor) {\n\tvar a,\n\t\t// these should be grouped into one, having an async tick inbetween\n\t\t// would change how the code runs and could introduce subtle timing bugs\n\t\tb,\n\t\tc;\n\n\tvar $$promises = $.run([\n\t\tasync () => a = await Promise.resolve(1),\n\t\t() => {\n\t\t\tb = a + 1;\n\t\t\tc = b + 1;\n\t\t}\n\t]);\n\n\t$.next();\n\n\tvar text = $.text();\n\n\t$.template_effect(() => $.set_text(text, c), void 0, void 0, [$$promises[1]]);\n\t$.append($$anchor, text);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-group-sync-run/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_top_level_group_sync_run($$renderer) {\n\tvar a,\n\t\t// these should be grouped into one, having an async tick inbetween\n\t\t// would change how the code runs and could introduce subtle timing bugs\n\t\tb,\n\t\tc;\n\n\tvar $$promises = $$renderer.run([\n\t\tasync () => a = await Promise.resolve(1),\n\t\t() => {\n\t\t\tb = a + 1;\n\t\t\tc = b + 1;\n\t\t}\n\t]);\n\n\t$$renderer.push(`<!---->`);\n\t$$renderer.async([$$promises[1]], ($$renderer) => $$renderer.push(() => $.escape(c)));\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-group-sync-run/index.svelte",
    "content": "<script>\n\tlet a = await Promise.resolve(1);\n\t// these should be grouped into one, having an async tick inbetween\n\t// would change how the code runs and could introduce subtle timing bugs\n\tlet b = a + 1;\n\tlet c = b + 1;\n</script>\n\n{c}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\texperimental: { async: true },\n\t\tdev: false\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<p> </p>`);\n\nexport default function Async_top_level_inspect_server($$anchor) {\n\tvar data;\n\tvar $$promises = $.run([async () => data = await Promise.resolve(42), () => void 0]);\n\tvar p = root();\n\tvar text = $.child(p, true);\n\n\t$.reset(p);\n\t$.template_effect(() => $.set_text(text, data), void 0, void 0, [$$promises[1]]);\n\t$.append($$anchor, p);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/server/index.svelte.js",
    "content": "import 'svelte/internal/flags/async';\nimport * as $ from 'svelte/internal/server';\n\nexport default function Async_top_level_inspect_server($$renderer) {\n\tvar data;\n\tvar $$promises = $$renderer.run([async () => data = await Promise.resolve(42), () => void 0]);\n\n\t$$renderer.push(`<p>`);\n\t$$renderer.async([$$promises[1]], ($$renderer) => $$renderer.push(() => $.escape(data)));\n\t$$renderer.push(`</p>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/index.svelte",
    "content": "<script>\n\tlet data = await Promise.resolve(42);\n\t$inspect(data);\n</script>\n\n<p>{data}</p>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<button> </button> <!> `, 1);\n\nexport default function Await_block_scope($$anchor) {\n\tlet counter = $.proxy({ count: 0 });\n\tconst promise = $.derived(() => Promise.resolve(counter));\n\n\tfunction increment() {\n\t\tcounter.count += 1;\n\t}\n\n\tvar fragment = root();\n\tvar button = $.first_child(fragment);\n\tvar text = $.child(button);\n\n\t$.reset(button);\n\n\tvar node = $.sibling(button, 2);\n\n\t$.await(node, () => $.get(promise), null, ($$anchor, counter) => {});\n\n\tvar text_1 = $.sibling(node);\n\n\t$.template_effect(() => {\n\t\t$.set_text(text, `clicks: ${counter.count ?? ''}`);\n\t\t$.set_text(text_1, ` ${counter.count ?? ''}`);\n\t});\n\n\t$.delegated('click', button, increment);\n\t$.append($$anchor, fragment);\n}\n\n$.delegate(['click']);"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Await_block_scope($$renderer) {\n\tlet counter = { count: 0 };\n\tconst promise = $.derived(() => Promise.resolve(counter));\n\n\tfunction increment() {\n\t\tcounter.count += 1;\n\t}\n\n\t$$renderer.push(`<button>clicks: ${$.escape(counter.count)}</button> `);\n\t$.await($$renderer, promise(), () => {}, (counter) => {});\n\t$$renderer.push(`<!--]--> ${$.escape(counter.count)}`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/await-block-scope/index.svelte",
    "content": "<script>\n\tlet counter = $state({ count: 0 });\n\tconst promise = $derived(Promise.resolve(counter))\n\n\tfunction increment() {\n\t\tcounter.count += 1;\n\t}\n</script>\n\n<button onclick={increment}>\n\tclicks: {counter.count}\n</button>\n\n{#await promise then counter}{/await}\n\n{counter.count}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport TextInput from './Child.svelte';\n\nconst snippet = ($$anchor) => {\n\t$.next();\n\n\tvar text = $.text('Something');\n\n\t$.append($$anchor, text);\n};\n\nvar root = $.from_html(`<!> `, 1);\n\nexport default function Bind_component_snippet($$anchor) {\n\tlet value = $.state('');\n\tconst _snippet = snippet;\n\tvar fragment = root();\n\tvar node = $.first_child(fragment);\n\n\tTextInput(node, {\n\t\tget value() {\n\t\t\treturn $.get(value);\n\t\t},\n\n\t\tset value($$value) {\n\t\t\t$.set(value, $$value, true);\n\t\t}\n\t});\n\n\tvar text_1 = $.sibling(node);\n\n\t$.template_effect(() => $.set_text(text_1, ` value: ${$.get(value) ?? ''}`));\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\nimport TextInput from './Child.svelte';\n\nfunction snippet($$renderer) {\n\t$$renderer.push(`<!---->Something`);\n}\n\nexport default function Bind_component_snippet($$renderer) {\n\tlet value = '';\n\tconst _snippet = snippet;\n\tlet $$settled = true;\n\tlet $$inner_renderer;\n\n\tfunction $$render_inner($$renderer) {\n\t\tTextInput($$renderer, {\n\t\t\tget value() {\n\t\t\t\treturn value;\n\t\t\t},\n\n\t\t\tset value($$value) {\n\t\t\t\tvalue = $$value;\n\t\t\t\t$$settled = false;\n\t\t\t}\n\t\t});\n\n\t\t$$renderer.push(`<!----> value: ${$.escape(value)}`);\n\t}\n\n\tdo {\n\t\t$$settled = true;\n\t\t$$inner_renderer = $$renderer.copy();\n\t\t$$render_inner($$inner_renderer);\n\t} while (!$$settled);\n\n\t$$renderer.subsume($$inner_renderer);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-component-snippet/index.svelte",
    "content": "<script>\n\timport TextInput from './Child.svelte';\n\n\tlet value = $state('');\n\tconst _snippet = snippet;\n</script>\n\n{#snippet snippet()}\n\tSomething\n{/snippet}\n\n<TextInput bind:value />\nvalue: {value}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-this/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Bind_this($$anchor) {\n\t$.bind_this(Foo($$anchor, { $$legacy: true }), ($$value) => foo = $$value, () => foo);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Bind_this($$renderer) {\n\tFoo($$renderer, {});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/bind-this/index.svelte",
    "content": "<Foo bind:this={foo} />\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Class_state_field_constructor_assignment($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tclass Foo {\n\t\t#a = $.state(0);\n\n\t\tget a() {\n\t\t\treturn $.get(this.#a);\n\t\t}\n\n\t\tset a(value) {\n\t\t\t$.set(this.#a, value, true);\n\t\t}\n\n\t\t#b = $.state();\n\t\t#foo = $.derived(() => ({ bar: this.a * 2 }));\n\n\t\tget foo() {\n\t\t\treturn $.get(this.#foo);\n\t\t}\n\n\t\tset foo(value) {\n\t\t\t$.set(this.#foo, value);\n\t\t}\n\n\t\t#bar = $.derived(() => ({ baz: this.foo }));\n\n\t\tget bar() {\n\t\t\treturn $.get(this.#bar);\n\t\t}\n\n\t\tset bar(value) {\n\t\t\t$.set(this.#bar, value);\n\t\t}\n\n\t\tconstructor() {\n\t\t\tthis.a = 1;\n\t\t\t$.set(this.#b, 2);\n\t\t\tthis.foo.bar = 3;\n\t\t\tthis.bar = 4;\n\t\t}\n\t}\n\n\t$.pop();\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Class_state_field_constructor_assignment($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tclass Foo {\n\t\t\ta = 0;\n\t\t\t#b;\n\t\t\t#foo = $.derived(() => ({ bar: this.a * 2 }));\n\n\t\t\tget foo() {\n\t\t\t\treturn this.#foo();\n\t\t\t}\n\n\t\t\tset foo($$value) {\n\t\t\t\treturn this.#foo($$value);\n\t\t\t}\n\n\t\t\t#bar = $.derived(() => ({ baz: this.foo }));\n\n\t\t\tget bar() {\n\t\t\t\treturn this.#bar();\n\t\t\t}\n\n\t\t\tset bar($$value) {\n\t\t\t\treturn this.#bar($$value);\n\t\t\t}\n\n\t\t\tconstructor() {\n\t\t\t\tthis.a = 1;\n\t\t\t\tthis.#b = 2;\n\t\t\t\tthis.foo.bar = 3;\n\t\t\t\tthis.bar = 4;\n\t\t\t}\n\t\t}\n\t});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/index.svelte",
    "content": "<script>\n\tclass Foo {\n\t\ta = $state(0);\n\t\t#b = $state();\n\t\tfoo = $derived({ bar: this.a * 2 });\n\t\tbar = $derived({ baz: this.foo });\n\t\tconstructor() {\n\t\t\tthis.a = 1;\n\t\t\tthis.#b = 2;\n\t\t\tthis.foo.bar = 3;\n\t\t\tthis.bar = 4;\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root_1 = $.from_html(`<button type=\"button\">B</button>`);\n\nexport default function Delegated_locally_declared_shadowed($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.each(node, 0, () => ({ length: 1 }), $.index, ($$anchor, $$item, index) => {\n\t\tvar button = root_1();\n\n\t\t$.set_attribute(button, 'data-index', index);\n\n\t\t$.delegated('click', button, (e) => {\n\t\t\tconst index = Number(e.currentTarget.dataset.index);\n\n\t\t\tconsole.log(index);\n\t\t});\n\n\t\t$.append($$anchor, button);\n\t});\n\n\t$.append($$anchor, fragment);\n}\n\n$.delegate(['click']);"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Delegated_locally_declared_shadowed($$renderer) {\n\t$$renderer.push(`<!--[-->`);\n\n\tconst each_array = $.ensure_array_like({ length: 1 });\n\n\tfor (let index = 0, $$length = each_array.length; index < $$length; index++) {\n\t\t$$renderer.push(`<button type=\"button\"${$.attr('data-index', index)}>B</button>`);\n\t}\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/index.svelte",
    "content": "<script lang=\"ts\"></script>\n\n{#each { length: 1 }, index}\n\t<button\n\t\ttype=\"button\"\n\t\tdata-index={index}\n\t\tonclick={(e) => {\n\t\t\tconst index = Number(e.currentTarget.dataset.index)!;\n\t\t\tconsole.log(index);\n\t\t}}>B</button\n\t>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/client/index.svelte.js",
    "content": "/* index.svelte.js generated by Svelte VERSION */\nimport * as $ from 'svelte/internal/client';\n\nlet a = $.state(1);\nlet b = $.state(2);\nlet c = 3;\nlet d = 4;\n\nexport function update(array) {\n\t((array) => {\n\t\tvar $$array = $.to_array(array, 2);\n\n\t\t$.set(a, $$array[0], true);\n\t\t$.set(b, $$array[1], true);\n\t})(array);\n\n\t[c, d] = array;\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/server/index.svelte.js",
    "content": "/* index.svelte.js generated by Svelte VERSION */\nimport * as $ from 'svelte/internal/server';\n\nlet a = 1;\nlet b = 2;\nlet c = 3;\nlet d = 4;\n\nexport function update(array) {\n\t[a, b] = array;\n\t[c, d] = array;\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/destructured-assignments/index.svelte.js",
    "content": "let a = $state(1);\nlet b = $state(2);\nlet c = 3;\nlet d = 4;\n\nexport function update(array) {\n\t[a, b] = array;\n\t[c, d] = array;\n}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<div></div> <svg></svg> <custom-element></custom-element> <div></div> <svg></svg> <custom-element></custom-element>`, 3);\n\nexport default function Main($$anchor) {\n\t// needs to be a snapshot test because jsdom does auto-correct the attribute casing\n\tlet x = 'test';\n\n\tlet y = () => 'test';\n\tvar fragment = root();\n\tvar div = $.first_child(fragment);\n\n\t$.set_attribute(div, 'foobar', x);\n\n\tvar svg = $.sibling(div, 2);\n\n\t$.set_attribute(svg, 'viewBox', x);\n\n\tvar custom_element = $.sibling(svg, 2);\n\n\t$.set_custom_element_data(custom_element, 'fooBar', x);\n\n\tvar div_1 = $.sibling(custom_element, 2);\n\tvar svg_1 = $.sibling(div_1, 2);\n\tvar custom_element_1 = $.sibling(svg_1, 2);\n\n\t$.template_effect(() => $.set_custom_element_data(custom_element_1, 'fooBar', y()));\n\n\t$.template_effect(\n\t\t($0, $1) => {\n\t\t\t$.set_attribute(div_1, 'foobar', $0);\n\t\t\t$.set_attribute(svg_1, 'viewBox', $1);\n\t\t},\n\t\t[() => y(), () => y()]\n\t);\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Main($$renderer) {\n\t// needs to be a snapshot test because jsdom does auto-correct the attribute casing\n\tlet x = 'test';\n\n\tlet y = () => 'test';\n\n\t$$renderer.push(`<div${$.attr('foobar', x)}></div> <svg${$.attr('viewBox', x)}></svg> <custom-element${$.attr('foobar', x)}></custom-element> <div${$.attr('foobar', y())}></div> <svg${$.attr('viewBox', y())}></svg> <custom-element${$.attr('foobar', y())}></custom-element>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/main.svelte",
    "content": "<script>\n    // needs to be a snapshot test because jsdom does auto-correct the attribute casing\n    let x = $state('test');\n    let y = $state(() => 'test');\n</script>\n\n<div fooBar={x}></div>\n<svg viewBox={x}></svg>\n<custom-element fooBar={x}></custom-element>\n\n<!-- force them into singular render effects by using function invocations -->\n<div fooBar={y()}></div>\n<svg viewBox={y()} ></svg>\n<custom-element fooBar={y()}></custom-element>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-index-non-null/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-index-non-null/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root_1 = $.from_html(`<p></p>`);\n\nexport default function Each_index_non_null($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.each(node, 0, () => Array(10), $.index, ($$anchor, $$item, i) => {\n\t\tvar p = root_1();\n\n\t\tp.textContent = `index: ${i}`;\n\t\t$.append($$anchor, p);\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-index-non-null/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Each_index_non_null($$renderer) {\n\t$$renderer.push(`<!--[-->`);\n\n\tconst each_array = $.ensure_array_like(Array(10));\n\n\tfor (let i = 0, $$length = each_array.length; i < $$length; i++) {\n\t\t$$renderer.push(`<p>index: ${$.escape(i)}</p>`);\n\t}\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-index-non-null/index.svelte",
    "content": "{#each Array(10), i}\n\t<p>index: {i}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-string-template/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Each_string_template($$anchor) {\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.each(node, 0, () => ['foo', 'bar', 'baz'], $.index, ($$anchor, thing) => {\n\t\t$.next();\n\n\t\tvar text = $.text();\n\n\t\t$.template_effect(() => $.set_text(text, `${thing ?? ''}, `));\n\t\t$.append($$anchor, text);\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Each_string_template($$renderer) {\n\t$$renderer.push(`<!--[-->`);\n\n\tconst each_array = $.ensure_array_like(['foo', 'bar', 'baz']);\n\n\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\tlet thing = each_array[$$index];\n\n\t\t$$renderer.push(`<!---->${$.escape(thing)}, `);\n\t}\n\n\t$$renderer.push(`<!--]-->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/each-string-template/index.svelte",
    "content": "{#each ['foo', 'bar', 'baz'] as thing}\n\t{thing},{' '}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/export-state/_expected/client/index.svelte.js",
    "content": "/* index.svelte.js generated by Svelte VERSION */\nimport * as $ from 'svelte/internal/client';\n\nexport const object = $.proxy({ ok: true });"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/export-state/_expected/server/index.svelte.js",
    "content": "/* index.svelte.js generated by Svelte VERSION */\nimport * as $ from 'svelte/internal/server';\n\nexport const object = { ok: true };"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/export-state/index.svelte.js",
    "content": "export const object = $state({\n\tok: true\n});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Function_prop_no_getter($$anchor) {\n\tlet count = $.state(0);\n\n\tfunction onmouseup() {\n\t\t$.set(count, $.get(count) + 2);\n\t}\n\n\tconst plusOne = (num) => num + 1;\n\n\tButton($$anchor, {\n\t\tonmousedown: () => $.set(count, $.get(count) + 1),\n\t\tonmouseup,\n\t\tonmouseenter: () => $.set(count, plusOne($.get(count)), true),\n\t\tchildren: ($$anchor, $$slotProps) => {\n\t\t\t$.next();\n\n\t\t\tvar text = $.text();\n\n\t\t\t$.template_effect(() => $.set_text(text, `clicks: ${$.get(count) ?? ''}`));\n\t\t\t$.append($$anchor, text);\n\t\t},\n\t\t$$slots: { default: true }\n\t});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Function_prop_no_getter($$renderer) {\n\tlet count = 0;\n\n\tfunction onmouseup() {\n\t\tcount += 2;\n\t}\n\n\tconst plusOne = (num) => num + 1;\n\n\tButton($$renderer, {\n\t\tonmousedown: () => count += 1,\n\t\tonmouseup,\n\t\tonmouseenter: () => count = plusOne(count),\n\t\tchildren: ($$renderer) => {\n\t\t\t$$renderer.push(`<!---->clicks: ${$.escape(count)}`);\n\t\t},\n\t\t$$slots: { default: true }\n\t});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/function-prop-no-getter/index.svelte",
    "content": "<script>\n\tlet count = $state(0);\n\n\tfunction onmouseup() {\n\t\tcount += 2;\n\t}\n\n\tconst plusOne = (num) => num + 1;\n</script>\n\n<Button onmousedown={() => count += 1} {onmouseup} onmouseenter={() => count = plusOne(count)}>\n\tclicks: {count}\n</Button>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/functional-templating/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tfragments: 'tree'\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/functional-templating/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_tree(\n\t[\n\t\t['h1', null, 'hello'],\n\t\t' ',\n\t\t[\n\t\t\t'div',\n\t\t\t{ class: 'potato' },\n\t\t\t['p', null, 'child element'],\n\t\t\t' ',\n\t\t\t['p', null, 'another child element']\n\t\t]\n\t],\n\t1\n);\n\nexport default function Functional_templating($$anchor) {\n\tvar fragment = root();\n\n\t$.next(2);\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/functional-templating/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Functional_templating($$renderer) {\n\t$$renderer.push(`<h1>hello</h1> <div class=\"potato\"><p>child element</p> <p>another child element</p></div>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/functional-templating/index.svelte",
    "content": "<h1>hello</h1>\n\n<div class=\"potato\">\n\t<p>child element</p>\n\t<p>another child element</p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hello-world/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<h1>hello world</h1>`);\n\nexport default function Hello_world($$anchor) {\n\tvar h1 = root();\n\n\t$.append($$anchor, h1);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Hello_world($$renderer) {\n\t$$renderer.push(`<h1>hello world</h1>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hello-world/index.svelte",
    "content": "<h1>hello world</h1>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hmr/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\thmr: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<h1>hello world</h1>`);\n\nfunction Hmr($$anchor) {\n\tvar h1 = root();\n\n\t$.append($$anchor, h1);\n}\n\nif (import.meta.hot) {\n\tHmr = $.hmr(Hmr);\n\n\timport.meta.hot.accept((module) => {\n\t\tHmr[$.HMR].update(module.default);\n\t});\n}\n\nexport default Hmr;"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Hmr($$renderer) {\n\t$$renderer.push(`<h1>hello world</h1>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/hmr/index.svelte",
    "content": "<h1>hello world</h1>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/export.js",
    "content": "export * from '../../export.js';"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\nimport { random } from './module.svelte';\n\nexport default function Imports_in_modules($$anchor) {}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/module.svelte.js",
    "content": "/* module.svelte.js generated by Svelte VERSION */\nimport * as $ from 'svelte/internal/client';\nimport { random } from './export';\n\nexport { random };"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/export.js",
    "content": "export * from '../../export.js';"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\nimport { random } from './module.svelte';\n\nexport default function Imports_in_modules($$renderer) {}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/module.svelte.js",
    "content": "/* module.svelte.js generated by Svelte VERSION */\nimport * as $ from 'svelte/internal/server';\nimport { random } from './export';\n\nexport { random };"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/export.js",
    "content": "export const random = 42;\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/index.svelte",
    "content": "<script>\n\timport { random } from './module.svelte';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/imports-in-modules/module.svelte.js",
    "content": "import { random } from './export';\n\nexport { random };\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<h1></h1> <b></b> <button> </button> <h1></h1>`, 1);\n\nexport default function Nullish_coallescence_omittance($$anchor) {\n\tlet name = 'world';\n\tlet count = $.state(0);\n\tvar fragment = root();\n\tvar h1 = $.first_child(fragment);\n\n\th1.textContent = 'Hello, world!';\n\n\tvar b = $.sibling(h1, 2);\n\n\tb.textContent = '123';\n\n\tvar button = $.sibling(b, 2);\n\tvar text = $.child(button);\n\n\t$.reset(button);\n\n\tvar h1_1 = $.sibling(button, 2);\n\n\th1_1.textContent = 'Hello, world';\n\t$.template_effect(() => $.set_text(text, `Count is ${$.get(count) ?? ''}`));\n\t$.delegated('click', button, () => $.update(count));\n\t$.append($$anchor, fragment);\n}\n\n$.delegate(['click']);"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Nullish_coallescence_omittance($$renderer) {\n\tlet name = 'world';\n\tlet count = 0;\n\n\t$$renderer.push(`<h1>Hello, world!</h1> <b>123</b> <button>Count is ${$.escape(count)}</button> <h1>Hello, world</h1>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/index.svelte",
    "content": "<script>\n    let name = 'world';\n    let count = $state(0);\n</script>\n<h1>Hello, {null}{name}!</h1>\n<b>{1 ?? 'stuff'}{2 ?? 'more stuff'}{3 ?? 'even more stuff'}</b>\n<button onclick={()=>count++}>Count is {count}</button>\n<h1>Hello, {name ?? 'earth' ?? null}</h1>"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/props-identifier/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Props_identifier($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet props = $.rest_props($$props, ['$$slots', '$$events', '$$legacy']);\n\n\t$$props.a;\n\tprops[a];\n\t$$props.a.b;\n\t$$props.a.b = true;\n\tprops.a = true;\n\tprops[a] = true;\n\tprops;\n\t$.pop();\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/props-identifier/_expected/client/index.svelte.warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 33\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 38\n\t\t},\n\t\t\"position\": [\n\t\t\t33,\n\t\t\t38\n\t\t],\n\t\t\"frame\": \"1: <script>\\n2:   let props = $props();\\n3:   props.a;\\n          ^\\n4:   props[a];\\n5:   props.a.b;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 43\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 48\n\t\t},\n\t\t\"position\": [\n\t\t\t43,\n\t\t\t48\n\t\t],\n\t\t\"frame\": \"2:   let props = $props();\\n3:   props.a;\\n4:   props[a];\\n          ^\\n5:   props.a.b;\\n6:   props.a.b = true;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 54\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 59\n\t\t},\n\t\t\"position\": [\n\t\t\t54,\n\t\t\t59\n\t\t],\n\t\t\"frame\": \"3:   props.a;\\n4:   props[a];\\n5:   props.a.b;\\n          ^\\n6:   props.a.b = true;\\n7:   props.a = true;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 66\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 71\n\t\t},\n\t\t\"position\": [\n\t\t\t66,\n\t\t\t71\n\t\t],\n\t\t\"frame\": \"4:   props[a];\\n5:   props.a.b;\\n6:   props.a.b = true;\\n          ^\\n7:   props.a = true;\\n8:   props[a] = true;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 85\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 90\n\t\t},\n\t\t\"position\": [\n\t\t\t85,\n\t\t\t90\n\t\t],\n\t\t\"frame\": \" 5:   props.a.b;\\n 6:   props.a.b = true;\\n 7:   props.a = true;\\n           ^\\n 8:   props[a] = true;\\n 9:   props;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 102\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 107\n\t\t},\n\t\t\"position\": [\n\t\t\t102,\n\t\t\t107\n\t\t],\n\t\t\"frame\": \" 6:   props.a.b = true;\\n 7:   props.a = true;\\n 8:   props[a] = true;\\n           ^\\n 9:   props;\\n10: </script>\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 120\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 125\n\t\t},\n\t\t\"position\": [\n\t\t\t120,\n\t\t\t125\n\t\t],\n\t\t\"frame\": \" 7:   props.a = true;\\n 8:   props[a] = true;\\n 9:   props;\\n           ^\\n10: </script>\\n11: \"\n\t}\n]"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/props-identifier/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Props_identifier($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { $$slots, $$events, ...props } = $$props;\n\n\t\tprops.a;\n\t\tprops[a];\n\t\tprops.a.b;\n\t\tprops.a.b = true;\n\t\tprops.a = true;\n\t\tprops[a] = true;\n\t\tprops;\n\t});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/props-identifier/_expected/server/index.svelte.warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 33\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 38\n\t\t},\n\t\t\"position\": [\n\t\t\t33,\n\t\t\t38\n\t\t],\n\t\t\"frame\": \"1: <script>\\n2:   let props = $props();\\n3:   props.a;\\n          ^\\n4:   props[a];\\n5:   props.a.b;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 43\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 48\n\t\t},\n\t\t\"position\": [\n\t\t\t43,\n\t\t\t48\n\t\t],\n\t\t\"frame\": \"2:   let props = $props();\\n3:   props.a;\\n4:   props[a];\\n          ^\\n5:   props.a.b;\\n6:   props.a.b = true;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 54\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 59\n\t\t},\n\t\t\"position\": [\n\t\t\t54,\n\t\t\t59\n\t\t],\n\t\t\"frame\": \"3:   props.a;\\n4:   props[a];\\n5:   props.a.b;\\n          ^\\n6:   props.a.b = true;\\n7:   props.a = true;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 66\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 71\n\t\t},\n\t\t\"position\": [\n\t\t\t66,\n\t\t\t71\n\t\t],\n\t\t\"frame\": \"4:   props[a];\\n5:   props.a.b;\\n6:   props.a.b = true;\\n          ^\\n7:   props.a = true;\\n8:   props[a] = true;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 85\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 90\n\t\t},\n\t\t\"position\": [\n\t\t\t85,\n\t\t\t90\n\t\t],\n\t\t\"frame\": \" 5:   props.a.b;\\n 6:   props.a.b = true;\\n 7:   props.a = true;\\n           ^\\n 8:   props[a] = true;\\n 9:   props;\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 102\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 107\n\t\t},\n\t\t\"position\": [\n\t\t\t102,\n\t\t\t107\n\t\t],\n\t\t\"frame\": \" 6:   props.a.b = true;\\n 7:   props.a = true;\\n 8:   props[a] = true;\\n           ^\\n 9:   props;\\n10: </script>\"\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\\nhttps://svelte.dev/e/state_referenced_locally\",\n\t\t\"filename\": \"packages/svelte/tests/snapshot/samples/props-identifier/index.svelte\",\n\t\t\"start\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 1,\n\t\t\t\"character\": 120\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 6,\n\t\t\t\"character\": 125\n\t\t},\n\t\t\"position\": [\n\t\t\t120,\n\t\t\t125\n\t\t],\n\t\t\"frame\": \" 7:   props.a = true;\\n 8:   props[a] = true;\\n 9:   props;\\n           ^\\n10: </script>\\n11: \"\n\t}\n]"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/props-identifier/index.svelte",
    "content": "<script>\n\tlet props = $props();\n\tprops.a;\n\tprops[a];\n\tprops.a.b;\n\tprops.a.b = true;\n\tprops.a = true;\n\tprops[a] = true;\n\tprops;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/purity/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<p></p> <p></p> <!>`, 1);\n\nexport default function Purity($$anchor) {\n\tvar fragment = root();\n\tvar p = $.first_child(fragment);\n\n\tp.textContent = '0';\n\n\tvar p_1 = $.sibling(p, 2);\n\n\tp_1.textContent = location.href;\n\n\tvar node = $.sibling(p_1, 2);\n\n\tChild(node, { prop: encodeURIComponent('hello') });\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/purity/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Purity($$renderer) {\n\t$$renderer.push(`<p>0</p> <p>${$.escape(location.href)}</p> `);\n\tChild($$renderer, { prop: encodeURIComponent('hello') });\n\t$$renderer.push(`<!---->`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/purity/index.svelte",
    "content": "<p>{Math.max(0, Math.min(0, 100))}</p>\n<p>{location.href}</p>\n\n<Child prop={encodeURIComponent('hello')} />\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/select-with-rich-content/Option.svelte",
    "content": "<option>Component Option</option>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/select-with-rich-content/_expected/client/Option.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<option>Component Option</option>`);\n\nexport default function Option($$anchor) {\n\tvar option = root();\n\n\t$.append($$anchor, option);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/select-with-rich-content/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport 'svelte/internal/flags/legacy';\nimport * as $ from 'svelte/internal/client';\nimport Option from './Option.svelte';\n\nconst opt = ($$anchor) => {\n\tvar option = root_1();\n\n\t$.append($$anchor, option);\n};\n\nconst option_snippet = ($$anchor) => {\n\tvar option_1 = root_2();\n\n\t$.append($$anchor, option_1);\n};\n\nconst option_snippet2 = ($$anchor) => {\n\tvar option_2 = root_3();\n\n\t$.append($$anchor, option_2);\n};\n\nconst conditional_option = ($$anchor) => {\n\tvar option_3 = root_4();\n\n\t$.append($$anchor, option_3);\n};\n\nvar root_1 = $.from_html(`<option>Snippet</option>`);\nvar root_2 = $.from_html(`<option>Rendered</option>`);\nvar root_3 = $.from_html(`<option>Rendered in group</option>`);\nvar root_4 = $.from_html(`<option>Conditional</option>`);\nvar option_content = $.from_html(`<span>Rich</span>`, 1);\nvar root_5 = $.from_html(`<option> </option>`);\nvar root_6 = $.from_html(`<option>Visible</option>`);\nvar root_7 = $.from_html(`<option>Keyed</option>`);\nvar select_content = $.from_html(`<!>`, 1);\nvar root_8 = $.from_html(`<option> </option>`);\nvar option_content_1 = $.from_html(`<strong>Bold</strong>`, 1);\nvar root_9 = $.from_html(`<option> </option>`);\nvar option_content_2 = $.from_html(`<em>Italic</em> text`, 1);\nvar option_content_3 = $.from_html(`<span> </span>`, 1);\nvar root_10 = $.from_html(`<option><!></option>`);\nvar root_12 = $.from_html(`<option> </option>`);\nvar root_13 = $.from_html(`<option>Boundary</option>`);\nvar option_content_4 = $.from_html(`<span>Rich in boundary</span>`, 1);\nvar root_14 = $.from_html(`<option><!></option>`);\nvar select_content_1 = $.from_html(`<!>`, 1);\nvar select_content_2 = $.from_html(`<!>`, 1);\nvar select_content_3 = $.from_html(`<!>`, 1);\nvar optgroup_content = $.from_html(`<!>`, 1);\nvar optgroup_content_1 = $.from_html(`<!>`, 1);\nvar option_content_5 = $.from_html(`<!>`, 1);\nvar select_content_4 = $.from_html(`<!>`, 1);\nvar select_content_5 = $.from_html(`<!>`, 1);\nvar root = $.from_html(`<select><option><!></option></select> <select></select> <select><!></select> <select><!></select>  <select><!></select> <select></select> <select><optgroup label=\"Group\"><option><!></option></optgroup></select> <select><optgroup label=\"Group\"></optgroup></select> <select><option><!></option></select> <select></select> <select><!></select> <select><!></select> <select><!></select> <select><!></select>  <select><!></select> <select><!></select> <select><optgroup label=\"Group\"><!></optgroup></select>  <select><optgroup label=\"Group\"><!></optgroup></select> <select><option><!></option></select> <select><!></select>  <select><!></select>`, 1);\n\nexport default function Select_with_rich_content($$anchor) {\n\tlet items = [1, 2, 3];\n\tlet show = true;\n\tlet html = '<option>From HTML</option>';\n\tvar fragment = root();\n\tvar select = $.first_child(fragment);\n\tvar option_4 = $.child(select);\n\n\t$.customizable_select(option_4, () => {\n\t\tvar anchor = $.child(option_4);\n\t\tvar fragment_1 = option_content();\n\n\t\t$.append(anchor, fragment_1);\n\t});\n\n\t$.reset(select);\n\n\tvar select_1 = $.sibling(select, 2);\n\n\t$.each(select_1, 5, () => items, $.index, ($$anchor, item) => {\n\t\tvar option_5 = root_5();\n\t\tvar text = $.child(option_5, true);\n\n\t\t$.reset(option_5);\n\n\t\tvar option_5_value = {};\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_text(text, $.get(item));\n\n\t\t\tif (option_5_value !== (option_5_value = $.get(item))) {\n\t\t\t\toption_5.__value = $.get(item);\n\t\t\t}\n\t\t});\n\n\t\t$.append($$anchor, option_5);\n\t});\n\n\t$.reset(select_1);\n\n\tvar select_2 = $.sibling(select_1, 2);\n\tvar node = $.child(select_2);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar option_6 = root_6();\n\n\t\t\t$.append($$anchor, option_6);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (show) $$render(consequent);\n\t\t});\n\t}\n\n\t$.reset(select_2);\n\n\tvar select_3 = $.sibling(select_2, 2);\n\tvar node_1 = $.child(select_3);\n\n\t$.key(node_1, () => items, ($$anchor) => {\n\t\tvar option_7 = root_7();\n\n\t\t$.append($$anchor, option_7);\n\t});\n\n\t$.reset(select_3);\n\n\tvar select_4 = $.sibling(select_3, 2);\n\n\t$.customizable_select(select_4, () => {\n\t\tvar anchor_1 = $.child(select_4);\n\t\tvar fragment_2 = select_content();\n\t\tvar node_2 = $.first_child(fragment_2);\n\n\t\topt(node_2);\n\t\t$.append(anchor_1, fragment_2);\n\t});\n\n\tvar select_5 = $.sibling(select_4, 2);\n\n\t$.each(select_5, 5, () => items, $.index, ($$anchor, item) => {\n\t\tconst x = $.derived_safe_equal(() => $.get(item) * 2);\n\t\tvar option_8 = root_8();\n\t\tvar text_1 = $.child(option_8, true);\n\n\t\t$.reset(option_8);\n\n\t\tvar option_8_value = {};\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_text(text_1, $.get(x));\n\n\t\t\tif (option_8_value !== (option_8_value = $.get(x))) {\n\t\t\t\toption_8.__value = $.get(x);\n\t\t\t}\n\t\t});\n\n\t\t$.append($$anchor, option_8);\n\t});\n\n\t$.reset(select_5);\n\n\tvar select_6 = $.sibling(select_5, 2);\n\tvar optgroup = $.child(select_6);\n\tvar option_9 = $.child(optgroup);\n\n\t$.customizable_select(option_9, () => {\n\t\tvar anchor_2 = $.child(option_9);\n\t\tvar fragment_3 = option_content_1();\n\n\t\t$.append(anchor_2, fragment_3);\n\t});\n\n\t$.reset(optgroup);\n\t$.reset(select_6);\n\n\tvar select_7 = $.sibling(select_6, 2);\n\tvar optgroup_1 = $.child(select_7);\n\n\t$.each(optgroup_1, 5, () => items, $.index, ($$anchor, item) => {\n\t\tvar option_10 = root_9();\n\t\tvar text_2 = $.child(option_10, true);\n\n\t\t$.reset(option_10);\n\n\t\tvar option_10_value = {};\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_text(text_2, $.get(item));\n\n\t\t\tif (option_10_value !== (option_10_value = $.get(item))) {\n\t\t\t\toption_10.__value = $.get(item);\n\t\t\t}\n\t\t});\n\n\t\t$.append($$anchor, option_10);\n\t});\n\n\t$.reset(optgroup_1);\n\t$.reset(select_7);\n\n\tvar select_8 = $.sibling(select_7, 2);\n\tvar option_11 = $.child(select_8);\n\n\t$.customizable_select(option_11, () => {\n\t\tvar anchor_3 = $.child(option_11);\n\t\tvar fragment_4 = option_content_2();\n\n\t\t$.next();\n\t\t$.append(anchor_3, fragment_4);\n\t});\n\n\toption_11.value = option_11.__value = 'a';\n\t$.reset(select_8);\n\n\tvar select_9 = $.sibling(select_8, 2);\n\n\t$.each(select_9, 5, () => items, $.index, ($$anchor, item) => {\n\t\tvar option_12 = root_10();\n\n\t\t$.customizable_select(option_12, () => {\n\t\t\tvar anchor_4 = $.child(option_12);\n\t\t\tvar fragment_5 = option_content_3();\n\t\t\tvar span = $.first_child(fragment_5);\n\t\t\tvar text_3 = $.child(span, true);\n\n\t\t\t$.reset(span);\n\t\t\t$.template_effect(() => $.set_text(text_3, $.get(item)));\n\t\t\t$.append(anchor_4, fragment_5);\n\t\t});\n\n\t\t$.append($$anchor, option_12);\n\t});\n\n\t$.reset(select_9);\n\n\tvar select_10 = $.sibling(select_9, 2);\n\tvar node_3 = $.child(select_10);\n\n\t{\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar fragment_6 = $.comment();\n\t\t\tvar node_4 = $.first_child(fragment_6);\n\n\t\t\t$.each(node_4, 1, () => items, $.index, ($$anchor, item) => {\n\t\t\t\tvar option_13 = root_12();\n\t\t\t\tvar text_4 = $.child(option_13, true);\n\n\t\t\t\t$.reset(option_13);\n\n\t\t\t\tvar option_13_value = {};\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_text(text_4, $.get(item));\n\n\t\t\t\t\tif (option_13_value !== (option_13_value = $.get(item))) {\n\t\t\t\t\t\toption_13.__value = $.get(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$.append($$anchor, option_13);\n\t\t\t});\n\n\t\t\t$.append($$anchor, fragment_6);\n\t\t};\n\n\t\t$.if(node_3, ($$render) => {\n\t\t\tif (show) $$render(consequent_1);\n\t\t});\n\t}\n\n\t$.reset(select_10);\n\n\tvar select_11 = $.sibling(select_10, 2);\n\tvar node_5 = $.child(select_11);\n\n\t$.boundary(node_5, {}, ($$anchor) => {\n\t\tvar option_14 = root_13();\n\n\t\t$.append($$anchor, option_14);\n\t});\n\n\t$.reset(select_11);\n\n\tvar select_12 = $.sibling(select_11, 2);\n\tvar node_6 = $.child(select_12);\n\n\t$.boundary(node_6, {}, ($$anchor) => {\n\t\tvar option_15 = root_14();\n\n\t\t$.customizable_select(option_15, () => {\n\t\t\tvar anchor_5 = $.child(option_15);\n\t\t\tvar fragment_7 = option_content_4();\n\n\t\t\t$.append(anchor_5, fragment_7);\n\t\t});\n\n\t\t$.append($$anchor, option_15);\n\t});\n\n\t$.reset(select_12);\n\n\tvar select_13 = $.sibling(select_12, 2);\n\n\t$.customizable_select(select_13, () => {\n\t\tvar anchor_6 = $.child(select_13);\n\t\tvar fragment_8 = select_content_1();\n\t\tvar node_7 = $.first_child(fragment_8);\n\n\t\tOption(node_7, {});\n\t\t$.append(anchor_6, fragment_8);\n\t});\n\n\tvar select_14 = $.sibling(select_13, 2);\n\n\t$.customizable_select(select_14, () => {\n\t\tvar anchor_7 = $.child(select_14);\n\t\tvar fragment_9 = select_content_2();\n\t\tvar node_8 = $.first_child(fragment_9);\n\n\t\toption_snippet(node_8);\n\t\t$.append(anchor_7, fragment_9);\n\t});\n\n\tvar select_15 = $.sibling(select_14, 2);\n\n\t$.customizable_select(select_15, () => {\n\t\tvar anchor_8 = $.child(select_15);\n\t\tvar fragment_10 = select_content_3();\n\t\tvar node_9 = $.first_child(fragment_10);\n\n\t\t$.html(node_9, () => html);\n\t\t$.append(anchor_8, fragment_10);\n\t});\n\n\tvar select_16 = $.sibling(select_15, 2);\n\tvar optgroup_2 = $.child(select_16);\n\n\t$.customizable_select(optgroup_2, () => {\n\t\tvar anchor_9 = $.child(optgroup_2);\n\t\tvar fragment_11 = optgroup_content();\n\t\tvar node_10 = $.first_child(fragment_11);\n\n\t\tOption(node_10, {});\n\t\t$.append(anchor_9, fragment_11);\n\t});\n\n\t$.reset(select_16);\n\n\tvar select_17 = $.sibling(select_16, 2);\n\tvar optgroup_3 = $.child(select_17);\n\n\t$.customizable_select(optgroup_3, () => {\n\t\tvar anchor_10 = $.child(optgroup_3);\n\t\tvar fragment_12 = optgroup_content_1();\n\t\tvar node_11 = $.first_child(fragment_12);\n\n\t\toption_snippet2(node_11);\n\t\t$.append(anchor_10, fragment_12);\n\t});\n\n\t$.reset(select_17);\n\n\tvar select_18 = $.sibling(select_17, 2);\n\tvar option_16 = $.child(select_18);\n\n\t$.customizable_select(option_16, () => {\n\t\tvar anchor_11 = $.child(option_16);\n\t\tvar fragment_13 = option_content_5();\n\t\tvar node_12 = $.first_child(fragment_13);\n\n\t\t$.html(node_12, () => '<strong>Bold HTML</strong>');\n\t\t$.append(anchor_11, fragment_13);\n\t});\n\n\t$.reset(select_18);\n\n\tvar select_19 = $.sibling(select_18, 2);\n\n\t$.customizable_select(select_19, () => {\n\t\tvar anchor_12 = $.child(select_19);\n\t\tvar fragment_14 = select_content_4();\n\t\tvar node_13 = $.first_child(fragment_14);\n\n\t\t$.each(node_13, 1, () => items, $.index, ($$anchor, item) => {\n\t\t\tOption($$anchor, {});\n\t\t});\n\n\t\t$.append(anchor_12, fragment_14);\n\t});\n\n\tvar select_20 = $.sibling(select_19, 2);\n\n\t$.customizable_select(select_20, () => {\n\t\tvar anchor_13 = $.child(select_20);\n\t\tvar fragment_16 = select_content_5();\n\t\tvar node_14 = $.first_child(fragment_16);\n\n\t\t{\n\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\tconditional_option($$anchor);\n\t\t\t};\n\n\t\t\t$.if(node_14, ($$render) => {\n\t\t\t\tif (show) $$render(consequent_2);\n\t\t\t});\n\t\t}\n\n\t\t$.append(anchor_13, fragment_16);\n\t});\n\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/select-with-rich-content/_expected/server/Option.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Option($$renderer) {\n\t$$renderer.option({}, ($$renderer) => {\n\t\t$$renderer.push(`Component Option`);\n\t});\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/select-with-rich-content/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\nimport Option from './Option.svelte';\n\nfunction opt($$renderer) {\n\t$$renderer.option({}, ($$renderer) => {\n\t\t$$renderer.push(`Snippet`);\n\t});\n}\n\nfunction option_snippet($$renderer) {\n\t$$renderer.option({}, ($$renderer) => {\n\t\t$$renderer.push(`Rendered`);\n\t});\n}\n\nfunction option_snippet2($$renderer) {\n\t$$renderer.option({}, ($$renderer) => {\n\t\t$$renderer.push(`Rendered in group`);\n\t});\n}\n\nfunction conditional_option($$renderer) {\n\t$$renderer.option({}, ($$renderer) => {\n\t\t$$renderer.push(`Conditional`);\n\t});\n}\n\nexport default function Select_with_rich_content($$renderer) {\n\tlet items = [1, 2, 3];\n\tlet show = true;\n\tlet html = '<option>From HTML</option>';\n\n\t$$renderer.push(`<select>`);\n\n\t$$renderer.option(\n\t\t{},\n\t\t($$renderer) => {\n\t\t\t$$renderer.push(`<span>Rich</span>`);\n\t\t},\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\ttrue\n\t);\n\n\t$$renderer.push(`</select> <select><!--[-->`);\n\n\tconst each_array = $.ensure_array_like(items);\n\n\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\tlet item = each_array[$$index];\n\n\t\t$$renderer.option({}, item);\n\t}\n\n\t$$renderer.push(`<!--]--></select> <select>`);\n\n\tif (show) {\n\t\t$$renderer.push('<!--[0-->');\n\n\t\t$$renderer.option({}, ($$renderer) => {\n\t\t\t$$renderer.push(`Visible`);\n\t\t});\n\t} else {\n\t\t$$renderer.push('<!--[-1-->');\n\t}\n\n\t$$renderer.push(`<!--]--></select> <select><!---->`);\n\n\t{\n\t\t$$renderer.option({}, ($$renderer) => {\n\t\t\t$$renderer.push(`Keyed`);\n\t\t});\n\t}\n\n\t$$renderer.push(`<!----></select>  <select>`);\n\topt($$renderer);\n\t$$renderer.push(`<!----><!></select> <select><!--[-->`);\n\n\tconst each_array_1 = $.ensure_array_like(items);\n\n\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\tlet item = each_array_1[$$index_1];\n\t\tconst x = item * 2;\n\n\t\t$$renderer.option({}, x);\n\t}\n\n\t$$renderer.push(`<!--]--></select> <select><optgroup label=\"Group\">`);\n\n\t$$renderer.option(\n\t\t{},\n\t\t($$renderer) => {\n\t\t\t$$renderer.push(`<strong>Bold</strong>`);\n\t\t},\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\ttrue\n\t);\n\n\t$$renderer.push(`</optgroup></select> <select><optgroup label=\"Group\"><!--[-->`);\n\n\tconst each_array_2 = $.ensure_array_like(items);\n\n\tfor (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n\t\tlet item = each_array_2[$$index_2];\n\n\t\t$$renderer.option({}, item);\n\t}\n\n\t$$renderer.push(`<!--]--></optgroup></select> <select>`);\n\n\t$$renderer.option(\n\t\t{ value: 'a' },\n\t\t($$renderer) => {\n\t\t\t$$renderer.push(`<em>Italic</em> text`);\n\t\t},\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\ttrue\n\t);\n\n\t$$renderer.push(`</select> <select><!--[-->`);\n\n\tconst each_array_3 = $.ensure_array_like(items);\n\n\tfor (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {\n\t\tlet item = each_array_3[$$index_3];\n\n\t\t$$renderer.option(\n\t\t\t{},\n\t\t\t($$renderer) => {\n\t\t\t\t$$renderer.push(`<span>${$.escape(item)}</span>`);\n\t\t\t},\n\t\t\tvoid 0,\n\t\t\tvoid 0,\n\t\t\tvoid 0,\n\t\t\tvoid 0,\n\t\t\ttrue\n\t\t);\n\t}\n\n\t$$renderer.push(`<!--]--></select> <select>`);\n\n\tif (show) {\n\t\t$$renderer.push('<!--[0-->');\n\t\t$$renderer.push(`<!--[-->`);\n\n\t\tconst each_array_4 = $.ensure_array_like(items);\n\n\t\tfor (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {\n\t\t\tlet item = each_array_4[$$index_4];\n\n\t\t\t$$renderer.option({}, item);\n\t\t}\n\n\t\t$$renderer.push(`<!--]-->`);\n\t} else {\n\t\t$$renderer.push('<!--[-1-->');\n\t}\n\n\t$$renderer.push(`<!--]--></select> <select>`);\n\t$$renderer.push(`<!--[-->`);\n\n\t{\n\t\t$$renderer.option({}, ($$renderer) => {\n\t\t\t$$renderer.push(`Boundary`);\n\t\t});\n\t}\n\n\t$$renderer.push(`<!--]-->`);\n\t$$renderer.push(`</select> <select>`);\n\t$$renderer.push(`<!--[-->`);\n\n\t{\n\t\t$$renderer.option(\n\t\t\t{},\n\t\t\t($$renderer) => {\n\t\t\t\t$$renderer.push(`<span>Rich in boundary</span>`);\n\t\t\t},\n\t\t\tvoid 0,\n\t\t\tvoid 0,\n\t\t\tvoid 0,\n\t\t\tvoid 0,\n\t\t\ttrue\n\t\t);\n\t}\n\n\t$$renderer.push(`<!--]-->`);\n\t$$renderer.push(`</select> <select>`);\n\tOption($$renderer, {});\n\t$$renderer.push(`<!----><!></select>  <select>`);\n\toption_snippet($$renderer);\n\t$$renderer.push(`<!----><!></select> <select>${$.html(html)}<!></select> <select><optgroup label=\"Group\">`);\n\tOption($$renderer, {});\n\t$$renderer.push(`<!----><!></optgroup></select>  <select><optgroup label=\"Group\">`);\n\toption_snippet2($$renderer);\n\t$$renderer.push(`<!----><!></optgroup></select> <select>`);\n\n\t$$renderer.option(\n\t\t{},\n\t\t($$renderer) => {\n\t\t\t$$renderer.push(`${$.html('<strong>Bold HTML</strong>')}`);\n\t\t},\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\tvoid 0,\n\t\ttrue\n\t);\n\n\t$$renderer.push(`</select> <select><!--[-->`);\n\n\tconst each_array_5 = $.ensure_array_like(items);\n\n\tfor (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {\n\t\tlet item = each_array_5[$$index_5];\n\n\t\tOption($$renderer, {});\n\t}\n\n\t$$renderer.push(`<!--]--><!></select>  <select>`);\n\n\tif (show) {\n\t\t$$renderer.push('<!--[0-->');\n\t\tconditional_option($$renderer);\n\t} else {\n\t\t$$renderer.push('<!--[-1-->');\n\t}\n\n\t$$renderer.push(`<!--]--><!></select>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/select-with-rich-content/index.svelte",
    "content": "<script>\n\tlet items = [1, 2, 3];\n\tlet show = true;\n\tlet html = '<option>From HTML</option>';\n\n\timport Option from './Option.svelte';\n</script>\n\n<!-- select with rich option (has span inside) - SHOULD use customizable_select_element -->\n<select>\n\t<option><span>Rich</span></option>\n</select>\n\n<!-- select with each containing plain options - should NOT use customizable_select_element -->\n<select>\n\t{#each items as item}\n\t\t<option>{item}</option>\n\t{/each}\n</select>\n\n<!-- select with if containing plain options - should NOT use customizable_select_element -->\n<select>\n\t{#if show}\n\t\t<option>Visible</option>\n\t{/if}\n</select>\n\n<!-- select with key containing plain options - should NOT use customizable_select_element -->\n<select>\n\t{#key items}\n\t\t<option>Keyed</option>\n\t{/key}\n</select>\n\n<!-- select with snippet defined at top level and rendered - should NOT use customizable_select_element -->\n{#snippet opt()}\n\t<option>Snippet</option>\n{/snippet}\n<select>\n\t{@render opt()}\n</select>\n\n<!-- select with const inside each (should be ignored) - should NOT use customizable_select_element -->\n<select>\n\t{#each items as item}\n\t\t{@const x = item * 2}\n\t\t<option>{x}</option>\n\t{/each}\n</select>\n\n<!-- optgroup with rich option - SHOULD use customizable_select_element -->\n<select>\n\t<optgroup label=\"Group\">\n\t\t<option><strong>Bold</strong></option>\n\t</optgroup>\n</select>\n\n<!-- optgroup with each containing plain options - should NOT use customizable_select_element -->\n<select>\n\t<optgroup label=\"Group\">\n\t\t{#each items as item}\n\t\t\t<option>{item}</option>\n\t\t{/each}\n\t</optgroup>\n</select>\n\n<!-- option with rich content (span) - SHOULD use customizable_select_element -->\n<select>\n\t<option value=\"a\"><em>Italic</em> text</option>\n</select>\n\n<!-- nested: select > each > option with rich content - SHOULD use customizable_select_element on option -->\n<select>\n\t{#each items as item}\n\t\t<option><span>{item}</span></option>\n\t{/each}\n</select>\n\n<!-- nested: select > if > each > plain options - should NOT use customizable_select_element -->\n<select>\n\t{#if show}\n\t\t{#each items as item}\n\t\t\t<option>{item}</option>\n\t\t{/each}\n\t{/if}\n</select>\n\n<!-- select with svelte:boundary containing plain options - should NOT use customizable_select_element -->\n<select>\n\t<svelte:boundary>\n\t\t<option>Boundary</option>\n\t</svelte:boundary>\n</select>\n\n<!-- select with svelte:boundary containing rich options - SHOULD use customizable_select_element on option -->\n<select>\n\t<svelte:boundary>\n\t\t<option><span>Rich in boundary</span></option>\n\t</svelte:boundary>\n</select>\n\n<!-- select with Component - SHOULD be treated as rich content -->\n<select>\n\t<Option />\n</select>\n\n<!-- select with @render snippet - SHOULD be treated as rich content -->\n{#snippet option_snippet()}\n\t<option>Rendered</option>\n{/snippet}\n<select>\n\t{@render option_snippet()}\n</select>\n\n<!-- select with @html - SHOULD be treated as rich content -->\n<select>\n\t{@html html}\n</select>\n\n<!-- optgroup with Component - SHOULD be treated as rich content -->\n<select>\n\t<optgroup label=\"Group\">\n\t\t<Option />\n\t</optgroup>\n</select>\n\n<!-- optgroup with @render - SHOULD be treated as rich content -->\n{#snippet option_snippet2()}\n\t<option>Rendered in group</option>\n{/snippet}\n<select>\n\t<optgroup label=\"Group\">\n\t\t{@render option_snippet2()}\n\t</optgroup>\n</select>\n\n<!-- option with @html inside - SHOULD use customizable_select_element -->\n<select>\n\t<option>{@html '<strong>Bold HTML</strong>'}</option>\n</select>\n\n<!-- each block inside select with Component - SHOULD be treated as rich -->\n<select>\n\t{#each items as item}\n\t\t<Option />\n\t{/each}\n</select>\n\n<!-- if block inside select with @render - SHOULD be treated as rich -->\n{#snippet conditional_option()}\n\t<option>Conditional</option>\n{/snippet}\n<select>\n\t{#if show}\n\t\t{@render conditional_option()}\n\t{/if}\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<header><nav><a href=\"/\">Home</a> <a href=\"/away\">Away</a></nav></header> <main><h1> </h1> <div class=\"static\"><p>we don't need to traverse these nodes</p></div> <p>or</p> <p>these</p> <p>ones</p> <!> <p>these</p> <p>trailing</p> <p>nodes</p> <p>can</p> <p>be</p> <p>completely</p> <p>ignored</p></main> <cant-skip><custom-elements></custom-elements></cant-skip> <div><input/></div> <div><source/></div> <select><option>a</option></select> <img src=\"...\" alt=\"\" loading=\"lazy\"/> <div><img src=\"...\" alt=\"\" loading=\"lazy\"/></div>`, 3);\n\nexport default function Skip_static_subtree($$anchor, $$props) {\n\tvar fragment = root();\n\tvar main = $.sibling($.first_child(fragment), 2);\n\tvar h1 = $.child(main);\n\tvar text = $.child(h1, true);\n\n\t$.reset(h1);\n\n\tvar node = $.sibling(h1, 10);\n\n\t$.html(node, () => $$props.content);\n\t$.next(14);\n\t$.reset(main);\n\n\tvar cant_skip = $.sibling(main, 2);\n\tvar custom_elements = $.child(cant_skip);\n\n\t$.set_custom_element_data(custom_elements, 'with', 'attributes');\n\t$.reset(cant_skip);\n\n\tvar div = $.sibling(cant_skip, 2);\n\tvar input = $.child(div);\n\n\t$.autofocus(input, true);\n\t$.reset(div);\n\n\tvar div_1 = $.sibling(div, 2);\n\tvar source = $.child(div_1);\n\n\tsource.muted = true;\n\t$.reset(div_1);\n\n\tvar select = $.sibling(div_1, 2);\n\tvar option = $.child(select);\n\n\toption.value = option.__value = 'a';\n\t$.reset(select);\n\n\tvar img = $.sibling(select, 2);\n\n\t$.next(2);\n\t$.template_effect(() => $.set_text(text, $$props.title));\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Skip_static_subtree($$renderer, $$props) {\n\tlet { title, content } = $$props;\n\n\t$$renderer.push(`<header><nav><a href=\"/\">Home</a> <a href=\"/away\">Away</a></nav></header> <main><h1>${$.escape(title)}</h1> <div class=\"static\"><p>we don't need to traverse these nodes</p></div> <p>or</p> <p>these</p> <p>ones</p> ${$.html(content)} <p>these</p> <p>trailing</p> <p>nodes</p> <p>can</p> <p>be</p> <p>completely</p> <p>ignored</p></main> <cant-skip><custom-elements with=\"attributes\"></custom-elements></cant-skip> <div><input autofocus=\"\"/></div> <div><source muted=\"\"/></div> <select>`);\n\n\t$$renderer.option({ value: 'a' }, ($$renderer) => {\n\t\t$$renderer.push(`a`);\n\t});\n\n\t$$renderer.push(`</select> <img src=\"...\" alt=\"\" loading=\"lazy\"/> <div><img src=\"...\" alt=\"\" loading=\"lazy\"/></div>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/skip-static-subtree/index.svelte",
    "content": "<script>\n\tlet { title, content } = $props();\n</script>\n\n<header>\n\t<nav>\n\t\t<a href=\"/\">Home</a>\n\t\t<a href=\"/away\">Away</a>\n\t</nav>\n</header>\n\n<main>\n\t<h1>{title}</h1>\n\t<div class=\"static\">\n\t\t<p>we don't need to traverse these nodes</p>\n\t</div>\n\t<p>or</p>\n\t<p>these</p>\n\t<p>ones</p>\n\t{@html content}\n\t<p>these</p>\n\t<p>trailing</p>\n\t<p>nodes</p>\n\t<p>can</p>\n\t<p>be</p>\n\t<p>completely</p>\n\t<p>ignored</p>\n</main>\n\n<cant-skip>\n\t<custom-elements with=\"attributes\"></custom-elements>\n</cant-skip>\n\n<div>\n\t<!-- svelte-ignore a11y_autofocus -->\n\t<input autofocus />\n</div>\n\n<div>\n\t<source muted />\n</div>\n\n<select>\n\t<option value=\"a\">a</option>\n</select>\n\n<img src=\"...\" alt=\"\" loading=\"lazy\" />\n<div>\n\t<img src=\"...\" alt=\"\" loading=\"lazy\" />\n</div>"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/state-proxy-literal/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<input/> <input/> <button>reset</button>`, 1);\n\nexport default function State_proxy_literal($$anchor) {\n\tlet str = $.state('');\n\tlet tpl = $.state(``);\n\n\tfunction reset() {\n\t\t$.set(str, '');\n\t\t$.set(str, ``);\n\t\t$.set(tpl, '');\n\t\t$.set(tpl, ``);\n\t}\n\n\tvar fragment = root();\n\tvar input = $.first_child(fragment);\n\n\t$.remove_input_defaults(input);\n\n\tvar input_1 = $.sibling(input, 2);\n\n\t$.remove_input_defaults(input_1);\n\n\tvar button = $.sibling(input_1, 2);\n\n\t$.bind_value(input, () => $.get(str), ($$value) => $.set(str, $$value));\n\t$.bind_value(input_1, () => $.get(tpl), ($$value) => $.set(tpl, $$value));\n\t$.delegated('click', button, reset);\n\t$.append($$anchor, fragment);\n}\n\n$.delegate(['click']);"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function State_proxy_literal($$renderer) {\n\tlet str = '';\n\tlet tpl = ``;\n\n\tfunction reset() {\n\t\tstr = '';\n\t\tstr = ``;\n\t\ttpl = '';\n\t\ttpl = ``;\n\t}\n\n\t$$renderer.push(`<input${$.attr('value', str)}/> <input${$.attr('value', tpl)}/> <button>reset</button>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/state-proxy-literal/index.svelte",
    "content": "<script>\n\tlet str = $state('');\n\tlet tpl = $state(``);\n\n\tfunction reset() {\n\t\tstr = '';\n\t\tstr = ``;\n\n\t\ttpl = '';\n\t\ttpl = ``;\n\t}\n</script>\n\n<input bind:value={str} />\n<input bind:value={tpl} />\n\n<button onclick={reset}>reset</button>\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/svelte-element/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nexport default function Svelte_element($$anchor, $$props) {\n\tlet tag = $.prop($$props, 'tag', 3, 'hr');\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t$.element(node, tag, false);\n\t$.append($$anchor, fragment);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Svelte_element($$renderer, $$props) {\n\tlet { tag = 'hr' } = $$props;\n\n\t$.element($$renderer, tag);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/svelte-element/index.svelte",
    "content": "<script>\n\tlet { tag = 'hr' } = $props();\n</script>\n\n<svelte:element this={tag}  />\n"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js",
    "content": "import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<p> </p>`);\n\nexport default function Text_nodes_deriveds($$anchor) {\n\tlet count1 = 0;\n\tlet count2 = 0;\n\n\tfunction text1() {\n\t\treturn count1;\n\t}\n\n\tfunction text2() {\n\t\treturn count2;\n\t}\n\n\tvar p = root();\n\tvar text = $.child(p);\n\n\t$.reset(p);\n\t$.template_effect(($0, $1) => $.set_text(text, `${$0 ?? ''}${$1 ?? ''}`), [() => text1(), () => text2()]);\n\t$.append($$anchor, p);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/server/index.svelte.js",
    "content": "import * as $ from 'svelte/internal/server';\n\nexport default function Text_nodes_deriveds($$renderer) {\n\tlet count1 = 0;\n\tlet count2 = 0;\n\n\tfunction text1() {\n\t\treturn count1;\n\t}\n\n\tfunction text2() {\n\t\treturn count2;\n\t}\n\n\t$$renderer.push(`<p>${$.escape(text1())}${$.escape(text2())}</p>`);\n}"
  },
  {
    "path": "packages/svelte/tests/snapshot/samples/text-nodes-deriveds/index.svelte",
    "content": "<script>\n\tlet count1=$state(0);\n\tlet count2=$state(0);\n\n\tfunction text1(){\n\t\treturn count1;\n\t}\n\n\tfunction text2(){\n\t\treturn count2;\n\t}\n</script>\n\n<p>{text1()}{text2()}</p>"
  },
  {
    "path": "packages/svelte/tests/snapshot/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert, expect } from 'vitest';\nimport { globSync } from 'tinyglobby';\nimport { compile_directory } from '../helpers.js';\nimport { suite, type BaseTest } from '../suite.js';\nimport { VERSION } from 'svelte/compiler';\n\ninterface SnapshotTest extends BaseTest {\n\tcompileOptions?: Partial<import('#compiler').CompileOptions>;\n}\n\nconst { test, run } = suite<SnapshotTest>(async (config, cwd) => {\n\tawait compile_directory(cwd, 'client', config.compileOptions);\n\tawait compile_directory(cwd, 'server', config.compileOptions);\n\n\t// run `UPDATE_SNAPSHOTS=true pnpm test snapshot` to update snapshot tests\n\tif (process.env.UPDATE_SNAPSHOTS) {\n\t\tfs.rmSync(`${cwd}/_expected`, { recursive: true, force: true });\n\t\tfs.cpSync(`${cwd}/_output`, `${cwd}/_expected`, { recursive: true, force: true });\n\t} else {\n\t\tconst actual = globSync('**', { cwd: `${cwd}/_output`, onlyFiles: true });\n\t\tconst expected = globSync('**', { cwd: `${cwd}/_expected`, onlyFiles: true });\n\n\t\tassert.deepEqual(actual, expected);\n\n\t\tfor (const file of actual) {\n\t\t\tconst actual_content = fs\n\t\t\t\t.readFileSync(`${cwd}/_output/${file}`, 'utf-8')\n\t\t\t\t.replaceAll('\\r\\n', '\\n')\n\t\t\t\t.trimEnd()\n\t\t\t\t.replace(`v${VERSION}`, 'VERSION');\n\t\t\tconst expected_content = fs\n\t\t\t\t.readFileSync(`${cwd}/_expected/${file}`, 'utf-8')\n\t\t\t\t.replaceAll('\\r\\n', '\\n')\n\t\t\t\t.trimEnd();\n\n\t\t\texpect(actual_content).toBe(expected_content);\n\t\t}\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/helpers.js",
    "content": "/** @import { Location } from 'locate-character' */\nimport * as assert from 'node:assert';\nimport * as path from 'node:path';\nimport { getLocator } from 'locate-character';\nimport MagicString, { Bundle } from 'magic-string';\n\n/**\n * @typedef {{ code: string; filename?: string; input: string | ReturnType<typeof getLocator>; input_code?: string; preprocessed: any; }} AssertMappedParameters\n */\n\n/**\n * @param {AssertMappedParameters} param\n */\nexport function assert_mapped({ code, filename, input, input_code, preprocessed }) {\n\tconst locate_input = typeof input === 'function' ? input : getLocator(input);\n\tif (filename === undefined) filename = 'input.svelte';\n\tif (input_code === undefined) input_code = code;\n\n\tconst source_loc = /** @type {Location} */ (locate_input(input_code));\n\tassert.notEqual(source_loc, undefined, `failed to locate \"${input_code}\" in \"${filename}\"`);\n\n\tconst transformed_loc = preprocessed.locate_1(code);\n\tassert.notEqual(\n\t\ttransformed_loc,\n\t\tundefined,\n\t\t`failed to locate \"${code}\" in transformed \"${filename}\"`\n\t);\n\n\tassert.deepEqual(\n\t\tpreprocessed.mapConsumer.originalPositionFor(transformed_loc),\n\t\t{\n\t\t\tsource: filename,\n\t\t\tname: null,\n\t\t\tline: source_loc.line + 1,\n\t\t\tcolumn: source_loc.column\n\t\t},\n\t\t`incorrect mappings for \"${input_code}\" in \"${filename}\"`\n\t);\n}\n\n/**\n * @typedef {{ code: string; filename?: string; preprocessed: any; }} AssertNotMappedParameters\n */\n\n/**\n * @param {AssertNotMappedParameters} param\n */\nexport function assert_not_mapped({ code, filename, preprocessed }) {\n\tif (filename === undefined) filename = 'input.svelte';\n\n\tconst transformed_loc = preprocessed.locate_1(code);\n\tassert.notEqual(\n\t\ttransformed_loc,\n\t\tundefined,\n\t\t`failed to locate \"${code}\" in transformed \"${filename}\"`\n\t);\n\n\tassert.deepEqual(\n\t\tpreprocessed.mapConsumer.originalPositionFor(transformed_loc),\n\t\t{\n\t\t\tsource: null,\n\t\t\tname: null,\n\t\t\tline: null,\n\t\t\tcolumn: null\n\t\t},\n\t\t`incorrect mappings for \"${code}\" in \"${filename}\"`\n\t);\n}\n\n/**\n * @param {string} code\n * @param {ReturnType<typeof getLocator>} locate\n * @param {string} filename\n */\nexport function assert_not_located(code, locate, filename = 'input.svelte') {\n\tassert.equal(\n\t\tlocate(code),\n\t\tundefined,\n\t\t`located \"${code}\" that should be removed from ${filename}`\n\t);\n}\n\n/**\n * @param {Array<{ code: string | MagicString, filename: string }>} inputs\n * @param {string} filename\n * @param {string} separator\n * @returns\n */\nexport function magic_string_bundle(inputs, filename = 'bundle.js', separator = '\\n') {\n\tconst bundle = new Bundle({ separator });\n\tinputs.forEach(({ code, filename }) => {\n\t\tbundle.addSource({\n\t\t\tfilename,\n\t\t\tcontent: typeof code === 'string' ? new MagicString(code) : code\n\t\t});\n\t});\n\treturn {\n\t\tcode: bundle.toString(),\n\t\tmap: bundle.generateMap({\n\t\t\tsource: filename,\n\t\t\thires: true,\n\t\t\tincludeContent: false\n\t\t})\n\t};\n}\n\n/**\n * @param {string} filename\n * @param {MagicString} src\n * @returns\n */\nexport function magic_string_preprocessor_result(filename, src) {\n\treturn {\n\t\tcode: src.toString(),\n\t\tmap: src.generateMap({\n\t\t\tsource: path.basename(filename), // preprocessors are expected to return `sources: [file_basename]`\n\t\t\thires: true,\n\t\t\tincludeContent: false\n\t\t})\n\t};\n}\n\n/**\n * @param {MagicString} src\n * @param {string} search\n * @param {string} replace\n */\nexport function magic_string_replace_all(src, search, replace) {\n\tlet idx = src.original.indexOf(search);\n\tif (idx == -1) throw new Error('search not found in src');\n\tdo {\n\t\tsrc.overwrite(idx, idx + search.length, replace, { storeName: true });\n\t} while ((idx = src.original.indexOf(search, idx + 1)) != -1);\n}\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/attached-sourcemap/_config.js",
    "content": "/** @import { PreprocessorGroup, Preprocessor } from '../../../../src/compiler/public' */\nimport * as path from 'node:path';\nimport MagicString from 'magic-string';\nimport { test } from '../../test';\n\nlet indent_size = 4;\nlet comment_multi = true;\n\n/**\n *\n * @param {'script' | 'style'} tag_name\n * @param {string} search\n * @param {string} replace\n * @returns {PreprocessorGroup}\n */\nfunction get_processor(tag_name, search, replace) {\n\t/** @type {Preprocessor} */\n\tconst preprocessor = ({ content, filename = '' }) => {\n\t\tlet code = content.slice();\n\t\tconst ms = new MagicString(code);\n\n\t\tconst idx = ms.original.indexOf(search);\n\t\tif (idx == -1) throw new Error('search not found in src');\n\t\tms.overwrite(idx, idx + search.length, replace, { storeName: true });\n\n\t\t// change line + column\n\t\tconst indent = Array.from({ length: indent_size }).join(' ');\n\t\tms.prependLeft(idx, '\\n' + indent);\n\n\t\tconst map_opts = { source: path.basename(filename), hires: true, includeContent: false };\n\t\tconst map = ms.generateMap(map_opts);\n\t\tconst attach_line =\n\t\t\ttag_name == 'style' || comment_multi\n\t\t\t\t? `\\n/*# sourceMappingURL=${map.toUrl()} */`\n\t\t\t\t: `\\n//# sourceMappingURL=${map.toUrl()}`; // only in script\n\t\tcode = ms.toString() + attach_line;\n\n\t\tindent_size += 2;\n\t\tif (tag_name == 'script') comment_multi = !comment_multi;\n\t\treturn { code };\n\t};\n\n\treturn {\n\t\t[tag_name]: preprocessor\n\t};\n}\n\nexport default test({\n\tpreprocess: [\n\t\tget_processor('script', 'replace_me_script', 'done_replace_script_1'),\n\t\tget_processor('script', 'done_replace_script_1', 'done_replace_script_2'),\n\n\t\tget_processor('style', '.replace_me_style', '.done_replace_style_1'),\n\t\tget_processor('style', '.done_replace_style_1', '.done_replace_style_2')\n\t],\n\tclient: [\n\t\t{ str: 'replace_me_script', strGenerated: 'done_replace_script_2' },\n\t\t{ str: 'done_replace_script_2', idxGenerated: 1 }\n\t],\n\tcss: [{ str: '.replace_me_style', strGenerated: '.done_replace_style_2.svelte-1vsrjd4' }],\n\ttest({ assert, code_preprocessed, code_css }) {\n\t\tassert.equal(\n\t\t\tcode_preprocessed.includes('\\n/*# sourceMappingURL=data:application/json;base64,'),\n\t\t\tfalse,\n\t\t\t'magic-comment attachments were NOT removed'\n\t\t);\n\t\tassert.equal(\n\t\t\tcode_css.includes('\\n/*# sourceMappingURL=data:application/json;base64,'),\n\t\t\tfalse,\n\t\t\t'magic-comment attachments were NOT removed'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/attached-sourcemap/input.svelte",
    "content": "<style>\n\t.replace_me_style {\n\t\tcolor: red;\n\t}\n</style>\n<script>\n\tlet\n\t\treplace_me_script = 'hello'\n\t;\n</script>\n<h1 class=\"done_replace_style_2\">{Math.random() < 1 && done_replace_script_2}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/basic/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tclient: ['bar.baz'],\n\tserver: ['bar.baz']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/basic/input.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{foo.bar.baz}\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/binding/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tclient: ['bar.baz'],\n\tserver: ['bar.baz']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/binding/input.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n<input bind:value={foo.bar.baz}>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/binding-shorthand/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip: true, // No source map for binding in template because there's no loc property for it; skipped in Svelte 4, too\n\tclient: [\n\t\t'potato',\n\t\t{ str: 'potato', idxOriginal: 1, idxGenerated: 3 },\n\t\t{ str: 'potato', idxOriginal: 1, idxGenerated: 5 }\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/binding-shorthand/input.svelte",
    "content": "<script>\n\texport let potato;\n</script>\n\n{potato}\n<Widget bind:potato/>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/css/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcss: [{ str: '.foo', strGenerated: '.foo.svelte-1eyw86p' }]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/css/input.svelte",
    "content": "<p class='foo'>red</p>\n\n<style>\n\t.foo {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/css-injected-map/_config.js",
    "content": "/** @import { Location } from 'locate-character' */\nimport MagicString from 'magic-string';\nimport { TraceMap, originalPositionFor } from '@jridgewell/trace-mapping';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\nimport { getLocator } from 'locate-character';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true,\n\t\tcss: 'injected'\n\t},\n\tpreprocess: [\n\t\t{\n\t\t\tstyle: ({ content, filename = '' }) => {\n\t\t\t\tconst src = new MagicString(content);\n\t\t\t\tmagic_string_replace_all(src, '--replace-me-once', '\\n --done-replace-once');\n\t\t\t\tmagic_string_replace_all(src, '--replace-me-twice', '\\n--almost-done-replace-twice');\n\t\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tstyle: ({ content, filename = '' }) => {\n\t\t\t\tconst src = new MagicString(content);\n\t\t\t\tmagic_string_replace_all(src, '--almost-done-replace-twice', '\\n  --done-replace-twice');\n\t\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t\t}\n\t\t}\n\t],\n\tasync test({ assert, code_client }) {\n\t\t// Check that the css source map embedded in the js is accurate\n\t\tconst match = code_client.match(\n\t\t\t/code: '(.*?)(?:\\\\n\\/\\*# sourceMappingURL=data:(.*?);charset=(.*?);base64,(.*?) \\*\\/)?'/\n\t\t);\n\n\t\tassert.ok(match);\n\n\t\tconst [css, mime_type, encoding, css_map_base64] = /** @type {RegExpMatchArray} */ (\n\t\t\tmatch\n\t\t).slice(1);\n\t\tassert.equal(mime_type, 'application/json');\n\t\tassert.equal(encoding, 'utf-8');\n\n\t\tconst css_map_json = Buffer.from(css_map_base64, 'base64').toString();\n\t\tconst map = new TraceMap(css_map_json);\n\t\tconst sourcefile = '../../input.svelte';\n\t\tconst locate = getLocator(\n\t\t\tcss.replace(/\\\\r/g, '\\r').replace(/\\\\n/g, '\\n').replace(/\\\\t/g, '\\t'),\n\t\t\t{ offsetLine: 1 }\n\t\t);\n\n\t\t/** @type {const} */ ([\n\t\t\t['--keep-me: blue', null, 13, 2],\n\t\t\t['--done-replace-once: red', '--replace-me-once', 7, 2],\n\t\t\t['--done-replace-twice: green', '--replace-me-twice', 10, 2]\n\t\t]).forEach(([content, name, line, column]) => {\n\t\t\tassert.deepEqual(\n\t\t\t\toriginalPositionFor(map, /** @type {Location} */ (locate(content))),\n\t\t\t\t{\n\t\t\t\t\tsource: sourcefile,\n\t\t\t\t\tname,\n\t\t\t\t\tline,\n\t\t\t\t\tcolumn\n\t\t\t\t},\n\t\t\t\t`failed to locate \"${content}\" from \"${sourcefile}\"`\n\t\t\t);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/css-injected-map/input.svelte",
    "content": "<h1>Testing Styles</h1>\n<h2>Testing Styles 2</h2>\n<div>Testing Styles 3</div>\n<script>export const b = 2;</script>\n<style>\n\th1 {\n\t\t--replace-me-once: red;\n\t}\n\th2 {\n\t\t--replace-me-twice: green;\n\t}\n\tdiv {\n\t\t--keep-me: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/decoded-sourcemap/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: {\n\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tmagic_string_replace_all(src, 'replace me', 'success');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t}\n\t},\n\tclient: [],\n\tpreprocessed: [{ str: 'replace me', strGenerated: 'success' }]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/decoded-sourcemap/input.svelte",
    "content": "<h1>decoded-sourcemap</h1>\n<div>replace me</div>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/each-block/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tclient: ['foo', 'bar', { str: 'bar', idxGenerated: 1, idxOriginal: 1 }]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/each-block/input.svelte",
    "content": "{#each foo as bar}\n\t<span>{bar}</span>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/effects/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tclient: [\n\t\t{ str: '$effect.pre', strGenerated: '$.user_pre_effect' },\n\t\t{ str: '$effect', strGenerated: '$.user_effect' }\n\t],\n\tserver: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/effects/input.svelte",
    "content": "<script lang=\"ts\">\n\t$effect(() => {\n\t\tfoo;\n\t});\n\n\t$effect.pre(() => {\n\t\tbar;\n\t});\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/external/_config.js",
    "content": "import { test } from '../../test';\nimport { magic_string_bundle } from '../../helpers.js';\n\nconst COMMON = ':global(html) { height: 100%; }\\n';\n\n// TODO: removing '\\n' breaks test\n// - _actual.svelte.map looks correct\n// - _actual.css.map adds reference to </style> on input.svelte\n// - Most probably caused by bug in current magic-string version (fixed in 0.25.7)\nconst STYLES = '.awesome { color: orange; }\\n';\n\nexport default test({\n\tcss_map_sources: ['common.scss', 'styles.scss'],\n\tpreprocess: [\n\t\t{\n\t\t\tstyle: () => {\n\t\t\t\treturn magic_string_bundle([\n\t\t\t\t\t{ filename: 'common.scss', code: COMMON },\n\t\t\t\t\t{ filename: 'styles.scss', code: STYLES }\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t],\n\tclient: [],\n\tpreprocessed: [\n\t\t'Divs ftw!',\n\t\t{ code: COMMON, str: 'height: 100%;' },\n\t\t{ code: STYLES, str: 'color: orange;' }\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/external/input.svelte",
    "content": "<style lang=\"scss\" src=\"./styles.scss\"></style>\n\n<div class=\"awesome\">Divs ftw!</div>"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/markup/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tskip: true, // TODO no source maps here; Svelte 4 added some for static templates due to https://github.com/sveltejs/svelte/issues/6092\n\tclient: []\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/markup/input.svelte",
    "content": "<h1>decoded-sourcemap</h1>\n<div>replace me</div>"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-markup/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: {\n\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tmagic_string_replace_all(src, 'baritone', 'bar');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t}\n\t},\n\tclient: [{ str: 'baritone', strGenerated: 'bar' }, 'baz']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-markup/input.svelte",
    "content": "<script>\n\texport let foo;\n</script>\n\n{foo.baritone.baz}\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-multiple/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: {\n\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tmagic_string_replace_all(src, 'baritone', 'bar');\n\t\t\tmagic_string_replace_all(src, '--bazitone', '--baz');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t},\n\t\tscript: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tconst idx = content.indexOf('bar');\n\t\t\tsrc.prependLeft(idx, '      ');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t},\n\t\tstyle: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tconst idx = content.indexOf('--baz');\n\t\t\tsrc.prependLeft(idx, '      ');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t}\n\t},\n\tclient: [{ str: 'baritone', strGenerated: 'bar' }],\n\tcss: [\n\t\t{ str: 'background-color: var(--bazitone)', strGenerated: 'background-color: var(      --baz)' }\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-multiple/input.svelte",
    "content": "<script>\n\texport let foo = { baritone: 5 }\n</script>\n<style>\n\th1 {\n\t\tbackground-color: var(--bazitone);\n\t}\n</style>\n<h1>multiple {foo}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-no-map/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tstyle: ({ content }) => {\n\t\t\t\t// Modified without source map\n\t\t\t\treturn { code: content + ' ' };\n\t\t\t},\n\t\t\tscript: ({ content }) => {\n\t\t\t\t// Not modified\n\t\t\t\treturn { code: content };\n\t\t\t}\n\t\t}\n\t],\n\tclient: [],\n\tpreprocessed: [\n\t\t// markup (start)\n\t\t'<script>',\n\t\t// script content (preprocessed without map, content not changed)\n\t\t'console.log(name);',\n\t\t// markup (middle)\n\t\t'<div>{name}</div>',\n\t\t// style content (preprocessed without map, content changed)\n\t\t{ str: 'font-weight: bold;', strGenerated: null },\n\t\t// markup (end)\n\t\t'</style>'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-no-map/input.svelte",
    "content": "<script>\n\texport let name;\n\n\tconsole.log(name);\n</script>\n\n<main>\n\t<div>{name}</div>\n</main>\n\n<style>\n\tmain { font-weight: bold; }\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-script/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: {\n\t\tscript: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tmagic_string_replace_all(src, 'baritone', 'bar');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t}\n\t},\n\tclient: [{ str: 'baritone', strGenerated: 'bar' }, 'baz']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-script/input.svelte",
    "content": "<style>\n\th1 {\n\t\tcolor: red;\n\t}\n</style>\n<script>\n\texport let foo = { baritone: { baz: 5 } }\n</script>\n<h1>{foo.bar.baz}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-styles/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tmagic_string_replace_all(src, 'baritone', 'bar');\n\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t}\n\t},\n\tcss: [{ str: '--baritone: red', strGenerated: '--bar: red' }, '--baz: blue']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/preprocessed-styles/input.svelte",
    "content": "<h1>Testing Styles</h1>\n<h2>Testing Styles 2</h2>\n<script>export const b = 2;</script>\n<style>\n\th1 {\n\t\t--baritone: red;\n\t}\n\n\th2 {\n\t\t--baz: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tclient: ['42']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/script/input.svelte",
    "content": "<script>\n\timport { onMount } from 'svelte';\n\n\tonMount(() => {\n\t\tconsole.log(42);\n\t});\n</script>\n\n<div></div>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/script-after-comment/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ client: ['assertThisLine'] });\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/script-after-comment/input.svelte",
    "content": "<!--\n\tMultiline\n\tcomment\n-->\n<script>\n\tfunction assertThisLine() {}\n</script>\n\n{foo.bar.baz}\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/source-map-generator/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { SourceMapConsumer, SourceMapGenerator } from 'source-map';\nimport * as path from 'node:path';\n\nexport default test({\n\tpreprocess: {\n\t\tstyle: async ({ content, filename = '' }) => {\n\t\t\tconst src = new MagicString(content);\n\t\t\tconst idx = content.indexOf('baritone');\n\t\t\tsrc.overwrite(idx, idx + 'baritone'.length, 'bar');\n\n\t\t\t// This test checks that the sourcemap format from source-map\n\t\t\t// also works with our preprocessor merging.\n\t\t\tconst map = SourceMapGenerator.fromSourceMap(\n\t\t\t\tawait new SourceMapConsumer(\n\t\t\t\t\t// sourcemap must be encoded for SourceMapConsumer\n\t\t\t\t\tsrc.generateMap({\n\t\t\t\t\t\tsource: path.basename(filename),\n\t\t\t\t\t\thires: true,\n\t\t\t\t\t\tincludeContent: false\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn { code: src.toString(), map };\n\t\t}\n\t},\n\tcss: [{ str: '--baritone: red', strGenerated: '--bar: red' }, '--baz: blue']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/source-map-generator/input.svelte",
    "content": "<h1>Testing Styles</h1>\n<h2>Testing Styles 2</h2>\n<script>export const b = 2;</script>\n<style>\n\th1 {\n\t\t--baritone: red;\n\t}\n\n\th2 {\n\t\t--baz: blue;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-basename/_config.js",
    "content": "import { test } from '../../test';\nimport { magic_string_bundle } from '../../helpers.js';\n\nexport const component_filepath = 'src/input.svelte';\n\nexport const component_file_basename = 'input.svelte';\n\n// as output by external tool for src/external_code.css (relative to src/input.svelte)\nexport const external_relative_filename = 'external_code.css';\n\nconst external_code = `\nspan {\n\t--external_code-var: 1px;\n}\n`;\n\nexport default test({\n\tcss_map_sources: [external_relative_filename],\n\tpreprocess: [\n\t\t{\n\t\t\tstyle: ({ content, filename = '' }) => {\n\t\t\t\tconst external = `/* Filename from preprocess: ${filename} */` + external_code;\n\t\t\t\treturn magic_string_bundle([\n\t\t\t\t\t{ code: external, filename: external_relative_filename },\n\t\t\t\t\t{ code: content, filename }\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t],\n\toptions: {\n\t\tfilename: component_filepath\n\t},\n\tclient: [],\n\tpreprocessed: ['Hello world'],\n\ttest({ assert, code_preprocessed, map_preprocessed }) {\n\t\tassert.include(\n\t\t\tcode_preprocessed,\n\t\t\t`/* Filename from preprocess: ${component_filepath} */`,\n\t\t\t'Preprocessor should receive same value for filename as passed to preprocess function'\n\t\t);\n\n\t\tassert.deepEqual(\n\t\t\tmap_preprocessed.sources.slice().sort(),\n\t\t\t[external_relative_filename, component_file_basename].sort(),\n\t\t\t'Preprocessed map should contain sources relative to filepath'\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-basename/input.svelte",
    "content": "<style src=\"external_code.css\"></style>\n\n<span>Hello world</span>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-basename-without-outputname/_config.js",
    "content": "import { test } from '../../test';\nimport { magic_string_bundle } from '../../helpers.js';\n\nexport const component_filepath = 'src/some/deep/path/input.svelte';\nexport const component_file_basename = 'input.svelte';\nexport const css_file_basename = 'input.css';\n\nconst input_css = ' h1 {color: blue;}';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tstyle: ({ content, filename }) => {\n\t\t\t\tconst style_to_add = `/* Filename from preprocess: ${filename} */` + input_css;\n\t\t\t\treturn magic_string_bundle(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ code: content, filename: component_file_basename },\n\t\t\t\t\t\t{ code: style_to_add, filename: css_file_basename }\n\t\t\t\t\t],\n\t\t\t\t\tcomponent_filepath\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t],\n\tjs_map_sources: [component_file_basename],\n\tcss_map_sources: [css_file_basename, component_file_basename],\n\toptions: {\n\t\tfilename: component_filepath\n\t},\n\tcompileOptions: {\n\t\tfilename: component_filepath,\n\t\t// compile_directory initializes output filenames, reset to undefined for this test\n\t\toutputFilename: undefined,\n\t\tcssOutputFilename: undefined\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-basename-without-outputname/input.svelte",
    "content": "<h1>sourcemap-basename-without-outputname</h1>\n<style src=\"input.css\">h1 {color: red;}</style>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-concat/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tscript: ({ content }) => {\n\t\t\t\tconst src = new MagicString(content);\n\t\t\t\tsrc.prepend('console.log(\"Injected first line\");\\n');\n\t\t\t\treturn magic_string_preprocessor_result('input.svelte', src);\n\t\t\t}\n\t\t}\n\t],\n\tclient: [\"'Target'\"],\n\tpreprocessed: [\"'Target'\"]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-concat/input.svelte",
    "content": "<script>console.log('Target')</script>\n\n<h1>Hello</h1>"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-names/_config.js",
    "content": "import MagicString from 'magic-string';\nimport { test } from '../../test';\nimport { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers.js';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\t\tconst src = new MagicString(content);\n\t\t\t\tmagic_string_replace_all(src, 'baritone', 'bar');\n\t\t\t\tmagic_string_replace_all(src, '--bazitone', '--baz');\n\t\t\t\tmagic_string_replace_all(src, 'old_name_1', 'temp_new_name_1');\n\t\t\t\tmagic_string_replace_all(src, 'old_name_2', 'temp_new_name_2');\n\t\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\t\tconst src = new MagicString(content);\n\t\t\t\tmagic_string_replace_all(src, 'temp_new_name_1', 'temp_temp_new_name_1');\n\t\t\t\tmagic_string_replace_all(src, 'temp_new_name_2', 'temp_temp_new_name_2');\n\t\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tmarkup: ({ content, filename = '' }) => {\n\t\t\t\tconst src = new MagicString(content);\n\t\t\t\tmagic_string_replace_all(src, 'temp_temp_new_name_1', 'new_name_1');\n\t\t\t\tmagic_string_replace_all(src, 'temp_temp_new_name_2', 'new_name_2');\n\t\t\t\treturn magic_string_preprocessor_result(filename, src);\n\t\t\t}\n\t\t}\n\t],\n\tclient: [\n\t\t{ str: 'baritone', strGenerated: 'bar' },\n\t\t{ str: 'old_name_1', strGenerated: 'new_name_1' },\n\t\t{ str: 'old_name_2', strGenerated: 'new_name_2' }\n\t],\n\tpreprocessed: [\n\t\t{ str: 'baritone', strGenerated: 'bar' },\n\t\t{ str: 'old_name_1', strGenerated: 'new_name_1' },\n\t\t{ str: 'old_name_2', strGenerated: 'new_name_2' },\n\t\t{ str: '--bazitone', strGenerated: '--baz' }\n\t],\n\tcss: [{ str: 'background-color: var(--bazitone)', strGenerated: 'background-color: var(--baz)' }],\n\ttest({ assert, map_preprocessed }) {\n\t\tassert.deepEqual(\n\t\t\tmap_preprocessed.names.sort(),\n\t\t\t['baritone', '--bazitone', 'old_name_1', 'old_name_2'].sort()\n\t\t);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-names/input.svelte",
    "content": "<script>\n\texport let old_name_1 = { baritone: 5 };\n\tlet old_name_2 = 'value_2';\n</script>\n<style>\n\tdiv {\n\t\tbackground-color: var(--bazitone);\n\t}\n</style>\n<h1>use-names</h1>\n<div>{old_name_1.baritone}</div>\n<pre style=\"color: var(--bazitone)\">{old_name_2}</pre>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-offsets/_config.js",
    "content": "import { test } from '../../test';\nimport { magic_string_bundle } from '../../helpers.js';\n\nconst EXTERNAL = 'span { --external-var: 1px; }';\n\nexport default test({\n\tcss_map_sources: ['input.svelte', 'external.css'],\n\tpreprocess: [\n\t\t{\n\t\t\tstyle: ({ content }) => {\n\t\t\t\treturn magic_string_bundle([\n\t\t\t\t\t{ code: EXTERNAL, filename: 'external.css' },\n\t\t\t\t\t{ code: content, filename: 'input.svelte' }\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t],\n\tpreprocessed: [{ str: '--component-var: 2px' }, { code: EXTERNAL, str: '--external-var: 1px' }]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-offsets/input.svelte",
    "content": "<script>\n\t// This block is here to offset style block\n</script>\n\n<style>\n\tdiv { --component-var: 2px; }\n</style>\n\n<div><span>Text</span></div>"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-sources/_config.js",
    "content": "import MagicString, { Bundle } from 'magic-string';\nimport * as path from 'node:path';\nimport { test } from '../../test';\n\n/**\n * @param {Bundle} bundle\n * @param {string} filename\n * @param {string} source\n */\nfunction add(bundle, filename, source) {\n\tbundle.addSource({\n\t\tfilename,\n\t\tcontent: new MagicString(source),\n\t\t// @ts-ignore TODO\n\t\tseparator: '\\n'\n\t\t//separator: '' // ERROR. probably a bug in magic-string\n\t});\n}\n\n/**\n * @param {Bundle} bundle\n * @param {string} filename\n */\nfunction result(bundle, filename) {\n\treturn {\n\t\tcode: bundle.toString(),\n\t\tmap: bundle.generateMap({\n\t\t\tfile: filename,\n\t\t\tincludeContent: false,\n\t\t\thires: true // required for remapping\n\t\t})\n\t};\n}\n\nconst FOO = 'var answer = 42; // foo.js\\n';\nconst BAR = 'console.log(answer); // bar.js\\n';\nconst FOO2 = 'var answer2 = 84; // foo2.js\\n';\nconst BAR2 = 'console.log(answer2); // bar2.js\\n';\n\nexport default test({\n\tjs_map_sources: [\n\t\t'../../input.svelte',\n\t\t'../../foo.js',\n\t\t'../../bar.js',\n\t\t'../../foo2.js',\n\t\t'../../bar2.js'\n\t],\n\tpreprocess: [\n\t\t{\n\t\t\tscript: ({ content, filename = '' }) => {\n\t\t\t\tconst bundle = new Bundle();\n\n\t\t\t\tadd(bundle, path.basename(filename), content);\n\t\t\t\tadd(bundle, 'foo.js', FOO);\n\t\t\t\tadd(bundle, 'bar.js', BAR);\n\n\t\t\t\treturn result(bundle, path.basename(filename));\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tscript: ({ content, filename = '' }) => {\n\t\t\t\tconst bundle = new Bundle();\n\n\t\t\t\tadd(bundle, path.basename(filename), content);\n\t\t\t\tadd(bundle, 'foo2.js', FOO2);\n\t\t\t\tadd(bundle, 'bar2.js', BAR2);\n\n\t\t\t\treturn result(bundle, path.basename(filename));\n\t\t\t}\n\t\t}\n\t],\n\tclient: [\n\t\t{\n\t\t\tcode: FOO,\n\t\t\tstr: 'answer'\n\t\t},\n\t\t{\n\t\t\tcode: BAR,\n\t\t\tstr: 'answer',\n\t\t\tidxGenerated: 1\n\t\t},\n\t\t{\n\t\t\tcode: FOO2,\n\t\t\tstr: 'answer2'\n\t\t},\n\t\t{\n\t\t\tcode: BAR2,\n\t\t\tstr: 'answer2',\n\t\t\tidxGenerated: 1\n\t\t}\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/sourcemap-sources/input.svelte",
    "content": "<script>\n\texport let name;\n</script>\n<h1>sourcemap-sources {name}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/static-no-script/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\ttest({ assert, map_client }) {\n\t\tassert.deepEqual(map_client.sources, ['../../input.svelte']);\n\t\t// TODO do we need to set sourcesContent? We did it in Svelte 4, but why?\n\t\t// assert.deepEqual(js.map.sourcesContent, [\n\t\t// \tfs.readFileSync(path.join(__dirname, 'input.svelte'), 'utf-8')\n\t\t// ]);\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/static-no-script/input.svelte",
    "content": "<p>no moving parts</p>"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/two-scripts/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tclient: ['first', 'assertThisLine']\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/two-scripts/input.svelte",
    "content": "<script module>\n\texport let first;\n</script>\n\n<script>\n\tfunction assertThisLine() {}\n</script>\n\n{foo.bar.baz}\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/typescript/_config.js",
    "content": "import * as ts from 'typescript';\nimport { test } from '../../test';\n\nexport default test({\n\tpreprocess: [\n\t\t{\n\t\t\tscript: ({ content, filename }) => {\n\t\t\t\tconst { outputText, sourceMapText } = ts.transpileModule(content, {\n\t\t\t\t\tfileName: filename,\n\t\t\t\t\tcompilerOptions: {\n\t\t\t\t\t\ttarget: ts.ScriptTarget.ES2015,\n\t\t\t\t\t\tmodule: ts.ModuleKind.ES2015,\n\t\t\t\t\t\tsourceMap: true\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tcode: outputText,\n\t\t\t\t\tmap: sourceMapText\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t],\n\tclient: ['count', 'setInterval'],\n\tpreprocessed: [\n\t\t{ str: 'let count: number = 0;', strGenerated: 'let count = 0;' },\n\t\t{ str: 'ITimeoutDestroyer', strGenerated: null },\n\t\t'<h1>Hello world!</h1>'\n\t]\n});\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/samples/typescript/input.svelte",
    "content": "<script lang=\"ts\">\n\timport { onMount } from 'svelte';\n\n\tlet count: number = 0;\n\n\tinterface ITimeoutDestroyer {\n\t\t(): void; // send timeout to the void!\n\t}\n\n\tonMount(() => {\n\t\tconst id = setInterval(() => count++, 1000);\n\t\tconst clear: ITimeoutDestroyer = () => clearInterval(id);\n\t\treturn clear;\n\t});\n</script>\n\n<h1>Hello world!</h1>\n<div>Counter value: {count}</div>\n"
  },
  {
    "path": "packages/svelte/tests/sourcemaps/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { assert } from 'vitest';\nimport { getLocator, locate } from 'locate-character';\nimport { suite, type BaseTest } from '../suite.js';\nimport { compile_directory } from '../helpers.js';\nimport { decode } from '@jridgewell/sourcemap-codec';\n\ntype SourceMapEntry =\n\t| string\n\t| {\n\t\t\t/** If not the first occurrence, but the nth should be found */\n\t\t\tidxOriginal?: number;\n\t\t\t/** If not the first occurrence, but the nth should be found */\n\t\t\tidxGenerated?: number;\n\t\t\t/** The original string to find */\n\t\t\tstr: string;\n\t\t\t/** The generated string to find. You can omit this if it's the same as the original string */\n\t\t\tstrGenerated?: string | null;\n\t\t\t/** If the original code lives in a different file, pass its source code here */\n\t\t\tcode?: string;\n\t  };\n\ninterface SourcemapTest extends BaseTest {\n\toptions?: { filename: string };\n\tcompileOptions?: Partial<import('#compiler').CompileOptions>;\n\tpreprocess?:\n\t\t| import('../../src/compiler/public').PreprocessorGroup\n\t\t| import('../../src/compiler/public').PreprocessorGroup[];\n\t/** The expected `sources` array in the source map */\n\tjs_map_sources?: string[];\n\t/** The expected `sources` array in the source map */\n\tcss_map_sources?: string[];\n\ttest?: (obj: {\n\t\tassert: typeof assert;\n\t\tinput: string;\n\t\tmap_preprocessed: any;\n\t\tcode_preprocessed: string;\n\t\tmap_css: any;\n\t\tcode_css: string;\n\t\tmap_client: any;\n\t\tcode_client: string;\n\t}) => void;\n\t/** Mappings to check in generated client code */\n\tclient?: SourceMapEntry[] | null;\n\t/** Mappings to check in generated server code. If left out, will use the client code checks */\n\tserver?: SourceMapEntry[];\n\t/** Mappings to check in generated css code */\n\tcss?: SourceMapEntry[] | null;\n\t/** Mappings to check in preprocessed Svelte code */\n\tpreprocessed?: SourceMapEntry[];\n}\n\nconst { test, run } = suite<SourcemapTest>(async (config, cwd) => {\n\tawait compile_directory(cwd, 'client', config.compileOptions, true, {\n\t\tpreprocess: config.preprocess,\n\t\toptions: config.options\n\t});\n\tawait compile_directory(cwd, 'server', config.compileOptions, true, {\n\t\tpreprocess: config.preprocess,\n\t\toptions: config.options\n\t});\n\n\tconst input = fs.readFileSync(`${cwd}/input.svelte`, 'utf-8');\n\n\tfunction compare(info: string, output: string, map: any, entries: SourceMapEntry[]) {\n\t\tconst output_locator = getLocator(output);\n\n\t\t/** Find line/column of string in original code */\n\t\tfunction find_original(entry: SourceMapEntry, idx = 0) {\n\t\t\tlet str;\n\t\t\tlet source;\n\t\t\tif (typeof entry === 'string') {\n\t\t\t\tstr = entry;\n\t\t\t\tsource = input;\n\t\t\t} else if (entry.code) {\n\t\t\t\tstr = entry.str;\n\t\t\t\tsource = entry.code;\n\t\t\t} else {\n\t\t\t\tstr = entry.str;\n\t\t\t\tsource = input;\n\t\t\t}\n\n\t\t\tconst original = locate(source, source.indexOf(str, idx));\n\t\t\tif (!original)\n\t\t\t\tthrow new Error(`Could not find '${str}'${idx > 0 ? ` after index ${idx}` : ''} in input`);\n\t\t\treturn original;\n\t\t}\n\n\t\t/** Find line/column of string in generated code */\n\t\tfunction find_generated(str: string, idx = 0) {\n\t\t\tconst generated = output_locator(output.indexOf(str, idx));\n\t\t\tif (!generated)\n\t\t\t\tthrow new Error(`Could not find '${str}'${idx > 0 ? ` after index ${idx}` : ''} in output`);\n\t\t\treturn generated;\n\t\t}\n\n\t\tconst decoded = decode(map.mappings);\n\n\t\t/*\n\t\tDecoded sourcemap mappings contain absolute line/column numbers.\n\t\tNegative values are invalid and can cause errors in downstream processing\n\t\t*/\n\t\tfor (let l = 0; l < decoded.length; l++) {\n\t\t\tfor (let m of decoded[l]) {\n\t\t\t\tif (m.some((i) => i < 0)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Invalid mapping with negative value ${JSON.stringify(m)} at line ${l} of the decoded mappings of ${info} sourcemap\\n${JSON.stringify(map)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tfor (let entry of entries) {\n\t\t\t\tentry = typeof entry === 'string' ? { str: entry } : entry;\n\n\t\t\t\tconst str = entry.str;\n\n\t\t\t\t// Find generated line/column\n\t\t\t\tconst generated_str = entry.strGenerated ?? str;\n\t\t\t\tif (entry.strGenerated === null) {\n\t\t\t\t\tif (!output.includes(generated_str)) continue;\n\t\t\t\t}\n\t\t\t\tlet generated = find_generated(generated_str);\n\t\t\t\tif (entry.idxGenerated) {\n\t\t\t\t\tlet i = entry.idxGenerated;\n\t\t\t\t\twhile (i-- > 0) {\n\t\t\t\t\t\tgenerated = find_generated(generated_str, generated.character + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Find segment in source map pointing from generated to original\n\t\t\t\tconst segments = decoded[generated.line];\n\t\t\t\tconst segment = segments.find((segment) => segment[0] === generated.column);\n\t\t\t\tif (!segment && entry.strGenerated !== null) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Could not find segment for '${str}' in sourcemap (${generated.line}:${generated.column})`\n\t\t\t\t\t);\n\t\t\t\t} else if (segment && entry.strGenerated === null) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Found segment for '${str}' in sourcemap (${generated.line}:${generated.column}) but should not`\n\t\t\t\t\t);\n\t\t\t\t} else if (!segment) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Find original line/column\n\t\t\t\tlet original = find_original(entry);\n\t\t\t\tif (entry.idxOriginal) {\n\t\t\t\t\tlet i = entry.idxOriginal;\n\t\t\t\t\twhile (i-- > 0) {\n\t\t\t\t\t\toriginal = find_original(entry, original.character + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check that segment points to expected original\n\t\t\t\tassert.equal(segment[2], original.line, `mapped line did not match for '${str}'`);\n\t\t\t\tassert.equal(segment[3], original.column, `mapped column did not match for '${str}'`);\n\n\t\t\t\t// Same for end of string\n\t\t\t\tconst generated_end = generated.column + generated_str.length;\n\t\t\t\tconst end_segment = segments.find((segment) => segment[0] === generated_end);\n\t\t\t\tif (!end_segment) {\n\t\t\t\t\t// If the string is the last segment and it's the end of the line,\n\t\t\t\t\t// it's okay if there's no end segment (source maps save space by omitting it in that case)\n\t\t\t\t\tif (\n\t\t\t\t\t\tsegments.at(-1)![0] > generated_end ||\n\t\t\t\t\t\t!/[\\r\\n]/.test(output[generated.character + generated_str.length])\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsole.log(segments.at(-1)![0] < generated_end, segments.at(-1)![0], generated_end);\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t/[\\r\\n]/.test(output[generated.character + generated_str.length]),\n\t\t\t\t\t\t\toutput[generated.character + generated_str.length] +\n\t\t\t\t\t\t\t\t'::' +\n\t\t\t\t\t\t\t\toutput.slice(\n\t\t\t\t\t\t\t\t\tgenerated.character + generated_str.length - 10,\n\t\t\t\t\t\t\t\t\tgenerated.character + generated_str.length + 10\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Could not find end segment for '${str}' in sourcemap (${generated.line}:${generated_end})`\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tassert.equal(end_segment[2], original.line, `mapped line end did not match for '${str}'`);\n\t\t\t\tassert.equal(\n\t\t\t\t\tend_segment[3],\n\t\t\t\t\toriginal.column + str.length,\n\t\t\t\t\t`mapped column end did not match for '${str}'`\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(`Source map ${info}:\\n`);\n\t\t\tconsole.log(decoded);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tlet map_client = null;\n\tlet code_client = fs.readFileSync(`${cwd}/_output/client/input.svelte.js`, 'utf-8');\n\n\tif (config.client === null) {\n\t\tassert.equal(\n\t\t\tfs.existsSync(`${cwd}/_output/client/input.svelte.js.map`),\n\t\t\tfalse,\n\t\t\t'Expected no source map'\n\t\t);\n\t} else {\n\t\tmap_client = JSON.parse(fs.readFileSync(`${cwd}/_output/client/input.svelte.js.map`, 'utf-8'));\n\t\tassert.deepEqual(\n\t\t\tmap_client.sources.slice().sort(),\n\t\t\t(config.js_map_sources || ['../../input.svelte']).sort(),\n\t\t\t'js.map.sources is wrong'\n\t\t);\n\n\t\tif (config.client) {\n\t\t\tcompare('client', code_client, map_client, config.client);\n\t\t}\n\t}\n\n\tif (config.client || config.server) {\n\t\tconst output_server = fs.readFileSync(`${cwd}/_output/server/input.svelte.js`, 'utf-8');\n\t\tconst map_server = JSON.parse(\n\t\t\tfs.readFileSync(`${cwd}/_output/server/input.svelte.js.map`, 'utf-8')\n\t\t);\n\n\t\tcompare(\n\t\t\t'server',\n\t\t\toutput_server,\n\t\t\tmap_server,\n\t\t\tconfig.server ??\n\t\t\t\t// Reuse client sourcemap test for server\n\t\t\t\tconfig.client ??\n\t\t\t\t[]\n\t\t);\n\t}\n\n\tlet map_css = null;\n\tlet code_css = '';\n\tif (config.css !== undefined) {\n\t\tif (config.css === null) {\n\t\t\tassert.equal(\n\t\t\t\tfs.existsSync(`${cwd}/_output/client/input.svelte.css.map`),\n\t\t\t\tfalse,\n\t\t\t\t'Expected no source map'\n\t\t\t);\n\t\t} else {\n\t\t\tcode_css = fs.readFileSync(`${cwd}/_output/client/input.svelte.css`, 'utf-8');\n\t\t\tmap_css = JSON.parse(fs.readFileSync(`${cwd}/_output/client/input.svelte.css.map`, 'utf-8'));\n\t\t\tassert.deepEqual(\n\t\t\t\tmap_css.sources.slice().sort(),\n\t\t\t\t(config.css_map_sources || ['../../input.svelte']).sort(),\n\t\t\t\t'css.map.sources is wrong'\n\t\t\t);\n\t\t\tcompare('css', code_css, map_css, config.css);\n\t\t}\n\t}\n\n\tlet map_preprocessed = null;\n\tlet code_preprocessed = '';\n\tif (config.preprocessed !== undefined) {\n\t\tif (config.preprocessed === null) {\n\t\t\tassert.equal(\n\t\t\t\tfs.existsSync(`${cwd}/_output/client/input.preprocessed.svelte.map`),\n\t\t\t\tfalse,\n\t\t\t\t'Expected no source map'\n\t\t\t);\n\t\t} else {\n\t\t\tcode_preprocessed = fs.readFileSync(\n\t\t\t\t`${cwd}/_output/client/input.preprocessed.svelte`,\n\t\t\t\t'utf-8'\n\t\t\t);\n\t\t\tmap_preprocessed = JSON.parse(\n\t\t\t\tfs.readFileSync(`${cwd}/_output/client/input.preprocessed.svelte.map`, 'utf-8')\n\t\t\t);\n\t\t\tcompare('preprocessed', code_preprocessed, map_preprocessed, config.preprocessed);\n\t\t}\n\t}\n\n\tif (config.test) {\n\t\t// TODO figure out for which tests we still need this\n\t\tconfig.test({\n\t\t\tassert,\n\t\t\tinput,\n\t\t\tmap_client,\n\t\t\tcode_client,\n\t\t\tmap_preprocessed,\n\t\t\tcode_preprocessed,\n\t\t\tcode_css,\n\t\t\tmap_css\n\t\t});\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n"
  },
  {
    "path": "packages/svelte/tests/store/test.ts",
    "content": "import { describe, it, assert } from 'vitest';\nimport {\n\treadable,\n\twritable,\n\tderived,\n\tget,\n\treadonly,\n\ttoStore,\n\ttype Readable,\n\tfromStore\n} from 'svelte/store';\nimport { source, set } from '../../src/internal/client/reactivity/sources';\nimport * as $ from '../../src/internal/client/runtime';\nimport { flushSync } from '../../src/internal/client/reactivity/batch';\nimport { effect_root, render_effect } from 'svelte/internal/client';\n\ndescribe('writable', () => {\n\tit('creates a writable store', () => {\n\t\tconst count = writable(0);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = count.subscribe((value) => {\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tcount.set(1);\n\t\tcount.update((n) => n + 1);\n\n\t\tunsubscribe();\n\n\t\tcount.set(3);\n\t\tcount.update((n) => n + 1);\n\n\t\tassert.deepEqual(values, [0, 1, 2]);\n\t});\n\n\tit('creates an undefined writable store', () => {\n\t\tconst store = writable();\n\n\t\tconst values: unknown[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tunsubscribe();\n\n\t\tassert.deepEqual(values, [undefined]);\n\t});\n\n\tit('calls provided subscribe handler', () => {\n\t\tlet called = 0;\n\n\t\tconst store = writable(0, () => {\n\t\t\tcalled += 1;\n\t\t\treturn () => (called -= 1);\n\t\t});\n\n\t\tconst unsubscribe1 = store.subscribe(() => {});\n\t\tassert.equal(called, 1);\n\n\t\tconst unsubscribe2 = store.subscribe(() => {});\n\t\tassert.equal(called, 1);\n\n\t\tunsubscribe1();\n\t\tassert.equal(called, 1);\n\n\t\tunsubscribe2();\n\t\tassert.equal(called, 0);\n\t});\n\n\tit('does not assume immutable data', () => {\n\t\tconst obj = {};\n\t\tlet called = 0;\n\n\t\tconst store = writable(obj);\n\n\t\tstore.subscribe(() => {\n\t\t\tcalled += 1;\n\t\t});\n\n\t\tstore.set(obj);\n\t\tassert.equal(called, 2);\n\n\t\tstore.update((obj) => obj);\n\t\tassert.equal(called, 3);\n\t});\n\n\tit('only calls subscriber once initially, including on resubscriptions', () => {\n\t\tlet num = 0;\n\t\tconst store = writable(num, (set) => set((num += 1)));\n\n\t\tlet count1 = 0;\n\t\tlet count2 = 0;\n\n\t\tstore.subscribe(() => (count1 += 1))();\n\t\tassert.equal(count1, 1);\n\n\t\tconst unsubscribe = store.subscribe(() => (count2 += 1));\n\t\tassert.equal(count2, 1);\n\n\t\tunsubscribe();\n\t});\n\n\tit('no error even if unsubscribe calls twice', () => {\n\t\tlet num = 0;\n\t\tconst store = writable(num, (set) => set((num += 1)));\n\t\tconst unsubscribe = store.subscribe(() => {});\n\t\tunsubscribe();\n\t\tassert.doesNotThrow(() => unsubscribe());\n\t});\n});\n\ndescribe('readable', () => {\n\tit('creates a readable store', () => {\n\t\tlet running;\n\t\tlet tick = (value: any) => {};\n\n\t\tconst store = readable(undefined, (set) => {\n\t\t\ttick = set;\n\t\t\trunning = true;\n\n\t\t\t// @ts-ignore\n\t\t\tset(0);\n\n\t\t\treturn () => {\n\t\t\t\ttick = () => {};\n\t\t\t\trunning = false;\n\t\t\t};\n\t\t});\n\n\t\tassert.ok(!running);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\t// @ts-ignore\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tassert.ok(running);\n\t\ttick(1);\n\t\ttick(2);\n\n\t\tunsubscribe();\n\n\t\tassert.ok(!running);\n\t\ttick(3);\n\t\ttick(4);\n\n\t\tassert.deepEqual(values, [0, 1, 2]);\n\t});\n\n\tit('passes an optional update function', () => {\n\t\tlet running;\n\n\t\tlet tick = (value: any) => {};\n\t\tlet add = (value: any) => {};\n\n\t\tconst store = readable(undefined, (set, update) => {\n\t\t\ttick = set;\n\t\t\trunning = true;\n\t\t\tadd = (n) => update((value) => value + n);\n\n\t\t\t// @ts-ignore\n\t\t\tset(0);\n\n\t\t\treturn () => {\n\t\t\t\ttick = () => {};\n\t\t\t\tadd = (_) => {};\n\t\t\t\trunning = false;\n\t\t\t};\n\t\t});\n\n\t\tassert.ok(!running);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\t// @ts-ignore\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tassert.ok(running);\n\t\ttick(1);\n\t\ttick(2);\n\t\tadd(3);\n\t\tadd(4);\n\t\ttick(5);\n\t\tadd(6);\n\n\t\tunsubscribe();\n\n\t\tassert.ok(!running);\n\t\ttick(7);\n\t\tadd(8);\n\n\t\tassert.deepEqual(values, [0, 1, 2, 5, 9, 5, 11]);\n\t});\n\n\tit('creates an undefined readable store', () => {\n\t\tconst store = readable();\n\n\t\tconst values: unknown[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tunsubscribe();\n\n\t\tassert.deepEqual(values, [undefined]);\n\t});\n\n\tit('creates a readable store without updater', () => {\n\t\tconst store = readable(100);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tunsubscribe();\n\n\t\tassert.deepEqual(values, [100]);\n\t});\n});\n\n/** @type {any} */\nconst fake_observable = {\n\tsubscribe(fn: (value: any) => void) {\n\t\tfn(42);\n\t\treturn {\n\t\t\tunsubscribe: () => {}\n\t\t};\n\t}\n};\n\ndescribe('derived', () => {\n\tit('maps a single store', () => {\n\t\tconst a = writable(1);\n\n\t\tconst b = derived(a, (n) => n * 2);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = b.subscribe((value) => {\n\t\t\tvalues.push(value as number);\n\t\t});\n\n\t\ta.set(2);\n\t\tassert.deepEqual(values, [2, 4]);\n\n\t\tunsubscribe();\n\n\t\ta.set(3);\n\t\tassert.deepEqual(values, [2, 4]);\n\t});\n\n\tit('maps multiple stores', () => {\n\t\tconst a = writable(2);\n\t\tconst b = writable(3);\n\n\t\tconst c = derived([a, b], ([a, b]) => a * b);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = c.subscribe((value) => {\n\t\t\tvalues.push(value as number);\n\t\t});\n\n\t\ta.set(4);\n\t\tb.set(5);\n\t\tassert.deepEqual(values, [6, 12, 20]);\n\n\t\tunsubscribe();\n\n\t\ta.set(6);\n\t\tassert.deepEqual(values, [6, 12, 20]);\n\t});\n\n\tit('passes optional set function', () => {\n\t\tconst number = writable(1);\n\t\tconst evens = derived(\n\t\t\tnumber,\n\t\t\t(n, set) => {\n\t\t\t\tif (n % 2 === 0) set(n);\n\t\t\t},\n\t\t\t0\n\t\t);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = evens.subscribe((value) => {\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tnumber.set(2);\n\t\tnumber.set(3);\n\t\tnumber.set(4);\n\t\tnumber.set(5);\n\t\tassert.deepEqual(values, [0, 2, 4]);\n\n\t\tunsubscribe();\n\n\t\tnumber.set(6);\n\t\tnumber.set(7);\n\t\tnumber.set(8);\n\t\tassert.deepEqual(values, [0, 2, 4]);\n\t});\n\n\tit('passes optional set and update functions', () => {\n\t\tconst number = writable(1);\n\t\tconst evensAndSquaresOf4 = derived(\n\t\t\tnumber,\n\t\t\t(n, set, update) => {\n\t\t\t\tif (n % 2 === 0) set(n);\n\t\t\t\tif (n % 4 === 0) update((n) => n * n);\n\t\t\t},\n\t\t\t0\n\t\t);\n\n\t\tconst values: number[] = [];\n\n\t\tconst unsubscribe = evensAndSquaresOf4.subscribe((value) => {\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\tnumber.set(2);\n\t\tnumber.set(3);\n\t\tnumber.set(4);\n\t\tnumber.set(5);\n\t\tnumber.set(6);\n\t\tassert.deepEqual(values, [0, 2, 4, 16, 6]);\n\n\t\tnumber.set(7);\n\t\tnumber.set(8);\n\t\tnumber.set(9);\n\t\tnumber.set(10);\n\t\tassert.deepEqual(values, [0, 2, 4, 16, 6, 8, 64, 10]);\n\n\t\tunsubscribe();\n\n\t\tnumber.set(11);\n\t\tnumber.set(12);\n\t\tassert.deepEqual(values, [0, 2, 4, 16, 6, 8, 64, 10]);\n\t});\n\n\tit('prevents glitches', () => {\n\t\tconst lastname = writable('Jekyll');\n\n\t\tconst firstname = derived(lastname, (n) => (n === 'Jekyll' ? 'Henry' : 'Edward'));\n\n\t\tconst fullname = derived([firstname, lastname], (names) => names.join(' '));\n\n\t\tconst values: string[] = [];\n\n\t\tconst unsubscribe = fullname.subscribe((value) => {\n\t\t\tvalues.push(value as string);\n\t\t});\n\n\t\tlastname.set('Hyde');\n\n\t\tassert.deepEqual(values, ['Henry Jekyll', 'Edward Hyde']);\n\n\t\tunsubscribe();\n\t});\n\n\tit('prevents diamond dependency problem', () => {\n\t\tconst count = writable(0);\n\n\t\tconst values: string[] = [];\n\n\t\tconst a = derived(count, ($count) => {\n\t\t\treturn 'a' + $count;\n\t\t});\n\n\t\tconst b = derived(count, ($count) => {\n\t\t\treturn 'b' + $count;\n\t\t});\n\n\t\tconst combined = derived([a, b], ([a, b]) => {\n\t\t\treturn a + b;\n\t\t});\n\n\t\tconst unsubscribe = combined.subscribe((v) => {\n\t\t\tvalues.push(v as string);\n\t\t});\n\n\t\tassert.deepEqual(values, ['a0b0']);\n\n\t\tcount.set(1);\n\t\tassert.deepEqual(values, ['a0b0', 'a1b1']);\n\n\t\tunsubscribe();\n\t});\n\n\tit('derived dependency does not update and shared ancestor updates', () => {\n\t\tconst root = writable({ a: 0, b: 0 });\n\n\t\tconst values: string[] = [];\n\n\t\tconst a = derived(root, ($root) => {\n\t\t\treturn 'a' + $root.a;\n\t\t});\n\n\t\tconst b = derived([a, root], ([$a, $root]) => {\n\t\t\treturn 'b' + $root.b + $a;\n\t\t});\n\n\t\tconst unsubscribe = b.subscribe((v) => {\n\t\t\tvalues.push(v as string);\n\t\t});\n\n\t\tassert.deepEqual(values, ['b0a0']);\n\n\t\troot.set({ a: 0, b: 1 });\n\t\tassert.deepEqual(values, ['b0a0', 'b1a0']);\n\n\t\tunsubscribe();\n\t});\n\n\tit('is updated with safe_not_equal logic', () => {\n\t\tconst arr = [0];\n\n\t\tconst number = writable(1);\n\n\t\tconst numbers = derived(number, ($number) => {\n\t\t\tarr[0] = $number;\n\t\t\treturn arr;\n\t\t});\n\n\t\tconst concatenated: number[] = [];\n\n\t\tconst unsubscribe = numbers.subscribe((value) => {\n\t\t\tconcatenated.push(...(value as number[]));\n\t\t});\n\n\t\tnumber.set(2);\n\t\tnumber.set(3);\n\n\t\tassert.deepEqual(concatenated, [1, 2, 3]);\n\n\t\tunsubscribe();\n\t});\n\n\tit('calls a cleanup function', () => {\n\t\tconst num = writable(1);\n\n\t\tconst values: number[] = [];\n\t\tconst cleaned_up: number[] = [];\n\n\t\tconst d = derived(num, ($num, set) => {\n\t\t\tset($num * 2);\n\n\t\t\treturn function cleanup() {\n\t\t\t\tcleaned_up.push($num);\n\t\t\t};\n\t\t});\n\n\t\tnum.set(2);\n\n\t\tconst unsubscribe = d.subscribe((value) => {\n\t\t\tvalues.push(value as number);\n\t\t});\n\n\t\tnum.set(3);\n\t\tnum.set(4);\n\n\t\tassert.deepEqual(values, [4, 6, 8]);\n\t\tassert.deepEqual(cleaned_up, [2, 3]);\n\n\t\tunsubscribe();\n\n\t\tassert.deepEqual(cleaned_up, [2, 3, 4]);\n\t});\n\n\tit('discards non-function return values', () => {\n\t\tconst num = writable(1);\n\n\t\tconst values: number[] = [];\n\n\t\t// @ts-expect-error TODO feels like inference should work here\n\t\tconst d = derived(num, ($num, set) => {\n\t\t\tset($num * 2);\n\t\t\treturn {};\n\t\t});\n\n\t\tnum.set(2);\n\n\t\tconst unsubscribe = d.subscribe((value) => {\n\t\t\tvalues.push(value as number);\n\t\t});\n\n\t\tnum.set(3);\n\t\tnum.set(4);\n\n\t\tassert.deepEqual(values, [4, 6, 8]);\n\n\t\tunsubscribe();\n\t});\n\n\tit('allows derived with different types', () => {\n\t\tconst a = writable('one');\n\t\tconst b = writable(1);\n\n\t\tconst c = derived([a, b], ([a, b]) => `${a} ${b}`);\n\n\t\tassert.deepEqual(get(c), 'one 1');\n\n\t\ta.set('two');\n\t\tb.set(2);\n\t\tassert.deepEqual(get(c), 'two 2');\n\t});\n\n\tit('works with RxJS-style observables', () => {\n\t\t// @ts-expect-error TODO feels like inference should work here\n\t\tconst d = derived(fake_observable, (_) => _);\n\t\tassert.equal(get(d), 42);\n\t});\n\n\tit(\"doesn't restart when unsubscribed from another store with a shared ancestor\", () => {\n\t\tconst a = writable(true);\n\t\tlet b_started = false;\n\n\t\tconst b = derived(a, (_, __) => {\n\t\t\tb_started = true;\n\t\t\treturn () => {\n\t\t\t\tassert.equal(b_started, true);\n\t\t\t\tb_started = false;\n\t\t\t};\n\t\t});\n\n\t\tconst c = derived(a, ($a, set) => {\n\t\t\tif ($a) return b.subscribe(set);\n\t\t});\n\n\t\tc.subscribe(() => {});\n\t\ta.set(false);\n\t\tassert.equal(b_started, false);\n\t});\n\n\tit('errors on undefined stores #1', () => {\n\t\tassert.throws(() => {\n\t\t\t// @ts-expect-error TODO feels like inference should work here\n\t\t\tderived(null, (n) => n);\n\t\t});\n\t});\n\n\tit('errors on undefined stores #2', () => {\n\t\tassert.throws(() => {\n\t\t\tconst a = writable(1);\n\t\t\t// @ts-expect-error TODO feels like inference should work here\n\t\t\tderived([a, null, undefined], ([n]) => {\n\t\t\t\treturn n * 2;\n\t\t\t});\n\t\t});\n\t});\n});\n\ndescribe('get', () => {\n\tit('gets the current value of a store', () => {\n\t\tconst store = readable(42, () => {});\n\t\tassert.equal(get(store), 42);\n\t});\n\n\tit('works with RxJS-style observables', () => {\n\t\tassert.equal(get(fake_observable as unknown as Readable<number>), 42);\n\t});\n});\n\ndescribe('readonly', () => {\n\tit('makes a store readonly', () => {\n\t\tconst writableStore = writable(1);\n\t\tconst readableStore = readonly(writableStore);\n\n\t\tassert.equal(get(readableStore), get(writableStore));\n\n\t\twritableStore.set(2);\n\n\t\tassert.equal(get(readableStore), 2);\n\t\tassert.equal(get(readableStore), get(writableStore));\n\n\t\t// @ts-ignore\n\t\tassert.throws(() => readableStore.set(3));\n\t});\n});\n\ndescribe('toStore', () => {\n\tit('creates a readable store from state', () => {\n\t\tconst count = source(0);\n\n\t\tconst store = toStore(() => $.get(count));\n\n\t\tconst log: number[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\tlog.push(value);\n\t\t});\n\n\t\tassert.deepEqual(log, [0]);\n\n\t\tset(count, 1);\n\t\tflushSync();\n\t\tassert.deepEqual(log, [0, 1]);\n\n\t\tunsubscribe();\n\t});\n\n\tit('creates a writable store from state', () => {\n\t\tconst count = source(0);\n\n\t\tconst store = toStore(\n\t\t\t() => $.get(count),\n\t\t\t(v) => set(count, v)\n\t\t);\n\n\t\tconst log: number[] = [];\n\n\t\tconst unsubscribe = store.subscribe((value) => {\n\t\t\tlog.push(value);\n\t\t});\n\n\t\tassert.deepEqual(log, [0]);\n\n\t\tset(count, 1);\n\t\tflushSync();\n\t\tassert.deepEqual(log, [0, 1]);\n\n\t\tstore.set(2);\n\t\tassert.equal($.get(count), 2);\n\n\t\tunsubscribe();\n\t});\n});\n\ndescribe('fromStore', () => {\n\tit('creates state from a writable store', () => {\n\t\tconst store = writable(0);\n\n\t\tconst count = fromStore(store);\n\n\t\tassert.equal(count.current, 0);\n\n\t\tconst log: number[] = [];\n\n\t\tconst teardown = effect_root(() => {\n\t\t\trender_effect(() => {\n\t\t\t\tlog.push(count.current);\n\t\t\t});\n\t\t});\n\n\t\tassert.deepEqual(log, [0]);\n\n\t\tstore.set(1);\n\t\tflushSync();\n\t\tassert.deepEqual(log, [0, 1]);\n\n\t\tcount.current = 2;\n\t\tflushSync();\n\t\tassert.deepEqual(log, [0, 1, 2]);\n\n\t\tassert.equal(get(store), 2);\n\n\t\tteardown();\n\t});\n\n\tit('creates state from a writable store that updates after timeout', async () => {\n\t\tconst wait = () => new Promise((resolve) => setTimeout(resolve, 100));\n\t\tconst store = {\n\t\t\tsubscribe: (cb: any) => {\n\t\t\t\t// new object each time to force updates of underlying signals,\n\t\t\t\t// to test the whole thing doesn't rerun more often than it should\n\t\t\t\tsetTimeout(() => cb({}), 0);\n\t\t\t\treturn () => {};\n\t\t\t}\n\t\t};\n\n\t\tconst count = fromStore(store);\n\t\tconst log: any[] = [];\n\n\t\tconst teardown = effect_root(() => {\n\t\t\trender_effect(() => {\n\t\t\t\tlog.push(count.current);\n\t\t\t});\n\t\t});\n\n\t\tawait wait();\n\n\t\tassert.deepEqual(log, [undefined, {}]);\n\n\t\tteardown();\n\t});\n\n\tit('creates state from a readable store', () => {\n\t\tconst store = readable(0);\n\n\t\tconst count = fromStore(store);\n\n\t\tassert.equal(count.current, 0);\n\n\t\tassert.throws(\n\t\t\t// @ts-expect-error property is readonly\n\t\t\t() => (count.current += 1),\n\t\t\t'Cannot set property current of #<Object> which has only a getter'\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/tests/suite.ts",
    "content": "import fs from 'node:fs';\nimport { it } from 'vitest';\n\nexport interface BaseTest {\n\tskip?: boolean;\n\tsolo?: boolean;\n\ttimeout?: number;\n}\n\n/**\n * To filter tests, run one of these:\n *\n * FILTER=my-test pnpm test    (runs only the 'my-test' test)\n * FILTER=/feature/ pnpm test  (runs all tests matching /feature/)\n */\nconst filter = process.env.FILTER\n\t? new RegExp(\n\t\t\tprocess.env.FILTER.startsWith('/')\n\t\t\t\t? process.env.FILTER.slice(1, -1).replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\t\t\t\t: `^${process.env.FILTER.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')}$`\n\t\t)\n\t: /./;\n\n// this defaults to 10, which is too low for some of our tests\nError.stackTraceLimit = 100;\n\nexport function suite<Test extends BaseTest>(fn: (config: Test, test_dir: string) => void) {\n\treturn {\n\t\ttest: (config: Test) => config,\n\t\trun: async (cwd: string, samples_dir = 'samples') => {\n\t\t\tawait for_each_dir<Test>(cwd, samples_dir, (config, dir) => {\n\t\t\t\tlet it_fn = config.skip ? it.skip : config.solo ? it.only : it;\n\n\t\t\t\tit_fn(dir, { timeout: config.timeout }, () => fn(config, `${cwd}/${samples_dir}/${dir}`));\n\t\t\t});\n\t\t}\n\t};\n}\n\nexport function suite_with_variants<Test extends BaseTest, Variants extends string, Common>(\n\tvariants: Variants[],\n\tshould_skip_variant: (variant: Variants, config: Test, test_name: string) => boolean | 'no-test',\n\tcommon_setup: (config: Test, test_dir: string) => Promise<Common> | Common,\n\tfn: (config: Test, test_dir: string, variant: Variants, common: Common) => void\n) {\n\treturn {\n\t\ttest: (config: Test) => config,\n\t\trun: async (cwd: string, samples_dir = 'samples') => {\n\t\t\tawait for_each_dir<Test>(cwd, samples_dir, (config, dir) => {\n\t\t\t\tlet called_common = false;\n\t\t\t\tlet common: any = undefined;\n\t\t\t\tfor (const variant of variants) {\n\t\t\t\t\tif (should_skip_variant(variant, config, dir) === 'no-test') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// TODO unify test interfaces\n\t\t\t\t\tconst skip = config.skip || should_skip_variant(variant, config, dir);\n\t\t\t\t\tconst solo = config.solo;\n\t\t\t\t\tlet it_fn = skip ? it.skip : solo ? it.only : it;\n\n\t\t\t\t\tit_fn(`${dir} (${variant})`, { timeout: config.timeout }, async () => {\n\t\t\t\t\t\tif (!called_common) {\n\t\t\t\t\t\t\tcalled_common = true;\n\t\t\t\t\t\t\tcommon = await common_setup(config, `${cwd}/${samples_dir}/${dir}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fn(config, `${cwd}/${samples_dir}/${dir}`, variant, common);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n}\n\n// If a directory only contains these children, it's a sign that it's leftover\n// from a different branch, and we can skip the test\nconst ignored = ['_output', '_actual.json'];\n\nasync function for_each_dir<Test extends BaseTest>(\n\tcwd: string,\n\tsamples_dir = 'samples',\n\tfn: (config: Test, test_dir: string) => void\n) {\n\tcwd = cwd.replace(/\\\\/g, '/');\n\tlet created_test = false;\n\n\tfor (const dir of fs.readdirSync(`${cwd}/${samples_dir}`)) {\n\t\tif (dir[0] === '.' || !filter.test(dir)) continue;\n\n\t\tif (fs.readdirSync(`${cwd}/${samples_dir}/${dir}`).every((file) => ignored.includes(file))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst file = `${cwd}/${samples_dir}/${dir}/_config.js`;\n\n\t\tcreated_test = true;\n\t\tconst config = (fs.existsSync(file) ? (await import(file)).default : {}) as Test;\n\n\t\tfn(config, dir);\n\t}\n\n\tif (!created_test) {\n\t\t// prevent vitest from polluting the console with a \"no tests found\" message\n\t\tit.skip(`[SKIP] ${cwd}`, () => {});\n\t}\n}\n\nexport function assert_ok(value: any): asserts value {\n\tif (!value) {\n\t\tthrow new Error(`Expected truthy value, got ${value}`);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/types/actions.ts",
    "content": "import type { Action, ActionReturn } from 'svelte/action';\n\n// ---------------- Action\n\nconst href: Action<HTMLAnchorElement> = (node) => {\n\tnode.href = '';\n\t// @ts-expect-error\n\tnode.href = 1;\n};\nhref;\n\nconst required: Action<HTMLElement, boolean> = (_node, _param) => {};\nrequired(null as any, true);\n// @ts-expect-error (only in strict mode) boolean missing\nrequired(null as any);\n// @ts-expect-error no boolean\nrequired(null as any, 'string');\n\nconst required1: Action<HTMLElement, boolean> = (_node, _param) => {\n\treturn {\n\t\tupdate: (p) => p === true,\n\t\tdestroy: () => {}\n\t};\n};\nrequired1;\n\nconst required2: Action<HTMLElement, boolean> = (_node) => {};\nrequired2;\n\nconst required3: Action<HTMLElement, boolean> = (_node, _param) => {\n\treturn {\n\t\t// @ts-expect-error comparison always resolves to false\n\t\tupdate: (p) => p === 'd',\n\t\tdestroy: () => {}\n\t};\n};\nrequired3;\n\nconst optional: Action<HTMLElement, boolean | undefined> = (_node, _param?) => {};\noptional(null as any, true);\noptional(null as any);\n// @ts-expect-error no boolean\noptional(null as any, 'string');\n\nconst optional1: Action<HTMLElement, boolean | undefined> = (_node, _param?) => {\n\treturn {\n\t\tupdate: (p) => p === true,\n\t\tdestroy: () => {}\n\t};\n};\noptional1;\n\nconst optional2: Action<HTMLElement, boolean | undefined> = (_node) => {};\noptional2;\n\nconst optional3: Action<HTMLElement, boolean | undefined> = (_node, _param) => {};\noptional3;\n\nconst optional4: Action<HTMLElement, boolean | undefined> = (_node, _param?) => {\n\treturn {\n\t\t// @ts-expect-error comparison always resolves to false\n\t\tupdate: (p) => p === 'd',\n\t\tdestroy: () => {}\n\t};\n};\noptional4;\n\nconst no: Action<HTMLElement, undefined> = (_node) => {};\n// @ts-expect-error second param\nno(null as any, true);\nno(null as any);\n// @ts-expect-error second param\nno(null as any, 'string');\n\nconst no1: Action<HTMLElement, undefined> = (_node) => {\n\treturn {\n\t\tdestroy: () => {}\n\t};\n};\nno1;\n\nconst no2: Action<HTMLElement, undefined> = (_node, _param?) => {};\nno2(null as any);\n\nconst no3: Action<HTMLElement, undefined> = (_node, _param) => {};\nno3;\n\nconst no4: Action<HTMLElement, undefined> = (_node) => {\n\treturn {\n\t\tupdate: () => {},\n\t\tdestroy: () => {}\n\t};\n};\nno4;\n\n// ---------------- ActionReturn\n\nconst requiredReturn: ActionReturn<string> = {\n\tupdate: (p) => p.toString()\n};\nrequiredReturn;\n\nconst optionalReturn: ActionReturn<boolean | undefined> = {\n\tupdate: (p) => {\n\t\tp === true;\n\t\t// @ts-expect-error (only in strict mode) could be undefined\n\t\tp.toString();\n\t}\n};\noptionalReturn;\n\nconst invalidProperty: ActionReturn = {\n\t// @ts-expect-error invalid property\n\tinvalid: () => {}\n};\ninvalidProperty;\n\ntype Attributes = ActionReturn<undefined, { a: string }>['$$_attributes'];\nconst attributes: Attributes = { a: 'a' };\nattributes;\n// @ts-expect-error wrong type\nconst invalidAttributes1: Attributes = { a: 1 };\ninvalidAttributes1;\n// @ts-expect-error missing prop\nconst invalidAttributes2: Attributes = {};\ninvalidAttributes2;\n\nfunction generic_action<T extends boolean>(_node: HTMLElement, param: T): ActionReturn<T> {\n\treturn {\n\t\tupdate: (p) => p === param,\n\t\tdestroy: () => {}\n\t};\n}\ngeneric_action;\n"
  },
  {
    "path": "packages/svelte/tests/types/bindings.svelte",
    "content": "<script lang=\"ts\">\n  let focused = $state(false);\n</script>\n\n<input bind:focused={focused} type=\"text\" />\n<textarea bind:focused={focused}></textarea>\n<select bind:focused={focused}></select>\n<div bind:focused={focused}></div>\n"
  },
  {
    "path": "packages/svelte/tests/types/component.ts",
    "content": "import { asClassComponent, createClassComponent } from 'svelte/legacy';\nimport {\n\tSvelteComponent,\n\ttype ComponentEvents,\n\ttype ComponentProps,\n\ttype ComponentType,\n\tmount,\n\thydrate,\n\ttype Component,\n\ttype ComponentInternals\n} from 'svelte';\nimport { render } from 'svelte/server';\n\nSvelteComponent.element === HTMLElement;\n\n// --------------------------------------------------------------------------- legacy: classes\n\nclass LegacyComponent extends SvelteComponent<\n\t{ prop: string },\n\t{ event: MouseEvent },\n\t{ slot: { slotProps: boolean } }\n> {}\n\nconst legacyComponent = new LegacyComponent({\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tprop: 'foo',\n\t\t// @ts-expect-error\n\t\tx: ''\n\t}\n});\n\nconst legacyComponentType: ComponentType<LegacyComponent> = LegacyComponent;\n\nconst legacyComponentProps1: ComponentProps<LegacyComponent> = {\n\tprop: '',\n\t// @ts-expect-error\n\tx: ''\n};\nconst legacyComponentProps2: ComponentProps<LegacyComponent> = {\n\t// @ts-expect-error\n\tprop: 1\n};\n\nconst legacyComponentEvents1: ComponentEvents<LegacyComponent> = {\n\tevent: new MouseEvent('click'),\n\t// @ts-expect-error\n\tx: ''\n};\nconst legacyComponentEvents2: ComponentEvents<LegacyComponent> = {\n\t// @ts-expect-error\n\tevent: new KeyboardEvent('click')\n};\n\nconst legacyComponentInstance: SvelteComponent<{ prop: string }> = new LegacyComponent({\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tprop: 'foo'\n\t}\n});\n\nconst legacyComponentClass: typeof SvelteComponent<{ prop: string }> = LegacyComponent;\n\n// --------------------------------------------------------------------------- new: functions\n\nclass NewComponent extends SvelteComponent<\n\t{ prop: string },\n\t{ event: MouseEvent },\n\t{ slot: { slotProps: boolean } }\n> {\n\tanExport: string = '';\n}\n\nnew NewComponent({\n\ttarget: null as any,\n\tprops: {\n\t\tprop: 'foo',\n\t\t// @ts-expect-error\n\t\tx: ''\n\t}\n});\n\nconst newComponent: NewComponent = new NewComponent({\n\ttarget: null as any,\n\tprops: {\n\t\tprop: 'foo'\n\t}\n});\nnewComponent.$$events_def.event;\n// @ts-expect-error\nnewComponent.$$events_def.x;\nnewComponent.$$slot_def.slot;\n// @ts-expect-error\nnewComponent.$$slot_def.x;\nnewComponent.anExport === '';\n// @ts-expect-error\nnewComponent.anExport === 1;\n\nconst newComponentType: ComponentType<NewComponent> = NewComponent;\n\nconst newComponentProps1: ComponentProps<NewComponent> = {\n\tprop: '',\n\t// @ts-expect-error\n\tx: ''\n};\nconst newComponentProps2: ComponentProps<NewComponent> = {\n\t// @ts-expect-error\n\tprop: 1\n};\n\nconst newComponentEvents1: ComponentEvents<NewComponent> = {\n\tevent: new MouseEvent('click'),\n\t// @ts-expect-error\n\tx: ''\n};\nconst newComponentEvents2: ComponentEvents<NewComponent> = {\n\t// @ts-expect-error\n\tevent: new KeyboardEvent('click')\n};\n\nmount(NewComponent, {\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tprop: 'foo',\n\t\t// @ts-expect-error\n\t\tx: ''\n\t},\n\tevents: {\n\t\tevent: (e) => e.offsetX\n\t},\n\timmutable: true,\n\tintro: false,\n\trecover: false\n});\nmount(\n\tNewComponent,\n\t// @ts-expect-error props missing\n\t{ target: null as any }\n);\n// if component receives no args, props can be omitted\nmount(null as any as typeof SvelteComponent<{}>, { target: null as any });\n\nhydrate(NewComponent, {\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tprop: 'foo',\n\t\t// @ts-expect-error\n\t\tx: ''\n\t},\n\tevents: {\n\t\tevent: (e) =>\n\t\t\t// we're not type checking this as it's an edge case and removing the generic later would be an annoying mini breaking change\n\t\t\te.doesNotExist\n\t},\n\timmutable: true,\n\tintro: false,\n\trecover: false\n});\nhydrate(\n\tNewComponent,\n\t// @ts-expect-error props missing\n\t{ target: null as any }\n);\n// if component receives no args, props can be omitted\nhydrate(null as any as typeof SvelteComponent<{}>, { target: null as any });\n\nrender(NewComponent, {\n\tprops: {\n\t\tprop: 'foo',\n\t\t// @ts-expect-error\n\t\tx: ''\n\t}\n});\n// @ts-expect-error\nrender(NewComponent);\nrender(NewComponent, {\n\tprops: {\n\t\t// @ts-expect-error\n\t\tprop: 1\n\t}\n});\n\n// --------------------------------------------------------------------------- interop\n\nconst AsLegacyComponent = asClassComponent(newComponent);\nnew AsLegacyComponent({\n\ttarget: null as any,\n\tprops: {\n\t\tprop: '',\n\t\t// @ts-expect-error\n\t\tx: ''\n\t}\n});\nconst asLegacyComponent = new AsLegacyComponent({\n\ttarget: null as any,\n\tprops: {\n\t\tprop: ''\n\t}\n});\nasLegacyComponent.$on('event', (e) => e.clientX);\n// @ts-expect-error\nasLegacyComponent.$on('event', (e) => e.foo);\n// @ts-expect-error\nasLegacyComponent.$on('bar', (e) => e);\nasLegacyComponent.$$prop_def.prop = '';\nasLegacyComponent.anExport = '';\n// @ts-expect-error\nasLegacyComponent.$$prop_def.anExport = 1;\n// @ts-expect-error\nasLegacyComponent.$$prop_def.prop = 1;\n// @ts-expect-error\nasLegacyComponent.$$prop_def.x = '';\nasLegacyComponent.anExport;\nconst x: typeof asLegacyComponent = createClassComponent({\n\ttarget: null as any,\n\thydrate: true,\n\tcomponent: NewComponent\n});\n\n// --------------------------------------------------------------------------- function component\n\nconst functionComponent: Component<\n\t{ binding: boolean; readonly: string },\n\t{ foo: 'bar' },\n\t'binding'\n> = (a, props) => {\n\tprops.binding === true;\n\tprops.readonly === 'foo';\n\t// @ts-expect-error\n\tprops.readonly = true;\n\t// @ts-expect-error\n\tprops.binding = '';\n\treturn {\n\t\tfoo: 'bar'\n\t};\n};\nfunctionComponent.element === HTMLElement;\n\nconst bindingIsOkayToWiden: Component<any> = functionComponent;\n\nfunctionComponent(null as any, {\n\tbinding: true,\n\t// @ts-expect-error\n\treadonly: true\n});\n\nconst functionComponentInstance = functionComponent(null as any, {\n\tbinding: true,\n\treadonly: 'foo',\n\t// @ts-expect-error\n\tx: ''\n});\nfunctionComponentInstance.foo === 'bar';\n// @ts-expect-error\nfunctionComponentInstance.foo = 'foo';\n\nconst functionComponentProps: ComponentProps<typeof functionComponent> = {\n\tbinding: true,\n\treadonly: 'foo',\n\t// @ts-expect-error\n\tprop: 1\n};\n\n// Test that self-typed functions are correctly inferred, too (use case: language tools has its own shape for backwards compatibility)\nconst functionComponentProps2: ComponentProps<(a: any, b: { a: true }) => { foo: string }> = {\n\ta: true\n};\n\nmount(functionComponent, {\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tbinding: true,\n\t\treadonly: 'foo',\n\t\t// would be nice to error here, probably needs NoInfer type helper in upcoming TS 5.5\n\t\tx: ''\n\t}\n});\nmount(functionComponent, {\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tbinding: true,\n\t\t// @ts-expect-error wrong type\n\t\treadonly: 1\n\t}\n});\nmount(\n\tfunctionComponent,\n\t// @ts-expect-error props missing\n\t{ target: null as any }\n);\n// if component receives no args, props can be omitted\nmount(null as any as Component<{}>, { target: null as any });\n\nhydrate(functionComponent, {\n\ttarget: null as any as Document | Element | ShadowRoot,\n\tprops: {\n\t\tbinding: true,\n\t\treadonly: 'foo',\n\t\t// would be nice to error here, probably needs NoInfer type helper in upcoming TS 5.5\n\t\tx: ''\n\t}\n});\nhydrate(functionComponent, {\n\ttarget: null as any as Document | Element | ShadowRoot,\n\t// @ts-expect-error missing prop\n\tprops: {\n\t\tbinding: true\n\t}\n});\nhydrate(\n\tfunctionComponent,\n\t// @ts-expect-error props missing\n\t{ target: null as any }\n);\n// if component receives no args, props can be omitted\nhydrate(null as any as Component<{}>, { target: null as any });\n\nrender(functionComponent, {\n\tprops: {\n\t\tbinding: true,\n\t\treadonly: 'foo'\n\t}\n});\n// @ts-expect-error\nrender(functionComponent);\nrender(functionComponent, {\n\t// @ts-expect-error\n\tprops: {\n\t\tbinding: true\n\t}\n});\nrender(functionComponent, {\n\tprops: {\n\t\tbinding: true,\n\t\t// @ts-expect-error\n\t\treadonly: 1\n\t}\n});\n\n// --------------------------------------------------------------------------- *.svelte components\n\n// import from a nonexistent file to trigger the declare module '*.svelte' in ambient.d.ts\n// this could show an error in the future in the editor (because language tools intercepts and knows this is an error)\n// but should always pass in tsc (because it will never know about this fact)\nimport Foo from './doesntexist.svelte';\n\nFoo(null as unknown as ComponentInternals, { a: true });\nconst f: Foo = new Foo({ target: document.body, props: { a: true } });\n"
  },
  {
    "path": "packages/svelte/tests/types/create-event-dispatcher.ts",
    "content": "import { createEventDispatcher } from 'svelte';\n\nconst dispatch = createEventDispatcher<{\n\tloaded: null;\n\tchange: string;\n\tvalid: boolean;\n\toptional: number | null;\n}>();\n\n// @ts-expect-error: dispatch invalid event\ndispatch('some-event');\n\ndispatch('loaded');\ndispatch('loaded', null);\ndispatch('loaded', undefined);\ndispatch('loaded', undefined, { cancelable: true });\n// @ts-expect-error: no detail accepted\ndispatch('loaded', 123);\n\n// @ts-expect-error: detail not provided\ndispatch('change');\ndispatch('change', 'string');\ndispatch('change', 'string', { cancelable: true });\n// @ts-expect-error: wrong type of detail\ndispatch('change', 123);\n// @ts-expect-error: wrong type of detail\ndispatch('change', undefined);\n\ndispatch('valid', true);\ndispatch('valid', true, { cancelable: true });\n// @ts-expect-error: wrong type of detail\ndispatch('valid', 'string');\n\ndispatch('optional');\ndispatch('optional', 123);\ndispatch('optional', 123, { cancelable: true });\ndispatch('optional', null);\ndispatch('optional', undefined);\ndispatch('optional', undefined, { cancelable: true });\n// @ts-expect-error: wrong type of optional detail\ndispatch('optional', 'string');\n// @ts-expect-error: wrong type of option\ndispatch('optional', undefined, { cancelabled: true });\n\nfunction generic_fn<T extends boolean>(t: T) {\n\tconst dispatch = createEventDispatcher<{\n\t\trequired: T;\n\t\toptional: T | null;\n\t}>();\n\n\tdispatch('required', t);\n\tdispatch('optional', t);\n\tdispatch('optional', null);\n\tdispatch('optional', undefined);\n\t// @ts-expect-error: wrong type of optional detail\n\tdispatch('optional', 'string');\n\t// @ts-expect-error: wrong type of required detail\n\tdispatch('required', 'string');\n\t// @ts-expect-error: wrong type of optional detail\n\tdispatch('optional', true);\n\t// @ts-expect-error: wrong type of required detail\n\tdispatch('required', true);\n}\ngeneric_fn;\n"
  },
  {
    "path": "packages/svelte/tests/types/events.ts",
    "content": "import { on } from 'svelte/events';\n\n// ---------------- on\n\non(document.body, 'click', (e) => e.button);\n\non(window, 'click', (e) => e.button);\n\non(document, 'click', (e) => e.button);\n\non(document.createElement('input'), 'input', (e) => e.currentTarget.value);\n\non(\n\tdocument.body,\n\t'clidck',\n\t(e) =>\n\t\t// @ts-expect-error\n\t\te.button\n);\n\non(\n\t// @ts-expect-error\n\t'asd',\n\t'asd',\n\t(e) => e\n);\n"
  },
  {
    "path": "packages/svelte/tests/types/motion.ts",
    "content": "import {\n\ttype TweenOptions,\n\ttype SpringOptions,\n\ttype SpringUpdateOptions,\n\ttype Updater\n} from 'svelte/motion';\n\nlet tweenOptions: TweenOptions<number> = {\n\tdelay: 100,\n\tduration: 400\n};\n\nlet springOptions: SpringOptions = {\n\tstiffness: 0.1,\n\tdamping: 0.5\n};\n\nlet springUpdateOptions: SpringUpdateOptions = {\n\tinstant: true\n};\n\nlet updater: Updater<number> = (target, value) => target + value;\n"
  },
  {
    "path": "packages/svelte/tests/types/on-mount.ts",
    "content": "import { onMount } from 'svelte';\n\n// sync and no return\nonMount(() => {\n\tconsole.log('mounted');\n});\n\n// sync and return value\nonMount(() => {\n\treturn 'done';\n});\n\n// sync and return sync\nonMount(() => {\n\treturn () => {\n\t\treturn 'done';\n\t};\n});\n\n// sync and return async\nonMount(() => {\n\treturn async () => {\n\t\tconst res = await fetch('');\n\t\treturn res;\n\t};\n});\n\n// async and no return\nonMount(async () => {\n\tawait fetch('');\n});\n\n// async and return value\nonMount(async () => {\n\tconst res = await fetch('');\n\treturn res;\n});\n\n// @ts-expect-error async and return sync\nonMount(async () => {\n\treturn () => {\n\t\treturn 'done';\n\t};\n});\n\n// @ts-expect-error async and return async\nonMount(async () => {\n\treturn async () => {\n\t\tconst res = await fetch('');\n\t\treturn res;\n\t};\n});\n\n// async and return any\nonMount(async () => {\n\tconst a: any = null as any;\n\treturn a;\n});\n\n// async and return function casted to any\n// can't really catch this without also catching above\nonMount(async () => {\n\tconst a: any = (() => {}) as any;\n\treturn a;\n});\n"
  },
  {
    "path": "packages/svelte/tests/types/snippet.ts",
    "content": "import type { Snippet } from 'svelte';\n\nconst return_type: ReturnType<Snippet> = null as any;\n\n// @ts-expect-error\nconst a: Snippet<{ text: string }> = () => {};\n// @ts-expect-error\nconst b: Snippet<boolean> = (a, b) => {\n\treturn return_type;\n};\n// @ts-expect-error\nconst c: Snippet<boolean> = (a: string) => {\n\treturn return_type;\n};\n// @ts-expect-error\nconst d: Snippet<boolean> = (a: string, b: number) => {\n\treturn return_type;\n};\n// @ts-expect-error\nconst e: Snippet = (a: string) => {\n\treturn return_type;\n};\n// @ts-expect-error\nconst f: Snippet = (a) => {\n\ta?.x;\n\treturn return_type;\n};\nconst g: Snippet<[boolean]> = (a) => {\n\t// @ts-expect-error\n\ta === '';\n\ta === true;\n\treturn return_type;\n};\nconst h: Snippet<[{ a: true }]> = (a) => {\n\ta.a === true;\n\treturn return_type;\n};\nconst i: Snippet = () => {\n\treturn return_type;\n};\n"
  },
  {
    "path": "packages/svelte/tests/types/store.ts",
    "content": "import { derived, writable } from 'svelte/store';\n\nconst a = writable(false);\nderived(a, (aVal) => {\n\t// @ts-expect-error\n\taVal === '';\n\treturn aVal === true;\n});\nderived([a], ([aVal]) => {\n\t// @ts-expect-error\n\taVal === '';\n\treturn aVal === true;\n});\n\nderived(\n\ta,\n\t(value, set) => {\n\t\tset('works');\n\t\t// @ts-expect-error\n\t\tset(true);\n\n\t\tvalue === true;\n\t\t// @ts-expect-error\n\t\tvalue === '';\n\t},\n\t''\n);\n"
  },
  {
    "path": "packages/svelte/tests/types/tsconfig.json",
    "content": "{\n\t\"extends\": \"../../tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"rootDir\": \"../..\",\n\t\t\"baseUrl\": \"../../\"\n\t},\n\t\"include\": [\".\"]\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-alt-text/input.svelte",
    "content": "<img src='foo.jpg'>\n\n<map>\n\t<area>\n</map>\n\n<object></object>\n\n<input type='image'>\n\n<input type='image' alt='hey'>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-alt-text/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<area>` element should have an alt, aria-label or aria-labelledby attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<object>` element should have a title, aria-label or aria-labelledby attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<input type=\\\"image\\\">` element should have an alt, aria-label or aria-labelledby attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-aria-label-has-no-content/input.svelte",
    "content": "<a href=\"/foo\" aria-label=\"baz\"></a>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-aria-label-has-no-content/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-has-content/input.svelte",
    "content": "<a href='/foo'></a>\n<a href=\"#{'foo'}\">bar</a>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-has-content/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_consider_explicit_label\",\n\t\t\"message\": \"Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-in-svg-is-valid/input.svelte",
    "content": "<svg><text><a>not actually a link</a></text></svg>\n<svg><text><a xlink:href=''>not actually a link</a></text></svg>\n<svg><text><a xlink:href='#'>not actually a link</a></text></svg>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-in-svg-is-valid/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<a>` element should have an href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 11\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 37\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_invalid_attribute\",\n\t\t\"message\": \"'' is not a valid xlink:href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 14\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_invalid_attribute\",\n\t\t\"message\": \"'#' is not a valid xlink:href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 14\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 28\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-is-valid/input.svelte",
    "content": "<a>not actually a link</a>\n<a href=''>invalid</a>\n<a href='#'>invalid</a>\n<a href='javascript:void(0)'>invalid</a>\n<a name=''>invalid</a>\n<a id=''>invalid</a>\n<a name='fragment'>valid</a>\n<a id='fragment'>valid</a>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-anchor-is-valid/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<a>` element should have an href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_invalid_attribute\",\n\t\t\"message\": \"'' is not a valid href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 10\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_invalid_attribute\",\n\t\t\"message\": \"'#' is not a valid href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_invalid_attribute\",\n\t\t\"message\": \"'javascript:void(0)' is not a valid href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<a>` element should have an href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 22\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<a>` element should have an href attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-activedescendant/input.svelte",
    "content": "<!-- VALID -->\n<input />\n<input tabindex=\"0\" />\n<input aria-activedescendant=\"some-id\" />\n<input aria-activedescendant=\"some-id\" tabindex={0} />\n<input aria-activedescendant=\"some-id\" tabindex={1} />\n<input aria-activedescendant=\"some-id\" tabindex=\"0\" />\n<input aria-activedescendant=\"some-id\" tabindex={-1} />\n<input aria-activedescendant=\"some-id\" tabindex=\"-1\" />\n<svelte:element this={Math.random() ? 'input' : 'button'} aria-activedescendant=\"some-id\" />\n<div></div>\n<div aria-activedescendant=\"some-id\" role=\"tablist\" tabindex={-1}></div>\n<div aria-activedescendant=\"some-id\" role=\"tablist\" tabindex=\"-1\"></div>\n\n<!-- INVALID -->\n<div aria-activedescendant=\"some-id\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-activedescendant/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_aria_activedescendant_has_tabindex\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 16\n\t\t},\n\t\t\"message\": \"An element with an aria-activedescendant attribute should have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 16\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-props/input.svelte",
    "content": "<input type=\"image\" aria-labeledby=\"foo\">"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-props/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_unknown_aria_attribute\",\n\t\t\"message\": \"Unknown aria attribute 'aria-labeledby'. Did you mean 'labelledby'?\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 20\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 40\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<input type=\\\"image\\\">` element should have an alt, aria-label or aria-labelledby attribute\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 41\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-boolean/input.svelte",
    "content": "<script>\n    const abc = 'abc';\n</script>\n\n<button aria-disabled=\"yes\">click me</button>\n<button aria-disabled=\"no\">click me</button>\n<button aria-disabled={1234}>click me</button>\n<button aria-disabled={`${abc}`}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-boolean/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_boolean\",\n\t\t\"message\": \"The value of 'aria-disabled' must be either 'true' or 'false'. It cannot be empty\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_boolean\",\n\t\t\"message\": \"The value of 'aria-disabled' must be either 'true' or 'false'. It cannot be empty\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 26\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-integer/input.svelte",
    "content": "<div aria-level=\"yes\"></div>\n<div aria-level=\"no\"></div>\n<div aria-level={`abc`}></div>\n<div aria-level></div>\n<div aria-level={\"false\"}></div>\n<div aria-level={!\"false\"}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-integer/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_integer\",\n\t\t\"message\": \"The value of 'aria-level' must be an integer\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_integer\",\n\t\t\"message\": \"The value of 'aria-level' must be an integer\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_integer\",\n\t\t\"message\": \"The value of 'aria-level' must be an integer\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-number/input.svelte",
    "content": "<div aria-valuemax=\"yes\"></div>\n<div aria-valuemax=\"no\"></div>\n<div aria-valuemax={`abc`}></div>\n<div aria-valuemax={true}></div>\n<div aria-valuemax=\"true\"></div>\n<div aria-valuemax={'false'}></div>\n<div aria-valuemax={!'false'}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-number/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type\",\n\t\t\"message\": \"The value of 'aria-valuemax' must be a number\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type\",\n\t\t\"message\": \"The value of 'aria-valuemax' must be a number\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type\",\n\t\t\"message\": \"The value of 'aria-valuemax' must be a number\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-string/input.svelte",
    "content": "<div aria-label=\"true\"></div>\n<div aria-label={true}></div>\n<div aria-label={false}></div>\n<div aria-label={1234}></div>\n<div aria-label={!true}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-string/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-token/input.svelte",
    "content": "<div aria-sort=\"\"></div>\n<div aria-sort=\"incorrect\"></div>\n<div aria-sort=\"true\"></div>\n<div aria-sort={true}></div>\n<div aria-sort={\"false\"}></div>\n<div aria-sort=\"ascending descending\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-token/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_token\",\n\t\t\"message\": \"The value of 'aria-sort' must be exactly one of \\\"ascending\\\", \\\"descending\\\", \\\"none\\\" or \\\"other\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_token\",\n\t\t\"message\": \"The value of 'aria-sort' must be exactly one of \\\"ascending\\\", \\\"descending\\\", \\\"none\\\" or \\\"other\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_token\",\n\t\t\"message\": \"The value of 'aria-sort' must be exactly one of \\\"ascending\\\", \\\"descending\\\", \\\"none\\\" or \\\"other\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_token\",\n\t\t\"message\": \"The value of 'aria-sort' must be exactly one of \\\"ascending\\\", \\\"descending\\\", \\\"none\\\" or \\\"other\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 37\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-tokenlist/input.svelte",
    "content": "<div aria-relevant=\"\"></div>\n<div aria-relevant=\"foobar\"></div>\n<div aria-relevant=\"true\"></div>\n<div aria-relevant={true}></div>\n<div aria-relevant={\"false\"}></div>\n<div aria-relevant=\"additions removals_\"></div>\n<div aria-relevant=\"additions removals_ \"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-tokenlist/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tokenlist\",\n\t\t\"message\": \"The value of 'aria-relevant' must be a space-separated list of one or more of \\\"additions\\\", \\\"all\\\", \\\"removals\\\" or \\\"text\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tokenlist\",\n\t\t\"message\": \"The value of 'aria-relevant' must be a space-separated list of one or more of \\\"additions\\\", \\\"all\\\", \\\"removals\\\" or \\\"text\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tokenlist\",\n\t\t\"message\": \"The value of 'aria-relevant' must be a space-separated list of one or more of \\\"additions\\\", \\\"all\\\", \\\"removals\\\" or \\\"text\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tokenlist\",\n\t\t\"message\": \"The value of 'aria-relevant' must be a space-separated list of one or more of \\\"additions\\\", \\\"all\\\", \\\"removals\\\" or \\\"text\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 40\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tokenlist\",\n\t\t\"message\": \"The value of 'aria-relevant' must be a space-separated list of one or more of \\\"additions\\\", \\\"all\\\", \\\"removals\\\" or \\\"text\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 41\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-tristate/input.svelte",
    "content": "<script>\n    const abc = 'abc';\n</script>\n\n<div aria-checked=\"yes\"></div>\n<div aria-checked=\"no\"></div>\n<div aria-checked={1234}></div>\n<div aria-checked={`${abc}`}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-proptypes-tristate/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tristate\",\n\t\t\"message\": \"The value of 'aria-checked' must be exactly one of true, false, or mixed\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_tristate\",\n\t\t\"message\": \"The value of 'aria-checked' must be exactly one of true, false, or mixed\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-role/input.svelte",
    "content": "<!-- valid -->\n<div role=\"tooltip\"></div>\n<div role=\"button tooltip\"></div>\n\n<!-- not valid -->\n<div role=\"toooltip\"></div>\n<div role=\"button toooltip\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-role/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_unknown_role\",\n\t\t\"message\": \"Unknown role 'toooltip'. Did you mean 'tooltip'?\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_unknown_role\",\n\t\t\"message\": \"Unknown role 'toooltip'. Did you mean 'tooltip'?\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-unsupported-element/input.svelte",
    "content": "<meta aria-hidden=\"false\">\n<meta role=\"tooltip\">"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-aria-unsupported-element/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_aria_attributes\",\n\t\t\"message\": \"`<meta>` should not have aria-* attributes\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_misplaced_role\",\n\t\t\"message\": \"`<meta>` should not have role attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-autocomplete-valid/input.svelte",
    "content": "<script>\n    let dynamic = '';\n</script>\n\n<!-- VALID -->\n<input type=\"text\" />\n<input type=\"text\" autocomplete=\"name\" />\n<input type=\"text\" autocomplete=\"off\" />\n<input type=\"text\" autocomplete=\"on\" />\n<input type=\"text\" autocomplete=\"billing family-name\" />\n<input type=\"hidden\" autocomplete=\"section-blue shipping street-address\" />\n<input type=\"text\" autocomplete=\"section-somewhere shipping work email\" />\n<input type=\"text\" autocomplete=\"section-somewhere shipping work email webauthn\" />\n<input type=\"text\" autocomplete=\"SECTION-SOMEWHERE SHIPPING WORK EMAIL WEBAUTHN\" />\n<input type=\"TEXT\" autocomplete=\"ON\" />\n<input type=\"email\" autocomplete=\"url\" />\n<input type=\"text\" autocomplete=\"section-blue shipping street-address\" />\n<input type=\"hidden\" autocomplete=\"off\" />\n<input type=\"hidden\" autocomplete=\"on\" />\n<input type=\"text\" autocomplete=\"\" />\n<input type=\"{dynamic}\" autocomplete=\"\" />\n<input type=\"text\" autocomplete=\"{dynamic}\" />\n\n<!-- INVALID -->\n<input type=\"text\" autocomplete />\n<input type=\"text\" autocomplete=\"incorrect\" />\n<input type=\"text\" autocomplete=\"webauthn\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-autocomplete-valid/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_autocomplete_valid\",\n\t\t\"end\": {\n\t\t\t\"column\": 31,\n\t\t\t\"line\": 25\n\t\t},\n\t\t\"message\": \"'true' is an invalid value for 'autocomplete' on `<input type=\\\"text\\\">`\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_autocomplete_valid\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 26\n\t\t},\n\t\t\"message\": \"'incorrect' is an invalid value for 'autocomplete' on `<input type=\\\"text\\\">`\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_autocomplete_valid\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 27\n\t\t},\n\t\t\"message\": \"'webauthn' is an invalid value for 'autocomplete' on `<input type=\\\"text\\\">`\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/input.svelte",
    "content": "<script>\n\tfunction noop() {}\n\n\tlet props = {};\n\n\tconst dynamicTypeValue = \"checkbox\";\n\tconst dynamicAriaHiddenValue = \"false\";\n\tconst dynamicRole = \"button\";\n</script>\n\n<!-- should warn -->\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} aria-hidden=\"false\"></div>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<section on:click={noop}></section>\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<main on:click={noop}></main>\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<article on:click={noop}></article>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<header on:click={noop}></header>\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<footer on:click={noop}></footer>\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<footer on:click={noop}></footer>\n\n<!-- should not warn -->\n<div class=\"foo\"></div>\n\n<a href=\"http://x.y.z\" on:click={noop}>foo</a>\n<button on:click={noop}>click me</button>\n<select on:click={noop}></select>\n\n<input type=\"button\" on:click={noop} />\n<input type={dynamicTypeValue} on:click={noop} />\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} {...props}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keydown={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keyup={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keypress={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keydown={noop} on:keyup={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keyup={noop} on:keypress={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keypress={noop} on:keydown={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} on:keydown={noop} on:keyup={noop} on:keypress={noop}></div>\n\n<input on:click={noop} type=\"hidden\" />\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} aria-hidden=\"true\"></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} aria-hidden=\"true\"></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} aria-hidden=\"false\" on:keydown={noop}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div on:click={noop} aria-hidden={dynamicAriaHiddenValue}></div>\n\n<div on:click={noop} role=\"presentation\"></div>\n<div on:click={noop} role=\"none\"></div>\n<div on:click={noop} role={dynamicRole}></div>\n<div on:click={noop} role={dynamicRole}></div>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<svelte:element this={Math.random() ? 'button' : 'div'} on:click={noop} />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 15,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 15,\n\t\t\t\"column\": 47\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 18,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 18,\n\t\t\t\"column\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 20,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 20,\n\t\t\t\"column\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 22,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 22,\n\t\t\t\"column\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 24,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 24,\n\t\t\t\"column\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 26,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 26,\n\t\t\t\"column\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"line\": 28,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 28,\n\t\t\t\"column\": 33\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-consider-explicit-label/input.svelte",
    "content": "<button></button>\n<a href=\"/#\"><b></b></a>\n\n<button aria-label=\"Valid empty button\"></button>\n<a href=\"/#\" aria-label=\"Valid empty link\"></a>\n\n<button title=\"Valid empty button\"></button>\n<a href=\"/#\" title=\"Valid empty link\"></a>\n\n<button aria-hidden='true'></button>\n<button inert></button>\n<a href=\"/#\" aria-hidden='true'><b></b></a>\n\n<button>Click me</button>\n<a href=\"/#\">Link text</a>\n<a href=\"/#\"><img src=\"./icon.svg\" alt=\"Link text\"></a>\n\n<select>\n\t<!-- valid if button contains <selectedcontent> -->\n\t<button>\n\t\t<selectedcontent></selectedcontent>\n\t</button>\n\n\t<option>one</option>\n\t<option>two</option>\n\t<option>three</option>\n</select>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-consider-explicit-label/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_consider_explicit_label\",\n\t\t\"message\": \"Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_consider_explicit_label\",\n\t\t\"message\": \"Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-contenteditable-element-without-child/input.svelte",
    "content": "<script>\n\tlet text = 'Hello world';\n</script>\n<p bind:textContent={text} contenteditable=\"true\"></p>\n<p bind:innerHTML={text} contenteditable=\"true\"></p>\n<p bind:innerHTML={text} contenteditable=\"true\"></p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-contenteditable-element-without-child/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-figcaption-in-non-element-block/input.svelte",
    "content": "<script>\n\tlet caption = 'a foo in its natural habitat';\n</script>\n\n<figure>\n\t<img src='foo.jpg' alt='a foo'>\n\t{#if caption}\n\t\t<figcaption>{caption}</figcaption>\n\t{/if}\n</figure>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-figcaption-in-non-element-block/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-figcaption-right-place/input.svelte",
    "content": "<figure>\n\t<img src='foo.jpg' alt='a foo'>\n\n\t<figcaption>\n\t\ta foo in its natural habitat\n\t</figcaption>\n</figure>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-figcaption-right-place/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-figcaption-wrong-place/input.svelte",
    "content": "<figure>\n\t<img src='foo.jpg' alt='a foo'>\n\n\t<figcaption>\n\t\ta foo in its natural habitat\n\t</figcaption>\n\n\t<p>this should not be here</p>\n</figure>\n\n<figure>\n\t<img src='foo.jpg' alt='a foo'>\n\n\t<div class='markup-for-styling'>\n\t\t<figcaption>\n\t\t\tthis element should be a child of the figure\n\t\t</figcaption>\n\t</div>\n</figure>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-figcaption-wrong-place/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_figcaption_index\",\n\t\t\"message\": \"`<figcaption>` must be first or last child of `<figure>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_figcaption_parent\",\n\t\t\"message\": \"`<figcaption>` must be an immediate child of `<figure>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 15,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-heading-has-content/input.svelte",
    "content": "<h1></h1>\n<h2 aria-hidden=\"true\">invisible header</h2>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-heading-has-content/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_content\",\n\t\t\"message\": \"`<h1>` element should contain text\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_hidden\",\n\t\t\"message\": \"`<h2>` element should not be hidden\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 4\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-html-has-lang/input.svelte",
    "content": "<script>\n\texport let language;\n</script>\n\n<html lang=\"en\"></html>\n<html lang=\"en-US\"></html>\n<html lang={language}></html>\n\n<html></html>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-html-has-lang/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<html>` element should have a lang attribute\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 13\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-iframe-has-title/input.svelte",
    "content": "<script>\n\texport let src;\n</script>\n\n<iframe src={src}></iframe>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-iframe-has-title/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<iframe>` element should have a title attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-img-redundant-alt/input.svelte",
    "content": "<img src=\"foo\" alt=\"Foo eating a sandwich.\" />\n<img src=\"bar\" aria-hidden=\"true\" alt=\"Picture of me taking a photo of an image\" />\n<img src=\"foo\" alt=\"Photo of foo being weird.\" />\n<img src=\"bar\" alt=\"Image of me at a bar!\" />\n<img src=\"foo\" alt=\"Picture of baz fixing a bug.\" />\n<img src=\"bar\" alt=\"Plant doing photosynthesis in the afternoon\" />\n<img src=\"foo\" alt=\"Picturesque food\" />\n<img src=\"baz\" alt={'baz'} />\n<img src=\"baz\" alt />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-img-redundant-alt/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_img_redundant_alt\",\n\t\t\"message\": \"Screenreaders already announce `<img>` elements as an image\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_img_redundant_alt\",\n\t\t\"message\": \"Screenreaders already announce `<img>` elements as an image\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 4\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_img_redundant_alt\",\n\t\t\"message\": \"Screenreaders already announce `<img>` elements as an image\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-interactive-supports-focus/input.svelte",
    "content": "<!-- VALID -->\n<div aria-hidden=\"true\" role=\"button\" on:keypress={() => {}}></div>\n<div aria-disabled=\"true\" role=\"button\" on:keypress={() => {}}></div>\n<div disabled role=\"button\" on:keypress={() => {}}></div>\n<div role=\"presentation\" on:keypress={() => {}}></div>\n<button on:click={() => {}}>click me</button>\n<div role=\"menuitem\" tabindex=\"0\" on:click={() => {}} on:keypress={() => {}}></div>\n<div role=\"button\" tabindex=\"-1\" on:click={() => {}} on:keypress={() => {}}></div>\n\n<!-- INVALID -->\n<div role=\"button\" on:keypress={() => {}}></div>\n<span role=\"menuitem\" on:keydown={() => {}}></span>\n<div role=\"button\" on:keyup={() => {}}></div>\n<span role=\"menuitem\" on:click={() => {}} on:keypress={() => {}}></span>\n<div role=\"button\" on:contextmenu={() => {}}></div>\n<span role=\"menuitem\" on:dblclick={() => {}}></span>\n<div role=\"button\" on:drag={() => {}}></div>\n<span role=\"menuitem\" on:dragend={() => {}}></span>\n<div role=\"button\" on:dragenter={() => {}}></div>\n<span role=\"menuitem\" on:dragexit={() => {}}></span>\n<div role=\"button\" on:dragleave={() => {}}></div>\n<span role=\"menuitem\" on:dragover={() => {}}></span>\n<div role=\"button\" on:dragstart={() => {}}></div>\n<span role=\"menuitem\" on:drop={() => {}}></span>\n<div role=\"button\" on:mousedown={() => {}}></div>\n<span role=\"menuitem\" on:mouseenter={() => {}}></span>\n<div role=\"button\" on:mouseleave={() => {}}></div>\n<span role=\"menuitem\" on:mousemove={() => {}}></span>\n<div role=\"button\" on:mouseout={() => {}}></div>\n<span role=\"menuitem\" on:mouseover={() => {}}></span>\n<div role=\"button\" on:mouseup={() => {}}></div>\n\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-interactive-supports-focus/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 11\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 12\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 72,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 16\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 16\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 17\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 18\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 18\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 19\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 20\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 21\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 22\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 22\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 23\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 24\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 25\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 54,\n\t\t\t\"line\": 26\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 50,\n\t\t\t\"line\": 27\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 53,\n\t\t\t\"line\": 28\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 29\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_mouse_events_have_key_events\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 29\n\t\t},\n\t\t\"message\": \"'mouseout' event must be accompanied by 'blur' event\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 53,\n\t\t\t\"line\": 30\n\t\t},\n\t\t\"message\": \"Elements with the 'menuitem' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_mouse_events_have_key_events\",\n\t\t\"end\": {\n\t\t\t\"column\": 53,\n\t\t\t\"line\": 30\n\t\t},\n\t\t\"message\": \"'mouseover' event must be accompanied by 'focus' event\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_interactive_supports_focus\",\n\t\t\"end\": {\n\t\t\t\"column\": 47,\n\t\t\t\"line\": 31\n\t\t},\n\t\t\"message\": \"Elements with the 'button' interactive role must have a tabindex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 31\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-label-has-associated-control/input.svelte",
    "content": "<script>\n  import LabelComponent from './label.svelte'\n</script>\n\n<label>A</label>\n<label for=\"id\">B</label>\n\n<label>C <input type=\"text\" /></label>\n<label>D <button>D</button></label>\n<label>E <span></span></label>\n<label>F {#if true}<input type=\"text\" />{/if}</label>\n<LabelComponent>G <input type=\"text\" /></LabelComponent>\n<label {...forMightBeInHere}>E <span></span></label>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-label-has-associated-control/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_label_has_associated_control\",\n\t\t\"end\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"A form label must be associated with a control\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_label_has_associated_control\",\n\t\t\"end\": {\n\t\t\t\"column\": 30,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"A form label must be associated with a control\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-label-has-associated-control-2/input.svelte",
    "content": "<script>\n  import Component from './component.svelte'\n</script>\n\n<label>\n  <slot />\n</label>\n\n<label>\n  <Component />\n</label>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-label-has-associated-control-2/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-label-has-associated-control-3/input.svelte",
    "content": "<script>\n  import Component from './component.svelte'\n</script>\n\n<label>\n  {@render x()}\n</label>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-label-has-associated-control-3/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-media-has-caption/input.svelte",
    "content": "<video src=\"x\"><track kind=\"captions\"/></video>\n<video src=\"x\"></video>\n<video src=\"x\"><track /></video>\n<audio></audio>\n<video src=\"x\" aria-hidden=\"true\"></video>\n<video src=\"x\" aria-hidden=\"false\"></video>\n<video></video> <!-- no src -->\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-media-has-caption/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_media_has_caption\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"message\": \"`<video>` elements must have a `<track kind=\\\"captions\\\">`\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 2\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_media_has_caption\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"`<video>` elements must have a `<track kind=\\\"captions\\\">`\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_media_has_caption\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"message\": \"`<video>` elements must have a `<track kind=\\\"captions\\\">`\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 6\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-missing-attribute-href-aria-disabled/input.svelte",
    "content": "<a role=\"link\" aria-disabled=\"true\">Back</a>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-missing-attribute-href-aria-disabled/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-mouse-events-have-key-events/input.svelte",
    "content": "<script>\n\tconst otherProps = {\n\t\tonblur: () => {},\n\t\tonfocus: () => {}\n\t};\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div onmouseover={() => {}}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div onmouseover={() => {}} onfocus={() => {}}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div onmouseover={() => {}} {...otherProps}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div onmouseout={() => {}}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div onmouseout={() => {}} onblur={() => {}}></div>\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div onmouseout={() => {}} {...otherProps}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-mouse-events-have-key-events/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_mouse_events_have_key_events\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"message\": \"'mouseover' event must be accompanied by 'focus' event\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_mouse_events_have_key_events\",\n\t\t\"end\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"'mouseout' event must be accompanied by 'blur' event\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-abstract-roles/input.svelte",
    "content": "<div role=\"command\"></div>\n<div role=\"composite\"></div>\n<div role=\"input\"></div>\n<div role=\"landmark\"></div>\n<div role=\"range\"></div>\n<div role=\"roletype\"></div>\n<div role=\"section\"></div>\n<div role=\"sectionhead\"></div>\n<div role=\"select\"></div>\n<div role=\"structure\"></div>\n<div role=\"widget\"></div>\n<div role=\"window\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-abstract-roles/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"message\": \"Abstract role 'command' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 1\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"message\": \"Abstract role 'composite' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 2\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"Abstract role 'input' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"Abstract role 'landmark' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 4\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"Abstract role 'range' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"message\": \"Abstract role 'roletype' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 6\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"message\": \"Abstract role 'section' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"message\": \"Abstract role 'sectionhead' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"message\": \"Abstract role 'select' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"Abstract role 'structure' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 10\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 11\n\t\t},\n\t\t\"message\": \"Abstract role 'widget' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"message\": \"Abstract role 'window' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-access-key/input.svelte",
    "content": "<div accessKey='z'></div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-access-key/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_accesskey\",\n\t\t\"message\": \"Avoid using accesskey\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-autofocus/input.svelte",
    "content": "<div autofocus></div>\n<dialog autofocus>\n</dialog>\n<dialog>\n\t<input autofocus>\n</dialog>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-autofocus/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_autofocus\",\n\t\t\"message\": \"Avoid using autofocus\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 14\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-distracting-elements/input.svelte",
    "content": "<marquee></marquee>\n<blink></blink>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-distracting-elements/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_distracting_elements\",\n\t\t\"message\": \"Avoid `<marquee>` elements\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_distracting_elements\",\n\t\t\"message\": \"Avoid `<blink>` elements\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-interactive-element-to-noninteractive-role/input.svelte",
    "content": "<!-- a -->\n<a href=\"test\" role=\"article\">link</a>\n<a href=\"test\" role=\"banner\">link</a>\n<a href=\"test\" role=\"complementary\">link</a>\n<a href=\"test\" role=\"img\">link</a>\n<a href=\"test\" role=\"listitem\">link</a>\n<a href=\"test\" role=\"main\">link</a>\n<a href=\"test\" role=\"region\">link</a>\n<a href=\"test\" role=\"tooltip\">link</a>\n<a href=\"test\" role=\"button\">link</a>\n\n<!-- button -->\n<button role=\"article\">button</button>\n<button role=\"banner\">button</button>\n<button role=\"complementary\">button</button>\n<button role=\"img\">button</button>\n<button role=\"listitem\">button</button>\n<button role=\"main\">button</button>\n<button role=\"region\">button</button>\n<button role=\"tooltip\">button</button>\n<button role=\"button\">button</button>\n\n<!-- input -->\n<input role=\"article\" />\n<input role=\"banner\" />\n<input role=\"complementary\" />\n<input role=\"img\" />\n<input role=\"listitem\" />\n<input role=\"main\" />\n<input role=\"region\" />\n<input role=\"tooltip\" />\n<input role=\"button\" />\n\n<!-- select -->\n<select role=\"article\"></select>\n<select role=\"banner\"></select>\n<select role=\"complementary\"></select>\n<select role=\"img\"></select>\n<select role=\"listitem\"></select>\n<select role=\"main\"></select>\n<select role=\"region\"></select>\n<select role=\"tooltip\"></select>\n<select role=\"button\"></select>\n\n<!-- textarea -->\n<textarea role=\"article\"></textarea>\n<textarea role=\"banner\"></textarea>\n<textarea role=\"complementary\"></textarea>\n<textarea role=\"img\"></textarea>\n<textarea role=\"listitem\"></textarea>\n<textarea role=\"main\"></textarea>\n<textarea role=\"region\"></textarea>\n<textarea role=\"tooltip\"></textarea>\n<textarea role=\"button\"></textarea>\n\n<!-- HTML elements attributed with an abstract role -->\n<div role=\"command\"></div>\n<div role=\"composite\"></div>\n<div role=\"input\"></div>\n<div role=\"landmark\"></div>\n<div role=\"range\"></div>\n<div role=\"roletype\"></div>\n<div role=\"section\"></div>\n<div role=\"sectionhead\"></div>\n<div role=\"select\"></div>\n<div role=\"structure\"></div>\n<div role=\"tablist\"></div>\n<div role=\"toolbar\"></div>\n<div role=\"tree\"></div>\n<div role=\"treegrid\"></div>\n<div role=\"widget\"></div>\n<div role=\"window\"></div>\n\n<!-- VALID: div elements assigned an interactive role. -->\n<div role=\"button\"></div>\n<div role=\"checkbox\" aria-checked={true}></div>\n<div role=\"columnheader\"></div>\n<div role=\"combobox\" aria-controls={[]} aria-expanded={true}></div>\n<div role=\"grid\"></div>\n<div role=\"gridcell\"></div>\n<div role=\"link\"></div>\n<div role=\"listbox\"></div>\n<div role=\"menu\"></div>\n<div role=\"menubar\"></div>\n<div role=\"menuitem\"></div>\n<div role=\"menuitemcheckbox\" aria-checked=\"true\"></div>\n<div role=\"menuitemradio\" aria-checked=\"true\"></div>\n<div role=\"option\" aria-selected=\"true\"></div>\n<div role=\"progressbar\"></div>\n<div role=\"radio\" aria-checked=\"true\"></div>\n<div role=\"radiogroup\"></div>\n<div role=\"row\"></div>\n<div role=\"rowheader\"></div>\n<div role=\"scrollbar\" aria-controls={[]} aria-valuenow={0}></div>\n<div role=\"searchbox\"></div>\n<div role=\"slider\" aria-valuenow={0}></div>\n<div role=\"spinbutton\"></div>\n<div role=\"switch\" aria-checked=\"true\"></div>\n<div role=\"tab\"></div>\n<div role=\"textbox\"></div>\n<div role=\"treeitem\" aria-selected={true}></div>\n\n<!-- HTML elements attributed with a non-interactive role -->\n<div role=\"alert\"></div>\n<div role=\"alertdialog\"></div>\n<div role=\"application\"></div>\n<div role=\"article\"></div>\n<div role=\"banner\"></div>\n<div role=\"cell\"></div>\n<div role=\"complementary\"></div>\n<div role=\"contentinfo\"></div>\n<div role=\"definition\"></div>\n<div role=\"dialog\"></div>\n<div role=\"directory\"></div>\n<div role=\"document\"></div>\n<div role=\"feed\"></div>\n<div role=\"figure\"></div>\n<div role=\"form\"></div>\n<div role=\"group\"></div>\n<div role=\"heading\" aria-level=\"1\"></div>\n<div role=\"img\"></div>\n<div role=\"list\"></div>\n<div role=\"listitem\"></div>\n<div role=\"log\"></div>\n<div role=\"main\"></div>\n<div role=\"marquee\"></div>\n<div role=\"math\"></div>\n<div role=\"navigation\"></div>\n<div role=\"note\"></div>\n<div role=\"region\"></div>\n<div role=\"rowgroup\"></div>\n<div role=\"search\"></div>\n<div role=\"separator\"></div>\n<div role=\"scrollbar\" aria-controls=\"x\" aria-valuenow=\"0\"></div>\n<div role=\"status\"></div>\n<div role=\"table\"></div>\n<div role=\"tabpanel\"></div>\n<div role=\"term\"></div>\n<div role=\"timer\"></div>\n<div role=\"tooltip\"></div>\n\n<!-- not valid -->\n<menuitem role=\"listitem\"></menuitem>\n<option class=\"foo\" role=\"listitem\"></option>\n<select class=\"foo\" role=\"listitem\"></select>\n<textarea class=\"foo\" role=\"listitem\"></textarea>\n<tr role=\"listitem\"></tr>\n<summary role=\"listitem\"></summary>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-interactive-element-to-noninteractive-role/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 2\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 4\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'img'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 6\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"message\": \"`<a>` cannot have role 'tooltip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 16\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'img'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 16\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 17\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 18\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 18\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 19\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 20\n\t\t},\n\t\t\"message\": \"`<button>` cannot have role 'tooltip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 21\n\t\t},\n\t\t\"message\": \"Redundant role 'button'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 24\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 25\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 30,\n\t\t\t\"line\": 26\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 27\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'img'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 28\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 29\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 30\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 31\n\t\t},\n\t\t\"message\": \"`<input>` cannot have role 'tooltip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 31\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 35\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 31,\n\t\t\t\"line\": 36\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 36\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 37\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 37\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 28,\n\t\t\t\"line\": 38\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'img'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 38\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 39\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 39\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 40\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 40\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 31,\n\t\t\t\"line\": 41\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 41\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 42\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'tooltip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 42\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 46\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 46\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 47\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 47\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 48\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 48\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 49\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'img'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 49\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 50\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 50\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 51\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 51\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 52\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 52\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 53\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'tooltip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 53\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 57\n\t\t},\n\t\t\"message\": \"Abstract role 'command' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 57\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 58\n\t\t},\n\t\t\"message\": \"Abstract role 'composite' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 58\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 59\n\t\t},\n\t\t\"message\": \"Abstract role 'input' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 59\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 60\n\t\t},\n\t\t\"message\": \"Abstract role 'landmark' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 60\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 61\n\t\t},\n\t\t\"message\": \"Abstract role 'range' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 61\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 62\n\t\t},\n\t\t\"message\": \"Abstract role 'roletype' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 62\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 63\n\t\t},\n\t\t\"message\": \"Abstract role 'section' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 63\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 64\n\t\t},\n\t\t\"message\": \"Abstract role 'sectionhead' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 64\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 65\n\t\t},\n\t\t\"message\": \"Abstract role 'select' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 65\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 66\n\t\t},\n\t\t\"message\": \"Abstract role 'structure' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 66\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 71\n\t\t},\n\t\t\"message\": \"Abstract role 'widget' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 71\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_abstract_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 72\n\t\t},\n\t\t\"message\": \"Abstract role 'window' is forbidden\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 72\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 143\n\t\t},\n\t\t\"message\": \"`<menuitem>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 143\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 144\n\t\t},\n\t\t\"message\": \"`<option>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 144\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 145\n\t\t},\n\t\t\"message\": \"`<select>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 145\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 146\n\t\t},\n\t\t\"message\": \"`<textarea>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 146\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 147\n\t\t},\n\t\t\"message\": \"`<tr>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 147\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_interactive_element_to_noninteractive_role\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 148\n\t\t},\n\t\t\"message\": \"`<summary>` cannot have role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 148\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-noninteractive-element-interactions/input.svelte",
    "content": "<!-- VALID -->\n<div role=\"presentation\" on:mouseup={() => {}}></div>\n<div role=\"button\" tabindex=\"-1\" on:click={() => {}} on:keypress={() => {}}></div>\n<div role=\"listitem\" aria-hidden=\"true\" on:click={() => {}} on:keypress={() => {}}></div>\n<button on:click={() => {}}>click me</button>\n<dialog on:click={() => {}}>alert</dialog>\n<h1 contenteditable=\"true\" on:keydown={() => {}}>Heading</h1>\n<h1>Heading</h1>\n\n<!-- INVALID -->\n<div role=\"listitem\" on:mousedown={() => {}}></div>\n<h1 on:click={() => {}} on:keydown={() => {}}>Heading</h1>\n<h1 role=\"banner\" on:keyup={() => {}}>Heading</h1>\n<p on:keypress={() => {}}></p>\n<div role=\"paragraph\" on:mouseup={() => {}}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-noninteractive-element-interactions/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 11\n\t\t},\n\t\t\"message\": \"Non-interactive element `<div>` should not be assigned mouse or keyboard event listeners\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 58,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"message\": \"Non-interactive element `<h1>` should not be assigned mouse or keyboard event listeners\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 12\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 50,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"message\": \"Non-interactive element `<h1>` should not be assigned mouse or keyboard event listeners\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 30,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"Non-interactive element `<p>` should not be assigned mouse or keyboard event listeners\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 50,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"Non-interactive element `<div>` should not be assigned mouse or keyboard event listeners\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-noninteractive-element-to-interactive-role/input.svelte",
    "content": "<!-- ALL INVALID: HTML elements with interactive role  -->\n<article role=\"button\"></article>\n<aside role=\"checkbox\" aria-checked={false}></aside>\n<blockquote role=\"columnheader\"></blockquote>\n<br role=\"grid\" />\n<caption role=\"gridcell\"></caption>\n<dd role=\"link\"></dd>\n<details role=\"listbox\"></details>\n<dir role=\"menu\"></dir>\n<dl role=\"menubar\"></dl>\n<dfn role=\"menuitem\"></dfn>\n<dt role=\"menuitemcheckbox\" aria-checked=\"true\"></dt>\n<fieldset role=\"menuitemradio\" aria-checked=\"true\"></fieldset>\n<figure>\n\t<figcaption role=\"menuitemradio\" aria-checked=\"true\"></figcaption>\n</figure>\n<figure role=\"option\" aria-selected=\"true\"></figure>\n<footer role=\"radio\" aria-checked=\"true\"></footer>\n<form role=\"radiogroup\"></form>\n<h1 role=\"rowheader\">Button</h1>\n<h2 role=\"scrollbar\" aria-controls={[]} aria-valuenow={0}>Button</h2>\n<h3 role=\"searchbox\">Button</h3>\n<h4 role=\"slider\" aria-valuenow={0}>Button</h4>\n<h5 role=\"spinbutton\">Button</h5>\n<h6 role=\"switch\" aria-checked=\"true\">Button</h6>\n<hr role=\"tab\" />\n<img role=\"tabpanel\" alt=\"tabpanel\" />\n<label role=\"textbox\"></label>\n<legend role=\"toolbar\"></legend>\n<li role=\"tree\"></li>\n<main role=\"treegrid\"></main>\n<mark role=\"treeitem\" aria-selected=\"true\"></mark>\n<marquee role=\"doc-backlink\"></marquee>\n<menu role=\"doc-biblioref\"></menu>\n<meter role=\"doc-glossref\"></meter>\n<nav role=\"doc-noteref\"></nav>\n<ol role=\"button\"></ol>\n<optgroup role=\"treeitem\" aria-selected=\"true\"></optgroup>\n<output role=\"treegrid\"></output>\n<p role=\"columnheader\"></p>\n<pre role=\"tree\"></pre>\n<progress role=\"combobox\" aria-controls={[]} aria-expanded=\"true\"></progress>\n<ruby role=\"toolbar\"></ruby>\n<section role=\"radio\" aria-label=\"radio\" aria-checked=\"true\"></section>\n<table role=\"menu\"></table>\n<tbody role=\"searchbox\"></tbody>\n<tfoot role=\"listbox\"></tfoot>\n<thead role=\"slider\" aria-valuenow={0}></thead>\n<time role=\"doc-backlink\"></time>\n<ul role=\"spinbutton\"></ul>\n\n<!-- VALID under recommended settings, INVALID under strict settings: ul, ol, li has interactive roles -->\n<!-- ul -->\n<ul role=\"menu\"></ul>\n<ul role=\"menubar\"></ul>\n<ul role=\"radiogroup\"></ul>\n<ul role=\"tablist\"></ul>\n<ul role=\"tree\"></ul>\n<ul role=\"treegrid\"></ul>\n<!-- ol -->\n<ol role=\"menu\"></ol>\n<ol role=\"menubar\"></ol>\n<ol role=\"radiogroup\"></ol>\n<ol role=\"tablist\"></ol>\n<ol role=\"tree\"></ol>\n<ol role=\"treegrid\"></ol>\n<!-- li -->\n<li role=\"tab\"></li>\n<li role=\"menuitem\"></li>\n<li role=\"row\"></li>\n<li role=\"treeitem\" aria-selected={false}></li>\n<!-- menu -->\n<menu role=\"menu\"></menu>\n<menu role=\"menubar\"></menu>\n<menu role=\"radiogroup\"></menu>\n<menu role=\"tablist\"></menu>\n<menu role=\"tree\"></menu>\n<menu role=\"treegrid\"></menu>\n\n<!-- VALID: elements assigned an interactive role. -->\n<div role=\"button\"></div>\n<div role=\"checkbox\" aria-checked={true}></div>\n<div role=\"columnheader\"></div>\n<div role=\"combobox\" aria-controls={[]} aria-expanded={true}></div>\n<div role=\"grid\"></div>\n<div role=\"gridcell\"></div>\n<div role=\"link\"></div>\n<div role=\"listbox\"></div>\n<div role=\"menu\"></div>\n<div role=\"menubar\"></div>\n<div role=\"menuitem\"></div>\n<div role=\"menuitemcheckbox\" aria-checked=\"true\"></div>\n<div role=\"menuitemradio\" aria-checked=\"true\"></div>\n<div role=\"option\" aria-selected=\"true\"></div>\n<div role=\"progressbar\"></div>\n<div role=\"radio\" aria-checked=\"true\"></div>\n<div role=\"radiogroup\"></div>\n<div role=\"row\"></div>\n<div role=\"rowheader\"></div>\n<div role=\"scrollbar\" aria-controls={[]} aria-valuenow={0}></div>\n<div role=\"searchbox\"></div>\n<div role=\"slider\" aria-valuenow={0}></div>\n<div role=\"spinbutton\"></div>\n<div role=\"switch\" aria-checked=\"true\"></div>\n<div role=\"tab\"></div>\n<div role=\"textbox\"></div>\n<div role=\"treeitem\" aria-selected={true}></div>\n<body role=\"combobox\" aria-controls={[]} aria-expanded=\"true\"></body>\n<td role=\"button\"></td>\n\n<!-- VALID: HTML elements attributed with a non-interactive role -->\n<div role=\"alert\"></div>\n<div role=\"document\"></div>\n<div role=\"separator\"></div>\n<div role=\"timer\"></div>\n<frame role=\"row\"></frame>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-noninteractive-element-to-interactive-role/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<article>` cannot have interactive role 'button'\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<aside>` cannot have interactive role 'checkbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 52\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<blockquote>` cannot have interactive role 'columnheader'\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 45\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<br>` cannot have interactive role 'grid'\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 18\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<caption>` cannot have interactive role 'gridcell'\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<dd>` cannot have interactive role 'link'\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<details>` cannot have interactive role 'listbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 34\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<dir>` cannot have interactive role 'menu'\",\n\t\t\"start\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<dl>` cannot have interactive role 'menubar'\",\n\t\t\"start\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<dfn>` cannot have interactive role 'menuitem'\",\n\t\t\"start\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<dt>` cannot have interactive role 'menuitemcheckbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 12,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 12,\n\t\t\t\"column\": 53\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<fieldset>` cannot have interactive role 'menuitemradio'\",\n\t\t\"start\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 62\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<figcaption>` cannot have interactive role 'menuitemradio'\",\n\t\t\"start\": {\n\t\t\t\"line\": 15,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 15,\n\t\t\t\"column\": 67\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<figure>` cannot have interactive role 'option'\",\n\t\t\"start\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 52\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<footer>` cannot have interactive role 'radio'\",\n\t\t\"start\": {\n\t\t\t\"line\": 18,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 18,\n\t\t\t\"column\": 50\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<form>` cannot have interactive role 'radiogroup'\",\n\t\t\"start\": {\n\t\t\t\"line\": 19,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 19,\n\t\t\t\"column\": 31\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<h1>` cannot have interactive role 'rowheader'\",\n\t\t\"start\": {\n\t\t\t\"line\": 20,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 20,\n\t\t\t\"column\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<h2>` cannot have interactive role 'scrollbar'\",\n\t\t\"start\": {\n\t\t\t\"line\": 21,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 21,\n\t\t\t\"column\": 69\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<h3>` cannot have interactive role 'searchbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 22,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 22,\n\t\t\t\"column\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<h4>` cannot have interactive role 'slider'\",\n\t\t\"start\": {\n\t\t\t\"line\": 23,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 23,\n\t\t\t\"column\": 47\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<h5>` cannot have interactive role 'spinbutton'\",\n\t\t\"start\": {\n\t\t\t\"line\": 24,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 24,\n\t\t\t\"column\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<h6>` cannot have interactive role 'switch'\",\n\t\t\"start\": {\n\t\t\t\"line\": 25,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 25,\n\t\t\t\"column\": 49\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<hr>` cannot have interactive role 'tab'\",\n\t\t\"start\": {\n\t\t\t\"line\": 26,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 26,\n\t\t\t\"column\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<img>` cannot have interactive role 'tabpanel'\",\n\t\t\"start\": {\n\t\t\t\"line\": 27,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 27,\n\t\t\t\"column\": 38\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<label>` cannot have interactive role 'textbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 28,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 28,\n\t\t\t\"column\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_label_has_associated_control\",\n\t\t\"message\": \"A form label must be associated with a control\",\n\t\t\"start\": {\n\t\t\t\"line\": 28,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 28,\n\t\t\t\"column\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<legend>` cannot have interactive role 'toolbar'\",\n\t\t\"start\": {\n\t\t\t\"line\": 29,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 29,\n\t\t\t\"column\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<li>` cannot have interactive role 'tree'\",\n\t\t\"start\": {\n\t\t\t\"line\": 30,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 30,\n\t\t\t\"column\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<main>` cannot have interactive role 'treegrid'\",\n\t\t\"start\": {\n\t\t\t\"line\": 31,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 31,\n\t\t\t\"column\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<mark>` cannot have interactive role 'treeitem'\",\n\t\t\"start\": {\n\t\t\t\"line\": 32,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 32,\n\t\t\t\"column\": 50\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<marquee>` cannot have interactive role 'doc-backlink'\",\n\t\t\"start\": {\n\t\t\t\"line\": 33,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 33,\n\t\t\t\"column\": 39\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_distracting_elements\",\n\t\t\"message\": \"Avoid `<marquee>` elements\",\n\t\t\"start\": {\n\t\t\t\"line\": 33,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 33,\n\t\t\t\"column\": 39\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<menu>` cannot have interactive role 'doc-biblioref'\",\n\t\t\"start\": {\n\t\t\t\"line\": 34,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 34,\n\t\t\t\"column\": 34\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<meter>` cannot have interactive role 'doc-glossref'\",\n\t\t\"start\": {\n\t\t\t\"line\": 35,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 35,\n\t\t\t\"column\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<nav>` cannot have interactive role 'doc-noteref'\",\n\t\t\"start\": {\n\t\t\t\"line\": 36,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 36,\n\t\t\t\"column\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<ol>` cannot have interactive role 'button'\",\n\t\t\"start\": {\n\t\t\t\"line\": 37,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 37,\n\t\t\t\"column\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<optgroup>` cannot have interactive role 'treeitem'\",\n\t\t\"start\": {\n\t\t\t\"line\": 38,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 38,\n\t\t\t\"column\": 58\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<output>` cannot have interactive role 'treegrid'\",\n\t\t\"start\": {\n\t\t\t\"line\": 39,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 39,\n\t\t\t\"column\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<p>` cannot have interactive role 'columnheader'\",\n\t\t\"start\": {\n\t\t\t\"line\": 40,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 40,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<pre>` cannot have interactive role 'tree'\",\n\t\t\"start\": {\n\t\t\t\"line\": 41,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 41,\n\t\t\t\"column\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<progress>` cannot have interactive role 'combobox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 42,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 42,\n\t\t\t\"column\": 77\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<ruby>` cannot have interactive role 'toolbar'\",\n\t\t\"start\": {\n\t\t\t\"line\": 43,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 43,\n\t\t\t\"column\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<section>` cannot have interactive role 'radio'\",\n\t\t\"start\": {\n\t\t\t\"line\": 44,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 44,\n\t\t\t\"column\": 71\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<table>` cannot have interactive role 'menu'\",\n\t\t\"start\": {\n\t\t\t\"line\": 45,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 45,\n\t\t\t\"column\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<tbody>` cannot have interactive role 'searchbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 46,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 46,\n\t\t\t\"column\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<tfoot>` cannot have interactive role 'listbox'\",\n\t\t\"start\": {\n\t\t\t\"line\": 47,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 47,\n\t\t\t\"column\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<thead>` cannot have interactive role 'slider'\",\n\t\t\"start\": {\n\t\t\t\"line\": 48,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 48,\n\t\t\t\"column\": 47\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<time>` cannot have interactive role 'doc-backlink'\",\n\t\t\"start\": {\n\t\t\t\"line\": 49,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 49,\n\t\t\t\"column\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_element_to_interactive_role\",\n\t\t\"message\": \"Non-interactive element `<ul>` cannot have interactive role 'spinbutton'\",\n\t\t\"start\": {\n\t\t\t\"line\": 50,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 50,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-noninteractive-tabindex/input.svelte",
    "content": "<!-- valid -->\n<button>click me</button>\n<button tabindex='0'>click me</button>\n<button tabindex='{0}'>click me</button>\n<div></div>\n<div tabindex='-1'></div>\n<div role='button' tabindex='0'></div>\n<div role='article' tabindex='-1'></div>\n<article tabindex='-1'></article>\n<div role=\"tabpanel\" tabindex='0'></div>\n<svelte:element this={Math.random() ? 'button' : 'div'} tabindex=\"0\" />\n<!-- invalid -->\n<div tabindex='0'></div>\n<div role='article' tabindex='0'></div>\n<article tabindex='0'></article>\n<article tabindex='{0}'></article>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-noninteractive-tabindex/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_tabindex\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"message\": \"noninteractive element cannot have nonnegative tabIndex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_tabindex\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"noninteractive element cannot have nonnegative tabIndex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_tabindex\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"noninteractive element cannot have nonnegative tabIndex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_noninteractive_tabindex\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 16\n\t\t},\n\t\t\"message\": \"noninteractive element cannot have nonnegative tabIndex value\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 16\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-redundant-roles/input.svelte",
    "content": "<a href=\"/\" role=\"link\">a link</a>\n<article role=\"article\"></article>\n<aside role=\"complementary\"></aside>\n<body role=\"document\"></body>\n<button role=\"button\">click me</button>\n<datalist role=\"listbox\"></datalist>\n<dd role=\"definition\"></dd>\n<dfn role=\"term\"></dfn>\n<details role=\"group\"></details>\n<dialog role=\"dialog\"></dialog>\n<dt role=\"term\"></dt>\n<fieldset role=\"group\"></fieldset>\n<figure role=\"figure\"></figure>\n<form role=\"form\">foo</form>\n<h1 role=\"heading\">heading</h1>\n<h2 role=\"heading\">heading</h2>\n<h3 role=\"heading\">heading</h3>\n<h4 role=\"heading\">heading</h4>\n<h5 role=\"heading\">heading</h5>\n<h6 role=\"heading\">heading</h6>\n<hr role=\"separator\" />\n<!-- <li role=\"listitem\" /> allowed since CSS list-style none removes semantic meaning and role brings it back -->\n<link role=\"link\" />\n<main role=\"main\"></main>\n<!-- <menu role=\"list\" /> allowed, same as ul/ol above -->\n<nav role=\"navigation\"></nav>\n<!-- <ol role=\"list\" /> allowed, see comment above -->\n<optgroup role=\"group\"></optgroup>\n<option role=\"option\"></option>\n<output role=\"status\"></output>\n<progress role=\"progressbar\"></progress>\n<section role=\"region\"></section>\n<summary role=\"button\"></summary>\n<table role=\"table\"></table>\n<tbody role=\"rowgroup\"></tbody>\n<textarea role=\"textbox\"></textarea>\n<tfoot role=\"rowgroup\"></tfoot>\n<thead role=\"rowgroup\"></thead>\n<tr role=\"row\"></tr>\n<!--<ul role=\"list\" /> allowed, see comment above -->\n\n<!-- Tested header/footer not nested in section/article -->\n<header role=\"banner\"></header>\n<footer role=\"contentinfo\"></footer>\n\n<!-- Allowed -->\n<!-- menu has same interactive role exceptions as ul/ol -->\n<menu role=\"menu\"></menu>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-redundant-roles/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"message\": \"Redundant role 'link'\",\n\t\t\"start\": {\n\t\t\t\"column\": 12,\n\t\t\t\"line\": 1\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"message\": \"Redundant role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 2\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"Redundant role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"Redundant role 'document'\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 4\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"Redundant role 'button'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"message\": \"Redundant role 'listbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 6\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"message\": \"Redundant role 'definition'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"message\": \"Redundant role 'term'\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"message\": \"Redundant role 'group'\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"Redundant role 'dialog'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 10\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 11\n\t\t},\n\t\t\"message\": \"Redundant role 'term'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"message\": \"Redundant role 'group'\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 12\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"message\": \"Redundant role 'figure'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"Redundant role 'form'\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"Redundant role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 16\n\t\t},\n\t\t\"message\": \"Redundant role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 16\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 17\n\t\t},\n\t\t\"message\": \"Redundant role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 18\n\t\t},\n\t\t\"message\": \"Redundant role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 18\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 19\n\t\t},\n\t\t\"message\": \"Redundant role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 20\n\t\t},\n\t\t\"message\": \"Redundant role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 21\n\t\t},\n\t\t\"message\": \"Redundant role 'separator'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 23\n\t\t},\n\t\t\"message\": \"Redundant role 'link'\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 24\n\t\t},\n\t\t\"message\": \"Redundant role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 26\n\t\t},\n\t\t\"message\": \"Redundant role 'navigation'\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 28\n\t\t},\n\t\t\"message\": \"Redundant role 'group'\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 29\n\t\t},\n\t\t\"message\": \"Redundant role 'option'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 30\n\t\t},\n\t\t\"message\": \"Redundant role 'status'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 28,\n\t\t\t\"line\": 31\n\t\t},\n\t\t\"message\": \"Redundant role 'progressbar'\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 31\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 32\n\t\t},\n\t\t\"message\": \"Redundant role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 33\n\t\t},\n\t\t\"message\": \"Redundant role 'button'\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 34\n\t\t},\n\t\t\"message\": \"Redundant role 'table'\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 34\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 35\n\t\t},\n\t\t\"message\": \"Redundant role 'rowgroup'\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 36\n\t\t},\n\t\t\"message\": \"Redundant role 'textbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 36\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 37\n\t\t},\n\t\t\"message\": \"Redundant role 'rowgroup'\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 37\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 38\n\t\t},\n\t\t\"message\": \"Redundant role 'rowgroup'\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 38\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 14,\n\t\t\t\"line\": 39\n\t\t},\n\t\t\"message\": \"Redundant role 'row'\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 39\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 43\n\t\t},\n\t\t\"message\": \"Redundant role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 43\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_redundant_roles\",\n\t\t\"end\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 44\n\t\t},\n\t\t\"message\": \"Redundant role 'contentinfo'\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 44\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-static-element-interactions/input.svelte",
    "content": "<script>\n\tconst dynamicRole = \"button\";\n</script>\n\n<!-- valid -->\n<button on:click={() => {}}>click me</button>\n<!-- svelte-ignore a11y_interactive_supports_focus -->\n<div on:keydown={() => {}} role=\"button\"></div>\n<input type=\"text\" on:click={() => {}} />\n<div on:copy={() => {}}></div>\n<a href=\"/foo\" on:click={() => {}}>link</a>\n<div role={dynamicRole} on:click={() => {}}></div>\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<footer on:keydown={() => {}}></footer>\n\n<!-- invalid -->\n<div on:keydown={() => {}}></div>\n<!-- svelte-ignore a11y_missing_attribute -->\n<a on:mousedown={() => {}} on:mouseup={() => {}} on:copy={() => {}}>link</a>\n<div on:pointerdown={() => {}}></div>\n<div on:pointerenter={() => {}}></div>\n<div on:touchstart={() => {}}></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-no-static-element-interactions/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_no_static_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 17\n\t\t},\n\t\t\"message\": \"`<div>` with a keydown handler must have an ARIA role\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_static_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 76,\n\t\t\t\"line\": 19\n\t\t},\n\t\t\"message\": \"`<a>` with a mousedown or mouseup handler must have an ARIA role\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_static_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 20\n\t\t},\n\t\t\"message\": \"`<div>` with a pointerdown handler must have an ARIA role\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_static_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 21\n\t\t},\n\t\t\"message\": \"`<div>` with a pointerenter handler must have an ARIA role\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_no_static_element_interactions\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 22\n\t\t},\n\t\t\"message\": \"`<div>` with a touchstart handler must have an ARIA role\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-not-on-components/input.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n</script>\n\n<Widget scope=\"foo\">\n\t<input autofocus>\n</Widget>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-not-on-components/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_autofocus\",\n\t\t\"message\": \"Avoid using autofocus\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-popover-label/input.svelte",
    "content": "<button interestfor=\"my-hint\">\n\t<div id=\"my-hint\" popover=\"hint\">hello</div>\n</button>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-popover-label/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_consider_explicit_label\",\n\t\t\"message\": \"Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 9\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-role-has-required-aria-props/input.svelte",
    "content": "<div role=\"heading\"></div>\n<span role=\"checkbox\"></span>\n<div role=\"meter\"></div>\n<div role=\"scrollbar\"></div>\n\n<div role=\"heading\" aria-level=\"1\"></div>\n<span role=\"checkbox\" aria-checked=\"false\"></span>\n<div role=\"meter\" aria-valuenow=\"50\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n<div role=\"scrollbar\" aria-controls=\"panel\" aria-valuenow=\"50\"></div>\n<input role=\"switch\" type=\"checkbox\" />\n<svelte:element this={Math.random() ? 'input' : 'div'} role=\"checkbox\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-role-has-required-aria-props/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_role_has_required_aria_props\",\n\t\t\"message\": \"Elements with the ARIA role \\\"heading\\\" must have the following attributes defined: \\\"aria-level\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_has_required_aria_props\",\n\t\t\"message\": \"Elements with the ARIA role \\\"checkbox\\\" must have the following attributes defined: \\\"aria-checked\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_has_required_aria_props\",\n\t\t\"message\": \"Elements with the ARIA role \\\"meter\\\" must have the following attributes defined: \\\"aria-valuenow\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_has_required_aria_props\",\n\t\t\"message\": \"Elements with the ARIA role \\\"scrollbar\\\" must have the following attributes defined: \\\"aria-controls\\\" and \\\"aria-valuenow\\\"\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 4\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-role-supports-aria-props/input.svelte",
    "content": "<!-- INVALID -->\n<a aria-setsize=\"0\" href=\"/\">Link</a>\n<area aria-pressed=\"true\" alt=\"\" />\n<article aria-autocomplete=\"inline\"></article>\n<aside aria-modal=\"true\"></aside>\n<body aria-invalid=\"true\"></body>\n<button aria-valuemax=\"0\">click me</button>\n<datalist aria-valuenow=\"0\"></datalist>\n<dd aria-rowindex=\"0\"></dd>\n<dfn aria-colcount=\"0\"></dfn>\n<dialog aria-posinset=\"0\"></dialog>\n<details aria-orientation=\"undefined\"></details>\n<dt aria-valuemin=\"0\"></dt>\n<fieldset aria-orientation=\"undefined\"></fieldset>\n<form aria-disabled=\"true\"></form>\n<h1 aria-selected=\"true\">H1</h1>\n<h2 aria-selected=\"true\">H2</h2>\n<h3 aria-expanded=\"true\">H3</h3>\n<h4 aria-valuemin=\"0\">H4</h4>\n<h5 aria-readonly=\"true\">H5</h5>\n<h6 aria-valuemin=\"0\">H6</h6>\n<hr aria-required=\"true\" />\n<img aria-level=\"0\" alt=\"invalid aria\" />\n<li aria-required=\"true\"></li>\n<link aria-rowcount=\"0\" />\n<menu aria-valuemin=\"0\"></menu>\n<meter aria-colspan=\"0\"></meter>\n<nav aria-valuetext=\"x\"></nav>\n<ol aria-sort=\"none\"></ol>\n<option aria-invalid=\"true\"></option>\n<optgroup aria-sort=\"none\"></optgroup>\n<output aria-multiline=\"true\"></output>\n<progress aria-rowcount=\"0\"></progress>\n<section aria-invalid=\"true\"></section>\n<summary aria-rowcount=\"0\"></summary>\n<tbody aria-colspan=\"0\"></tbody>\n<textarea aria-valuenow=\"0\"></textarea>\n<tfoot aria-required=\"true\"></tfoot>\n<thead aria-valuemin=\"0\"></thead>\n<tr aria-pressed=\"true\"></tr>\n<ul aria-multiselectable=\"true\"></ul>\n\n<div role=\"alert\" aria-colspan=\"0\"></div>\n<div role=\"alertdialog\" aria-autocomplete=\"inline\"></div>\n<div role=\"application\" aria-required=\"true\"></div>\n<div role=\"article\" aria-multiline=\"true\"></div>\n<div role=\"banner\" aria-autocomplete=\"inline\"></div>\n<div role=\"blockquote\" aria-valuetext=\"x\"></div>\n<div role=\"button\" aria-colspan=\"0\"></div>\n<div role=\"caption\" aria-setsize=\"0\"></div>\n<div role=\"cell\" aria-multiline=\"true\"></div>\n<div role=\"checkbox\" aria-multiline=\"true\" aria-checked=\"true\"></div>\n<div role=\"code\" aria-invalid=\"true\"></div>\n<div role=\"columnheader\" aria-colcount=\"0\"></div>\n<div role=\"combobox\" aria-multiselectable=\"true\" aria-controls={[]} aria-expanded=\"true\"></div>\n<div role=\"complementary\" aria-readonly=\"true\"></div>\n<div role=\"contentinfo\" aria-valuetext=\"x\"></div>\n<div role=\"definition\" aria-multiline=\"true\"></div>\n<div role=\"deletion\" aria-expanded=\"true\"></div>\n<div role=\"dialog\" aria-multiline=\"true\"></div>\n<div role=\"directory\" aria-rowcount=\"0\"></div>\n<div role=\"document\" aria-valuemin=\"0\"></div>\n<div role=\"emphasis\" aria-rowindex=\"0\"></div>\n<div role=\"feed\" aria-colindex=\"0\"></div>\n<div role=\"figure\" aria-valuemax=\"0\"></div>\n<div role=\"form\" aria-readonly=\"true\"></div>\n<div role=\"generic\" aria-valuemax=\"0\"></div>\n<div role=\"grid\" aria-checked=\"true\"></div>\n<div role=\"gridcell\" aria-level=\"0\"></div>\n<div role=\"group\" aria-colspan=\"0\"></div>\n<div role=\"heading\" aria-activedescendant=\"id\" tabindex=\"-1\" aria-level=\"0\"></div>\n<div role=\"insertion\" aria-errormessage=\"error\"></div>\n<div role=\"link\" aria-multiline=\"true\"></div>\n<div role=\"list\" aria-selected=\"true\"></div>\n<div role=\"listbox\" aria-haspopup=\"true\"></div>\n<div role=\"listitem\" aria-activedescendant=\"id\" tabindex=\"-1\"></div>\n<div role=\"log\" aria-required=\"true\"></div>\n<div role=\"main\" aria-sort=\"none\"></div>\n<div role=\"marquee\" aria-autocomplete=\"inline\"></div>\n<div role=\"math\" aria-multiline=\"true\"></div>\n<div role=\"menu\" aria-checked=\"true\"></div>\n<div role=\"menubar\" aria-errormessage=\"error\"></div>\n<div role=\"menuitem\" aria-checked=\"true\"></div>\n<div role=\"menuitemcheckbox\" aria-pressed=\"true\" aria-checked=\"false\"></div>\n<div role=\"menuitemradio\" aria-rowspan=\"0\" aria-checked=\"false\"></div>\n<div role=\"meter\" aria-valuenow=\"0\" aria-haspopup=\"true\"></div>\n<div role=\"navigation\" aria-expanded=\"true\"></div>\n<div role=\"none\" aria-placeholder=\"x\"></div>\n<div role=\"note\" aria-modal=\"true\"></div>\n<div role=\"option\" aria-selected=\"true\" aria-valuemax=\"0\"></div>\n<div role=\"paragraph\" aria-level=\"0\"></div>\n<div role=\"presentation\" aria-disabled=\"true\"></div>\n<div role=\"progressbar\" aria-expanded=\"true\"></div>\n<div role=\"radio\" aria-checked=\"true\" aria-rowindex=\"0\"></div>\n<div role=\"radiogroup\" aria-valuenow=\"0\"></div>\n<div role=\"region\" aria-rowspan=\"0\"></div>\n<div role=\"row\" aria-required=\"true\"></div>\n<div role=\"rowgroup\" aria-expanded=\"true\"></div>\n<div role=\"rowheader\" aria-activedescendant=\"id\" tabindex=\"0\"></div>\n<div role=\"scrollbar\" aria-controls={[]} aria-valuenow=\"0\" aria-rowspan=\"0\"></div>\n<div role=\"search\" aria-autocomplete=\"inline\"></div>\n<div role=\"searchbox\" aria-colindex=\"0\"></div>\n<div role=\"separator\" aria-sort=\"none\"></div>\n<div role=\"slider\" aria-valuenow=\"0\" aria-placeholder=\"x\"></div>\n<div role=\"spinbutton\" aria-posinset=\"0\"></div>\n<div role=\"status\" aria-valuemin=\"0\"></div>\n<div role=\"strong\" aria-valuemin=\"0\"></div>\n<div role=\"subscript\" aria-colcount=\"0\"></div>\n<div role=\"superscript\" aria-level=\"0\"></div>\n<div role=\"switch\" aria-checked=\"true\" aria-valuenow=\"0\"></div>\n<div role=\"tab\" aria-required=\"true\"></div>\n<div role=\"table\" aria-modal=\"true\"></div>\n<div role=\"tablist\" aria-setsize=\"0\"></div>\n<div role=\"tabpanel\" aria-multiselectable=\"true\"></div>\n<div role=\"term\" aria-posinset=\"0\"></div>\n<div role=\"textbox\" aria-colspan=\"0\"></div>\n<div role=\"time\" aria-selected=\"true\"></div>\n<div role=\"timer\" aria-sort=\"none\"></div>\n<div role=\"toolbar\" aria-valuetext=\"x\"></div>\n<div role=\"tooltip\" aria-multiline=\"true\"></div>\n<div role=\"tree\" aria-expanded=\"true\"></div>\n<div role=\"treegrid\" aria-level=\"0\"></div>\n<div role=\"treeitem\" aria-selected=\"true\" aria-activedescendant=\"id\" tabindex=\"-1\"></div>\n<div role=\"doc-abstract\" aria-colindex=\"0\"></div>\n<div role=\"doc-acknowledgments\" aria-setsize=\"0\"></div>\n<div role=\"doc-afterword\" aria-modal=\"true\"></div>\n<div role=\"doc-appendix\" aria-activedescendant=\"id\" tabindex=\"-1\"></div>\n<div role=\"doc-backlink\" aria-colspan=\"0\"></div>\n<div role=\"doc-biblioentry\" aria-valuemax=\"0\"></div>\n<div role=\"doc-bibliography\" aria-level=\"0\"></div>\n<div role=\"doc-biblioref\" aria-checked=\"true\"></div>\n<div role=\"doc-chapter\" aria-required=\"true\"></div>\n<div role=\"doc-colophon\" aria-setsize=\"0\"></div>\n<div role=\"doc-conclusion\" aria-colindex=\"0\"></div>\n<div role=\"doc-cover\" aria-modal=\"true\"></div>\n<div role=\"doc-credit\" aria-selected=\"true\"></div>\n<div role=\"doc-credits\" aria-orientation=\"undefined\"></div>\n<div role=\"doc-dedication\" aria-level=\"0\"></div>\n<div role=\"doc-endnote\" aria-checked=\"true\"></div>\n<div role=\"doc-endnotes\" aria-colcount=\"0\"></div>\n<div role=\"doc-epigraph\" aria-multiline=\"true\"></div>\n<div role=\"doc-epilogue\" aria-colcount=\"0\"></div>\n<div role=\"doc-errata\" aria-sort=\"none\"></div>\n<div role=\"doc-example\" aria-multiselectable=\"true\"></div>\n<div role=\"doc-footnote\" aria-rowcount=\"0\"></div>\n<div role=\"doc-foreword\" aria-valuenow=\"0\"></div>\n<div role=\"doc-glossary\" aria-valuetext=\"x\"></div>\n<div role=\"doc-glossref\" aria-placeholder=\"x\"></div>\n<div role=\"doc-index\" aria-rowcount=\"0\"></div>\n<div role=\"doc-introduction\" aria-pressed=\"true\"></div>\n<div role=\"doc-noteref\" aria-valuenow=\"0\"></div>\n<div role=\"doc-notice\" aria-selected=\"true\"></div>\n<div role=\"doc-pagebreak\" aria-rowcount=\"0\"></div>\n<div role=\"doc-pagelist\" aria-modal=\"true\"></div>\n<div role=\"doc-part\" aria-setsize=\"0\"></div>\n<div role=\"doc-preface\" aria-orientation=\"undefined\"></div>\n<div role=\"doc-prologue\" aria-required=\"true\"></div>\n<div role=\"doc-pullquote\" aria-rowcount=\"0\"></div>\n<div role=\"doc-qna\" aria-setsize=\"0\"></div>\n<div role=\"doc-subtitle\" aria-rowindex=\"0\"></div>\n<div role=\"doc-tip\" aria-valuenow=\"0\"></div>\n<div role=\"doc-toc\" aria-posinset=\"0\"></div>\n\n<!-- input and menuitem have different implicit roles based on different type attributes, and thus different valid and invalid props -->\n<!-- INVALID -->\n<input type=\"text\" aria-rowspan=\"0\" /> <!-- implicit role: textbox -->\n<input type=\"tel\" aria-pressed=\"true\" /> <!-- implicit role: textbox -->\n<input type=\"url\" aria-level=\"0\" /> <!-- implicit role: textbox -->\n<input type=\"email\" aria-pressed=\"true\" /> <!-- implicit role: textbox -->\n<input type=\"search\" aria-valuetext=\"text\" /> <!-- implicit role: searchbox -->\n<input type=\"text\" list={['id']} aria-valuemin=\"0\" /> <!-- implicit role: combobox -->\n<input type=\"tel\" list={['id']} aria-colspan=\"0\" /> <!-- implicit role: combobox -->\n<input type=\"url\" list={['id']} aria-posinset=\"0\" /> <!-- implicit role: combobox -->\n<input type=\"email\" list={['id']} aria-modal=\"true\" /> <!-- implicit role: combobox -->\n<input type=\"search\" list={['id']} aria-rowindex=\"0\" /> <!-- implicit role: combobox -->\n<input type=\"image\" alt=\"some text\" aria-valuemax=\"0\" /> <!-- implicit role: button -->\n<input type=\"reset\" aria-modal=\"true\" /> <!-- implicit role: button -->\n<input type=\"submit\" aria-placeholder=\"placeholder\" /> <!-- implicit role: button -->\n<input type=\"checkbox\" aria-rowindex=\"0\" /> <!-- implicit role: checkbox -->\n<input type=\"radio\" aria-valuetext=\"text\" /> <!-- implicit role: radio -->\n<input type=\"range\" aria-checked=\"true\" /> <!-- implicit role: slider -->\n<menuitem type=\"command\" aria-colindex=\"0\"></menuitem> <!-- implicit role: menuitem -->\n<menuitem type=\"checkbox\" aria-colcount=\"0\"></menuitem> <!-- implicit role: menuitemcheckbox -->\n<menuitem type=\"radio\" aria-placeholder=\"placeholder\"></menuitem> <!-- implicit role: menuitemradio -->\n\n<!-- VALID -->\n<a aria-keyshortcuts=\"x\" href=\"/\">Link</a>\n<area aria-expanded=\"true\" alt=\"\" />\n<article aria-dropeffect=\"none\"></article>\n<aside aria-keyshortcuts=\"x\"></aside>\n<body aria-labelledby=\"id\"></body>\n<button aria-hidden=\"true\"></button>\n<datalist aria-activedescendant=\"id\" tabindex=\"0\"></datalist>\n<dd aria-labelledby=\"id\"></dd>\n<dfn aria-details=\"id\"></dfn>\n<dialog aria-keyshortcuts=\"x\"></dialog>\n<details aria-keyshortcuts=\"x\"></details>\n<dt aria-hidden=\"true\"></dt>\n<fieldset aria-owns=\"id\"></fieldset>\n<form aria-keyshortcuts=\"x\"></form>\n<h1 aria-keyshortcuts=\"x\">H1</h1>\n<h2 aria-controls={[]}>H2</h2>\n<h3 aria-controls={[]}>H3</h3>\n<h4 aria-details=\"id\">H4</h4>\n<h5 aria-grabbed=\"true\">H5</h5>\n<h6 aria-grabbed=\"true\">H6</h6>\n<hr aria-relevant=\"all\" />\n<img aria-flowto=\"id\" alt=\"Valid aria role\" />\n<li aria-label=\"x\"></li>\n<link aria-hidden=\"true\" />\n<menu aria-roledescription=\"x\"></menu>\n<meter aria-valuemin=\"0\"></meter>\n<nav aria-labelledby=\"id\"></nav>\n<ol aria-grabbed=\"true\"></ol>\n<option aria-selected=\"true\"></option>\n<optgroup aria-hidden=\"true\"></optgroup>\n<output aria-dropeffect=\"none\"></output>\n<progress aria-hidden=\"true\"></progress>\n<section aria-details=\"id\"></section>\n<summary aria-controls={[]}></summary>\n<tbody aria-controls={[]}></tbody>\n<textarea aria-busy=\"true\"></textarea>\n<tfoot aria-labelledby=\"id\"></tfoot>\n<thead aria-flowto=\"id\"></thead>\n<tr aria-describedby=\"id\"></tr>\n<ul aria-dropeffect=\"none\"></ul>\n\n<div role=\"alert\" aria-owns=\"id\"></div>\n<div role=\"alertdialog\" aria-busy=\"true\"></div>\n<div role=\"application\" aria-invalid=\"true\"></div>\n<div role=\"article\" aria-atomic=\"true\"></div>\n<div role=\"banner\" aria-grabbed=\"true\"></div>\n<div role=\"blockquote\" aria-busy=\"true\"></div>\n<div role=\"button\" aria-busy=\"true\"></div>\n<div role=\"caption\" aria-grabbed=\"true\"></div>\n<div role=\"cell\" aria-rowindex=\"0\"></div>\n<div role=\"checkbox\" aria-checked=\"true\" aria-details=\"id\"></div>\n<div role=\"code\" aria-keyshortcuts=\"x\"></div>\n<div role=\"columnheader\" aria-rowspan=\"0\"></div>\n<div role=\"combobox\" aria-invalid=\"true\" aria-controls={[]} aria-expanded=\"true\"></div>\n<div role=\"complementary\" aria-label=\"x\"></div>\n<div role=\"contentinfo\" aria-dropeffect=\"none\"></div>\n<div role=\"definition\" aria-grabbed=\"true\"></div>\n<div role=\"deletion\" aria-busy=\"true\"></div>\n<div role=\"dialog\" aria-flowto=\"id\"></div>\n<div role=\"directory\" aria-controls={[]}></div>\n<div role=\"document\" aria-grabbed=\"true\"></div>\n<div role=\"emphasis\" aria-atomic=\"true\"></div>\n<div role=\"feed\" aria-atomic=\"true\"></div>\n<div role=\"figure\" aria-busy=\"true\"></div>\n<div role=\"form\" aria-roledescription=\"x\"></div>\n<div role=\"generic\" aria-current=\"true\"></div>\n<div role=\"grid\" aria-busy=\"true\"></div>\n<div role=\"gridcell\" aria-relevant=\"all\"></div>\n<div role=\"group\" aria-busy=\"true\"></div>\n<div role=\"heading\" aria-level=\"\" aria-flowto=\"id\"></div>\n<div role=\"img\" aria-grabbed=\"true\"></div>\n<div role=\"insertion\" aria-roledescription=\"x\"></div>\n<div role=\"link\" aria-owns=\"id\"></div>\n<div role=\"list\" aria-labelledby=\"id\"></div>\n<div role=\"listbox\" aria-current=\"true\"></div>\n<div role=\"listitem\" aria-controls={[]}></div>\n<div role=\"log\" aria-controls={[]}></div>\n<div role=\"main\" aria-keyshortcuts=\"x\"></div>\n<div role=\"marquee\" aria-labelledby=\"id\"></div>\n<div role=\"math\" aria-labelledby=\"id\"></div>\n<div role=\"menu\" aria-atomic=\"true\"></div>\n<div role=\"menubar\" aria-grabbed=\"true\"></div>\n<div role=\"menuitem\" aria-grabbed=\"true\"></div>\n<div role=\"menuitemcheckbox\" aria-checked=\"true\" aria-controls={[]}></div>\n<div role=\"menuitemradio\" aria-checked=\"true\" aria-grabbed=\"true\"></div>\n<div role=\"meter\" aria-valuenow=\"0\" aria-valuetext=\"x\"></div>\n<div role=\"navigation\" aria-controls={[]}></div>\n<div role=\"none\" undefined></div>\n<div role=\"note\" aria-hidden=\"true\"></div>\n<div role=\"option\" aria-selected=\"true\" aria-describedby=\"id\"></div>\n<div role=\"paragraph\" aria-grabbed=\"true\"></div>\n<div role=\"presentation\" aria-relevant=\"all\"></div>\n<div role=\"progressbar\" aria-valuemin=\"0\"></div>\n<div role=\"radio\" aria-checked=\"true\" aria-roledescription=\"x\"></div>\n<div role=\"radiogroup\" aria-required=\"true\"></div>\n<div role=\"region\" aria-roledescription=\"x\"></div>\n<div role=\"row\" aria-posinset=\"0\"></div>\n<div role=\"rowgroup\" aria-busy=\"true\"></div>\n<div role=\"rowheader\" aria-label=\"x\"></div>\n<div role=\"scrollbar\" aria-controls={[]} aria-valuenow=\"0\" aria-relevant=\"all\"></div>\n<div role=\"search\" aria-grabbed=\"true\"></div>\n<div role=\"searchbox\" aria-dropeffect=\"none\"></div>\n<div role=\"separator\" aria-roledescription=\"x\"></div>\n<div role=\"slider\" aria-valuenow=\"0\" aria-relevant=\"all\"></div>\n<div role=\"spinbutton\" aria-required=\"true\"></div>\n<div role=\"status\" aria-label=\"x\"></div>\n<div role=\"strong\" aria-keyshortcuts=\"x\"></div>\n<div role=\"subscript\" aria-keyshortcuts=\"x\"></div>\n<div role=\"superscript\" aria-live=\"off\"></div>\n<div role=\"switch\" aria-checked=\"true\" aria-roledescription=\"x\"></div>\n<div role=\"tab\" aria-flowto=\"id\"></div>\n<div role=\"table\" aria-rowcount=\"0\"></div>\n<div role=\"tablist\" aria-atomic=\"true\"></div>\n<div role=\"tabpanel\" aria-labelledby=\"id\"></div>\n<div role=\"term\" aria-details=\"id\"></div>\n<div role=\"textbox\" aria-hidden=\"true\"></div>\n<div role=\"time\" aria-label=\"x\"></div>\n<div role=\"timer\" aria-hidden=\"true\"></div>\n<div role=\"toolbar\" aria-roledescription=\"x\"></div>\n<div role=\"tooltip\" aria-owns=\"id\"></div>\n<div role=\"tree\" aria-errormessage=\"error\"></div>\n<div role=\"treegrid\" aria-details=\"id\"></div>\n<div role=\"treeitem\" aria-selected=\"true\" aria-dropeffect=\"none\"></div>\n<div role=\"doc-abstract\" aria-label=\"x\"></div>\n<div role=\"doc-acknowledgments\" aria-controls={[]}></div>\n<div role=\"doc-afterword\" aria-flowto=\"id\"></div>\n<div role=\"doc-appendix\" aria-describedby=\"id\"></div>\n<div role=\"doc-backlink\" aria-dropeffect=\"none\"></div>\n<div role=\"doc-biblioentry\" aria-roledescription=\"x\"></div>\n<div role=\"doc-bibliography\" aria-labelledby=\"id\"></div>\n<div role=\"doc-biblioref\" aria-haspopup=\"true\"></div>\n<div role=\"doc-chapter\" aria-controls={[]}></div>\n<div role=\"doc-colophon\" aria-expanded=\"true\"></div>\n<div role=\"doc-conclusion\" aria-dropeffect=\"none\"></div>\n<div role=\"doc-cover\" aria-controls={[]}></div>\n<div role=\"doc-credit\" aria-haspopup=\"true\"></div>\n<div role=\"doc-credits\" aria-describedby=\"id\"></div>\n<div role=\"doc-dedication\" aria-roledescription=\"x\"></div>\n<div role=\"doc-endnote\" aria-errormessage=\"error\"></div>\n<div role=\"doc-endnotes\" aria-owns=\"id\"></div>\n<div role=\"doc-epigraph\" aria-controls={[]}></div>\n<div role=\"doc-epilogue\" aria-relevant=\"all\"></div>\n<div role=\"doc-errata\" aria-keyshortcuts=\"x\"></div>\n<div role=\"doc-example\" aria-invalid=\"true\"></div>\n<div role=\"doc-footnote\" aria-labelledby=\"id\"></div>\n<div role=\"doc-foreword\" aria-expanded=\"true\"></div>\n<div role=\"doc-glossary\" aria-grabbed=\"true\"></div>\n<div role=\"doc-glossref\" aria-haspopup=\"true\"></div>\n<div role=\"doc-index\" aria-controls={[]}></div>\n<div role=\"doc-introduction\" aria-labelledby=\"id\"></div>\n<div role=\"doc-noteref\" aria-details=\"id\"></div>\n<div role=\"doc-notice\" aria-owns=\"id\"></div>\n<div role=\"doc-pagebreak\" aria-owns=\"id\"></div>\n<div role=\"doc-pagelist\" aria-disabled=\"true\"></div>\n<div role=\"doc-part\" aria-relevant=\"all\"></div>\n<div role=\"doc-preface\" aria-label=\"x\"></div>\n<div role=\"doc-prologue\" aria-invalid=\"true\"></div>\n<div role=\"doc-pullquote\" undefined></div>\n<div role=\"doc-qna\" aria-errormessage=\"error\"></div>\n<div role=\"doc-subtitle\" aria-errormessage=\"error\"></div>\n<div role=\"doc-tip\" aria-owns=\"id\"></div>\n<div role=\"doc-toc\" aria-expanded=\"true\"></div>\n\n<!-- input and menuitem have different implicit roles based on different type attributes, and thus different valid and invalid props -->\n<!-- VALID -->\n<input type=\"text\" aria-labelledby=\"id\" /> <!-- implicit role: textbox -->\n<input type=\"tel\" aria-readonly=\"true\" /> <!-- implicit role: textbox -->\n<input type=\"url\" aria-errormessage=\"id\" /> <!-- implicit role: textbox -->\n<input type=\"email\" aria-details=\"id\" /> <!-- implicit role: textbox -->\n<input type=\"searchbox\" aria-owns=\"id\" /> <!-- implicit role: searchbox -->\n<input type=\"text\" list={['id']} aria-keyshortcuts=\"key\" /> <!-- implicit role: combobox -->\n<input type=\"tel\" list={['id']} aria-readonly=\"true\" /> <!-- implicit role: combobox -->\n<input type=\"url\" list={['id']} aria-label=\"label\" /> <!-- implicit role: combobox -->\n<input type=\"email\" list={['id']} aria-activedescendant=\"id\" /> <!-- implicit role: combobox -->\n<input type=\"search\" list={['id']} aria-dropeffect=\"none\" /> <!-- implicit role: combobox -->\n<input type=\"image\" alt=\"some text\" aria-pressed=\"true\" /> <!-- implicit role: button -->\n<input type=\"reset\" aria-expanded=\"true\" /> <!-- implicit role: button -->\n<input type=\"submit\" aria-disabled=\"true\" /> <!-- implicit role: button -->\n<input type=\"checkbox\" aria-controls=\"id\" /> <!-- implicit role: checkbox -->\n<input type=\"radio\" aria-atomic=\"true\" /> <!-- implicit role: radio -->\n<input type=\"range\" aria-hidden=\"true\" /> <!-- implicit role: slider -->\n<menuitem type=\"command\" aria-live=\"off\"></menuitem> <!-- implicit role: menuitem -->\n<menuitem type=\"checkbox\" aria-relevant=\"all\"></menuitem> <!-- implicit role: menuitemcheckbox -->\n<menuitem type=\"radio\" aria-required=\"true\"></menuitem> <!-- implicit role: menuitemradio -->\n\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-role-supports-aria-props/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'link'. This role is implicit on the element `<a>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 3,\n\t\t\t\"line\": 2\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"The attribute 'aria-pressed' is not supported by the role 'link'. This role is implicit on the element `<area>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"The attribute 'aria-autocomplete' is not supported by the role 'article'. This role is implicit on the element `<article>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 4\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'complementary'. This role is implicit on the element `<aside>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"message\": \"The attribute 'aria-invalid' is not supported by the role 'document'. This role is implicit on the element `<body>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 6\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemax' is not supported by the role 'button'. This role is implicit on the element `<button>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'listbox'. This role is implicit on the element `<datalist>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowindex' is not supported by the role 'definition'. This role is implicit on the element `<dd>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colcount' is not supported by the role 'term'. This role is implicit on the element `<dfn>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 10\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 11\n\t\t},\n\t\t\"message\": \"The attribute 'aria-posinset' is not supported by the role 'dialog'. This role is implicit on the element `<dialog>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"message\": \"The attribute 'aria-orientation' is not supported by the role 'group'. This role is implicit on the element `<details>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 12\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'term'. This role is implicit on the element `<dt>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"The attribute 'aria-orientation' is not supported by the role 'group'. This role is implicit on the element `<fieldset>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"The attribute 'aria-disabled' is not supported by the role 'form'. This role is implicit on the element `<form>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 16\n\t\t},\n\t\t\"message\": \"The attribute 'aria-selected' is not supported by the role 'heading'. This role is implicit on the element `<h1>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 16\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 17\n\t\t},\n\t\t\"message\": \"The attribute 'aria-selected' is not supported by the role 'heading'. This role is implicit on the element `<h2>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 18\n\t\t},\n\t\t\"message\": \"The attribute 'aria-expanded' is not supported by the role 'heading'. This role is implicit on the element `<h3>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 18\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 19\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'heading'. This role is implicit on the element `<h4>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 20\n\t\t},\n\t\t\"message\": \"The attribute 'aria-readonly' is not supported by the role 'heading'. This role is implicit on the element `<h5>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 20\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 21\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'heading'. This role is implicit on the element `<h6>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 21\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 22\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'separator'. This role is implicit on the element `<hr>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 22\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 23\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'img'. This role is implicit on the element `<img>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 23\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 24\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element `<li>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 25\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'link'. This role is implicit on the element `<link>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 26\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'list'. This role is implicit on the element `<menu>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 26\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 27\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'progressbar'. This role is implicit on the element `<meter>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 27\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 28\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'navigation'. This role is implicit on the element `<nav>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 29\n\t\t},\n\t\t\"message\": \"The attribute 'aria-sort' is not supported by the role 'list'. This role is implicit on the element `<ol>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 30\n\t\t},\n\t\t\"message\": \"The attribute 'aria-invalid' is not supported by the role 'option'. This role is implicit on the element `<option>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 30\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 31\n\t\t},\n\t\t\"message\": \"The attribute 'aria-sort' is not supported by the role 'group'. This role is implicit on the element `<optgroup>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 31\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 32\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'status'. This role is implicit on the element `<output>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 33\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'progressbar'. This role is implicit on the element `<progress>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 28,\n\t\t\t\"line\": 34\n\t\t},\n\t\t\"message\": \"The attribute 'aria-invalid' is not supported by the role 'region'. This role is implicit on the element `<section>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 34\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 35\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'button'. This role is implicit on the element `<summary>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 9,\n\t\t\t\"line\": 35\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 36\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'rowgroup'. This role is implicit on the element `<tbody>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 36\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 37\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'textbox'. This role is implicit on the element `<textarea>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 37\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 38\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'rowgroup'. This role is implicit on the element `<tfoot>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 38\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 39\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'rowgroup'. This role is implicit on the element `<thead>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 39\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 40\n\t\t},\n\t\t\"message\": \"The attribute 'aria-pressed' is not supported by the role 'row'. This role is implicit on the element `<tr>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 40\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 31,\n\t\t\t\"line\": 41\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiselectable' is not supported by the role 'list'. This role is implicit on the element `<ul>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 4,\n\t\t\t\"line\": 41\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 43\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'alert'\",\n\t\t\"start\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 43\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 50,\n\t\t\t\"line\": 44\n\t\t},\n\t\t\"message\": \"The attribute 'aria-autocomplete' is not supported by the role 'alertdialog'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 44\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 45\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'application'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 45\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 46\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'article'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 46\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 47\n\t\t},\n\t\t\"message\": \"The attribute 'aria-autocomplete' is not supported by the role 'banner'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 47\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 48\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'blockquote'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 48\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 49\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'button'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 49\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 50\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'caption'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 50\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 51\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'cell'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 51\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 52\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'checkbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 52\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 53\n\t\t},\n\t\t\"message\": \"The attribute 'aria-invalid' is not supported by the role 'code'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 53\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 54\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colcount' is not supported by the role 'columnheader'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 54\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 55\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiselectable' is not supported by the role 'combobox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 55\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 46,\n\t\t\t\"line\": 56\n\t\t},\n\t\t\"message\": \"The attribute 'aria-readonly' is not supported by the role 'complementary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 56\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 57\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'contentinfo'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 57\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 58\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'definition'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 58\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 59\n\t\t},\n\t\t\"message\": \"The attribute 'aria-expanded' is not supported by the role 'deletion'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 59\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 60\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'dialog'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 60\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 61\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'directory'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 61\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 62\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'document'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 62\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 63\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowindex' is not supported by the role 'emphasis'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 63\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 64\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colindex' is not supported by the role 'feed'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 64\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 65\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemax' is not supported by the role 'figure'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 65\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 66\n\t\t},\n\t\t\"message\": \"The attribute 'aria-readonly' is not supported by the role 'form'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 66\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 67\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemax' is not supported by the role 'generic'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 67\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 68\n\t\t},\n\t\t\"message\": \"The attribute 'aria-checked' is not supported by the role 'grid'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 68\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 69\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'gridcell'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 69\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 70\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'group'\",\n\t\t\"start\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 70\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 46,\n\t\t\t\"line\": 71\n\t\t},\n\t\t\"message\": \"The attribute 'aria-activedescendant' is not supported by the role 'heading'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 71\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 47,\n\t\t\t\"line\": 72\n\t\t},\n\t\t\"message\": \"The attribute 'aria-errormessage' is not supported by the role 'insertion'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 72\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 73\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'link'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 73\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 74\n\t\t},\n\t\t\"message\": \"The attribute 'aria-selected' is not supported by the role 'list'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 74\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 75\n\t\t},\n\t\t\"message\": \"The attribute 'aria-haspopup' is not supported by the role 'listbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 75\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 47,\n\t\t\t\"line\": 76\n\t\t},\n\t\t\"message\": \"The attribute 'aria-activedescendant' is not supported by the role 'listitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 76\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 77\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'log'\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 77\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 78\n\t\t},\n\t\t\"message\": \"The attribute 'aria-sort' is not supported by the role 'main'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 78\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 46,\n\t\t\t\"line\": 79\n\t\t},\n\t\t\"message\": \"The attribute 'aria-autocomplete' is not supported by the role 'marquee'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 79\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 80\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'math'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 80\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 81\n\t\t},\n\t\t\"message\": \"The attribute 'aria-checked' is not supported by the role 'menu'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 81\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 82\n\t\t},\n\t\t\"message\": \"The attribute 'aria-errormessage' is not supported by the role 'menubar'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 82\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 83\n\t\t},\n\t\t\"message\": \"The attribute 'aria-checked' is not supported by the role 'menuitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 83\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 84\n\t\t},\n\t\t\"message\": \"The attribute 'aria-pressed' is not supported by the role 'menuitemcheckbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 84\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 85\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowspan' is not supported by the role 'menuitemradio'\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 85\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 56,\n\t\t\t\"line\": 86\n\t\t},\n\t\t\"message\": \"The attribute 'aria-haspopup' is not supported by the role 'meter'\",\n\t\t\"start\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 86\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 87\n\t\t},\n\t\t\"message\": \"The attribute 'aria-expanded' is not supported by the role 'navigation'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 87\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 88\n\t\t},\n\t\t\"message\": \"The attribute 'aria-placeholder' is not supported by the role 'none'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 88\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 89\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'note'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 89\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 57,\n\t\t\t\"line\": 90\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemax' is not supported by the role 'option'\",\n\t\t\"start\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 90\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 91\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'paragraph'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 91\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 92\n\t\t},\n\t\t\"message\": \"The attribute 'aria-disabled' is not supported by the role 'presentation'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 92\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 93\n\t\t},\n\t\t\"message\": \"The attribute 'aria-expanded' is not supported by the role 'progressbar'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 93\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 55,\n\t\t\t\"line\": 94\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowindex' is not supported by the role 'radio'\",\n\t\t\"start\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 94\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 95\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'radiogroup'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 95\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 96\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowspan' is not supported by the role 'region'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 96\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 97\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'row'\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 97\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 98\n\t\t},\n\t\t\"message\": \"The attribute 'aria-expanded' is not supported by the role 'rowgroup'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 98\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 99\n\t\t},\n\t\t\"message\": \"The attribute 'aria-activedescendant' is not supported by the role 'rowheader'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 99\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 75,\n\t\t\t\"line\": 100\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowspan' is not supported by the role 'scrollbar'\",\n\t\t\"start\": {\n\t\t\t\"column\": 59,\n\t\t\t\"line\": 100\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 101\n\t\t},\n\t\t\"message\": \"The attribute 'aria-autocomplete' is not supported by the role 'search'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 101\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 102\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colindex' is not supported by the role 'searchbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 102\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 103\n\t\t},\n\t\t\"message\": \"The attribute 'aria-sort' is not supported by the role 'separator'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 103\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 57,\n\t\t\t\"line\": 104\n\t\t},\n\t\t\"message\": \"The attribute 'aria-placeholder' is not supported by the role 'slider'\",\n\t\t\"start\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 104\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 105\n\t\t},\n\t\t\"message\": \"The attribute 'aria-posinset' is not supported by the role 'spinbutton'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 105\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 106\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'status'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 106\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 107\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'strong'\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 107\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 108\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colcount' is not supported by the role 'subscript'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 108\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 109\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'superscript'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 109\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 56,\n\t\t\t\"line\": 110\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'switch'\",\n\t\t\"start\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 110\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 111\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'tab'\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 111\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 112\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'table'\",\n\t\t\"start\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 112\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 113\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'tablist'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 113\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 114\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiselectable' is not supported by the role 'tabpanel'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 114\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 115\n\t\t},\n\t\t\"message\": \"The attribute 'aria-posinset' is not supported by the role 'term'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 115\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 116\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'textbox'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 116\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 117\n\t\t},\n\t\t\"message\": \"The attribute 'aria-selected' is not supported by the role 'time'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 117\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 118\n\t\t},\n\t\t\"message\": \"The attribute 'aria-sort' is not supported by the role 'timer'\",\n\t\t\"start\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 118\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 38,\n\t\t\t\"line\": 119\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'toolbar'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 119\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 120\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'tooltip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 120\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 121\n\t\t},\n\t\t\"message\": \"The attribute 'aria-expanded' is not supported by the role 'tree'\",\n\t\t\"start\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 121\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 122\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'treegrid'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 122\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 68,\n\t\t\t\"line\": 123\n\t\t},\n\t\t\"message\": \"The attribute 'aria-activedescendant' is not supported by the role 'treeitem'\",\n\t\t\"start\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 123\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 124\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colindex' is not supported by the role 'doc-abstract'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 124\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 125\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'doc-acknowledgments'\",\n\t\t\"start\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 125\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 126\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'doc-afterword'\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 126\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 127\n\t\t},\n\t\t\"message\": \"The attribute 'aria-activedescendant' is not supported by the role 'doc-appendix'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 127\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 128\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'doc-backlink'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 128\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 129\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemax' is not supported by the role 'doc-biblioentry'\",\n\t\t\"start\": {\n\t\t\t\"column\": 28,\n\t\t\t\"line\": 129\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 130\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'doc-bibliography'\",\n\t\t\"start\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 130\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 131\n\t\t},\n\t\t\"message\": \"The attribute 'aria-checked' is not supported by the role 'doc-biblioref'\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 131\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 132\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'doc-chapter'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 132\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 133\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'doc-colophon'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 133\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 134\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colindex' is not supported by the role 'doc-conclusion'\",\n\t\t\"start\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 134\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 135\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'doc-cover'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 135\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 136\n\t\t},\n\t\t\"message\": \"The attribute 'aria-selected' is not supported by the role 'doc-credit'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 136\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 137\n\t\t},\n\t\t\"message\": \"The attribute 'aria-orientation' is not supported by the role 'doc-credits'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 137\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 138\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'doc-dedication'\",\n\t\t\"start\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 138\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 139\n\t\t},\n\t\t\"message\": \"The attribute 'aria-checked' is not supported by the role 'doc-endnote'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 139\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 140\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colcount' is not supported by the role 'doc-endnotes'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 140\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 46,\n\t\t\t\"line\": 141\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiline' is not supported by the role 'doc-epigraph'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 141\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 142\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colcount' is not supported by the role 'doc-epilogue'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 142\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 143\n\t\t},\n\t\t\"message\": \"The attribute 'aria-sort' is not supported by the role 'doc-errata'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 143\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 144\n\t\t},\n\t\t\"message\": \"The attribute 'aria-multiselectable' is not supported by the role 'doc-example'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 144\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 145\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'doc-footnote'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 145\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 146\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'doc-foreword'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 146\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 147\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'doc-glossary'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 147\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 148\n\t\t},\n\t\t\"message\": \"The attribute 'aria-placeholder' is not supported by the role 'doc-glossref'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 148\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 149\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'doc-index'\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 149\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 150\n\t\t},\n\t\t\"message\": \"The attribute 'aria-pressed' is not supported by the role 'doc-introduction'\",\n\t\t\"start\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 150\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 151\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'doc-noteref'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 151\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 152\n\t\t},\n\t\t\"message\": \"The attribute 'aria-selected' is not supported by the role 'doc-notice'\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 152\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 153\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'doc-pagebreak'\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 153\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 154\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'doc-pagelist'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 154\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 155\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'doc-part'\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 155\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 156\n\t\t},\n\t\t\"message\": \"The attribute 'aria-orientation' is not supported by the role 'doc-preface'\",\n\t\t\"start\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 156\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 157\n\t\t},\n\t\t\"message\": \"The attribute 'aria-required' is not supported by the role 'doc-prologue'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 157\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 158\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowcount' is not supported by the role 'doc-pullquote'\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 158\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 159\n\t\t},\n\t\t\"message\": \"The attribute 'aria-setsize' is not supported by the role 'doc-qna'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 159\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 160\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowindex' is not supported by the role 'doc-subtitle'\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 160\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 161\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuenow' is not supported by the role 'doc-tip'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 161\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 162\n\t\t},\n\t\t\"message\": \"The attribute 'aria-posinset' is not supported by the role 'doc-toc'\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 162\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 166\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowspan' is not supported by the role 'textbox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 166\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 167\n\t\t},\n\t\t\"message\": \"The attribute 'aria-pressed' is not supported by the role 'textbox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 167\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 168\n\t\t},\n\t\t\"message\": \"The attribute 'aria-level' is not supported by the role 'textbox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 168\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 169\n\t\t},\n\t\t\"message\": \"The attribute 'aria-pressed' is not supported by the role 'textbox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 169\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 170\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'searchbox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 170\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 50,\n\t\t\t\"line\": 171\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemin' is not supported by the role 'combobox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 171\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 48,\n\t\t\t\"line\": 172\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colspan' is not supported by the role 'combobox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 172\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 173\n\t\t},\n\t\t\"message\": \"The attribute 'aria-posinset' is not supported by the role 'combobox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 173\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 174\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'combobox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 174\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 52,\n\t\t\t\"line\": 175\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowindex' is not supported by the role 'combobox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 175\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 53,\n\t\t\t\"line\": 176\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuemax' is not supported by the role 'button'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 36,\n\t\t\t\"line\": 176\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 177\n\t\t},\n\t\t\"message\": \"The attribute 'aria-modal' is not supported by the role 'button'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 177\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 51,\n\t\t\t\"line\": 178\n\t\t},\n\t\t\"message\": \"The attribute 'aria-placeholder' is not supported by the role 'button'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 178\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 40,\n\t\t\t\"line\": 179\n\t\t},\n\t\t\"message\": \"The attribute 'aria-rowindex' is not supported by the role 'checkbox'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 179\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 41,\n\t\t\t\"line\": 180\n\t\t},\n\t\t\"message\": \"The attribute 'aria-valuetext' is not supported by the role 'radio'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 180\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 39,\n\t\t\t\"line\": 181\n\t\t},\n\t\t\"message\": \"The attribute 'aria-checked' is not supported by the role 'slider'. This role is implicit on the element `<input>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 181\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 182\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colindex' is not supported by the role 'menuitem'. This role is implicit on the element `<menuitem>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 182\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 43,\n\t\t\t\"line\": 183\n\t\t},\n\t\t\"message\": \"The attribute 'aria-colcount' is not supported by the role 'menuitemcheckbox'. This role is implicit on the element `<menuitem>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 183\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_role_supports_aria_props_implicit\",\n\t\t\"end\": {\n\t\t\t\"column\": 53,\n\t\t\t\"line\": 184\n\t\t},\n\t\t\"message\": \"The attribute 'aria-placeholder' is not supported by the role 'menuitemradio'. This role is implicit on the element `<menuitem>`\",\n\t\t\"start\": {\n\t\t\t\"column\": 23,\n\t\t\t\"line\": 184\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_incorrect_aria_attribute_type_integer\",\n\t\t\"end\": {\n\t\t\t\"column\": 33,\n\t\t\t\"line\": 256\n\t\t},\n\t\t\"message\": \"The value of 'aria-level' must be an integer\",\n\t\t\"start\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 256\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-scope/input.svelte",
    "content": "<!-- valid -->\n<th scope></th>\n<svelte:element this={Math.random() ? 'th' : 'td'} scope />\n\n<!-- invalid -->\n<div scope></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-scope/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_misplaced_scope\",\n\t\t\"message\": \"The scope attribute should only be used with `<th>` elements\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-tabindex-no-positive/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<button tabindex='-1'>click me</button>\n<button tabindex='0'>click me</button>\n<button tabindex='1'>click me</button>\n<button tabindex='{foo}'>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/a11y-tabindex-no-positive/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_positive_tabindex\",\n\t\t\"message\": \"Avoid tabindex values above zero\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/action-on-component/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"component_invalid_directive\",\n\t\t\"message\": \"This type of directive is not valid on components\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/action-on-component/input.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\tfunction foo(){}\n</script>\n\n<Widget use:foo/>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-comment-siblings/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-comment-siblings/input.svelte",
    "content": "<script>\n\texport let things;\n\tfunction foo() {}\n</script>\n\n{#each things as thing (thing)}\n\t<!-- some comment -->\n\t<div animate:foo></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-duplicate/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"animation_duplicate\",\n\t\t\"message\": \"An element can only have one 'animate' directive\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 18\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 29\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-duplicate/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n{#each things as thing (thing)}\n\t<div animate:foo animate:bar></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-each-with-const/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-each-with-const/input.svelte",
    "content": "<script>\n  function flip(){}\n</script>\n\n<div>\n  {#each [] as n (n)}\n    {@const a = n}\n    <div animate:flip={a}></div>\n  {/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-each-with-whitespace/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-each-with-whitespace/input.svelte",
    "content": "<script>\n\tfunction flip() {}\n</script>\n\n<div>\n\t{#each [] as n (n)} <div animate:flip></div> {/each}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-not-in-each/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"animation_invalid_placement\",\n\t\t\"message\": \"An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 16\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-not-in-each/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n</script>\n\n<div animate:foo></div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-not-in-keyed-each/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"animation_missing_key\",\n\t\t\"message\": \"An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block. Did you forget to add a key to your each block?\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-not-in-keyed-each/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n</script>\n\n{#each things as thing}\n\t<div animate:foo></div>\n\t<div animate:foo></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-on-component/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"component_invalid_directive\",\n\t\t\"message\": \"This type of directive is not valid on components\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-on-component/input.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\tfunction foo() {}\n</script>\n\n<Widget animate:foo />"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-siblings/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"animation_invalid_placement\",\n\t\t\"message\": \"An element that uses the `animate:` directive must be the only child of a keyed `{#each ...}` block\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/animation-siblings/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n</script>\n\n{#each things as thing (thing)}\n\t<div animate:foo></div>\n\t<div animate:foo></div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/anonymous-declarations/class.svelte.js",
    "content": "export default class {}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/anonymous-declarations/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/anonymous-declarations/function.svelte.js",
    "content": "export default function () {}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/anonymous-declarations/input.svelte",
    "content": "<script>\n\timport func from './function.svelte.js';\n\timport klass from './class.svelte.js';\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 16,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 16,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const/input.svelte",
    "content": "<script>\n\tconst immutable = false;\n\n\tconst obj1 = { prop: true };\n\tconst obj2 = { prop: 0 };\n\n\tfunction shouldNotError() {\n\t\tobj1.prop = false;\n\t}\n\n\tfunction shouldNotError2() {\n\t\tobj2.prop++;\n\t}\n\n\tfunction shouldError() {\n\t\timmutable = true\n\t}\n\n\t\n</script>\n\n<button on:click={shouldNotError}>click</button>\n<button on:click={shouldNotError2}>click</button>\n<button on:click={shouldError}>click</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 24\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 35\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-2/input.svelte",
    "content": "<script>\n\tconst immutable = 0;\n\n\tconst obj1 = { prop: true };\n\tconst obj2 = { prop: 0 }\n</script>\n\n<!-- should not error -->\n<button on:click={() => obj1.prop = false}>click</button>\n<button on:click={() => obj2.prop++}>click</button>\n\n<!-- should error -->\n<button on:click={() => immutable++}>click</button>\n\n\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-3/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 14,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 14,\n\t\t\t\"column\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-3/input.svelte",
    "content": "<script>\n\tconst foo = 'hello';\n\t\n\tfunction shouldNotError() {\n\t\tlet foo = 0;\n\t\t\n\t\tfunction inner() {\n\t\t\tfoo = 1;\n\t\t}\n\t}\n\t\n\tfunction shouldError() {\n\t\tfunction inner() {\n\t\t\tfoo = 1;\n\t\t}\n\t}\n</script>\n\n<button on:click={shouldNotError}>click</button>\n<button on:click={shouldError}>click</button>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 9\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-4/input.svelte",
    "content": "<script>\n\tconst foo = 'hello';\n</script>\n\n<button on:click={() => {\n\tlet foo = 0;\n\t\t\n\tfunction inner() {\n\t\tfoo = 1;\n\t}\n}}>\n\tclick\n</button>\n\n<button on:click={() => {\n\tfunction inner() {\n\t\tfoo = 1;\n\t}\n}}>\n\tclick\n</button>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-5/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 33\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-5/input.svelte",
    "content": "<script>\n\tconst arr = [1, 2];\n\t[arr, arr[1]] = [arr[1], arr[0]];\n</script>\n\n{arr}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-6/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-6/input.svelte",
    "content": "<script>\n\tconst arr = [1, 2];\n\t[arr[0], arr[1]] = [arr[1], arr[0]];\n</script>\n\n{arr}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-7/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 42\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-7/input.svelte",
    "content": "<script>\n\tconst arr = [{1: {arr: 2}}, 2];\n\t[{1: { arr }}, arr[1]] = [arr[1], arr[0]];\n</script>\n\n{arr}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-8/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/assignment-to-const-8/input.svelte",
    "content": "<script>\n\tconst arr = [1, 2];\n\t[arr[0], arr[1] = arr] = [arr[1], arr[0]];\n</script>\n\n{arr}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-expected-equals/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"expected_token\",\n\t\t\"message\": \"Expected token =\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 9\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-expected-equals/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n</script>\n\n<h1 class\"=foo\">Hello {name}!</h1>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_name\",\n\t\t\"message\": \"'}' is not a valid attribute name\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 4\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name/input.svelte",
    "content": "<p }>Test</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_name\",\n\t\t\"message\": \"'3aa' is not a valid attribute name\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-2/input.svelte",
    "content": "<p 3aa=\"abc\">Test</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-3/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_name\",\n\t\t\"message\": \"'a*a' is not a valid attribute name\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 6\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-3/input.svelte",
    "content": "<p a*a>Test</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_name\",\n\t\t\"message\": \"'-a' is not a valid attribute name\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-4/input.svelte",
    "content": "<p -a>Test</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-5/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_name\",\n\t\t\"message\": \"'a;' is not a valid attribute name\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 11\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-invalid-name-5/input.svelte",
    "content": "<p a;=\"abc\">Test</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-quoted/input.svelte",
    "content": "<svelte:options runes />\n\n<!-- don't warn on these -->\n\n<!-- prettier-ignore -->\n<p class=\"{foo}\"></p>\n<!-- prettier-ignore -->\n<svelte:element this={foo} class=\"{foo}\"></svelte:element>\n\n<!-- warn on these -->\n\n<!-- prettier-ignore -->\n<Component class=\"{foo}\" />\n<!-- prettier-ignore -->\n<svelte:component this={foo} class=\"{foo}\" />\n<!-- prettier-ignore -->\n{#if foo}\n\t<!-- svelte-ignore svelte_self_deprecated -->\n\t<svelte:self class=\"{foo}\" />\n{/if}\n<!-- prettier-ignore -->\n<custom-element class=\"{foo}\"></custom-element>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-quoted/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_quoted\",\n\t\t\"message\": \"Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\",\n\t\t\"start\": {\n\t\t\t\"column\": 11,\n\t\t\t\"line\": 13\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 13\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"svelte_component_deprecated\",\n\t\t\"end\": {\n\t\t\t\"column\": 45,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"`<svelte:component>` is deprecated in runes mode — components are dynamic by default\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"attribute_quoted\",\n\t\t\"message\": \"Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\",\n\t\t\"start\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 42,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"attribute_quoted\",\n\t\t\"message\": \"Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\",\n\t\t\"start\": {\n\t\t\t\"column\": 14,\n\t\t\t\"line\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 19\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"attribute_quoted\",\n\t\t\"message\": \"Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 22\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-unique-allowed/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/attribute-unique-allowed/input.svelte",
    "content": "<div color=\"red\" style:color=\"red\" class:color={true} ></div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-component-is-used/input.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n\n\texport let promise;\n</script>\n\n{#await promise}\n\t<p>Loading</p>\n{:then data}\n\t<Component {data} />\n{:catch err}\n\t<p>Error: {err}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-component-is-used/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-no-catch/input.svelte",
    "content": "<script>\n\tlet promise;\n</script>\n\n{#await promise}\n\t<p>Loading</p>\n{:then data}\n\t<p>Data: {data}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-no-catch/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-shorthand-no-catch/input.svelte",
    "content": "<script>\n\tlet promise;\n</script>\n\n{#await promise then data}\n\t<p>Data: {data}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-shorthand-no-catch/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-shorthand-no-then/input.svelte",
    "content": "<script>\n\tlet promise;\n</script>\n\n{#await promise catch error}\n\t<p>Error: {error}</p>\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/await-shorthand-no-then/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/bidirectional-control-characters/input.svelte",
    "content": "<script>\n    let name = '\\u2067\\u2066rld\\u2069\\u2066wo\\u2069\\u2069';\n</script>\n⁧⁦def⁩⁦abc⁩⁩\n<h1>Hello, {name}!</h1>\n\n<!-- svelte-ignore bidirectional_control_characters -->\n⁧⁦def⁩⁦abc⁩⁩\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/bidirectional-control-characters/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"bidirectional_control_characters\",\n\t\t\"message\": \"A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 58\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"bidirectional_control_characters\",\n\t\t\"message\": \"A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 2\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"bidirectional_control_characters\",\n\t\t\"message\": \"A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"bidirectional_control_characters\",\n\t\t\"message\": \"A bidirectional control character was detected in your code. These characters can be used to alter the visual direction of your code and could have unintended consequences\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 10\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/bind-group-snippet-parameter/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_group_invalid_snippet_parameter\",\n\t\t\"end\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"message\": \"Cannot `bind:group` to a snippet parameter\",\n\t\t\"start\": {\n\t\t\t\"column\": 21,\n\t\t\t\"line\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/bind-group-snippet-parameter/input.svelte",
    "content": "{#snippet test(group)}\n\t<input type=\"radio\" bind:group={group.name} />\n{/snippet}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/bind_group_invalid_expression/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_group_invalid_expression\",\n\t\t\"message\": \"`bind:group` can only bind to an Identifier or MemberExpression\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 38\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 84\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/bind_group_invalid_expression/input.svelte",
    "content": "<script>\n\tlet values = $state([{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }]);\n\tlet selected = $state(values[1]);\n</script>\n\n{#each values as value}\n\t<label>\n\t\t<input type=\"radio\" value=\"{value}\" bind:group={() => selected, v => selected = v} /> {value.name}\n\t</label>\n{/each}\n\n<p>{selected.name}</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-await-catch/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-await-catch/input.svelte",
    "content": "<script>\n  let promise = 0;\n</script>\n{#await promise}\n{:catch error}\n  <input bind:value={error} />\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-await-then/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-await-then/input.svelte",
    "content": "<script>\n  let promise = 0;\n</script>\n{#await promise then value}\n  <input bind:value />\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-await-then-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-await-then-2/input.svelte",
    "content": "<script>\n  let promise = 0;\n</script>\n{#await promise}\n{:then value}\n  <input bind:value />\n{/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-const/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-const/input.svelte",
    "content": "<script>\n\tconst dummy = 'foo';\n</script>\n\n<input bind:value={dummy}>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-const-field/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-const-field/input.svelte",
    "content": "<script>\n\tconst dummy = {\n\t\tfoo: 'bar'\n\t};\n</script>\n\n<input bind:value={dummy.foo}>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-dimensions-svg/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_target\",\n\t\t\"message\": \"`bind:offsetWidth` can only be used with non-`<svg>` elements. Use `bind:clientWidth` for `<svg>` instead\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 21\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-dimensions-svg/input.svelte",
    "content": "<script>\n\tlet offsetWidth;\n</script>\n\n<svg bind:offsetWidth></svg>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-import-component/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to import\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-import-component/input.svelte",
    "content": "<script>\n\timport Input from './Input.svelte';\n\timport { dummy } from './dummy.js';\n</script>\n\n<Input bind:value={dummy} />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-import-element/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to import\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-import-element/input.svelte",
    "content": "<script>\n\timport { dummy } from './dummy.js';\n</script>\n\n<input bind:value={dummy}>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-input-checked/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_target\",\n\t\t\"message\": \"`bind:checked` can only be used with `<input type=\\\"checkbox\\\">`\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-input-checked/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<input bind:checked={foo}>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-input-type-boolean/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_type\",\n\t\t\"message\": \"'type' attribute must be a static text value if input uses two-way binding\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 24\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 28\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-input-type-boolean/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<input bind:value={foo} type>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_name\",\n\t\t\"message\": \"`bind:whatever` is not a valid binding\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid/input.svelte",
    "content": "<script>\n\tlet whatever;\n</script>\n\n<div bind:whatever></div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-on-element/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_target\",\n\t\t\"message\": \"`bind:value` can only be used with `<input>`, `<textarea>`, `<select>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-on-element/input.svelte",
    "content": "<script>\n\tlet value;\n</script>\n\n<div bind:value></div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-on-element-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_target\",\n\t\t\"message\": \"`bind:open` can only be used with `<details>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 14\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-on-element-2/input.svelte",
    "content": "<script>\n\tlet open;\n</script>\n\n<div bind:open></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-value/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_value\",\n\t\t\"message\": \"Can only bind to state or props\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-value/input.svelte",
    "content": "<script></script>\n<input bind:value={foo}>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-value-global/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_value\",\n\t\t\"message\": \"Can only bind to state or props\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-invalid-value-global/input.svelte",
    "content": "<script>\n\t\tconsole.log(foo);\n</script>\n<input bind:value={foo}>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-let/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-let/input.svelte",
    "content": "<script>\n\tlet Foo;\n</script>\n\n<Foo let:bar>\n\t<input bind:value={bar}>\n</Foo>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-radio-input-checked/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_target\",\n\t\t\"message\": \"`bind:checked` can only be used with `<input type=\\\"checkbox\\\">` — for `<input type=\\\"radio\\\">`, use `bind:group`\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 20\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 38\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-radio-input-checked/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<input type=\"radio\" bind:checked={foo}>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-select-multiple-dynamic/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_multiple\",\n\t\t\"message\": \"'multiple' attribute must be static if select uses two-way binding\",\n\t\t\"start\": {\n\t\t\t\"line\": 14,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 14,\n\t\t\t\"column\": 29\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-select-multiple-dynamic/input.svelte",
    "content": "<script>\n\tlet value;\n\tlet multiple;\n</script>\n\n<!-- ok -->\n<select bind:this={value} {multiple}>\n\t<option>1</option>\n\t<option>2</option>\n\t<option>3</option>\n</select>\n\n<!-- error -->\n<select bind:value {multiple}>\n\t<option>1</option>\n\t<option>2</option>\n\t<option>3</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-this-input-type-dynamic/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/binding-this-input-type-dynamic/input.svelte",
    "content": "<script>\n\tlet foo;\n\tlet inputType;\n</script>\n\n<input bind:this={foo} type={inputType}>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/catch-declares-error-variable/input.svelte",
    "content": "<script>\n\tlet value = null;\n</script>\n\n<button on:click={event => {\n\ttry {\n\t\tthrow new Error('foo');\n\t} catch (error) {\n\t\tvalue = error;\n\t}\n}}>Click to create error</button>\n\n{String(value)}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/catch-declares-error-variable/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-1/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_duplicate\",\n\t\t\"message\": \"`count` has already been declared on this class\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-1/input.svelte.js",
    "content": "export class Counter {\n\tcount = $state(0);\n\n\tconstructor() {\n\t\tthis.count = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-10/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_invalid_assignment\",\n\t\t\"message\": \"Cannot assign to a state field before its declaration\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-10/input.svelte.js",
    "content": "export class Counter {\n\tconstructor() {\n\t\tif (true) {\n\t\t\tthis.count = -1;\n\t\t}\n\n\t\tthis.count = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_duplicate\",\n\t\t\"message\": \"`count` has already been declared on this class\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-2/input.svelte.js",
    "content": "export class Counter {\n\tconstructor() {\n\t\tthis.count = $state(0);\n\t\tthis.count = 1;\n\t\tthis.count = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-3/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_duplicate\",\n\t\t\"message\": \"`count` has already been declared on this class\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 28\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-3/input.svelte.js",
    "content": "export class Counter {\n\tconstructor() {\n\t\tthis.count = $state(0);\n\t\tthis.count = 1;\n\t\tthis.count = $state.raw(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_invalid_placement\",\n\t\t\"message\": \"`$state(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-4/input.svelte.js",
    "content": "export class Counter {\n\tconstructor() {\n\t\tif (true) {\n\t\t\tthis.count = $state(0);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-5/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_duplicate\",\n\t\t\"message\": \"`count` has already been declared on this class\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-5/input.svelte.js",
    "content": "export class Counter {\n\t// prettier-ignore\n\t'count' = $state(0);\n\tconstructor() {\n\t\tthis['count'] = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-6/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_duplicate\",\n\t\t\"message\": \"`count` has already been declared on this class\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-6/input.svelte.js",
    "content": "export class Counter {\n\tcount = $state(0);\n\tconstructor() {\n\t\tthis['count'] = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-7/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_invalid_placement\",\n\t\t\"message\": \"`$state(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-7/input.svelte.js",
    "content": "const count = 'count';\n\nexport class Counter {\n\tconstructor() {\n\t\tthis[count] = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-8/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_field_invalid_assignment\",\n\t\t\"message\": \"Cannot assign to a state field before its declaration\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-8/input.svelte.js",
    "content": "export class Counter {\n\tconstructor() {\n\t\tthis.count = -1;\n\t\tthis.count = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-9/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"duplicate_class_field\",\n\t\t\"message\": \"`count` has already been declared\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/class-state-constructor-9/input.svelte.js",
    "content": "export class Counter {\n\tcount = -1;\n\tstatic count() {}\n\tconstructor() {\n\t\tthis.count = $state(0);\n\t}\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/comment-before-function-binding/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/comment-before-function-binding/input.svelte",
    "content": "<script>\n\tlet value = '';\n</script>\n\n<input bind:value={\n\t/** ( */\n\t() => value,\n\t(v) => value = v.toLowerCase()\n}\n/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-event-modifiers-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"Event modifiers other than 'once' can only be used on DOM elements\",\n\t\t\"code\": \"event_handler_invalid_component_modifier\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 40\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-event-modifiers-invalid/input.svelte",
    "content": "<script>\n\timport Button from './Button.svelte';\n\tconst doThat = () => {};\n</script>\n\n<Button on:click|preventDefault={doThat}></Button>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-invalid-style-directive/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"component_invalid_directive\",\n\t\t\"message\": \"This type of directive is not valid on components\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 36\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-invalid-style-directive/input.svelte",
    "content": "<script>\n\tlet name = 'world';\n\t\n\timport Child from 'Child.svelte';\n</script>\n\n<Child name={name} style:color=\"red\" />"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-legacy-instantiation/input.svelte",
    "content": "<script>\n\timport Foo, { Bar } from './Somewhere.svelte';\n\timport Baz from './somewhereelse';\n\n\tlet Buzz;\n\n\tnew Foo({ target: null });\n\tnew Foo({}); // also a false negative to be really sure we don't get false positives\n\tnew Foo();\n\tnew Bar();\n\tnew Baz();\n\tnew Buzz();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-legacy-instantiation/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"legacy_component_creation\",\n\t\t\"message\": \"Svelte 5 components are no longer classes. Instantiate them using `mount` or `hydrate` (imported from 'svelte') instead.\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 26,\n\t\t\t\"line\": 7\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-name-lowercase/input.svelte",
    "content": "<script>\n\timport thisShouldWarnMe from './MyComponent.svelte';\n\timport { form } from './form';\n\tlet i;\n\tform;\n</script>\n\n<thisShouldWarnMe></thisShouldWarnMe>\n<i></i>\n<form></form>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-name-lowercase/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"component_name_lowercase\",\n\t\t\"message\": \"`<thisShouldWarnMe>` will be treated as an HTML element unless it begins with a capital letter\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-namespaced/input.svelte",
    "content": "<script>\n\timport * as NS from 'some-library';\n</script>\n\n<NS.Foo/>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-namespaced/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slot-default-reserved/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_element_invalid_name_default\",\n\t\t\"message\": \"`default` is a reserved word — it cannot be used as a slot name\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slot-default-reserved/input.svelte",
    "content": "<slot name='default'></slot>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slot-dynamic/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_element_invalid_name\",\n\t\t\"message\": \"slot attribute must be a static value\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slot-dynamic/input.svelte",
    "content": "<slot name='{foo}'></slot>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slot-dynamic-attribute/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_attribute_invalid\",\n\t\t\"message\": \"slot attribute must be a static value\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slot-dynamic-attribute/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<button slot={foo}>click me</button>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-custom-element/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-custom-element/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\tlet thing = false;\n</script>\n\n<Nested>\n\t<custom-element>\n\t\t<div>\n\t\t\t<div slot='foo'></div>\n\t\t</div>\n\t\t{#if thing}\n\t\t\t<div slot='bar'></div>\n\t\t{/if}\n\t</custom-element>\n</Nested>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-custom-element-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_attribute_invalid_placement\",\n\t\t\"message\": \"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\",\n\t\t\"start\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-custom-element-2/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n\tlet thing = false;\n</script>\n\n<custom-element>\n\t<Nested>\n\t\t{#if thing}\n\t\t\t<div>\n\t\t\t\t<div slot='bar'></div>\n\t\t\t</div>\n\t\t{/if}\n\t</Nested>\n</custom-element>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-each-block/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_attribute_invalid_placement\",\n\t\t\"message\": \"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-each-block/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t{#each things as thing}\n\t\t<div slot='foo'>{thing}</div>\n\t{/each}\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-if-block/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_attribute_invalid_placement\",\n\t\t\"message\": \"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/component-slotted-if-block/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t{#if thing}\n\t\t<div slot='foo'>{thing}</div>\n\t{/if}\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-conflict-1/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"declaration_duplicate\",\n\t\t\"message\": \"`a` has already been declared\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 10\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 11\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-conflict-1/input.svelte",
    "content": "<script>\n  export let array;\n</script>\n\n{#each array as item}\n  {@const a = item}\n  {@const a = item}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-conflict-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"declaration_duplicate\",\n\t\t\"message\": \"`item` has already been declared\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 10\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 14\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-conflict-2/input.svelte",
    "content": "<script>\n  export let array;\n</script>\n\n{#each array as item}\n  {@const item = 123}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-inside-key-block/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-inside-key-block/input.svelte",
    "content": "{#key 'key'}\n\t{@const foo = 'bar'}\n{/key}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-invalid-rune-usage/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_invalid_placement\",\n\t\t\"message\": \"`$derived(...)` can only be used as a variable declaration initializer, a class field declaration, or the first assignment to a class field at the top level of the constructor.\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 26\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-invalid-rune-usage/input.svelte",
    "content": "{#snippet test()}\n\t{@const der = $derived(0)}\n{/snippet}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-placement-1/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"const_tag_invalid_placement\",\n\t\t\"message\": \"`{@const}` must be the immediate child of `{#snippet}`, `{#if}`, `{:else if}`, `{:else}`, `{#each}`, `{:then}`, `{:catch}`, `<svelte:fragment>`, `<svelte:boundary>` or `<Component>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-placement-1/input.svelte",
    "content": "<script>\n  export let a;\n</script>\n\n{@const b = a + 1}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-placement-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"const_tag_invalid_placement\",\n\t\t\"message\": \"`{@const}` must be the immediate child of `{#snippet}`, `{#if}`, `{:else if}`, `{:else}`, `{#each}`, `{:then}`, `{:catch}`, `<svelte:fragment>`, `<svelte:boundary>` or `<Component>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 4\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-placement-2/input.svelte",
    "content": "<script>\n  export let a;\n</script>\n\n{#each a as i}\n  <div>\n    {@const b = i}\n  </div>\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-placement-svelte-boundary/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-placement-svelte-boundary/input.svelte",
    "content": "<script>\n  let a = $state(\"\");\n</script>\n\n<svelte:boundary>\n\t{@const x = a}\n\t{x}\n\t<FlakyComponent />\n</svelte:boundary>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-readonly-1/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_assignment\",\n\t\t\"message\": \"Cannot assign to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 26\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 30\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-readonly-1/input.svelte",
    "content": "<script>\n  export let array;\n</script>\n\n{#each array as a}\n  {@const b = a + 1}\n  <button on:click={() => b ++}></button>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-readonly-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"constant_binding\",\n\t\t\"message\": \"Cannot bind to constant\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 23\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/const-tag-readonly-2/input.svelte",
    "content": "<script>\n  export let array;\n</script>\n\n{#each array as a}\n  {@const b = a + 1}\n  <input bind:value={b} />\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/contenteditable-dynamic/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_contenteditable_dynamic\",\n\t\t\"message\": \"'contenteditable' attribute cannot be dynamic if element uses two-way binding\",\n\t\t\"start\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 32\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/contenteditable-dynamic/input.svelte",
    "content": "<script>\n    export let name;\n\n    let toggle = false;\n</script>\n<!-- ok -->\n<editor contenteditable=\"true\" bind:innerHTML={name}></editor>\n<editor contenteditable=\"\" bind:innerHTML={name}></editor>\n<editor contenteditable bind:innerHTML={name}></editor>\n<!-- error -->\n<editor contenteditable={toggle} bind:innerHTML={name}></editor>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/contenteditable-missing/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_contenteditable_missing\",\n\t\t\"message\": \"'contenteditable' attribute is required for textContent, innerHTML and innerText two-way bindings\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 31\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/contenteditable-missing/input.svelte",
    "content": "<script>\n    export let name;\n</script>\n<editor bind:textContent={name}></editor>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-1/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_selector_invalid\",\n\t\t\"message\": \"Invalid selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-1/input.svelte",
    "content": "<p><span /></p>\n\n<style>\n\tp > span {\n\t\tcolor: red;\n\t}\n\t:has(> span) {\n\t\tcolor: red;\n\t}\n\t> span {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_selector_invalid\",\n\t\t\"message\": \"Invalid selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-2/input.svelte",
    "content": "<p><span /></p>\n<p><span /></p>\n\n<style>\n\tp + p {\n\t\tcolor: red;\n\t}\n\t+ p {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-3/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_selector_invalid\",\n\t\t\"message\": \"Invalid selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-3/input.svelte",
    "content": "<p><span /></p>\n\n<style>\n\t@media screen {\n\t\t> span {\n\t\t\tcolor: red;\n\t\t}\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_selector_invalid\",\n\t\t\"message\": \"Invalid selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-combinator-selector-4/input.svelte",
    "content": "<p><span /></p>\n\n<style>\n\tp > {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_placement\",\n\t\t\"message\": \"`:global(...)` can be at the start or end of a selector sequence, but not in the middle\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement/input.svelte",
    "content": "<style>\n\t.foo :global(.bar) .baz {\n\t\tcolor: red;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_placement\",\n\t\t\"message\": \"`:global(...)` can be at the start or end of a selector sequence, but not in the middle\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-2/input.svelte",
    "content": "<style>\n\t.foo :global(.bar):first-child {\n\t\tcolor: red;\n\t}\n\t.foo :global(p):first-child {\n\t\tcolor: red;\n\t}\n\t.foo :global(.bar):first-child .baz {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-3/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_placement\",\n\t\t\"message\": \"`:global(...)` can be at the start or end of a selector sequence, but not in the middle\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-3/input.svelte",
    "content": "<style>\n\t.foo :global(.bar)::after {\n\t\tcolor: red;\n\t}\n\t.foo :global(.bar)::after .baz {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector_list\",\n\t\t\"message\": \"`:global(...)` must not contain type or universal selectors when used in a compound selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-4/input.svelte",
    "content": "<style>\n\t.foo:global(div) {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-5/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector_list\",\n\t\t\"message\": \"`:global(...)` must not contain type or universal selectors when used in a compound selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 21\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-5/input.svelte",
    "content": "<style>\n\t.foo:global(div.bar) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div class=\"foo\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-6/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector_list\",\n\t\t\"message\": \"`:global(...)` must not contain type or universal selectors when used in a compound selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-placement-6/input.svelte",
    "content": "<style>\n\t:global(div):first-child {\n\t\tcolor: red;\n\t}\n\t.foo:global(div):first-child {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector\",\n\t\t\"message\": \"`:global(...)` must contain exactly one selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector/input.svelte",
    "content": "<style>\n\tdiv :global(.h1\\,h2\\,h3) {\n\t\tcolor: red;\n\t}\n\t:global(h1, h2, h3) {\n\t\tcolor: red;\n\t}\n\tdiv, :global(h1, h2, h3) {\n\t\tcolor: red;\n\t}\n\tdiv :global(h1, h2, h3) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector\",\n\t\t\"message\": \"`:global(...)` must contain exactly one selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 29\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-2/input.svelte",
    "content": "<style>\n\tdiv :global(:is(h1, h2)) {\n\t\tcolor: red;\n\t}\n\tdiv :global(:where(h1, h2)) {\n\t\tcolor: red;\n\t}\n\tdiv :global(h1 ~ :is(h2, h3)) {\n\t\tcolor: red;\n\t}\n\tdiv :global(:is(h1, h2), h3) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-3/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector\",\n\t\t\"message\": \"`:global(...)` must contain exactly one selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 44\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-3/input.svelte",
    "content": "<style>\n\tdiv :global(h1[data-title=\"Hello, world!\"]) {\n\t\tcolor: red;\n\t}\n\tdiv :global(h1[attribute], video[autoplay]) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector\",\n\t\t\"message\": \"`:global(...)` must contain exactly one selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-4/input.svelte",
    "content": "<style>\n\tdiv :global(h1, .abc\\)) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-5/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector\",\n\t\t\"message\": \"`:global(...)` must contain exactly one selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-5/input.svelte",
    "content": "<style>\n\t:global(h1, h2, h3), div {\n\t\tcolor: red;\n\t}\n\t:global(h1, h2, h3) div {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-6/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector\",\n\t\t\"message\": \"`:global(...)` must contain exactly one selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-6/input.svelte",
    "content": "<style>\n\t:global(.h1\\,h2\\,h3)::foo {\n\t\tcolor: red;\n\t}\n\t:global(h1, h2, h3)::foo {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-list/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_global_invalid_selector_list\",\n\t\t\"message\": \"`:global(...)` must not contain type or universal selectors when used in a compound selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 20,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 20,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-global-selector-list/input.svelte",
    "content": "<style>\n\t::foo:global([data-state='checked']) {\n\t\tcolor: red;\n\t}\n\t::foo:global(.foo) {\n\t\tcolor: red;\n\t}\n\t::foo:global(#foo) {\n\t\tcolor: red;\n\t}\n\t::foo:global(::foo) {\n\t\tcolor: red;\n\t}\n\t::foo:global(:foo) {\n\t\tcolor: red;\n\t}\n\t:global(h1) {\n\t\tcolor: red;\n\t}\n\t::foo:global(h1) {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1>hello world</h1>\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-type-selector-placement/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_type_selector_invalid_placement\",\n\t\t\"message\": \"`:global(...)` must not be followed by a type selector\",\n\t\t\"start\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 14\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 16\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-invalid-type-selector-placement/input.svelte",
    "content": "<style>\n\t:global(.foo):foo {\n\t\tcolor: red;\n\t}\n\t:global(.foo)::foo {\n\t\tcolor: red;\n\t}\n\t:global(.foo).bar {\n\t\tcolor: red;\n\t}\n\t:global(.foo)#baz {\n\t\tcolor: red;\n\t}\n\t:global(.foo)[id] {\n\t\tcolor: red;\n\t}\n\t:global(.foo)h1 {\n\t\tcolor: red;\n\t}\n</style>\n\n<div>\n\t<h1 class=\"bar\" id=\"baz\">hello world</h1>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-mismatched-quotes/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-mismatched-quotes/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"unexpected_eof\",\n\t\t\"message\": \"Unexpected end of input\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/css-mismatched-quotes/input.svelte",
    "content": "<div></div>\n\n<style>\n\tdiv {\n\t\tbackground-image: url(\"star.gif');\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/custom-element-props-identifier/input.svelte",
    "content": "<svelte:options customElement={{}} />\n\n<script>\n\tlet props = $props();\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/custom-element-props-identifier/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"options_missing_custom_element\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"message\": \"The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 1\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"custom_element_props_identifier\",\n\t\t\"end\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"Using a rest element or a non-destructured declaration with `$props()` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the `customElement.props` option.\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 4\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/custom-element-props-identifier-props-option/input.svelte",
    "content": "<svelte:options customElement={{\n\tprops: {}\n}} />\n\n<script>\n\tlet props = $props();\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/custom-element-props-identifier-props-option/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"options_missing_custom_element\",\n\t\t\"end\": {\n\t\t\t\"column\": 2,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 1\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/custom-element-props-identifier-rest/input.svelte",
    "content": "<svelte:options customElement={{}} />\n\n<script>\n\tlet { ...props } = $props();\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/custom-element-props-identifier-rest/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"options_missing_custom_element\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"message\": \"The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\",\n\t\t\"start\": {\n\t\t\t\"column\": 16,\n\t\t\t\"line\": 1\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"custom_element_props_identifier\",\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"Using a rest element or a non-destructured declaration with `$props()` means that Svelte can't infer what properties to expose when creating a custom element. Consider destructuring all the props or explicitly specifying the `customElement.props` option.\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 4\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/debug-invalid-args/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"debug_tag_invalid_arguments\",\n\t\t\"message\": \"{@debug ...} arguments must be identifiers, not arbitrary expressions\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 9\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/debug-invalid-args/input.svelte",
    "content": "<p>\n\t{@debug a + b}\n\t{a + b}\n</p>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"module_illegal_default_export\",\n\t\t\"message\": \"A component cannot have a default export\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export/input.svelte",
    "content": "<script>\n\texport default 42;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-anonymous-class/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"module_illegal_default_export\",\n\t\t\"message\": \"A component cannot have a default export\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 30\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-anonymous-class/input.svelte",
    "content": "<script>\n\texport default function () {};\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-anonymous-function/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"module_illegal_default_export\",\n\t\t\"message\": \"A component cannot have a default export\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 24\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-anonymous-function/input.svelte",
    "content": "<script>\n\texport default class {};\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-indirect/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"module_illegal_default_export\",\n\t\t\"message\": \"A component cannot have a default export\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 4\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 32\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-indirect/input.svelte",
    "content": "<script module>\n    let answer = 42;\n    export { answer as default};\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-module/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"module_illegal_default_export\",\n\t\t\"message\": \"A component cannot have a default export\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/default-export-module/input.svelte",
    "content": "<script module>\n\texport default 42;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/directive-non-expression/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"directive_invalid_value\",\n\t\t\"message\": \"Directive value must be a JavaScript expression enclosed in curly braces\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/directive-non-expression/input.svelte",
    "content": "<div on:click=\"invalid\"></div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_name\",\n\t\t\"message\": \"`bind:clientWidth` is not a valid binding. Possible bindings for <svelte:document> are activeElement, focused, fullscreenElement, pointerLockElement, this, visibilityState\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 17\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 39\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/input.svelte",
    "content": "<script>\n    let foo;\n</script>\n\n<svelte:document bind:clientWidth={foo} />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-dollar-global-in-markup/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"global_reference_invalid\",\n\t\t\"message\": \"`$$billsyall` is an illegal variable name. To reference a global variable called `$$billsyall`, use `globalThis.$$billsyall`\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-dollar-global-in-markup/input.svelte",
    "content": "{$$billsyall}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-dollar-global-in-script/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"global_reference_invalid\",\n\t\t\"message\": \"`$$billsyall` is an illegal variable name. To reference a global variable called `$$billsyall`, use `globalThis.$$billsyall`\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-dollar-global-in-script/input.svelte",
    "content": "<script>\n\t$$billsyall;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-global-in-markup/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"global_reference_invalid\",\n\t\t\"message\": \"`$` is an illegal variable name. To reference a global variable called `$`, use `globalThis.$`\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-global-in-markup/input.svelte",
    "content": "{$}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-global-in-script/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"global_reference_invalid\",\n\t\t\"message\": \"`$` is an illegal variable name. To reference a global variable called `$`, use `globalThis.$`\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dollar-global-in-script/input.svelte",
    "content": "<script>\n\t$;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dynamic-element-invalid-tag/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_element_missing_this\",\n\t\t\"message\": \"`<svelte:element>` must have a 'this' attribute with a value\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 17\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 21\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dynamic-element-invalid-tag/input.svelte",
    "content": "<div>\n\t<svelte:element this>foo</svelte:element>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dynamic-element-missing-tag/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_element_missing_this\",\n\t\t\"message\": \"`<svelte:element>` must have a 'this' attribute with a value\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dynamic-element-missing-tag/input.svelte",
    "content": "<div>\n\t<svelte:element>foo</svelte:element>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dynamic-element-this/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"unexpected_reserved_word\",\n\t\t\"message\": \"'this' is a reserved word in JavaScript and cannot be used here\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 18\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/dynamic-element-this/input.svelte",
    "content": "<div>\n\t<svelte:element {this}>foo</svelte:element>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-destructured-object-rest-comma-after/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"js_parse_error\",\n\t\t\"message\": \"Comma is not permitted after the rest element\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 53\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 53\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-destructured-object-rest-comma-after/input.svelte",
    "content": "<script>\n\texport let animalEntries;\n</script>\n\n{#each animalEntries as { animal, features: { ...rest, eyes } } }\n\t<p {...rest}>{animal} {eyes}</p>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-invalid-context/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"unexpected_reserved_word\",\n\t\t\"message\": \"'case' is a reserved word in JavaScript and cannot be used here\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-invalid-context/input.svelte",
    "content": "{#each cases as case}\n\t{case.title}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-invalid-context-destructured/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"js_parse_error\",\n\t\t\"message\": \"Unexpected token\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 17\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-invalid-context-destructured/input.svelte",
    "content": "{#each cases as [case]}\n\t{case.title}\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-invalid-context-destructured-object/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"js_parse_error\",\n\t\t\"message\": \"Unexpected keyword 'case'\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 18\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-invalid-context-destructured-object/input.svelte",
    "content": "{#each cases as { case }}\n\t{case.title}\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-multiple-children/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-multiple-children/input.svelte",
    "content": "<script>\n\texport let things;\n\texport let soDoesThis;\n</script>\n\n{#each things as thing}\n\t<span>this only exists...</span>\n\t<span>...to increase test coverage</span>\n{/each}\n\n{#each things as thing}{soDoesThis}{/each}\n\n{#each things as thing}\n\tandThis\n{/each}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/each-block-multiple-children/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/empty-block/input.svelte",
    "content": "<script>\n\tlet things = [];\n</script>\n\n<!-- ok (zero elements very likely means someone's in the middle of typing) -->\n{#each things as thing}{/each}\n{#if true}{/if}\n{#key things}x{/key}\n{#await promise}{things}\n{/await}\n\n<!-- invalid -->\n{#each things as thing}\n\n{/each}\n{#if true} {/if}\n{#key things} {/key}\n{#await promise} {/await}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/empty-block/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"block_empty\",\n\t\t\"message\": \"Empty block\",\n\t\t\"start\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 23\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 15,\n\t\t\t\"column\": 0\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"block_empty\",\n\t\t\"message\": \"Empty block\",\n\t\t\"start\": {\n\t\t\t\"line\": 16,\n\t\t\t\"column\": 10\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 16,\n\t\t\t\"column\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"block_empty\",\n\t\t\"message\": \"Empty block\",\n\t\t\"start\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 13\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 17,\n\t\t\t\"column\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"block_empty\",\n\t\t\"message\": \"Empty block\",\n\t\t\"start\": {\n\t\t\t\"line\": 18,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 18,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/error-mode-warn/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({ skip: true });\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/error-mode-warn/input.svelte",
    "content": "<script>\n\tconst dummy = 'foo';\n</script>\n\n<input bind:value={dummy}>\n<input bind:value={undeclared}>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/error-mode-warn/options.json",
    "content": "{\n\t\"errorMode\": \"warn\"\n}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/error-mode-warn/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"invalid_const_assignment\",\n\t\t\"message\": \"Invalid assignment to const\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"bind_invalid_value\",\n\t\t\"message\": \"Can only bind to state or props\",\n\t\t\"end\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"start\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 6\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-attribute/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"Event attribute must be a JavaScript expression, not a string\",\n\t\t\"code\": \"attribute_invalid_event_handler\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 21\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-attribute/input.svelte",
    "content": "<button onclick={() => {}}>ok</button>\n<Button onclick onbar=\"bar\">ok</Button>\n\n<button onclick=\"foo\">not ok</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-modifiers-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"Valid event modifiers are preventDefault, stopPropagation, stopImmediatePropagation, capture, once, passive, nonpassive, self or trusted\",\n\t\t\"code\": \"event_handler_invalid_modifier\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 34\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-modifiers-invalid/input.svelte",
    "content": "<button on:click|stop|bad={doThat}></button>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-modifiers-invalid-nonpassive/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"The 'passive' and 'nonpassive' modifiers cannot be used together\",\n\t\t\"code\": \"event_handler_invalid_modifier_combination\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 51\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-modifiers-invalid-nonpassive/input.svelte",
    "content": "<div on:touchstart|nonpassive|passive={handleWheel}>\n\toops\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-modifiers-invalid-passive/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"The 'passive' and 'preventDefault' modifiers cannot be used together\",\n\t\t\"code\": \"event_handler_invalid_modifier_combination\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 50\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/event-modifiers-invalid-passive/input.svelte",
    "content": "<div on:wheel|passive|preventDefault={handleWheel}>\n\toops\n</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/export-let-unused-svelte-component/input.svelte",
    "content": "<script>\n\texport let Component;\n</script>\n\n<svelte:component this={Component} />"
  },
  {
    "path": "packages/svelte/tests/validator/samples/export-let-unused-svelte-component/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/export-not-defined-module-with-source/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/export-not-defined-module-with-source/input.svelte",
    "content": "<script module>\n\texport { something } from \"./something.js\";\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/general-siblings-combinator-in-custom-element-selects-slot-fallback/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcustomElement: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/general-siblings-combinator-in-custom-element-selects-slot-fallback/input.svelte",
    "content": "<svelte:options customElement=\"my-element\" />\n\n<h1>Heading 1</h1>\n<span>Span 1</span>\n<span>Span 2</span>\n<slot>\n\t<p>Paragraph 2</p>\n</slot>\n\n<style>\n\t/* This will not be picked up */\n\th1 ~ slot > p {\n\t\tcolor: red;\n\t}\n\n\t/* This will get picked up */\n\th1 ~ p {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/general-siblings-combinator-in-custom-element-selects-slot-fallback/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_unused_selector\",\n\t\t\"message\": \"Unused CSS selector \\\"h1 ~ slot > p\\\"\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 14,\n\t\t\t\"line\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/global-event-reference/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/global-event-reference/input.svelte",
    "content": "<script>\n    let onclick;\n</script>\n\n<button {onclick}>click me</button>\n<button onclick={onclick}>click me</button>\n\n<button {onkeydown}>click me</button>\n<button onkeydown={onkeydown}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/global-event-reference/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_global_event_reference\",\n\t\t\"message\": \"You are referencing `globalThis.onkeydown`. Did you forget to declare a variable with that name?\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 19,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"attribute_global_event_reference\",\n\t\t\"message\": \"You are referencing `globalThis.onkeydown`. Did you forget to declare a variable with that name?\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 9\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/html-block-in-attribute/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"tag_invalid_placement\",\n\t\t\"message\": \"{@html ...} tag cannot be in attribute value\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 12\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/html-block-in-attribute/input.svelte",
    "content": "<div style=\"{@html text}\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/html-block-in-textarea/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"tag_invalid_placement\",\n\t\t\"message\": \"{@html ...} tag cannot be inside <textarea>\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/html-block-in-textarea/input.svelte",
    "content": "<textarea>\n\t{@html fruit}\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/if-block-whitespace-legacy/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/if-block-whitespace-legacy/input.svelte",
    "content": "<svelte:options runes={false} />\n\n<!-- prettier-ignore -->\n<div>\n\t{ #if true}\n\t\t<p>hi</p>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/if-block-whitespace-runes/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"block_unexpected_character\",\n\t\t\"message\": \"Expected a `#` character immediately following the opening bracket\",\n\t\t\"start\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 6\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/if-block-whitespace-runes/input.svelte",
    "content": "<svelte:options runes={true} />\n\n<!-- ok -->\n{#if true}{#if true}{/if}{/if}\n{#if foo}{:else if bar}{/if}\n{#if foo}{:else}{/if}\n\n<!-- prettier-ignore -->\n<div>\n\t{ #if true}\n\t\t<p>hi</p>\n\t{/if}\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning/input.svelte",
    "content": "<!-- svelte-ignore a11y_missing_attribute -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n\t<marquee>but this is still discouraged</marquee>\n</div>\n\n<!-- svelte-ignore a11y_misplaced_scope -->\n<div scope></div>\n\n<img src=\"potato.jpg\">\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_distracting_elements\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"message\": \"Avoid `<marquee>` elements\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 4\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning-compiler-option/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\twarningFilter: (warning) =>\n\t\t\t!['a11y_missing_attribute', 'a11y_misplaced_scope'].includes(warning.code)\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning-compiler-option/input.svelte",
    "content": "<div>\n\t<img src=\"this-is-fine.jpg\" />\n\t<marquee>but this is still discouraged</marquee>\n</div>\n\n<div scope></div>\n\n<img src=\"potato.jpg\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning-compiler-option/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_distracting_elements\",\n\t\t\"end\": {\n\t\t\t\"column\": 49,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"Avoid `<marquee>` elements\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning-dash-backwards-compat/input.svelte",
    "content": "<script>\n\tfunction foo() {\n\t\t// svelte-ignore non-top-level-reactive-declaration\n\t\t$: x = 1;\n\t}\n</script>\n\n<!-- svelte-ignore a11y-missing-attribute -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n</div>\n\n<!-- svelte-ignore a11y-misplaced-scope -->\n<div scope></div>\n\n<!-- svelte-ignore a11y-missing-attribute a11y-misplaced-scope -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n\t<div scope></div>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warning-dash-backwards-compat/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings/input.svelte",
    "content": "<!-- svelte-ignore a11y_missing_attribute, a11y_distracting_elements -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n\t<marquee>but this is still discouraged</marquee>\n</div>\n\n<img src=\"potato.jpg\">\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 7\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings-cumulative/input.svelte",
    "content": "<!-- svelte-ignore a11y_figcaption_parent, a11y_missing_attribute -->\n<div>\n\t<figure>\n\t\t<img src=\"potato.jpg\">\n\t\t<marquee>\n\t\t\t<figcaption>potato</figcaption>\n\t\t</marquee>\n\t</figure>\n\n\t<!-- svelte-ignore a11y_distracting_elements -->\n\t<figure>\n\t\t<img src=\"potato.jpg\">\n\t\t<marquee>\n\t\t\t<figcaption>potato</figcaption>\n\t\t</marquee>\n\t</figure>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings-cumulative/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_distracting_elements\",\n\t\t\"end\": {\n\t\t\t\"column\": 12,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"message\": \"Avoid `<marquee>` elements\",\n\t\t\"start\": {\n\t\t\t\"column\": 2,\n\t\t\t\"line\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings-newline/input.svelte",
    "content": "<!-- svelte-ignore a11y_missing_attribute,\n                   a11y_distracting_elements -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n\t<marquee>but this is still discouraged</marquee>\n</div>\n\n<img src=\"potato.jpg\">\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings-newline/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings-stacked/input.svelte",
    "content": "<!-- svelte-ignore a11y_missing_attribute -->\n<!-- svelte-ignore a11y_distracting_elements -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n\t<marquee>but this is still discouraged</marquee>\n</div>\n\n<img src=\"potato.jpg\">\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ignore-warnings-stacked/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal-attribute-character/input.svelte",
    "content": "<script>\n    import C from './irrelevant';\n</script>\n\n<button on:click>click me</button>\n<button xml:click>click me</button>\n<button xmlns:click>click me</button>\n<button xlink:click>click me</button>\n<C on:click />\n<C xml:click />\n<C xmlns:click />\n<C xlink:click />\n\n<button foo:bar>click me</button>\n<C foo:bar />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal-attribute-character/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_illegal_colon\",\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 14\n\t\t},\n\t\t\"message\": \"Attributes should not contain ':' characters to prevent ambiguity with Svelte directives\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 14\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"attribute_illegal_colon\",\n\t\t\"end\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"Attributes should not contain ':' characters to prevent ambiguity with Svelte directives\",\n\t\t\"start\": {\n\t\t\t\"column\": 3,\n\t\t\t\"line\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal-variable-declaration/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"declaration_duplicate_module_import\",\n\t\t\"message\": \"Cannot declare a variable with the same name as an import from `<script module>`\",\n\t\t\"start\": {\n\t\t\t\"line\": 12,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 12,\n\t\t\t\"column\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal-variable-declaration/input.svelte",
    "content": "<script module>\n\timport { FOO } from './dummy.svelte';\n\tfunction ok() {\n\t\tlet FOO;\n\t}\n</script>\n\n<script>\n\tfunction ok() {\n\t\tlet FOO;\n\t}\n\tlet FOO;\n</script>\n\n{FOO}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal_spread_element-document/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"illegal_element_attribute\",\n\t\t\"message\": \"`<svelte:document>` does not support non-event attributes or spread attributes\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 17\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 23\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal_spread_element-document/input.svelte",
    "content": "<script>\n\tlet a = {};\n</script>\n<svelte:document {...a}></svelte:document>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal_spread_element-window/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"illegal_element_attribute\",\n\t\t\"message\": \"`<svelte:window>` does not support non-event attributes or spread attributes\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 21\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/illegal_spread_element-window/input.svelte",
    "content": "<script>\n\tlet a = {};\n</script>\n<svelte:window {...a}></svelte:window>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/implicitly-closed-by-parent/input.svelte",
    "content": "<main><div class=\"hello\"></main>\n\n<main>\n\t<div class=\"hello\">\n\t\t<p>hello</p>\n</main>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/implicitly-closed-by-parent/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"element_implicitly_closed\",\n\t\t\"message\": \"This element is implicitly closed by the following `</main>`, which can cause an unexpected DOM structure. Add an explicit `</div>` to avoid surprises.\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 25\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"element_implicitly_closed\",\n\t\t\"message\": \"This element is implicitly closed by the following `</main>`, which can cause an unexpected DOM structure. Add an explicit `</div>` to avoid surprises.\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/implicitly-closed-by-sibling/input.svelte",
    "content": "<div>\n\t<p class=\"hello\">\n\t\t<span></span>\n\t\t<p></p>\n</div>\n\n<div>\n\t<p class=\"hello\"><p></p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/implicitly-closed-by-sibling/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"element_implicitly_closed\",\n\t\t\"message\": \"This element is implicitly closed by the following `<p>`, which can cause an unexpected DOM structure. Add an explicit `</p>` to avoid surprises.\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 18\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"element_implicitly_closed\",\n\t\t\"message\": \"This element is implicitly closed by the following `<p>`, which can cause an unexpected DOM structure. Add an explicit `</p>` to avoid surprises.\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/import-meta/input.svelte",
    "content": "<script>\n\tconst url = import.meta.url;\n</script>\n\n{url}\n{import.meta.url}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class/input.svelte",
    "content": "<script>\n\tconst a = new class {\n\t\tfoo = $state(0)\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"perf_avoid_inline_class\",\n\t\t\"message\": \"Avoid 'new class' — instead, declare the class at the top level scope\",\n\t\t\"start\": {\n\t\t\t\"column\": 11,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 2,\n\t\t\t\"line\": 4\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-2/input.svelte",
    "content": "<script>\n\tfunction bar() {\n\t\tclass Foo {\n\t\t\tfoo = $state(0)\n\t\t}\n\t\tconst a = new Foo();\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-2/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"perf_avoid_nested_class\",\n\t\t\"message\": \"Avoid declaring classes below the top level scope\",\n\t\t\"start\": {\n\t\t\t\"column\": 2,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 3,\n\t\t\t\"line\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-3/input.svelte",
    "content": "<script>\n\tclass Foo {\n\t\tfoo = $state(0)\n\t}\n\tfunction bar() {\n\t\tconst a = new Foo();\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-3/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-4/input.svelte",
    "content": "<script>\n\tfunction bar() {\n\t\tconst a = new class Foo {\n\t\t\tfoo = $state(0)\n\t\t}\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-4/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"perf_avoid_inline_class\",\n\t\t\"message\": \"Avoid 'new class' — instead, declare the class at the top level scope\",\n\t\t\"start\": {\n\t\t\t\"column\": 12,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 3,\n\t\t\t\"line\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-5/input.svelte",
    "content": "<script module>\n\tconst a = new (class Foo {\n\t\tfoo = $state(0);\n\t})();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/inline-new-class-5/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-empty-css-declaration/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_empty_declaration\",\n\t\t\"message\": \"Declaration cannot be empty\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-empty-css-declaration/input.svelte",
    "content": "<div class='foo bar'></div>\n\n<style>\n\t.foo {\n\t\tcolor:;\n\t}\n\t.bar {\n\t\tfont:;\n\t\tcolor: blue;\n\t}\n</style>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement\",\n\t\t\"message\": \"`<a>` cannot be a descendant of `<a>`. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 34\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement/input.svelte",
    "content": "<div>\n\t<a href=\"/foo\">\n\t\t<div>\n\t\t\t<p><a href=\"/foo\">{`hello`}</a></p>\n\t\t</div>\n\t</a>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement\",\n\t\t\"message\": \"`<div>` cannot be a descendant of `<p>`. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-2/input.svelte",
    "content": "<div>\n\t<p>\n\t\t<span>\n\t\t\t<div>foo</div>\n\t\t</span>\n\t</p>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-3/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-3/input.svelte",
    "content": "<script>\n</script>\n\n<select>\n\t<option value=\"0\">The</option>\n\t<hr>\n\t<script>\n\t\tconsole.log(\"hei\");\n\t</script>\n\t<template>Cool</template>\n\t<option value=\"1\">bug</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-4/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement\",\n\t\t\"message\": \"`<form>` cannot be a descendant of `<form>`. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-4/input.svelte",
    "content": "<div>\n\t<form>\n\t\t<div>\n\t\t\t<form>\n\t\t\t\t<input />\n\t\t\t</form>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-5/input.svelte",
    "content": "<div>\n\t<form>\n\t\t{#if foo}\n\t\t\t<form>\n\t\t\t\t<input />\n\t\t\t</form>\n\t\t{/if}\n\t</form>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-5/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement_ssr\",\n\t\t\"message\": \"`<form>` cannot be a child of `<form>`. When rendering this component on the server, the resulting HTML will be modified by the browser (by moving, removing, or inserting elements), likely resulting in a `hydration_mismatch` warning\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-6/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement\",\n\t\t\"message\": \"`<dt>` cannot be a descendant of `<dd>`. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\",\n\t\t\"start\": {\n\t\t\t\"line\": 16,\n\t\t\t\"column\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 16,\n\t\t\t\"column\": 19\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-6/input.svelte",
    "content": "<dl>\n\t<dt>valid</dt>\n\t<dd>\n\t\t<!-- dl resets the validation -->\n\t\t<dl>\n\t\t\t<dt>valid</dt>\n\t\t\t<dd>valid</dd>\n\t\t</dl>\n\t\t<!-- custom element resets the validation -->\n\t\t<foo-bar>\n\t\t\t<dt>valid</dt>\n\t\t\t<dd>valid</dd>\n\t\t</foo-bar>\n\t\t<!-- other tags don't -->\n\t\t<div>\n\t\t\t<dt>invalid</dt>\n\t\t</div>\n\t</dd>\n</dl>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-7/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement\",\n\t\t\"message\": \"`<tbody>` must be the child of a `<table>`, not a `<div>`. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 16\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-7/input.svelte",
    "content": "<some-table>\n\t<!-- No error -->\n\t<tbody></tbody>\n</some-table>\n\n<div>\n\t<!-- Error -->\n\t<tbody></tbody>\n</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-8/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"node_invalid_placement\",\n\t\t\"message\": \"`<#text>` cannot be a child of `<tbody>`. `<tbody>` only allows these children: `<tr>`, `<style>`, `<script>`, `<template>`. The browser will 'repair' the HTML (by moving, removing, or inserting elements) which breaks Svelte's assumptions about the structure of your components.\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 13\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-8/input.svelte",
    "content": "\n<table attr={value} style:x={y} class=\"I'm not {counted} as text in the table\">\n\t<tbody>I am {bad}</tbody>\n</table>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-template/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-node-placement-template/input.svelte",
    "content": "<template>\n\t<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t</tr>\n</template>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-self-closing-tag/input.svelte",
    "content": "<!-- valid -->\n<link />\n<svg><g /></svg>\n<math><mspace /></math>\n<enhanced:img />\n\n\n<!-- invalid -->\n<div />\n<my-thing />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/invalid-self-closing-tag/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"element_invalid_self_closing_tag\",\n\t\t\"message\": \"Self-closing HTML tags for non-void elements are ambiguous — use `<div ...></div>` rather than `<div ... />`\",\n\t\t\"start\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 7\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"element_invalid_self_closing_tag\",\n\t\t\"message\": \"Self-closing HTML tags for non-void elements are ambiguous — use `<my-thing ...></my-thing>` rather than `<my-thing ... />`\",\n\t\t\"start\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/js-scope-catch-clause/input.svelte",
    "content": "<script>\n\tfunction test() {\n\t\ttry {\n\t\t\tthrow new TypeError(\"oops1\");\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t\t\n\t\ttry {\n\t\t\tthrow new TypeError(\"oops2\");\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t}\n\t}\n\ttest();\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/let-directive/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"let_directive_invalid_placement\",\n\t\t\"message\": \"`let:` directive at invalid position\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/let-directive/input.svelte",
    "content": "{#if foo}\n\t<svelte:self let:x></svelte:self>\n{/if}\n<Component let:x></Component>\n<div let:x></div><!-- strictly speaking this is invalid, but it was never checked in Svelte 3/4 either, and is now deprecated, so don't mind -->\n<svelte:window let:x></svelte:window>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/logic-block-in-attribute/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"block_invalid_placement\",\n\t\t\"message\": \"{#if ...} block cannot be in attribute value\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 12\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/logic-block-in-attribute/input.svelte",
    "content": "<div style=\"{#if condition}a{/if}\"></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/logic-block-in-textarea/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"block_invalid_placement\",\n\t\t\"message\": \"{#each ...} block cannot be inside <textarea>\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/logic-block-in-textarea/input.svelte",
    "content": "<textarea>\n\t{#each fruits as fruit}\n\t\t{fruit}\n\t{/each}\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/module-script-reactive-declaration/input.svelte",
    "content": "<script module>\n\tlet num = 2;\n\tlet square;\n\t$: square = num * num;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/module-script-reactive-declaration/warnings.json",
    "content": "[\n\t{\n\t\t\"message\": \"Reactive declarations only exist at the top level of the instance script\",\n\t\t\"code\": \"reactive_declaration_invalid_placement\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 23\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/multiple-script-default-context/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"script_duplicate\",\n\t\t\"message\": \"A component can have a single top-level `<script>` element and/or a single top-level `<script module>` element\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/multiple-script-default-context/input.svelte",
    "content": "<script>\n\tlet foo;\n</script>\n\n<script>\n\tlet bar;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/multiple-script-module-context/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"script_duplicate\",\n\t\t\"message\": \"A component can have a single top-level `<script>` element and/or a single top-level `<script module>` element\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/multiple-script-module-context/input.svelte",
    "content": "<script module>\n\tlet foo;\n</script>\n\n<script module>\n\tlet bar;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/multiple-var-same-name/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/multiple-var-same-name/input.svelte",
    "content": "<script>\n\tvar test = \"\";\n\tvar test = 42;\n</script>\n\n{test}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/mutate-derived-private-field/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/mutate-derived-private-field/input.svelte",
    "content": "<script>\n\tclass Test{\n\t\t#der = $derived({test: 0});\n\n\t\tset test(v){\n\t\t\tthis.#der.test = 45;\n\t\t}\n\t}\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/namespace-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_options_invalid_attribute_value\",\n\t\t\"message\": \"Value must be \\\"html\\\", \\\"mathml\\\" or \\\"svg\\\", if specified\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 54\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/namespace-invalid/input.svelte",
    "content": "<svelte:options namespace=\"http://www.w3.org/1999/svg\"/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/namespace-non-literal/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_options_invalid_attribute_value\",\n\t\t\"message\": \"Value must be \\\"html\\\", \\\"mathml\\\" or \\\"svg\\\", if specified\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 30\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/namespace-non-literal/input.svelte",
    "content": "<svelte:options namespace={ns}/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/no-missing-declarations-for-same-node-let-variable/input.svelte",
    "content": "<script>\n\timport Bla from './Bla.svelte';\n</script>\n\n<Bla>\n\t<button slot=\"foo\" class:bar on:click={clickFn} let:bar let:clickFn>{bar}</button>\n</Bla>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/no-missing-declarations-for-same-node-let-variable/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/no-runes-mode/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\trunes: false\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/no-runes-mode/input.svelte",
    "content": "<script>\n    import { state } from './store';\n    const x = $state();\n</script>\n\n{x}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/non-empty-block-dev/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tdev: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/non-empty-block-dev/input.svelte",
    "content": "<script>\n\tlet x;\n</script>\n\n{#if x}\n\t&nbsp;\n{/if}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/non-empty-block-dev/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/non-invalid-node-placement-if-snippet/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/non-invalid-node-placement-if-snippet/input.svelte",
    "content": "<table>\n\t<tbody>\n\t\t<tr>\n\t\t\t{#snippet cell(v)}Value: {v}{/snippet}\n\t\t\t{#each [1, 2, 3] as v}\n\t\t\t\t<td>{@render cell(v)}</td>\n\t\t\t{/each}\n\t\t</tr>\n\t</tbody>\n</table>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-declaration-cyclical/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"Cyclical dependency detected: a → b → a\",\n\t\t\"code\": \"reactive_declaration_cycle\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 14\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-declaration-cyclical/input.svelte",
    "content": "<script>\n\tlet a = 1;\n\tlet b = 2;\n\n\t$: a = b + 1;\n\t$: b = a + 1;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-declaration-non-top-level/input.svelte",
    "content": "<script>\n\tlet num = 2;\n\t$: square = num * num;\n\n\tfunction myFunc() {\n\t\t$: double = num * 2;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-declaration-non-top-level/warnings.json",
    "content": "[\n\t{\n\t\t\"message\": \"Reactive declarations only exist at the top level of the instance script\",\n\t\t\"code\": \"reactive_declaration_invalid_placement\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-module-const-variable/input.svelte",
    "content": "<script module>\n\texport const foo = 123;\n\texport const doFoo = (foo) => foo;\n</script>\n\n<script>\n\t$: bar = foo;\n\t$: doFoo(bar);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-module-const-variable/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-module-variable/input.svelte",
    "content": "<script module>\n\tlet foo = 0;\n\n\texport function update() {\n\t\tfoo += 1;\n\t}\n</script>\n\n<script>\n\t$: bar = foo;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-module-variable/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"reactive_declaration_module_script_dependency\",\n\t\t\"message\": \"Reassignments of module-level declarations will not cause reactive statements to update\",\n\t\t\"start\": {\n\t\t\t\"column\": 10,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-module-variable-2/input.svelte",
    "content": "<script module>\n\tlet PI = 3.14;\n</script>\n<script>\n\tlet r;\n\t$: area = PI * r * r;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-module-variable-2/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-statement-non-reactive-self-declaration/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-statement-non-reactive-self-declaration/input.svelte",
    "content": "<script>\n\tlet prop;\n\t$: {\n\t\tconst obj = get_obj();\n\t\tprop = obj.prop;\n\t}\n</script>\n\n<p>{prop}</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reactive-statement-non-reactive-self-declaration/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reassign-derived-private-public-field/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/reassign-derived-private-public-field/input.svelte",
    "content": "<script>\n\tclass Test {\n\t  #deps = () => [];\n\t\n\t  deps = $derived.by(() => {\n\t\treturn [];\n\t  });\t\t\n\t\t\t\n\t  constructor(f = () => []) {\n\t\tthis.#deps = f;\n\t  }\n\t}\n  </script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding/input.svelte",
    "content": "<script>\n\tlet objArray = [{foo: '1', id: 0, innerValue: \"test\"}, {foo: '2', id:1, innerValue: \"Somethin\"}]\n</script>\n\n{#each objArray as { id, ...rest } (id)}\n\t<input bind:value={rest.innerValue} type=\"text\" placeholder={rest.foo}/>\n\t<br/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_each_rest\",\n\t\t\"message\": \"The rest operator (...) will create a new object and binding 'rest' with the original object will not work\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 28\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 32\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding-2/input.svelte",
    "content": "<script>\n\tlet objArray = [\n\t\t[1, 2, 3, \"4\"],\n\t\t[5, 6, 7, \"8\"],\n\t];\n</script>\n\n{#each objArray as [id, ...rest] (id)}\n\t<input bind:value={rest[0]} type=\"text\" placeholder={rest[2]} />\n\t<br />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding-2/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_each_rest\",\n\t\t\"message\": \"The rest operator (...) will create a new object and binding 'rest' with the original object will not work\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 27\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 31\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding-3/input.svelte",
    "content": "<script>\n\tlet objArray = [{ bar: {foo: '1', id: 0, innerValue: \"test\"} }, { bar: {foo: '2', id:1, innerValue: \"Somethin\"} }]\n</script>\n\n{#each objArray as { bar: { id, ...rest } } (id)}\n\t<input bind:value={rest.innerValue} type=\"text\" placeholder={rest.foo}/>\n\t<br/>\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding-3/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_each_rest\",\n\t\t\"message\": \"The rest operator (...) will create a new object and binding 'rest' with the original object will not work\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 35\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 39\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding-nested-rest/input.svelte",
    "content": "<script>\n\tconst a = [[1, 2, 3, 4, 5]];\n</script>\n\n{#each a as [first, second, ...[third, ...{ length }]]}\n\t<p>{first}, {second}, {length}</p>\n\t<input bind:value={third} />\n\t<input bind:value={length} />\n{/each}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rest-eachblock-binding-nested-rest/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_each_rest\",\n\t\t\"end\": {\n\t\t\t\"column\": 37,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"The rest operator (...) will create a new object and binding 'third' with the original object will not work\",\n\t\t\"start\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"bind_invalid_each_rest\",\n\t\t\"end\": {\n\t\t\t\"column\": 50,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"message\": \"The rest operator (...) will create a new object and binding 'length' with the original object will not work\",\n\t\t\"start\": {\n\t\t\t\"column\": 44,\n\t\t\t\"line\": 5\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-derived/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"rune_invalid_spread\",\n\t\t\"end\": {\n\t\t\t\"column\": 32,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"`$derived` cannot be called with a spread argument\",\n\t\t\"start\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-derived/input.svelte",
    "content": "<script>\n\tconst args = [0];\n\tconst count = $derived(...args);\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-derived-by/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"rune_invalid_spread\",\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"`$derived.by` cannot be called with a spread argument\",\n\t\t\"start\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-derived-by/input.svelte",
    "content": "<script>\n\tconst args = [0];\n\tconst count = $derived.by(...args);\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-state/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"rune_invalid_spread\",\n\t\t\"end\": {\n\t\t\t\"column\": 30,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"`$state` cannot be called with a spread argument\",\n\t\t\"start\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-state/input.svelte",
    "content": "<script>\n\tconst args = [0];\n\tconst count = $state(...args);\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-state-raw/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"rune_invalid_spread\",\n\t\t\"end\": {\n\t\t\t\"column\": 34,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"message\": \"`$state.raw` cannot be called with a spread argument\",\n\t\t\"start\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/rune-invalid-spread-state-raw/input.svelte",
    "content": "<script>\n\tconst args = [0];\n\tconst count = $state.raw(...args);\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-conflicting-store-in-module/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-conflicting-store-in-module/input.svelte.js",
    "content": "const state = $state(0);\n\nconst derived = $derived(state + 2);\n\nlet effect = {};\nlet inspect = {};\n\n$effect.root(() => {\n\t$inspect(state);\n\n\t$effect(() => {\n\t\tconsole.log(state);\n\t});\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-legacy-syntax-warnings/input.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n</script>\n\n<!-- ok -->\n<Button on:click={foo}>click me</Button>\n<Button on:click={foo}>click me</Button>\n\n<!-- warn -->\n<slot></slot>\n<slot name=\"foo\"></slot>\n<button on:click={foo}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-legacy-syntax-warnings/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_element_deprecated\",\n\t\t\"end\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"Using `<slot>` to render parent content is deprecated. Use `{@render ...}` tags instead\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 10\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"slot_element_deprecated\",\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 11\n\t\t},\n\t\t\"message\": \"Using `<slot>` to render parent content is deprecated. Use `{@render ...}` tags instead\",\n\t\t\"start\": {\n\t\t\t\"column\": 0,\n\t\t\t\"line\": 11\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"event_directive_deprecated\",\n\t\t\"end\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 12\n\t\t},\n\t\t\"message\": \"Using `on:click` to listen to the click event is deprecated. Use the event attribute `onclick` instead\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 12\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-legacy-syntax-warnings-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"mixed_event_handler_syntaxes\",\n\t\t\"message\": \"Mixing old (on:click) and new syntaxes for event handling is not allowed. Use only the onclick syntax\",\n\t\t\"start\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 11,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-legacy-syntax-warnings-2/input.svelte",
    "content": "<script>\n\tlet { foo } = $props();\n</script>\n\n<!-- ok -->\n<button onclick={foo}>click me</button>\n<Button on:click={foo}>click me</Button>\n<Button on:click={foo}>click me</Button>\n\n<!-- error -->\n<button on:click={foo}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate/input.svelte",
    "content": "<script>\n\tlet a = $state(1);\n\tlet b = 2;\n\tlet c = 3;\n\tlet d = 4;\n</script>\n\n<button onclick={() => a += 1}>a += 1</button>\n<button onclick={() => b += 1}>b += 1</button>\n<button onclick={() => c += 1}>c += 1</button>\n<button onclick={() => d += 1}>d += 1</button>\n<p>{a} + {b} + {c} = {a + b + c}</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"non_reactive_update\",\n\t\t\"message\": \"`b` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 3\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"non_reactive_update\",\n\t\t\"message\": \"`c` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 4\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 4\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate-2/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate-2/input.svelte",
    "content": "<script>\n\tlet a = $state({b: 0});\n</script>\n\n<button onclick={() => a.b += 1}>a += 1</button>\n<p>{JSON.stringify(a)} + {a.b}</p>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate-2/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate-bind-this/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate-bind-this/input.svelte",
    "content": "<script>\n\tlet no_need;\n\tlet does_need1;\n\tlet does_need2 = $state();\n</script>\n\n<div bind:this={no_need}></div>\n{#if true}\n\t<div bind:this={does_need1}></div>\n\t<div bind:this={does_need2}></div>\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/runes-referenced-nonstate-bind-this/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"non_reactive_update\",\n\t\t\"message\": \"`does_need1` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-context-module-legacy/input.svelte",
    "content": "<script context=\"module\">\n\tlet num = 2;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-context-module-legacy/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-context-module-runes-deprecated/input.svelte",
    "content": "<svelte:options runes />\n\n<script context=\"module\">\n\tlet num = 2;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-context-module-runes-deprecated/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"script_context_deprecated\",\n\t\t\"message\": \"`context=\\\"module\\\"` is deprecated, use the `module` attribute instead\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 24,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-invalid-context/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"script_invalid_context\",\n\t\t\"message\": \"If the context attribute is supplied, its value must be \\\"module\\\"\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 22\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-invalid-context/input.svelte",
    "content": "<script context=\"nope\">\n\tlet foo;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-invalid-spread-attribute/input.svelte",
    "content": "<script {...wheee}></script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-invalid-spread-attribute/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"script_unknown_attribute\",\n\t\t\"message\": \"Unrecognized attribute — should be one of `generics`, `lang` or `module`. If this exists for a preprocessor, ensure that the preprocessor removes it\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 1\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-unknown-attribute/input.svelte",
    "content": "<script potato></script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/script-unknown-attribute/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"script_unknown_attribute\",\n\t\t\"message\": \"Unrecognized attribute — should be one of `generics`, `lang` or `module`. If this exists for a preprocessor, ensure that the preprocessor removes it\",\n\t\t\"start\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 14,\n\t\t\t\"line\": 1\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/security-anchor-rel-noreferer/input.svelte",
    "content": "<a href=\"https://svelte.dev\" target=\"_blank\">svelte website (invalid)</a>\n<a href=\"https://svelte.dev\" target=\"_blank\" rel=\"\">svelte website (invalid)</a>\n<a href=\"https://svelte.dev\" target=\"_blank\" rel=\"noopener\">svelte website (invalid)</a>\n<a href={'https://svelte.dev'} target=\"_blank\">svelte website (invalid)</a>\n<a href={'https://svelte.dev'} target=\"_blank\" rel=\"\">svelte website (invalid)</a>\n<a href={'https://svelte.dev'} target=\"_blank\" rel=\"noopener\">svelte website (invalid)</a>\n<a href=\"//svelte.dev\" target=\"_blank\">svelte website (invalid)</a>\n<a href=\"//svelte.dev\" target=\"_blank\" rel=\"\">svelte website (invalid)</a>\n<a href=\"//svelte.dev\" target=\"_blank\" rel=\"noopener\">svelte website (invalid)</a>\n<a href=\"http://svelte.dev\" target=\"_blank\">svelte website (invalid)</a>\n<a href=\"http://svelte.dev\" target=\"_blank\" rel=\"\">svelte website (invalid)</a>\n<a href=\"http://svelte.dev\" target=\"_blank\" rel=\"noopener\">svelte website (invalid)</a>\n<a href=\"HTTP://svelte.dev\" target=\"_blank\">svelte website (invalid)</a>\n<a href=\"HTTP://svelte.dev\" target=\"_blank\" rel=\"\">svelte website (invalid)</a>\n<a href=\"HTTP://svelte.dev\" target=\"_blank\" rel=\"noopener\">svelte website (invalid)</a>\n<a href={'HTTPS://svelte.dev'} target=\"_blank\">svelte website (invalid)</a>\n<a href={'HTTPS://svelte.dev'} target=\"_blank\" rel=\"\">svelte website (invalid)</a>\n<a href={'HTTPS://svelte.dev'} target=\"_blank\" rel=\"noopener\">svelte website (invalid)</a>\n<a href=\"same-host\" target=\"_blank\">Same host (valid)</a>\n<a href=\"same-host\" target=\"_blank\" rel=\"\">Same host (valid)</a>\n<a href=\"same-host\" target=\"_blank\" rel=\"noopener\">Same host (valid)</a>\n<a href=\"http://svelte.dev\" target=\"_blank\" rel=\"noreferrer\">svelte website (valid)</a>\n<a href=\"http://svelte.dev\" target=\"_blank\" rel=\"noreferrer noopener\">svelte website (valid)</a>\n<a href=\"HTTP://svelte.dev\" target=\"_blank\" rel=\"noreferrer\">svelte website (valid)</a>\n<a href=\"HTTP://svelte.dev\" target=\"_blank\" rel=\"noreferrer noopener\">svelte website (valid)</a>\n<a href=\"https://svelte.dev\" target=\"_blank\" rel=\"noreferrer\">svelte website (valid)</a>\n<a href=\"https://svelte.dev\" target=\"_blank\" rel=\"noreferrer noopener\">svelte website (valid)</a>\n<a href=\"HTTPS://svelte.dev\" target=\"_blank\" rel=\"noreferrer\">svelte website (valid)</a>\n<a href=\"HTTPS://svelte.dev\" target=\"_blank\" rel=\"noreferrer noopener\">svelte website (valid)</a>\n<a href=\"//svelte.dev\" target=\"_blank\" rel=\"noreferrer\">svelte website (valid)</a>\n<a href=\"//svelte.dev\" target=\"_blank\" rel=\"noreferrer noopener\">svelte website (valid)</a>\n<!-- dynamic rel value should not warn-->\n<a href=\"//svelte.dev\" target=\"_blank\" rel={`${Math.random()}`}>svelte website (valid)</a>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/security-anchor-rel-noreferer/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/select-multiple/input.svelte",
    "content": "<script>\n\tlet value;\n</script>\n\n<select bind:value multiple>\n\t<option>1</option>\n</select>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/siblings-combinator-in-custom-element-selects-slot-fallback/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcustomElement: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/siblings-combinator-in-custom-element-selects-slot-fallback/input.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n\n<h1>test</h1>\n<slot>\n  <span>Hello</span>\n</slot>\n\n<style>\n\t/* This will not be picked up */\n\th1 + slot > span {\n\t\tcolor: red;\n\t}\n\n\t/* This will be picked up */\n\th1 + span {\n\t\tcolor: red;\n\t}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/siblings-combinator-in-custom-element-selects-slot-fallback/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"css_unused_selector\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 10\n\t\t},\n\t\t\"message\": \"Unused CSS selector \\\"h1 + slot > span\\\"\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/silence-warnings/input.svelte",
    "content": "<script module>\n\tlet foo;\n</script>\n\n<script>\n\t// svelte-ignore reactive_declaration_module_script\n\t$: reactive = foo;\n</script>\n\n<!-- svelte-ignore css_unused_selector -->\n<style>\n\t.unused {}\n</style>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/silence-warnings/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/silence-warnings-2/input.svelte",
    "content": "<script module>\n\tlet foo;\n</script>\n\n<!-- svelte-ignore reactive_declaration_module_script -->\n<script>\n\t$: reactive = foo;\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/silence-warnings-2/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-attribute-component/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-attribute-component/input.svelte",
    "content": "<Foo slot=\"foo\">valid</Foo>\n<Foo slot={foo}>valid</Foo>\n<Foo>\n    {#if true}\n        <Foo slot=\"foo\">valid</Foo>\n        <Foo slot={foo}>valid</Foo>\n    {/if}\n</Foo>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-attribute-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"slot_attribute_invalid_placement\",\n\t\t\"message\": \"Element with a slot='...' attribute must be a child of a component or a descendant of a custom element\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-attribute-invalid/input.svelte",
    "content": "<div slot='foo'>invalid</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-warning/input.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<Component>\n\t<!-- svelte-ignore a11y_no_static_element_interactions -->\n\t<div slot='foo' on:click>hi!</div>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-warning/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 7\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 7\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-warning-ignore/input.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<Component>\n\t<!-- svelte-ignore a11y_click_events_have_key_events -->\n\t<!-- svelte-ignore a11y_no_static_element_interactions -->\n\t<div slot='foo' on:click>hi!</div>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-warning-ignore/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-warning2/input.svelte",
    "content": "<script>\n\timport Component from './Component.svelte';\n</script>\n\n<Component>\n\t<!-- svelte-ignore unrelated_warning -->\n\t<!-- svelte-ignore a11y_no_static_element_interactions -->\n\t<div slot='foo' on:click>hi!</div>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/slot-warning2/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"a11y_click_events_have_key_events\",\n\t\t\"message\": \"Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type=\\\"button\\\">` or `<a>` might be more appropriate\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 35,\n\t\t\t\"line\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/snippet-shadowing-prop/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"snippet_shadowing_prop\",\n\t\t\"message\": \"This snippet is shadowing the prop `title` with the same name\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 6\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 11,\n\t\t\t\"line\": 8\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/snippet-shadowing-prop/input.svelte",
    "content": "<script>\n\timport Component from \"./Component.svelte\";\n</script>\n\n<Component title=\"\">\n\t{#snippet title()}\n\t\ttitle\n\t{/snippet}\n</Component>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/snippet-whitespace-ok/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/snippet-whitespace-ok/input.svelte",
    "content": "<!-- prettier-ignore -->\n{#snippet ok () }\n\tasd\n{/snippet}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/state-referenced-locally-props-identifier/input.svelte",
    "content": "<script>\n\tconst props = $props();\n\tconst { model } = props;\n\tconst value = props.model.value;\n\tconsole.log(model, value);\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/state-referenced-locally-props-identifier/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 24\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `props`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/state-referenced-locally-types/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet { a }: { a: string } = $state({});\n\tlet { b }: { b: string } = $derived(a);\n</script>\n\n<button onclick={()=>a++}>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/state-referenced-locally-types/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/static-state-reference/input.svelte",
    "content": "<script lang=\"ts\">\n\tlet obj = $state({ a: 0 });\n\tlet count = $state(0);\n\tlet doubled = $derived(count * 2);\n\tlet tripled = $state(count * 3);\n\n\tconsole.log(obj);\n\tconsole.log(count);\n\tconsole.log(doubled);\n\n\tlet {\n\t\tprop,\n\t\tother_prop = prop\n\t} = $props();\n\tlet prop_state = $state(prop);\n\tlet prop_derived = $derived(prop);\n\tconsole.log(prop);\n\tconsole.log(prop_derived);\n\n\t// writes are okay\n\tcount++;\n\tcount = 1;\n\tobj.a++;\n\tobj.a = 1;\n\tprop_state = 1;\n\tprop_derived = 1;\n\n\t// `count` here is correctly identified as a non-reference\n\tlet typed: { count: number } | null = null;\n\n\t// exports are okay as this is turned into a live reference\n\texport { count };\n</script>\n\n<button onclick={() => (count += 1)}>\n\tclicks: {count}\n</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/static-state-reference/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `count`. Did you mean to reference it inside a derived instead?\",\n\t\t\"start\": {\n\t\t\t\"column\": 22,\n\t\t\t\"line\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 5\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `count`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"message\": \"This reference only captures the initial value of `doubled`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 9\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"end\": {\n\t\t\t\"column\": 29,\n\t\t\t\"line\": 15\n\t\t},\n\t\t\"message\": \"This reference only captures the initial value of `prop`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 15\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"end\": {\n\t\t\t\"column\": 17,\n\t\t\t\"line\": 17\n\t\t},\n\t\t\"message\": \"This reference only captures the initial value of `prop`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 17\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"state_referenced_locally\",\n\t\t\"end\": {\n\t\t\t\"column\": 25,\n\t\t\t\"line\": 18\n\t\t},\n\t\t\"message\": \"This reference only captures the initial value of `prop_derived`. Did you mean to reference it inside a closure instead?\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/store-looking-like-rune/input.svelte",
    "content": "<script>\n\timport { writable } from 'svelte/store';\n\n\texport let initial;\n\tconst state = writable(initial);\n</script>\n\n<div>{$state}</div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/store-looking-like-rune/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/store-rune-conflic-from-props/input.svelte",
    "content": "<script>\n\tlet { state } = $props();\n\tlet x = $state();\n</script>\n\n{$state}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/store-rune-conflic-from-props/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"store_rune_conflict\",\n\t\t\"message\": \"It looks like you're using the `$state` rune, but there is a local binding called `state`. Referencing a local variable with a `$` prefix will create a store subscription. Please rename `state` to avoid the ambiguity\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 15\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/store-runes-conflict/input.svelte",
    "content": "<script>\n\tconst state = 42;\n\t$state();\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/store-runes-conflict/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"store_rune_conflict\",\n\t\t\"message\": \"It looks like you're using the `$state` rune, but there is a local binding called `state`. Referencing a local variable with a `$` prefix will create a store subscription. Please rename `state` to avoid the ambiguity\",\n\t\t\"start\": {\n\t\t\t\"column\": 1,\n\t\t\t\"line\": 3\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 3\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/style-directive-modifiers-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"message\": \"`style:` directive can only use the `important` modifier\",\n\t\t\"code\": \"style_directive_invalid_modifier\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 29\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/style-directive-modifiers-invalid/input.svelte",
    "content": "<button style:color|bad='red'></button>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/style-directive-valid-reference/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/style-directive-valid-reference/input.svelte",
    "content": "<script>\n\texport let height;\n</script>\n\n<button style:height>click me</button>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-component-deprecated/input.svelte",
    "content": "<svelte:options runes />\n\n<script>\n\timport A from './A.svelte';\n</script>\n\n<svelte:component this={A} />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-component-deprecated/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_component_deprecated\",\n\t\t\"message\": \"`<svelte:component>` is deprecated in runes mode — components are dynamic by default\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 29\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-fragment-placement/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_fragment_invalid_placement\",\n\t\t\"message\": \"`<svelte:fragment>` must be the direct child of a component\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-fragment-placement/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<Nested>\n\t<div>\n\t\t<svelte:fragment>\n\t\t\t<div>test</div>\n\t\t</svelte:fragment>\n\t</div>\n</Nested>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-fragment-placement-2/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_fragment_invalid_placement\",\n\t\t\"message\": \"`<svelte:fragment>` must be the direct child of a component\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-fragment-placement-2/input.svelte",
    "content": "<script>\n\timport Nested from './Nested.svelte';\n</script>\n\n<svelte:fragment>\n\t<div>test</div>\n</svelte:fragment>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-head-attributes/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_head_illegal_attribute\",\n\t\t\"message\": \"`<svelte:head>` cannot have attributes nor directives\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 13\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 14\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-head-attributes/input.svelte",
    "content": "<svelte:head x></svelte:head>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-ignore-export-let-unused/input.svelte",
    "content": "<script>\n\t// svelte-ignore export_let_unused\n\texport let some;\n</script>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-ignore-export-let-unused/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-ignore-non-reactive-update/input.svelte",
    "content": "<svelte:options runes />\n\n<script>\n\t// svelte-ignore non_reactive_update\n\tlet value;\n\n\tvalue=\"\";\n</script>\n\n{value}"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-ignore-non-reactive-update/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-self-deprecated/input.svelte",
    "content": "<script>\n\tlet { n = 5 } = $props();\n</script>\n\n{#if n === 0}\n\t<p>lift-off!</p>\n{:else}\n\t<p>{n}</p>\n\t<svelte:self n={n - 1} />\n{/if}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svelte-self-deprecated/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_self_deprecated\",\n\t\t\"message\": \"`<svelte:self>` is deprecated — use self-imports (e.g. `import Self from './Self.svelte'`) instead\",\n\t\t\"start\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 9,\n\t\t\t\"column\": 26\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svg-child-component-declared-namespace/input.svelte",
    "content": "<svelte:options namespace=\"svg\"/>\n\n<script>\n\texport let x;\n\texport let y;\n\texport let width;\n\texport let height;\n</script>\n\n<rect x={x} y={y} width={width} height={height}/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/svg-child-component-declared-namespace/warnings.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-custom-element-options-missing/input.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-custom-element-options-missing/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"options_missing_custom_element\",\n\t\t\"message\": \"The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 46\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-custom-element-options-true/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcustomElement: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-custom-element-options-true/input.svelte",
    "content": "<svelte:options customElement=\"custom-element\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-emoji/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcustomElement: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-emoji/input.svelte",
    "content": "<svelte:options customElement=\"emotion-😍\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-hyphen/_config.js",
    "content": "import { test } from '../../test';\n\nexport default test({\n\tcompileOptions: {\n\t\tcustomElement: true\n\t}\n});\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-hyphen/input.svelte",
    "content": "<svelte:options customElement=\"custom-\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_options_invalid_tagname\",\n\t\t\"message\": \"Tag name must be lowercase and hyphenated\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 39\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-invalid/input.svelte",
    "content": "<svelte:options customElement=\"invalid\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-non-string/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_options_invalid_customelement\",\n\t\t\"message\": \"\\\"customElement\\\" must be a string literal defining a valid custom element name or an object of the form { tag?: string; shadow?: \\\"open\\\" | \\\"none\\\" | `ShadowRootInit`; props?: { [key: string]: { attribute?: string; reflect?: boolean; type: .. } } }\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 34\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-non-string/input.svelte",
    "content": "<svelte:options customElement={42}/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-reserved/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"svelte_options_reserved_tagname\",\n\t\t\"message\": \"Tag name is reserved\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 16\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 41\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/tag-reserved/input.svelte",
    "content": "<svelte:options customElement=\"font-face\" />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/textarea-value-children/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"textarea_invalid_content\",\n\t\t\"message\": \"A `<textarea>` can have either a value attribute or (equivalently) child content, but not both\",\n\t\t\"start\": {\n\t\t\t\"line\": 1,\n\t\t\t\"column\": 0\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 11\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/textarea-value-children/input.svelte",
    "content": "<textarea value='{foo}'>\n\tsome illegal text\n</textarea>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/title-no-attributes/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"title_illegal_attribute\",\n\t\t\"message\": \"`<title>` cannot have attributes nor directives\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 25\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/title-no-attributes/input.svelte",
    "content": "<svelte:head>\n\t<title data-invalid=true>a static title</title>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/title-no-children/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"title_invalid_content\",\n\t\t\"message\": \"`<title>` can only contain text and {tags}\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 11\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 35\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/title-no-children/input.svelte",
    "content": "<svelte:head>\n\t<title>an <strong>invalid</strong> title</title>\n</svelte:head>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-in/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_duplicate\",\n\t\t\"message\": \"Cannot use multiple `in:` directives on a single element\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 12\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 18\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-in/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div in:foo in:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-in-transition/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_conflict\",\n\t\t\"message\": \"Cannot use `in:` alongside existing `transition:` directive\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 12\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 26\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-in-transition/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div in:foo transition:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-out/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_duplicate\",\n\t\t\"message\": \"Cannot use multiple `out:` directives on a single element\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 13\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-out/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div out:foo out:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-out-transition/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_conflict\",\n\t\t\"message\": \"Cannot use `out:` alongside existing `transition:` directive\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 13\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-out-transition/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div out:foo transition:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-transition/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_duplicate\",\n\t\t\"message\": \"Cannot use multiple `transition:` directives on a single element\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 34\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-transition/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div transition:foo transition:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-transition-in/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_conflict\",\n\t\t\"message\": \"Cannot use `transition:` alongside existing `in:` directive\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 26\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-transition-in/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div transition:foo in:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-transition-out/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"transition_conflict\",\n\t\t\"message\": \"Cannot use `transition:` alongside existing `out:` directive\",\n\t\t\"start\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 20\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 6,\n\t\t\t\"column\": 27\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-duplicate-transition-out/input.svelte",
    "content": "<script>\n\tfunction foo() {}\n\tfunction bar() {}\n</script>\n\n<div transition:foo out:bar>...</div>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-on-component/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"component_invalid_directive\",\n\t\t\"message\": \"This type of directive is not valid on components\",\n\t\t\"start\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 7,\n\t\t\t\"column\": 14\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/transition-on-component/input.svelte",
    "content": "<script>\n\timport Widget from './Widget.svelte';\n\n\tfunction foo() {}\n</script>\n\n<Widget in:foo/>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-accessor/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"typescript_invalid_feature\",\n\t\t\"message\": \"TypeScript language features like accessor fields (related TSC proposal is not stage 4 yet) are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 17\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-accessor/input.svelte",
    "content": "<script lang=\"ts\">\n\tclass Foo {\n\t\taccessor y = 1;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-decorator/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"typescript_invalid_feature\",\n\t\t\"message\": \"TypeScript language features like decorators (related TSC proposal is not stage 4 yet) are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 4\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-decorator/input.svelte",
    "content": "<script lang=\"ts\">\n    @foo()\n\tclass Foo {}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-enum/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"typescript_invalid_feature\",\n\t\t\"message\": \"TypeScript language features like enums are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-enum/input.svelte",
    "content": "<script lang=\"ts\">\n\tenum Foo {\n\t\tbar = 1\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-modifier/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"typescript_invalid_feature\",\n\t\t\"message\": \"TypeScript language features like accessibility modifiers on constructor parameters are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 14\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 31\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-modifier/input.svelte",
    "content": "<script lang=\"ts\">\n\tclass Foo {\n\t\tconstructor(private x: number) {}\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-modifier-readonly/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"typescript_invalid_feature\",\n\t\t\"message\": \"TypeScript language features like accessibility modifiers on constructor parameters are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 14\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 32\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-modifier-readonly/input.svelte",
    "content": "<script lang=\"ts\">\n\tclass Foo {\n\t\tconstructor(readonly x: number) {}\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-namespace/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"typescript_invalid_feature\",\n\t\t\"message\": \"TypeScript language features like namespaces with non-type nodes are not natively supported, and their use is generally discouraged. Outside of `<script>` tags, these features are not supported. For use within `<script>` tags, you will need to use a preprocessor to convert it to JavaScript before it gets passed to the Svelte compiler. If you are using `vitePreprocess`, make sure to specifically enable preprocessing script tags (`vitePreprocess({ script: true })`)\",\n\t\t\"start\": {\n\t\t\t\"line\": 2,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 4,\n\t\t\t\"column\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/ts-unsupported-namespace/input.svelte",
    "content": "<script module lang=\"ts\">\n\tnamespace SomeNamespace {\n\t\texport const foo = true;\n\t}\n</script>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/unknown-code/input.svelte",
    "content": "<svelte:options runes={true} />\n\n<!-- svelte-ignore a11y-missing-attribute -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n</div>\n\n<!-- svelte-ignore ally_missing_attribute -->\n<div>\n\t<img src=\"this-is-fine.jpg\">\n</div>\n\n<!-- svelte-ignore a11y-misplaced-scope -->\n<div scope></div>\n\n<!-- svelte-ignore a11y_misplaced_scope this is some prose -->\n<div scope></div>\n\n<!-- svelte-ignore a11y_misplaced_scope this_is some-ambiguous prose -->\n<div scope></div>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/unknown-code/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"legacy_code\",\n\t\t\"message\": \"`a11y-missing-attribute` is no longer valid — please use `a11y_missing_attribute` instead\",\n\t\t\"start\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 3,\n\t\t\t\"column\": 41\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"unknown_code\",\n\t\t\"message\": \"`ally_missing_attribute` is not a recognised code (did you mean `a11y_missing_attribute`?)\",\n\t\t\"start\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 8,\n\t\t\t\"column\": 41\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_missing_attribute\",\n\t\t\"message\": \"`<img>` element should have an alt attribute\",\n\t\t\"start\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 10,\n\t\t\t\"column\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"legacy_code\",\n\t\t\"message\": \"`a11y-misplaced-scope` is no longer valid — please use `a11y_misplaced_scope` instead\",\n\t\t\"start\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 19\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 13,\n\t\t\t\"column\": 39\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"a11y_misplaced_scope\",\n\t\t\"message\": \"The scope attribute should only be used with `<th>` elements\",\n\t\t\"start\": {\n\t\t\t\"line\": 14,\n\t\t\t\"column\": 5\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 14,\n\t\t\t\"column\": 10\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/unreferenced-variables/input.svelte",
    "content": "<script module>\n  var a1 = 1;\n  let b1 = 1;\n  const c1 = 1;\n  var d1 = 1;\n  let e1 = 1;\n  const f1 = 1;\n  export { d1, e1, f1};\n  export var g1 = 1;\n  export let h1 = 1;\n  export const i1 = 1;\n  export let j1 = () => {};\n  export const k1 = () => {};\n  export function l1() {};\n  var m1 = 1;\n  let n1 = 1;\n  const o1 = 1;\n  function foo1() {\n    return m1 + n1 + o1;\n  }\n  export let p1;\n</script>\n\n<script>\n  var a2 = 1;\n  let b2 = 1;\n  const c2 = 1;\n  var d2 = 1;\n  let e2 = 1;\n  const f2 = 1;\n  export { d2, e2, f2};\n  export var g2 = 1;\n  export let h2 = 1;\n  export const i2 = 1;\n  export let j2 = () => {};\n  export const k2 = () => {};\n  export function l2() {};\n  var m2 = 1;\n  let n2 = 1;\n  const o2 = 1;\n  function foo2() {\n    return m2 + n2 + o2;\n  }\n  export let p2;\n  export let q2;\n  $p2;\n</script>\n{$q2}\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/unreferenced-variables/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"end\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 28\n\t\t},\n\t\t\"message\": \"Component has unused export property 'd2'. If it is for external reference only, please consider using `export const d2`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 28\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"end\": {\n\t\t\t\"column\": 8,\n\t\t\t\"line\": 29\n\t\t},\n\t\t\"message\": \"Component has unused export property 'e2'. If it is for external reference only, please consider using `export const e2`\",\n\t\t\"start\": {\n\t\t\t\"column\": 6,\n\t\t\t\"line\": 29\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 32\n\t\t},\n\t\t\"message\": \"Component has unused export property 'g2'. If it is for external reference only, please consider using `export const g2`\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 32\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 33\n\t\t},\n\t\t\"message\": \"Component has unused export property 'h2'. If it is for external reference only, please consider using `export const h2`\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 33\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"end\": {\n\t\t\t\"column\": 15,\n\t\t\t\"line\": 35\n\t\t},\n\t\t\"message\": \"Component has unused export property 'j2'. If it is for external reference only, please consider using `export const j2`\",\n\t\t\"start\": {\n\t\t\t\"column\": 13,\n\t\t\t\"line\": 35\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/unreferenced-variables-each/input.svelte",
    "content": "<script>\n\tlet Component;\n\texport let array;\n\texport let default_value_1;\n\texport let default_value_2;\n\texport let default_value_3;\n\texport let default_value_4;\n\texport let default_value_5;\n\texport let default_value_6;\n</script>\n\n<Component>\n\t<svelte:fragment let:a={default_value_6}>\n\t\t{#each array as default_value_5}\n\t\t\t{#each array as { a = default_value_1, b: { b = [default_value_2, default_value_3], c: [c = default_value_4] }, d = default_value_5, e = default_value_6 }}\n\t\t\t\t{a}{b}{c}{d}{e}\n\t\t\t{/each}\n\t\t{/each}\n\t</svelte:fragment>\n</Component>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/unreferenced-variables-each/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"message\": \"Component has unused export property 'default_value_5'. If it is for external reference only, please consider using `export const default_value_5`\",\n\t\t\"start\": {\n\t\t\t\"column\": 12,\n\t\t\t\"line\": 8\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 8\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"export_let_unused\",\n\t\t\"message\": \"Component has unused export property 'default_value_6'. If it is for external reference only, please consider using `export const default_value_6`\",\n\t\t\"start\": {\n\t\t\t\"column\": 12,\n\t\t\t\"line\": 9\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 27,\n\t\t\t\"line\": 9\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/use-the-platform/input.svelte",
    "content": "<div className=\"abc\"></div>\n<label htmlFor=\"i\"><input /></label>"
  },
  {
    "path": "packages/svelte/tests/validator/samples/use-the-platform/warnings.json",
    "content": "[\n\t{\n\t\t\"code\": \"attribute_invalid_property_name\",\n\t\t\"message\": \"'className' is not a valid HTML attribute. Did you mean 'class'?\",\n\t\t\"start\": {\n\t\t\t\"column\": 5,\n\t\t\t\"line\": 1\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 20,\n\t\t\t\"line\": 1\n\t\t}\n\t},\n\t{\n\t\t\"code\": \"attribute_invalid_property_name\",\n\t\t\"message\": \"'htmlFor' is not a valid HTML attribute. Did you mean 'for'?\",\n\t\t\"start\": {\n\t\t\t\"column\": 7,\n\t\t\t\"line\": 2\n\t\t},\n\t\t\"end\": {\n\t\t\t\"column\": 18,\n\t\t\t\"line\": 2\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/valid-reactive-vars/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/valid-reactive-vars/input.svelte",
    "content": "<script>\n  var name = 'name';\n  var c = 'cc';\n  let d = 'd';\n  $: {\n      function a() {\n        function b() {\n          var c = 'c';\n          return c;\n        }\n        return b;\n      }\n    let d = 'dd';\n    name = a()();\n  }\n</script>\n\n<h1>Hello {name}</h1>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-invalid/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_name\",\n\t\t\"message\": \"`bind:potato` is not a valid binding\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 32\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-invalid/input.svelte",
    "content": "<script>\n    let foo;\n</script>\n\n<svelte:window bind:potato={foo}/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_name\",\n\t\t\"message\": \"`bind:clientWidth` is not a valid binding. Possible bindings for <svelte:window> are devicePixelRatio, focused, innerHeight, innerWidth, online, outerHeight, outerWidth, scrollX, scrollY, this\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 37\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/input.svelte",
    "content": "<script>\n    let foo;\n</script>\n\n<svelte:window bind:clientWidth={foo} />\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-invalid-innerwidth/errors.json",
    "content": "[\n\t{\n\t\t\"code\": \"bind_invalid_name\",\n\t\t\"message\": \"`bind:innerwidth` is not a valid binding. Did you mean 'innerWidth'?\",\n\t\t\"start\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 15\n\t\t},\n\t\t\"end\": {\n\t\t\t\"line\": 5,\n\t\t\t\"column\": 34\n\t\t}\n\t}\n]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-invalid-innerwidth/input.svelte",
    "content": "<script>\n    let w;\n</script>\n\n<svelte:window bind:innerwidth={w}/>\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-online/errors.json",
    "content": "[]\n"
  },
  {
    "path": "packages/svelte/tests/validator/samples/window-binding-online/input.svelte",
    "content": "<script>\n\tlet online;\n</script>\n\n<svelte:window bind:online/>"
  },
  {
    "path": "packages/svelte/tests/validator/test.ts",
    "content": "import * as fs from 'node:fs';\nimport { it, assert } from 'vitest';\nimport { compile, compileModule } from 'svelte/compiler';\nimport { try_load_json } from '../helpers.js';\nimport { suite, type BaseTest } from '../suite.js';\nimport type { CompileError } from '#compiler';\n\ninterface ValidatorTest extends BaseTest {\n\tcompileOptions?: Partial<import('#compiler').CompileOptions>;\n\terror?: {\n\t\tcode: string;\n\t\tmessage: string;\n\t};\n}\n\n/**\n * Remove the \"https://svelte.dev/e/...\" link\n */\nfunction strip_link(message: string) {\n\treturn message.slice(0, message.lastIndexOf('\\n'));\n}\n\nconst { test, run } = suite<ValidatorTest>(async (config, cwd) => {\n\tconst expected_warnings = try_load_json(`${cwd}/warnings.json`) || [];\n\tconst expected_errors = try_load_json(`${cwd}/errors.json`);\n\tconst options = try_load_json(`${cwd}/options.json`);\n\n\tlet error;\n\n\ttry {\n\t\tconst module = fs.existsSync(`${cwd}/input.svelte.js`);\n\n\t\tconst input = (\n\t\t\tmodule\n\t\t\t\t? fs.readFileSync(`${cwd}/input.svelte.js`, 'utf-8')\n\t\t\t\t: fs.readFileSync(`${cwd}/input.svelte`, 'utf-8')\n\t\t)\n\t\t\t.replace(/\\s+$/, '')\n\t\t\t.replace(/\\r/g, '');\n\n\t\tconst { warnings } = (module ? compileModule : compile)(input, {\n\t\t\t...config.compileOptions,\n\t\t\tgenerate: false,\n\t\t\t...options\n\t\t});\n\n\t\tassert.deepEqual(\n\t\t\twarnings.map((w) => ({\n\t\t\t\tcode: w.code,\n\t\t\t\tmessage: strip_link(w.message),\n\t\t\t\tstart: { line: w.start?.line, column: w.start?.column },\n\t\t\t\tend: { line: w.end?.line, column: w.end?.column }\n\t\t\t})),\n\t\t\texpected_warnings\n\t\t);\n\t} catch (e) {\n\t\terror = e as CompileError;\n\t}\n\n\tconst expected = expected_errors && expected_errors[0];\n\n\tif (error && expected) {\n\t\tassert.deepEqual(\n\t\t\t{\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: strip_link(error.message),\n\t\t\t\tstart: { line: error.start?.line, column: error.start?.column },\n\t\t\t\tend: { line: error.end?.line, column: error.end?.column }\n\t\t\t},\n\t\t\t{\n\t\t\t\tcode: expected.code,\n\t\t\t\tmessage: expected.message,\n\t\t\t\tstart: expected.start,\n\t\t\t\tend: expected.end\n\t\t\t}\n\t\t);\n\t} else if (expected) {\n\t\tthrow new Error(`Expected an error: ${expected.message}`);\n\t} else if (error) {\n\t\tthrow error;\n\t}\n});\n\nexport { test };\n\nawait run(__dirname);\n\nit.skip('errors if options.name is illegal', () => {\n\tassert.throws(() => {\n\t\tcompile('<div></div>', {\n\t\t\tname: 'not.valid',\n\t\t\tgenerate: false\n\t\t});\n\t}, /options\\.name must be a valid identifier/);\n});\n\nit.skip('check warning position', () => {\n\tconst { warnings } = compile('\\n  <img \\n src=\"foo.jpg\">\\n', {\n\t\tgenerate: false\n\t});\n\n\tassert.deepEqual(warnings, [\n\t\t{\n\t\t\tcode: 'a11y-missing-attribute',\n\t\t\tmessage: 'A11y: `<img>` element should have an alt attribute',\n\t\t\tstart: { column: 2, line: 2, character: 3 },\n\t\t\tend: { column: 15, line: 3, character: 24 }\n\t\t}\n\t]);\n});\n\nit.skip('warns if options.name is not capitalised', () => {\n\tconst { warnings } = compile('<div></div>', {\n\t\tname: 'lowercase',\n\t\tgenerate: false\n\t});\n\n\tassert.deepEqual(\n\t\twarnings.map((w) => ({\n\t\t\tcode: w.code,\n\t\t\tmessage: w.message\n\t\t})),\n\t\t[\n\t\t\t{\n\t\t\t\tcode: 'options-lowercase-name',\n\t\t\t\tmessage: 'options.name should be capitalised'\n\t\t\t}\n\t\t]\n\t);\n});\n\nit('does not warn if options.name begins with non-alphabetic character', () => {\n\tconst { warnings } = compile('<div></div>', {\n\t\tname: '_',\n\t\tgenerate: false\n\t});\n\n\tassert.deepEqual(warnings, []);\n});\n\nit('errors if namespace is provided but unrecognised', () => {\n\tassert.throws(() => {\n\t\tcompile('<div></div>', {\n\t\t\tname: 'test',\n\t\t\t// @ts-expect-error\n\t\t\tnamespace: 'svefefe'\n\t\t});\n\t}, /namespace should be one of \"html\", \"mathml\" or \"svg\"/);\n});\n"
  },
  {
    "path": "packages/svelte/tsconfig.generated.json",
    "content": "{\n\t\"extends\": \"./tsconfig.json\",\n\t\"include\": [\"./types/index.d.ts\"]\n}\n"
  },
  {
    "path": "packages/svelte/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"module\": \"esnext\",\n\t\t\"lib\": [\"esnext\", \"dom\", \"dom.iterable\"],\n\t\t\"target\": \"esnext\",\n\t\t\"noEmit\": true,\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"resolveJsonModule\": true,\n\t\t\"noEmitOnError\": true,\n\t\t\"noErrorTruncation\": true,\n\t\t\"allowSyntheticDefaultImports\": true,\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"types\": [\"node\"],\n\t\t\"strict\": true,\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"paths\": {\n\t\t\t\"svelte\": [\"./src/index.d.ts\"],\n\t\t\t\"svelte/action\": [\"./src/action/public.d.ts\"],\n\t\t\t\"svelte/compiler\": [\"./src/compiler/public.d.ts\"],\n\t\t\t\"svelte/events\": [\"./src/events/public.d.ts\"],\n\t\t\t\"svelte/internal/client\": [\"./src/internal/client/index.js\"],\n\t\t\t\"svelte/legacy\": [\"./src/legacy/legacy-client.js\"],\n\t\t\t\"svelte/motion\": [\"./src/motion/public.d.ts\"],\n\t\t\t\"svelte/server\": [\"./src/server/index.d.ts\"],\n\t\t\t\"svelte/store\": [\"./src/store/public.d.ts\"],\n\t\t\t\"svelte/reactivity\": [\"./src/reactivity/index-client.js\"]\n\t\t}\n\t},\n\t\"include\": [\n\t\t\"./*.js\",\n\t\t\"./scripts/\",\n\t\t\"./src/\",\n\t\t\"./tests/*/test.ts\",\n\t\t\"./tests/runtime-browser/test-ssr.ts\",\n\t\t\"./tests/*/samples/*/_config.js\"\n\t],\n\t\"exclude\": [\n\t\t\"./scripts/process-messages/templates/\",\n\t\t\"./scripts/_bundle.js\",\n\t\t\"./src/compiler/optimizer/\"\n\t]\n}\n"
  },
  {
    "path": "packages/svelte/tsconfig.runtime.json",
    "content": "{\n\t\"extends\": \"./tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t// Ensure we don't use any methods that are not available in all browser for a long period of time\n\t\t// so that people don't need to polyfill them. Example array.at(...) was introduced to Safari only in 2022\n\t\t\"target\": \"es2021\",\n\t\t\"lib\": [\"es2021\", \"DOM\", \"DOM.Iterable\"],\n\t\t\"types\": [] // prevent automatic inclusion of @types/node\n\t},\n\t\"include\": [\"./src/\"],\n\t// Compiler is allowed to use more recent methods; people using it in the browser are expected to know\n\t// how to polyfill missing methods. Also make sure to not include test files as these include Vitest\n\t// which then loads node globals.\n\t\"exclude\": [\"./src/compiler/**/*\", \"./src/**/*.test.ts\"]\n}\n"
  },
  {
    "path": "packages/svelte/types/index.d.ts",
    "content": "/// <reference types=\"esrap\" />\n\ndeclare module 'svelte' {\n\t/**\n\t * @deprecated In Svelte 4, components are classes. In Svelte 5, they are functions.\n\t * Use `mount` instead to instantiate components.\n\t * See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t * for more info.\n\t */\n\texport interface ComponentConstructorOptions<\n\t\tProps extends Record<string, any> = Record<string, any>\n\t> {\n\t\ttarget: Element | Document | ShadowRoot;\n\t\tanchor?: Element;\n\t\tprops?: Props;\n\t\tcontext?: Map<any, any>;\n\t\thydrate?: boolean;\n\t\tintro?: boolean;\n\t\trecover?: boolean;\n\t\tsync?: boolean;\n\t\tidPrefix?: string;\n\t\t$$inline?: boolean;\n\t\ttransformError?: (error: unknown) => unknown;\n\t}\n\n\t/**\n\t * Utility type for ensuring backwards compatibility on a type level that if there's a default slot, add 'children' to the props\n\t */\n\ttype Properties<Props, Slots> = Props &\n\t\t(Slots extends { default: any }\n\t\t\t? // This is unfortunate because it means \"accepts no props\" turns into \"accepts any prop\"\n\t\t\t\t// but the alternative is non-fixable type errors because of the way TypeScript index\n\t\t\t\t// signatures work (they will always take precedence and make an impossible-to-satisfy children type).\n\t\t\t\tProps extends Record<string, never>\n\t\t\t\t? any\n\t\t\t\t: { children?: any }\n\t\t\t: {});\n\n\t/**\n\t * This was the base class for Svelte components in Svelte 4. Svelte 5+ components\n\t * are completely different under the hood. For typing, use `Component` instead.\n\t * To instantiate components, use `mount` instead.\n\t * See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more info.\n\t */\n\texport class SvelteComponent<\n\t\tProps extends Record<string, any> = Record<string, any>,\n\t\tEvents extends Record<string, any> = any,\n\t\tSlots extends Record<string, any> = any\n\t> {\n\t\t/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */\n\t\tstatic element?: typeof HTMLElement;\n\n\t\t[prop: string]: any;\n\t\t/**\n\t\t * @deprecated This constructor only exists when using the `asClassComponent` compatibility helper, which\n\t\t * is a stop-gap solution. Migrate towards using `mount` instead. See\n\t\t * [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more info.\n\t\t */\n\t\tconstructor(options: ComponentConstructorOptions<Properties<Props, Slots>>);\n\t\t/**\n\t\t * For type checking capabilities only.\n\t\t * Does not exist at runtime.\n\t\t * ### DO NOT USE!\n\t\t */\n\t\t$$prop_def: Props; // Without Properties: unnecessary, causes type bugs\n\t\t/**\n\t\t * For type checking capabilities only.\n\t\t * Does not exist at runtime.\n\t\t * ### DO NOT USE!\n\t\t */\n\t\t$$events_def: Events;\n\t\t/**\n\t\t * For type checking capabilities only.\n\t\t * Does not exist at runtime.\n\t\t * ### DO NOT USE!\n\t\t */\n\t\t$$slot_def: Slots;\n\t\t/**\n\t\t * For type checking capabilities only.\n\t\t * Does not exist at runtime.\n\t\t * ### DO NOT USE!\n\t\t */\n\t\t$$bindings?: string;\n\n\t\t/**\n\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t * for more info.\n\t\t */\n\t\t$destroy(): void;\n\n\t\t/**\n\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t * for more info.\n\t\t */\n\t\t$on<K extends Extract<keyof Events, string>>(\n\t\t\ttype: K,\n\t\t\tcallback: (e: Events[K]) => void\n\t\t): () => void;\n\n\t\t/**\n\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t * for more info.\n\t\t */\n\t\t$set(props: Partial<Props>): void;\n\t}\n\n\tconst brand: unique symbol;\n\ttype Brand<B> = { [brand]: B };\n\ttype Branded<T, B> = T & Brand<B>;\n\n\t/**\n\t * Internal implementation details that vary between environments\n\t */\n\texport type ComponentInternals = Branded<{}, 'ComponentInternals'>;\n\n\t/**\n\t * Can be used to create strongly typed Svelte components.\n\t *\n\t * #### Example:\n\t *\n\t * You have component library on npm called `component-library`, from which\n\t * you export a component called `MyComponent`. For Svelte+TypeScript users,\n\t * you want to provide typings. Therefore you create a `index.d.ts`:\n\t * ```ts\n\t * import type { Component } from 'svelte';\n\t * export declare const MyComponent: Component<{ foo: string }> {}\n\t * ```\n\t * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n\t * to provide intellisense and to use the component like this in a Svelte file\n\t * with TypeScript:\n\t * ```svelte\n\t * <script lang=\"ts\">\n\t * \timport { MyComponent } from \"component-library\";\n\t * </script>\n\t * <MyComponent foo={'bar'} />\n\t * ```\n\t */\n\texport interface Component<\n\t\tProps extends Record<string, any> = {},\n\t\tExports extends Record<string, any> = {},\n\t\tBindings extends keyof Props | '' = string\n\t> {\n\t\t/**\n\t\t * @param internal An internal object used by Svelte. Do not use or modify.\n\t\t * @param props The props passed to the component.\n\t\t */\n\t\t(\n\t\t\tthis: void,\n\t\t\tinternals: ComponentInternals,\n\t\t\tprops: Props\n\t\t): {\n\t\t\t/**\n\t\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t\t * for more info.\n\t\t\t */\n\t\t\t$on?(type: string, callback: (e: any) => void): () => void;\n\t\t\t/**\n\t\t\t * @deprecated This method only exists when using one of the legacy compatibility helpers, which\n\t\t\t * is a stop-gap solution. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes)\n\t\t\t * for more info.\n\t\t\t */\n\t\t\t$set?(props: Partial<Props>): void;\n\t\t} & Exports;\n\t\t/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */\n\t\telement?: typeof HTMLElement;\n\t\t/** Does not exist at runtime, for typing capabilities only. DO NOT USE */\n\t\tz_$$bindings?: Bindings;\n\t}\n\n\t/**\n\t * @deprecated Use `Component` instead. See [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes) for more information.\n\t */\n\texport class SvelteComponentTyped<\n\t\tProps extends Record<string, any> = Record<string, any>,\n\t\tEvents extends Record<string, any> = any,\n\t\tSlots extends Record<string, any> = any\n\t> extends SvelteComponent<Props, Events, Slots> {}\n\n\t/**\n\t * @deprecated The new `Component` type does not have a dedicated Events type. Use `ComponentProps` instead.\n\t *\n\t * @description\n\t * Convenience type to get the events the given component expects. Example:\n\t * ```html\n\t * <script lang=\"ts\">\n\t *    import type { ComponentEvents } from 'svelte';\n\t *    import Component from './Component.svelte';\n\t *\n\t *    function handleCloseEvent(event: ComponentEvents<Component>['close']) {\n\t *       console.log(event.detail);\n\t *    }\n\t * </script>\n\t *\n\t * <Component on:close={handleCloseEvent} />\n\t * ```\n\t */\n\texport type ComponentEvents<Comp extends SvelteComponent> =\n\t\tComp extends SvelteComponent<any, infer Events> ? Events : never;\n\n\t/**\n\t * Convenience type to get the props the given component expects.\n\t *\n\t * Example: Ensure a variable contains the props expected by `MyComponent`:\n\t *\n\t * ```ts\n\t * import type { ComponentProps } from 'svelte';\n\t * import MyComponent from './MyComponent.svelte';\n\t *\n\t * // Errors if these aren't the correct props expected by MyComponent.\n\t * const props: ComponentProps<typeof MyComponent> = { foo: 'bar' };\n\t * ```\n\t *\n\t * > [!NOTE] In Svelte 4, you would do `ComponentProps<MyComponent>` because `MyComponent` was a class.\n\t *\n\t * Example: A generic function that accepts some component and infers the type of its props:\n\t *\n\t * ```ts\n\t * import type { Component, ComponentProps } from 'svelte';\n\t * import MyComponent from './MyComponent.svelte';\n\t *\n\t * function withProps<TComponent extends Component<any>>(\n\t * \tcomponent: TComponent,\n\t * \tprops: ComponentProps<TComponent>\n\t * ) {};\n\t *\n\t * // Errors if the second argument is not the correct props expected by the component in the first argument.\n\t * withProps(MyComponent, { foo: 'bar' });\n\t * ```\n\t */\n\texport type ComponentProps<Comp extends SvelteComponent | Component<any, any>> =\n\t\tComp extends SvelteComponent<infer Props>\n\t\t\t? Props\n\t\t\t: Comp extends Component<infer Props, any>\n\t\t\t\t? Props\n\t\t\t\t: never;\n\n\t/**\n\t * @deprecated This type is obsolete when working with the new `Component` type.\n\t *\n\t * @description\n\t * Convenience type to get the type of a Svelte component. Useful for example in combination with\n\t * dynamic components using `<svelte:component>`.\n\t *\n\t * Example:\n\t * ```html\n\t * <script lang=\"ts\">\n\t * \timport type { ComponentType, SvelteComponent } from 'svelte';\n\t * \timport Component1 from './Component1.svelte';\n\t * \timport Component2 from './Component2.svelte';\n\t *\n\t * \tconst component: ComponentType = someLogic() ? Component1 : Component2;\n\t * \tconst componentOfCertainSubType: ComponentType<SvelteComponent<{ needsThisProp: string }>> = someLogic() ? Component1 : Component2;\n\t * </script>\n\t *\n\t * <svelte:component this={component} />\n\t * <svelte:component this={componentOfCertainSubType} needsThisProp=\"hello\" />\n\t * ```\n\t */\n\texport type ComponentType<Comp extends SvelteComponent = SvelteComponent> = (new (\n\t\toptions: ComponentConstructorOptions<\n\t\t\tComp extends SvelteComponent<infer Props> ? Props : Record<string, any>\n\t\t>\n\t) => Comp) & {\n\t\t/** The custom element version of the component. Only present if compiled with the `customElement` compiler option */\n\t\telement?: typeof HTMLElement;\n\t};\n\n\tconst SnippetReturn: unique symbol;\n\n\t// Use an interface instead of a type, makes for better intellisense info because the type is named in more situations.\n\t/**\n\t * The type of a `#snippet` block. You can use it to (for example) express that your component expects a snippet of a certain type:\n\t * ```ts\n\t * let { banner }: { banner: Snippet<[{ text: string }]> } = $props();\n\t * ```\n\t * You can only call a snippet through the `{@render ...}` tag.\n\t *\n\t * See the [snippet documentation](https://svelte.dev/docs/svelte/snippet) for more info.\n\t *\n\t * @template Parameters the parameters that the snippet expects (if any) as a tuple.\n\t */\n\texport interface Snippet<Parameters extends unknown[] = []> {\n\t\t(\n\t\t\tthis: void,\n\t\t\t// this conditional allows tuples but not arrays. Arrays would indicate a\n\t\t\t// rest parameter type, which is not supported. If rest parameters are added\n\t\t\t// in the future, the condition can be removed.\n\t\t\t...args: number extends Parameters['length'] ? never : Parameters\n\t\t): {\n\t\t\t'{@render ...} must be called with a Snippet': \"import type { Snippet } from 'svelte'\";\n\t\t} & typeof SnippetReturn;\n\t}\n\n\tinterface DispatchOptions {\n\t\tcancelable?: boolean;\n\t}\n\n\texport interface EventDispatcher<EventMap extends Record<string, any>> {\n\t\t// Implementation notes:\n\t\t// - undefined extends X instead of X extends undefined makes this work better with both strict and nonstrict mode\n\t\t// - | null | undefined is added for convenience, as they are equivalent for the custom event constructor (both result in a null detail)\n\t\t<Type extends keyof EventMap>(\n\t\t\t...args: null extends EventMap[Type]\n\t\t\t\t? [type: Type, parameter?: EventMap[Type] | null | undefined, options?: DispatchOptions]\n\t\t\t\t: undefined extends EventMap[Type]\n\t\t\t\t\t? [type: Type, parameter?: EventMap[Type] | null | undefined, options?: DispatchOptions]\n\t\t\t\t\t: [type: Type, parameter: EventMap[Type], options?: DispatchOptions]\n\t\t): boolean;\n\t}\n\n\t/**\n\t * Defines the options accepted by the `mount()` function.\n\t */\n\texport type MountOptions<Props extends Record<string, any> = Record<string, any>> = {\n\t\t/**\n\t\t * Target element where the component will be mounted.\n\t\t */\n\t\ttarget: Document | Element | ShadowRoot;\n\t\t/**\n\t\t * Optional node inside `target`. When specified, it is used to render the component immediately before it.\n\t\t */\n\t\tanchor?: Node;\n\t\t/**\n\t\t * Allows the specification of events.\n\t\t * @deprecated Use callback props instead.\n\t\t */\n\t\tevents?: Record<string, (e: any) => any>;\n\t\t/**\n\t\t * Can be accessed via `getContext()` at the component level.\n\t\t */\n\t\tcontext?: Map<any, any>;\n\t\t/**\n\t\t * Whether or not to play transitions on initial render.\n\t\t * @default true\n\t\t */\n\t\tintro?: boolean;\n\t\t/**\n\t\t * A function that transforms errors caught by error boundaries before they are passed to the `failed` snippet.\n\t\t * Defaults to the identity function.\n\t\t */\n\t\ttransformError?: (error: unknown) => unknown | Promise<unknown>;\n\t} & ({} extends Props\n\t\t? {\n\t\t\t\t/**\n\t\t\t\t * Component properties.\n\t\t\t\t */\n\t\t\t\tprops?: Props;\n\t\t\t}\n\t\t: {\n\t\t\t\t/**\n\t\t\t\t * Component properties.\n\t\t\t\t */\n\t\t\t\tprops: Props;\n\t\t\t});\n\n\t/**\n\t * Represents work that is happening off-screen, such as data being preloaded\n\t * in anticipation of the user navigating\n\t * @since 5.42\n\t */\n\texport interface Fork {\n\t\t/**\n\t\t * Commit the fork. The promise will resolve once the state change has been applied\n\t\t */\n\t\tcommit(): Promise<void>;\n\t\t/**\n\t\t * Discard the fork\n\t\t */\n\t\tdiscard(): void;\n\t}\n\t/**\n\t * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n\t *\n\t * Must be called while a derived or effect is running.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { getAbortSignal } from 'svelte';\n\t *\n\t * \tlet { id } = $props();\n\t *\n\t * \tasync function getData(id) {\n\t * \t\tconst response = await fetch(`/items/${id}`, {\n\t * \t\t\tsignal: getAbortSignal()\n\t * \t\t});\n\t *\n\t * \t\treturn await response.json();\n\t * \t}\n\t *\n\t * \tconst data = $derived(await getData(id));\n\t * </script>\n\t * ```\n\t */\n\texport function getAbortSignal(): AbortSignal;\n\t/**\n\t * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n\t * Unlike `$effect`, the provided function only runs once.\n\t *\n\t * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n\t * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n\t * it will be called when the component is unmounted.\n\t *\n\t * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n\t *\n\t * */\n\texport function onMount<T>(fn: () => NotFunction<T> | Promise<NotFunction<T>> | (() => any)): void;\n\t/**\n\t * Schedules a callback to run immediately before the component is unmounted.\n\t *\n\t * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n\t * only one that runs inside a server-side component.\n\t *\n\t * */\n\texport function onDestroy(fn: () => any): void;\n\t/**\n\t * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n\t * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n\t *\n\t * Component events created with `createEventDispatcher` create a\n\t * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n\t * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n\t * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n\t * property and can contain any type of data.\n\t *\n\t * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n\t * ```ts\n\t * const dispatch = createEventDispatcher<{\n\t *  loaded: null; // does not take a detail argument\n\t *  change: string; // takes a detail argument of type string, which is required\n\t *  optional: number | null; // takes an optional detail argument of type number\n\t * }>();\n\t * ```\n\t *\n\t * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n\t * */\n\texport function createEventDispatcher<EventMap extends Record<string, any> = any>(): EventDispatcher<EventMap>;\n\t/**\n\t * Schedules a callback to run immediately before the component is updated after any state change.\n\t *\n\t * The first time the callback runs will be before the initial `onMount`.\n\t *\n\t * In runes mode use `$effect.pre` instead.\n\t *\n\t * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n\t * */\n\texport function beforeUpdate(fn: () => void): void;\n\t/**\n\t * Schedules a callback to run immediately after the component has been updated.\n\t *\n\t * The first time the callback runs will be after the initial `onMount`.\n\t *\n\t * In runes mode use `$effect` instead.\n\t *\n\t * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n\t * */\n\texport function afterUpdate(fn: () => void): void;\n\texport function hydratable<T>(key: string, fn: () => T): T;\n\t/**\n\t * Create a snippet programmatically\n\t * */\n\texport function createRawSnippet<Params extends unknown[]>(fn: (...params: Getters<Params>) => {\n\t\trender: () => string;\n\t\tsetup?: (element: Element) => void | (() => void);\n\t}): Snippet<Params>;\n\t/** Anything except a function */\n\ttype NotFunction<T> = T extends Function ? never : T;\n\t/**\n\t * Synchronously flush any pending updates.\n\t * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n\t * */\n\texport function flushSync<T = void>(fn?: (() => T) | undefined): T;\n\t/**\n\t * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n\t * This is useful for speculatively loading data (for example) when you suspect that\n\t * the user is about to take some action.\n\t *\n\t * Frameworks like SvelteKit can use this to preload data when the user touches or\n\t * hovers over a link, making any subsequent navigation feel instantaneous.\n\t *\n\t * The `fn` parameter is a synchronous function that modifies some state. The\n\t * state changes will be reverted after the fork is initialised, then reapplied\n\t * if and when the fork is eventually committed.\n\t *\n\t * When it becomes clear that a fork will _not_ be committed (e.g. because the\n\t * user navigated elsewhere), it must be discarded to avoid leaking memory.\n\t *\n\t * @since 5.42\n\t */\n\texport function fork(fn: () => void): Fork;\n\t/**\n\t * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n\t *\n\t * `get` will throw an error if no parent component called `set`.\n\t *\n\t * @since 5.40.0\n\t */\n\texport function createContext<T>(): [() => T, (context: T) => T];\n\t/**\n\t * Retrieves the context that belongs to the closest parent component with the specified `key`.\n\t * Must be called during component initialisation.\n\t *\n\t * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n\t *\n\t * */\n\texport function getContext<T>(key: any): T;\n\t/**\n\t * Associates an arbitrary `context` object with the current component and the specified `key`\n\t * and returns that object. The context is then available to children of the component\n\t * (including slotted content) with `getContext`.\n\t *\n\t * Like lifecycle functions, this must be called during component initialisation.\n\t *\n\t * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n\t *\n\t * */\n\texport function setContext<T>(key: any, context: T): T;\n\t/**\n\t * Checks whether a given `key` has been set in the context of a parent component.\n\t * Must be called during component initialisation.\n\t *\n\t * */\n\texport function hasContext(key: any): boolean;\n\t/**\n\t * Retrieves the whole context map that belongs to the closest parent component.\n\t * Must be called during component initialisation. Useful, for example, if you\n\t * programmatically create a component and want to pass the existing context to it.\n\t *\n\t * */\n\texport function getAllContexts<T extends Map<any, any> = Map<any, any>>(): T;\n\t/**\n\t * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n\t * Transitions will play during the initial render unless the `intro` option is set to `false`.\n\t *\n\t * */\n\texport function mount<Props extends Record<string, any>, Exports extends Record<string, any>>(component: ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>, options: MountOptions<Props>): Exports;\n\t/**\n\t * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n\t *\n\t * */\n\texport function hydrate<Props extends Record<string, any>, Exports extends Record<string, any>>(component: ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>, options: {} extends Props ? {\n\t\ttarget: Document | Element | ShadowRoot;\n\t\tprops?: Props;\n\t\tevents?: Record<string, (e: any) => any>;\n\t\tcontext?: Map<any, any>;\n\t\tintro?: boolean;\n\t\trecover?: boolean;\n\t\ttransformError?: (error: unknown) => unknown;\n\t} : {\n\t\ttarget: Document | Element | ShadowRoot;\n\t\tprops: Props;\n\t\tevents?: Record<string, (e: any) => any>;\n\t\tcontext?: Map<any, any>;\n\t\tintro?: boolean;\n\t\trecover?: boolean;\n\t\ttransformError?: (error: unknown) => unknown;\n\t}): Exports;\n\t/**\n\t * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n\t *\n\t * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n\t *\n\t * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n\t *\n\t * ```js\n\t * import { mount, unmount } from 'svelte';\n\t * import App from './App.svelte';\n\t *\n\t * const app = mount(App, { target: document.body });\n\t *\n\t * // later...\n\t * unmount(app, { outro: true });\n\t * ```\n\t * */\n\texport function unmount(component: Record<string, any>, options?: {\n\t\toutro?: boolean;\n\t} | undefined): Promise<void>;\n\t/**\n\t * Returns a promise that resolves once any pending state changes have been applied.\n\t * */\n\texport function tick(): Promise<void>;\n\t/**\n\t * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n\t * have resolved and the DOM has been updated\n\t * @since 5.36\n\t */\n\texport function settled(): Promise<void>;\n\t/**\n\t * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n\t * any state read inside `fn` will not be treated as a dependency.\n\t *\n\t * ```ts\n\t * $effect(() => {\n\t *   // this will run when `data` changes, but not when `time` changes\n\t *   save(data, {\n\t *     timestamp: untrack(() => time)\n\t *   });\n\t * });\n\t * ```\n\t * */\n\texport function untrack<T>(fn: () => T): T;\n\ttype Getters<T> = {\n\t\t[K in keyof T]: () => T[K];\n\t};\n\n\texport {};\n}\n\ndeclare module 'svelte/action' {\n\t/**\n\t * Actions can return an object containing the two properties defined in this interface. Both are optional.\n\t * - update: An action can have a parameter. This method will be called whenever that parameter changes,\n\t *   immediately after Svelte has applied updates to the markup. `ActionReturn` and `ActionReturn<undefined>` both\n\t *   mean that the action accepts no parameters.\n\t * - destroy: Method that is called after the element is unmounted\n\t *\n\t * Additionally, you can specify which additional attributes and events the action enables on the applied element.\n\t * This applies to TypeScript typings only and has no effect at runtime.\n\t *\n\t * Example usage:\n\t * ```ts\n\t * interface Attributes {\n\t * \tnewprop?: string;\n\t * \t'on:event': (e: CustomEvent<boolean>) => void;\n\t * }\n\t *\n\t * export function myAction(node: HTMLElement, parameter: Parameter): ActionReturn<Parameter, Attributes> {\n\t * \t// ...\n\t * \treturn {\n\t * \t\tupdate: (updatedParameter) => {...},\n\t * \t\tdestroy: () => {...}\n\t * \t};\n\t * }\n\t * ```\n\t */\n\texport interface ActionReturn<\n\t\tParameter = undefined,\n\t\tAttributes extends Record<string, any> = Record<never, any>\n\t> {\n\t\tupdate?: (parameter: Parameter) => void;\n\t\tdestroy?: () => void;\n\t\t/**\n\t\t * ### DO NOT USE THIS\n\t\t * This exists solely for type-checking and has no effect at runtime.\n\t\t * Set this through the `Attributes` generic instead.\n\t\t */\n\t\t$$_attributes?: Attributes;\n\t}\n\n\t/**\n\t * Actions are functions that are called when an element is created.\n\t * You can use this interface to type such actions.\n\t * The following example defines an action that only works on `<div>` elements\n\t * and optionally accepts a parameter which it has a default value for:\n\t * ```ts\n\t * export const myAction: Action<HTMLDivElement, { someProperty: boolean } | undefined> = (node, param = { someProperty: true }) => {\n\t *   // ...\n\t * }\n\t * ```\n\t * `Action<HTMLDivElement>` and `Action<HTMLDivElement, undefined>` both signal that the action accepts no parameters.\n\t *\n\t * You can return an object with methods `update` and `destroy` from the function and type which additional attributes and events it has.\n\t * See interface `ActionReturn` for more details.\n\t */\n\texport interface Action<\n\t\tElement = HTMLElement,\n\t\tParameter = undefined,\n\t\tAttributes extends Record<string, any> = Record<never, any>\n\t> {\n\t\t<Node extends Element>(\n\t\t\t...args: undefined extends Parameter\n\t\t\t\t? [node: Node, parameter?: Parameter]\n\t\t\t\t: [node: Node, parameter: Parameter]\n\t\t): void | ActionReturn<Parameter, Attributes>;\n\t}\n\n\t// Implementation notes:\n\t// - undefined extends X instead of X extends undefined makes this work better with both strict and nonstrict mode\n\n\texport {};\n}\n\ndeclare module 'svelte/animate' {\n\t// todo: same as Transition, should it be shared?\n\texport interface AnimationConfig {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: (t: number) => number;\n\t\tcss?: (t: number, u: number) => string;\n\t\ttick?: (t: number, u: number) => void;\n\t}\n\n\texport interface FlipParams {\n\t\tdelay?: number;\n\t\tduration?: number | ((len: number) => number);\n\t\teasing?: (t: number) => number;\n\t}\n\t/**\n\t * The flip function calculates the start and end position of an element and animates between them, translating the x and y values.\n\t * `flip` stands for [First, Last, Invert, Play](https://aerotwist.com/blog/flip-your-animations/).\n\t *\n\t * */\n\texport function flip(node: Element, { from, to }: {\n\t\tfrom: DOMRect;\n\t\tto: DOMRect;\n\t}, params?: FlipParams): AnimationConfig;\n\n\texport {};\n}\n\ndeclare module 'svelte/attachments' {\n\t/**\n\t * An [attachment](https://svelte.dev/docs/svelte/@attach) is a function that runs when an element is mounted\n\t * to the DOM, and optionally returns a function that is called when the element is later removed.\n\t *\n\t * It can be attached to an element with an `{@attach ...}` tag, or by spreading an object containing\n\t * a property created with [`createAttachmentKey`](https://svelte.dev/docs/svelte/svelte-attachments#createAttachmentKey).\n\t */\n\texport interface Attachment<T extends EventTarget = Element> {\n\t\t(element: T): void | (() => void);\n\t}\n\t/**\n\t * Creates an object key that will be recognised as an attachment when the object is spread onto an element,\n\t * as a programmatic alternative to using `{@attach ...}`. This can be useful for library authors, though\n\t * is generally not needed when building an app.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { createAttachmentKey } from 'svelte/attachments';\n\t *\n\t * \tconst props = {\n\t * \t\tclass: 'cool',\n\t * \t\tonclick: () => alert('clicked'),\n\t * \t\t[createAttachmentKey()]: (node) => {\n\t * \t\t\tnode.textContent = 'attached!';\n\t * \t\t}\n\t * \t};\n\t * </script>\n\t *\n\t * <button {...props}>click me</button>\n\t * ```\n\t * @since 5.29\n\t */\n\texport function createAttachmentKey(): symbol;\n\t/**\n\t * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n\t * It's useful if you want to start using attachments on components but you have actions provided by a library.\n\t *\n\t * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n\t * action function, not the argument itself.\n\t *\n\t * ```svelte\n\t * <!-- with an action -->\n\t * <div use:foo={bar}>...</div>\n\t *\n\t * <!-- with an attachment -->\n\t * <div {@attach fromAction(foo, () => bar)}>...</div>\n\t * ```\n\t * */\n\texport function fromAction<E extends EventTarget, T extends unknown>(action: Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>), fn: () => T): Attachment<E>;\n\t/**\n\t * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n\t * It's useful if you want to start using attachments on components but you have actions provided by a library.\n\t *\n\t * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n\t * action function, not the argument itself.\n\t *\n\t * ```svelte\n\t * <!-- with an action -->\n\t * <div use:foo={bar}>...</div>\n\t *\n\t * <!-- with an attachment -->\n\t * <div {@attach fromAction(foo, () => bar)}>...</div>\n\t * ```\n\t * */\n\texport function fromAction<E extends EventTarget>(action: Action<E, void> | ((element: E) => void | ActionReturn<void>)): Attachment<E>;\n\t/**\n\t * Actions can return an object containing the two properties defined in this interface. Both are optional.\n\t * - update: An action can have a parameter. This method will be called whenever that parameter changes,\n\t *   immediately after Svelte has applied updates to the markup. `ActionReturn` and `ActionReturn<undefined>` both\n\t *   mean that the action accepts no parameters.\n\t * - destroy: Method that is called after the element is unmounted\n\t *\n\t * Additionally, you can specify which additional attributes and events the action enables on the applied element.\n\t * This applies to TypeScript typings only and has no effect at runtime.\n\t *\n\t * Example usage:\n\t * ```ts\n\t * interface Attributes {\n\t * \tnewprop?: string;\n\t * \t'on:event': (e: CustomEvent<boolean>) => void;\n\t * }\n\t *\n\t * export function myAction(node: HTMLElement, parameter: Parameter): ActionReturn<Parameter, Attributes> {\n\t * \t// ...\n\t * \treturn {\n\t * \t\tupdate: (updatedParameter) => {...},\n\t * \t\tdestroy: () => {...}\n\t * \t};\n\t * }\n\t * ```\n\t */\n\tinterface ActionReturn<\n\t\tParameter = undefined,\n\t\tAttributes extends Record<string, any> = Record<never, any>\n\t> {\n\t\tupdate?: (parameter: Parameter) => void;\n\t\tdestroy?: () => void;\n\t\t/**\n\t\t * ### DO NOT USE THIS\n\t\t * This exists solely for type-checking and has no effect at runtime.\n\t\t * Set this through the `Attributes` generic instead.\n\t\t */\n\t\t$$_attributes?: Attributes;\n\t}\n\n\t/**\n\t * Actions are functions that are called when an element is created.\n\t * You can use this interface to type such actions.\n\t * The following example defines an action that only works on `<div>` elements\n\t * and optionally accepts a parameter which it has a default value for:\n\t * ```ts\n\t * export const myAction: Action<HTMLDivElement, { someProperty: boolean } | undefined> = (node, param = { someProperty: true }) => {\n\t *   // ...\n\t * }\n\t * ```\n\t * `Action<HTMLDivElement>` and `Action<HTMLDivElement, undefined>` both signal that the action accepts no parameters.\n\t *\n\t * You can return an object with methods `update` and `destroy` from the function and type which additional attributes and events it has.\n\t * See interface `ActionReturn` for more details.\n\t */\n\tinterface Action<\n\t\tElement = HTMLElement,\n\t\tParameter = undefined,\n\t\tAttributes extends Record<string, any> = Record<never, any>\n\t> {\n\t\t<Node extends Element>(\n\t\t\t...args: undefined extends Parameter\n\t\t\t\t? [node: Node, parameter?: Parameter]\n\t\t\t\t: [node: Node, parameter: Parameter]\n\t\t): void | ActionReturn<Parameter, Attributes>;\n\t}\n\n\t// Implementation notes:\n\t// - undefined extends X instead of X extends undefined makes this work better with both strict and nonstrict mode\n\n\texport {};\n}\n\ndeclare module 'svelte/compiler' {\n\timport type { SourceMap } from 'magic-string';\n\timport type { ArrayExpression, ArrowFunctionExpression, VariableDeclaration, VariableDeclarator, Expression, Identifier, MemberExpression, Node, ObjectExpression, Pattern, Program, ChainExpression, SimpleCallExpression, SequenceExpression, SourceLocation } from 'estree';\n\timport type { Location } from 'locate-character';\n\timport type { default as ts } from 'esrap/languages/ts';\n\t/**\n\t * `compile` converts your `.svelte` source code into a JavaScript module that exports a component\n\t *\n\t * @param source The component source code\n\t * @param options The compiler options\n\t * */\n\texport function compile(source: string, options: CompileOptions): CompileResult;\n\t/**\n\t * `compileModule` takes your JavaScript source code containing runes, and turns it into a JavaScript module.\n\t *\n\t * @param source The component source code\n\t * */\n\texport function compileModule(source: string, options: ModuleCompileOptions): CompileResult;\n\t/**\n\t * The parse function parses a component, returning only its abstract syntax tree.\n\t *\n\t * The `modern` option (`false` by default in Svelte 5) makes the parser return a modern AST instead of the legacy AST.\n\t * `modern` will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n\t *\n\t * */\n\texport function parse(source: string, options: {\n\t\tfilename?: string;\n\t\tmodern: true;\n\t\tloose?: boolean;\n\t}): AST.Root;\n\t/**\n\t * The parse function parses a component, returning only its abstract syntax tree.\n\t *\n\t * The `modern` option (`false` by default in Svelte 5) makes the parser return a modern AST instead of the legacy AST.\n\t * `modern` will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n\t *\n\t * */\n\texport function parse(source: string, options?: {\n\t\tfilename?: string;\n\t\tmodern?: false;\n\t\tloose?: boolean;\n\t} | undefined): Record<string, any>;\n\t/**\n\t * The parseCss function parses a CSS stylesheet, returning its abstract syntax tree.\n\t *\n\t * @param source The CSS source code\n\t * */\n\texport function parseCss(source: string): AST.CSS.StyleSheetFile;\n\t/**\n\t * @deprecated Replace this with `import { walk } from 'estree-walker'`\n\t * */\n\texport function walk(): never;\n\t/**\n\t * The result of a preprocessor run. If the preprocessor does not return a result, it is assumed that the code is unchanged.\n\t */\n\texport interface Processed {\n\t\t/**\n\t\t * The new code\n\t\t */\n\t\tcode: string;\n\t\t/**\n\t\t * A source map mapping back to the original code\n\t\t */\n\t\tmap?: string | object; // we are opaque with the type here to avoid dependency on the remapping module for our public types.\n\t\t/**\n\t\t * A list of additional files to watch for changes\n\t\t */\n\t\tdependencies?: string[];\n\t\t/**\n\t\t * Only for script/style preprocessors: The updated attributes to set on the tag. If undefined, attributes stay unchanged.\n\t\t */\n\t\tattributes?: Record<string, string | boolean>;\n\t\ttoString?: () => string;\n\t}\n\n\t/**\n\t * A markup preprocessor that takes a string of code and returns a processed version.\n\t */\n\texport type MarkupPreprocessor = (options: {\n\t\t/**\n\t\t * The whole Svelte file content\n\t\t */\n\t\tcontent: string;\n\t\t/**\n\t\t * The filename of the Svelte file\n\t\t */\n\t\tfilename?: string;\n\t}) => Processed | void | Promise<Processed | void>;\n\n\t/**\n\t * A script/style preprocessor that takes a string of code and returns a processed version.\n\t */\n\texport type Preprocessor = (options: {\n\t\t/**\n\t\t * The script/style tag content\n\t\t */\n\t\tcontent: string;\n\t\t/**\n\t\t * The attributes on the script/style tag\n\t\t */\n\t\tattributes: Record<string, string | boolean>;\n\t\t/**\n\t\t * The whole Svelte file content\n\t\t */\n\t\tmarkup: string;\n\t\t/**\n\t\t * The filename of the Svelte file\n\t\t */\n\t\tfilename?: string;\n\t}) => Processed | void | Promise<Processed | void>;\n\n\t/**\n\t * A preprocessor group is a set of preprocessors that are applied to a Svelte file.\n\t */\n\texport interface PreprocessorGroup {\n\t\t/** Name of the preprocessor. Will be a required option in the next major version */\n\t\tname?: string;\n\t\tmarkup?: MarkupPreprocessor;\n\t\tstyle?: Preprocessor;\n\t\tscript?: Preprocessor;\n\t}\n\t/** The return value of `compile` from `svelte/compiler` */\n\texport interface CompileResult {\n\t\t/** The compiled JavaScript */\n\t\tjs: {\n\t\t\t/** The generated code */\n\t\t\tcode: string;\n\t\t\t/** A source map */\n\t\t\tmap: SourceMap;\n\t\t};\n\t\t/** The compiled CSS */\n\t\tcss: null | {\n\t\t\t/** The generated code */\n\t\t\tcode: string;\n\t\t\t/** A source map */\n\t\t\tmap: SourceMap;\n\t\t\t/** Whether or not the CSS includes global rules */\n\t\t\thasGlobal: boolean;\n\t\t};\n\t\t/**\n\t\t * An array of warning objects that were generated during compilation. Each warning has several properties:\n\t\t * - `code` is a string identifying the category of warning\n\t\t * - `message` describes the issue in human-readable terms\n\t\t * - `start` and `end`, if the warning relates to a specific location, are objects with `line`, `column` and `character` properties\n\t\t */\n\t\twarnings: Warning[];\n\t\t/**\n\t\t * Metadata about the compiled component\n\t\t */\n\t\tmetadata: {\n\t\t\t/**\n\t\t\t * Whether the file was compiled in runes mode, either because of an explicit option or inferred from usage.\n\t\t\t * For `compileModule`, this is always `true`\n\t\t\t */\n\t\t\trunes: boolean;\n\t\t};\n\t\t/** The AST */\n\t\tast: any;\n\t}\n\n\texport interface Warning extends ICompileDiagnostic {}\n\n\texport interface CompileError extends ICompileDiagnostic {}\n\n\ttype CssHashGetter = (args: {\n\t\tname: string;\n\t\tfilename: string;\n\t\tcss: string;\n\t\thash: (input: string) => string;\n\t}) => string;\n\n\texport interface CompileOptions extends ModuleCompileOptions {\n\t\t/**\n\t\t * Sets the name of the resulting JavaScript class (though the compiler will rename it if it would otherwise conflict with other variables in scope).\n\t\t * If unspecified, will be inferred from `filename`\n\t\t */\n\t\tname?: string;\n\t\t/**\n\t\t * If `true`, tells the compiler to generate a custom element constructor instead of a regular Svelte component.\n\t\t *\n\t\t * You can also pass a function that receives `{ filename }` and returns a boolean.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tcustomElement?: boolean | ((options: { filename: string }) => boolean);\n\t\t/**\n\t\t * If `true`, getters and setters will be created for the component's props. If `false`, they will only be created for readonly exported values (i.e. those declared with `const`, `class` and `function`). If compiling with `customElement: true` this option defaults to `true`.\n\t\t *\n\t\t * @default false\n\t\t * @deprecated This will have no effect in runes mode\n\t\t */\n\t\taccessors?: boolean;\n\t\t/**\n\t\t * The namespace of the element; e.g., `\"html\"`, `\"svg\"`, `\"mathml\"`.\n\t\t *\n\t\t * @default 'html'\n\t\t */\n\t\tnamespace?: Namespace;\n\t\t/**\n\t\t * If `true`, tells the compiler that you promise not to mutate any objects.\n\t\t * This allows it to be less conservative about checking whether values have changed.\n\t\t *\n\t\t * @default false\n\t\t * @deprecated This will have no effect in runes mode\n\t\t */\n\t\timmutable?: boolean;\n\t\t/**\n\t\t * - `'injected'`: styles will be included in the `head` when using `render(...)`, and injected into the document (if not already present) when the component mounts. For components compiled as custom elements, styles are injected to the shadow root.\n\t\t * - `'external'`: the CSS will only be returned in the `css` field of the compilation result. Most Svelte bundler plugins will set this to `'external'` and use the CSS that is statically generated for better performance, as it will result in smaller JavaScript bundles and the output can be served as cacheable `.css` files.\n\t\t * This is always `'injected'` when compiling with `customElement` mode.\n\t\t *\n\t\t * You can also pass a function that receives `{ filename }` and returns either `'injected'` or `'external'`.\n\t\t */\n\t\tcss?: 'injected' | 'external' | ((options: { filename: string }) => 'injected' | 'external');\n\t\t/**\n\t\t * A function that takes a `{ hash, css, name, filename }` argument and returns the string that is used as a classname for scoped CSS.\n\t\t * It defaults to returning `svelte-${hash(filename ?? css)}`.\n\t\t *\n\t\t * @default undefined\n\t\t */\n\t\tcssHash?: CssHashGetter;\n\t\t/**\n\t\t * If `true`, your HTML comments will be preserved in the output. By default, they are stripped out.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tpreserveComments?: boolean;\n\t\t/**\n\t\t *  If `true`, whitespace inside and between elements is kept as you typed it, rather than removed or collapsed to a single space where possible.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tpreserveWhitespace?: boolean;\n\t\t/**\n\t\t * Which strategy to use when cloning DOM fragments:\n\t\t *\n\t\t * - `html` populates a `<template>` with `innerHTML` and clones it. This is faster, but cannot be used if your app's [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) includes [`require-trusted-types-for 'script'`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/require-trusted-types-for)\n\t\t * - `tree` creates the fragment one element at a time and _then_ clones it. This is slower, but works everywhere\n\t\t *\n\t\t * @default 'html'\n\t\t * @since 5.33\n\t\t */\n\t\tfragments?: 'html' | 'tree';\n\t\t/**\n\t\t * Set to `true` to force the compiler into runes mode, even if there are no indications of runes usage.\n\t\t * Set to `false` to force the compiler into ignoring runes, even if there are indications of runes usage.\n\t\t * Set to `undefined` (the default) to infer runes mode from the component code.\n\t\t * Is always `true` for JS/TS modules compiled with Svelte.\n\t\t * Will be `true` by default in Svelte 6.\n\t\t * Note that setting this to `true` in your `svelte.config.js` will force runes mode for your entire project, including components in `node_modules`,\n\t\t * which is likely not what you want. If you're using Vite, consider using [dynamicCompileOptions](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#dynamiccompileoptions) instead.\n\t\t * @default undefined\n\t\t */\n\t\trunes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined);\n\t\t/**\n\t\t *  If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`.\n\t\t *\n\t\t * @default true\n\t\t */\n\t\tdiscloseVersion?: boolean;\n\t\t/**\n\t\t * @deprecated Use these only as a temporary solution before migrating your code\n\t\t */\n\t\tcompatibility?: {\n\t\t\t/**\n\t\t\t * Applies a transformation so that the default export of Svelte files can still be instantiated the same way as in Svelte 4 —\n\t\t\t * as a class when compiling for the browser (as though using `createClassComponent(MyComponent, {...})` from `svelte/legacy`)\n\t\t\t * or as an object with a `.render(...)` method when compiling for the server\n\t\t\t * @default 5\n\t\t\t */\n\t\t\tcomponentApi?: 4 | 5;\n\t\t};\n\t\t/**\n\t\t * An initial sourcemap that will be merged into the final output sourcemap.\n\t\t * This is usually the preprocessor sourcemap.\n\t\t *\n\t\t * @default null\n\t\t */\n\t\tsourcemap?: object | string;\n\t\t/**\n\t\t * Used for your JavaScript sourcemap.\n\t\t *\n\t\t * @default null\n\t\t */\n\t\toutputFilename?: string;\n\t\t/**\n\t\t * Used for your CSS sourcemap.\n\t\t *\n\t\t * @default null\n\t\t */\n\t\tcssOutputFilename?: string;\n\t\t/**\n\t\t * If `true`, compiles components with hot reloading support.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\thmr?: boolean;\n\t\t/**\n\t\t * If `true`, returns the modern version of the AST.\n\t\t * Will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tmodernAst?: boolean;\n\t}\n\n\texport interface ModuleCompileOptions {\n\t\t/**\n\t\t * If `true`, causes extra code to be added that will perform runtime checks and provide debugging information during development.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tdev?: boolean;\n\t\t/**\n\t\t * If `\"client\"`, Svelte emits code designed to run in the browser.\n\t\t * If `\"server\"`, Svelte emits code suitable for server-side rendering.\n\t\t * If `false`, nothing is generated. Useful for tooling that is only interested in warnings.\n\t\t *\n\t\t * @default 'client'\n\t\t */\n\t\tgenerate?: 'client' | 'server' | false;\n\t\t/**\n\t\t * Used for debugging hints and sourcemaps. Your bundler plugin will set it automatically.\n\t\t */\n\t\tfilename?: string;\n\t\t/**\n\t\t * Used for ensuring filenames don't leak filesystem information. Your bundler plugin will set it automatically.\n\t\t * @default process.cwd() on node-like environments, undefined elsewhere\n\t\t */\n\t\trootDir?: string;\n\t\t/**\n\t\t * A function that gets a `Warning` as an argument and returns a boolean.\n\t\t * Use this to filter out warnings. Return `true` to keep the warning, `false` to discard it.\n\t\t */\n\t\twarningFilter?: (warning: Warning) => boolean;\n\t\t/**\n\t\t * Experimental options\n\t\t * @since 5.36\n\t\t */\n\t\texperimental?: {\n\t\t\t/**\n\t\t\t * Allow `await` keyword in deriveds, template expressions, and the top level of components\n\t\t\t * @since 5.36\n\t\t\t */\n\t\t\tasync?: boolean;\n\t\t};\n\t}\n\t/**\n\t * - `html`    — the default, for e.g. `<div>` or `<span>`\n\t * - `svg`     — for e.g. `<svg>` or `<g>`\n\t * - `mathml`  — for e.g. `<math>` or `<mrow>`\n\t */\n\ttype Namespace = 'html' | 'svg' | 'mathml';\n\n\texport namespace AST {\n\t\texport interface BaseNode {\n\t\t\ttype: string;\n\t\t\tstart: number;\n\t\t\tend: number;\n\t\t}\n\n\t\texport interface Fragment {\n\t\t\ttype: 'Fragment';\n\t\t\tnodes: Array<Text | Tag | ElementLike | Block | Comment>;\n\t\t}\n\n\t\texport interface Root extends BaseNode {\n\t\t\ttype: 'Root';\n\t\t\t/**\n\t\t\t * Inline options provided by `<svelte:options>` — these override options passed to `compile(...)`\n\t\t\t */\n\t\t\toptions: SvelteOptions | null;\n\t\t\tfragment: Fragment;\n\t\t\t/** The parsed `<style>` element, if exists */\n\t\t\tcss: AST.CSS.StyleSheet | null;\n\t\t\t/** The parsed `<script>` element, if exists */\n\t\t\tinstance: Script | null;\n\t\t\t/** The parsed `<script module>` element, if exists */\n\t\t\tmodule: Script | null;\n\t\t\t/** Comments found in <script> and {expressions} */\n\t\t\tcomments: JSComment[];\n\t\t}\n\n\t\texport interface SvelteOptions {\n\t\t\t// start/end info (needed for warnings and for our Prettier plugin)\n\t\t\tstart: number;\n\t\t\tend: number;\n\t\t\t// options\n\t\t\trunes?: boolean;\n\t\t\timmutable?: boolean;\n\t\t\taccessors?: boolean;\n\t\t\tpreserveWhitespace?: boolean;\n\t\t\tnamespace?: Namespace;\n\t\t\tcss?: 'injected';\n\t\t\tcustomElement?: {\n\t\t\t\ttag?: string;\n\t\t\t\tshadow?: 'open' | 'none' | ObjectExpression | undefined;\n\t\t\t\tprops?: Record<\n\t\t\t\t\tstring,\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute?: string;\n\t\t\t\t\t\treflect?: boolean;\n\t\t\t\t\t\ttype?: 'Array' | 'Boolean' | 'Number' | 'Object' | 'String';\n\t\t\t\t\t}\n\t\t\t\t>;\n\t\t\t\t/**\n\t\t\t\t * Is of type\n\t\t\t\t * ```ts\n\t\t\t\t * (ceClass: new () => HTMLElement) => new () => HTMLElement\n\t\t\t\t * ```\n\t\t\t\t */\n\t\t\t\textend?: ArrowFunctionExpression | Identifier;\n\t\t\t};\n\t\t\tattributes: Attribute[];\n\t\t}\n\n\t\t/** Static text */\n\t\texport interface Text extends BaseNode {\n\t\t\ttype: 'Text';\n\t\t\t/** Text with decoded HTML entities */\n\t\t\tdata: string;\n\t\t\t/** The original text, with undecoded HTML entities */\n\t\t\traw: string;\n\t\t}\n\n\t\t/** A (possibly reactive) template expression — `{...}` */\n\t\texport interface ExpressionTag extends BaseNode {\n\t\t\ttype: 'ExpressionTag';\n\t\t\texpression: Expression;\n\t\t}\n\n\t\t/** A (possibly reactive) HTML template expression — `{@html ...}` */\n\t\texport interface HtmlTag extends BaseNode {\n\t\t\ttype: 'HtmlTag';\n\t\t\texpression: Expression;\n\t\t}\n\n\t\t/** An HTML comment */\n\t\t// TODO rename to disambiguate\n\t\texport interface Comment extends BaseNode {\n\t\t\ttype: 'Comment';\n\t\t\t/** the contents of the comment */\n\t\t\tdata: string;\n\t\t}\n\n\t\t/** A `{@const ...}` tag */\n\t\texport interface ConstTag extends BaseNode {\n\t\t\ttype: 'ConstTag';\n\t\t\tdeclaration: VariableDeclaration & {\n\t\t\t\tdeclarations: [VariableDeclarator & { id: Pattern; init: Expression }];\n\t\t\t};\n\t\t}\n\n\t\t/** A `{@debug ...}` tag */\n\t\texport interface DebugTag extends BaseNode {\n\t\t\ttype: 'DebugTag';\n\t\t\tidentifiers: Identifier[];\n\t\t}\n\n\t\t/** A `{@render foo(...)} tag */\n\t\texport interface RenderTag extends BaseNode {\n\t\t\ttype: 'RenderTag';\n\t\t\texpression: SimpleCallExpression | (ChainExpression & { expression: SimpleCallExpression });\n\t\t}\n\n\t\t/** A `{@attach foo(...)} tag */\n\t\texport interface AttachTag extends BaseNode {\n\t\t\ttype: 'AttachTag';\n\t\t\texpression: Expression;\n\t\t}\n\n\t\t/** An `animate:` directive */\n\t\texport interface AnimateDirective extends BaseAttribute {\n\t\t\ttype: 'AnimateDirective';\n\t\t\t/** The 'x' in `animate:x` */\n\t\t\tname: string;\n\t\t\t/** The y in `animate:x={y}` */\n\t\t\texpression: null | Expression;\n\t\t}\n\n\t\t/** A `bind:` directive */\n\t\texport interface BindDirective extends BaseAttribute {\n\t\t\ttype: 'BindDirective';\n\t\t\t/** The 'x' in `bind:x` */\n\t\t\tname: string;\n\t\t\t/** The y in `bind:x={y}` */\n\t\t\texpression: Identifier | MemberExpression | SequenceExpression;\n\t\t}\n\n\t\t/** A `class:` directive */\n\t\texport interface ClassDirective extends BaseAttribute {\n\t\t\ttype: 'ClassDirective';\n\t\t\t/** The 'x' in `class:x` */\n\t\t\tname: 'class';\n\t\t\t/** The 'y' in `class:x={y}`, or the `x` in `class:x` */\n\t\t\texpression: Expression;\n\t\t}\n\n\t\t/** A `let:` directive */\n\t\texport interface LetDirective extends BaseAttribute {\n\t\t\ttype: 'LetDirective';\n\t\t\t/** The 'x' in `let:x` */\n\t\t\tname: string;\n\t\t\t/** The 'y' in `let:x={y}` */\n\t\t\texpression: null | Identifier | ArrayExpression | ObjectExpression;\n\t\t}\n\n\t\t/** An `on:` directive */\n\t\texport interface OnDirective extends BaseAttribute {\n\t\t\ttype: 'OnDirective';\n\t\t\t/** The 'x' in `on:x` */\n\t\t\tname: string;\n\t\t\t/** The 'y' in `on:x={y}` */\n\t\t\texpression: null | Expression;\n\t\t\tmodifiers: Array<\n\t\t\t\t| 'capture'\n\t\t\t\t| 'nonpassive'\n\t\t\t\t| 'once'\n\t\t\t\t| 'passive'\n\t\t\t\t| 'preventDefault'\n\t\t\t\t| 'self'\n\t\t\t\t| 'stopImmediatePropagation'\n\t\t\t\t| 'stopPropagation'\n\t\t\t\t| 'trusted'\n\t\t\t>;\n\t\t}\n\n\t\t/** A `style:` directive */\n\t\texport interface StyleDirective extends BaseAttribute {\n\t\t\ttype: 'StyleDirective';\n\t\t\t/** The 'x' in `style:x` */\n\t\t\tname: string;\n\t\t\t/** The 'y' in `style:x={y}` */\n\t\t\tvalue: true | ExpressionTag | Array<ExpressionTag | Text>;\n\t\t\tmodifiers: Array<'important'>;\n\t\t}\n\n\t\t// TODO have separate in/out/transition directives\n\t\t/** A `transition:`, `in:` or `out:` directive */\n\t\texport interface TransitionDirective extends BaseAttribute {\n\t\t\ttype: 'TransitionDirective';\n\t\t\t/** The 'x' in `transition:x` */\n\t\t\tname: string;\n\t\t\t/** The 'y' in `transition:x={y}` */\n\t\t\texpression: null | Expression;\n\t\t\tmodifiers: Array<'local' | 'global'>;\n\t\t\t/** True if this is a `transition:` or `in:` directive */\n\t\t\tintro: boolean;\n\t\t\t/** True if this is a `transition:` or `out:` directive */\n\t\t\toutro: boolean;\n\t\t}\n\n\t\t/** A `use:` directive */\n\t\texport interface UseDirective extends BaseAttribute {\n\t\t\ttype: 'UseDirective';\n\t\t\t/** The 'x' in `use:x` */\n\t\t\tname: string;\n\t\t\t/** The 'y' in `use:x={y}` */\n\t\t\texpression: null | Expression;\n\t\t}\n\n\t\texport interface BaseElement extends BaseNode {\n\t\t\tname: string;\n\t\t\tname_loc: SourceLocation;\n\t\t\tattributes: Array<Attribute | SpreadAttribute | Directive | AttachTag>;\n\t\t\tfragment: Fragment;\n\t\t}\n\n\t\texport interface Component extends BaseElement {\n\t\t\ttype: 'Component';\n\t\t}\n\n\t\texport interface TitleElement extends BaseElement {\n\t\t\ttype: 'TitleElement';\n\t\t\tname: 'title';\n\t\t}\n\n\t\texport interface SlotElement extends BaseElement {\n\t\t\ttype: 'SlotElement';\n\t\t\tname: 'slot';\n\t\t}\n\n\t\texport interface RegularElement extends BaseElement {\n\t\t\ttype: 'RegularElement';\n\t\t}\n\n\t\texport interface SvelteBody extends BaseElement {\n\t\t\ttype: 'SvelteBody';\n\t\t\tname: 'svelte:body';\n\t\t}\n\n\t\texport interface SvelteComponent extends BaseElement {\n\t\t\ttype: 'SvelteComponent';\n\t\t\tname: 'svelte:component';\n\t\t\texpression: Expression;\n\t\t}\n\n\t\texport interface SvelteDocument extends BaseElement {\n\t\t\ttype: 'SvelteDocument';\n\t\t\tname: 'svelte:document';\n\t\t}\n\n\t\texport interface SvelteElement extends BaseElement {\n\t\t\ttype: 'SvelteElement';\n\t\t\tname: 'svelte:element';\n\t\t\ttag: Expression;\n\t\t}\n\n\t\texport interface SvelteFragment extends BaseElement {\n\t\t\ttype: 'SvelteFragment';\n\t\t\tname: 'svelte:fragment';\n\t\t}\n\n\t\texport interface SvelteBoundary extends BaseElement {\n\t\t\ttype: 'SvelteBoundary';\n\t\t\tname: 'svelte:boundary';\n\t\t}\n\n\t\texport interface SvelteHead extends BaseElement {\n\t\t\ttype: 'SvelteHead';\n\t\t\tname: 'svelte:head';\n\t\t}\n\n\t\t/** This is only an intermediate representation while parsing, it doesn't exist in the final AST */\n\t\texport interface SvelteOptionsRaw extends BaseElement {\n\t\t\ttype: 'SvelteOptions';\n\t\t\tname: 'svelte:options';\n\t\t}\n\n\t\texport interface SvelteSelf extends BaseElement {\n\t\t\ttype: 'SvelteSelf';\n\t\t\tname: 'svelte:self';\n\t\t}\n\n\t\texport interface SvelteWindow extends BaseElement {\n\t\t\ttype: 'SvelteWindow';\n\t\t\tname: 'svelte:window';\n\t\t}\n\n\t\t/** An `{#each ...}` block */\n\t\texport interface EachBlock extends BaseNode {\n\t\t\ttype: 'EachBlock';\n\t\t\texpression: Expression;\n\t\t\t/** The `entry` in `{#each item as entry}`. `null` if `as` part is omitted */\n\t\t\tcontext: Pattern | null;\n\t\t\tbody: Fragment;\n\t\t\tfallback?: Fragment;\n\t\t\tindex?: string;\n\t\t\tkey?: Expression;\n\t\t}\n\n\t\t/** An `{#if ...}` block */\n\t\texport interface IfBlock extends BaseNode {\n\t\t\ttype: 'IfBlock';\n\t\t\telseif: boolean;\n\t\t\ttest: Expression;\n\t\t\tconsequent: Fragment;\n\t\t\talternate: Fragment | null;\n\t\t}\n\n\t\t/** An `{#await ...}` block */\n\t\texport interface AwaitBlock extends BaseNode {\n\t\t\ttype: 'AwaitBlock';\n\t\t\texpression: Expression;\n\t\t\t// TODO can/should we move these inside the ThenBlock and CatchBlock?\n\t\t\t/** The resolved value inside the `then` block */\n\t\t\tvalue: Pattern | null;\n\t\t\t/** The rejection reason inside the `catch` block */\n\t\t\terror: Pattern | null;\n\t\t\tpending: Fragment | null;\n\t\t\tthen: Fragment | null;\n\t\t\tcatch: Fragment | null;\n\t\t}\n\n\t\texport interface KeyBlock extends BaseNode {\n\t\t\ttype: 'KeyBlock';\n\t\t\texpression: Expression;\n\t\t\tfragment: Fragment;\n\t\t}\n\n\t\texport interface SnippetBlock extends BaseNode {\n\t\t\ttype: 'SnippetBlock';\n\t\t\texpression: Identifier;\n\t\t\tparameters: Pattern[];\n\t\t\ttypeParams?: string;\n\t\t\tbody: Fragment;\n\t\t}\n\n\t\texport interface BaseAttribute extends BaseNode {\n\t\t\tname: string;\n\t\t\tname_loc: SourceLocation | null;\n\t\t}\n\n\t\texport interface Attribute extends BaseAttribute {\n\t\t\ttype: 'Attribute';\n\t\t\t/**\n\t\t\t * Quoted/string values are represented by an array, even if they contain a single expression like `\"{x}\"`\n\t\t\t */\n\t\t\tvalue: true | ExpressionTag | Array<Text | ExpressionTag>;\n\t\t}\n\n\t\texport interface SpreadAttribute extends BaseNode {\n\t\t\ttype: 'SpreadAttribute';\n\t\t\texpression: Expression;\n\t\t}\n\n\t\texport interface Script extends BaseNode {\n\t\t\ttype: 'Script';\n\t\t\tcontext: 'default' | 'module';\n\t\t\tcontent: Program;\n\t\t\tattributes: Attribute[];\n\t\t}\n\n\t\texport interface JSComment {\n\t\t\ttype: 'Line' | 'Block';\n\t\t\tvalue: string;\n\t\t\tstart: number;\n\t\t\tend: number;\n\t\t\tloc: {\n\t\t\t\tstart: { line: number; column: number };\n\t\t\t\tend: { line: number; column: number };\n\t\t\t};\n\t\t}\n\n\t\texport type AttributeLike = Attribute | SpreadAttribute | Directive;\n\n\t\texport type Directive =\n\t\t\t| AST.AnimateDirective\n\t\t\t| AST.BindDirective\n\t\t\t| AST.ClassDirective\n\t\t\t| AST.LetDirective\n\t\t\t| AST.OnDirective\n\t\t\t| AST.StyleDirective\n\t\t\t| AST.TransitionDirective\n\t\t\t| AST.UseDirective;\n\n\t\texport type Block =\n\t\t\t| AST.EachBlock\n\t\t\t| AST.IfBlock\n\t\t\t| AST.AwaitBlock\n\t\t\t| AST.KeyBlock\n\t\t\t| AST.SnippetBlock;\n\n\t\texport type ElementLike =\n\t\t\t| AST.Component\n\t\t\t| AST.TitleElement\n\t\t\t| AST.SlotElement\n\t\t\t| AST.RegularElement\n\t\t\t| AST.SvelteBody\n\t\t\t| AST.SvelteBoundary\n\t\t\t| AST.SvelteComponent\n\t\t\t| AST.SvelteDocument\n\t\t\t| AST.SvelteElement\n\t\t\t| AST.SvelteFragment\n\t\t\t| AST.SvelteHead\n\t\t\t| AST.SvelteOptionsRaw\n\t\t\t| AST.SvelteSelf\n\t\t\t| AST.SvelteWindow\n\t\t\t| AST.SvelteBoundary;\n\n\t\texport type Tag =\n\t\t\t| AST.AttachTag\n\t\t\t| AST.ConstTag\n\t\t\t| AST.DebugTag\n\t\t\t| AST.ExpressionTag\n\t\t\t| AST.HtmlTag\n\t\t\t| AST.RenderTag;\n\n\t\texport type TemplateNode =\n\t\t\t| AST.Root\n\t\t\t| AST.Text\n\t\t\t| Tag\n\t\t\t| ElementLike\n\t\t\t| AST.Attribute\n\t\t\t| AST.SpreadAttribute\n\t\t\t| Directive\n\t\t\t| AST.AttachTag\n\t\t\t| AST.Comment\n\t\t\t| Block;\n\n\t\texport type SvelteNode = Node | TemplateNode | AST.Fragment | _CSS.Node | Script;\n\n\t\texport type { _CSS as CSS };\n\t}\n\t/**\n\t * The preprocess function provides convenient hooks for arbitrarily transforming component source code.\n\t * For example, it can be used to convert a `<style lang=\"sass\">` block into vanilla CSS.\n\t *\n\t * */\n\texport function preprocess(source: string, preprocessor: PreprocessorGroup | PreprocessorGroup[], options?: {\n\t\tfilename?: string;\n\t} | undefined): Promise<Processed>;\n\t/**\n\t * `print` converts a Svelte AST node back into Svelte source code.\n\t * It is primarily intended for tools that parse and transform components using the compiler’s modern AST representation.\n\t *\n\t * `print(ast)` requires an AST node produced by parse with modern: true, or any sub-node within that modern AST.\n\t * The result contains the generated source and a corresponding source map.\n\t * The output is valid Svelte, but formatting details such as whitespace or quoting may differ from the original.\n\t * */\n\texport function print(ast: AST.SvelteNode, options?: Options | undefined): {\n\t\tcode: string;\n\t\tmap: any;\n\t};\n\t/**\n\t * The current version, as set in package.json.\n\t * */\n\texport const VERSION: string;\n\t/**\n\t * Does a best-effort migration of Svelte code towards using runes, event attributes and render tags.\n\t * May throw an error if the code is too complex to migrate automatically.\n\t *\n\t * */\n\texport function migrate(source: string, { filename, use_ts }?: {\n\t\tfilename?: string;\n\t\tuse_ts?: boolean;\n\t} | undefined): {\n\t\tcode: string;\n\t};\n\ttype ICompileDiagnostic = {\n\t\tcode: string;\n\t\tmessage: string;\n\t\tstack?: string;\n\t\tfilename?: string;\n\t\tstart?: Location;\n\t\tend?: Location;\n\t\tposition?: [number, number];\n\t\tframe?: string;\n\t};\n\tnamespace _CSS {\n\t\texport interface BaseNode {\n\t\t\tstart: number;\n\t\t\tend: number;\n\t\t}\n\n\t\texport interface StyleSheetBase extends BaseNode {\n\t\t\tchildren: Array<Atrule | Rule>;\n\t\t}\n\n\t\texport interface StyleSheetFile extends StyleSheetBase {\n\t\t\ttype: 'StyleSheetFile';\n\t\t}\n\n\t\texport interface StyleSheet extends StyleSheetBase {\n\t\t\ttype: 'StyleSheet';\n\t\t\tattributes: any[]; // TODO\n\t\t\tcontent: {\n\t\t\t\tstart: number;\n\t\t\t\tend: number;\n\t\t\t\tstyles: string;\n\t\t\t\t/** Possible comment atop the style tag */\n\t\t\t\tcomment: AST.Comment | null;\n\t\t\t};\n\t\t}\n\n\t\texport interface Atrule extends BaseNode {\n\t\t\ttype: 'Atrule';\n\t\t\tname: string;\n\t\t\tprelude: string;\n\t\t\tblock: Block | null;\n\t\t}\n\n\t\texport interface Rule extends BaseNode {\n\t\t\ttype: 'Rule';\n\t\t\tprelude: SelectorList;\n\t\t\tblock: Block;\n\t\t}\n\n\t\t/**\n\t\t * A list of selectors, e.g. `a, b, c {}`\n\t\t */\n\t\texport interface SelectorList extends BaseNode {\n\t\t\ttype: 'SelectorList';\n\t\t\t/**\n\t\t\t * The `a`, `b` and `c` in `a, b, c {}`\n\t\t\t */\n\t\t\tchildren: ComplexSelector[];\n\t\t}\n\n\t\t/**\n\t\t * A complex selector, e.g. `a b c {}`\n\t\t */\n\t\texport interface ComplexSelector extends BaseNode {\n\t\t\ttype: 'ComplexSelector';\n\t\t\t/**\n\t\t\t * The `a`, `b` and `c` in `a b c {}`\n\t\t\t */\n\t\t\tchildren: RelativeSelector[];\n\t\t}\n\n\t\t/**\n\t\t * A relative selector, e.g the `a` and `> b` in `a > b {}`\n\t\t */\n\t\texport interface RelativeSelector extends BaseNode {\n\t\t\ttype: 'RelativeSelector';\n\t\t\t/**\n\t\t\t * In `a > b`, `> b` forms one relative selector, and `>` is the combinator. `null` for the first selector.\n\t\t\t */\n\t\t\tcombinator: null | Combinator;\n\t\t\t/**\n\t\t\t * The `b:is(...)` in `> b:is(...)`\n\t\t\t */\n\t\t\tselectors: SimpleSelector[];\n\t\t}\n\n\t\texport interface TypeSelector extends BaseNode {\n\t\t\ttype: 'TypeSelector';\n\t\t\tname: string;\n\t\t}\n\n\t\texport interface IdSelector extends BaseNode {\n\t\t\ttype: 'IdSelector';\n\t\t\tname: string;\n\t\t}\n\n\t\texport interface ClassSelector extends BaseNode {\n\t\t\ttype: 'ClassSelector';\n\t\t\tname: string;\n\t\t}\n\n\t\texport interface AttributeSelector extends BaseNode {\n\t\t\ttype: 'AttributeSelector';\n\t\t\tname: string;\n\t\t\tmatcher: string | null;\n\t\t\tvalue: string | null;\n\t\t\tflags: string | null;\n\t\t}\n\n\t\texport interface PseudoElementSelector extends BaseNode {\n\t\t\ttype: 'PseudoElementSelector';\n\t\t\tname: string;\n\t\t}\n\n\t\texport interface PseudoClassSelector extends BaseNode {\n\t\t\ttype: 'PseudoClassSelector';\n\t\t\tname: string;\n\t\t\targs: SelectorList | null;\n\t\t}\n\n\t\texport interface Percentage extends BaseNode {\n\t\t\ttype: 'Percentage';\n\t\t\tvalue: string;\n\t\t}\n\n\t\texport interface NestingSelector extends BaseNode {\n\t\t\ttype: 'NestingSelector';\n\t\t\tname: '&';\n\t\t}\n\n\t\texport interface Nth extends BaseNode {\n\t\t\ttype: 'Nth';\n\t\t\tvalue: string;\n\t\t}\n\n\t\texport type SimpleSelector =\n\t\t\t| TypeSelector\n\t\t\t| IdSelector\n\t\t\t| ClassSelector\n\t\t\t| AttributeSelector\n\t\t\t| PseudoElementSelector\n\t\t\t| PseudoClassSelector\n\t\t\t| Percentage\n\t\t\t| Nth\n\t\t\t| NestingSelector;\n\n\t\texport interface Combinator extends BaseNode {\n\t\t\ttype: 'Combinator';\n\t\t\tname: string;\n\t\t}\n\n\t\texport interface Block extends BaseNode {\n\t\t\ttype: 'Block';\n\t\t\tchildren: Array<Declaration | Rule | Atrule>;\n\t\t}\n\n\t\texport interface Declaration extends BaseNode {\n\t\t\ttype: 'Declaration';\n\t\t\tproperty: string;\n\t\t\tvalue: string;\n\t\t}\n\n\t\t// for zimmerframe\n\t\texport type Node =\n\t\t\t| StyleSheet\n\t\t\t| Rule\n\t\t\t| Atrule\n\t\t\t| SelectorList\n\t\t\t| Block\n\t\t\t| ComplexSelector\n\t\t\t| RelativeSelector\n\t\t\t| Combinator\n\t\t\t| SimpleSelector\n\t\t\t| Declaration;\n\t}\n\ttype Options = {\n\t\tgetLeadingComments?: NonNullable<Parameters<typeof ts>[0]>['getLeadingComments'] | undefined;\n\t\tgetTrailingComments?: NonNullable<Parameters<typeof ts>[0]>['getTrailingComments'] | undefined;\n\t};\n\n\texport {};\n}\n\ndeclare module 'svelte/easing' {\n\texport function linear(t: number): number;\n\n\texport function backInOut(t: number): number;\n\n\texport function backIn(t: number): number;\n\n\texport function backOut(t: number): number;\n\n\texport function bounceOut(t: number): number;\n\n\texport function bounceInOut(t: number): number;\n\n\texport function bounceIn(t: number): number;\n\n\texport function circInOut(t: number): number;\n\n\texport function circIn(t: number): number;\n\n\texport function circOut(t: number): number;\n\n\texport function cubicInOut(t: number): number;\n\n\texport function cubicIn(t: number): number;\n\n\texport function cubicOut(t: number): number;\n\n\texport function elasticInOut(t: number): number;\n\n\texport function elasticIn(t: number): number;\n\n\texport function elasticOut(t: number): number;\n\n\texport function expoInOut(t: number): number;\n\n\texport function expoIn(t: number): number;\n\n\texport function expoOut(t: number): number;\n\n\texport function quadInOut(t: number): number;\n\n\texport function quadIn(t: number): number;\n\n\texport function quadOut(t: number): number;\n\n\texport function quartInOut(t: number): number;\n\n\texport function quartIn(t: number): number;\n\n\texport function quartOut(t: number): number;\n\n\texport function quintInOut(t: number): number;\n\n\texport function quintIn(t: number): number;\n\n\texport function quintOut(t: number): number;\n\n\texport function sineInOut(t: number): number;\n\n\texport function sineIn(t: number): number;\n\n\texport function sineOut(t: number): number;\n\n\texport {};\n}\n\ndeclare module 'svelte/legacy' {\n\timport type { ComponentConstructorOptions, SvelteComponent, ComponentType, Component } from 'svelte';\n\t/**\n\t * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n\t *\n\t * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n\t *\n\t * */\n\texport function createClassComponent<Props extends Record<string, any>, Exports extends Record<string, any>, Events extends Record<string, any>, Slots extends Record<string, any>>(options: ComponentConstructorOptions<Props> & {\n\t\tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n\t}): SvelteComponent<Props, Events, Slots> & Exports;\n\t/**\n\t * Takes the component function and returns a Svelte 4 compatible component constructor.\n\t *\n\t * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n\t *\n\t * */\n\texport function asClassComponent<Props extends Record<string, any>, Exports extends Record<string, any>, Events extends Record<string, any>, Slots extends Record<string, any>>(component: SvelteComponent<Props, Events, Slots> | Component<Props>): ComponentType<SvelteComponent<Props, Events, Slots> & Exports>;\n\t/**\n\t * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n\t *\n\t * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n\t * */\n\texport function run(fn: () => void | (() => void)): void;\n\t/**\n\t * Function to mimic the multiple listeners available in svelte 4\n\t * @deprecated\n\t * */\n\texport function handlers(...handlers: EventListener[]): EventListener;\n\t/**\n\t * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n\t * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n\t */\n\texport function createBubbler(): (type: string) => (event: Event) => boolean;\n\t/**\n\t * Support using the component as both a class and function during the transition period\n\t */\n\texport type LegacyComponentType = {\n\t\tnew (o: ComponentConstructorOptions): SvelteComponent;\n\t\t(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;\n\t};\n\t/**\n\t * Substitute for the `trusted` event modifier\n\t * @deprecated\n\t * */\n\texport function trusted(fn: (event: Event, ...args: Array<unknown>) => void): (event: Event, ...args: unknown[]) => void;\n\t/**\n\t * Substitute for the `self` event modifier\n\t * @deprecated\n\t * */\n\texport function self(fn: (event: Event, ...args: Array<unknown>) => void): (event: Event, ...args: unknown[]) => void;\n\t/**\n\t * Substitute for the `stopPropagation` event modifier\n\t * @deprecated\n\t * */\n\texport function stopPropagation(fn: (event: Event, ...args: Array<unknown>) => void): (event: Event, ...args: unknown[]) => void;\n\t/**\n\t * Substitute for the `once` event modifier\n\t * @deprecated\n\t * */\n\texport function once(fn: (event: Event, ...args: Array<unknown>) => void): (event: Event, ...args: unknown[]) => void;\n\t/**\n\t * Substitute for the `stopImmediatePropagation` event modifier\n\t * @deprecated\n\t * */\n\texport function stopImmediatePropagation(fn: (event: Event, ...args: Array<unknown>) => void): (event: Event, ...args: unknown[]) => void;\n\t/**\n\t * Substitute for the `preventDefault` event modifier\n\t * @deprecated\n\t * */\n\texport function preventDefault(fn: (event: Event, ...args: Array<unknown>) => void): (event: Event, ...args: unknown[]) => void;\n\t/**\n\t * Substitute for the `passive` event modifier, implemented as an action\n\t * @deprecated\n\t * */\n\texport function passive(node: HTMLElement, [event, handler]: [event: string, handler: () => EventListener]): void;\n\t/**\n\t * Substitute for the `nonpassive` event modifier, implemented as an action\n\t * @deprecated\n\t * */\n\texport function nonpassive(node: HTMLElement, [event, handler]: [event: string, handler: () => EventListener]): void;\n\n\texport {};\n}\n\ndeclare module 'svelte/motion' {\n\timport type { MediaQuery } from 'svelte/reactivity';\n\texport interface SpringOptions {\n\t\tstiffness?: number;\n\t\tdamping?: number;\n\t\tprecision?: number;\n\t}\n\n\texport interface SpringUpdateOptions {\n\t\t/**\n\t\t * @deprecated Only use this for the spring store; does nothing when set on the Spring class\n\t\t */\n\t\thard?: any;\n\t\t/**\n\t\t * @deprecated Only use this for the spring store; does nothing when set on the Spring class\n\t\t */\n\t\tsoft?: string | number | boolean;\n\t\t/**\n\t\t * Only use this for the Spring class; does nothing when set on the spring store\n\t\t */\n\t\tinstant?: boolean;\n\t\t/**\n\t\t * Only use this for the Spring class; does nothing when set on the spring store\n\t\t */\n\t\tpreserveMomentum?: number;\n\t}\n\n\texport type Updater<T> = (target_value: T, value: T) => T;\n\n\texport interface TweenOptions<T> {\n\t\tdelay?: number;\n\t\tduration?: number | ((from: T, to: T) => number);\n\t\teasing?: (t: number) => number;\n\t\tinterpolate?: (a: T, b: T) => (t: number) => T;\n\t}\n\n\t// TODO we do declaration merging here in order to not have a breaking change (renaming the Spring interface)\n\t// this means both the Spring class and the Spring interface are merged into one with some things only\n\t// existing on one side. In Svelte 6, remove the type definition and move the jsdoc onto the class in spring.js\n\n\texport interface Spring<T> extends Readable<T> {\n\t\tset(new_value: T, opts?: SpringUpdateOptions): Promise<void>;\n\t\t/**\n\t\t * @deprecated Only exists on the legacy `spring` store, not the `Spring` class\n\t\t */\n\t\tupdate: (fn: Updater<T>, opts?: SpringUpdateOptions) => Promise<void>;\n\t\t/**\n\t\t * @deprecated Only exists on the legacy `spring` store, not the `Spring` class\n\t\t */\n\t\tsubscribe(fn: (value: T) => void): Unsubscriber;\n\t\tprecision: number;\n\t\tdamping: number;\n\t\tstiffness: number;\n\t}\n\n\t/**\n\t * A wrapper for a value that behaves in a spring-like fashion. Changes to `spring.target` will cause `spring.current` to\n\t * move towards it over time, taking account of the `spring.stiffness` and `spring.damping` parameters.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { Spring } from 'svelte/motion';\n\t *\n\t * \tconst spring = new Spring(0);\n\t * </script>\n\t *\n\t * <input type=\"range\" bind:value={spring.target} />\n\t * <input type=\"range\" bind:value={spring.current} disabled />\n\t * ```\n\t * @since 5.8.0\n\t */\n\texport class Spring<T> {\n\t\tconstructor(value: T, options?: SpringOptions);\n\n\t\t/**\n\t\t * Create a spring whose value is bound to the return value of `fn`. This must be called\n\t\t * inside an effect root (for example, during component initialisation).\n\t\t *\n\t\t * ```svelte\n\t\t * <script>\n\t\t * \timport { Spring } from 'svelte/motion';\n\t\t *\n\t\t * \tlet { number } = $props();\n\t\t *\n\t\t * \tconst spring = Spring.of(() => number);\n\t\t * </script>\n\t\t * ```\n\t\t */\n\t\tstatic of<U>(fn: () => U, options?: SpringOptions): Spring<U>;\n\n\t\t/**\n\t\t * Sets `spring.target` to `value` and returns a `Promise` that resolves if and when `spring.current` catches up to it.\n\t\t *\n\t\t * If `options.instant` is `true`, `spring.current` immediately matches `spring.target`.\n\t\t *\n\t\t * If `options.preserveMomentum` is provided, the spring will continue on its current trajectory for\n\t\t * the specified number of milliseconds. This is useful for things like 'fling' gestures.\n\t\t */\n\t\tset(value: T, options?: SpringUpdateOptions): Promise<void>;\n\n\t\tdamping: number;\n\t\tprecision: number;\n\t\tstiffness: number;\n\t\t/**\n\t\t * The end value of the spring.\n\t\t * This property only exists on the `Spring` class, not the legacy `spring` store.\n\t\t */\n\t\ttarget: T;\n\t\t/**\n\t\t * The current value of the spring.\n\t\t * This property only exists on the `Spring` class, not the legacy `spring` store.\n\t\t */\n\t\tget current(): T;\n\t}\n\n\texport interface Tweened<T> extends Readable<T> {\n\t\tset(value: T, opts?: TweenOptions<T>): Promise<void>;\n\t\tupdate(updater: Updater<T>, opts?: TweenOptions<T>): Promise<void>;\n\t}\n\t/** Callback to inform of a value updates. */\n\ttype Subscriber<T> = (value: T) => void;\n\n\t/** Unsubscribes from value updates. */\n\ttype Unsubscriber = () => void;\n\n\t/** Readable interface for subscribing. */\n\tinterface Readable<T> {\n\t\t/**\n\t\t * Subscribe on value changes.\n\t\t * @param run subscription callback\n\t\t * @param invalidate cleanup callback\n\t\t */\n\t\tsubscribe(this: void, run: Subscriber<T>, invalidate?: () => void): Unsubscriber;\n\t}\n\t/**\n\t * A [media query](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery) that matches if the user [prefers reduced motion](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion).\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { prefersReducedMotion } from 'svelte/motion';\n\t * \timport { fly } from 'svelte/transition';\n\t *\n\t * \tlet visible = $state(false);\n\t * </script>\n\t *\n\t * <button onclick={() => visible = !visible}>\n\t * \ttoggle\n\t * </button>\n\t *\n\t * {#if visible}\n\t * \t<p transition:fly={{ y: prefersReducedMotion.current ? 0 : 200 }}>\n\t * \t\tflies in, unless the user prefers reduced motion\n\t * \t</p>\n\t * {/if}\n\t * ```\n\t * @since 5.7.0\n\t */\n\texport const prefersReducedMotion: MediaQuery;\n\t/**\n\t * The spring function in Svelte creates a store whose value is animated, with a motion that simulates the behavior of a spring. This means when the value changes, instead of transitioning at a steady rate, it \"bounces\" like a spring would, depending on the physics parameters provided. This adds a level of realism to the transitions and can enhance the user experience.\n\t *\n\t * @deprecated Use [`Spring`](https://svelte.dev/docs/svelte/svelte-motion#Spring) instead\n\t * */\n\texport function spring<T = any>(value?: T | undefined, opts?: SpringOptions | undefined): Spring<T>;\n\t/**\n\t * A tweened store in Svelte is a special type of store that provides smooth transitions between state values over time.\n\t *\n\t * @deprecated Use [`Tween`](https://svelte.dev/docs/svelte/svelte-motion#Tween) instead\n\t * */\n\texport function tweened<T>(value?: T | undefined, defaults?: TweenOptions<T> | undefined): Tweened<T>;\n\t/**\n\t * A wrapper for a value that tweens smoothly to its target value. Changes to `tween.target` will cause `tween.current` to\n\t * move towards it over time, taking account of the `delay`, `duration` and `easing` options.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { Tween } from 'svelte/motion';\n\t *\n\t * \tconst tween = new Tween(0);\n\t * </script>\n\t *\n\t * <input type=\"range\" bind:value={tween.target} />\n\t * <input type=\"range\" bind:value={tween.current} disabled />\n\t * ```\n\t * @since 5.8.0\n\t */\n\texport class Tween<T> {\n\t\t/**\n\t\t * Create a tween whose value is bound to the return value of `fn`. This must be called\n\t\t * inside an effect root (for example, during component initialisation).\n\t\t *\n\t\t * ```svelte\n\t\t * <script>\n\t\t * \timport { Tween } from 'svelte/motion';\n\t\t *\n\t\t * \tlet { number } = $props();\n\t\t *\n\t\t * \tconst tween = Tween.of(() => number);\n\t\t * </script>\n\t\t * ```\n\t\t * \n\t\t */\n\t\tstatic of<U>(fn: () => U, options?: TweenOptions<U> | undefined): Tween<U>;\n\t\t\n\t\tconstructor(value: T, options?: TweenOptions<T>);\n\t\t/**\n\t\t * Sets `tween.target` to `value` and returns a `Promise` that resolves if and when `tween.current` catches up to it.\n\t\t *\n\t\t * If `options` are provided, they will override the tween's defaults.\n\t\t * */\n\t\tset(value: T, options?: TweenOptions<T> | undefined): Promise<void>;\n\t\tget current(): T;\n\t\tset target(v: T);\n\t\tget target(): T;\n\t\t#private;\n\t}\n\n\texport {};\n}\n\ndeclare module 'svelte/reactivity' {\n\t/**\n\t * A reactive version of the built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object.\n\t * Reading the date (whether with methods like `date.getTime()` or `date.toString()`, or via things like [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))\n\t * in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n\t * will cause it to be re-evaluated when the value of the date changes.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { SvelteDate } from 'svelte/reactivity';\n\t *\n\t * \tconst date = new SvelteDate();\n\t *\n\t * \tconst formatter = new Intl.DateTimeFormat(undefined, {\n\t * \t  hour: 'numeric',\n\t * \t  minute: 'numeric',\n\t * \t  second: 'numeric'\n\t * \t});\n\t *\n\t * \t$effect(() => {\n\t * \t\tconst interval = setInterval(() => {\n\t * \t\t\tdate.setTime(Date.now());\n\t * \t\t}, 1000);\n\t *\n\t * \t\treturn () => {\n\t * \t\t\tclearInterval(interval);\n\t * \t\t};\n\t * \t});\n\t * </script>\n\t *\n\t * <p>The time is {formatter.format(date)}</p>\n\t * ```\n\t */\n\texport class SvelteDate extends Date {\n\t\t\n\t\tconstructor(...params: any[]);\n\t\t#private;\n\t}\n\t/**\n\t * A reactive version of the built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) object.\n\t * Reading contents of the set (by iterating, or by reading `set.size` or calling `set.has(...)` as in the [example](https://svelte.dev/playground/53438b51194b4882bcc18cddf9f96f15) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n\t * will cause it to be re-evaluated as necessary when the set is updated.\n\t *\n\t * Note that values in a reactive set are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { SvelteSet } from 'svelte/reactivity';\n\t * \tlet monkeys = new SvelteSet();\n\t *\n\t * \tfunction toggle(monkey) {\n\t * \t\tif (monkeys.has(monkey)) {\n\t * \t\t\tmonkeys.delete(monkey);\n\t * \t\t} else {\n\t * \t\t\tmonkeys.add(monkey);\n\t * \t\t}\n\t * \t}\n\t * </script>\n\t *\n\t * {#each ['🙈', '🙉', '🙊'] as monkey}\n\t * \t<button onclick={() => toggle(monkey)}>{monkey}</button>\n\t * {/each}\n\t *\n\t * <button onclick={() => monkeys.clear()}>clear</button>\n\t *\n\t * {#if monkeys.has('🙈')}<p>see no evil</p>{/if}\n\t * {#if monkeys.has('🙉')}<p>hear no evil</p>{/if}\n\t * {#if monkeys.has('🙊')}<p>speak no evil</p>{/if}\n\t * ```\n\t *\n\t * \n\t */\n\texport class SvelteSet<T> extends Set<T> {\n\t\t\n\t\tconstructor(value?: Iterable<T> | null | undefined);\n\t\t\n\t\tadd(value: T): this;\n\t\t#private;\n\t}\n\t/**\n\t * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.\n\t * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n\t * will cause it to be re-evaluated as necessary when the map is updated.\n\t *\n\t * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { SvelteMap } from 'svelte/reactivity';\n\t * \timport { result } from './game.js';\n\t *\n\t * \tlet board = new SvelteMap();\n\t * \tlet player = $state('x');\n\t * \tlet winner = $derived(result(board));\n\t *\n\t * \tfunction reset() {\n\t * \t\tplayer = 'x';\n\t * \t\tboard.clear();\n\t * \t}\n\t * </script>\n\t *\n\t * <div class=\"board\">\n\t * \t{#each Array(9), i}\n\t * \t\t<button\n\t * \t\t\tdisabled={board.has(i) || winner}\n\t * \t\t\tonclick={() => {\n\t * \t\t\t\tboard.set(i, player);\n\t * \t\t\t\tplayer = player === 'x' ? 'o' : 'x';\n\t * \t\t\t}}\n\t * \t\t>{board.get(i)}</button>\n\t * \t{/each}\n\t * </div>\n\t *\n\t * {#if winner}\n\t * \t<p>{winner} wins!</p>\n\t * \t<button onclick={reset}>reset</button>\n\t * {:else}\n\t * \t<p>{player} is next</p>\n\t * {/if}\n\t * ```\n\t *\n\t * \n\t */\n\texport class SvelteMap<K, V> extends Map<K, V> {\n\t\t\n\t\tconstructor(value?: Iterable<readonly [K, V]> | null | undefined);\n\t\t\n\t\tset(key: K, value: V): this;\n\t\t#private;\n\t}\n\t/**\n\t * A reactive version of the built-in [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) object.\n\t * Reading properties of the URL (such as `url.href` or `url.pathname`) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n\t * will cause it to be re-evaluated as necessary when the URL changes.\n\t *\n\t * The `searchParams` property is an instance of [SvelteURLSearchParams](https://svelte.dev/docs/svelte/svelte-reactivity#SvelteURLSearchParams).\n\t *\n\t * [Example](https://svelte.dev/playground/5a694758901b448c83dc40dc31c71f2a):\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { SvelteURL } from 'svelte/reactivity';\n\t *\n\t * \tconst url = new SvelteURL('https://example.com/path');\n\t * </script>\n\t *\n\t * <!-- changes to these... -->\n\t * <input bind:value={url.protocol} />\n\t * <input bind:value={url.hostname} />\n\t * <input bind:value={url.pathname} />\n\t *\n\t * <hr />\n\t *\n\t * <!-- will update `href` and vice versa -->\n\t * <input bind:value={url.href} size=\"65\" />\n\t * ```\n\t */\n\texport class SvelteURL extends URL {\n\t\tget searchParams(): SvelteURLSearchParams;\n\t\t#private;\n\t}\n\tconst REPLACE: unique symbol;\n\t/**\n\t * A reactive version of the built-in [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object.\n\t * Reading its contents (by iterating, or by calling `params.get(...)` or `params.getAll(...)` as in the [example](https://svelte.dev/playground/b3926c86c5384bab9f2cf993bc08c1c8) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n\t * will cause it to be re-evaluated as necessary when the params are updated.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { SvelteURLSearchParams } from 'svelte/reactivity';\n\t *\n\t * \tconst params = new SvelteURLSearchParams('message=hello');\n\t *\n\t * \tlet key = $state('key');\n\t * \tlet value = $state('value');\n\t * </script>\n\t *\n\t * <input bind:value={key} />\n\t * <input bind:value={value} />\n\t * <button onclick={() => params.append(key, value)}>append</button>\n\t *\n\t * <p>?{params.toString()}</p>\n\t *\n\t * {#each params as [key, value]}\n\t * \t<p>{key}: {value}</p>\n\t * {/each}\n\t * ```\n\t */\n\texport class SvelteURLSearchParams extends URLSearchParams {\n\t\t\n\t\t[REPLACE](params: URLSearchParams): void;\n\t\t#private;\n\t}\n\t/**\n\t * Creates a media query and provides a `current` property that reflects whether or not it matches.\n\t *\n\t * Use it carefully — during server-side rendering, there is no way to know what the correct value should be, potentially causing content to change upon hydration.\n\t * If you can use the media query in CSS to achieve the same effect, do that.\n\t *\n\t * ```svelte\n\t * <script>\n\t * \timport { MediaQuery } from 'svelte/reactivity';\n\t *\n\t * \tconst large = new MediaQuery('min-width: 800px');\n\t * </script>\n\t *\n\t * <h1>{large.current ? 'large screen' : 'small screen'}</h1>\n\t * ```\n\t * @extends {ReactiveValue<boolean>}\n\t * @since 5.7.0\n\t */\n\texport class MediaQuery extends ReactiveValue<boolean> {\n\t\t/**\n\t\t * @param query A media query string\n\t\t * @param fallback Fallback value for the server\n\t\t */\n\t\tconstructor(query: string, fallback?: boolean | undefined);\n\t}\n\t/**\n\t * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n\t * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n\t *\n\t * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n\t * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n\t *\n\t * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n\t *\n\t * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n\t * are active, and the returned teardown function will only be called when all effects are destroyed.\n\t *\n\t * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n\t *\n\t * ```js\n\t * import { createSubscriber } from 'svelte/reactivity';\n\t * import { on } from 'svelte/events';\n\t *\n\t * export class MediaQuery {\n\t * \t#query;\n\t * \t#subscribe;\n\t *\n\t * \tconstructor(query) {\n\t * \t\tthis.#query = window.matchMedia(`(${query})`);\n\t *\n\t * \t\tthis.#subscribe = createSubscriber((update) => {\n\t * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n\t * \t\t\tconst off = on(this.#query, 'change', update);\n\t *\n\t * \t\t\t// stop listening when all the effects are destroyed\n\t * \t\t\treturn () => off();\n\t * \t\t});\n\t * \t}\n\t *\n\t * \tget current() {\n\t * \t\t// This makes the getter reactive, if read in an effect\n\t * \t\tthis.#subscribe();\n\t *\n\t * \t\t// Return the current state of the query, whether or not we're in an effect\n\t * \t\treturn this.#query.matches;\n\t * \t}\n\t * }\n\t * ```\n\t * @since 5.7.0\n\t */\n\texport function createSubscriber(start: (update: () => void) => (() => void) | void): () => void;\n\tclass ReactiveValue<T> {\n\t\t\n\t\tconstructor(fn: () => T, onsubscribe: (update: () => void) => void);\n\t\tget current(): T;\n\t\t#private;\n\t}\n\n\texport {};\n}\n\ndeclare module 'svelte/reactivity/window' {\n\t/**\n\t * `scrollX.current` is a reactive view of `window.scrollX`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const scrollX: ReactiveValue<number | undefined>;\n\t/**\n\t * `scrollY.current` is a reactive view of `window.scrollY`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const scrollY: ReactiveValue<number | undefined>;\n\t/**\n\t * `innerWidth.current` is a reactive view of `window.innerWidth`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const innerWidth: ReactiveValue<number | undefined>;\n\t/**\n\t * `innerHeight.current` is a reactive view of `window.innerHeight`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const innerHeight: ReactiveValue<number | undefined>;\n\t/**\n\t * `outerWidth.current` is a reactive view of `window.outerWidth`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const outerWidth: ReactiveValue<number | undefined>;\n\t/**\n\t * `outerHeight.current` is a reactive view of `window.outerHeight`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const outerHeight: ReactiveValue<number | undefined>;\n\t/**\n\t * `screenLeft.current` is a reactive view of `window.screenLeft`. It is updated inside a `requestAnimationFrame` callback. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const screenLeft: ReactiveValue<number | undefined>;\n\t/**\n\t * `screenTop.current` is a reactive view of `window.screenTop`. It is updated inside a `requestAnimationFrame` callback. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const screenTop: ReactiveValue<number | undefined>;\n\t/**\n\t * `online.current` is a reactive view of `navigator.onLine`. On the server it is `undefined`.\n\t * @since 5.11.0\n\t */\n\texport const online: ReactiveValue<boolean | undefined>;\n\t/**\n\t * `devicePixelRatio.current` is a reactive view of `window.devicePixelRatio`. On the server it is `undefined`.\n\t * Note that behaviour differs between browsers — on Chrome it will respond to the current zoom level,\n\t * on Firefox and Safari it won't.\n\t * @since 5.11.0\n\t */\n\texport const devicePixelRatio: {\n\t\tget current(): number | undefined;\n\t};\n\tclass ReactiveValue<T> {\n\t\t\n\t\tconstructor(fn: () => T, onsubscribe: (update: () => void) => void);\n\t\tget current(): T;\n\t\t#private;\n\t}\n\n\texport {};\n}\n\ndeclare module 'svelte/server' {\n\timport type { ComponentProps, Component, SvelteComponent, ComponentType } from 'svelte';\n\t/**\n\t * Only available on the server and when compiling with the `server` option.\n\t * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.\n\t */\n\texport function render<\n\t\tComp extends SvelteComponent<any> | Component<any>,\n\t\tProps extends ComponentProps<Comp> = ComponentProps<Comp>\n\t>(\n\t\t...args: {} extends Props\n\t\t\t? [\n\t\t\t\t\tcomponent: Comp extends SvelteComponent<any> ? ComponentType<Comp> : Comp,\n\t\t\t\t\toptions?: {\n\t\t\t\t\t\tprops?: Omit<Props, '$$slots' | '$$events'>;\n\t\t\t\t\t\tcontext?: Map<any, any>;\n\t\t\t\t\t\tidPrefix?: string;\n\t\t\t\t\t\tcsp?: Csp;\n\t\t\t\t\t\ttransformError?: (error: unknown) => unknown | Promise<unknown>;\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t: [\n\t\t\t\t\tcomponent: Comp extends SvelteComponent<any> ? ComponentType<Comp> : Comp,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tprops: Omit<Props, '$$slots' | '$$events'>;\n\t\t\t\t\t\tcontext?: Map<any, any>;\n\t\t\t\t\t\tidPrefix?: string;\n\t\t\t\t\t\tcsp?: Csp;\n\t\t\t\t\t\ttransformError?: (error: unknown) => unknown | Promise<unknown>;\n\t\t\t\t\t}\n\t\t\t\t]\n\t): RenderOutput;\n\ttype Csp = { nonce?: string; hash?: boolean };\n\n\ttype Sha256Source = `sha256-${string}`;\n\n\tinterface SyncRenderOutput {\n\t\t/** HTML that goes into the `<head>` */\n\t\thead: string;\n\t\t/** @deprecated use `body` instead */\n\t\thtml: string;\n\t\t/** HTML that goes somewhere into the `<body>` */\n\t\tbody: string;\n\t\thashes: {\n\t\t\tscript: Sha256Source[];\n\t\t};\n\t}\n\n\ttype RenderOutput = SyncRenderOutput & PromiseLike<SyncRenderOutput>;\n\n\texport {};\n}\n\ndeclare module 'svelte/store' {\n\t/** Callback to inform of a value updates. */\n\texport type Subscriber<T> = (value: T) => void;\n\n\t/** Unsubscribes from value updates. */\n\texport type Unsubscriber = () => void;\n\n\t/** Callback to update a value. */\n\texport type Updater<T> = (value: T) => T;\n\n\t/**\n\t * Start and stop notification callbacks.\n\t * This function is called when the first subscriber subscribes.\n\t *\n\t * @param set Function that sets the value of the store.\n\t * @param update Function that sets the value of the store after passing the current value to the update function.\n\t * @returns Optionally, a cleanup function that is called when the last remaining\n\t * subscriber unsubscribes.\n\t */\n\texport type StartStopNotifier<T> = (\n\t\tset: (value: T) => void,\n\t\tupdate: (fn: Updater<T>) => void\n\t) => void | (() => void);\n\n\t/** Readable interface for subscribing. */\n\texport interface Readable<T> {\n\t\t/**\n\t\t * Subscribe on value changes.\n\t\t * @param run subscription callback\n\t\t * @param invalidate cleanup callback\n\t\t */\n\t\tsubscribe(this: void, run: Subscriber<T>, invalidate?: () => void): Unsubscriber;\n\t}\n\n\t/** Writable interface for both updating and subscribing. */\n\texport interface Writable<T> extends Readable<T> {\n\t\t/**\n\t\t * Set value and inform subscribers.\n\t\t * @param value to set\n\t\t */\n\t\tset(this: void, value: T): void;\n\n\t\t/**\n\t\t * Update value using callback and inform subscribers.\n\t\t * @param updater callback\n\t\t */\n\t\tupdate(this: void, updater: Updater<T>): void;\n\t}\n\texport function toStore<V>(get: () => V, set: (v: V) => void): Writable<V>;\n\n\texport function toStore<V>(get: () => V): Readable<V>;\n\n\texport function fromStore<V>(store: Writable<V>): {\n\t\tcurrent: V;\n\t};\n\n\texport function fromStore<V>(store: Readable<V>): {\n\t\treadonly current: V;\n\t};\n\t/**\n\t * Creates a `Readable` store that allows reading by subscription.\n\t *\n\t * @param value initial value\n\t * */\n\texport function readable<T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined): Readable<T>;\n\t/**\n\t * Create a `Writable` store that allows both updating and reading by subscription.\n\t *\n\t * @param value initial value\n\t * */\n\texport function writable<T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined): Writable<T>;\n\t/**\n\t * Derived value store by synchronizing one or more readable stores and\n\t * applying an aggregation function over its input values.\n\t *\n\t * */\n\texport function derived<S extends Stores, T>(stores: S, fn: (values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void, initial_value?: T | undefined): Readable<T>;\n\t/**\n\t * Derived value store by synchronizing one or more readable stores and\n\t * applying an aggregation function over its input values.\n\t *\n\t * */\n\texport function derived<S extends Stores, T>(stores: S, fn: (values: StoresValues<S>) => T, initial_value?: T | undefined): Readable<T>;\n\t/**\n\t * Takes a store and returns a new one derived from the old one that is readable.\n\t *\n\t * @param store  - store to make readonly\n\t * */\n\texport function readonly<T>(store: Readable<T>): Readable<T>;\n\t/**\n\t * Get the current value from a store by subscribing and immediately unsubscribing.\n\t *\n\t * */\n\texport function get<T>(store: Readable<T>): T;\n\t/** One or more `Readable`s. */\n\ttype Stores = Readable<any> | [Readable<any>, ...Array<Readable<any>>] | Array<Readable<any>>;\n\n\t/** One or more values from `Readable` stores. */\n\ttype StoresValues<T> =\n\t\tT extends Readable<infer U> ? U : { [K in keyof T]: T[K] extends Readable<infer U> ? U : never };\n\n\texport {};\n}\n\ndeclare module 'svelte/transition' {\n\texport type EasingFunction = (t: number) => number;\n\n\texport interface TransitionConfig {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: EasingFunction;\n\t\tcss?: (t: number, u: number) => string;\n\t\ttick?: (t: number, u: number) => void;\n\t}\n\n\texport interface BlurParams {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: EasingFunction;\n\t\tamount?: number | string;\n\t\topacity?: number;\n\t}\n\n\texport interface FadeParams {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: EasingFunction;\n\t}\n\n\texport interface FlyParams {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: EasingFunction;\n\t\tx?: number | string;\n\t\ty?: number | string;\n\t\topacity?: number;\n\t}\n\n\texport interface SlideParams {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: EasingFunction;\n\t\taxis?: 'x' | 'y';\n\t}\n\n\texport interface ScaleParams {\n\t\tdelay?: number;\n\t\tduration?: number;\n\t\teasing?: EasingFunction;\n\t\tstart?: number;\n\t\topacity?: number;\n\t}\n\n\texport interface DrawParams {\n\t\tdelay?: number;\n\t\tspeed?: number;\n\t\tduration?: number | ((len: number) => number);\n\t\teasing?: EasingFunction;\n\t}\n\n\texport interface CrossfadeParams {\n\t\tdelay?: number;\n\t\tduration?: number | ((len: number) => number);\n\t\teasing?: EasingFunction;\n\t}\n\t/**\n\t * Animates a `blur` filter alongside an element's opacity.\n\t *\n\t * */\n\texport function blur(node: Element, { delay, duration, easing, amount, opacity }?: BlurParams | undefined): TransitionConfig;\n\t/**\n\t * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n\t *\n\t * */\n\texport function fade(node: Element, { delay, duration, easing }?: FadeParams | undefined): TransitionConfig;\n\t/**\n\t * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n\t *\n\t * */\n\texport function fly(node: Element, { delay, duration, easing, x, y, opacity }?: FlyParams | undefined): TransitionConfig;\n\t/**\n\t * Slides an element in and out.\n\t *\n\t * */\n\texport function slide(node: Element, { delay, duration, easing, axis }?: SlideParams | undefined): TransitionConfig;\n\t/**\n\t * Animates the opacity and scale of an element. `in` transitions animate from the provided values, passed as parameters, to an element's current (default) values. `out` transitions animate from an element's default values to the provided values.\n\t *\n\t * */\n\texport function scale(node: Element, { delay, duration, easing, start, opacity }?: ScaleParams | undefined): TransitionConfig;\n\t/**\n\t * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n\t *\n\t * */\n\texport function draw(node: SVGElement & {\n\t\tgetTotalLength(): number;\n\t}, { delay, speed, duration, easing }?: DrawParams | undefined): TransitionConfig;\n\t/**\n\t * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs/svelte/transition) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n\t *\n\t * */\n\texport function crossfade({ fallback, ...defaults }: CrossfadeParams & {\n\t\tfallback?: (node: Element, params: CrossfadeParams, intro: boolean) => TransitionConfig;\n\t}): [(node: any, params: CrossfadeParams & {\n\t\tkey: any;\n\t}) => () => TransitionConfig, (node: any, params: CrossfadeParams & {\n\t\tkey: any;\n\t}) => () => TransitionConfig];\n\n\texport {};\n}\n\ndeclare module 'svelte/events' {\n\t// Once https://github.com/microsoft/TypeScript/issues/59980 is fixed we can put these overloads into the JSDoc comments of the `on` function\n\n\t/**\n\t * Attaches an event handler to the window and returns a function that removes the handler. Using this\n\t * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n\t * (with attributes like `onclick`), which use event delegation for performance reasons\n\t */\n\texport function on<Type extends keyof WindowEventMap>(\n\t\twindow: Window,\n\t\ttype: Type,\n\t\thandler: (this: Window, event: WindowEventMap[Type] & { currentTarget: Window }) => any,\n\t\toptions?: AddEventListenerOptions | undefined\n\t): () => void;\n\t/**\n\t * Attaches an event handler to the document and returns a function that removes the handler. Using this\n\t * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n\t * (with attributes like `onclick`), which use event delegation for performance reasons\n\t */\n\texport function on<Type extends keyof DocumentEventMap>(\n\t\tdocument: Document,\n\t\ttype: Type,\n\t\thandler: (this: Document, event: DocumentEventMap[Type] & { currentTarget: Document }) => any,\n\t\toptions?: AddEventListenerOptions | undefined\n\t): () => void;\n\t/**\n\t * Attaches an event handler to an element and returns a function that removes the handler. Using this\n\t * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n\t * (with attributes like `onclick`), which use event delegation for performance reasons\n\t */\n\texport function on<Element extends HTMLElement, Type extends keyof HTMLElementEventMap>(\n\t\telement: Element,\n\t\ttype: Type,\n\t\thandler: (this: Element, event: HTMLElementEventMap[Type] & { currentTarget: Element }) => any,\n\t\toptions?: AddEventListenerOptions | undefined\n\t): () => void;\n\t/**\n\t * Attaches an event handler to an element and returns a function that removes the handler. Using this\n\t * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n\t * (with attributes like `onclick`), which use event delegation for performance reasons\n\t */\n\texport function on<Element extends MediaQueryList, Type extends keyof MediaQueryListEventMap>(\n\t\telement: Element,\n\t\ttype: Type,\n\t\thandler: (this: Element, event: MediaQueryListEventMap[Type] & { currentTarget: Element }) => any,\n\t\toptions?: AddEventListenerOptions | undefined\n\t): () => void;\n\t/**\n\t * Attaches an event handler to an element and returns a function that removes the handler. Using this\n\t * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n\t * (with attributes like `onclick`), which use event delegation for performance reasons\n\t */\n\texport function on(\n\t\telement: EventTarget,\n\t\ttype: string,\n\t\thandler: EventListener,\n\t\toptions?: AddEventListenerOptions | undefined\n\t): () => void;\n\n\texport {};\n}\n\ndeclare module 'svelte/types/compiler/preprocess' {\n\t/** @deprecated import this from 'svelte/preprocess' instead */\n\texport type MarkupPreprocessor = MarkupPreprocessor_1;\n\t/** @deprecated import this from 'svelte/preprocess' instead */\n\texport type Preprocessor = Preprocessor_1;\n\t/** @deprecated import this from 'svelte/preprocess' instead */\n\texport type PreprocessorGroup = PreprocessorGroup_1;\n\t/** @deprecated import this from 'svelte/preprocess' instead */\n\texport type Processed = Processed_1;\n\t/** @deprecated import this from 'svelte/preprocess' instead */\n\texport type SveltePreprocessor<PreprocessorType extends keyof PreprocessorGroup_1, Options = any> = SveltePreprocessor_1<\n\t\tPreprocessorType,\n\t\tOptions\n\t>;\n\t/**\n\t * The result of a preprocessor run. If the preprocessor does not return a result, it is assumed that the code is unchanged.\n\t */\n\tinterface Processed_1 {\n\t\t/**\n\t\t * The new code\n\t\t */\n\t\tcode: string;\n\t\t/**\n\t\t * A source map mapping back to the original code\n\t\t */\n\t\tmap?: string | object; // we are opaque with the type here to avoid dependency on the remapping module for our public types.\n\t\t/**\n\t\t * A list of additional files to watch for changes\n\t\t */\n\t\tdependencies?: string[];\n\t\t/**\n\t\t * Only for script/style preprocessors: The updated attributes to set on the tag. If undefined, attributes stay unchanged.\n\t\t */\n\t\tattributes?: Record<string, string | boolean>;\n\t\ttoString?: () => string;\n\t}\n\n\t/**\n\t * A markup preprocessor that takes a string of code and returns a processed version.\n\t */\n\ttype MarkupPreprocessor_1 = (options: {\n\t\t/**\n\t\t * The whole Svelte file content\n\t\t */\n\t\tcontent: string;\n\t\t/**\n\t\t * The filename of the Svelte file\n\t\t */\n\t\tfilename?: string;\n\t}) => Processed_1 | void | Promise<Processed_1 | void>;\n\n\t/**\n\t * A script/style preprocessor that takes a string of code and returns a processed version.\n\t */\n\ttype Preprocessor_1 = (options: {\n\t\t/**\n\t\t * The script/style tag content\n\t\t */\n\t\tcontent: string;\n\t\t/**\n\t\t * The attributes on the script/style tag\n\t\t */\n\t\tattributes: Record<string, string | boolean>;\n\t\t/**\n\t\t * The whole Svelte file content\n\t\t */\n\t\tmarkup: string;\n\t\t/**\n\t\t * The filename of the Svelte file\n\t\t */\n\t\tfilename?: string;\n\t}) => Processed_1 | void | Promise<Processed_1 | void>;\n\n\t/**\n\t * A preprocessor group is a set of preprocessors that are applied to a Svelte file.\n\t */\n\tinterface PreprocessorGroup_1 {\n\t\t/** Name of the preprocessor. Will be a required option in the next major version */\n\t\tname?: string;\n\t\tmarkup?: MarkupPreprocessor_1;\n\t\tstyle?: Preprocessor_1;\n\t\tscript?: Preprocessor_1;\n\t}\n\n\t/**\n\t * @description Utility type to extract the type of a preprocessor from a preprocessor group\n\t * @deprecated Create this utility type yourself instead\n\t */\n\tinterface SveltePreprocessor_1<\n\t\tPreprocessorType extends keyof PreprocessorGroup_1,\n\t\tOptions = any\n\t> {\n\t\t(options?: Options): Required<Pick<PreprocessorGroup_1, PreprocessorType>>;\n\t}\n\n\texport {};\n}\n\ndeclare module 'svelte/types/compiler/interfaces' {\n\timport type { Location } from 'locate-character';\n\t/** @deprecated import this from 'svelte' instead */\n\texport type CompileOptions = CompileOptions_1;\n\t/** @deprecated import this from 'svelte' instead */\n\texport type Warning = Warning_1;\n\tinterface Warning_1 extends ICompileDiagnostic {}\n\n\ttype CssHashGetter = (args: {\n\t\tname: string;\n\t\tfilename: string;\n\t\tcss: string;\n\t\thash: (input: string) => string;\n\t}) => string;\n\n\tinterface CompileOptions_1 extends ModuleCompileOptions {\n\t\t/**\n\t\t * Sets the name of the resulting JavaScript class (though the compiler will rename it if it would otherwise conflict with other variables in scope).\n\t\t * If unspecified, will be inferred from `filename`\n\t\t */\n\t\tname?: string;\n\t\t/**\n\t\t * If `true`, tells the compiler to generate a custom element constructor instead of a regular Svelte component.\n\t\t *\n\t\t * You can also pass a function that receives `{ filename }` and returns a boolean.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tcustomElement?: boolean | ((options: { filename: string }) => boolean);\n\t\t/**\n\t\t * If `true`, getters and setters will be created for the component's props. If `false`, they will only be created for readonly exported values (i.e. those declared with `const`, `class` and `function`). If compiling with `customElement: true` this option defaults to `true`.\n\t\t *\n\t\t * @default false\n\t\t * @deprecated This will have no effect in runes mode\n\t\t */\n\t\taccessors?: boolean;\n\t\t/**\n\t\t * The namespace of the element; e.g., `\"html\"`, `\"svg\"`, `\"mathml\"`.\n\t\t *\n\t\t * @default 'html'\n\t\t */\n\t\tnamespace?: Namespace;\n\t\t/**\n\t\t * If `true`, tells the compiler that you promise not to mutate any objects.\n\t\t * This allows it to be less conservative about checking whether values have changed.\n\t\t *\n\t\t * @default false\n\t\t * @deprecated This will have no effect in runes mode\n\t\t */\n\t\timmutable?: boolean;\n\t\t/**\n\t\t * - `'injected'`: styles will be included in the `head` when using `render(...)`, and injected into the document (if not already present) when the component mounts. For components compiled as custom elements, styles are injected to the shadow root.\n\t\t * - `'external'`: the CSS will only be returned in the `css` field of the compilation result. Most Svelte bundler plugins will set this to `'external'` and use the CSS that is statically generated for better performance, as it will result in smaller JavaScript bundles and the output can be served as cacheable `.css` files.\n\t\t * This is always `'injected'` when compiling with `customElement` mode.\n\t\t *\n\t\t * You can also pass a function that receives `{ filename }` and returns either `'injected'` or `'external'`.\n\t\t */\n\t\tcss?: 'injected' | 'external' | ((options: { filename: string }) => 'injected' | 'external');\n\t\t/**\n\t\t * A function that takes a `{ hash, css, name, filename }` argument and returns the string that is used as a classname for scoped CSS.\n\t\t * It defaults to returning `svelte-${hash(filename ?? css)}`.\n\t\t *\n\t\t * @default undefined\n\t\t */\n\t\tcssHash?: CssHashGetter;\n\t\t/**\n\t\t * If `true`, your HTML comments will be preserved in the output. By default, they are stripped out.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tpreserveComments?: boolean;\n\t\t/**\n\t\t *  If `true`, whitespace inside and between elements is kept as you typed it, rather than removed or collapsed to a single space where possible.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tpreserveWhitespace?: boolean;\n\t\t/**\n\t\t * Which strategy to use when cloning DOM fragments:\n\t\t *\n\t\t * - `html` populates a `<template>` with `innerHTML` and clones it. This is faster, but cannot be used if your app's [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) includes [`require-trusted-types-for 'script'`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/require-trusted-types-for)\n\t\t * - `tree` creates the fragment one element at a time and _then_ clones it. This is slower, but works everywhere\n\t\t *\n\t\t * @default 'html'\n\t\t * @since 5.33\n\t\t */\n\t\tfragments?: 'html' | 'tree';\n\t\t/**\n\t\t * Set to `true` to force the compiler into runes mode, even if there are no indications of runes usage.\n\t\t * Set to `false` to force the compiler into ignoring runes, even if there are indications of runes usage.\n\t\t * Set to `undefined` (the default) to infer runes mode from the component code.\n\t\t * Is always `true` for JS/TS modules compiled with Svelte.\n\t\t * Will be `true` by default in Svelte 6.\n\t\t * Note that setting this to `true` in your `svelte.config.js` will force runes mode for your entire project, including components in `node_modules`,\n\t\t * which is likely not what you want. If you're using Vite, consider using [dynamicCompileOptions](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#dynamiccompileoptions) instead.\n\t\t * @default undefined\n\t\t */\n\t\trunes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined);\n\t\t/**\n\t\t *  If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`.\n\t\t *\n\t\t * @default true\n\t\t */\n\t\tdiscloseVersion?: boolean;\n\t\t/**\n\t\t * @deprecated Use these only as a temporary solution before migrating your code\n\t\t */\n\t\tcompatibility?: {\n\t\t\t/**\n\t\t\t * Applies a transformation so that the default export of Svelte files can still be instantiated the same way as in Svelte 4 —\n\t\t\t * as a class when compiling for the browser (as though using `createClassComponent(MyComponent, {...})` from `svelte/legacy`)\n\t\t\t * or as an object with a `.render(...)` method when compiling for the server\n\t\t\t * @default 5\n\t\t\t */\n\t\t\tcomponentApi?: 4 | 5;\n\t\t};\n\t\t/**\n\t\t * An initial sourcemap that will be merged into the final output sourcemap.\n\t\t * This is usually the preprocessor sourcemap.\n\t\t *\n\t\t * @default null\n\t\t */\n\t\tsourcemap?: object | string;\n\t\t/**\n\t\t * Used for your JavaScript sourcemap.\n\t\t *\n\t\t * @default null\n\t\t */\n\t\toutputFilename?: string;\n\t\t/**\n\t\t * Used for your CSS sourcemap.\n\t\t *\n\t\t * @default null\n\t\t */\n\t\tcssOutputFilename?: string;\n\t\t/**\n\t\t * If `true`, compiles components with hot reloading support.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\thmr?: boolean;\n\t\t/**\n\t\t * If `true`, returns the modern version of the AST.\n\t\t * Will become `true` by default in Svelte 6, and the option will be removed in Svelte 7.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tmodernAst?: boolean;\n\t}\n\n\tinterface ModuleCompileOptions {\n\t\t/**\n\t\t * If `true`, causes extra code to be added that will perform runtime checks and provide debugging information during development.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tdev?: boolean;\n\t\t/**\n\t\t * If `\"client\"`, Svelte emits code designed to run in the browser.\n\t\t * If `\"server\"`, Svelte emits code suitable for server-side rendering.\n\t\t * If `false`, nothing is generated. Useful for tooling that is only interested in warnings.\n\t\t *\n\t\t * @default 'client'\n\t\t */\n\t\tgenerate?: 'client' | 'server' | false;\n\t\t/**\n\t\t * Used for debugging hints and sourcemaps. Your bundler plugin will set it automatically.\n\t\t */\n\t\tfilename?: string;\n\t\t/**\n\t\t * Used for ensuring filenames don't leak filesystem information. Your bundler plugin will set it automatically.\n\t\t * @default process.cwd() on node-like environments, undefined elsewhere\n\t\t */\n\t\trootDir?: string;\n\t\t/**\n\t\t * A function that gets a `Warning` as an argument and returns a boolean.\n\t\t * Use this to filter out warnings. Return `true` to keep the warning, `false` to discard it.\n\t\t */\n\t\twarningFilter?: (warning: Warning_1) => boolean;\n\t\t/**\n\t\t * Experimental options\n\t\t * @since 5.36\n\t\t */\n\t\texperimental?: {\n\t\t\t/**\n\t\t\t * Allow `await` keyword in deriveds, template expressions, and the top level of components\n\t\t\t * @since 5.36\n\t\t\t */\n\t\t\tasync?: boolean;\n\t\t};\n\t}\n\t/**\n\t * - `html`    — the default, for e.g. `<div>` or `<span>`\n\t * - `svg`     — for e.g. `<svg>` or `<g>`\n\t * - `mathml`  — for e.g. `<math>` or `<mrow>`\n\t */\n\ttype Namespace = 'html' | 'svg' | 'mathml';\n\ttype ICompileDiagnostic = {\n\t\tcode: string;\n\t\tmessage: string;\n\t\tstack?: string;\n\t\tfilename?: string;\n\t\tstart?: Location;\n\t\tend?: Location;\n\t\tposition?: [number, number];\n\t\tframe?: string;\n\t};\n\n\texport {};\n}declare module '*.svelte' {\n\t// use prettier-ignore for a while because of https://github.com/sveltejs/language-tools/commit/026111228b5814a9109cc4d779d37fb02955fb8b\n\t// prettier-ignore\n\timport { SvelteComponent } from 'svelte'\n\timport { LegacyComponentType } from 'svelte/legacy';\n\tconst Comp: LegacyComponentType;\n\ttype Comp = SvelteComponent;\n\texport default Comp;\n}\n\n/**\n * Declares reactive state.\n *\n * Example:\n * ```ts\n * let count = $state(0);\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$state Documentation}\n *\n * @param initial The initial value\n */\ndeclare function $state<T>(initial: T): T;\ndeclare function $state<T>(): T | undefined;\n\ndeclare namespace $state {\n\ttype Primitive = string | number | boolean | null | undefined;\n\n\ttype TypedArray =\n\t\t| Int8Array\n\t\t| Uint8Array\n\t\t| Uint8ClampedArray\n\t\t| Int16Array\n\t\t| Uint16Array\n\t\t| Int32Array\n\t\t| Uint32Array\n\t\t| Float32Array\n\t\t| Float64Array\n\t\t| BigInt64Array\n\t\t| BigUint64Array;\n\n\t/** The things that `structuredClone` can handle — https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm */\n\texport type Cloneable =\n\t\t| ArrayBuffer\n\t\t| DataView\n\t\t| Date\n\t\t| Error\n\t\t| Map<any, any>\n\t\t| RegExp\n\t\t| Set<any>\n\t\t| TypedArray\n\t\t// web APIs\n\t\t| Blob\n\t\t| CryptoKey\n\t\t| DOMException\n\t\t| DOMMatrix\n\t\t| DOMMatrixReadOnly\n\t\t| DOMPoint\n\t\t| DOMPointReadOnly\n\t\t| DOMQuad\n\t\t| DOMRect\n\t\t| DOMRectReadOnly\n\t\t| File\n\t\t| FileList\n\t\t| FileSystemDirectoryHandle\n\t\t| FileSystemFileHandle\n\t\t| FileSystemHandle\n\t\t| ImageBitmap\n\t\t| ImageData\n\t\t| RTCCertificate\n\t\t| VideoFrame;\n\n\t/** Turn `SvelteDate`, `SvelteMap` and `SvelteSet` into their non-reactive counterparts. (`URL` is uncloneable.) */\n\ttype NonReactive<T> = T extends Date\n\t\t? Date\n\t\t: T extends Map<infer K, infer V>\n\t\t\t? Map<K, V>\n\t\t\t: T extends Set<infer K>\n\t\t\t\t? Set<K>\n\t\t\t\t: T;\n\n\ttype Snapshot<T> = T extends Primitive\n\t\t? T\n\t\t: T extends Cloneable\n\t\t\t? NonReactive<T>\n\t\t\t: T extends { toJSON(): infer R }\n\t\t\t\t? R\n\t\t\t\t: T extends readonly unknown[]\n\t\t\t\t\t? { [K in keyof T]: Snapshot<T[K]> }\n\t\t\t\t\t: T extends Array<infer U>\n\t\t\t\t\t\t? Array<Snapshot<U>>\n\t\t\t\t\t\t: T extends object\n\t\t\t\t\t\t\t? T extends { [key: string]: any }\n\t\t\t\t\t\t\t\t? { [K in keyof T]: Snapshot<T[K]> }\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never;\n\n\t/**\n\t * Returns the latest `value`, even if the rest of the UI is suspending\n\t * while async work (such as data loading) completes.\n\t *\n\t * ```svelte\n\t * <nav>\n\t *   <a href=\"/\" aria-current={$state.eager(pathname) === '/' ? 'page' : null}>home</a>\n\t *   <a href=\"/about\" aria-current={$state.eager(pathname) === '/about' ? 'page' : null}>about</a>\n\t * </nav>\n\t * ```\n\t */\n\texport function eager<T>(value: T): T;\n\t/**\n\t * Declares state that is _not_ made deeply reactive — instead of mutating it,\n\t * you must reassign it.\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   let items = $state.raw([0]);\n\t *\n\t *   const addItem = () => {\n\t *     items = [...items, items.length];\n\t *   };\n\t * </script>\n\t *\n\t * <button onclick={addItem}>\n\t *   {items.join(', ')}\n\t * </button>\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$state#$state.raw Documentation}\n\t *\n\t * @param initial The initial value\n\t */\n\texport function raw<T>(initial: T): T;\n\texport function raw<T>(): T | undefined;\n\t/**\n\t * To take a static snapshot of a deeply reactive `$state` proxy, use `$state.snapshot`:\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   let counter = $state({ count: 0 });\n\t *\n\t *   function onclick() {\n\t *     // Will log `{ count: ... }` rather than `Proxy { ... }`\n\t *     console.log($state.snapshot(counter));\n\t *   };\n\t * </script>\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$state#$state.snapshot Documentation}\n\t *\n\t * @param state The value to snapshot\n\t */\n\texport function snapshot<T>(state: T): Snapshot<T>;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Declares derived state, i.e. one that depends on other state variables.\n * The expression inside `$derived(...)` should be free of side-effects.\n *\n * Example:\n * ```ts\n * let double = $derived(count * 2);\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$derived Documentation}\n *\n * @param expression The derived state expression\n */\ndeclare function $derived<T>(expression: T): T;\n\ndeclare namespace $derived {\n\t/**\n\t * Sometimes you need to create complex derivations that don't fit inside a short expression.\n\t * In these cases, you can use `$derived.by` which accepts a function as its argument.\n\t *\n\t * Example:\n\t * ```ts\n\t * let total = $derived.by(() => {\n\t *   let result = 0;\n\t *\t for (const n of numbers) {\n\t *\t   result += n;\n\t *   }\n\t *   return result;\n\t * });\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$derived#$derived.by Documentation}\n\t */\n\texport function by<T>(fn: () => T): T;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Runs code when a component is mounted to the DOM, and then whenever its dependencies change, i.e. `$state` or `$derived` values.\n * The timing of the execution is after the DOM has been updated.\n *\n * Example:\n * ```ts\n * $effect(() => console.log('The count is now ' + count));\n * ```\n *\n * If you return a function from the effect, it will be called right before the effect is run again, or when the component is unmounted.\n *\n * Does not run during server-side rendering.\n *\n * @see {@link https://svelte.dev/docs/svelte/$effect Documentation}\n * @param fn The function to execute\n */\ndeclare function $effect(fn: () => void | (() => void)): void;\n\ndeclare namespace $effect {\n\t/**\n\t * Runs code right before a component is mounted to the DOM, and then whenever its dependencies change, i.e. `$state` or `$derived` values.\n\t * The timing of the execution is right before the DOM is updated.\n\t *\n\t * Example:\n\t * ```ts\n\t * $effect.pre(() => console.log('The count is now ' + count));\n\t * ```\n\t *\n\t * If you return a function from the effect, it will be called right before the effect is run again, or when the component is unmounted.\n\t *\n\t * Does not run during server-side rendering.\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.pre Documentation}\n\t * @param fn The function to execute\n\t */\n\texport function pre(fn: () => void | (() => void)): void;\n\n\t/**\n\t * Returns the number of promises that are pending in the current boundary, not including child boundaries.\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.pending Documentation}\n\t */\n\texport function pending(): number;\n\n\t/**\n\t * The `$effect.tracking` rune is an advanced feature that tells you whether or not the code is running inside a tracking context, such as an effect or inside your template.\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   console.log('in component setup:', $effect.tracking()); // false\n\t *\n\t *   $effect(() => {\n\t *     console.log('in effect:', $effect.tracking()); // true\n\t *   });\n\t * </script>\n\t *\n\t * <p>in template: {$effect.tracking()}</p> <!-- true -->\n\t * ```\n\t *\n\t * This allows you to (for example) add things like subscriptions without causing memory leaks, by putting them in child effects.\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.tracking Documentation}\n\t */\n\texport function tracking(): boolean;\n\n\t/**\n\t * The `$effect.root` rune is an advanced feature that creates a non-tracked scope that doesn't auto-cleanup. This is useful for\n\t * nested effects that you want to manually control. This rune also allows for creation of effects outside of the component\n\t * initialisation phase.\n\t *\n\t * Example:\n\t * ```svelte\n\t * <script>\n\t *   let count = $state(0);\n\t *\n\t *   const cleanup = $effect.root(() => {\n\t *     $effect(() => {\n\t *       console.log(count);\n\t *     })\n\t *\n\t *     return () => {\n\t *       console.log('effect root cleanup');\n\t *     }\n\t *   });\n\t * </script>\n\t *\n\t * <button onclick={() => cleanup()}>cleanup</button>\n\t * ```\n\t *\n\t * @see {@link https://svelte.dev/docs/svelte/$effect#$effect.root Documentation}\n\t */\n\texport function root(fn: () => void | (() => void)): () => void;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Declares the props that a component accepts. Example:\n *\n * ```ts\n * let { optionalProp = 42, requiredProp, bindableProp = $bindable() }: { optionalProp?: number; requiredProps: string; bindableProp: boolean } = $props();\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$props Documentation}\n */\ndeclare function $props(): any;\n\ndeclare namespace $props {\n\t/**\n\t * Generates an ID that is unique to the current component instance. When hydrating a server-rendered component,\n\t * the value will be consistent between server and client.\n\t *\n\t * This is useful for linking elements via attributes like `for` and `aria-labelledby`.\n\t * @since 5.20.0\n\t */\n\texport function id(): string;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Declares a prop as bindable, meaning the parent component can use `bind:propName={value}` to bind to it.\n *\n * ```ts\n * let { propName = $bindable() }: { propName: boolean } = $props();\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$bindable Documentation}\n */\ndeclare function $bindable<T>(fallback?: T): T;\n\ndeclare namespace $bindable {\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Inspects one or more values whenever they, or the properties they contain, change. Example:\n *\n * ```ts\n * $inspect(someValue, someOtherValue)\n * ```\n *\n * `$inspect` returns a `with` function, which you can invoke with a callback function that\n * will be called with the value and the event type (`'init'` or `'update'`) on every change.\n * By default, the values will be logged to the console.\n *\n * ```ts\n * $inspect(x).with(console.trace);\n * $inspect(x, y).with(() => { debugger; });\n * ```\n *\n * @see {@link https://svelte.dev/docs/svelte/$inspect Documentation}\n */\ndeclare function $inspect<T extends any[]>(\n\t...values: T\n): { with: (fn: (type: 'init' | 'update', ...values: T) => void) => void };\n\ndeclare namespace $inspect {\n\t/**\n\t * Tracks which reactive state changes caused an effect to re-run. Must be the first\n\t * statement of a function body. Example:\n\t *\n\t * ```svelte\n\t * <script>\n\t *   let count = $state(0);\n\t *\n\t *   $effect(() => {\n\t *     $inspect.trace('my effect');\n\t *\n\t *     count;\n\t *   });\n\t * </script>\n\t */\n\texport function trace(name?: string): void;\n\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n/**\n * Retrieves the `this` reference of the custom element that contains this component. Example:\n *\n * ```svelte\n * <svelte:options customElement=\"my-element\" />\n *\n * <script>\n * \tfunction greet(greeting) {\n * \t\t$host().dispatchEvent(new CustomEvent('greeting', { detail: greeting }))\n * \t}\n * </script>\n *\n * <button onclick={() => greet('hello')}>say hello</button>\n * ```\n *\n * Only available inside custom element components, and only on the client-side.\n *\n * @see {@link https://svelte.dev/docs/svelte/$host Documentation}\n */\ndeclare function $host<El extends HTMLElement = HTMLElement>(): El;\n\ndeclare namespace $host {\n\t// prevent intellisense from being unhelpful\n\t/** @deprecated */\n\texport const apply: never;\n\t/** @deprecated */\n\t// @ts-ignore\n\texport const arguments: never;\n\t/** @deprecated */\n\texport const bind: never;\n\t/** @deprecated */\n\texport const call: never;\n\t/** @deprecated */\n\texport const caller: never;\n\t/** @deprecated */\n\texport const length: never;\n\t/** @deprecated */\n\texport const name: never;\n\t/** @deprecated */\n\texport const prototype: never;\n\t/** @deprecated */\n\texport const toString: never;\n\n\t// needed to keep private stuff private\n\texport {};\n}\n\n//# sourceMappingURL=index.d.ts.map\n"
  },
  {
    "path": "playgrounds/sandbox/.gitignore",
    "content": "/dist/client/*\n/dist/server/*\n/output\n/src/*\n"
  },
  {
    "path": "playgrounds/sandbox/demo.css",
    "content": "body {\n\t--bg-1: hsl(0, 0%, 100%);\n\t--bg-2: hsl(206, 20%, 90%);\n\t--bg-3: hsl(206, 20%, 80%);\n\t--fg-1: hsl(0, 0%, 13%);\n\t--fg-2: hsl(0, 0%, 20%);\n\t--fg-2: hsl(0, 0%, 30%);\n\t--link: hsl(208, 77%, 47%);\n\t--link-hover: hsl(208, 77%, 55%);\n\t--link-active: hsl(208, 77%, 40%);\n\t--border-radius: 4px;\n\t--font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,\n\t\t'Open Sans', 'Helvetica Neue', sans-serif;\n\t--font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',\n\t\tmonospace;\n\tbackground: var(--bg-1);\n\tcolor: var(--fg-1);\n\tfont-family: var(--font);\n\tline-height: 1.5;\n\tmargin: 1rem;\n\theight: calc(100vh - 2rem);\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: normal;\n\tfont-variant-numeric: tabular-nums;\n\tline-height: 1.1;\n}\n\n:is(h1, h2, h3, h4, h5, h6, p) {\n\tmargin: 1rem 0.1rem;\n}\n\nlabel {\n\tmargin: 0.5rem 0.1rem;\n}\n\n:is(h1, h2, h3, h4, h5, h6, p, label):first-child {\n\tmargin-top: 0;\n}\n\n:is(h1, h2, h3, h4, h5, h6, p, label):last-child {\n\tmargin-bottom: 0;\n}\n\na {\n\tcolor: var(--link);\n}\n\na:hover {\n\tcolor: var(--link-hover);\n}\n\na:active {\n\tcolor: var(--link-active);\n}\n\nlabel {\n\tdisplay: flex;\n\tgap: 0.5rem;\n\talign-items: center;\n}\n\nlabel input {\n\tmargin: 0;\n}\n\nbutton,\ninput,\nselect {\n\tfont-family: inherit;\n\tfont-size: inherit;\n}\n\nbutton {\n\tbackground: var(--link);\n\tcolor: var(--bg-1);\n\tpadding: 0.5rem 1rem;\n\tborder: none;\n\tborder-radius: var(--border-radius);\n}\n\nbutton:hover {\n\tbackground: var(--link-hover);\n}\n\nbutton:active {\n\tbackground: var(--link-active);\n}\n\n:is(button, button:hover, button:active):disabled {\n\tbackground: var(--link);\n\tfilter: grayscale(1);\n\topacity: 0.4;\n}\n\ninput,\ntextarea,\nselect {\n\tpadding: 0.5rem;\n\tborder: 1px solid var(--bg-2);\n\tborder-radius: var(--border-radius);\n\tbox-sizing: border-box;\n}\n\ninput,\ntextarea {\n\tbackground: var(--bg-1);\n}\n\nselect:not([multiple]) {\n\tbackground: var(--bg-2);\n}\n\ntextarea {\n\tfont-family: var(--font-mono);\n\tfont-size: 0.9rem;\n}\n\nform {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 1rem;\n\talign-items: baseline;\n}\n\nul:has(li):has(form) {\n\tlist-style: none;\n\tpadding: 0;\n}\n\nli form {\n\tflex-direction: row;\n\tgap: 0.5rem;\n\tmargin: 0.5rem 0;\n}\n\nnav {\n\tposition: relative;\n\tdisplay: flex;\n\tgap: 1em;\n\tpadding: 1em;\n\tbackground: var(--bg-2);\n\tz-index: 2;\n\tmargin: 0 0 1em 0;\n\tborder-radius: var(--border-radius);\n}\n\nnav a {\n\ttext-decoration: none;\n}\n\nnav a[aria-current='true'] {\n\tborder-bottom: 2px solid;\n}\n\nul:has(form) {\n\tlist-style: none;\n\tpadding: 0;\n}\n\nprogress {\n\tmargin: 0.5rem 0;\n}\n\nprogress:first-child {\n\tmargin-top: 0;\n}\n\nprogress:lsat-child {\n\tmargin-bottom: 0;\n}\n\n.error {\n\tcolor: red;\n}\n\ncode {\n\tbackground: var(--bg-2);\n\tfont-family: var(--font-mono);\n\tfont-size: 0.9em;\n\tpadding: 0.15rem 0.3rem;\n\tborder-radius: var(--border-radius);\n}\n\nul.todos {\n\tpadding: 0;\n}\n\nul.todos li:not(:has(> form)),\nul.todos li form {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0.5em 0.5em 0.5em 1em;\n\tmargin: 0 0 0.5em 0;\n\tgap: 0.5em;\n\tborder-radius: 5px;\n\tuser-select: none;\n\tbackground: var(--bg-1);\n\tfilter: drop-shadow(2px 3px 6px rgba(0, 0, 0, 0.1));\n\ttransition:\n\t\tfilter 0.2s,\n\t\topacity 0.2s;\n}\n\nul.todos .done {\n\tfilter: none;\n\topacity: 0.4;\n}\n\nul.todos button {\n\tborder: none;\n\tbackground-color: transparent;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 50% 50%;\n\tbackground-size: 1rem 1rem;\n\tcursor: pointer;\n\twidth: 3em;\n\theight: 3em;\n\tmargin: -0.5em -0.5em -0.5em 0;\n\taspect-ratio: 1;\n\topacity: 0.5;\n\ttransition: opacity 0.2s;\n}\n\nul.todos button:hover {\n\topacity: 1;\n}\n\nbody.dark {\n\t--bg-1: hsl(0, 0%, 18%);\n\t--bg-2: hsl(0, 0%, 30%);\n\t--bg-3: hsl(0, 0%, 40%);\n\t--fg-1: hsl(0, 0%, 90%);\n\t--fg-2: hsl(0, 0%, 70%);\n\t--fg-3: hsl(0, 0%, 60%);\n\t--link: hsl(206, 96%, 72%);\n\t--link-hover: hsl(206, 96%, 78%);\n\t--link-active: hsl(206, 96%, 64%);\n}\n"
  },
  {
    "path": "playgrounds/sandbox/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"/favicon.png\" />\n\t\t<link href=\"/demo.css\" rel=\"stylesheet\" />\n\t\t<!--ssr-head-->\n\t</head>\n\t<body>\n\t\t<noscript>You need to enable JavaScript to run this app.</noscript>\n\t\t<div id=\"root\"><!--ssr-body--></div>\n\n\t\t<script type=\"module\">\n\t\t\timport { mount, hydrate, unmount } from 'svelte';\n\t\t\timport App from '/src/App.svelte';\n\n\t\t\tglobalThis.delayed = (v, ms = 1000) => {\n\t\t\t\treturn new Promise((f) => {\n\t\t\t\t\tsetTimeout(() => f(v), ms);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst root = document.getElementById('root');\n\t\t\tconst render = root.firstChild?.nextSibling ? hydrate : mount;\n\n\t\t\tconst component = render(App, {\n\t\t\t\ttarget: document.getElementById('root')\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>\n"
  },
  {
    "path": "playgrounds/sandbox/package.json",
    "content": "{\n  \"name\": \"svelte-playgrounds-demo\",\n  \"private\": true,\n  \"version\": \"0.0.1\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"prepare\": \"node scripts/create-app-svelte.js\",\n    \"dev\": \"SVELTE_INSPECTOR_OPTIONS=false vite --host\",\n    \"ssr\": \"SVELTE_INSPECTOR_OPTIONS=false node --conditions=development ./ssr-dev.js\",\n    \"build\": \"vite build --outDir dist/client && vite build --outDir dist/server --ssr ssr-prod.js\",\n    \"prod\": \"npm run build && node dist/server/ssr-prod\",\n    \"preview\": \"vite preview\",\n    \"download\": \"node scripts/download.js\",\n    \"hash\": \"node scripts/hash.js\",\n    \"create-test\": \"node scripts/create-test.js\",\n    \"start\": \"node run.js\"\n  },\n  \"devDependencies\": {\n    \"@sveltejs/vite-plugin-svelte\": \"^6.2.0\",\n    \"@types/node\": \"^24.5.2\",\n    \"polka\": \"^1.0.0-next.25\",\n    \"svelte\": \"workspace:*\",\n    \"tinyglobby\": \"^0.2.12\",\n    \"vite\": \"^7.1.11\",\n    \"vite-plugin-devtools-json\": \"^1.0.0\",\n    \"vite-plugin-inspect\": \"^11.3.3\"\n  }\n}\n"
  },
  {
    "path": "playgrounds/sandbox/run.js",
    "content": "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { globSync } from 'tinyglobby';\nimport { compile, compileModule, parse, print, migrate } from 'svelte/compiler';\n\n// toggle these to change what gets written to sandbox/output\nconst AST = false;\nconst MIGRATE = false;\nconst FROM_HTML = true;\nconst FROM_TREE = false;\nconst DEV = false;\nconst PRINT = false;\n\nconst argv = parseArgs({ options: { runes: { type: 'boolean' } }, args: process.argv.slice(2) });\n\nconst cwd = fileURLToPath(new URL('.', import.meta.url)).slice(0, -1);\n\n// empty output directory\nif (fs.existsSync(`${cwd}/output`)) {\n\tfor (const file of fs.readdirSync(`${cwd}/output`)) {\n\t\tif (file === '.gitkeep') continue;\n\t\ttry {\n\t\t\tfs.rmSync(`${cwd}/output/${file}`, { recursive: true });\n\t\t} catch {}\n\t}\n}\n\n/** @param {string} dir */\nfunction mkdirp(dir) {\n\ttry {\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t} catch {}\n}\n\n/**\n * @param {string} file\n * @param {string} contents\n */\nfunction write(file, contents) {\n\tmkdirp(path.dirname(file));\n\tfs.writeFileSync(file, contents);\n}\n\nconst svelte_modules = globSync('**/*.svelte', { cwd: `${cwd}/src` });\nconst js_modules = globSync('**/*.js', { cwd: `${cwd}/src` });\n\nfor (const generate of /** @type {const} */ (['client', 'server'])) {\n\tconsole.error(`\\n--- generating ${generate} ---\\n`);\n\tfor (const file of svelte_modules) {\n\t\tconst input = `${cwd}/src/${file}`;\n\t\tconst source = fs.readFileSync(input, 'utf-8');\n\n\t\tconst output_js = `${cwd}/output/${generate}/${file}.js`;\n\t\tconst output_map = `${cwd}/output/${generate}/${file}.js.map`;\n\t\tconst output_css = `${cwd}/output/${generate}/${file}.css`;\n\n\t\tmkdirp(path.dirname(output_js));\n\n\t\tif (generate === 'client') {\n\t\t\tif (AST) {\n\t\t\t\tconst ast = parse(source, {\n\t\t\t\t\tmodern: true\n\t\t\t\t});\n\n\t\t\t\twrite(\n\t\t\t\t\t`${cwd}/output/ast/${file}.json`,\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\tast,\n\t\t\t\t\t\t(key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value),\n\t\t\t\t\t\t'\\t'\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tif (PRINT) {\n\t\t\t\t\tconst printed = print(ast);\n\t\t\t\t\twrite(`${cwd}/output/printed/${file}`, printed.code);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (MIGRATE) {\n\t\t\t\ttry {\n\t\t\t\t\tconst migrated = migrate(source);\n\t\t\t\t\twrite(`${cwd}/output/migrated/${file}`, migrated.code);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(`Error migrating ${file}`, e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet from_html;\n\t\tlet from_tree;\n\n\t\tif (generate === 'server' || FROM_HTML) {\n\t\t\tfrom_html = compile(source, {\n\t\t\t\tdev: DEV,\n\t\t\t\thmr: DEV,\n\t\t\t\tfilename: input,\n\t\t\t\tgenerate,\n\t\t\t\trunes: argv.values.runes,\n\t\t\t\texperimental: {\n\t\t\t\t\tasync: true\n\t\t\t\t}\n\t\t\t});\n\n\t\t\twrite(output_js, from_html.js.code + '\\n//# sourceMappingURL=' + path.basename(output_map));\n\t\t\twrite(output_map, from_html.js.map.toString());\n\t\t}\n\n\t\t// generate with fragments: 'tree'\n\t\tif (generate === 'client' && FROM_TREE) {\n\t\t\tfrom_tree = compile(source, {\n\t\t\t\tdev: false,\n\t\t\t\tfilename: input,\n\t\t\t\tgenerate,\n\t\t\t\trunes: argv.values.runes,\n\t\t\t\tfragments: 'tree',\n\t\t\t\texperimental: {\n\t\t\t\t\tasync: true\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst output_js = `${cwd}/output/${generate}/${file}.tree.js`;\n\t\t\tconst output_map = `${cwd}/output/${generate}/${file}.tree.js.map`;\n\n\t\t\twrite(output_js, from_tree.js.code + '\\n//# sourceMappingURL=' + path.basename(output_map));\n\t\t\twrite(output_map, from_tree.js.map.toString());\n\t\t}\n\n\t\tconst compiled = from_html ?? from_tree;\n\n\t\tif (compiled) {\n\t\t\tfor (const warning of compiled.warnings) {\n\t\t\t\tconsole.warn(warning.code);\n\t\t\t\tconsole.warn(warning.frame);\n\t\t\t}\n\n\t\t\tif (compiled.css) {\n\t\t\t\twrite(output_css, compiled.css.code);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const file of js_modules) {\n\t\tconst input = `${cwd}/src/${file}`;\n\t\tconst source = fs.readFileSync(input, 'utf-8');\n\n\t\tconst compiled = compileModule(source, {\n\t\t\tdev: false,\n\t\t\tfilename: input,\n\t\t\tgenerate,\n\t\t\texperimental: {\n\t\t\t\tasync: true\n\t\t\t}\n\t\t});\n\n\t\tconst output_js = `${cwd}/output/${generate}/${file}`;\n\n\t\tmkdirp(path.dirname(output_js));\n\t\twrite(output_js, compiled.js.code);\n\t}\n}\n"
  },
  {
    "path": "playgrounds/sandbox/scripts/create-app-svelte.js",
    "content": "import fs from 'node:fs';\n\nconst destination = new URL('../src/main.svelte', import.meta.url);\n\nif (!fs.existsSync(destination)) {\n\tconst template = new URL('./main.template.svelte', import.meta.url);\n\n\ttry {\n\t\tfs.mkdirSync(new URL('../src', import.meta.url));\n\t} catch {}\n\n\tfs.writeFileSync(destination, fs.readFileSync(template, 'utf-8'), 'utf-8');\n}\n"
  },
  {
    "path": "playgrounds/sandbox/scripts/create-test.js",
    "content": "// Creates a test from the existing playground. Can be called from anywhere.\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get the directory where this script is located\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Base paths relative to this script's location\nconst sandbox_dir = path.resolve(__dirname, '..');\nconst src_dir = path.join(sandbox_dir, 'src');\nconst tests_dir = path.resolve(__dirname, '../../../packages/svelte/tests');\n\n// Get target folder from command line arguments\nlet target_folder = process.argv[2];\nif (!target_folder) {\n\tconsole.error(\n\t\t'Please provide a target folder as an argument. Example: node create-test.js runtime-runes/my-test'\n\t);\n\tprocess.exit(1);\n}\nif (!target_folder.includes('/')) {\n\ttarget_folder = 'runtime-runes/' + target_folder;\n}\nif (!target_folder.startsWith('runtime-')) {\n\tconsole.error(\n\t\t'Target folder must start with \"runtime-\" (can only convert to these kinds of tests)'\n\t);\n\tprocess.exit(1);\n}\ntarget_folder = path.join(\n\tpath.resolve(tests_dir, target_folder.split('/')[0]),\n\t'samples',\n\ttarget_folder.split('/')[1]\n);\n\nconst exists = fs.existsSync(target_folder);\n\n// Check if target folder already exists and ask for confirmation\nif (exists) {\n\tconsole.log(`Target folder \"${target_folder}\" already exists.`);\n\tprocess.stdout.write('Do you want to override the existing test? (Y/n): ');\n\n\t// Read user input synchronously\n\tconst stdin = process.stdin;\n\tstdin.setRawMode(true);\n\tstdin.resume();\n\tstdin.setEncoding('utf8');\n\n\tconst response = await new Promise((resolve) => {\n\t\tstdin.on('data', (key) => {\n\t\t\tstdin.setRawMode(false);\n\t\t\tstdin.pause();\n\t\t\tprocess.stdout.write('\\n');\n\t\t\tresolve(key);\n\t\t});\n\t});\n\n\tif (response.toLowerCase() === 'n') {\n\t\tconsole.log('Operation cancelled.');\n\t\tprocess.exit(0);\n\t}\n\n\t// Clear the existing target folder except for _config.js\n\tconst files = fs.readdirSync(target_folder);\n\tfor (const file of files) {\n\t\tif (file !== '_config.js') {\n\t\t\tconst file_path = path.join(target_folder, file);\n\t\t\tfs.rmSync(file_path, { recursive: true, force: true });\n\t\t}\n\t}\n} else {\n\tfs.mkdirSync(target_folder, { recursive: true });\n}\n\n// Starting file\nconst app_svelte_path = path.join(src_dir, 'App.svelte');\nconst collected_files = new Set();\nconst processed_files = new Set();\n\nfunction collect_imports(file_path) {\n\tif (processed_files.has(file_path) || !fs.existsSync(file_path)) {\n\t\treturn;\n\t}\n\n\tprocessed_files.add(file_path);\n\tcollected_files.add(file_path);\n\n\tconst content = fs.readFileSync(file_path, 'utf8');\n\n\t// Regex to match import statements\n\tconst import_regex = /import\\s+(?:[^'\"]*\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n\tlet match;\n\n\twhile ((match = import_regex.exec(content)) !== null) {\n\t\tconst import_path = match[1];\n\n\t\t// Skip node_modules imports\n\t\tif (!import_path.startsWith('.')) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Resolve relative import path\n\t\tconst resolved_path = path.resolve(path.dirname(file_path), import_path);\n\n\t\t// Try different extensions if file doesn't exist\n\t\tconst extensions = ['', '.svelte', '.js', '.ts'];\n\t\tlet actual_path = null;\n\n\t\tfor (const ext of extensions) {\n\t\t\tconst test_path = resolved_path + ext;\n\t\t\tif (fs.existsSync(test_path)) {\n\t\t\t\tactual_path = test_path;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (actual_path) {\n\t\t\tcollect_imports(actual_path);\n\t\t}\n\t}\n}\n\n// Start collecting from App.svelte\ncollect_imports(app_svelte_path);\n\n// Copy collected files to target folder\nfor (const file_path of collected_files) {\n\tconst relative_path = path.relative(src_dir, file_path);\n\tlet target_path = path.join(target_folder, relative_path);\n\n\t// Rename App.svelte to main.svelte\n\tif (path.basename(file_path) === 'App.svelte') {\n\t\ttarget_path = path.join(target_folder, path.dirname(relative_path), 'main.svelte');\n\t}\n\n\t// Ensure target directory exists\n\tconst target_dir = path.dirname(target_path);\n\tif (!fs.existsSync(target_dir)) {\n\t\tfs.mkdirSync(target_dir, { recursive: true });\n\t}\n\n\t// Copy file\n\tfs.copyFileSync(file_path, target_path);\n\tconsole.log(`Copied: ${file_path} -> ${target_path}`);\n}\n\n// Create empty _config.js\nif (!exists) {\n\tconst config_path = path.join(target_folder, '_config.js');\n\tfs.writeFileSync(\n\t\tconfig_path,\n\t\t`import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t}\n});\n`\n\t);\n\tconsole.log(`Created: ${config_path}`);\n}\n\nconsole.log(`\\nTest files created in: ${target_folder}`);\n"
  },
  {
    "path": "playgrounds/sandbox/scripts/download.js",
    "content": "import fs from 'node:fs';\nimport path from 'node:path';\nimport { parseArgs } from 'node:util';\nimport { execSync } from 'node:child_process';\nimport { chromium } from 'playwright';\n\nconst { values, positionals } = parseArgs({\n\toptions: {\n\t\t'create-test': {\n\t\t\ttype: 'string'\n\t\t}\n\t},\n\tallowPositionals: true\n});\n\nconst create_test_name = values['create-test'] ?? null;\nconst url_arg = positionals[0];\n\nif (!url_arg) {\n\tconsole.error(`Missing URL argument`);\n\tprocess.exit(1);\n}\n\nconst base_dir = import.meta.dirname;\n\n/**\n * Check if the argument is a local directory path\n * @param {string} arg\n * @returns {boolean}\n */\nfunction is_local_directory(arg) {\n\ttry {\n\t\treturn fs.existsSync(arg) && fs.statSync(arg).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Check if it's a local directory first (before URL parsing)\nconst is_local = is_local_directory(url_arg);\n\nconst resolved_test_path = ['runtime-runes', 'runtime-legacy']\n\t.map((d) => path.resolve(`${base_dir}/../../../packages/svelte/tests/${d}/samples/${url_arg}`))\n\t.find(fs.existsSync);\n\n/** @type {URL | null} */\nlet url = null;\n\nif (!is_local && !resolved_test_path) {\n\ttry {\n\t\turl = new URL(url_arg);\n\t} catch (e) {\n\t\tconsole.error(`${url_arg} is not a valid URL or local directory`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/**\n * Check if URL is a GitHub repository URL\n * @param {URL} url\n * @returns {boolean}\n */\nfunction is_github_url(url) {\n\treturn url.hostname === 'github.com' && url.pathname.split('/').filter(Boolean).length >= 2;\n}\n\n/**\n * Check if URL is a StackBlitz GitHub project URL\n * @param {URL} url\n * @returns {boolean}\n */\nfunction is_stackblitz_github_url(url) {\n\treturn url.hostname === 'stackblitz.com' && url.pathname.startsWith('/github/');\n}\n\n/**\n * Check if URL is a StackBlitz edit project URL (non-GitHub)\n * @param {URL} url\n * @returns {boolean}\n */\nfunction is_stackblitz_edit_url(url) {\n\treturn url.hostname === 'stackblitz.com' && url.pathname.startsWith('/edit/');\n}\n\n/**\n * Extract GitHub repo info from a StackBlitz GitHub URL\n * @param {URL} url\n * @returns {{ owner: string, repo: string, path?: string }}\n */\nfunction extract_stackblitz_github_info(url) {\n\t// URL format: /github/owner/repo or /github/owner/repo/tree/branch/path\n\tconst parts = url.pathname.split('/').filter(Boolean);\n\t// parts[0] = 'github', parts[1] = owner, parts[2] = repo\n\treturn {\n\t\towner: parts[1],\n\t\trepo: parts[2],\n\t\tpath: parts.length > 3 ? parts.slice(3).join('/') : undefined\n\t};\n}\n\n/**\n * Clone a GitHub repository to a temporary directory\n * @param {URL} url\n * @param {string} target_dir\n */\nfunction clone_github_repo(url, target_dir) {\n\t// Extract repo URL (handle both https://github.com/owner/repo and https://github.com/owner/repo/tree/branch/path)\n\tconst parts = url.pathname.split('/').filter(Boolean);\n\tconst owner = parts[0];\n\tconst repo = parts[1];\n\tconst repo_url = `https://github.com/${owner}/${repo}.git`;\n\n\tconsole.log(`Cloning ${repo_url}...`);\n\texecSync(`git clone --depth 1 ${repo_url} \"${target_dir}\"`, { stdio: 'inherit' });\n}\n\n/**\n * Clone a StackBlitz GitHub project to a temporary directory\n * (Converts to regular GitHub clone)\n * @param {URL} url\n * @param {string} target_dir\n */\nfunction clone_stackblitz_github_project(url, target_dir) {\n\tconst info = extract_stackblitz_github_info(url);\n\tconst repo_url = `https://github.com/${info.owner}/${info.repo}.git`;\n\n\tconsole.log(`StackBlitz GitHub project detected, cloning from ${repo_url}...`);\n\n\texecSync(`git clone --depth 1 ${repo_url} \"${target_dir}\"`, { stdio: 'inherit' });\n}\n\n/**\n * Download a StackBlitz project using browser automation\n * @param {URL} url\n * @param {string} target_dir\n */\nasync function download_stackblitz_project(url, target_dir) {\n\tconsole.log(`Downloading StackBlitz project via browser automation...`);\n\tconsole.log(`URL: ${url.href}`);\n\n\tconst browser = await chromium.launch({ headless: true });\n\tconst context = await browser.newContext({ acceptDownloads: true });\n\tconst page = await context.newPage();\n\n\ttry {\n\t\t// Navigate to the StackBlitz project\n\t\tconsole.log('Loading StackBlitz project (this may take a moment)...');\n\t\tawait page.goto(url.href, { waitUntil: 'domcontentloaded', timeout: 20000 });\n\n\t\t// Set up download handler\n\t\tconst downloadPromise = page.waitForEvent('download', { timeout: 30000 });\n\t\tawait page.locator('button[aria-label*=\"Download Project\" i]', { timeout: 30000 }).click();\n\t\tconsole.log('Triggering download...');\n\n\t\t// Wait for the download to start\n\t\tconst download = await downloadPromise;\n\n\t\t// Save the downloaded file\n\t\tconst zip_path = path.join(target_dir, 'project.zip');\n\t\tawait download.saveAs(zip_path);\n\n\t\tconsole.log('Download complete, extracting...');\n\n\t\t// Extract the zip file\n\t\tif (process.platform === 'win32') {\n\t\t\texecSync(\n\t\t\t\t`powershell -Command \"Expand-Archive -Path '${zip_path}' -DestinationPath '${target_dir}' -Force\"`,\n\t\t\t\t{ stdio: 'inherit' }\n\t\t\t);\n\t\t} else {\n\t\t\texecSync(`unzip -o \"${zip_path}\" -d \"${target_dir}\"`, { stdio: 'inherit' });\n\t\t}\n\n\t\t// Remove the zip file\n\t\tfs.unlinkSync(zip_path);\n\n\t\t// Check if files were extracted into a subdirectory\n\t\tconst entries = fs.readdirSync(target_dir);\n\t\tif (entries.length === 1) {\n\t\t\tconst subdir = path.join(target_dir, entries[0]);\n\t\t\tif (fs.statSync(subdir).isDirectory()) {\n\t\t\t\t// Move files from subdirectory to target_dir\n\t\t\t\tconst subentries = fs.readdirSync(subdir);\n\t\t\t\tfor (const entry of subentries) {\n\t\t\t\t\tfs.renameSync(path.join(subdir, entry), path.join(target_dir, entry));\n\t\t\t\t}\n\t\t\t\tfs.rmdirSync(subdir);\n\t\t\t}\n\t\t}\n\n\t\tconsole.log('StackBlitz project downloaded successfully');\n\t} finally {\n\t\tawait browser.close();\n\t}\n}\n\n/**\n * Recursively get all files in a directory\n * @param {string} dir\n * @param {string} base\n * @returns {Array<{path: string, name: string, contents: string}>}\n */\nfunction get_all_files(dir, base = '') {\n\t/** @type {Array<{path: string, name: string, contents: string}>} */\n\tconst results = [];\n\n\tif (!fs.existsSync(dir)) return results;\n\n\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst full_path = path.join(dir, entry.name);\n\t\tconst relative_path = base ? `${base}/${entry.name}` : entry.name;\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Skip node_modules, .git, etc.\n\t\t\tif (['node_modules', '.git', '.svelte-kit', 'build', 'dist'].includes(entry.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresults.push(...get_all_files(full_path, relative_path));\n\t\t} else if (\n\t\t\tentry.name.endsWith('.svelte') ||\n\t\t\tentry.name.endsWith('.js') ||\n\t\t\tentry.name.endsWith('.ts')\n\t\t) {\n\t\t\tresults.push({\n\t\t\t\tpath: relative_path,\n\t\t\t\tname: entry.name,\n\t\t\t\tcontents: fs.readFileSync(full_path, 'utf-8')\n\t\t\t});\n\t\t}\n\t}\n\n\treturn results;\n}\n\n/**\n * Detect project type from files\n * @param {Array<{path: string, name: string, contents: string}>} files\n * @returns {{ type: 'sveltekit' | 'vite', has_app_imports: boolean, has_page_svelte: boolean }}\n */\nfunction detect_project_type(files) {\n\tlet has_app_imports = false;\n\tlet has_page_svelte = false;\n\n\tfor (const file of files) {\n\t\t// Check for $app/* imports\n\t\tif (/from\\s+['\"](\\$app\\/[^'\"]+)['\"]/.test(file.contents)) {\n\t\t\thas_app_imports = true;\n\t\t}\n\t\t// Check for +page.svelte or +layout.svelte\n\t\tif (file.name === '+page.svelte' || file.name === '+layout.svelte') {\n\t\t\thas_page_svelte = true;\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: has_page_svelte ? 'sveltekit' : 'vite',\n\t\thas_app_imports,\n\t\thas_page_svelte\n\t};\n}\n\n/**\n * Convert a route path to a PascalCase component name\n * @param {string} route_path - e.g., \"about\", \"blog/post\"\n * @returns {string} - e.g., \"About\", \"BlogPost\"\n */\nfunction route_to_component_name(route_path) {\n\tif (!route_path || route_path === '') return 'Page';\n\n\treturn route_path\n\t\t.split('/')\n\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t.join('');\n}\n\n/**\n * Transform $lib/* imports to relative imports (flattened)\n * @param {string} content\n * @returns {string}\n */\nfunction transform_lib_imports(content) {\n\t// Replace $lib/ imports with relative paths to flattened files\n\treturn content.replace(/from\\s+['\"](\\$lib\\/[^'\"]+)['\"]/g, (match, import_path) => {\n\t\t// Get just the filename from the lib path\n\t\tconst lib_path = import_path.replace('$lib/', '');\n\t\tconst filename = path.basename(lib_path);\n\t\treturn `from './${filename}'`;\n\t});\n}\n\n/**\n * Build the route tree from SvelteKit files\n * @param {Array<{path: string, name: string, contents: string}>} files\n * @param {string} routes_prefix - e.g., \"src/routes\"\n * @returns {Map<string, {layout?: {path: string, contents: string}, page?: {path: string, contents: string}}>}\n */\nfunction build_route_tree(files, routes_prefix) {\n\t/** @type {Map<string, {layout?: {path: string, contents: string}, page?: {path: string, contents: string}}>} */\n\tconst routes = new Map();\n\n\tfor (const file of files) {\n\t\tif (!file.path.startsWith(routes_prefix)) continue;\n\n\t\tconst relative_to_routes = file.path.slice(routes_prefix.length + 1); // +1 for the slash\n\t\tconst dir = path.dirname(relative_to_routes);\n\t\tconst route_key = dir === '.' ? '' : dir;\n\n\t\tif (!routes.has(route_key)) {\n\t\t\troutes.set(route_key, {});\n\t\t}\n\n\t\tconst route = routes.get(route_key);\n\t\tif (file.name === '+layout.svelte') {\n\t\t\troute.layout = { path: file.path, contents: file.contents };\n\t\t} else if (file.name === '+page.svelte') {\n\t\t\troute.page = { path: file.path, contents: file.contents };\n\t\t}\n\t}\n\n\treturn routes;\n}\n\n/**\n * Get child routes of a given route\n * @param {Map<string, any>} routes\n * @param {string} parent_route\n * @returns {string[]}\n */\nfunction get_child_routes(routes, parent_route) {\n\tconst children = [];\n\tfor (const route of routes.keys()) {\n\t\tif (route === parent_route) continue;\n\n\t\tconst parent_prefix = parent_route === '' ? '' : parent_route + '/';\n\t\tif (\n\t\t\tparent_route === ''\n\t\t\t\t? !route.includes('/')\n\t\t\t\t: route.startsWith(parent_prefix) && !route.slice(parent_prefix.length).includes('/')\n\t\t) {\n\t\t\tchildren.push(route);\n\t\t}\n\t}\n\treturn children;\n}\n\n/**\n * Transform a layout file's content to replace {@render children()} with a component\n * @param {string} content\n * @param {string} child_component_name\n * @returns {string}\n */\nfunction transform_layout_content(content, child_component_name) {\n\t// Add import for the child component at the top of the script\n\tconst import_statement = `import ${child_component_name} from './${child_component_name}.svelte';`;\n\n\t// Check if there's already a script tag\n\tif (/<script[^>]*>/.test(content)) {\n\t\t// Add import after the opening script tag\n\t\tcontent = content.replace(/(<script[^>]*>)/, `$1\\n\\t${import_statement}`);\n\t} else {\n\t\t// Add a new script block at the beginning\n\t\tcontent = `<script>\\n\\t${import_statement}\\n</script>\\n\\n${content}`;\n\t}\n\n\t// Replace {@render children()} or {@render children?.()} with the component\n\tcontent = content.replace(/\\{@render\\s+children\\?\\.\\(\\)\\}/g, `<${child_component_name} />`);\n\tcontent = content.replace(/\\{@render\\s+children\\(\\)\\}/g, `<${child_component_name} />`);\n\n\treturn content;\n}\n\n/**\n * Convert a SvelteKit project to plain Svelte components\n * @param {string} repo_dir\n * @returns {Array<{name: string, contents: string}>}\n */\nfunction convert_sveltekit_project(repo_dir) {\n\tconst all_files = get_all_files(repo_dir);\n\t/** @type {Array<{name: string, contents: string}>} */\n\tconst output_files = [];\n\n\t// Find the routes directory\n\tlet routes_prefix = '';\n\tfor (const file of all_files) {\n\t\tif (file.path.includes('src/routes/')) {\n\t\t\troutes_prefix = 'src/routes';\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!routes_prefix) {\n\t\tconsole.error('Could not find src/routes directory');\n\t\tprocess.exit(1);\n\t}\n\n\t// Build route tree\n\tconst routes = build_route_tree(all_files, routes_prefix);\n\n\t// Process lib files - flatten them to root level\n\tconst lib_files = all_files.filter((f) => f.path.startsWith('src/lib/'));\n\tfor (const file of lib_files) {\n\t\t// Flatten to just the filename\n\t\tconst new_path = path.basename(file.path);\n\t\tlet contents = file.contents;\n\t\tcontents = transform_lib_imports(contents);\n\t\toutput_files.push({\n\t\t\tname: new_path,\n\t\t\tcontents\n\t\t});\n\t}\n\n\t// Sort routes by depth (deepest first) so we can process children before parents\n\tconst sorted_routes = [...routes.keys()].sort((a, b) => {\n\t\tconst depth_a = a === '' ? 0 : a.split('/').length;\n\t\tconst depth_b = b === '' ? 0 : b.split('/').length;\n\t\treturn depth_b - depth_a;\n\t});\n\n\t// Map to store what component each route renders\n\t/** @type {Map<string, string>} */\n\tconst route_component_map = new Map();\n\n\t// First pass: convert all pages\n\tfor (const route_key of sorted_routes) {\n\t\tconst route = routes.get(route_key);\n\t\tif (route?.page) {\n\t\t\tconst component_name = route_to_component_name(route_key);\n\t\t\tlet contents = route.page.contents;\n\t\t\tcontents = transform_lib_imports(contents);\n\t\t\toutput_files.push({\n\t\t\t\tname: `${component_name}.svelte`,\n\t\t\t\tcontents\n\t\t\t});\n\t\t\t// If no layout, this is what the route renders\n\t\t\tif (!route.layout) {\n\t\t\t\troute_component_map.set(route_key, component_name);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Second pass: convert layouts (from deepest to root)\n\tfor (const route_key of sorted_routes) {\n\t\tconst route = routes.get(route_key);\n\t\tif (route?.layout) {\n\t\t\tconst is_root = route_key === '';\n\t\t\tconst component_name = is_root ? 'App' : route_to_component_name(route_key) + 'Layout';\n\n\t\t\t// Determine what child component this layout should render\n\t\t\tlet child_component = '';\n\n\t\t\t// Check if there's a page at this route level\n\t\t\tif (route.page) {\n\t\t\t\tchild_component = route_to_component_name(route_key);\n\t\t\t} else {\n\t\t\t\t// Find child routes that have content\n\t\t\t\tconst children = get_child_routes(routes, route_key);\n\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t// Use the first child's component (or its layout if it has one)\n\t\t\t\t\tconst first_child = children[0];\n\t\t\t\t\tchild_component =\n\t\t\t\t\t\troute_component_map.get(first_child) || route_to_component_name(first_child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet contents = route.layout.contents;\n\t\t\tcontents = transform_lib_imports(contents);\n\n\t\t\tif (child_component) {\n\t\t\t\tcontents = transform_layout_content(contents, child_component);\n\t\t\t} else {\n\t\t\t\t// No child, just remove {@render children()} or {@render children?.()}\n\t\t\t\tcontents = contents.replace(/\\{@render\\s+children\\?\\.\\(\\)\\}/g, '<!-- no child content -->');\n\t\t\t\tcontents = contents.replace(/\\{@render\\s+children\\(\\)\\}/g, '<!-- no child content -->');\n\t\t\t}\n\n\t\t\toutput_files.push({\n\t\t\t\tname: `${component_name}.svelte`,\n\t\t\t\tcontents\n\t\t\t});\n\n\t\t\t// This route now renders the layout\n\t\t\troute_component_map.set(route_key, component_name);\n\t\t}\n\t}\n\n\t// If there's no root layout but there's a root page, rename it to App.svelte\n\tif (!routes.get('')?.layout && routes.get('')?.page) {\n\t\tconst page_index = output_files.findIndex((f) => f.name === 'Page.svelte');\n\t\tif (page_index !== -1) {\n\t\t\toutput_files[page_index].name = 'App.svelte';\n\t\t}\n\t}\n\n\t// If there's no App.svelte yet, create one that imports the first available component\n\tif (!output_files.some((f) => f.name === 'App.svelte')) {\n\t\tconst first_component = output_files.find(\n\t\t\t(f) => f.name.endsWith('.svelte') && !f.name.includes('/')\n\t\t);\n\t\tif (first_component) {\n\t\t\tconst comp_name = first_component.name.replace('.svelte', '');\n\t\t\toutput_files.push({\n\t\t\t\tname: 'App.svelte',\n\t\t\t\tcontents: `<script>\\n\\timport ${comp_name} from './${first_component.name}';\\n</script>\\n\\n<${comp_name} />\\n`\n\t\t\t});\n\t\t}\n\t}\n\n\treturn output_files;\n}\n\n/**\n * Convert a regular Vite+Svelte project\n * @param {string} repo_dir\n * @returns {Array<{name: string, contents: string}>}\n */\nfunction convert_vite_project(repo_dir) {\n\tconst all_files = get_all_files(repo_dir);\n\t/** @type {Array<{name: string, contents: string}>} */\n\tconst output_files = [];\n\n\t// Find src directory\n\tconst src_files = all_files.filter(\n\t\t(f) =>\n\t\t\tf.path.startsWith('src/') &&\n\t\t\t(f.name.endsWith('.svelte') || f.name.endsWith('.js') || f.name.endsWith('.ts'))\n\t);\n\n\tfor (const file of src_files) {\n\t\t// Flatten all files to root level (just the filename)\n\t\tconst new_path = path.basename(file.path);\n\n\t\tlet contents = file.contents;\n\t\tcontents = transform_lib_imports(contents);\n\n\t\toutput_files.push({\n\t\t\tname: new_path,\n\t\t\tcontents\n\t\t});\n\t}\n\n\treturn output_files;\n}\n\n/**\n * Process a local or cloned directory\n * @param {string} dir_path\n * @returns {Array<{name: string, contents: string}>}\n */\nfunction process_directory(dir_path) {\n\tconst all_files = get_all_files(dir_path);\n\tconst project_info = detect_project_type(all_files);\n\n\tconsole.log(`Detected project type: ${project_info.type}`);\n\n\t// Check for $app/* imports\n\tif (project_info.has_app_imports) {\n\t\tconsole.error('Error: This SvelteKit project uses $app/* imports which cannot be converted.');\n\t\tconsole.error('The playground does not support SvelteKit runtime features.');\n\t\tprocess.exit(1);\n\t}\n\n\t// Convert based on project type\n\tif (project_info.type === 'sveltekit') {\n\t\tconsole.log('Converting SvelteKit project to plain Svelte...');\n\t\treturn convert_sveltekit_project(dir_path);\n\t} else {\n\t\tconsole.log('Processing Vite+Svelte project...');\n\t\treturn convert_vite_project(dir_path);\n\t}\n}\n\n/**\n * Reset a directory so it exists and is empty\n * @param {string} dir_path\n */\n/**\n * Create a temporary directory, run an action, and always clean up\n * @param {string} base_dir\n * @param {(dir: string) => void | Promise<void>} action\n */\nasync function with_tmp_dir(base_dir, action) {\n\tconst tmp_dir = path.join(base_dir, '.tmp-repo');\n\n\ttry {\n\t\tif (fs.existsSync(tmp_dir)) {\n\t\t\tfs.rmSync(tmp_dir, { recursive: true, force: true });\n\t\t}\n\t\tfs.mkdirSync(tmp_dir, { recursive: true });\n\t\tawait action(tmp_dir);\n\t} finally {\n\t\tif (fs.existsSync(tmp_dir)) {\n\t\t\tfs.rmSync(tmp_dir, { recursive: true, force: true });\n\t\t}\n\t}\n}\n\n// Main logic\nlet files;\n\n// Check if it's a local directory first (before URL parsing)\nif (is_local) {\n\tconsole.log(`Processing local directory: ${url_arg}`);\n\tfiles = process_directory(url_arg);\n} else if (resolved_test_path) {\n\t// Copy files from test\n\tconsole.log(`Processing test ${url_arg}`);\n\tfiles = get_all_files(resolved_test_path)\n\t\t.filter((file) => !file.path.includes('_'))\n\t\t.map((file) => {\n\t\t\treturn {\n\t\t\t\tname: file.name === 'main.svelte' ? 'App.svelte' : file.name,\n\t\t\t\tcontents: file.contents\n\t\t\t};\n\t\t});\n} else if (url && is_github_url(url)) {\n\t// GitHub repository handling\n\tawait with_tmp_dir(base_dir, (tmp_dir) => {\n\t\tclone_github_repo(url, tmp_dir);\n\t\tfiles = process_directory(tmp_dir);\n\t});\n} else if (url && is_stackblitz_github_url(url)) {\n\t// StackBlitz GitHub project handling (redirect to GitHub clone)\n\tawait with_tmp_dir(base_dir, (tmp_dir) => {\n\t\tclone_stackblitz_github_project(url, tmp_dir);\n\t\tfiles = process_directory(tmp_dir);\n\t});\n} else if (url && is_stackblitz_edit_url(url)) {\n\t// StackBlitz edit URLs - use browser automation to download\n\tawait with_tmp_dir(base_dir, async (tmp_dir) => {\n\t\tawait download_stackblitz_project(url, tmp_dir);\n\t\tfiles = process_directory(tmp_dir);\n\t});\n} else if (url && url.origin === 'https://svelte.dev' && url.pathname.startsWith('/playground/')) {\n\t// Svelte playground URL handling (existing logic)\n\tif (url.hash.length > 1) {\n\t\t// Decode percent-encoded characters (e.g., %5F => _), and replace base64 chars.\n\t\tlet decoded;\n\t\ttry {\n\t\t\t// First, decode URI components to handle %xx encodings (e.g. %5F -> _) (LLMs calling this script sometimes encode them for some reason)\n\t\t\tdecoded = url.hash.slice(1);\n\t\t\tdecoded = decodeURIComponent(decoded);\n\n\t\t\t// Now, restore for base64 (replace -/+, _/ /)\n\t\t\tdecoded = atob(decoded.replaceAll('-', '+').replaceAll('_', '/'));\n\t\t} catch (e) {\n\t\t\tconsole.error('Failed to decode URL hash:', e);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\t// putting it directly into the blob gives a corrupted file\n\t\tconst u8 = new Uint8Array(decoded.length);\n\t\tfor (let i = 0; i < decoded.length; i++) {\n\t\t\tu8[i] = decoded.charCodeAt(i);\n\t\t}\n\t\tconst stream = new Blob([u8]).stream().pipeThrough(new DecompressionStream('gzip'));\n\t\tconst json = await new Response(stream).text();\n\n\t\tfiles = JSON.parse(json).files;\n\t} else {\n\t\tconst id = url.pathname.split('/')[2];\n\t\tconst response = await fetch(`https://svelte.dev/playground/api/${id}.json`);\n\n\t\tfiles = (await response.json()).components.map((data) => {\n\t\t\tconst basename = `${data.name}.${data.type}`;\n\n\t\t\treturn {\n\t\t\t\ttype: 'file',\n\t\t\t\tname: basename,\n\t\t\t\tbasename,\n\t\t\t\tcontents: data.source,\n\t\t\t\ttext: true\n\t\t\t};\n\t\t});\n\t}\n} else {\n\tconsole.error(\n\t\t`${url_arg} is not a supported URL (Svelte playground, GitHub repository, or StackBlitz project)`\n\t);\n\tprocess.exit(1);\n}\n\n// Output files\nif (create_test_name) {\n\tconst test_parts = create_test_name.split('/').filter(Boolean);\n\n\tif (test_parts.length > 2) {\n\t\tconsole.error(\n\t\t\t`Invalid test name \"${create_test_name}\". Expected e.g. \"hello-world\" or \"runtime-legacy/hello-world\"`\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\tconst suite_name = test_parts.length === 2 ? test_parts[0] : 'runtime-runes';\n\tconst test_name = test_parts[test_parts.length - 1];\n\n\tconst output_dir = path.join(\n\t\tbase_dir,\n\t\t'../../..',\n\t\t'packages/svelte/tests',\n\t\tsuite_name,\n\t\t'samples',\n\t\ttest_name\n\t);\n\tif (fs.existsSync(output_dir)) {\n\t\tconsole.warn(`Test folder \"${output_dir}\" already exists, overriding its contents`);\n\t\tfs.rmSync(output_dir, { recursive: true, force: true });\n\t}\n\tfs.mkdirSync(output_dir, { recursive: true });\n\n\tfor (const file of files) {\n\t\tconst output_name = file.name === 'App.svelte' ? 'main.svelte' : file.name;\n\t\tconst output_path = path.join(output_dir, output_name);\n\n\t\tfs.mkdirSync(path.dirname(output_path), { recursive: true });\n\t\tfs.writeFileSync(output_path, file.contents);\n\t}\n\n\tfs.writeFileSync(\n\t\tpath.join(output_dir, '_config.js'),\n\t\t`import { test } from '../../test';\n\nexport default test({\n\tasync test({ assert, target }) {\n\t}\n});\n`\n\t);\n\n\tconsole.log(`Test created at ${output_dir}`);\n} else {\n\tfor (const file of files) {\n\t\tconst output_path = path.join(base_dir, '..', 'src', file.name);\n\t\tfs.mkdirSync(path.dirname(output_path), { recursive: true });\n\t\tfs.writeFileSync(output_path, file.contents);\n\t}\n\n\tconsole.log(`Files written to ${path.join(base_dir, '..', 'src')}`);\n}\n"
  },
  {
    "path": "playgrounds/sandbox/scripts/hash.js",
    "content": "import fs from 'node:fs';\n\n/**\n * Detects if a file is text or binary by checking for null bytes\n * and validating UTF-8 encoding\n * @param {string} filepath - Path to the file\n * @returns {boolean} - true if file is text, false if binary\n */\nfunction is_text_file(filepath) {\n\tconst buffer = fs.readFileSync(filepath);\n\t// Check for null bytes which indicate binary files\n\tfor (let i = 0; i < buffer.length; i++) {\n\t\tif (buffer[i] === 0) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Validate UTF-8 encoding\n\ttry {\n\t\tconst text = buffer.toString('utf-8');\n\t\t// Verify round-trip encoding to ensure valid UTF-8\n\t\tconst encoded = Buffer.from(text, 'utf-8');\n\t\treturn buffer.equals(encoded);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nconst files = [];\n\nfor (const basename of fs.readdirSync('src')) {\n\tif (fs.statSync(`src/${basename}`).isDirectory()) continue;\n\n\tconst filepath = `src/${basename}`;\n\tconst text = is_text_file(filepath);\n\n\tfiles.push({\n\t\ttype: 'file',\n\t\tname: basename,\n\t\tbasename,\n\t\tcontents: fs.readFileSync(filepath, text ? 'utf-8' : 'base64'),\n\t\ttext\n\t});\n}\n\nconst payload = JSON.stringify({\n\tname: 'sandbox',\n\tfiles\n});\n\nasync function compress(payload) {\n\tconst reader = new Blob([payload])\n\t\t.stream()\n\t\t.pipeThrough(new CompressionStream('gzip'))\n\t\t.getReader();\n\n\tlet buffer = '';\n\tfor (;;) {\n\t\tconst { done, value } = await reader.read();\n\n\t\tif (done) {\n\t\t\treader.releaseLock();\n\t\t\treturn btoa(buffer).replaceAll('+', '-').replaceAll('/', '_');\n\t\t} else {\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t// decoding as utf-8 will make btoa reject the string\n\t\t\t\tbuffer += String.fromCharCode(value[i]);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst hash = await compress(payload);\nconsole.log(`https://svelte.dev/playground/untitled#${hash}`);\n"
  },
  {
    "path": "playgrounds/sandbox/scripts/main.template.svelte",
    "content": "<script lang=\"ts\">\n\tfunction openInEditor() {\n\t\tfetch('./__open-in-editor?file=src/main.svelte');\n\t}\n</script>\n\n<h1>Demo App</h1>\n<button class=\"open-in-editor\" on:click={openInEditor}>edit main.svelte</button>\n"
  },
  {
    "path": "playgrounds/sandbox/ssr-common.js",
    "content": "Promise.withResolvers ??= () => {\n\tlet resolve;\n\tlet reject;\n\n\tconst promise = new Promise((f, r) => {\n\t\tresolve = f;\n\t\treject = r;\n\t});\n\n\treturn { promise, resolve, reject };\n};\n\nglobalThis.delayed = (v, ms = 1000) => {\n\treturn new Promise((f) => {\n\t\tsetTimeout(() => f(v), ms);\n\t});\n};\n"
  },
  {
    "path": "playgrounds/sandbox/ssr-dev.js",
    "content": "// @ts-check\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport polka from 'polka';\nimport { createServer as createViteServer } from 'vite';\nimport './ssr-common.js';\n\nconst PORT = process.env.PORT || '5173';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nprocess.env.NODE_ENV = 'development';\n\nconst vite = await createViteServer({\n\tserver: { middlewareMode: true },\n\tappType: 'custom'\n});\n\npolka()\n\t.use(vite.middlewares)\n\t.use(async (req, res) => {\n\t\tconst template = fs.readFileSync(path.resolve(__dirname, 'index.html'), 'utf-8');\n\t\tconst transformed_template = await vite.transformIndexHtml(req.url, template);\n\n\t\tconst { render } = await vite.ssrLoadModule('svelte/server');\n\t\tconst { default: App } = await vite.ssrLoadModule('/src/App.svelte');\n\n\t\tconst { head, body } = await render(App);\n\n\t\tconst html = transformed_template\n\t\t\t.replace(`<!--ssr-head-->`, head)\n\t\t\t.replace(`<!--ssr-body-->`, body)\n\t\t\t// check that Safari doesn't break hydration\n\t\t\t.replaceAll('+636-555-3226', '<a href=\"tel:+636-555-3226\">+636-555-3226</a>');\n\n\t\tres.writeHead(200, { 'Content-Type': 'text/html' }).end(html);\n\t})\n\t.listen(PORT, () => {\n\t\tconsole.log(`http://localhost:${PORT}`);\n\t});\n"
  },
  {
    "path": "playgrounds/sandbox/ssr-prod.js",
    "content": "import fs from 'node:fs';\nimport path from 'node:path';\nimport polka from 'polka';\nimport { render } from 'svelte/server';\nimport App from './src/App.svelte';\nimport './ssr-common.js';\n\nconst { head, body } = await render(App);\n\nconst rendered = fs\n\t.readFileSync(path.resolve('./dist/client/index.html'), 'utf-8')\n\t.replace(`<!--ssr-body-->`, body)\n\t.replace(`<!--ssr-head-->`, head);\n\nconst types = {\n\t'.js': 'application/javascript',\n\t'.css': 'text/css'\n};\n\npolka()\n\t.use((req, res) => {\n\t\tif (req.url === '/') {\n\t\t\tres.writeHead(200, { 'content-type': 'text/html' });\n\t\t\tres.end(rendered);\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = path.resolve('./dist/client' + req.url);\n\n\t\tif (fs.existsSync(file)) {\n\t\t\tconst type = types[path.extname(req.url)] ?? 'application/octet-stream';\n\t\t\tres.writeHead(200, { 'content-type': type });\n\t\t\tfs.createReadStream(file).pipe(res);\n\t\t\treturn;\n\t\t}\n\n\t\tres.writeHead(404);\n\t\tres.end('not found');\n\t})\n\t.listen('3000');\n\nconsole.log('listening on http://localhost:3000');\n"
  },
  {
    "path": "playgrounds/sandbox/svelte.config.js",
    "content": "export default {\n\t/** @type {import('svelte/compiler').CompileOptions} */\n\tcompilerOptions: {\n\t\tcss: 'injected',\n\n\t\thmr: false,\n\n\t\texperimental: {\n\t\t\tasync: true\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "playgrounds/sandbox/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"moduleResolution\": \"Bundler\",\n\t\t\"target\": \"ESNext\",\n\t\t\"module\": \"ESNext\",\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"sourceMap\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true\n\t},\n\t\"include\": [\"./src\", \"ssr-dev.js\", \"ssr-prod.js\"]\n}\n"
  },
  {
    "path": "playgrounds/sandbox/vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport inspect from 'vite-plugin-inspect';\nimport { svelte } from '@sveltejs/vite-plugin-svelte';\nimport devtools from 'vite-plugin-devtools-json';\n\nexport default defineConfig({\n\tbuild: {\n\t\tminify: false\n\t},\n\n\tplugins: [devtools(), inspect(), svelte()],\n\n\toptimizeDeps: {\n\t\t// svelte is a local workspace package, optimizing it would require dev server restarts with --force for every change\n\t\texclude: ['svelte']\n\t}\n});\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n  - 'packages/*'\n  - 'playgrounds/*'\n"
  },
  {
    "path": "svelte.config.js",
    "content": "// we need this so the VS Code extension doesn't yell at us\nexport default {\n\tcompilerOptions: {\n\t\texperimental: {\n\t\t\tasync: true\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "vitest-xhtml-environment.ts",
    "content": "import { type Environment, builtinEnvironments } from 'vitest/environments';\n\nconst xhtml_page = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.0//EN\" \"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body></body></html>`;\n\nexport default <Environment>{\n\tname: 'jsdom-xhtml',\n\ttransformMode: 'web',\n\tsetup(global, { jsdom = {} }) {\n\t\treturn builtinEnvironments.jsdom.setup(global, {\n\t\t\tjsdom: {\n\t\t\t\t...jsdom,\n\t\t\t\thtml: xhtml_page,\n\t\t\t\tcontentType: 'application/xhtml+xml'\n\t\t\t}\n\t\t});\n\t}\n};\n"
  },
  {
    "path": "vitest.config.js",
    "content": "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { configDefaults, defineConfig } from 'vitest/config';\n\nconst pkg = JSON.parse(fs.readFileSync('packages/svelte/package.json', 'utf8'));\n\nexport default defineConfig({\n\tresolve: {\n\t\talias: [\n\t\t\t{\n\t\t\t\tfind: /^svelte\\/?/,\n\t\t\t\tcustomResolver: (id, importer) => {\n\t\t\t\t\t// For some reason this turns up as \"undefined\" instead of \"svelte/\"\n\t\t\t\t\tconst exported = pkg.exports[id === 'undefined' ? '.' : id.replace('undefined', './')];\n\t\t\t\t\tif (!exported) return;\n\n\t\t\t\t\t// When running the server version of the Svelte files,\n\t\t\t\t\t// we also want to use the server export of the Svelte package\n\t\t\t\t\treturn path.resolve(\n\t\t\t\t\t\t'packages/svelte',\n\t\t\t\t\t\timporter?.includes('_output/server')\n\t\t\t\t\t\t\t? exported.default\n\t\t\t\t\t\t\t: exported.browser ?? exported.default\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\ttest: {\n\t\tdir: '.',\n\t\treporters: ['dot'],\n\t\tinclude: [\n\t\t\t'packages/svelte/**/*.test.ts',\n\t\t\t'packages/svelte/tests/*/test.ts',\n\t\t\t'packages/svelte/tests/runtime-browser/test-ssr.ts'\n\t\t],\n\t\texclude: [...configDefaults.exclude, '**/samples/**'],\n\t\tcoverage: {\n\t\t\tprovider: 'v8',\n\t\t\treporter: ['lcov', 'html'],\n\t\t\tinclude: ['packages/svelte/src/**'],\n\t\t\treportsDirectory: 'coverage',\n\t\t\treportOnFailure: true\n\t\t}\n\t}\n});\n"
  }
]